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
CallGET /customers/{customer_id}/fx-currencies to check availability for a Customer. Use direction=outgoing for payouts or direction=incoming for deposits.
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 documentedfiat_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, usebase-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:
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.
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 quotedfunding_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
ReadGET /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 usesaccount_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.
