Pairs & Marks API
Which pairs does CRX list?
Every supported pair, with its live Pyth (Hermes) feed id. Most are USD-base USD/XXX feeds; the four FX majors (EUR/USD, GBP/USD, AUD/USD, NZD/USD) are listed in their native XXX/USD orientation. Two pairs, USDT/USD and USDC/USD, are not FX at all. They are crypto/stablecoin pairs priced off the Pyth Crypto.USDT/USD and Crypto.USDC/USD feeds, and they are the only pairs that trade 24/7 with no session gate. All settle in USDC. None deliver currency.
27 listed pairs - all but two are FX; USDT/USD and USDC/USD are 24/7 crypto/stablecoin pairs. Every one settles in USDC against a live Pyth fixing - none deliver currency.
Pair Quote currency Live Pyth feed AUD/USD Dollars 0x67a6f93030…22854a80EUR/USD Dollars 0xa995d00bb3…e81ec30bGBP/USD Dollars 0x84c2dde963…3df0a7c1NZD/USD Dollars 0x92eea8ba1b…bfafa4c7USD/BRL Reais 0xd2db4dbf1a…d7a95906USD/CAD Canadian dollars 0x3112b03a41…eaa2eccaUSD/CHF Francs 0x0b1e3297e6…a63e28f8USD/CLP Chilean pesos 0xd407a4b25c…cc3e84c7USD/CNH Yuan 0xeef52e09c8…2e332e66USD/COP Colombian pesos 0xcaffb53eda…ef4edf8dUSD/HKD Hong Kong dollars 0x19d75fde7f…b23aff4cUSD/IDR Rupiah 0x6693afcd49…b9207433USD/INR Rupees 0x0ac0f9a288…4fcf1809USD/JPY Yen 0xef2c98c804…3042fd52USD/KRW Won 0xe539120487…201be7e3USD/MXN Mexican pesos 0xe13b1c1ffb…866b77caUSD/NOK Kroner 0x235ddea9f4…596023a3USD/PEN Soles 0x5a90fd5841…b192446aUSD/PHP Pesos 0x2bda7f268b…9e0a68c9USD/SEK Kronor 0x8ccb376aa8…e43fc676USD/SGD Singapore dollars 0x396a969a9c…8bdb4918USD/TEST TEST 0x0…0x0USD/TRY Lira 0x032a2eba1c…8744e058USD/TWD Taiwan dollars 0x489f02f2f1…fcd5a8e0USD/ZAR Rand 0x389d889017…97f493f1USDC/USD Dollars 0xeaa020c61c…a9e9c94aUSDT/USD Dollars 0x2b89b9dc8f…88e2e53b
Where does the pair set come from?
One config file: config/pairs.json. It is the single source of truth read by the frontend selector, the maker bot, the TWAP keeper, and the on-chain seeding script. Each entry carries:
| Field | Meaning |
|---|---|
symbol | The pair label, e.g. USD/INR. pairId = keccak256(symbol) on-chain. |
base / quote | The two legs. Most pairs are USD-base (USD/INR); the four FX majors are listed in their native XXX/USD orientation (EUR/USD, GBP/USD, AUD/USD, NZD/USD). |
feedId | The Pyth (Hermes) price feed id for the pair. |
schedule | The market-hours string driving the open/closed session gate. |
inverted | Always false. Each pair is read in the orientation Pyth publishes it, never a reciprocal. |
How do I read the session for a pair?
From the schedule string in config/pairs.json. Its shape:
America/New_York;<Mon>,<Tue>,<Wed>,<Thu>,<Fri>,<Sat>,<Sun>;<holiday overrides>
- The first field is the venue timezone.
- Then seven per-weekday windows,
HHMM-HHMM.O= open all day,C= closed.&joins two windows in one day. - Then holiday overrides,
MMDD/<window-or-C>.
The gate shows a pair Open in-session and Closed out-of-session.
NoteTwo pairs are always open.USDT/USDandUSDC/USDeach carry a seven-day schedule (O,O,O,O,O,O,O): the crypto/stablecoin pairs, priced off the PythCrypto.USDT/USDandCrypto.USDC/USDfeeds, never close. Every other pair is FX and follows a weekday or session window. Read theschedulestring per pair rather than assuming an FX week.
NoteSome LatAm pairs only publish live during their local bank session. USD/CLP, USD/COP, and USD/PEN are Open in-session and Closed out-of-session, not dead, just session-windowed. The freshness overlay halts trading if an in-session feed stalls.
How do I read the live mark?
Three distinct prices; do not confuse them.
| Price | Source | Endpoint / read | Binding? |
|---|---|---|---|
| Indicative spot | Pyth Hermes | GET <hermes>/... direct (see below) | no |
| On-chain mark | per-pair FX oracle | on-chain _markRate, read over RPC | margin only |
| Fixing | FX oracle, on/after delivery date | on-chain, at settlement | yes |
- Indicative spot comes straight from Pyth Hermes, base
https://hermes.pyth.network(thehermesfield inconfig/pairs.json), keyed byfeedId. It refreshes every few seconds and is not firm. - On-chain mark is what the contract marks margin against. Read it over RPC from the per-pair FX oracle; it is fixed to
expo = −8. - Fixing is the single rate that settles the trade, read once at the delivery date.
The full distinction: Oracle & Rate Sources (~3 min).
NoteThe relayer does not serve a live-mark endpoint. The indicative spot is read from Pyth Hermes directly; the on-chain mark and fixing are read on-chain over RPC. There is no relayerGET /mark.
Which relayer endpoint relates to pairs?
One: GET /margin, the vol-scaled initial-margin schedule for a pair. It is keyed by the on-chain pairId (keccak256(symbol)), not a label, and returns the full schedule. The exact parameters and response shape live with the endpoint reference.
CRX API: GET /margin · ~4 minMargin schedule params (pairId, notional) and the full response shape
Pair labels passed to /rfq and on-chain calls must match a symbol in config/pairs.json exactly.