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 to ensure request idempotency. If the same key is used within a certain time window, the original response will be returned instead of executing the request again.
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. Fiat supports two fractional digits; 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?

