Skip to main content
The offramp flow lets your users send crypto (USDT, USDC, BTC, ETH) and receive local currency (NGN, GHS, KES) in their bank account or mobile money wallet. Partna handles the crypto receipt, conversion, and local currency payout.

How it works

1

Create a user account

Register your user with Partna using Create Account if they do not already have one.
2

Complete KYC

The user must verify their identity. See Accounts and KYC. Users only need to verify once.
3

Resolve the destination bank account

Verify the user’s bank account details using Resolve Bank. This confirms the account number and returns the account holder’s name.
curl --request POST \
  --url https://staging-api.getpartna.com/v4/kyc/resolve-account \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: YOUR_API_KEY' \
  --header 'x-api-user: YOUR_USERNAME' \
  --data '{
    "accountNumber": "0123456789",
    "bankCode": "044",
    "currency": "NGN"
  }'
Response:
{
  "data": {
    "accountName": "JANE DOE",
    "accountNumber": "0123456789"
  },
  "message": "success"
}
4

Fetch a rate

Call Get Rate with fromCurrency=USDT and toCurrency=NGN. Save the rate key.
curl --request GET \
  --url 'https://staging-api.getpartna.com/v4/rate?fromCurrency=USDT&toCurrency=NGN&fromAmount=100' \
  --header 'x-api-key: YOUR_API_KEY' \
  --header 'x-api-user: YOUR_USERNAME'
5

Initiate the offramp

Call Onramp and Offramp with type: "cryptoToFiat". Include the rate key, the user’s bank details, and the crypto amount.
curl --request POST \
  --url https://staging-api.getpartna.com/v4/ramp \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: YOUR_API_KEY' \
  --header 'x-api-user: YOUR_USERNAME' \
  --data '{
    "type": "cryptoToFiat",
    "fromCurrency": "USDT",
    "fromNetwork": "tron",
    "fromAmount": 100,
    "toCurrency": "NGN",
    "toNetwork": "naira",
    "accountName": "JANE DOE",
    "accountNumber": "0123456789",
    "bankCode": "044",
    "rateKey": "RATE_KEY_FROM_STEP_4",
    "rampReference": "your-unique-reference-id"
  }'
The response includes a crypto wallet address where the user should send their USDT.
6

User sends crypto

The user sends the specified crypto amount to the wallet address returned in step 5.
7

Partna converts and pays out

Once Partna confirms the crypto deposit, the equivalent local currency is sent to the user’s bank account. A webhook event is dispatched to your endpoint.

Key parameters

ParameterDescription
typeMust be cryptoToFiat for offramp
fromCurrencyThe crypto being sent (e.g., USDT, USDC, BTC)
fromNetworkThe blockchain network (e.g., tron, ethereum, solana)
toCurrencyThe local currency for payout (e.g., NGN)
toNetworkThe payout network (e.g., naira, mobileMoney, mpesa)
accountNameThe bank account holder’s name (from Resolve Bank)
accountNumberThe destination bank account number
bankCodeThe bank code (from Get Banks)
rateKeyThe rate key from Get Rate
rampReferenceYour unique reference for this transaction

Custom payout amounts

By default, Partna pays the full converted amount to the user’s bank account. If you want to pay a different amount (e.g., to build in a margin), you can adjust the payout using the Withdraw endpoint after the crypto deposit is confirmed. This requires sufficient funds in your payout balance.

Getting bank codes

Use Get Banks to fetch the list of supported banks and their codes for a given currency:
curl --request GET \
  --url 'https://staging-api.getpartna.com/v4/bank?currency=NGN' \
  --header 'x-api-key: YOUR_API_KEY' \
  --header 'x-api-user: YOUR_USERNAME'