Skip to main content
Every exchange names its markets its own way. Plurex identifies an instrument by what it is, not by what a venue calls it: its type, base asset, quote asset and, where they apply, expiry, strike and right. The same instrument has the same identity on every venue and host. This page covers how to write instruments, how to read canonical symbols, and the sizing convention that matters most for getting orders right: every size is in native contracts.

The instrument

An Instrument is a JSON object with a type discriminator. Every operation that takes a market takes a structured instrument; there is no symbol-only input.

Field rules

  • Asset IDs (base, quote) are uppercase and contain only A–Z, 0–9 and dots, 1 to 32 characters, with no - or _. Digits are allowed anywhere, as in 1000PEPE. Different assets are different instruments: BTC/USDT and BTC/USDC are separate markets.
  • expiry is a date, YYYY-MM-DD.
  • strike is a positive decimal string in the quote asset, in canonical form: no exponent and no trailing fractional zeros. Send "50000" or "50000.5", never "50000.0" or "5E4"; non-canonical strikes are rejected with 400 InvalidRequest. The canonical form makes option identity exact.
  • right is Call or Put.
  • An unknown type is rejected with 400 InvalidRequest. In responses, new instrument types may appear over time: treat an unknown type as unrecognised rather than failing.

What is listed

The instrument model covers more than any one venue lists. Discover what is actually tradable with List host markets and List venue markets, filtering by types if you need to. The current venues list spot and perpetual markets. Options are modelled but not listed or tradable. Neither listing returns option markets. An Option instrument appears only where a host reports account activity on one, for example in a position or transaction, so your code can read that data instead of failing on it.

Canonical symbols

Every market summary carries a symbol: the Plurex canonical symbol for its instrument, independent of venue naming. It is BASE-QUOTE-TYPE, built from the instrument: YYYYMMDD is the expiry without dashes, STRIKE is the strike exactly as given, and RIGHT is CALL or PUT. A put at a fractional strike reads BTC-USD-OPT_20300329_50000.5_PUT. Use the symbol for display, logging and as a map key: it is the same on a host market and the venue market it trades on. It is not an input: send the structured instrument to every operation. It is also not the venue’s own identifier, so do not pass it to an exchange directly. To search markets by symbol, use the search filter on either listing; it does fuzzy, case-insensitive token matching on the canonical symbol.

Contract details

Each host and venue market has contractDetails, which says what one contract of the market is: One contract is contractSize units of contractSizeAsset.

Size is always native contracts

This is the most important convention in the API, and the easiest to get wrong. Every size is in native contracts: order sizes, fill sizes, position sizes, order book and trade sizes, and the size rules on host markets. A size is not necessarily an amount of the base asset. Every notional is an amount of the quote asset. Native contracts are used because base units are wrong for inverse and fractional-contract markets. Read contractDetails and convert.

Linear perpetual: one contract is one BTC

On this BTC/USDT perpetual, "size": "0.015" is 0.015 contracts of 1 BTC each: a position of 0.015 BTC. At a price of 64,000 USDT it is worth 960 USDT.

Inverse perpetual: one contract is one USD

On this BTC/USD inverse perpetual, "size": "250" is 250 contracts of 1 USD each: 250 USD of exposure, not 250 BTC. At a price of 64,000 USD that is about 0.0039 BTC, and the BTC amount changes as the price moves while the USD amount does not. A limit order like this is an ordinary-looking request that means something very different from the linear case:

Contracts that are not one unit

When contractSize is not 1, multiply. If a market’s contract were 0.001 BTC, then "size": "15" would be 15 contracts, or 0.015 BTC. Always read contractSize from the live market summary rather than assuming 1.

The value of a priced order

Host markets set a minimum value for limit and trigger limit orders (value.min, in the quote asset). You never send the value; it is computed from the order’s price and size using contractDetails: Worked examples: A size above the market’s minimum size can still be below its minimum value, so check both. See Order rules for the full set of rules and how to round to them.

Sizing market orders

Market and trigger market orders take sizing, which says which unit you mean:
Size is native contracts; Notional is an amount of the quote asset. Each market lists which units it accepts for buys and for sells in orderTypes.market.sizingSupport. A notional is not a size promise: the size you receive is the notional divided by the fill price, and can fall below the market’s minimum size.

Decimals

Prices, sizes, notionals, balances and rates are Decimal values: exact decimal numbers encoded as JSON strings, such as "0.015" or "64000.0". Parse them with a decimal type, not a binary float, and send them back as strings. Floating-point rounding turns 0.1 + 0.2 into 0.30000000000000004, which then fails an increment check.
  • Order rules for increments, minimums and options per order type.
  • Venues and hosts for how markets join across venues and hosts.
  • Orders for submitting orders step by step.