Cowdidocs

Start identity verification

POST
/v1/kyc/applications/{id}/verification

Unified entry point for starting an identity-verification job. channel selects the submission path and the rest of the body is that channel’s input:

  • server_upload: browser-captured selfie + ID submitted server-side to Smile ID Enhanced Document Verification (job_type 11) — keeps the government-database cross-check and captures the back of the ID. Returns the application status (202).
  • provider_sdk: mint a provider SDK session the client submits with directly — the hosted web SDK, or the v12 Android / iOS SDKs, which take the same token on network.config.token (or a SmartSelfie Authentication session for an already-enrolled user). Returns the provider session (201). The legacy spelling web_sdk is still accepted for this channel but should not be used by new clients. Supersedes POST /capture (server_upload) and POST /session (provider_sdk), which remain as aliases over the same engine. The pass/fail result arrives asynchronously via the provider callback, so the application is left ID_VERIFICATION_PENDING.

Declare the Smile ID SDK versions this client ships in X-SmileID-Api-Versions: the job runs against the newest one listed and stays on it for its whole life (config.api_version on a provider_sdk session says which).

AuthorizationBearer <token>

Create a client with POST /v1/oauth/clients, then exchange its credentials for an access token. AUTHORIZATION_CODE clients act on behalf of a signed-in user and always use PKCE; CLIENT_CREDENTIALS clients act as themselves. A client may only be granted scopes its creator already holds — read the grantable list from GET /v1/oauth/clients/scopes.

In: header

Path Parameters

id*string

KYC application id.

Formatuuid

Header Parameters

X-SmileID-Api-Versions?string

Comma-separated Smile ID API versions this client’s bundled SDK can run, newest last or in any order (e.g. v2, v3). The job is started on the newest version listed that the server also speaks, and that version is pinned for the life of the job. Omitted, empty or unrecognised means v2 — so a client only upgrades when it says it can. Send the same value to the requirements GET and the verification POST: they resolve the version independently, and disagreeing between the two gets the capture rejected.

Request Body

application/json

Request to start identity verification. channel selects the submission path: server_upload submits a captured selfie and ID document server-side; provider_sdk mints a session for the client SDK to submit directly. web_sdk is a deprecated alias for provider_sdk.

Request to start identity verification. channel selects the submission path: server_upload submits a captured selfie and ID document server-side; provider_sdk mints a session for the client SDK to submit directly. web_sdk is a deprecated alias for provider_sdk.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/kyc/applications/550e8400-e29b-41d4-a716-446655440000/verification" \  -H "Content-Type: application/json" \  -d '{    "channel": "server_upload",    "selfie": "string"  }'
{  "application_id": "48ac72d0-a829-4896-a067-dcb1c2b0f30c",  "provider": "SMILE_ID",  "config": {    "property1": null,    "property2": null  }}
{  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",  "status": "DRAFT",  "can_submit": true,  "needs_review": true,  "message": "string"}
{  "code": "INVALID_PARAMS",  "description": "user_id must be a UUID",  "identifier": "string",  "invalid_params": [    {      "path": "user_id",      "reason": "must be a UUID",      "sub_code": "string"    }  ]}
{  "code": "INVALID_PARAMS",  "description": "user_id must be a UUID",  "identifier": "string",  "invalid_params": [    {      "path": "user_id",      "reason": "must be a UUID",      "sub_code": "string"    }  ]}
{  "code": "INVALID_PARAMS",  "description": "user_id must be a UUID",  "identifier": "string",  "invalid_params": [    {      "path": "user_id",      "reason": "must be a UUID",      "sub_code": "string"    }  ]}
{  "code": "INVALID_PARAMS",  "description": "user_id must be a UUID",  "identifier": "string",  "invalid_params": [    {      "path": "user_id",      "reason": "must be a UUID",      "sub_code": "string"    }  ]}
{  "code": "INVALID_PARAMS",  "description": "user_id must be a UUID",  "identifier": "string",  "invalid_params": [    {      "path": "user_id",      "reason": "must be a UUID",      "sub_code": "string"    }  ]}
{  "code": "INVALID_PARAMS",  "description": "user_id must be a UUID",  "identifier": "string",  "invalid_params": [    {      "path": "user_id",      "reason": "must be a UUID",      "sub_code": "string"    }  ]}
{  "code": "INVALID_PARAMS",  "description": "user_id must be a UUID",  "identifier": "string",  "invalid_params": [    {      "path": "user_id",      "reason": "must be a UUID",      "sub_code": "string"    }  ]}
{  "code": "INVALID_PARAMS",  "description": "user_id must be a UUID",  "identifier": "string",  "invalid_params": [    {      "path": "user_id",      "reason": "must be a UUID",      "sub_code": "string"    }  ]}