API Docs
Company-scoped public API for creating customers via X-Api-Key.
Authentication
- Send the API key in header
X-Api-Key. - The company is resolved automatically from the key (no company-id header required).
- Keys are shown once when created. Rotate by creating a new key and revoking the old one.
Endpoints
| Method | Path | Content-Type | Response |
|---|---|---|---|
| POST | /api/public/customers | application/json | 201 { customerId, documentIds } |
| POST | /api/public/customers | multipart/form-data | 201 { customerId, documentIds } |
| POST | /api/public/customers/ai-create | multipart/form-data | 200 { customerId, analysis } |
| POST | /api/public/transactions | application/json | 200 { transactionId, externalTransactionId, participantCustomerIds, riskScore, riskLevel } |
Create customer (JSON)
Required: type. Recommended: externalId.
curl -X POST "$API_BASE/api/public/customers" \
-H "X-Api-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"externalId": "crm-123",
"type": "Individual",
"fullName": "Jane Doe",
"email": "jane@example.com",
"country": "US",
"dateOfBirth": "1990-01-01",
"isPep": false,
"customFieldValues": [
{ "fieldDefinitionId": "GUID", "value": "Example" }
]
}'Response
201:{ "customerId": "GUID", "documentIds": [] }Create customer (multipart + documents)
- Include
customer(JSON string) in the form body. - If you upload files, also include
documentsMetaas a JSON array with the same length and order as the files.
curl -X POST "$API_BASE/api/public/customers" \
-H "X-Api-Key: YOUR_KEY" \
-F "customer={\"externalId\":\"crm-123\",\"type\":\"Individual\",\"fullName\":\"Jane Doe\"}" \
-F "documentsMeta=[{\"documentTypeId\":\"GUID\",\"documentCategoryId\":null}]" \
-F "file=@passport.jpg"Response
201:{ "customerId": "GUID", "documentIds": ["GUID"] }Create customer from images (AI)
Upload 1–2 images. The API runs AI extraction and creates the customer + stores a document.
curl -X POST "$API_BASE/api/public/customers/ai-create" \ -H "X-Api-Key: YOUR_KEY" \ -F "files=@front.jpg" \ -F "files=@back.jpg"
Request requirements
- Required:
type - If type = Business:
businessNameis required. - If type = Individual:
fullNameis required. - Recommended:
externalId(lets you safely retry without duplicates).
Create customer (JSON) — full field reference
| Field | Type | Required | Meaning |
|---|---|---|---|
externalId | string | No (recommended) | Your system ID. Used for duplicate prevention within the same company. |
type | "Individual" | "Business" | YES | Customer type (case-insensitive). |
businessName | string | Yes (if Business) | Business/company name (required when type = Business). |
dba | string | No | Doing business as name. |
givenName | string | No | First name. |
middleName | string | No | Middle name(s). |
familyName | string | No | Last name/surname. |
fullName | string | Yes (if Individual) | Full display name (required when type = Individual). |
legalName | string | No | Legal name (individual or business). |
dateOfBirth | YYYY-MM-DD | No | Date of birth (DateOnly). |
placeOfBirth | string | No | Place of birth. |
nationality | string | No | Nationality (free-form; often country name/ISO code). |
governmentId | string | No | Government-issued ID number. |
passportNumber | string | No | Passport number. |
taxId | string | No | Tax identifier. |
occupation | string | No | Occupation (individual). |
industry | string | No | Industry/sector. |
addressLine1 | string | No | Address line 1. |
addressLine2 | string | No | Address line 2. |
city | string | No | City. |
stateOrProvince | string | No | State/Province/Region. |
postalCode | string | No | Postal/ZIP code. |
country | string | No | Country (free-form; often country name/ISO code). |
email | string | No | Email address. |
phoneNumber | string | No | Phone number (free-form). |
riskRating | string | No | Initial risk rating label (free-form). |
isPep | boolean | No | Politically exposed person flag (defaults to false). |
customFieldValues | array | No | Array of custom field values (see next table). |
customFieldValues[] item — field reference
| Field | Type | Required | Meaning |
|---|---|---|---|
fieldDefinitionId | GUID | YES | Custom field definition ID (company-scoped). |
value | string | null | No | Value for the custom field. |
documentsMeta[] item — field reference (multipart documents)
| Field | Type | Required | Meaning |
|---|---|---|---|
documentTypeId | GUID | YES | Document type ID (company-scoped). |
documentCategoryId | GUID | null | No | Document category ID (company-scoped). |
notes | string | No | Notes saved with the document record. |
issuingCountry | string | No | Issuing country. |
issuingAuthority | string | No | Issuing authority. |
documentNumber | string | No | Document number. |
documentIssueDate | ISO datetime | No | Document issue date/time. |
documentExpirationDate | ISO datetime | No | Document expiration date/time. |
firstName | string | No | Associated first name for the document. |
middleName | string | No | Associated middle name(s). |
lastName | string | No | Associated last name(s). |
fullName | string | No | Associated full name. |
dateOfBirth | ISO datetime | No | DOB associated with the document (stored as DateTime). |
placeOfBirth | string | No | Place of birth associated with the document. |
nationality | string | No | Nationality associated with the document. |
gender | string | No | Gender associated with the document. |
alternateNames | string | No | Alternate names / aliases associated with the document. |
AI create response — extracted fields
The AI endpoint returns analysis.fields where each value is a string (or null).
customerTypefullNamegivenNamefamilyNamemiddleNamebusinessNamedbadateOfBirthnationalityaddressLine1addressLine2citystateOrProvincepostalCodecountrygovernmentIdpassportNumbertaxIdemailphoneNumberplaceOfBirthriskRatinggenderalternateNamesissuingCountryissuingAuthoritydocumentNumberdocumentIssueDatedocumentExpirationDatePublic Transactions API
Ingest transactions with participant snapshots. Complii resolves/matches customers, stores the transaction + snapshot, and calculates a transaction risk summary. Screening is executed using the selected Screening Preset (or the default preset marked as "Incoming Tx Default").
curl -X POST "$API_BASE/api/public/transactions" \
-H "X-Api-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"externalTransactionId": "CM-00012345",
"createdAtUtc": "2025-12-16T18:20:00Z",
"transactionType": "REMITTANCE",
"status": "COMPLETED",
"amount": 250.00,
"currency": "USD",
"screeningPresetId": "GUID (optional)",
"originCountry": "US",
"destinationCountry": "CO",
"participants": [
{ "role": "SENDER", "customerType": "INDIVIDUAL", "externalCustomerId": "CM-CUST-7788", "fullName": "Carlos Mendoza", "country": "US" },
{ "role": "BENEFICIARY", "customerType": "INDIVIDUAL", "fullName": "Maria Perez", "country": "CO" }
]
}'Response
200:{ "transactionId": "GUID", "externalTransactionId": "CM-00012345", "participantCustomerIds": ["GUID","GUID"], "riskScore": 30, "riskLevel": "Medium", "screeningRunId": "GUID", "screeningPresetIdUsed": "GUID", "screeningTotalMatches": 0, "screeningSuspectAlerts": 0, "participants": [{ "role": "SENDER", "customerId": "GUID", "universalCustomerIdentityId": "GUID", "customerStatus": "Exists", "matchMethod": "ExternalId" }] }Transaction (top-level) — full field reference
| Field | Type | Required | Meaning |
|---|---|---|---|
externalTransactionId | string | YES | Unique transaction id from your core system (idempotency key per company). |
externalSystem | string | No | Source system name (e.g., "ControlMoney"). |
transactionReference | string | No | Human readable reference. |
createdAtUtc | ISO datetime | YES | When the transaction was created in the source system. |
completedAtUtc | ISO datetime | No | When the transaction completed/settled. |
postedAtUtc | ISO datetime | No | When posted to ledger/core. |
transactionType | string | YES | REMITTANCE, TRANSFER, CASH_IN, CASH_OUT, WIRE, ACH, CARD, CRYPTO, WALLET, BILLPAY, OTHER. |
direction | string | No | INBOUND, OUTBOUND, INTERNAL. |
status | string | YES | PENDING, COMPLETED, CANCELLED, REJECTED, FAILED, REVERSED, REFUNDED. |
channel | string | No | ONLINE, MOBILE, AGENT, BRANCH, API, BACKOFFICE. |
priority | string | No | NORMAL, HIGH. |
amount | number | YES | Transaction amount. |
currency | string | YES | ISO 4217 currency code (e.g., USD). |
feesAmount | number | No | Fees amount. |
feesCurrency | string | No | Fees currency (defaults to currency if omitted in your integration). |
fxRate | number | No | FX rate if conversion was applied. |
amountBase | number | No | Standardized/base amount for rules (e.g., USD). |
baseCurrency | string | No | Base currency code for amountBase (e.g., USD). |
originCountry | string | No (recommended) | ISO-3166-1 alpha-2 origin country (e.g., US). |
destinationCountry | string | No (recommended) | ISO-3166-1 alpha-2 destination country (e.g., CO). |
originRegion | string | No | Origin state/province/region. |
destinationRegion | string | No | Destination state/province/region. |
purposeOfTransfer | string | No | Purpose/narrative for compliance. |
relationshipSenderBeneficiary | string | No | Relationship between sender and beneficiary. |
sourceOfFunds | string | No | Source of funds description/category. |
notes | string | No | Free text notes. |
fundingSourceType | string | No | CASH, BANK_ACCOUNT, CARD, WALLET, CRYPTO, OTHER. |
fundingInstitutionName | string | No | Funding institution name. |
fundingAccountMasked | string | No | Masked funding account identifier. |
fundingAccountType | string | No | CHECKING, SAVINGS, CREDIT, DEBIT, OTHER. |
payoutMethod | string | No | CASH_PICKUP, BANK_DEPOSIT, WALLET, CARD, HOME_DELIVERY, OTHER. |
payoutInstitutionName | string | No | Payout institution name. |
payoutAccountMasked | string | No | Masked payout account identifier. |
agentId | string | No | Agent id (MSB/branch ops). |
agentName | string | No | Agent name. |
branchId | string | No | Branch id. |
branchName | string | No | Branch name. |
locationId | string | No | Location id. |
locationAddress | string | No | Location address. |
ipAddress | string | No | IP address. |
deviceFingerprint | string | No | Device fingerprint identifier. |
userAgent | string | No | User agent string. |
geoLat | number | No | Latitude. |
geoLng | number | No | Longitude. |
attachments | array | No | Transaction-level attachments (receipt/invoice/etc). See attachments[] table. |
participants | array | YES (min 2) | Transaction participants (sender/beneficiary/etc). See participants[] table. |
attachments[] item — field reference
| Field | Type | Required | Meaning |
|---|---|---|---|
externalFileId | string | No | File id in your storage system. |
fileUrl | string | No | Pre-signed URL or accessible file URL. |
fileName | string | No | File name. |
contentType | string | No | MIME type (e.g., image/jpeg, application/pdf). |
documentType | string | No | RECEIPT, INVOICE, PROOF, etc. |
notes | string | No | Optional notes. |
participants[] item — field reference
| Field | Type | Required | Meaning |
|---|---|---|---|
role | string | YES | SENDER, BENEFICIARY, PAYER, PAYEE, INTERMEDIARY, AUTHORIZER, etc. |
isPrimary | boolean | No | Useful if multiple participants of same role. |
externalCustomerId | string | No | Your customer id (mapped to Complii CustomerRecord.ExternalId when matching). |
compliiCustomerId | GUID | No | If you already know the Complii customer id. |
customerMatchPolicy | string | No | AUTO_CREATE, AUTO_MATCH, MATCH_ONLY. |
customerType | string | YES | INDIVIDUAL or BUSINESS. |
fullName | string | Yes (if INDIVIDUAL) | Full name for individual participant. |
givenName | string | No | Given name. |
middleName | string | No | Middle name. |
familyName | string | No | Family/last name. |
legalName | string | No | Legal name. |
dateOfBirth | YYYY-MM-DD | No | DOB (DateOnly). |
placeOfBirth | string | No | Place of birth. |
gender | string | No | Gender. |
nationalityCountry | string | No | Nationality (often ISO code). |
email | string | No | Email address. |
phone | string | No | Phone number. |
businessLegalName | string | Yes (if BUSINESS) | Legal business name for business participant. |
dbaName | string | No | DBA name. |
registrationNumber | string | No | Registration number (NIT/EIN/etc). |
registrationCountry | string | No | Registration country. |
incorporationDate | YYYY-MM-DD | No | Incorporation date. |
businessType | string | No | Business type/category. |
addressLine1 | string | No | Address line 1. |
addressLine2 | string | No | Address line 2. |
city | string | No | City. |
state | string | No | State/province/region. |
postalCode | string | No | Postal code. |
country | string | No | Country. |
occupation | string | No | Occupation. |
employerName | string | No | Employer name. |
sourceOfWealth | string | No | Source of wealth. |
pepDeclaration | boolean | No | PEP declaration. |
expectedMonthlyVolume | number | No | Expected monthly volume. |
expectedMonthlyCount | int | No | Expected monthly transaction count. |
identificationDocuments | array | No | Identity documents metadata (see participant document table). |
businessDocuments | array | No | Business documents metadata (see participant document table). |
files | array | No | Additional files metadata (see participant document table). |
participant documents (identificationDocuments[] / businessDocuments[] / files[]) — field reference
| Field | Type | Required | Meaning |
|---|---|---|---|
documentType | string | YES (if object exists) | PASSPORT, NATIONAL_ID, CERT_OF_INCORPORATION, etc. |
documentNumber | string | No | Document number/identifier. |
issuingCountry | string | No | Issuing country. |
issueDateUtc | ISO datetime | No | Issue date/time. |
expirationDateUtc | ISO datetime | No | Expiration date/time. |
isPrimary | boolean | No | Primary document flag. |
fileType | string | No | ID_FRONT, ID_BACK, SELFIE, PROOF_OF_ADDRESS, SOURCE_OF_FUNDS, OTHER. |
externalFileId | string | No | File id in your storage system. |
fileUrl | string | No | Pre-signed URL or accessible file URL. |
fileName | string | No | File name. |
contentType | string | No | MIME type. |
notes | string | No | Optional notes. |