Identity fields
Which fields apply depends ontype, and sending one that does not apply is refused rather than ignored.
All six are optional. A customer with none of them is a valid customer.
jurisdiction is a two-letter country code and is not validated against the identity fields. A customer with jurisdiction: "GH" and a bvn is accepted; nothing cross-checks them.They go in and do not come out
Identity numbers are write-only. No endpoint returns one, and no webhook payload carries one. The response reports presence instead:Uniqueness
Within your business, each identity number must be unique among customers that are not archived — one BVN cannot back two of your active customers. The same person may legitimately be a customer of two different Sakawave businesses, so uniqueness is scoped to you, not to the platform. A collision returns409 customer_already_exists, the same code as a duplicate externalReference. The response does not say which value collided, so when you handle that error, check the reference first:
Correcting and clearing
Identity fields are patchable like any other. An explicitnull clears one:
Tiers
Sakawave defines three verification tiers:
Every customer is created at tier 1. Supplying a BVN records the number; it does not verify it and does not raise the tier. The tier becomes 3 when the customer passes verification, and no endpoint sets it directly.
Verification events
Each change in a customer’s verification is sent as its own event:
Nothing is sent while a verification is still under review.
data is the customer object with one extra field:
failureReason is the provider’s reason on rejection or suspension, when it gives one, and always null on approval. A customer can send several of these over its lifetime, so act on the most recent by resolvedAt and deduplicate on the Sakawave-Webhook-Id header.
What tier 1 means downstream
The tier is not decorative — it is what the account service reads when a customer wants a wallet. Two consequences follow, and both surprise people.Customer wallets are NGN only
A wallet account for a customer can only be denominated in NGN. Any other currency is refused:Tier 1 limits are low, by design
A customer’s wallet inherits the customer’s tier, and a tier-1 customer wallet in NGN is capped at:
A customer is deliberately held below an individual client: your business owns the relationship and the risk, and the customer has been verified by you rather than by Sakawave. If your product needs higher headroom per end user today, hold the balance on your own account and track your users’ shares yourself.
Practical guidance
- Collect what you need, not what is available. An unused identity number is a liability with no benefit; each one you store is one more thing to protect and one more uniqueness collision to handle.
- Treat
has*as an audit signal, not a verification signal. It answers “did we send this?”, not “is it real?”. - Design for the limits you have. Build against the ₦50,000 tier-1 ceiling and NGN-only wallets rather than an upgrade path that does not exist yet.
- Keep your own verification record. If you run KYC yourself, its outcome lives in your system. Sakawave has nowhere to put it.