Verification events describe one individual verification from processing to a terminal result. All five names use the same data schema, so a handler can upsert one record by verificationId and branch on type and status.

Lifecycle

EventWhen it firesRecommended handling
verification.startedThe verification enters processing.Record the IDs and show a processing state. Do not treat it as a completed check.
verification.completedThe verification completes successfully.Persist the result and continue the approved customer flow.
verification.failedThe check completes with a failed identity, data or biometric result.Show the public reason; route according to your policy.
verification.not_foundThe submitted identity cannot be found.Ask the customer to verify the identifier or use another supported method.
verification.errorA verification service error stops processing.Keep the customer retryable and use reasonCode for support diagnostics.

Complete successful payload

json
{
  "version": "2026-08-11",
  "id": "evt_4d6628b920d940d48ae7ac2e",
  "type": "verification.completed",
  "createdAt": "2026-08-15T12:14:37.150Z",
  "deliveryId": "del_01j9verification01",
  "data": {
    "verificationId": "ver_sample0000000000",
    "requestId": "req_sample_verified",
    "externalId": "your_user_123",
    "workflowId": "wf_sample0000000000",
    "workflowVersion": 3,
    "status": "VERIFIED",
    "reason": null,
    "reasonCode": null,
    "verificationMethod": "sandbox",
    "assuranceLevel": null,
    "idType": "bvn",
    "country": "NG",
    "subjectType": "individual",
    "idNumber": "00000000001",
    "business": null,
    "questionnaire": null,
    "proofOfAddress": null,
    "nfc": null,
    "emailVerification": null,
    "phoneVerification": null,
    "deviceIntel": null,
    "userData": {
      "firstName": "Amina",
      "lastName": "Okafor",
      "middleName": null,
      "dateOfBirth": "1992-04-18",
      "gender": "female"
    },
    "facialMatch": true,
    "facialConfidence": 92,
    "dataMatch": true,
    "media": {
      "selfie": "/api/verifications/ver_sample0000000000/media/selfie",
      "livenessVideo": "/api/verifications/ver_sample0000000000/media/liveness-video"
    },
    "environment": "SANDBOX",
    "createdAt": "2026-08-15T12:14:31.004Z"
  }
}

Media values are absolute authenticated URLs in a live delivery. Fetch them with your API key. The illustrative relative paths above show the resource shape without exposing a deployment host.

Event-specific examples

The repeated identity result fields follow the complete schema above. These fixtures show the fields that distinguish the other four event types.

