Skip to content

NIN Verification

Verify a National Identity Number against the NIMC record by raw NIN, in-person selfie, or NINAuth share code.

View as Markdown

Checks a National Identity Number against the NIMC record through Speedily’s licensed Front-End Processor access. Choose the method that matches how you collected consent.

POST/v1/verify/nin
Availability
Sandbox and live
Indicative price
₦100.00 per completed check
Consent
Depends on the method: your attestation (nin), the live selfie (in_person) or the NINAuth share code (share_code).
MCP tool
verify_nin

Methods

Choose a method with the method field. Each one has its own required fields and consent mechanism.

methodDescriptionRequired fields
nin
Raw NIN lookup. Restricted by NIMC to financial institutions and government agencies.
nin, reason, consent
in_person
NIN plus a live selfie. The selfie is the consent. Available to all business types.
nin, selfie_image, reason
share_code
6-character code the subject generates in the NINAuth app. The code is the consent.
share_code, reason

Request

Body parameters · method

Raw NIN lookup. Restricted by NIMC to financial institutions and government agencies.

  • methodstringrequired

    Always nin.

  • ninstringrequired

    Format: 11 digits.

  • reasonstringrequired

    Purpose of the check. One of the 38 NIMC purpose codes. See the purpose code list.

  • consentobjectrequired

    Your attestation that you obtained the data subject's consent for this purpose.

  • consent.obtainedbooleanrequired

    Always true.

  • matchobject

    Optional values to compare against the record. Each comparison is returned in field_matches; match is true only if all of them agree.

  • match.first_namestring

    Must not be empty.

  • match.middle_namestring

    Must not be empty.

  • match.last_namestring

    Must not be empty.

  • match.date_of_birthstring

    Format: date, YYYY-MM-DD.

  • method: "nin" (raw NIN lookup) is restricted by NIMC to financial institutions and government agencies. Other accounts receive 403 not_entitled; use in_person or share_code.
  • share_code checks carry no NIN, so subject is null in the response.
  • If NIMC does not answer in time the response is 202 with status: "pending". Read it again with GET /v1/verifications/{reference_id}: pending NIN checks are re-queried on read.

Send an Idempotency-Key header so a retried request is never billed twice. See Idempotency.

curl -X POST http://localhost:4000/v1/verify/nin \
  -H "Authorization: Bearer sk_test_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "method": "nin",
  "nin": "98765432109",
  "reason": "financialProducts",
  "consent": {
    "obtained": true
  },
  "match": {
    "last_name": "Griffin"
  }
}'

Response

A completed check returns 200 with a verification object. status is verified or not_found. If the provider has not answered in time you get 202 with status: "pending"; retrieve it later or wait for the verification.completed webhook.

200 OK · assertion
{
  "reference_id": "spm_8171f3a87cbe221341f7185f",
  "object": "verification",
  "product": "nin",
  "method": "nin_raw",
  "status": "verified",
  "match": true,
  "field_matches": {
    "last_name": true
  },
  "field_confidence": {
    "last_name": 100
  },
  "mode": "sandbox",
  "reason": "financialProducts",
  "subject": "*******2109",
  "summary": {
    "first_name": "A*****",
    "last_name": "O*****"
  },
  "consent": {
    "mechanism": "client_attested",
    "consent_id": null,
    "timestamp": "2026-10-19T09:41:07.512Z"
  },
  "source": "api",
  "error": null,
  "billing": {
    "amount_kobo": 0,
    "currency": "NGN"
  },
  "latency_ms": 412,
  "created_at": "2026-10-19T09:41:07.512Z",
  "updated_at": "2026-10-19T09:41:07.874Z"
}

summary

  • first_namestring

    First name on the record, masked to its first letter: A*****.

  • last_namestring

    Last name on the record, masked to its first letter.

Full-tier accounts calling the REST API also receive provider, provider_reference and data, the normalized record. MCP, webhooks, lists and bulk results never include it. See Response shaping.

Full tier only
{
  "provider": "sandbox",
  "provider_reference": "SBX6CB753DB2C",
  "data": {
    "first_name": "CLARKE",
    "middle_name": "ELIZA",
    "last_name": "GRIFFIN",
    "date_of_birth": "1992-04-18",
    "gender": "female",
    "phone": "08031234567",
    "address": {
      "residential": "14 ADEOLA ODEKU STREET",
      "town": "VICTORIA ISLAND",
      "state": "Lagos",
      "lga": "Eti-Osa"
    },
    "origin": {
      "state": "Enugu",
      "lga": "Nsukka",
      "town": "NSUKKA"
    },
    "photo": "/9j/4AAQSkZJRgABAQEASABIAAD…"
  }
}

Test values

Send these bodies with a sandbox key. More outcome triggers are on the Sandbox page.

Verified (Clarke Griffin)
{
  "method": "nin",
  "nin": "98765432109",
  "reason": "financialProducts",
  "consent": {
    "obtained": true
  }
}
Verified (Bellamy Blake)
{
  "method": "nin",
  "nin": "09876543210",
  "reason": "employmentRecruitment",
  "consent": {
    "obtained": true
  }
}
Share code
{
  "method": "share_code",
  "share_code": "SPM001",
  "reason": "financialProducts"
}
Not found
{
  "method": "nin",
  "nin": "00000000000",
  "reason": "financialProducts",
  "consent": {
    "obtained": true
  }
}
Provider timeout (resolves on requery)
{
  "method": "nin",
  "nin": "99999999999",
  "reason": "financialProducts",
  "consent": {
    "obtained": true
  }
}

Errors

StatusCodeMeaning
400
invalid_request
The body failed validation. details lists each field.
401
unauthorized
Missing or invalid API key.
402
insufficient_balance
Live only: wallet balance is below the check price.
403
not_entitled
Your workspace is not enabled for this product or method.
409
idempotency_key_reused
The Idempotency-Key was used with a different body.
422
provider_rejected_request
The upstream registry rejected the request.
503
verification_unavailable
Temporary failure. Retry, with the same or a new Idempotency-Key.

All errors share one shape. See Errors for the full list.

Questions? Email developers@speedmap.ng. This page is also available as Markdown.