Compose Finance
Kyc verification

Upload customer KYC document

Uploads a KYC document (identity or proof of address) for a customer to our verification provider. The customer must have initiated KYC verification first by calling `POST /customers/{customerId}/kyc`. **Identity Documents** (`idDocType`): - `PASSPORT` - Passport (any country) - `ID_CARD` - National ID card (front and back required) - `DRIVERS` - Driver's license (front and back required) - `RESIDENCE_PERMIT` - Residence permit **Proof of Address** (`idDocType: PROOF_OF_ADDRESS`): Documents must be dated within the **last 3 months**. Accepted documents: - Utility bills (gas, electricity, water) - Telecom bills (internet, cable, mobile phone) - Bank statements or bank letters (neobanks not accepted) - Government documents (tax bills, voter registration) - Lease or rental agreements **File Requirements:** - Formats: JPEG, PNG, PDF - Maximum size: 10MB

POST
/api/v2/customers/{customerId}/documents

Uploads a KYC document (identity or proof of address) for a customer to our verification provider. The customer must have initiated KYC verification first by calling POST /customers/{customerId}/kyc.

Identity Documents (idDocType):

  • PASSPORT - Passport (any country)
  • ID_CARD - National ID card (front and back required)
  • DRIVERS - Driver's license (front and back required)
  • RESIDENCE_PERMIT - Residence permit

Proof of Address (idDocType: PROOF_OF_ADDRESS): Documents must be dated within the last 3 months. Accepted documents:

  • Utility bills (gas, electricity, water)
  • Telecom bills (internet, cable, mobile phone)
  • Bank statements or bank letters (neobanks not accepted)
  • Government documents (tax bills, voter registration)
  • Lease or rental agreements

File Requirements:

  • Formats: JPEG, PNG, PDF
  • Maximum size: 10MB

Authorization

bearerAuth
AuthorizationBearer <token>

Organization API key obtained from PropelAuth

In: header

Path Parameters

customerId*string

Unique identifier of the customer

Request Body

multipart/form-data

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST 'https://compose.finance/api/v2/customers/{customerId}/documents' \  -H 'Authorization: Bearer YOUR_API_KEY' \  -F 'file=@/path/to/passport.jpg' \  -F 'idDocType=PASSPORT' \  -F 'country=GBR'

{
  "success": true,
  "idDocType": "PASSPORT",
  "idDocSubType": "FRONT_SIDE",
  "country": "GBR",
  "reviewTriggered": false
}

{
  "error": "Missing required field: file"
}

{
  "error": "Unauthorized - Invalid or missing API key or session"
}

{
  "error": "Customers feature is not enabled for your organization"
}

{
  "error": "Customer not found"
}
{
  "error": "Cannot upload documents while verification is in progress. Please wait for the current review to complete before uploading new documents."
}
{
  "error": "File size exceeds maximum limit of 10MB. Received: 15.50MB"
}
{
  "error": "Document upload failed. Please try again."
}