The instrument
AnInstrument 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 onlyA–Z,0–9and dots, 1 to 32 characters, with no-or_. Digits are allowed anywhere, as in1000PEPE. Different assets are different instruments:BTC/USDTandBTC/USDCare separate markets. expiryis a date,YYYY-MM-DD.strikeis 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 with400 InvalidRequest. The canonical form makes option identity exact.rightisCallorPut.- An unknown
typeis rejected with400 InvalidRequest. In responses, new instrument types may appear over time: treat an unknowntypeas 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 bytypes 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 asymbol: 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 hascontractDetails, 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. Everysize 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
"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
"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
WhencontractSize 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 takesizing, 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 areDecimal 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.
Related
- 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.