Get available rate sources
Retrieve a distinct list of all rate sources available in the system
Authorization
bearerAuth In: header
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/fx/rates/sources"[
{
"source": "SNB",
"methods": [
"SELL",
"BUY",
"MID"
]
},
{
"source": "ECB",
"methods": [
"MID"
]
},
{
"source": "CC",
"methods": [
"SELL",
"BUY"
]
},
{
"source": "CRP",
"methods": [
"SELL",
"BUY",
"MID"
]
},
{
"source": "OER",
"methods": [
"MID"
]
}
]{
"status": 409,
"message": "Spread rule overlaps an existing rule",
"code": "fx_m.spread_overlap",
"class": "business",
"retryable": false,
"details": [
{
"field": "percent_fee",
"rule": "lte",
"param": "1",
"message": "string"
}
]
}{
"status": 409,
"message": "Spread rule overlaps an existing rule",
"code": "fx_m.spread_overlap",
"class": "business",
"retryable": false,
"details": [
{
"field": "percent_fee",
"rule": "lte",
"param": "1",
"message": "string"
}
]
}{
"status": 429,
"message": "Rate limit for 203.0.113.7 to GET:/v1/fx/rates exceeded.",
"code": "rate_limits_m.exceeded",
"class": "temporary",
"retryable": true
}{
"status": 409,
"message": "Spread rule overlaps an existing rule",
"code": "fx_m.spread_overlap",
"class": "business",
"retryable": false,
"details": [
{
"field": "percent_fee",
"rule": "lte",
"param": "1",
"message": "string"
}
]
}{
"overall_status": "unhealthy",
"message": "Service is shutting down",
"timestamp": "2026-08-27T15:04:05Z"
}Converts an amount for a customer, applying that customer's tariff, fee range and spread. The money fields in the response are MAJOR units, and fee_range is the major-unit shape (FxTariffFeeRangeMajor) so the breakdown matches total_fee. /v2/fx/rates/convert carries the stored minor-unit row instead — the two surfaces deliberately differ.
Lists the FX tariffs the caller may read, as a BARE JSON ARRAY. This v1 route is unpaginated and reads NO query parameters — the handler passes only the caller id to the service. limit, offset, sort, filter and search.* are accepted by the router and discarded without error, so a caller who paginates here silently receives the whole permitted set. The shared envelope and the shared query parser belong to /v2/fx/tariffs. Items are models.FxTariff, which INCLUDES is_default; the v2 list returns transform.FxTariffResponse, which does not.