The shape of it
1
Open the order
Say how much, in either direction —
fiatAmount if your user is spending a
set amount of naira, amount if they want a set quantity of token. Name the
recipient wallet, the mint, and the chain.2
Show the account
The response carries a virtual bank account:
accountNumber, bank, and the
exact fiatAmount to transfer. Your user pays it from their own bank.3
Paj delivers the token
Once the transfer is confirmed, the token is sent to
recipient. Nothing
further is required from your integration.Where the token lands
Onramp delivers on every supported chain: Solana, TON, Ethereum, Base, BNB Smart Chain, Monad and Arc.recipient is a wallet on the
chain you name, and mint is the token to deliver there.
Buying the chain’s settlement stablecoin — USDC, or USDT on TON — is a plain
transfer. Any other token is bought as that stablecoin and swapped on-chain, with
the swap’s output delivered straight to recipient, so what arrives can differ
slightly from the quote by the swap’s slippage. On TON, set mint to "TON" to
deliver Toncoin, or to a jetton master address for anything else.
The amount in the account name
accountName comes back looking like Paj Inc.(Pay NGN 1,500.00). The figure is
embedded deliberately: it shows up inside your user’s own banking app while they
are entering the transfer, where a mistyped amount is otherwise easy to miss.
Show it as-is, but drive your own interface from fiatAmount — reading the
number back out of the name is fragile.
Charging for it
The rate already includes the spread configured for your business, so you are earning on every order without doing anything (Rates covers this).businessUSDCFee is for charging beyond that, and it is added on top
rather than skimmed off: a user buying 10.50 and still receives the full $10 of token. It is denominated
in the chain’s settlement stablecoin, so on TON a fee of 0.5 means 0.5 USDT.
First purchases cost slightly more on Solana
A wallet that has never held a given token on Solana needs an account created for it before the token can arrive, and that costs rent. Paj charges it to the order. You do nothing differently — but a user’s first purchase of a token can come out marginally more expensive than their second, which is the sort of thing that generates a support ticket if nobody expects it.Following the order
An order opens atINIT and waits for the transfer. It moves to PROCESSING
when the payment is confirmed and finishes at COMPLETED once the token has
reached recipient — including any swap, which happens as part of delivery.
ERROR is the other terminal state.
Each transition is posted to a webhook as it happens, in the same shape as the
response that created the order. Name one per order with webhookURL, or leave
it out and the rampWebhookURL configured on your API key is used. With
neither, you are polling.
Unpaid orders are deleted 72 hours after creation. Treat the quote as good for
that window and open a new order rather than sending a user back to a stale
account.