> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fastcac.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Business verifications

> Check the business an applicant names: is the number real, does the name match, is it active, and are these its officers.

When a business signs up with you, a verification checks what its applicant told you against CAC's
register: the registration number, the business name, whether CAC lists it as active and, if you
send their names, whether the people you're dealing with are its officers. You get one result and
each check behind it, not a copy of CAC's record.

## Verify a business

`POST /v1/businesses/verifications` with the number and name your applicant gave, and optionally
up to 10 officer names.

```bash theme={null}
curl https://api.fastcac.com/v1/businesses/verifications \
  -H "Authorization: Bearer $FASTCAC_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"number": "RC 7654321", "name": "Ada Foods Ltd", "officers": ["Ada Obi"]}'
```

```json Response (201) theme={null}
{
  "object": "business_verification",
  "id": "bver_6BMrXa53Vaxt8BIPwKeQv5",
  "number": "7654321",
  "type": "RC",
  "result": "match",
  "checks": {
    "number_found": true,
    "name": {
      "result": "exact",
      "score": 1.0,
      "registered_name": "ADA FOODS LIMITED"
    },
    "active": true,
    "status": "ACTIVE",
    "officers": [
      {
        "name": "Ada Obi",
        "matched": true,
        "role": "director"
      }
    ]
  },
  "amount_charged": "200.00",
  "transaction_id": "wtx_6nChZbZ2SuiFgTDt5VSNlI",
  "created_at": "2026-10-28T15:16:04Z"
}
```

## The result

| `result` | When |
| - | - |
| `match` | The name is exact, CAC lists the business as active, and every officer you sent matched. |
| `partial` | The name is close but not exact, the business isn't active, or an officer didn't match. |
| `no_match` | The name is a different business's. |
| `not_found` | CAC has no business with that number. |

`result` is a summary; decide your own rules from `checks`. For example, you might accept `partial`
when only `status` is `INACTIVE` and ask the applicant to file their annual returns.

| Check | What it is |
| - | - |
| `number_found` | CAC has a business with the number. |
| `name.result` | `exact` once case, punctuation, spacing and spellings such as LTD/LIMITED, PLC and &/AND are ignored. Otherwise the distinctive part of each name is compared, leaving out endings like LIMITED, NIGERIA or VENTURES: `close` when they're the same or nearly (so "Ada Foods Ltd" is close to ADA FOODS NIGERIA LIMITED), `no_match` when they aren't (ZENITH NIGERIA LIMITED isn't close to ZEST NIGERIA LIMITED). |
| `name.score`, `name.registered_name` | How similar the distinctive parts are, from 0 to 1, and the name on CAC's register. |
| `active`, `status` | Whether CAC lists it as `ACTIVE`, and its status as CAC writes it. |
| `officers` | One entry per name you sent: `matched`, and the officer's `role` when it did. Names match word for word, in any order, when every word of the shorter one is in the longer one: "Ada Obi" matches ADA CHIOMA OBI, and "Ada Chioma Obi" matches ADA OBI. Initials count ("A. C. Obi"), as do common spellings like Mohammed and Muhammad, but not misspellings, so relatives on the same board don't match each other. Only proprietors, directors, secretaries and persons with significant control count. `null` when you sent none. |

A number in more than one register needs `type` (`400 type_required`, as with
[lookups](https://docs.fastcac.com/guides/business-lookups.md#look-up-a-business)).

`GET /v1/businesses/verifications/{id}` returns it again, free. We keep only the result and the
checks (encrypted, since they hold the names you sent), never CAC's record or its officer list.

## Pricing

| Verification | Price |
| - | - |
| Number, name and status | **Free**, including `not_found` |
| With officer names | **₦200** from the wallet of the key's mode |

The current price is on the **Pricing** page; a charge shows as a `business_verification_charge` in
[your transactions](https://docs.fastcac.com/guides/balance.md#transactions), and `amount_charged` is `"0.00"` for a free one.

| Outcome with officer names | Charged |
| - | - |
| A result | Yes |
| `not_found`: officers aren't checked | No |
| `503 lookup_unavailable`: CAC's records didn't answer | No: charged, then refunded (`business_verification_refund`) |
| `503 cac_search_unavailable`: CAC's search didn't answer. Checked before any charge. | No |
| `402 insufficient_balance`: the wallet can't cover it. Nothing is checked. | No |
| `400`: a name, number or officer name isn't valid (each officer needs at least two words) | No |

Send an `Idempotency-Key`: a retry with the same key gets the first answer and isn't charged again.
Live verifications allow 60 a minute per organization.

## When the business isn't registered

A `not_found` applicant can register their business name without leaving your product: see
[Registrations](https://docs.fastcac.com/guides/registrations.md).

## Test mode

Test verifications never reach CAC. Every number is the test business: ADA FOODS VENTURES when
`type` is `BN`, ADA FOODS LIMITED otherwise, active, with ADA CHIOMA OBI as its officer. So
`{"number": "RC 7654321", "name": "Ada Foods Ltd", "officers": ["Ada Obi"]}` is a `match`, and a
different name or officer gives the other results. `?simulate=not_found` and `?simulate=inactive`
force those answers and `?simulate=cac_search_unavailable` gives its `503`. With officer names,
`lookup_unavailable` gives the other `503` and `insufficient_balance` the `402`; without them nothing
is fetched or charged, so those two don't apply.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.