Add one document to a session. Send the bytes one of two ways, never both: file_name names a file you already staged through the upload-url endpoint, and content_base64 carries the bytes inline. Use file_name for every real document, because a request body larger than about 8 KB is rejected at the network edge. An inline document must be 700 KB or smaller after decoding, and a staged file must be 5 MB or smaller. The session must be AWAITING_INPUT, and it must be HEADLESS. A HOSTED session refuses the call with a 422, because the end customer supplies the documents on the verification link. The response is the session, with steps.documents set to SUBMITTED. Signa must be enabled for your business. Required scope: compliance-kyc:create.

POSTapi-prod.blaaiz.com/api/external/compliance/kyc/sessions/{sessionId}/documents

Authorization

oauth2ClientCredentials compliance-kyc:create
AuthorizationBearer <token>

Use your OAuth client credentials to obtain a short-lived Bearer token from POST /oauth/token.

In: header

Scope: compliance-kyc:create

Path Parameters

sessionId*string

The verification session id returned by the create endpoint.

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

Upload a verification document
curl --request POST \  --url 'https://example.com/api/external/compliance/kyc/sessions/9f2c7b41-6d3e-4c8a-9a20-1e6f0b5d7c33/documents' \  --header 'Content-Type: application/json' \  --data '{  "filename": "passport-front.jpg",  "content_type": "image/jpeg",  "id_doc_type": "PASSPORT",  "country": "NGA",  "file_name": "4a7f1c92e0_passport front.jpg"}'
{  "message": "Verification session document uploaded successfully.",  "data": {    "id": "9f2c7b41-6d3e-4c8a-9a20-1e6f0b5d7c33",    "business_id": "9d4c4ec5-572d-49de-a362-f01ed09f2b1b",    "customer_reference": "user_10482",    "requirements": [      "DOCUMENTS"    ],    "fulfilment_mode": "HEADLESS",    "status": "AWAITING_INPUT",    "steps": {      "documents": "SUBMITTED",      "selfie": null,      "proof_of_address": null    },    "rejection": null,    "expires_at": "2026-08-30T09:14:22.000Z",    "completed_at": null,    "created_at": "2026-08-29T09:14:22.000Z"  }}