API Docs
Company-scoped public API (customers, transactions, payment readiness) authenticated 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 |
|---|---|---|---|
| GET | /api/public/customers/{customerId} | — | 200 customer profile |
| GET | /api/public/customers/by-external-id?externalId= | — | 200 profile (includes ucidId) | 404 | 409 duplicate |
| POST | /api/public/compliance/requirements | application/json | 200 field + document requirements (nothing saved) |
| POST | /api/public/compliance/gaps | application/json | 200 remaining gaps | 404 | 409 |
| GET | /api/public/customers/by-phone?phone= | — | 200 { customers: [...] } |
| GET | /api/public/customers/{customerId}/data-gaps?refresh=true | — | 200 fields + KYC document gaps |
| PATCH | /api/public/customers/{customerId} | application/json | 200 { customerId, updated } |
| POST | /api/public/customers/{customerId}/documents | multipart/form-data | 201 { customerId, documentId } |
| 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 ingest result (+ optional transactionMonitoring) |
| POST | /api/public/transactions/ingest-sync | application/json | 200 or 403 if sync ingest disabled |
| PATCH | /api/public/transactions/{transactionId} | application/json | 200 { transactionId, updated } |
| GET | /api/public/transactions/{id}/customer-data-gaps?refresh=true | — | 200 { participants[] with participantRole } |
| GET | /api/public/transactions/{id}/transaction-data-gaps?refresh=true | — | 200 transaction field gaps |
| GET | /api/public/transactions/{id}/compliance-holds | — | 200 TM + screening holds |
| GET | /api/public/transactions/{id}/payment-readiness?refresh=true | — | 200 { readyToPay, … } |
| POST | /api/public/crypto/transactions/analyze | application/json | 200 analyze result (add-on) |
| POST | /api/public/crypto/webhooks/events | application/json | 200 ingest event (tenant webhook enabled) |
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" }
]
}'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"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).
Operational headers
X-Api-Key— required on all public API calls.Idempotency-Key— optional on POST/PATCH; safe retries within TTL (default 24h). Reuse with a different body →409.X-Correlation-Id— optional tracing; echoed when provided.
Mandatory field policies (profile & transaction)
Admins configure mandatory standard/custom fields per customer type, country, subgroup, and optional transaction participant role (sender vs beneficiary). These policies drive gap queries and payment readiness — separate from compliance holds (TM/screening).
- POST /api/public/customers enforces only requirement sets with no participant role selected.
- PATCH /api/public/customers accepts partial updates; use data-gaps endpoints to see what is still required.
- GET /api/public/customers/{id}/data-gaps uses role-agnostic sets only (refresh=true re-evaluates first).
- Sets scoped to SENDER, BENEFICIARY, etc. apply on GET .../transactions/{id}/customer-data-gaps and nested payment-readiness.customerDataGaps. Ingest role RECEIVER is normalized to BENEFICIARY.
- KYC document gaps use dashboard Document requirements (customer type + country filters). missingDocuments lists documentTypeId; upload via POST .../customers/{id}/documents. kycDataComplete = fields + documents (not TM).
- Transaction-level mandatory fields use GET .../transaction-data-gaps; PATCH /api/public/transactions can fill narrative/SOF fields.
Get customer (lookup)
Load a full profile by Complii customer ID, external ID, or phone. The profile includes ucidId when the customer is in a cluster. by-external-id returns 409 when more than one customer shares the same externalId.
curl "$API_BASE/api/public/customers/by-external-id?externalId=crm-123" \ -H "X-Api-Key: YOUR_KEY"
200 — profile includes tags, custom fields, documents, risk summary.Update customer (PATCH)
Send only fields to change (same shape as create, all optional). Supports customerSubtypeId and customFieldValues. Omitted properties are left unchanged.
curl -X PATCH "$API_BASE/api/public/customers/{customerId}" \
-H "X-Api-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: patch-crm-123-v2" \
-d '{
"email": "jane@example.com",
"addressLine1": "1 Main St",
"customFieldValues": [{ "fieldDefinitionId": "GUID", "value": "Updated" }]
}'200:{ "customerId": "GUID", "updated": true }Customer KYC data gaps (single customer)
Returns missingMandatory (profile fields) and missingDocuments (document requirement policies). refresh=true re-evaluates field and document requirements. profileDataComplete / documentsDataComplete are separate; kycDataComplete is true when both are satisfied.
curl "$API_BASE/api/public/customers/{customerId}/data-gaps?refresh=true" \
-H "X-Api-Key: YOUR_KEY"{
"customerId": "GUID",
"externalId": "crm-123",
"profileDataComplete": false,
"mandatoryPendingCount": 2,
"missingMandatory": [
{ "fieldLabel": "Date of birth", "fieldKind": "Standard", "standardFieldKey": "dateOfBirth", "customFieldDefinitionId": null }
],
"documentsDataComplete": false,
"documentMandatoryPendingCount": 1,
"missingDocuments": [
{ "documentTypeId": "GUID", "documentTypeName": "Passport", "templateId": "GUID", "requirementNodeId": "GUID", "label": null }
],
"kycDataComplete": false
}Field role-specific sets apply on transaction customer-data-gaps. Document policies are per customer (same missingDocuments for each participant role sharing that customer).
Upload customer document (KYC)
Attach 1–2 files (documentTypeId required). AI runs only when the matching document requirement policy has Use AI analysis enabled and the AI add-on is active; otherwise plain store (aiValidated false).
curl -X POST "$API_BASE/api/public/customers/{customerId}/documents" \
-H "X-Api-Key: YOUR_KEY" \
-F "documentTypeId=GUID" \
-F "documentCategoryId=GUID" \
-F "documentNumber=B00001234" \
-F "file=@passport-front.jpg" \
-F "file=@passport-back.jpg"201:{ "customerId": "GUID", "documentId": "GUID", "aiValidated": false }
// With AI Compliance Automation add-on: aiValidated true + confidence; 400 if validation fails (document not stored)Transaction customer data gaps (per role)
One participants[] entry per transaction party with participantRole and role-filtered missingMandatory. Configure role scope on dashboard Customers → Field requirements.
curl "$API_BASE/api/public/transactions/{transactionId}/customer-data-gaps?refresh=true" \
-H "X-Api-Key: YOUR_KEY"{
"transactionId": "GUID",
"profileDataComplete": false,
"participants": [
{
"customerId": "GUID",
"externalId": "CM-CUST-SENDER",
"participantRole": "SENDER",
"roles": ["SENDER"],
"profileDataComplete": false,
"mandatoryPendingCount": 1,
"missingMandatory": [
{ "fieldLabel": "Occupation", "fieldKind": "Standard", "standardFieldKey": "occupation" }
],
"documentsDataComplete": true,
"missingDocuments": [],
"kycDataComplete": false
},
{
"customerId": "GUID",
"externalId": "CM-CUST-BEN",
"participantRole": "BENEFICIARY",
"roles": ["BENEFICIARY"],
"profileDataComplete": true,
"mandatoryPendingCount": 0,
"missingMandatory": [],
"documentsDataComplete": false,
"missingDocuments": [{ "documentTypeName": "Proof of address" }],
"kycDataComplete": false
}
]
}Compliance preview (before a transaction)
Ask what to collect before MoneyRail creates the transfer. These calls do not create customers or transactions and do not change ingest or the existing gap endpoints. RECEIVER is returned as BENEFICIARY. Document rules follow the person's country and type. After the transfer exists, keep using GET .../customer-data-gaps.
curl -X POST "$API_BASE/api/public/compliance/requirements" \
-H "X-Api-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"parties": [
{ "role": "SENDER", "country": "US", "customerType": "Individual" },
{ "role": "RECEIVER", "country": "CO", "customerType": "Individual" }
],
"draft": { "amount": 1500, "currency": "USD", "originCountry": "US", "destinationCountry": "CO", "payoutMethod": "CASH" }
}'
curl -X POST "$API_BASE/api/public/compliance/gaps" \
-H "X-Api-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"parties": [
{ "role": "SENDER", "externalId": "mr-sender-1" },
{ "role": "BENEFICIARY", "externalId": "mr-receiver-9" }
],
"draft": { "originCountry": "US", "destinationCountry": "CO", "purposeOfTransfer": "Family support", "sourceOfFunds": "Salary" }
}'Synchronous transaction ingest
POST .../ingest-sync runs UCID transaction monitoring (and configured TM webhooks) before the HTTP response when SynchronousTransactionIngest:Enabled on the API host. Returns 403 when disabled.
curl -X POST "$API_BASE/api/public/transactions/ingest-sync" \
-H "X-Api-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{ ... same body as POST /api/public/transactions ... }'Update transaction (PATCH)
Partial update for purpose, source of funds, relationship, notes, fundingSourceType, and payoutMethod — commonly used to clear transaction-level mandatory field gaps.
curl -X PATCH "$API_BASE/api/public/transactions/{transactionId}" \
-H "X-Api-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"purposeOfTransfer": "Family support",
"sourceOfFunds": "Salary",
"relationshipSenderBeneficiary": "Sibling"
}'Payment readiness & data gaps
KYC (profile fields + documents), transaction field gaps, and compliance holds are separate checks. readyToPay requires kycDataComplete for every participant, transaction fields, and cleared holds.
GET .../customer-data-gaps— mandatory profile fields per participant; useparticipantRole(sender vs beneficiary) to drive UI.GET .../transaction-data-gaps— mandatory transaction-level fields (tenant policy).GET .../compliance-holds— open TM and screening alerts blocking payout (separate from profile gaps).GET .../payment-readiness— aggregate:readyToPaywhen profile + transaction data complete and compliance holds cleared.
{
"transactionId": "GUID",
"profileDataComplete": false,
"documentsDataComplete": false,
"kycDataComplete": false,
"transactionDataComplete": true,
"complianceHoldsCleared": true,
"readyToPay": false,
"customerDataGaps": {
"profileDataComplete": false,
"documentsDataComplete": false,
"kycDataComplete": false,
"participants": [
{
"customerId": "GUID",
"participantRole": "SENDER",
"roles": ["SENDER"],
"missingMandatory": [{ "fieldLabel": "Occupation", "standardFieldKey": "occupation" }]
},
{
"customerId": "GUID",
"participantRole": "BENEFICIARY",
"roles": ["BENEFICIARY"],
"missingMandatory": []
}
]
},
"transactionDataGaps": { "transactionDataComplete": true, "missingMandatory": [] },
"complianceHolds": { "complianceHoldsCleared": true, "blockingMonitoringAlerts": [], "blockingScreeningAlerts": [] }
}Outbound webhooks (TM clearance URL)
Configure the transaction clearance webhook in the dashboard (JWT). The same HTTPS URL can receive customer profile gap events when notifyCustomerDataGaps is enabled.
transaction.alertsCleared— TM clearance when transaction and all customers are clear.customer.profileDataGapsChanged/customer.profileDataComplete— whennotifyCustomerDataGapsis enabled on the same TM clearance webhook URL (dashboard / JWT settings).
{
"event": "customer.profileDataGapsChanged",
"customerId": "GUID",
"externalId": "crm-123",
"profileDataComplete": false,
"mandatoryPendingCount": 1,
"missingMandatory": [ { "fieldLabel": "...", "fieldKind": "Standard", "standardFieldKey": "email" } ]
}Inbound crypto event ingest uses POST /api/public/crypto/webhooks/events (separate from TM clearance). See repository docs/public-api.md for Blockchain Intelligence.
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" }
]
}'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. |