curl --request POST \
--url https://api.platform.dakota.xyz/fx/quotes \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"direction": "outgoing",
"mode": "fixed",
"source_asset": "USDT",
"destination_asset": "EUR",
"amount": "800",
"amount_side": "destination",
"transaction_id": "3JyvsbaOW929vLbatXEkrUMq1YC"
}
'const options = {
method: 'POST',
headers: {
'x-idempotency-key': '<x-idempotency-key>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
direction: 'outgoing',
mode: 'fixed',
source_asset: 'USDT',
destination_asset: 'EUR',
amount: '800',
amount_side: 'destination',
transaction_id: '3JyvsbaOW929vLbatXEkrUMq1YC'
})
};
fetch('https://api.platform.dakota.xyz/fx/quotes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/fx/quotes"
payload = {
"direction": "outgoing",
"mode": "fixed",
"source_asset": "USDT",
"destination_asset": "EUR",
"amount": "800",
"amount_side": "destination",
"transaction_id": "3JyvsbaOW929vLbatXEkrUMq1YC"
}
headers = {
"x-idempotency-key": "<x-idempotency-key>",
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.platform.dakota.xyz/fx/quotes"
payload := strings.NewReader("{\n \"direction\": \"outgoing\",\n \"mode\": \"fixed\",\n \"source_asset\": \"USDT\",\n \"destination_asset\": \"EUR\",\n \"amount\": \"800\",\n \"amount_side\": \"destination\",\n \"transaction_id\": \"3JyvsbaOW929vLbatXEkrUMq1YC\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-idempotency-key", "<x-idempotency-key>")
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"direction": "outgoing",
"mode": "fixed",
"amount_side": "destination",
"status": "issued",
"source_asset": "USDT",
"destination_asset": "EUR",
"funding_asset": "USDT",
"target_currency": "EUR",
"quote_id": "2d807845-bdbf-4d52-905a-5d46a6c87b1b",
"target_amount": "800",
"funding_amount": "1227.06767",
"funding_amount_smallest_units": "1227067670",
"funding_decimals": 6,
"expires_at": "2026-09-17T13:40:00Z",
"eligible_networks": [
"eip155:8453"
]
}{
"direction": "outgoing",
"mode": "fixed",
"amount_side": "destination",
"status": "pending",
"source_asset": "USDT",
"destination_asset": "EUR",
"funding_asset": "USDT",
"target_currency": "EUR",
"quote_id": "2d807845-bdbf-4d52-905a-5d46a6c87b1b"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}Request a directional FX quote or estimate
Requests outgoing fixed or indicative pricing for an owned one-off, or indicative pricing for an owned outgoing or incoming automatic account. Exactly one Platform transaction_id or account_id is required. Direction and assets must match the owned foreign SWIFT resource. Incoming supports source amounts only; fixed incoming and fixed automatic-account requests are rejected. This creates no account, funded transaction or payment. Indicative requests are fresh reads without credit holds or rate locks. Fixed retries use the same idempotency key to reconcile durable terms; poll GET /fx/quotes/?transaction_id=⦠before funding pending requests. Provider readiness remains required.
curl --request POST \
--url https://api.platform.dakota.xyz/fx/quotes \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"direction": "outgoing",
"mode": "fixed",
"source_asset": "USDT",
"destination_asset": "EUR",
"amount": "800",
"amount_side": "destination",
"transaction_id": "3JyvsbaOW929vLbatXEkrUMq1YC"
}
'const options = {
method: 'POST',
headers: {
'x-idempotency-key': '<x-idempotency-key>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
direction: 'outgoing',
mode: 'fixed',
source_asset: 'USDT',
destination_asset: 'EUR',
amount: '800',
amount_side: 'destination',
transaction_id: '3JyvsbaOW929vLbatXEkrUMq1YC'
})
};
fetch('https://api.platform.dakota.xyz/fx/quotes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/fx/quotes"
payload = {
"direction": "outgoing",
"mode": "fixed",
"source_asset": "USDT",
"destination_asset": "EUR",
"amount": "800",
"amount_side": "destination",
"transaction_id": "3JyvsbaOW929vLbatXEkrUMq1YC"
}
headers = {
"x-idempotency-key": "<x-idempotency-key>",
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.platform.dakota.xyz/fx/quotes"
payload := strings.NewReader("{\n \"direction\": \"outgoing\",\n \"mode\": \"fixed\",\n \"source_asset\": \"USDT\",\n \"destination_asset\": \"EUR\",\n \"amount\": \"800\",\n \"amount_side\": \"destination\",\n \"transaction_id\": \"3JyvsbaOW929vLbatXEkrUMq1YC\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-idempotency-key", "<x-idempotency-key>")
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"direction": "outgoing",
"mode": "fixed",
"amount_side": "destination",
"status": "issued",
"source_asset": "USDT",
"destination_asset": "EUR",
"funding_asset": "USDT",
"target_currency": "EUR",
"quote_id": "2d807845-bdbf-4d52-905a-5d46a6c87b1b",
"target_amount": "800",
"funding_amount": "1227.06767",
"funding_amount_smallest_units": "1227067670",
"funding_decimals": 6,
"expires_at": "2026-09-17T13:40:00Z",
"eligible_networks": [
"eip155:8453"
]
}{
"direction": "outgoing",
"mode": "fixed",
"amount_side": "destination",
"status": "pending",
"source_asset": "USDT",
"destination_asset": "EUR",
"funding_asset": "USDT",
"target_currency": "EUR",
"quote_id": "2d807845-bdbf-4d52-905a-5d46a6c87b1b"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}Authorizations
Headers
Unique key (UUID) to ensure request idempotency on POST, PUT and PATCH requests.
A key is scoped to your client, the HTTP method and the path, and is remembered for 24 hours after a
successful (below 400) response. Repeating the same request (same JSON body, whatever the key order or
whitespace) with the same key within that window returns the original response with
X-Idempotent-Replayed: true instead of executing the request again. Using the same key on the same
endpoint with a different body returns 422 with problem type idempotency-key-reused; the request is
not executed. Error responses (4xx and 5xx) are not remembered, so a request refused for a fixable reason
can be corrected and retried under the same key. Request bodies that are not JSON (for example file
uploads) are not compared.
Body
Exactly one owned Platform account_id or transaction_id is required. Assets and direction must match that resource. Incoming supports automatic indicative source amounts only.
incoming, outgoing Fixed is available only for outgoing one-offs. Indicative validity is data freshness, never a rate lock.
indicative, fixed Outgoing funding token (USDC, USDT or RD), or incoming account fiat currency.
^[A-Z]{2,6}$Outgoing account fiat currency, or incoming account destination token.
^[A-Z]{2,6}$Positive exact amount on amount_side. A fiat amount has at most the currency's minor_units fractional digits (see the FX currencies list: 2 for EUR, 0 for JPY, so no decimal point); Provider enforces deployed token precision.
50^[0-9]{1,24}([.][0-9]{1,18})?$source, destination KSUID is a 27-character globally unique ID that combines a timestamp with a random component. Used for all entity identifiers in the Dakota platform.
27^[0-9A-Za-z]{27}$"1NFHrqBHb3cTfLVkFSGmHZqdDPi"
KSUID is a 27-character globally unique ID that combines a timestamp with a random component. Used for all entity identifiers in the Dakota platform.
27^[0-9A-Za-z]{27}$"1NFHrqBHb3cTfLVkFSGmHZqdDPi"
Response
Current quote or indicative estimate.
- Option 1
- Option 2
outgoing Same amount_side vocabulary as the request. Source pins the funding token quantity; destination pins the foreign delivery amount.
source, destination indicative, fixed estimated, pending, issued, reconciling, funded, review, cancelled Canonical source asset; equal to funding_asset.
USDC, USDT, RD Canonical destination asset; equal to target_currency.
^[A-Z]{3}$Economic snapshot alias of source_asset.
USDC, USDT, RD Economic snapshot alias of destination_asset.
^[A-Z]{3}$Present for durable fixed requests, including pending requests.
Whole-token quantity, including the developer fee. Never an assumed USD equivalent.
^[1-9][0-9]*$0 <= x <= 18Networks covered by this fixed quote. Use the existing receiving address; reader evidence is private.
Was this page helpful?

