Skip to main content
The address you get back from registration is the whole product surface. Understanding what it is makes the rest of the API obvious.

It is derived, not allocated

The address is a Solana program-derived address computed from the account’s own identity — its account number, its bank code, and its region. Nothing random is involved, and no pool of pre-generated addresses is drawn from. Two consequences follow, and both simplify your integration:

Stable

The same bank account always maps to the same address. Store it once; it will not rotate or expire, and you never have to refresh it.

Shared

The address belongs to the bank account, not to your business. If another Paj integration registered the same account first, you get the address it already has.
Because the address is derived from the bank account, it is only as safe as the account number your user gave you. Always show the accountName returned by registration and have the user confirm it — a typo produces a valid address that pays a stranger’s bank account.

What happens after a deposit

Nothing is required from your API integration once you have shown the address. Paying it is the instruction:
1

Funds land

A deposit arrives in the address’s token account — a real, separate on-chain balance. Paj’s listener picks it up within seconds.
2

Swept into the pool

The balance is moved on-chain into Paj’s treasury and an offramp transaction is opened against the bank account it belongs to.
3

Value check

USDC/USDT pays out directly. Non stable token is priced for its USD value, so senders are not restricted to a single mint.
4

Paid out

Naira is disbursed to the bank account through the banking rail at the prevailing offramp rate. The on-chain legs take seconds; the fiat leg dominates the end-to-end time.

Amounts and rates

The rate applied is the offramp rate in effect when the deposit is observed, not when you last called GET /pub/v2/rate. If you quote a figure to a user before they send, treat it as indicative — see Rates. There is no per-deposit registration step, so there is also no amount to commit to in advance. A user can send any amount, any number of times, to the same address.

Reversing the lookup

When you see a deposit on-chain and want to know whose it is, pass the address to GET /pub/v2/bank-account. This is the same mapping in the other direction, and it is the intended way to attribute an on-chain event back to one of your users.