Initiate Off-Ramp Checkout
Create a hosted off-ramp checkout session and get a redirect URL.
Creates a PENDING off-ramp transaction and returns a hosted checkout URL. You call this from your backend, then redirect your customer to the returned checkoutUrl. At the hosted page the customer selects (or adds) the bank / mobile-money account that receives the payout, then confirms.
Endpoint
POST /v1/offramp/checkout/initiateAuthentication
Protected by APIKeyHTTPAuthGuard — merchant API key only:
Authorization: your_api_keyRequest body
The customer must already exist in IvoryPay (resolved by email). To create a customer inline, use Initiate Off-Ramp (with Customer).
email
string
Yes
Customer's email address. Must match an existing customer.
reference
string (UUID)
Yes
Your unique reference for this transaction. Must be a UUID.
fiatCurrency
string
Yes
Fiat currency the customer receives. Determines the payout rail. See Supported Currencies
fiatAmount
number
No*
Amount in fiat the customer will receive
cryptoAmount
number
No*
Amount in crypto the customer will send
businessFeeInFiat
number
No
Your fee in fiat. Omit or send 0 if not charging a fee
businessFeeInCrypto
number
No
Your fee in crypto (alternative to businessFeeInFiat)
phoneNumber
string
No
Customer phone (E.164)
note
string
No
Optional note attached to the transaction
* Provide either fiatAmount or cryptoAmount, not both.
No bank fields. accountNumber, bankCode, etc. are intentionally absent — the customer picks a saved payout account at confirm time.
Payout rail note
The rail is derived from fiatCurrency. At checkout the customer must select a saved account whose type matches:
fiatCurrency
Saved account type
Receives via
NGN, ZAR, USD
BANK_TRANSFER
Bank account (NGN NIBSS, ZAR EFT)
UGX, KES, …
MOBILE_MONEY
Mobile-money wallet
See Customer Bank Accounts for how those are created.
Example request
Example response
Returns 201 Created.
Response fields
reference
string
Your transaction reference (echoed back)
checkoutUrl
string
Hosted checkout page — redirect your customer here
status
string
Always PENDING at this stage
Idempotency
Retrying with the same reference while PENDING returns the same checkoutUrl and status. Once past PENDING, the same reference returns 409 DUPLICATE_TRANSACTION.
Errors
404 CUSTOMER_NOT_FOUND
email doesn't match a customer — use Initiate Off-Ramp (with Customer)
403 CUSTOMER_KYC_REQUIRED
Customer hasn't completed required KYC
403 OFFRAMP_NOT_ENABLED
Off-ramp isn't enabled for your business
409 DUPLICATE_TRANSACTION
reference already used past PENDING
400
fiatAmount and cryptoAmount both set (or both missing), or amount outside allowed limits
Next step
The hosted checkout calls Confirm Off-Ramp Checkout on the customer's behalf. You're notified of the outcome via webhooks.
Last updated