Merchant API · v1
Collect in naira or USDT. Pay out to any Nigerian bank.
One API for taking money and sending it. Every payment arrives labelled with your own id, so you credit the right user without reconciling anything.
#What do you want to do
Give each customer an accountA permanent Nigerian account number in their own name. Money arrives already labelled.Give each customer a USDT addressPermanent TRC20 and BEP20 addresses. Any amount, any time, credited as coin.Take a one-off paymentA hosted checkout page and a URL to send your customer to.Take a one-off payment in USDTName a coin amount rather than a price. We settle you in naira.Pay people outFrom your balance to any Nigerian bank account. Withdrawals, payouts, refunds.Know when money landsSigned events to your server, retried until you answer.
#A call that works right now
The service index needs no key. Paste this anywhere:
curl https://api.paymonetra.com/v1/If it names the Paymonetra Gateway API you have the right host. Build against https://api.paymonetra.com/v1: an older path still answers so nothing already built breaks, but it is not the one to use. Checkout is on pay.paymonetra.com, its own host on purpose.
#Before you start
- Test keys from your first minute. Live keys arrive when your business is verified, and test mode can complete a payment and fire a real webhook.
- One rate on money coming in, live on the pricing page rather than typed into it.
- Two balances. Collected is money taken from your customers and held for you; Settled is money that has become yours.
#Every endpoint
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/{reference} | One account by your own reference, with what it has received. |
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 /payments/crypto | Names a coin amount rather than a naira price, and settles to you in naira. |
GET /banks | The bank codes to send with. Use these, not your own list. |
POST /transfers/resolve | Who an account number belongs to, before you pay it. |
POST /transfers | Money out of your balance to a Nigerian bank account. |
GET /transfers/{reference} | One by your reference or ours, or the list newest first. |
POST /customer_accounts/{reference}/simulate_payment | Money arriving into one customer’s account, and the webhook that follows. Test keys only. |
POST /customer_accounts/{reference}/simulate_crypto | USDT arriving at a customer’s address, 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.
Sending held USDT back out to an address of the business's choosing is dashboard-only for now: it works there, but not on this API yet.
The roadmap has the rest, with no shapes to build against until they land.