Legacy: Create an onramp
Onramps
Legacy: Create an onramp
Legacy route for creating an NGN receive flow
POST
Legacy: Create an onramp
Overview
Create an onramp through the legacy compatibility route. New integrations should usePOST /v1/funding-accounts with rail: NGN_VIRTUAL_ACCOUNT.
Authentication
Your merchant API key
Unique idempotency key to prevent duplicate onramp creation
Request Body
Onramp typeAllowed values:
TEMPORARY, PERMANENTTEMPORARY: Short-lived VA (25 minutes), locked torate_idPERMANENT: Long-lived VA, uses current rate at settlement
Customer information. Either
customer_id or email must be provided.Rate identifier from
GET /v1/ratesExample: rate_8x7k2mq9pRequired for temporary onramps. Not allowed for permanent onramps.
Expected deposit amount in NGNExample:
50000Required for temporary onramps. Ignored for permanent onramps.
Settlement configuration
Request Examples
Response
Temporary Onramp Response
Unique identifier for this onramp
TEMPORARYCurrent onramp status. New onramps start as
ACTIVE.Expected deposit amount in NGN. Required and always returned for temporary onramps. Decimal string.Example:
"50000.50"Associated rate identifier
Unique payment reference for the transfer
NGN bank account details for receiving deposits
When onramp expires (~25 minutes from creation)
Settlement configuration (same as request)
When onramp was created (ISO 8601 timestamp)
Permanent Onramp Response
PERMANENTUnique identifier for the permanent onramp configuration
Identifier of the currently active settlement configuration
The customer this permanent onramp belongs to
Active settlement configuration
Permanent NGN bank account details
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 onramp rules
Temporary onramp rules
rate_idis required and must be a valid, non-expired rate snapshotamountis required- Settlement modes:
ONCHAINorINTERNAL_BALANCE customer.verificationis not required- For
ONCHAIN:chainanddestination_addressare required - For
INTERNAL_BALANCE:chainanddestination_addressmust NOT be set
Permanent onramp rules
Permanent onramp rules
rate_idmust not be providedamountis silently ignored- Settlement modes:
ONCHAINorINTERNAL_BALANCE - For
ONCHAIN:chainanddestination_addressare required - For
INTERNAL_BALANCE:chainanddestination_addressmust NOT be set - If
customer.customer_idis not provided,customer.verificationwith bothbvnandimage_urlis required - If
customer.customer_idis provided, the customer must either be already verified orcustomer.verificationmust be included
Verification (permanent onramps)
Verification (permanent onramps)
Verification uses BVN + face matching via an identity provider.Two paths:New customer (
customer.email provided, no customer_id):customer.verificationis required with bothbvnandimage_url- The system creates or finds the customer by email, runs verification, then provisions the virtual account
customer.customer_id provided):- If already verified: proceeds directly
- If not verified +
customer.verificationprovided: runs verification first - If not verified + no verification data: returns error
Permanent Onramp Behavior
Settlement updates: If a permanent onramp already exists for a customer, calling this endpoint again updates the settlement configuration (chain, address) without creating a new virtual account. The previous settlement is deactivated and the new one becomes active.
Virtual accounts for permanent onramps do not expire. The same account number is reused across settlement updates.
Best Practices
Get fresh rate before creation (temporary)
Always call
GET /v1/rates immediately before creating a temporary onramp 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 onramp requests.Handle verification errors gracefully
For permanent onramps, verification may fail due to invalid BVN, face mismatch, or provider issues. Handle
400 VALIDATION_FAILED and 502 INTEGRATION_FAILED separately.Rate Limits
- 1,000 onramp creations per day per merchant
- 100 API requests per minute per key
Next Steps
List Deposits
Query deposits for an onramp
Customer API
Pre-create customers before onramp requests