SafeNaijaIT Developers
SAFENAIJA AS INFRASTRUCTURE

Verification API

Banks, insurers, supermarkets, marketplaces, pharmacies, logistics firms, hospitals and e-commerce platforms can verify products with one request.

First 1,000 checks free / month
1 · GET A KEY

Authentication

Register your organisation in the Business & Brands portal. Once SafeNaija has verified it, create a key under API access. Send it in the x-api-key header. Keep keys on your server, never in a browser or app bundle.

2 · VERIFY A PRODUCT

POST /api/v1/verify-product

Also available at POST /verify-product. Send at least one of serial, gtin or barcode (the raw text from a barcode or QR, including SafeNaija Verified URLs).

curl -X POST https://safenaija.netlify.app/api/v1/verify-product \
  -H "x-api-key: sn_live_YOUR_KEY" \
  -H "content-type: application/json" \
  -d '{"serial":"ABCD-EFGH-JKLM","gtin":"5942326401428","batch":"BN2408","nafdacNumber":"A4-123456"}'

Request fields

FieldDescription
serialSafeNaija serial (XXXX-XXXX-XXXX) or the full /v/ QR URL
gtin8–14 digit GTIN / EAN / UPC
barcodeRaw scanned text. GS1 Digital Link and GS1 element strings are parsed
batchBatch / lot printed on the pack
nafdacNumberNAFDAC registration number printed on the pack
nameOptional product name for alert matching
regionOptional Nigerian state where the check happened (improves duplicate-serial detection)
recordScanfalse to verify without counting a scan (e.g. warehouse audits)

Response

{
  "requestId": "6f1c…",
  "status": "VERIFIED",
  "verified": true,
  "message": "This product matches the manufacturer’s authenticated record.",
  "manufacturer": { "id": "…", "name": "Example Pharma", "verified": true },
  "product": { "name": "Paracetamol 500mg", "gtin": "5942326401428", "nafdacNumber": "A4-123456", "category": "Medicine" },
  "batch": { "code": "BN2408", "status": "active", "expiry": "2027-05-31" },
  "checks": {
    "manufacturer": { "status": "pass", "detail": "Example Pharma — verified manufacturer" },
    "product":      { "status": "pass", "detail": "Paracetamol 500mg" },
    "gtin":         { "status": "pass", "detail": "GTIN 5942326401428 matches" },
    "nafdac":       { "status": "pass", "detail": "NAFDAC No. A4-123456 matches" },
    "batch":        { "status": "pass", "detail": "Batch BN2408 · expires 2027-05-31" },
    "serial":       { "status": "pass", "detail": "Serial ABCD-EFGH-JKLM is authentic · first verification" },
    "supplyChain":  { "status": "pass", "detail": "manufactured (Lagos) → shipped → received" }
  },
  "alerts": [],
  "checkedAt": "2026-10-06T12:00:00.000Z",
  "usage": { "month": "2026-10", "calls": 42, "freeRemaining": 958, "accruedCharge": "₦0" }
}

Statuses

StatusMeaning
VERIFIEDSerial, product and batch match a verified manufacturer’s record
REGISTEREDProduct registered by a verified manufacturer. No serial, so the individual pack isn’t authenticated
RECALLEDBatch recalled by the manufacturer
EXPIREDBatch past its recorded expiry
DUPLICATESerial already verified in another state or many times. Possibly copied
SUSPICIOUSGTIN, NAFDAC number, batch or serial doesn’t match, or the serial is revoked
NOT_FOUNDNo manufacturer record on SafeNaija

Errors

400 invalid body · 401 missing or revoked key · 402 free allowance used and no active plan · 403 organisation not verified · 503 temporarily unavailable.

3 · PRICING

Tiered API pricing

First 1,000 checks free every month, then tiered per-check pricing.