Direct Exchange
A Direct Exchange allows you to convert funds and send them directly to an external beneficiary — without requiring a wallet balance. After accepting the quote, you receive payment instructions for the source currency. Once you deposit the funds, the payout is automatically sent to the beneficiary in the target currency.
Overview
- Create a Beneficiary — Register the recipient's bank details
- Create a DIRECT_EXCHANGE Quote — Lock in the exchange rate and fees
- Accept the Quote — Receive payment instructions for the source currency
- Send Funds — Deposit funds using the provided instructions
- Webhook Notification — Receive confirmation when the payout to the beneficiary completes
Direct Exchange is one of only two quote types (along with CAD deposits) that return payment instructions after acceptance. Other quote types process funds from your existing wallet balance.
Step 1: Create a Beneficiary
Register the recipient who will receive the converted funds. If you've already created the beneficiary, skip to Step 2.
Endpoint
POST /api/v1/client/beneficiaries
Authentication
Example: NGN Beneficiary
Response
Store the id for use as beneficiary_id.
For full details, see the Beneficiaries API.
Step 2: Create a DIRECT_EXCHANGE Quote
Create a quote with quote_type: "DIRECT_EXCHANGE". The source and target currencies must be different.
Endpoint
POST /api/v1/client/quotes
Authentication
Request Body
Required Parameters
Optional Parameters
Success Response (201 Created)
Step 3: Accept the Quote
Accept the quote to receive payment instructions. You'll be told where to send the source currency funds.
Endpoint
POST /api/v1/client/quotes/{id}/accept
Authentication
Success Response (200 OK)
The
payment_detailsfield contains the instructions for sending your source currency funds. This is unique to Direct Exchange and CAD deposits.
Step 4: Send Funds
Use the payment instructions from the accept response to send the total_payable amount. The specific instructions vary based on the source currency (bank transfer, Interac, wire, etc.).
Once the system confirms receipt of your funds, the payout to the beneficiary is processed automatically.
Step 5: Webhook Notification
You'll receive a transaction webhook when the payout to the beneficiary completes:
Status Lifecycle
Direct Exchange quotes progress through these statuses:
CREATED → AWAITING_PAYMENT → PAYMENT_CONFIRMED → PROCESSING_PAYOUT → COMPLETED
You can poll the quote status at any time:
GET /api/v1/client/quotes/{id}
Example: Complete Direct Exchange Flow
cURL
Step 1: Create beneficiary
Step 2: Create DIRECT_EXCHANGE quote
Step 3: Accept the quote
JavaScript
Best Practices
- No Wallet Balance Needed — Direct Exchange is ideal when you want to send converted funds without maintaining a wallet balance.
- Follow Payment Instructions Promptly — After accepting the quote, send funds using the provided instructions before the quote expires.
- Currency Compliance — Some currency corridors may require additional compliance verification.
- Unique Origin References — Each
origin_referencemust be unique to prevent duplicate exchanges. - Monitor Status — Use webhooks for real-time updates, or poll
GET /api/v1/client/quotes/{id}to track progress.