KYC Docs Get credentials
Docs › Blink API › Device API

Device API

The calls the SDK and the hosted page make during a capture. You don't call these yourself when you use an SDK — they are here so you know what crosses the network, or if you build a client of your own.

auth Authorization: Bearer <sessionToken> prefix /api/sdk

Endpoints

CallRequestResponse
POST /api/sdk/document/challengeEmpty body{ "nonce", "expiresInSeconds" }
POST /api/sdk/documentmultipart/form-data: image, nonce, optional documentType, sideStep outcome
POST /api/sdk/liveness/challengeEmpty body{ "nonce", "expiresInSeconds", "actions" }
POST /api/sdk/livenessmultipart/form-data: frames (up to 12), nonceStep outcome
POST /api/sdk/finalizeEmpty body{ "result", "detail" } — a non-authoritative copy
GET /api/sdk/status{ "status", "currentStep", "stepsCompleted", "resultStatus" }

Sequence

one FULL_CAPTURE sessionflow
GET  /api/sdk/status                 which steps remain
POST /api/sdk/document/challenge     → nonce
POST /api/sdk/document               image + nonce  (front, then back for two-sided cards)
POST /api/sdk/liveness/challenge     → nonce + actions, e.g. ["BLINK"]
POST /api/sdk/liveness               frames performing the actions + nonce
POST /api/sdk/finalize               → { result, detail }

Single-use challenges

Every submission must echo the nonce from its challenge. A nonce works once and expires after expiresInSeconds; a replayed or late one is rejected with BLINK_CHALLENGE_INVALID. The document step must complete before liveness starts (BLINK_STEP_OUT_OF_SEQUENCE).

Step outcome

200 OKjson
{ "ok": false, "step": "DOCUMENT", "code": "DOCUMENT_UNREADABLE", "detail": "…" }

A business failure is HTTP 200 with ok: false — check ok, not the status code. Images are JPEG, PNG or WebP.