Verifying…
REST · JSON · v1

Medicine verification API

Add NAFDAC product checks, WHO recall alerts, drug facts, generic equivalents, interaction checks and MDCN doctor verification to your pharmacy, hospital, HMO or health app — in minutes.

Quickstart

Create an account

Sign up — your API key is shown on your dashboard immediately.

Add credit or subscribe

Top up your wallet to pay per call, or choose a monthly or yearly unlimited plan from your dashboard.

Make your first call

Send your key in the X-Api-Key header. Every response is JSON.

Base URL

https://pillvera.com/api/v1/

Your first request

curl -X POST https://pillvera.com/api/v1/verify-product.php \
  -H "X-Api-Key: $RX_API_KEY" \
  -d "product=A4-1234"

Authentication

Every request needs your secret API key in the X-Api-Key header (an api_key form/query field is also accepted). Requests may be GET or POST (form-encoded).

X-Api-Key: 3f9c…your 40-character key…a1b2
Keep your key on your server. Never put it in a mobile app, website JavaScript or a public repository. If it leaks, regenerate it from your dashboard — the old key stops working instantly.

Pricing & billing

Choose what suits your volume — and switch anytime from your dashboard:

Pay as you go

Prepay your wallet (instant online top-up), then each call is deducted at the price below. No commitment.

All-access plans

Unlimited calls to every endpoint for ₦15,000.00/month or ₦150,000.00/year.

EndpointPrice per callWhen charged
verify-product₦20.00Charged only when a product is found.
check-global-alert₦20.00Charged on every call.
drug-info₦15.00Charged only when a label is found.
find-generic₦15.00Charged on every call.
check-interactions₦20.00Charged on every call.
verify-doctor₦50.00Charged only when a record is found.
submit-correctionFreeNever charged

Every billable response tells you what happened, so you can reconcile in your own system:

chargeAmount deducted for this call (0 when covered by a plan or not billable)
billed_viawallet or subscription (sandbox in the sandbox)
wallet_balanceYour wallet balance after this call

Errors

Errors return a non-2xx status and {"success": false, "error": "human-readable message"}.

StatusMeaningWhat to do
401Missing/invalid key, or account not activeCheck the header; check your dashboard
402Insufficient wallet balanceTop up or subscribe
404Endpoint not availableCheck the URL
405Wrong HTTP methodUse GET or POST
422Missing or invalid parameterRead the error field
429Sandbox rate limit reachedWait, or use your live key
500Unexpected server errorSafe to retry with back-off

Verify a NAFDAC product

₦20.00 / call

GET / POSThttps://pillvera.com/api/v1/verify-product.php

Look up a medicine by NAFDAC registration number (preferred) or product name. Returns registration status, manufacturer, whether the manufacturer has verified the listing, and any matching WHO falsified/substandard alerts. Charged only when a product is found.

ParameterTypeDescription
productstringrequiredNAFDAC number, e.g. A4-1234, or a product name

Request

curl -X POST https://pillvera.com/api/v1/verify-product.php \
  -H "X-Api-Key: $RX_API_KEY" \
  -d "product=A4-1234"

Response

{
  "success": true,
  "query": "A4-1234",
  "found": true,
  "nafdac_reg_no": "A4-1234",
  "product_name": "Coartem 20/120 Tablets",
  "manufacturer": "Novartis",
  "category": "drug",
  "registry_status": "active",
  "registration_expires_at": null,
  "last_confirmed_at": "2026-10-27 06:00:00",
  "manufacturer_verified": false,
  "has_global_alert": false,
  "alerts": [],
  "disclaimer": "…",
  "charge": 20,
  "billed_via": "wallet",
  "wallet_balance": 4980
}
Try it in the sandbox

Check WHO recall / fake-drug alerts

₦20.00 / call

GET / POSThttps://pillvera.com/api/v1/check-global-alert.php

Match a product against the World Health Organization's published falsified and substandard medical product alerts (synced automatically). Charged on every call.

ParameterTypeDescription
productstringrequiredProduct name or NAFDAC number

Request

curl -X POST https://pillvera.com/api/v1/check-global-alert.php \
  -H "X-Api-Key: $RX_API_KEY" \
  -d "product=Darzalex"

Response

{
  "success": true,
  "query": "Darzalex",
  "matched_in_nafdac_cache": true,
  "matched_product_name": "Darzalex (daratumumab) Injection",
  "has_global_alert": true,
  "alerts": [{
    "reference": "N°5/2026",
    "type": "falsified",
    "title": "Medical Product Alert N°5/2026: Falsified Darzalex",
    "published_at": "2026-05-12",
    "source_url": "https://www.who.int/news/item/…"
  }],
  "charge": 0,
  "billed_via": "subscription",
  "wallet_balance": 4980
}
Try it in the sandbox

Drug facts: uses & side effects

₦15.00 / call

GET / POSThttps://pillvera.com/api/v1/drug-info.php

Uses, side effects, warnings, contraindications, pregnancy/breastfeeding notes and storage, summarised from the official U.S. FDA label. International names (e.g. paracetamol) are mapped automatically. Dosing is intentionally not returned. Charged only when a label is found.

