KYC Docs Get credentials
Docs › Blink API › Result API

Result API

The source of truth. Your backend reads the result server to server and acts on it — never on the copy the device reports.

method GET path /api/blink/session/{sessionId}/result auth client key + secret headers

Request

GET https://kyc-api.blink-pay.net/api/blink/session/{sessionId}/resulthttp
curl -s https://kyc-api.blink-pay.net/api/blink/session/[SESSION_ID]/result \
  -H 'X-Blink-Client-Key: bkyc_live_…' \
  -H 'X-Blink-Client-Secret: bksec_…'

Response

The verdict is the top-level result. On a COMPLETED session the response also carries the extracted identity document, the faceMatch and the liveness outcome. The document, faceMatch and liveness objects are present only when that step ran and produced a reading; treat every field inside them as optional.

200 OKjson
{
  "sessionId":  "[SESSION_ID]",
  "status":     "COMPLETED",
  "result":     "VERIFIED",
  "resultJson": "{\"sessionId\":\"[SESSION_ID]\",\"purpose\":\"FULL_CAPTURE\",\"result\":\"VERIFIED\",\"faceScore\":0.66,\"detail\":\"…\"}",
  "document": {
    "type":                 "NATIONAL_ID",
    "side":                 "BOTH",
    "fullName":             "…",
    "fullNameAr":           "…",
    "dateOfBirth":          "1990-12-10",
    "nationalId":           "784-1990-1801840-0",
    "documentNumber":       "156964864",
    "expiryDate":           "2028-08-17",
    "issueDate":            "2026-08-18",
    "issuingState":         "ARE",
    "issuingCountry":       "ARE",
    "nationality":          "Sudan",
    "sex":                  "M",
    "occupation":           "…",
    "employerSponsor":      "…",
    "mrzVerified":          true,
    "machineReadable":      { "detected": true, "verified": true, "status": "VERIFIED" },
    "countryVerification":  { "matched": true, "detectedCountry": "ARE", "source": "MRZ" },
    "engine":               "blink-advanced-ar",
    "extractionConfidence": 1.0
  },
  "faceMatch": { "score": 0.66, "decision": "MATCH", "threshold": 0.4 },
  "liveness":  { "passed": true, "score": 0.93 }
}
FieldValuesUse
sessionIdUUIDThe session you asked for.
statusCREATED · IN_PROGRESS · COMPLETED · EXPIRED · SUSPENDEDWhere the session is. Only COMPLETED carries a result.
resultVERIFIED · REJECTED · REVIEW · nullThe decision to act on. null until completed.
resultJsonstring or nullA JSON record encoded as a string, for logs and support. Never branch on it.
documentobject or absentThe extracted identity fields. See Document details.
faceMatchobject or absentSelfie-to-portrait comparison: score, decision, threshold.
livenessobject or absentLiveness outcome: passed and score.

Inside resultJson

Decode it as a second step (JSON.parse, jsonDecode):

FieldDescription
sessionIdThe session.
purposeThe session's purpose.
resultSame as the top-level result.
faceScorePresent only when a face match ran.
detailA neutral, human-readable reason.

Document details

The document object holds the identity fields Blink extracted from the captured document (MRZ and visual zone reconciled). It is present once a document has been read; individual fields depend on the document type and what the document itself carries, so treat each as optional. Names are returned in the document's own script — Latin in fullName, and Arabic in fullNameAr when the document is bilingual.

FieldTypeDescription
typestringNeutral document type, e.g. NATIONAL_ID, PASSPORT, DRIVING_LICENCE.
sidestringWhich side(s) were read: FRONT, BACK or BOTH.
fullNamestringFull name in Latin script.
fullNameArstringFull name in Arabic, when the document carries it.
dateOfBirthstringDate of birth, YYYY-MM-DD.
nationalIdstringNational identity number, when present.
documentNumberstringThe document's own number.
expiryDatestringExpiry date, YYYY-MM-DD.
issueDatestringIssue date, YYYY-MM-DD, when present.
issuingState · issuingCountrystringIssuer, ISO 3166-1 alpha-3 (e.g. ARE, SDN).
nationalitystringHolder's nationality, as printed.
sexstringM · F · X.
occupation · employerSponsorstringOccupation and sponsor/employer, on documents that carry them (e.g. UAE residency IDs).
mrzVerifiedbooleanWhether the machine-readable zone check digits validated.
machineReadableobjectdetected, verified, status for the MRZ read.
countryVerificationobjectmatched, detectedCountry and source — whether the detected issuer matched the session's expectation.
enginestringThe extraction engine that produced this reading.
extractionConfidencenumberOverall extraction confidence, 0.0–1.0.

Face match and liveness

ObjectFieldDescription
faceMatchscoreSimilarity of the selfie to the document portrait, 0.0–1.0.
decisionMATCH · NO_MATCH.
thresholdThe score at or above which decision is MATCH.
livenesspassedWhether the action-guided liveness check passed.
scoreLiveness confidence, 0.0–1.0.

These objects are an aid for your records and review UI. The decision to act on is still the top-level result; a faceMatch.decision or liveness.passed is already reflected there. Never re-derive the verdict yourself from these scores.

Polling

The endpoint is idempotent. Call it when the app reports that run() finished, and from a background job for sessions still IN_PROGRESS — customers do close apps half-way. Stop when status is COMPLETED, EXPIRED or SUSPENDED.

server.jsjavascript
async function readBlinkResult(sessionId) {
  const r = await fetch(`https://kyc-api.blink-pay.net/api/blink/session/${sessionId}/result`, {
    headers: {
      'X-Blink-Client-Key': process.env.BLINK_CLIENT_KEY,
      'X-Blink-Client-Secret': process.env.BLINK_CLIENT_SECRET,
    },
  });
  if (r.status === 404) throw new Error('Unknown session or wrong credentials');
  if (!r.ok) throw new Error(`Blink returned ${r.status}`);

  const { status, result, resultJson, document, faceMatch, liveness } = await r.json();
  return { status, result, record: resultJson ? JSON.parse(resultJson) : null, document, faceMatch, liveness };
}

404 responses

An unknown session, a session belonging to another client and wrong credentials all return 404 with BLINK_RESULT_NOT_FOUND — deliberately indistinguishable. Check the sessionId you stored and the credentials you sent.

KYC details & images

The extracted identity fields come back in the document object above. To get the captured document scans and selfies, list and download them with the Documents API.

The document, faceMatch and liveness objects are personal data. Read them server to server, store them under your own retention and access controls, and never expose them to the device or a browser.