Which endpoint should I use?
credit-summary aggregates all four bureaus in a single request — it’s the one to reach for unless you specifically need a named bureau. Calling the four individually costs more and takes longer.
Pricing is per merchant — check your own rates rather than assuming a list price. Every response tells you
exactly what that call cost you in
data.walletAmount, and the debit carries data.walletTransactionReference.
That’s the authoritative figure; bill your customers from it, not from a number in a doc.Endpoints
Every one takes the same body — a BVN — and is signed like other money-adjacent calls.
Request
Signature required: YesResponse
Results come back in the response — credit checks are synchronous, not webhook-driven. TheVERIFICATION_NOTIFICATION webhook also fires afterwards carrying the charge, for your own reconciliation; you don’t need to handle it to use these endpoints.
Expect gaps. A bureau returns only what it holds — if someone has no history with a lender, fields come back
as
null. The field is still there: we return every field the bureau sends, null included, so the shape doesn’t
shift between subjects. Treat null as “no data”, not zero.Getting a numeric score
If you need a number to derive a lending band, usecredit-score (or credit-summary, which nests the
same score alongside all four bureaus). This is the complete response — exactly what credit-score returns in
test mode for BVN 22222222222:
score.ficoScore.score — a string ("720"), because every normalizedResult value is a
string or null. In credit-summary the same values sit one level deeper, under ficodata.score.ficoScore.*.
walletAmount above is what this call cost on this account — yours depends on your own pricing. Read it from
the response; don’t hard-code it.
The thin-file case — a score you must handle being absent
Same call, BVN11111111111 (a borrower the bureau knows but has never scored). Every key is still present; the
values are null:
success is still true and you are still charged — the bureau answered; the answer is “no score”. Branch on
score.ficoScore.score == null, not on success.
Not found
BVN00000000000. normalizedResult is null — there are no fields, so there’s no map — and you are not
charged (walletAmount: null):
Billing
Each call is billable on success and debited from your wallet (walletAmount in the response). Send an idempotencyKey so a network retry doesn’t bill you twice.