json
[
  {
    "version": "2026-08-11",
    "id": "evt_started_01",
    "type": "verification.started",
    "createdAt": "2026-08-15T12:14:31.004Z",
    "deliveryId": "del_started_01",
    "data": {
      "verificationId": "ver_sample0000000000",
      "requestId": "req_sample_pending",
      "externalId": "your_user_123",
      "workflowId": "wf_sample0000000000",
      "workflowVersion": 3,
      "status": "PENDING",
      "reason": null,
      "reasonCode": null,
      "verificationMethod": "sandbox",
      "assuranceLevel": null,
      "idType": "bvn",
      "country": "NG",
      "subjectType": "individual",
      "idNumber": "00000000001",
      "environment": "SANDBOX",
      "createdAt": "2026-08-15T12:14:31.004Z"
    }
  },
  {
    "version": "2026-08-11",
    "id": "evt_failed_01",
    "type": "verification.failed",
    "createdAt": "2026-08-15T12:15:03.421Z",
    "deliveryId": "del_failed_01",
    "data": {
      "verificationId": "ver_failed_01",
      "requestId": "req_sample_failed",
      "externalId": "your_user_124",
      "workflowId": "wf_sample0000000000",
      "workflowVersion": 3,
      "status": "FAILED",
      "reason": "The user's selfie does not match the photo on file with the government database (match confidence 38%, minimum 70% required).",
      "reasonCode": "selfie_mismatch",
      "verificationMethod": "sandbox",
      "assuranceLevel": null,
      "idType": "bvn",
      "country": "NG",
      "subjectType": "individual",
      "idNumber": "00000000002",
      "facialMatch": false,
      "facialConfidence": 38,
      "dataMatch": false,
      "environment": "SANDBOX",
      "createdAt": "2026-08-15T12:14:58.050Z"
    }
  },
  {
    "version": "2026-08-11",
    "id": "evt_not_found_01",
    "type": "verification.not_found",
    "createdAt": "2026-08-15T12:16:18.120Z",
    "deliveryId": "del_not_found_01",
    "data": {
      "verificationId": "ver_not_found_01",
      "requestId": "req_sample_not_found",
      "externalId": "your_user_125",
      "workflowId": null,
      "workflowVersion": null,
      "status": "NOT_FOUND",
      "reason": "The BVN number was not found in the government database.",
      "reasonCode": "identity_not_found",
      "verificationMethod": "gov_db",
      "assuranceLevel": null,
      "idType": "bvn",
      "country": "NG",
      "subjectType": "individual",
      "idNumber": "00000000003",
      "environment": "SANDBOX",
      "createdAt": "2026-08-15T12:16:11.004Z"
    }
  },
  {
    "version": "2026-08-11",
    "id": "evt_error_01",
    "type": "verification.error",
    "createdAt": "2026-08-15T12:17:40.902Z",
    "deliveryId": "del_error_01",
    "data": {
      "verificationId": "ver_error_01",
      "requestId": "req_sample_error",
      "externalId": "your_user_126",
      "workflowId": "wf_sample0000000000",
      "workflowVersion": 3,
      "status": "ERROR",
      "reason": "A temporary system error prevented this verification from being processed. No charge was applied.",
      "reasonCode": "system_error",
      "verificationMethod": "gov_db",
      "assuranceLevel": null,
      "idType": "bvn",
      "country": "NG",
      "subjectType": "individual",
      "idNumber": "00000000004",
      "environment": "SANDBOX",
      "createdAt": "2026-08-15T12:17:35.418Z"
    }
  }
]

Field reference

FieldTypeNullableValues and meaning
verificationId, requestIdstringNoStable verification and request identifiers.
externalIdstringYesYour customer reference supplied with the request.
workflowIdstringYesPublished workflow that configured the run.
workflowVersionintegerYesExact published version that ran. Pair it with workflowId.
statusstringNoPENDING, VERIFIED, FAILED, NOT_FOUND or ERROR.
reason, reasonCodestringYesPopulated for failure outcomes. Codes are stable for routing; copy is suitable for display.
verificationMethodstringYesgov_db, document_ocr or sandbox. Internal source names are deliberately hidden.
assuranceLevelstringYesFor a verified result: chip, gov_db or document.
idType, countrystringNoSubmitted ID type and ISO 3166-1 alpha-2 country.
subjectTypestringNoindividual or business. Business fields are documented separately.
idNumberstringYesSubmitted identifier where the method uses one.
businessobjectYesCustomer-safe registry result for business checks.
questionnaire, proofOfAddress, nfcobjectYesWorkflow sub-results when those steps ran.
emailVerification, phoneVerificationobjectYesContact possession sub-results when enabled.
deviceIntelobjectYesDevice, IP and soft-signal result when enabled.
userDataobjectYesIndividual identity fields. Null for a business subject.
facialMatch, dataMatchbooleanYesBiometric and identity-data match results.
facialConfidencenumberYesFacial match confidence from the completed check.
mediaobjectYesAuthenticated URLs for captured media.
environmentstringNoEnvironment that produced the event.
createdAtISO 8601 stringNoVerification record creation time. This differs from the envelope event time.

Read the verification resource when you need the latest state or full nested sub-results. workflow.run.completed, credits.deducted, entity.created and identity.resolved can refer to the same customer journey, but they are separate logical events and can arrive in a different order.

See Authentication for signature verification and Webhook Testing for signed simulator delivery.