Fiat to fiat transfers (Cross-border)
Create eligible fiat-to-fiat transfers between supported currencies and rails.
Send fiat-to-fiat transfers between supported currencies by checking eligible channels, creating a recipient, obtaining a quote, and funding the transfer.
Eligibility
You cannot create a fiat-to-fiat transfer when either leg uses one of these currencies:
- EUR
- BRL
- ARS
- USD
This restriction applies to both the source and destination leg because of licensing requirements. All other currencies may be available, subject to the channels returned for your account.
Transfer flow
1. Get available channels
Retrieve the channels available to your account before creating a recipient or requesting a quote.
curl -H "Authorization: Bearer your_api_key" \
-H "Due-Account-Id: your_account_id" \
https://api.due.network/v1/channelsSelect a supported fiat funding channel with type: "deposit" and a supported fiat delivery channel with type: "withdrawal". Confirm that neither channel uses EUR, BRL, ARS, or USD.
2. Create the recipient
Create a recipient for the destination bank account or mobile money account. Use the recipient schema and financial institution details supported by the destination channel you selected.
Mobile money recipient example:
curl -X POST https://api.due.network/v1/recipients \
-H "Authorization: Bearer your_api_key" \
-H "Due-Account-Id: your_account_id" \
-H "Content-Type: application/json" \
-d '{
"name": "Grace Okafor",
"details": {
"schema": "momo_africa",
"financialInstitutionId": "mtn_ng",
"accountNumber": "08123456789",
"accountName": "Grace Okafor"
},
"isExternal": true
}'Store the recipient ID from the response. You need it when you create the transfer.
3. Generate a quote
Request a quote using the supported source and destination rails and currencies returned by the channels endpoint. The quote returns the funding amount, delivery amount, fees, FX rate, and an expiry time.
Verify both currency legs before accepting the quote:
- The source currency must not be EUR, BRL, ARS, or USD.
- The destination currency must not be EUR, BRL, ARS, or USD.
- The quote must still be valid when you create the transfer.
4. Create the transfer
Create the transfer with the quote token and recipient ID.
curl -X POST https://api.due.network/v1/transfers \
-H "Authorization: Bearer your_api_key" \
-H "Due-Account-Id: your_account_id" \
-H "Content-Type: application/json" \
-d '{
"quote": "{quote_token}",
"recipient": "{recipient_id}",
"memo": "Family support"
}'A successful transfer can return status: "awaiting_funds". In this state, use the returned transferInstructions to fund the transfer.
5. Send the funding payment
Send the exact funding amount to the account details in transferInstructions. Include the exact value in transferInstructions.memo as the payment reference.
The payment reference is required for matching your funding to the transfer. If you omit or change it, delivery to the recipient may be delayed or prevented.
6. Monitor the transfer
Retrieve the transfer to monitor its status.
curl -H "Authorization: Bearer your_api_key" \
-H "Due-Account-Id: your_account_id" \
https://api.due.network/v1/transfers/{transfer_id}The status updates as the funding payment is processed and the destination payment is delivered.
Optional: Review FX pricing
Quotes include the applicable FX rate, FX markup, and fees for the selected source and destination rails. Quotes are valid for two minutes, so request a new quote if the current one expires before you create the transfer.
Cross-currency transfers can have higher fees than transfers where the source and destination use the same currency.
Updated 7 days ago