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.
Banks, insurers, supermarkets, marketplaces, pharmacies, logistics firms, hospitals and e-commerce platforms can verify products with one request.
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.
POST /api/v1/verify-productAlso 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"}'
| Field | Description |
|---|---|
serial | SafeNaija serial (XXXX-XXXX-XXXX) or the full /v/ QR URL |
gtin | 8–14 digit GTIN / EAN / UPC |
barcode | Raw scanned text. GS1 Digital Link and GS1 element strings are parsed |
batch | Batch / lot printed on the pack |
nafdacNumber | NAFDAC registration number printed on the pack |
name | Optional product name for alert matching |
region | Optional Nigerian state where the check happened (improves duplicate-serial detection) |
recordScan | false to verify without counting a scan (e.g. warehouse audits) |
{
"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" }
}
| Status | Meaning |
|---|---|
VERIFIED | Serial, product and batch match a verified manufacturer’s record |
REGISTERED | Product registered by a verified manufacturer. No serial, so the individual pack isn’t authenticated |
RECALLED | Batch recalled by the manufacturer |
EXPIRED | Batch past its recorded expiry |
DUPLICATE | Serial already verified in another state or many times. Possibly copied |
SUSPICIOUS | GTIN, NAFDAC number, batch or serial doesn’t match, or the serial is revoked |
NOT_FOUND | No manufacturer record on SafeNaija |
400 invalid body · 401 missing or revoked key · 402 free allowance used and no active plan · 403 organisation not verified · 503 temporarily unavailable.
First 1,000 checks free every month, then tiered per-check pricing.