Audit-ready KYB · source-stamped verdicts · free to start

Verify any African business in one API call

Business verification (KYB) for Africa: one call returns a decision-ready verdict — registration, status, sanctions screening and risk signals across 1M+ companies and 18 registries. Every field carries its source, the date checked and a confidence signal. Read access is free with an API key.

1M+companies18registries500K+procurement awardsOFAC · UNsanctions lists

How we compare: OpenCorporates, Pappers and Dun & Bradstreet.

Built for

Know the business you're onboarding

Fintech & PSP onboarding

Verify a merchant the moment they sign up, registered, active, not sanctioned.

Lending & credit KYB

Confirm the borrowing entity and pull risk signals before you underwrite.

Marketplace seller vetting

Screen business sellers at scale across 18 African registries.

AML / CDD & EDD

Sanctions screening (OFAC, UN) and an audit-ready, sourced decision trail.

Quick start

One call, a decision

Every request needs a free API key. Send it in an Authorization: Bearer header (or x-api-key) — issue yourself one instantly from the dashboard. Then verify a business:

curl -X POST -H "Authorization: Bearer $FYLINGS_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Dangote Cement Plc","country":"NG"}' \
  "https://www.fylings.com/api/v1/verify"

Returns a decision-ready verdict:

{
  "result": "verified",            // verified | review | not_found
  "registered": true,
  "match_confidence": 0.97,
  "company": {
    "legal_name": "DANGOTE CEMENT PLC",
    "registration_no": "208767",
    "country": "NG",
    "status": "active",
    "entity_type_label": "Public Limited Company (PLC)",
    "incorporation_date": "1992-11-04",
    "source": "CAC (Corporate Affairs Commission)",
    "registry_url": "https://www.fylings.com/company/ng/208767/dangote-cement-plc"
  },
  "sanctions": { "screened": true, "result": "clear", "hits": [] },
  "data_confidence": 0.96,
  "signals": { "listed": true, "has_government_contracts": true, "has_trademarks": false },
  "sources": ["CAC", "OFAC SDN", "OFAC Consolidated", "UN"],
  "checked_at": "2026-06-29T18:00:00Z"
}

Prefer raw data? /v1/search returns matching records and /v1/company returns one full record, see the endpoints below.

Reference

Endpoints

POST/api/v1/verify{ name?, registration_no?, country? }

Decision-ready KYB verdict for one business: resolves the company, screens it against OFAC + UN, and returns verified / review / not_found with the evidence. Name OR registration number required.

Returns: result, registered, match_confidence, company, sanctions, data_confidence, signals, sources.

GET/api/v1/search?q={name|regno}&country={cc}

Search companies by name or registration number. Scope to one country with country, or omit it to search broadly. On a cache miss it queries the live registry and caches the result, so real companies always resolve.

Returns: query, count, source (db | live), checked_registries, and a results array.

GET/api/v1/company/{country}/{regno}

Fetch one company's full record by country code and registration number, legal name, status, entity type, incorporation date, and any officers we hold.

Returns: A single company object, or 404 if not found.

Example record fetch: https://www.fylings.com/api/v1/company/mu/C40612

Raw search, match by name or registration number:

curl -H "Authorization: Bearer $FYLINGS_KEY" \
  "https://www.fylings.com/api/v1/search?q=dangote&country=ng"
{
  "query": "dangote",
  "country": "NG",
  "count": 12,
  "source": "db",
  "results": [
    {
      "legal_name": "DANGOTE CEMENT PLC",
      "registration_no": "208767",
      "country": "NG",
      "status": "active",
      "entity_type": "company",
      "entity_type_label": "Public Limited Company (PLC)",
      "incorporation_date": "1992-11-04",
      "listed_ticker": "DANGCEM",
      "source": "CAC (Corporate Affairs Commission)",
      "source_url": "https://www.cac.gov.ng"
    }
  ]
}

The data

What every record carries

legal_nameRegistered legal name
registration_noRegistry number (RC / RCCM / file no.)
statusactive · dormant · dissolved · unknown
entity_type / _labelNormalised type + human label
incorporation_dateISO date, where the registry publishes it
source / source_urlThe registry it came from + its public page
listed_tickerStock ticker, for listed companies

Every field is provenance-tracked, the registry it came from and its public page, and we never fabricate: where a registrar doesn't publish a value, it's left null rather than guessed.

Beyond the registry

Not just company records

Government procurement

500,000+ public-contract awards matched to the companies that won them, across Nigeria, Tanzania, Uganda, Zambia, Ghana and Kenya. Each award carries the buyer, title, value and date.

Sanctions screening

Every company is screened against the OFAC SDN, OFAC Consolidated and UN Security Council lists, with a name-match confidence so you can prioritise review.

Trademarks (where available)

For companies with registered marks (OAPI / ARIPO), the brand portfolio with status and classes, live where the IP office publishes it.

Reference

Responses & errors

200Success, JSON body as documented above
401Missing or invalid API key (send it as Authorization: Bearer or x-api-key)
404Company not found (company endpoint only)
429Rate limit / monthly quota exceeded, back off and retry

Authentication errors look like this:

HTTP/1.1 401 Unauthorized
{ "error": "invalid_api_key", "message": "This API key is not valid or has been revoked." }

HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 2026-08-01T00:00:00.000Z
{ "error": "quota_exceeded", "message": "Monthly quota of 100 requests reached. ..." }

Every authenticated response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers, so your client can budget without guessing.

Pagination: /v1/search takes limit (default 25, max 100) and offset; the response's count is the total number of matches, page until your offset reaches it.

The free key includes 100 requests/month, and paid plans start at $49/month (pricing). Machine-readable spec: /api/openapi.json (OpenAPI 3.1, feeds SDK generators and AI agents).

Free to evaluate, priced to build on

Issue yourself a key with 100 requests/month from the dashboard, no card, no sales call, enough to evaluate every endpoint. Paid plans start at $49/month and add shareholding data, bulk verification and procurement, see pricing. For bulk delivery, monitoring with change alerts, or an SLA, tell us what you need at [email protected].