PlatformXeDocs
Get API Key

Resolve Identity

API reference for resolving identity numbers across supported countries.

Resolve an identity number to retrieve linked identifiers and profile information. The engine dispatches through the right per-country provider chain based on the identifier kind — see Identity Resolution Overview for the supported countries (NG, KE, GH, ZA) and identifier types.

Endpoint

POST /api/v1/identity/resolve

Scope: identity:resolve

Request body

FieldTypeRequiredDescription
typestringYesIdentity type: bvn, nin, tin, voter, passport, phone, license
valuestringYesThe identity number to resolve
resolveLinkedbooleanNoIf true, resolve all linked identifiers via the NIN hub. Default: false
consentobjectYesConsent proof (see below)
consent.referencestringYesYour application's consent reference ID
consent.obtainedAtstringYesISO 8601 timestamp when consent was obtained

The consent field is mandatory. Requests without a valid consent reference are rejected with a BAD_REQUEST error. See Consent & NDPR for compliance details.

Response

{
  "success": true,
  "data": {
    "identifiers": {
      "nin": "12345678901",
      "bvn": "22345678901",
      "tin": "1234567890",
      "passport": "A12345678",
      "voter": "90F5B12345678901234",
      "phone": "+2348012345678",
      "license": "ABC12345DE67"
    },
    "profile": {
      "firstName": "Adaeze",
      "lastName": "Okonkwo",
      "dateOfBirth": "1990-05-15",
      "gender": "female"
    },
    "confidence": 0.95,
    "resolvedAt": "2026-04-05T14:30:00.000Z",
    "cached": false
  }
}
FieldTypeDescription
identifiersobjectResolved identity numbers (only populated fields are returned)
profileobjectBasic demographic information from the identity record
confidencenumberMatch confidence score between 0 and 1
resolvedAtstringISO 8601 timestamp of resolution
cachedbooleanWhether the result was served from cache

When resolveLinked is false, only the input identifier and its directly resolved NIN are returned. Set resolveLinked: true to get all linked identifiers.

Examples

curl

curl -X POST https://api.platformxe.com/api/v1/identity/resolve \
  -H "Content-Type: application/json" \
  -H "x-api-key: pxk_live_your_api_key_here" \
  -d '{
    "type": "bvn",
    "value": "22345678901",
    "resolveLinked": true,
    "consent": {
      "reference": "consent_ref_abc123",
      "obtainedAt": "2026-04-01T10:00:00.000Z"
    }
  }'

SDK

import { PlatformXe } from '@caldera/platformxe-sdk';

const px = new PlatformXe({ apiKey: 'pxk_live_your_api_key_here' });

const result = await px.identity.resolve({
  type: 'bvn',
  value: '22345678901',
  resolveLinked: true,
  consent: {
    reference: 'consent_ref_abc123',
    obtainedAt: '2026-04-01T10:00:00.000Z',
  },
});

console.log(result.data.identifiers.nin);
// "12345678901"

console.log(result.data.profile.firstName);
// "Adaeze"

console.log(result.data.confidence);
// 0.95

Resolve without linked identifiers

const result = await px.identity.resolve({
  type: 'nin',
  value: '12345678901',
  resolveLinked: false,
  consent: {
    reference: 'consent_ref_def456',
    obtainedAt: '2026-04-01T10:00:00.000Z',
  },
});

// Only NIN is returned since resolveLinked is false
console.log(result.data.identifiers.nin);
// "12345678901"

Error responses

CodeDescription
BAD_REQUESTMissing required fields, invalid identity type, or missing consent
NOT_FOUNDNo identity record found for the given type and value
FORBIDDENAPI key does not have the identity:resolve scope
RATE_LIMITEDExceeded plan limit for identity resolution requests