Virtual Account (Nigeria)
One reusable Nigerian bank account per Transacty merchant. BVN Basic is required
once to provision it (bvn + name; no face image).
Live API keys only. Scope: payin:create.
There is no expiryDate and no amount on the virtual account. Payers
transfer any amount; pay-in limits apply when a credit settles.
Get status / details
GET
/v1/ngn/virtual-accountpayin:createNo body. Sign with {timestamp}..
cURL
curl -X GET https://api.transacty.ai/v1/ngn/virtual-account \
-H "X-Transacty-Key: $TRANSACTY_KEY" \
-H "X-Transacty-Timestamp: $TS" \
-H "X-Transacty-Signature: $SIG" \
-H "Content-Type: application/json"status | ready | Action |
|---|---|---|
bvn_required | false | Call POST with BVN Basic fields |
pending | false | Poll GET |
active (or bank details present) | true | Show details to payers; accept transfers |
Provision (BVN Basic + VA)
POST
/v1/ngn/virtual-accountpayin:createIdempotency-Key is required. Replaying the same key + same body returns the
first response.
Request fields
| Field | Type | Required | Notes |
|---|---|---|---|
bvn | string | Yes | 11 digits. Encrypt in transit; do not store raw BVN at rest in your systems if avoidable |
firstName | string | Yes | BVN Basic name match |
lastName | string | Yes | BVN Basic name match |
phoneNumber | string | No | e.g. +2348012345678 |
dateOfBirth | string | No | YYYY-MM-DD |
customerEmail | string | No | |
faceImage | — | Not supported | Omit always |
Example
Request
{
"bvn": "22123456789",
"firstName": "Ada",
"lastName": "Okafor",
"phoneNumber": "+2348012345678",
"dateOfBirth": "1990-01-15",
"customerEmail": "ada@example.com"
}Response shape matches GET. When ready: true, share accountNumber / bankName /
accountName with payers.
After the VA is ready, payers transfer NGN to those bank details. Transacty creates
the pay-in and credits your NGN wallet, then sends payin.completed. There is
no create-per-payment endpoint.
Next steps
Last updated on