Skip to content
Logo

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).

ParamTypeDefaultNotes
fromstring"USD"Source currency. ISO-4217 ("USD") or stablecoin symbol ("USDC").
tostringallDestination currency. Omit to return every fiat pair from is quoted against.
from_railstringprimary chainBlockchain rail for a stablecoin from leg (e.g. base, ethereum, polygon). Ignored for fiat.
to_railstringprimary chainBlockchain rail for a stablecoin to leg. Ignored for fiat.
to_countrystringprimary countryISO-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

FieldTypeNotes
fromstringSource currency.
tostringDestination currency.
ratestringDecimal to per unit from (amount_to = amount_from × rate).
as_ofstring (ISO-8601)When the rate was sampled. Treat as ~minute-granularity for fiat ↔ stablecoin pairs.

Errors

StatuscodeMeaning
400InvalidRequestfrom or to is unknown.
422RateUnavailableNo 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"