Merchant API · v1
A bank account for every one of your customers.
Issue a permanent Nigerian account number in your customer’s own name, and when they transfer into it we tell your server which customer paid. No reconciling on amounts, no guessing from a bank statement.
#What this API does
- Issues accounts.
POST /customer_accountsgives one of your customers a permanent account number in their own name. Call it again with the same reference and you get the same account back. - Names the payer. When money lands we post a
collection.successwebhook to your server carrying your owncustomer_reference, so you credit your user from it and reconcile nothing. - Or takes a one-off payment.
POST /paymentsopens a hosted checkout and hands you a URL on pay.paymonetra.com to send the payer to. - Keeps two balances. Collected is money taken from your customers and held for you. Settled is money that has become yours.
- Costs one rate. One percentage on every bank transfer coming in, live on the pricing page rather than typed into it.
- Works before you are verified. Test keys exist from your first minute in the dashboard; live keys arrive when your business is approved.
#A call that works right now
The service index needs no key. Paste this anywhere:
curl https://api.paymonetra.com/v1/It answers:
{
"name": "Paymonetra Gateway API",
"version": "v1",
"docs": null,
"endpoints": [
"GET /balance",
"POST /customer_accounts",
"GET /customer_accounts",
"GET /customer_accounts/{customer_reference}",
"POST /payments",
"GET /payments/{reference}"
]
}That endpoints list is what a secret key can reach. Everything on it has a page under API reference.
#Where to go next
QuickstartA key, an account, a payment, and a test webhook you can actually receive.AuthenticationBearer keys, what pk_ and sk_ each do, and the three refusals you will hit.Customer accountsThe endpoint the whole product is for.WebhooksThe payload, the signature recipe and the retry schedule.CheckoutThe seven states, and the kobo rule that is not what it used to be.PricingRead live from the pricing table, never typed into the page.
#The three hosts
Not interchangeable. You will only ever call two of them yourself.
| host | who it serves | status |
|---|---|---|
paymonetra.com/api/v1 | the dashboard, and the app | live |
api.paymonetra.com | merchants' own servers | live since 29 Aug 2026 |
pay.paymonetra.com | payers: checkout and payment links | live since 29 Aug 2026 |
#What is live today
GET / | Confirms you have the right host, and lists what a key can reach. No key needed. |
POST /customer_accounts | Issues a permanent bank account number in your customer’s own name. |
GET /customer_accounts | Your accounts, filterable by status and paged. |
GET /balance | Collected and Settled, for the mode your key belongs to. |
POST /payments | Opens a checkout session and returns the URL to send your customer to. |
GET /payments/{reference} | One session, scoped to your own merchant and mode. |
POST /customer_accounts/{reference}/simulate_payment | Money arriving into one customer’s account, and the webhook that follows. Test keys only. |
POST /sandbox/pay | The same, for your collection account rather than a customer’s. Test keys only. |
GET /checkout/{reference} | What the payer’s browser polls. Public, guarded by the reference being random. |
POST /checkout/{reference}/details | Name and email for an anonymous session, which then shows an account. |
And what is not, yet:
Refunds are not on this surface yet. USDT checkout is blocked on our exchange partner issuing an off-ramp private key.
The roadmap has the rest, with no shapes to build against until they land.