U-verify

Documentation

Getting started

These docs are written for the team integrating U-verify into their own product; not for U-verify staff. Whatever your stack, whatever your team's experience level, everything below assumes nothing except that you can make an HTTP request.

New to working with APIs?

An API is just a way for your app to ask another company's server to do something: here, "check this NIN", over the internet, using plain HTTP requests. You don't need a special tool: the same curl command, browser fetch, or HTTP client your language already has will work fine.

Pick your integration path

Most teams should start with Hosted Verification. Read both summaries below, then follow the link.

Hosted Verification

We host the verification form. You redirect your user to us, we redirect them back with a signed result. No UI to build, no raw NIN/BVN touching your servers unless you ask for it.

Best for: most teams, especially if you don't need document upload or facial liveness.

Read the guide

Full API

Build your own verification UI. You call our endpoints directly for NIN/BVN lookups, document OCR, and facial liveness, and poll or receive webhooks for async results.

Best for: teams that need document capture or facial liveness inside their own app, or full control over the UX.

Read the guide

1. Create an account

Register a free account with your name, email, and a password, and agree to the Terms of Service and Privacy Policy. No card required, but you do need to verify your email before your sandbox credentials become active, and it's a good idea to check spam if the link doesn't show up in a minute or two.

2. Get your credentials

Verifying your email sends your sandbox client_key and api_secret to your inbox, and they're also visible any time by logging in to your dashboard and opening Profile. Treat them like a username and password pair:

  • client_key — identifies your project. Safe to reference in logs or support requests; not a secret by itself.
  • api_secret — signs every request. Never put this in a mobile app, browser JavaScript, or a public repo. It belongs on your server only.

If a secret ever leaks

Rotate it immediately from your dashboard's Profile page, or ask support to do it for you. Rotating instantly invalidates the old secret.

3. Make your first request

Every authenticated request needs an HMAC signature, the recipe is on the Authentication page. Here's the shortest possible working example: exchanging your credentials for a short-lived access token.

# 1. Compute the signature (see Authentication for the full recipe)
BODY=''
TS=$(date +%s)
HASH=$(printf '%s' "$BODY" | shasum -a 256 | cut -d' ' -f1)
SIGN="$CLIENT_KEY|$TS|POST|/api/v1/auth/token|$HASH"
SIG=$(printf '%s' "$SIGN" | openssl dgst -sha256 -hmac "$API_SECRET" | cut -d' ' -f2)

curl -X POST https://api.uverify.uselodger.com/api/v1/auth/token \
  -H "X-Client-Key: $CLIENT_KEY" \
  -H "X-Timestamp: $TS" \
  -H "X-Signature: $SIG" \
  -H "Content-Type: application/json"

A successful response looks like this — access_token is a JWT you attach as Authorization: Bearer … on every following request, for up to expires_in seconds:

{
  "success": true,
  "data": {
    "access_token": "eyJ0eXAiOiJKV1Qi...",
    "token_type": "bearer",
    "expires_in": 3600,
    "scope": "client"
  }
}

Sandbox vs. production

There's one API host; sandbox and production are just two different kinds of client_key, not two different URLs. A sandbox project's checks run against the same live government-linked providers, so test with real (your own) ID numbers, not fake ones.

Every new account starts on a sandbox client_key capped at 100 checks/month. When you're ready for real usage, request production access from your dashboard, it's a short form about what you're building, reviewed by a person rather than auto-approved, and raises the ceiling to 10,000 checks/month. See the Acceptable Use Policy for what we look for. Your current usage against that ceiling is always visible on your dashboard overview , or read it yourself from GET /portal/profile (monthly_quota and current_month_usage) if you're monitoring it programmatically.

Base URLhttps://api.uverify.uselodger.com/api/v1
Local developmenthttp://api-verify-ng.test/api/v1

Next steps

  • Authentication — the exact HMAC signing recipe, in four languages.
  • Hosted Verification — redirect your users to us, get a signed result back.
  • Full API reference — every endpoint for building your own verification UI.
  • Errors & status codes — what every error code means and how to recover from it.
  • Integration recipes — three complete patterns from real integrations: binding a verified ID to an account, billing per check, and showing results without over-collecting.