Skip to main content
POST
Legacy: Create an offramp

Overview

Create an offramp through the legacy compatibility route. New integrations should use POST /v1/funding-accounts with rail: CRYPTO_ADDRESS, asset, and chain.

Authentication

string
required
Your merchant API key
string
required
Unique idempotency key to prevent duplicate offramp creation

Request Body

string
required
Offramp typeAllowed values: TEMPORARY, PERMANENT
  • TEMPORARY: Short-lived deposit address, locked to rate_id. Must use NGN_PAYOUT settlement.
  • PERMANENT: Long-lived deposit address, uses current rate at settlement. Supports both INTERNAL_BALANCE and NGN_PAYOUT settlement.
object
required
Customer information. Either customer_id or email must be provided.
string
required
Blockchain network for the deposit addressAllowed values: APTOS, BASE, BSC, CELO, ETHEREUM, POLYGON, SOLANA, SUI, TEMPO, TRONSee Supported Chains for details on which assets are available on each chain.
string
required
Stablecoin asset to receiveAllowed values: USDC, USDT
object
Optional fee that your merchant account keeps from each offramp deposit. Omit to use 0%.
object
required
Settlement configuration

Request Examples

Response

string
required
Unique offramp identifier (UUID)
string
required
Offramp type: TEMPORARY or PERMANENT
string
required
Associated customer ID (UUID)
string
required
Generated crypto deposit address
string
required
Blockchain network: APTOS, BASE, BSC, CELO, ETHEREUM, POLYGON, SOLANA, SUI, TEMPO, or TRON
string
required
Stablecoin asset: USDC or USDT
string
required
Current offramp status. New offramps start as ACTIVE.
object
required
Developer fee percentage used for deposits received through this offramp.
object
required
Settlement configuration
string
required
When the offramp was created (ISO 8601 timestamp)
string
required
When the offramp was last updated (ISO 8601 timestamp)

Success Responses

Error Responses

Validation Rules

Either customer.customer_id or customer.email must be provided (not both optional, at least one required).
  • Generates a short-lived crypto deposit address
  • Settlement mode must be NGN_PAYOUTINTERNAL_BALANCE is not supported on temporary offramps
  • settlement.rate_id and settlement.destination_bank are required
  • Generates a long-lived crypto deposit address
  • Uses the current rate at the time of deposit settlement
  • Supports both INTERNAL_BALANCE and NGN_PAYOUT settlement modes
  • For NGN_PAYOUT: settlement.rate_id and settlement.destination_bank are required
  • For INTERNAL_BALANCE: settlement.rate_id and settlement.destination_bank must NOT be set
When settlement.mode is NGN_PAYOUT:
  • destination_bank.account_name is required
  • destination_bank.account_number must be 6-32 characters
  • destination_bank.bank_code must be 3-16 characters
Always resolve the bank account first using POST /v1/banks/resolve before creating the offramp. Invalid bank accounts will be rejected.

Best Practices

1

Resolve bank account before creation (NGN payout)

Always call POST /v1/banks/resolve to verify the account number and get the account holder’s name before creating an offramp with NGN_PAYOUT. Invalid accounts will be rejected.
2

Get fresh rate before creation (NGN payout)

Call GET /v1/rates?side=SELL immediately before creating an offramp with NGN_PAYOUT to ensure maximum validity window.
3

Use customer_id for returning customers

Create customers once via POST /v1/customers, then reference them by customer_id in subsequent offramp requests.
4

Use idempotency keys

Always include a unique X-Idempotency-Key header to prevent duplicate offramp creation on retries.
5

Choose the right chain

Consider transaction fees and confirmation times when selecting a chain. See Supported Chains for details.

Next Steps

List Offramps

Query offramps with filters

Get Rates

Fetch current exchange rates before creating an offramp

Customer API

Pre-create customers before offramp requests

Webhooks

Listen for deposit and settlement events