For the complete documentation index, see llms.txt. This page is also available as Markdown.

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.

Unlike Initiate Off-Ramp, you do not pass bank details here — the customer chooses a payout destination at checkout. For the full lifecycle, see the Hosted Checkout guide.

Endpoint

POST /v1/offramp/checkout/initiate

Authentication

Protected by APIKeyHTTPAuthGuardmerchant API key only:

Authorization: your_api_key

Request body

The customer must already exist in IvoryPay (resolved by email). To create a customer inline, use Initiate Off-Ramp (with Customer).

Field
Type
Required
Description

email

string

Yes

Customer's email address. Must match an existing customer.

blockchain

string

Yes

Blockchain the customer sends crypto from. See Supported Blockchains

reference

string (UUID)

Yes

Your unique reference for this transaction. Must be a UUID.

token

string

Yes

Cryptocurrency the customer sends. See Supported Networks & Tokens

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

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, GHS, KES, …

MOBILE_MONEY

Mobile-money wallet

See Customer Bank Accounts for how those are created.

Example request

Example response

Returns 201 Created.

Response fields

Field
Type
Description

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

HTTP
When

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