Get verification result
Returns the full result of a verification, including the extracted biodata, ID number, and facial-match score. This is the backend counterpart to the minimal status endpoint.
Authentication: Authorization: Bearer sk_…, a secret key only. Calling
this with a publishable (pk_) key returns 403 secret_key_required. The
verification is scoped to the key’s organisation and environment (a sandbox
secret key cannot read a production verification).
Never call this from client code. Identity data must only be fetched from your backend with a secret key.
Request
Responses
Every response includes verificationId, status, checkStatus, country, idType,
createdAt, and workflow, which workflow was responsible for the submission.
status is the outcome to act on; checkStatus is what the automated checks found.
They differ whenever your workflow or a reviewer decided something the checks alone
would not have. See Status and checkStatus.
approved
facialMatch is null when no liveness/selfie check was part of the flow. facialMatchSource says which photo the selfie was compared with: gov_record, chip, or document when the workflow allows the photo printed on the document and no stronger photo existed.
workflow is null when the SDK was configured with plain props instead of a
workflow. Its version is the published version that actually ran: publishing
overwrites a workflow’s live configuration in place, so id alone stops describing
what happened after your next publish. Inspect the exact configuration a version
used under Workflows → Version history.
Checks that did not pass (checkStatus: failed, not_found or error)
Carries the human-readable reason and stable reasonCode (same values as the
status endpoint and webhooks).
After a decision
When the verification has been decided, by a reviewer in your dashboard, by your backend through POST /verifications/:id/review or by your workflow, review holds the current decision a person made and statusHistory lists every change, newest first:
Each entry has the same fields as one verification.status_updated webhook, so what you store from the webhook and what you read here agree. The reviewer’s internal note is never included.
Attempts
A verification you send back or verify again keeps its id. Once the applicant resubmits, the result describes their latest attempt, attempt counts up, and each earlier attempt is listed under attempts, oldest first:
An earlier attempt carries what it concluded and why, never its biodata or media. The current result is the one to act on, and statusHistory still lists every decision across all attempts.
Result fields
Captured media
The images and videos captured during the flow are fetched per-kind from
GET /api/kyc/verifications/:id/media/:kind (selfie, document-front,
document-back, liveness-video, document-front-video, document-back-video,
and document-portrait, the portrait cut from the document when the selfie was matched to it),
also secret key only. These same URLs are delivered in the media object of
verification webhooks.
On a run that verifies several IDs, each check in multiId.checks carries its own
recordPhoto and documentPortrait as media URLs (id-check-<n>-photo and
id-check-<n>-portrait), and each entry in supportingDocuments carries a url
for its file. These links follow your workflow’s photo switches and returned-data
settings, the same as the webhook: a photo you have switched off comes back as
null.