List the caller’s applications
Returns a page of the caller’s own KYC applications, newest first. Supports keyset pagination with size (default 20, maximum 100) and the opaque after / before cursors taken from a previous response’s links. Returns 400 when both after and before are set, or when size is out of range.
Authorization
oauth2 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
Query Parameters
Page size (default 20, max 100).
Opaque forward cursor, taken from links.next. Mutually exclusive with before.
Opaque backward cursor, taken from links.prev. Mutually exclusive with after.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/kyc/history"{ "data": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5", "organization_id": "cowdi", "user_type": "INDIVIDUAL", "merchant_type": "SOLE_PROPRIETOR", "status": "DRAFT", "source": "USER", "documents": [ { "id": "3fa2c1d4-8b8e-4c9a-9c9e-1f2e3a4b5c6d", "document_type": "NATIONAL_ID", "document_sub_type": "string", "document_number": "string", "expiry_date": "string", "presigned_url": "string", "uploaded_at": "2026-06-04T10:20:00.000Z" } ], "verification": { "provider": "SMILE_ID", "provider_job_id": "string", "result": "PASSED", "confidence_score": 0, "completed_at": "2026-06-04T10:20:00.000Z" }, "verification_reason_code": "string", "external_reason_code": "DOCUMENT_IMAGE_UNUSABLE", "external_reason": "Part of your ID document was cut off. Retake the photo with all four corners of the document inside the frame.", "resubmission_count": 0, "force_new_enroll": true, "reapply_blocked_until": "2026-06-04T10:20:00.000Z", "submitted_at": "2026-06-04T10:20:00.000Z", "created_at": "2026-06-04T10:20:00.000Z", "updated_at": "2026-06-04T10:20:00.000Z" } ], "links": { "next": "string", "prev": "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" } ]}Report the provider job id PATCH
Records the provider’s own job identifier for a `provider_sdk` verification — the value the SDK received in its submission response. Call once, immediately after the SDK reports a successful submission. On this channel the SDK submits directly to the provider, so that response never reaches the server, and Smile ID’s V3 recovery endpoints (status lookup and webhook replay) accept only *their* job id — there is no way to resolve it from our own reference. Reporting it is what makes an SDK-submitted job recoverable when its result webhook is lost; without it the only outcome is expiry. Write-once: re-reporting the same id succeeds unchanged, a different id is a 409. Only valid while the verification is still ID_VERIFICATION_PENDING.
Stream application updates GET
Opens an SSE stream for the caller’s current application (or the one named by `application_id`). Emits `application` events on every change, periodic `ping` keepalives, and a terminal `done` event once the application reaches a closed status.