Skip to main content

Markets

A market is a venue: a fee schedule, trading rules, and whether it trades vault-held units. Every book is one product × one key × one market, and every submission names the markets it may rest in.

Discovering markets

getProductMarkets answers the question that matters before you trade: which venues does this product trade in, and what may I do there?

query {
getProductMarkets(input: {
assetConfigurationId: "cc18dcac-135c-42b3-af8c-c9b30c89f22f"
keyId: "4a9a2cca-c05f-5474-9979-428dc6f41107"
}) {
markets {
market { id displayName isVaulted visibility }
canBuy canSell canBid canAsk
associations { tradingState }
}
error { message }
}
}
{
"markets": [
{
"market": { "id": "2406c582-64f0-4192-a7f2-f2cb70e5d652", "displayName": "STCG- Sealed TCG (all)", "isVaulted": false, "visibility": "PUBLIC" },
"canBuy": true, "canSell": true, "canBid": true, "canAsk": true,
"associations": [{ "tradingState": "ACTIVE" }]
},
{
"market": { "id": "642cc6f3-3e7e-4d5c-8cee-f0578f5106e1", "displayName": "STCG- Sealed TCG (all) [Vaulted]", "isVaulted": true, "visibility": "PUBLIC" },
"canBuy": true, "canSell": true, "canBid": true, "canAsk": true,
"associations": [{ "tradingState": "ACTIVE" }]
}
]
}

canBuy / canSell are taker permissions — may you hit what rests. canBid / canAsk are maker permissions — may you rest your own order. Private venues you are not a member of do not appear. Rules that depend on the order itself — identity verification above a size threshold, for instance — are enforced when you submit, so a venue that reads canBuy: true can still refuse a specific order with KYC_REQUIRED or ACCESS_DENIED.

listMarkets pages every enabled market; getMarket fetches one by id. Both return the venue's rules:

FieldMeaning
isVaultedTrades units held in a Tradepost facility only. A sell needs vaulted units; a cross settles as a vault-internal transfer, no shipment
configuration.data.feeModelBUYER_SELLER with buyerFeeBps / sellerFeeBps, or MAKER_TAKER with makerFeeBps / takerFeeBps
configuration.data.tickSizeCents / lotSizePrice and quantity granularity, checked on every order into the market
configuration.data.minOrderQuantity / maxOrderQuantityInclusive size bounds per order
configuration.data.minUnitPriceCents / maxUnitPriceCentsInclusive price band, checked on the clean resting price
startAt / endAtTrading window; orders are refused outside it
data.includeKeyIds / excludeKeyIdsWhich keys the market trades. Empty include means all

A null rule is unconstrained.

Clean prices and all-in prices

The book quotes clean prices: the price the two sides cross at, before fees. Submissions carry all-in prices: what the buyer pays or the seller nets per unit, fees included. The market's fee schedule converts between them, in opposite directions by side. On a market charging 100 bps to each side:

You sendBook shows
BUYallInPrice: 4000bid at 3960 — the most you pay per unit is 4000
SELLallInPrice: 1037ask at 1048 — the least you net per unit is 1037

Every price on the book, the ticker, the tape, candles and the depth stream is clean. Every price on a submission, a quote total, or a fill's money movements is what actually moves. getOrderQuote does the conversion for you.