Get verification result
Build with

code
GET /api/kyc/verifications/:id

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
Build with

shell
curl "https://trust.myaza.app/api/kyc/verifications/ver_01j9..." \
  -H "Authorization: Bearer $MYAZA_SECRET_KEY"

Responses
Build with

Every response includes verificationId, status, country, idType, createdAt, and workflow, which workflow was responsible for the submission.

approved

json
{
  "verificationId": "ver_01j9...",
  "status": "approved",
  "checkStatus": "verified",
  "externalUserId": "user_42",
  "metadata": { "loanId": "loan_20191" },
  "country": "NG",
  "idType": "bvn",
  "createdAt": "2026-04-27T12:00:00.000Z",
  "completedAt": "2026-04-27T12:00:05.000Z",
  "workflow": {
    "id": "wf_AbC123dEf456",
    "name": "Standard KYC",
    "version": 3
  },
  "result": {
    "idNumber": "12345678901",
    "idNumberMasked": "1234•••901",
    "firstName": "JOHN",
    "lastName": "DOE",
    "middleName": "A",
    "dateOfBirth": "1990-01-01",
    "gender": "Male",
    "dataMatch": true,
    "facialMatch": { "match": true, "confidence": 85 }
  }
}

facialMatch is null when no liveness/selfie check was part of the flow.

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.

failed / error / not_found

Carries the human-readable reason and stable reasonCode (same values as the status endpoint and webhooks).

json
{
  "verificationId": "ver_01j9...",
  "status": "declined",
  "checkStatus": "failed",
  "externalUserId": "user_42",
  "metadata": { "loanId": "loan_20191" },
  "country": "NG",
  "idType": "bvn",
  "createdAt": "2026-04-27T12:00:00.000Z",
  "completedAt": "2026-04-27T12:00:05.000Z",
  "reason": "The user's selfie does not match the photo on file with the government database (match confidence 48%, minimum 70% required).",
  "reasonCode": "selfie_mismatch"
}

Result fields
Build with

FieldTypeDescription
externalUserIdstring | nullYour reference for the subject, exactly as supplied: the top-level externalUserId on the submission (or the legacy userId / metadata.userId), or the session it was minted with.
metadataobject | nullYour customer metadata, echoed unchanged.
workflowobject | null{ id, name, version }: the workflow that drove the submission, its current name, and the published version that ran. null for prop-configured SDK mounts.
result.idNumberstring | nullThe plaintext ID number.
result.idNumberMaskedstringThe ID number, masked (e.g. 1234•••901).
result.firstNamestring | nullGiven name from the source record.
result.lastNamestring | nullFamily name from the source record.
result.middleNamestring | nullMiddle name, if available.
result.dateOfBirthstring | nullDate of birth (YYYY-MM-DD).
result.genderstring | nullGender from the source record.
result.dataMatchboolean | nullWhether submitted biodata matched the source record.
result.facialMatchobject | null{ match: boolean, confidence: number }, or null if no facial check ran.

Captured media
Build with

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), also secret key only. These same URLs are delivered in the media object of verification webhooks.

Errors
Build with

StatusBodyCause
403{ "error": "secret_key_required" }A publishable (pk_) key was used. Use a secret key.
404{ "error": "Verification not found" }Unknown ID, wrong environment, or another organisation's verification.
401{ "error": "Invalid API key" }Auth failed.