Introduction
What the Radok API does, and a request you can run in the next two minutes.
Contents
What the Radok API does
Radok moves money in and out of Nigerian bank accounts on your behalf, and keeps a double-entry ledger of every movement. There are three things you will do with it:
- Collect. Mint a unique virtual bank account for a customer. When they transfer into it, we match the payment, credit your balance, and tell you.
- Pay out. Send money from your balance to a bank account, with idempotency and an optional approval step.
- Listen. Receive a signed webhook whenever something you care about happens, instead of polling.
Base URL and versioning
Every endpoint lives under a single versioned base. There is one base for both test and live traffic — the environment comes from your API key, not from the URL.
https://api.radokpay.com/v1Test and live are the same URL
sk_test_ is answered by a stub gateway that never touches a real bank and never charges a fee. A key beginning sk_live_ moves real money. Nothing else about the request changes, so the code you test is the code you ship.Your first request
Create a test secret key on the API keys page, then run this. It mints a virtual account a customer can pay into.
/v1/virtual-accounts- Auth
- Secret key
- Scope
- virtual_accounts:write
curl -X POST https://api.radokpay.com/v1/virtual-accounts \
-H "Authorization: Bearer sk_test_a1b2c3_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"customerEmail": "ada@example.com",
"customerName": "Ada Lovelace",
"amount": { "value": 500000, "currency": "NGN" },
"expiresInMinutes": 60
}'{
"data": {
"reference": "va_9f4c1b8e2d7a6c05",
"bankName": "Providus Bank",
"accountNumber": "9901234567",
"accountName": "RADOK/ADA LOVELACE",
"expiresAt": "2026-08-23T12:30:00.000Z",
"status": "active",
"collection": {
"reference": "col_3a7d5e1f9b2c4d68",
"amount": { "value": 500000, "currency": "NGN" },
"status": "awaiting_payment"
}
}
}500000 is ₦5,000.00, not ₦500,000
Then what happens
- Show
accountNumberandbankNameto your customer and ask them to transfer the exact amount. - Money lands. Radok matches it to the collection, credits your balance net of fees, and closes the virtual account.
- We POST a
collection.successwebhook to your endpoint. That is your signal to fulfil the order — not the customer returning to your app, which they may never do. - In test mode nobody is going to send a real transfer, so you trigger step 2 yourself. See Testing.
These docs, inside your editor
If you code with an AI assistant, give it these docs directly rather than letting it guess at endpoint names. @radokpay/mcp serves everything on this site over the Model Context Protocol — read-only, no API key, one line to install.
claude mcp add radok -- npx -y @radokpay/mcpEvery other editor, the tools it exposes, and troubleshooting are on AI assistants (MCP).
Where to go next
- Checkout widget — take payments on your own site with one script tag, no checkout to build.
- Authentication — keys, scopes, and what a leaked key can and cannot do.
- Requests and responses — the envelope, error codes, pagination, and idempotency.
- Webhooks — read this before you go live. An unverified endpoint is an open one.