Get transfer quote
Read a transfer-owned quote by ID. The path parameter is quote_id; the response uses the client-facing id field.
Authorization
BearerAuth JWT authentication token
In: header
Path Parameters
Transfer quote UUID
quote_id path parameter
Header Parameters
Language preference for the response
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v2/transfers/quotes/string"{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"status": "quoted",
"reused": true,
"quoted_at": "2019-08-24T14:15:22Z",
"expires_at": "2019-08-24T14:15:22Z",
"consumed_at": "2019-08-24T14:15:22Z",
"transfer_id": "d4a2d8dd-7def-4545-a062-761683b9aa05",
"price_snapshot": {
"base": "string",
"target": "string",
"type": "string",
"amount": {
"amount": "string",
"currency": "string",
"precision": 0
},
"fx_source": "string",
"selected_fx_rate": 0,
"fx_rate_date": "2019-08-24",
"fx_rate_at": "2019-08-24T14:15:22Z",
"market_rate_mid": 0,
"fee_bearer": "DEBT",
"amount_to_pay": {
"amount": "string",
"currency": "string",
"precision": 0
},
"amount_to_convert": {
"amount": "string",
"currency": "string",
"precision": 0
},
"amount_to_receive": {
"amount": "string",
"currency": "string",
"precision": 0
},
"total_fee": {
"amount": "string",
"currency": "string",
"precision": 0
},
"sender_fee": {
"amount": "string",
"currency": "string",
"precision": 0
},
"beneficiary_fee": {
"amount": "string",
"currency": "string",
"precision": 0
},
"fees": [
{
"name": "conversion_fee",
"amount": "string",
"currency": "string",
"precision": 0
}
],
"fx_rate_id": "string",
"tariff_ids": [
"string"
],
"fx_tariff_id": "string",
"spread_rule_id": "string",
"fallback_tariff_id": "string",
"fallback_tariff_used": true
}
}{
"status": 0,
"message": "string",
"code": "transfers_m.account_not_found",
"class": "validation",
"retryable": false,
"details": [
{
"field": "amount",
"rule": "gt",
"param": "0",
"message": "amount must be greater than 0"
}
]
}{
"status": 0,
"message": "string",
"code": "transfers_m.account_not_found",
"class": "validation",
"retryable": false,
"details": [
{
"field": "amount",
"rule": "gt",
"param": "0",
"message": "amount must be greater than 0"
}
]
}{
"status": 0,
"message": "string",
"code": "transfers_m.account_not_found",
"class": "validation",
"retryable": false,
"details": [
{
"field": "amount",
"rule": "gt",
"param": "0",
"message": "amount must be greater than 0"
}
]
}{
"status": 0,
"message": "string",
"code": "transfers_m.account_not_found",
"class": "validation",
"retryable": false,
"details": [
{
"field": "amount",
"rule": "gt",
"param": "0",
"message": "amount must be greater than 0"
}
]
}{
"status": 429,
"message": "Rate limit exceeded",
"code": "rate_limits_m.exceeded",
"class": "temporary",
"retryable": true
}{
"status": 0,
"message": "string",
"code": "transfers_m.account_not_found",
"class": "validation",
"retryable": false,
"details": [
{
"field": "amount",
"rule": "gt",
"param": "0",
"message": "amount must be greater than 0"
}
]
}{
"overall_status": "unhealthy",
"message": "Service is shutting down",
"timestamp": "2026-08-27T15:04:05Z"
}Legacy v1 scheduled endpoint. Prefer `POST /v2/transfers/scheduled`, which uses `CreateScheduledRequestV2` with `metadata` instead of v1 `meta`. **Current behavior:** returns **501** until the scheduled-transfer execution worker exists. Creating rows here would produce transfers that never run; use `POST /v2/transfers/finalize` for immediate execution. THE BODY IS NOT READ. ScheduleTransfer resolves the caller and answers 501 without decoding the request, so nothing below is validated and no row is written. The schema records the contract the route is reserved for, not anything the server parses today — which is also why the only statuses this route can answer are the ones raised ahead of the handler — 401 and 403 from the authentication wrapper, 429 and 500 from the rate limiter, 503 from graceful shutdown or an unhealthy auth cache — plus the 501 itself.
Create or reuse a short-lived transfer-owned executable quote. The amount is an integer minor-unit string. customer_id is required, amount.currency must equal base, and backend FX conversion is called with amount_unit=minor. FX date resolution is delegated to the FX module business-date lookup policy, including optional lookback across prior calendar dates, and the locked snapshot exposes the resolved fx_rate_date and optional fx_rate_at provenance fields.