ParameterTypeDescription
drugstringrequiredBrand or active ingredient, e.g. Paracetamol

Request

curl -X POST https://pillvera.com/api/v1/drug-info.php \
  -H "X-Api-Key: $RX_API_KEY" \
  -d "drug=Amoxicillin"

Response

{
  "success": true,
  "query": "Amoxicillin",
  "found": true,
  "facts": {
    "generic_name": "Amoxicillin",
    "brand_names": ["Amoxil"],
    "route": "Oral",
    "uses": "Infections of the ear, nose, throat…",
    "side_effects": "Nausea, vomiting, diarrhoea, rash…",
    "warnings": "Serious allergic reactions…",
    "do_not_use": "History of allergy to penicillins…",
    "pregnancy": "…",
    "storage": "…"
  },
  "source": "U.S. FDA drug label via openFDA",
  "charge": 15,
  "billed_via": "wallet",
  "wallet_balance": 4965
}
Try it in the sandbox

Find generic equivalents

₦15.00 / call

GET / POSThttps://pillvera.com/api/v1/find-generic.php

Every brand and generic product sharing the same active ingredient (RxNorm). Use it to suggest lower-cost alternatives. Charged on every call.

ParameterTypeDescription
drugstringrequiredBrand or generic name, e.g. Panadol

Request

curl -X POST https://pillvera.com/api/v1/find-generic.php \
  -H "X-Api-Key: $RX_API_KEY" \
  -d "drug=Panadol"

Response

{
  "success": true,
  "query": "Panadol",
  "found": true,
  "ingredient_name": "Acetaminophen",
  "equivalents": [
    { "name": "Tylenol", "tty": "BN" },
    { "name": "acetaminophen 500 MG Oral Tablet", "tty": "SCD" }
  ],
  "charge": 15,
  "billed_via": "wallet",
  "wallet_balance": 4950
}
Try it in the sandbox

Check a drug interaction

₦20.00 / call

GET / POSThttps://pillvera.com/api/v1/check-interactions.php

Cross-references both medicines' official FDA label interaction and warning text for mentions of each other. A reference check, not a scored clinical verdict. Charged on every call.

ParameterTypeDescription
drug_astringrequiredFirst medicine
drug_bstringrequiredSecond medicine
tierstringoptionalbasic (default)

Request

curl -X POST https://pillvera.com/api/v1/check-interactions.php \
  -H "X-Api-Key: $RX_API_KEY" \
  -d "drug_a=Warfarin" -d "drug_b=Aspirin"

Response

{
  "success": true,
  "engine": "basic",
  "drug_a": { "input": "Warfarin", "matched_name": "warfarin", "label_found": true },
  "drug_b": { "input": "Aspirin", "matched_name": "aspirin", "label_found": true },
  "possible_mention_found": true,
  "excerpt_from_a_mentioning_b": "…aspirin…may increase the risk of bleeding…",
  "excerpt_from_b_mentioning_a": null,
  "both_labels_found": true,
  "charge": 20,
  "billed_via": "wallet",
  "wallet_balance": 4930
}
Try it in the sandbox

Verify an MDCN doctor

₦50.00 / call

GET / POSThttps://pillvera.com/api/v1/verify-doctor.php

Check a medical practitioner's registration number against our copy of the MDCN register. Charged only when a record is found.

ParameterTypeDescription
registration_numberstringrequirede.g. MDCN/R/12345

Request

curl -X POST https://pillvera.com/api/v1/verify-doctor.php \
  -H "X-Api-Key: $RX_API_KEY" \
  -d "registration_number=MDCN/R/12345"

Response

{
  "success": true,
  "query": "MDCN/R/12345",
  "found": true,
  "registry_status": "active",
  "full_name": "Jane Doe",
  "specialty": "General Practice",
  "practice_location": "Lagos",
  "last_confirmed_at": "2026-09-01 10:00:00",
  "is_stale": false,
  "charge": 50,
  "billed_via": "wallet",
  "wallet_balance": 4880
}
Try it in the sandbox

Report a data error

POSThttps://pillvera.com/api/v1/submit-correction.php

Tell us when a registration number that should exist came back not found, or looks wrong. Always free.

ParameterTypeDescription
registration_numberstringrequiredThe number you checked
reported_namestringoptionalThe name you expected
notestringoptionalAnything that helps us fix it

Live sandbox

Run real requests against live data — no API key, no charge. Responses are identical to production plus "sandbox": true. Limited to 30 calls per hour.

Best practices

  • Call the API from your server, never from a browser or mobile app.
  • Cache results for a few hours — registry data changes slowly and you'll save money.
  • Handle 402 by alerting your team to top up, or move to an all-access plan.
  • Retry 500 responses with exponential back-off (e.g. 1s, 2s, 4s).
  • Show the disclaimer field to end users when you display results.
  • Use charge and billed_via to reconcile usage in your own records.

Ready to integrate?

Create an account and get your API key in under a minute.