Skip to main content
Use FX to send or receive foreign currencies over SWIFT. Check which currencies are available to your Customer, then request indicative pricing or a fixed quote.

Supported currencies

(Accurate as of October 20, 2026)
Availability varies by customer, direction and quote mode. Check the API before offering a currency in your integration. USD uses its existing payment rail, outside this FX list.

Check available currencies

Call GET /customers/{customer_id}/fx-currencies to check availability for a Customer. Use direction=outgoing for payouts or direction=incoming for deposits.
Response:

Choose a quote mode

Fixed quotes are available on request and are not generally available yet. Check the customer’s returned fixed_enabled and indicative_enabled flags for the direction you need.

Send an FX payment

This example funds a CAD payout with RD on Base. Start with an approved Customer and a Destination that supports CAD and SWIFT. Follow recipient setup and the SWIFT destination requirements; use the beneficiary’s actual bank instructions. For the documented fiat_iban path, SWIFT requires a BIC and bank address, together with the beneficiary and bank details. Follow the country-specific address requirements; use intermediary instructions only when supplied by the beneficiary’s bank.

1. Create the one-off

Examples use production. For sandbox, use base-sepolia instead of base-mainnet and https://api.platform.sandbox.dakota.xyz as the API base URL. Create a one-off transfer to get the transaction ID and its deposit address. Generate a key once for this request:
Keep the returned id as $TRANSACTION_ID, together with crypto_address, source_asset and source_network_id. Creating the one-off does not fund it. A retry of this creation request uses the same $CREATE_KEY.

2. Request a quote

Request pricing for that transaction. This indicative request estimates the CAD payout from spending 100 RD. amount_side: "source" specifies the funding-token quantity; use "destination" to specify a CAD target instead.
For a fixed quote, choose mode: "fixed" when making the request, if enabled. Keep the same $QUOTE_KEY for retries of that request; do not change its inputs or mode while retrying. Use the returned quote, rather than calculating a conversion in your application: A 202 fixed-quote response is pending. Read that quote before funding:

3. Fund the payment

Transfer the quoted funding_amount of the quoted asset to the one-off’s existing crypto_address, on its matching network. Do not send the CAD target amount as RD or assume the funding token is worth one USD. For a Dakota Wallet, use the existing sign-and-send flow and Wallet Transaction Signing. There is no separate FX execute call. The deposit funds the payment; a quote or wallet broadcast does not mean the SWIFT payout is complete. For fixed pricing, on-chain inclusion time counts—not when you broadcast. Funding included at or after expires_at, or in another supported asset, is handled with indicative market pricing instead of the locked rate, subject to payment checks. A short deposit, an uncertain inclusion time, or a transfer detected much later can be held for review. If funds may already have been sent, reconcile the existing transaction before sending again.

4. Track the payout

Read GET /transactions/{transaction_id} and handle transaction.one_off.created and transaction.one_off.updated using the webhook guide. Follow the transaction through processing and completion, then keep handling later updates in case the bank returns the wire. Reconcile actual receipt and final FX fields, not the original requested amount or preview. fx_pricing.state: "quoted" can change; "final" reports the applied rate and fee. A missing fx_settlement means the settlement amount is unknown, even if the transaction is completed. Bank/intermediary deductions can reduce what the beneficiary receives; see SWIFT caveats.

Reusable accounts and incoming funds

For repeated payouts, follow account setup in Common Flows and the SWIFT setup guide. An outgoing reusable account uses account_id for indicative pricing; fixed mode is one-off only. Deposits create auto transactions: use GET /auto-transactions/{auto_transaction_id} and transaction.auto.created / transaction.auto.updated, not the one-off endpoints/events. For incoming funds, follow SWIFT for onramps and give the sender the complete returned bank instructions. An optional incoming estimate uses an automatic account’s account_id, direction: "incoming", amount_side: "source" and indicative mode. The actual received deposit triggers conversion; an estimate does not send funds or change the instructions.

In Financial Account

For a supported foreign SWIFT recipient, preview the conversion or lock an available fixed quote. Review You send, Recipient gets and any fixed expiry. Send Now creates the payment for review; Confirm & Sign, or the required other approver, authorizes funding. Pending or expired fixed quotes cannot be sent. If approval is interrupted, check the existing transaction in History before creating another.

Quote status and errors

Reading a fixed quote does not refresh pricing or extend expiry. If an unfunded quote expires, obtain new pricing. If funding may already have happened, check the existing transaction or contact support before retrying; do not assume funds were refunded. A returned wire is not necessarily refunded yet. For currency-discovery requests: Quote requests can also return 403 for permission refusals, 409 for conflicts or unavailable fixed-quote capacity, or 422 for unsupported request or resource combinations. Read the error detail before changing or retrying the request. See the API error reference for the full contract.