Skip to main content
Every spread page has a stable address you can build in your own software or a bot. The grammar below is also used by the Spreader bot and by every link the site writes.

Format

Case does not matter for the exchange, the type, the coin and the quote: OKX:Perp:btc/usdt and okx:perp:BTC/USDT are the same. The order of the two parameters does not matter. long is the leg you buy, short is the leg you sell.

Readable form: COIN/QUOTE

This is how external software builds a link and how the site writes almost all of its own links. The coin and the quote are as the exchange names them, not as Spreader names the asset: the thousand PEPE contract on Binance is 1000PEPE/USDT, not PEPE/USDT, gold on Bybit TradFi is XAUUSD+/USD.
The quote can be dropped (okx:perp:ETH) when the coin has one quote on that exchange and type. With several quotes the page shows a list to pick from.

Exact form: the exchange symbol

The market name letter by letter as the exchange calls it: BTC-USDT-SWAP on OKX, xyz:GOLD on a Hyperliquid builder DEX, PF_XBTUSD on Kraken. It is needed when the readable form is not enough:
  • Twins: the exchange has two markets of the same type for the same coin and quote, for example xyz:AAOI and para:AAOI on Hyperliquid, AAPLx/USD and AAPLSPV/USD on Kraken, two Binance Alpha tokens with one ticker. The site writes such markets by symbol so that a link always opens exactly the market you clicked.
  • Delisted markets: only the exact form opens their page, with the delisting banner and the stored history.

Encoding

: and / are written as they are. Only characters forbidden in an address are encoded: & → %26, space → %20, $ → %24, non Latin letters as UTF-8. bybitfi:perp:AT&T/USD becomes bybitfi:perp:AT%26T/USD. Browsers do this by themselves. In code, use the standard URL component encoder and put : and / back.

What the server does with a typed address

The server does not guess. For each leg, within the exchange and type (for margin, among spot markets with margin trading):
  1. Exact name. If NAME equals a market symbol, that is the market, in any status (this is how delisted markets open). If NAME contains / and the part before the last / equals a symbol while the part after it equals its quote, that is the market too (hyperliquid:perp:xyz:GOLD/USDC).
  2. By coin and quote among traded and delisting markets: the part before the last / is the coin, after it the quote. Exactly one market: that one. Several: the page Several markets match the long leg — pick one with an exact link per candidate. None: No market matches the long leg. This coin is quoted there in … with the quotes the coin has on that exchange.
  3. Without a quote (okx:perp:ETH): one quote, that market. Several: the list.
The pair as a whole must be two different markets of the same asset in an allowed kind: spot only as the long leg, margin only as the short leg, spot against spot only on different exchanges. Otherwise the page shows The two legs belong to different assets, Both legs point to the same market or Cannot read the long leg, never a blank screen. An address that cannot be read at all, including the old /spread?p=… form, opens the scanner. Every market object the site sends to the browser carries a ready leg token: the readable form when the market has no twin among traded markets of the same type, coin and quote, the symbol otherwise. When you open a pair by a click without a link (search, Pair builder, arrow keys), the page replaces the address in the browser with the readable form, without a history entry, so a copied address is always the same.