CRXDocs
Get StartedLearnBuildCurateTools
  • Introduction
  • API
  • Pairs & Marks
  • Positions
  • Changelog
  • SDKs
  • Explorer
  • Using LLMs

Pairs & Marks API

Which pairs does CRX list?

Every supported pair, with its live Pyth (Hermes) feed id. All are USD-base USD/XXX feeds. All settle in USDC. None deliver currency.

20 USD pairs. Every one settles in USDC against a live Pyth fixing — none deliver currency.

PairQuote currencyLive Pyth feed
USD/BRLReais0xd2db4dbf1a…d7a95906
USD/CADCanadian dollars0x3112b03a41…eaa2ecca
USD/CHFFrancs0x0b1e3297e6…a63e28f8
USD/CLPChilean pesos0xd407a4b25c…cc3e84c7
USD/CNHYuan0xeef52e09c8…2e332e66
USD/COPColombian pesos0xcaffb53eda…ef4edf8d
USD/HKDHong Kong dollars0x19d75fde7f…b23aff4c
USD/IDRRupiah0x6693afcd49…b9207433
USD/INRRupees0x0ac0f9a288…4fcf1809
USD/JPYYen0xef2c98c804…3042fd52
USD/KRWWon0xe539120487…201be7e3
USD/MXNMexican pesos0xe13b1c1ffb…866b77ca
USD/NOKKroner0x235ddea9f4…596023a3
USD/PENSoles0x5a90fd5841…b192446a
USD/PHPPesos0x2bda7f268b…9e0a68c9
USD/SEKKronor0x8ccb376aa8…e43fc676
USD/SGDSingapore dollars0x396a969a9c…8bdb4918
USD/TRYLira0x032a2eba1c…8744e058
USD/TWDTaiwan dollars0x489f02f2f1…fcd5a8e0
USD/ZARRand0x389d889017…97f493f1

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:

FieldMeaning
symbolThe pair label, e.g. USD/INR. pairId = keccak256(symbol) on-chain.
base / quoteAlways USD base; quote is the foreign currency.
feedIdThe Pyth (Hermes) price feed id for the pair.
scheduleThe market-hours string driving the open/closed session gate.
invertedAlways false. Every pair is a direct USD/XXX feed.

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.

Some 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 — they are not dead, just session-windowed. The freshness overlay halts trading if an in-session feed stalls.

How do I read the live mark?

Two distinct prices — do not confuse them.

PriceSourceEndpoint / readBinding?
Indicative spotPyth HermesGET <hermes>/... direct (see below)no
On-chain markper-pair FX oracleon-chain _markRate, read over RPCmargin only
FixingFX oracle, on/after fixing dateon-chain, at settlementyes
  • Indicative spot comes straight from Pyth Hermes, base https://hermes.pyth.network (the hermes field in config/pairs.json), keyed by feedId. 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 fixing date.

The full distinction: Pricing & Rate Sources (~3 min).

The 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 relayer GET /mark.

Which relayer endpoint relates to pairs?

One: margin, which takes a pair label.

MethodPathAuthParamsReturns
GET/marginnopair (required), notional (required, quote units){ "im": "4200.00" } — vol-scaled initial margin

Pair labels passed to /margin, /rfq, and on-chain calls must match a symbol in config/pairs.json exactly.

Next: Positions & Settlement API (~3 min) — read positions, marks, PnL, and settlement state for an address.

PreviousTools · 5 min readAPINextTools · 3 min readPositions
CRX
DocsDeskLaunch app
On-chain FX hedging. Confidential.