Legacy: Create an offramp
Offramps
Legacy: Create an offramp
Legacy route for creating a crypto receive flow
POST
Legacy: Create an offramp
Overview
Create an offramp through the legacy compatibility route. New integrations should usePOST /v1/funding-accounts with rail: CRYPTO_ADDRESS, asset, and chain.
Authentication
Your merchant API key
Unique idempotency key to prevent duplicate offramp creation
Request Body
Offramp typeAllowed values:
TEMPORARY, PERMANENTTEMPORARY: Short-lived deposit address, locked torate_id. Must useNGN_PAYOUTsettlement.PERMANENT: Long-lived deposit address, uses current rate at settlement. Supports bothINTERNAL_BALANCEandNGN_PAYOUTsettlement.
Customer information. Either
customer_id or email must be provided.Blockchain network for the deposit addressAllowed values:
APTOS, BASE, CELO, ETHEREUM, POLYGON, SOLANA, TRONSee Supported Chains for details on which assets are available on each chain.Stablecoin asset to receiveAllowed values:
USDC, USDTSettlement configuration
Request Examples
Response
Unique offramp identifier (UUID)
Offramp type:
TEMPORARY or PERMANENTAssociated customer ID (UUID)
Generated crypto deposit address
Blockchain network:
APTOS, BASE, CELO, ETHEREUM, POLYGON, SOLANA, or TRONStablecoin asset:
USDC or USDTCurrent offramp status. New offramps start as
ACTIVE.Settlement configuration
When the offramp was created (ISO 8601 timestamp)
When the offramp was last updated (ISO 8601 timestamp)
Success Responses
Error Responses
Validation Rules
Customer identification
Customer identification
Either
customer.customer_id or customer.email must be provided (not both optional, at least one required).Temporary offramp rules
Temporary offramp rules
- Generates a short-lived crypto deposit address
- Settlement mode must be
NGN_PAYOUT—INTERNAL_BALANCEis not supported on temporary offramps settlement.rate_idandsettlement.destination_bankare required
Permanent offramp rules
Permanent offramp rules
- Generates a long-lived crypto deposit address
- Uses the current rate at the time of deposit settlement
- Supports both
INTERNAL_BALANCEandNGN_PAYOUTsettlement modes - For
NGN_PAYOUT:settlement.rate_idandsettlement.destination_bankare required - For
INTERNAL_BALANCE:settlement.rate_idandsettlement.destination_bankmust NOT be set
NGN payout bank details
NGN payout bank details
When
settlement.mode is NGN_PAYOUT:destination_bank.account_nameis requireddestination_bank.account_numbermust be 6-32 charactersdestination_bank.bank_codemust be 3-16 characters
Best Practices
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.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.Use customer_id for returning customers
Create customers once via
POST /v1/customers, then reference them by customer_id in subsequent offramp requests.Use idempotency keys
Always include a unique
X-Idempotency-Key header to prevent duplicate offramp creation on retries.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