GET /rates
Mid-market reference rates: the spread-free rate halfway between the best bid and best ask on the underlying market.
Use this for spread disclosure ("you're paying X bps over mid" next to a quoted rate) or to power a converter widget that doesn't actually move money. Quote rates are the executable rates a trade settles at. This endpoint exists so callers can quantify the implied spread without reaching for a third-party data vendor.
Unauthenticated. No Api-Key or Authorization header required.
Query params
Only from and to are needed for fiat pairs. The rail and country params apply to stablecoin pairs (see Stablecoin pairs).
| Param | Type | Default | Notes |
|---|---|---|---|
from | string | "USD" | Source currency. ISO-4217 ("USD") or stablecoin symbol ("USDC"). |
to | string | all | Destination currency. Omit to return every fiat pair from is quoted against. |
from_rail | string | primary chain | Blockchain rail for a stablecoin from leg (e.g. base, ethereum, polygon). Ignored for fiat. |
to_rail | string | primary chain | Blockchain rail for a stablecoin to leg. Ignored for fiat. |
to_country | string | primary country | ISO-2 settlement country for a fiat to leg (e.g. DE). Ignored for stablecoin to. |
Calling with no params is shorthand for ?from=USD: the USD board against every supported fiat destination.
Response 200
{
"rates": [
{
"from": "USD",
"to": "USDC",
"rate": "1.0001",
"as_of": "2026-05-04T18:30:00Z"
},
{
"from": "USD",
"to": "EUR",
"rate": "0.9200",
"as_of": "2026-05-04T18:30:00Z"
}
]
}When both from and to are pinned, rates[] has a single entry. The list shape is the same regardless.
Stablecoin pairs
Pairs involving a stablecoin (e.g. USDC ↔ EUR) are priced live against the corridor that settles them, so both from and to must be pinned. The bulk board (omitting to) covers fiat only.
A stablecoin leg settles on a blockchain rail. A fiat leg settles in a country. Both default to the primary option for the currency, so the simplest call is just the pair:
curl "$SEISMIC_ORCHESTRATION_URL/v0/rates?from=USDC&to=EUR"Pin from_rail / to_rail to price a specific chain, and to_country to pick the fiat settlement country when the currency spans several (EUR defaults to DE):
curl "$SEISMIC_ORCHESTRATION_URL/v0/rates?from=USDC&from_rail=ethereum&to=EUR&to_country=FR"Rate semantics
rate is the price of from denominated in to, i.e. how many units of to you get for one unit of from. The conversion is:
amount_to = amount_from × rate
So in the example above, from: "USD", to: "USDC", rate: "1.0001" means 1 USD ≈ 1.0001 USDC at mid-market. Equivalently, the inverse pair would have rate: "0.9999" (USDC → USD).
This matches the convention used on quotes, where out.amount ≈ in.amount × rate at zero spread. rate is always destination per source.
MidmarketRate
| Field | Type | Notes |
|---|---|---|
from | string | Source currency. |
to | string | Destination currency. |
rate | string | Decimal to per unit from (amount_to = amount_from × rate). |
as_of | string (ISO-8601) | When the rate was sampled. Treat as ~minute-granularity for fiat ↔ stablecoin pairs. |
Errors
| Status | code | Meaning |
|---|---|---|
| 400 | InvalidRequest | from or to is unknown. |
| 422 | RateUnavailable | No reference market exists for that pair, e.g. a stablecoin pair on an unsupported corridor, or a fiat board that hasn't been sampled yet. Stablecoin pairs also return this when to is omitted (they require both legs pinned). |
Examples
# Whole USD fiat board.
curl "$SEISMIC_ORCHESTRATION_URL/v0/rates"
# USD → EUR only.
curl "$SEISMIC_ORCHESTRATION_URL/v0/rates?from=USD&to=EUR"
# USDC → EUR (stablecoin pair, defaults: base chain, DE settlement).
curl "$SEISMIC_ORCHESTRATION_URL/v0/rates?from=USDC&to=EUR"
# USDC on Ethereum → EUR settled in France.
curl "$SEISMIC_ORCHESTRATION_URL/v0/rates?from=USDC&from_rail=ethereum&to=EUR&to_country=FR"