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:
| Field | Meaning |
|---|---|
isVaulted | Trades units held in a Tradepost facility only. A sell needs vaulted units; a cross settles as a vault-internal transfer, no shipment |
configuration.data.feeModel | BUYER_SELLER with buyerFeeBps / sellerFeeBps, or MAKER_TAKER with makerFeeBps / takerFeeBps |
configuration.data.tickSizeCents / lotSize | Price and quantity granularity, checked on every order into the market |
configuration.data.minOrderQuantity / maxOrderQuantity | Inclusive size bounds per order |
configuration.data.minUnitPriceCents / maxUnitPriceCents | Inclusive price band, checked on the clean resting price |
startAt / endAt | Trading window; orders are refused outside it |
data.includeKeyIds / excludeKeyIds | Which 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 send | Book shows | |
|---|---|---|
| BUY | allInPrice: 4000 | bid at 3960 — the most you pay per unit is 4000 |
| SELL | allInPrice: 1037 | ask 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.