Docs
Getting started
- Collateral
- Test USD
- Starting balance
- $1,000
- Faucet
- Back to $1,000 · 1/h
- Liquidity
- Simulated + real
Markets & indexes
- Categories
- MTG · Pokémon · One Piece · CS2
- Max leverage
- 3–5× singles · 5–10× indexes
- Min order
- $10 notional
- OI cap
- $25k–$500k / side
- A perp tracks an item's price with no expiry and no delivery. You hold price exposure, never the card or skin.
- Size is in units of the item: 1 = one card, one skin or one basket. Order in units or in USD.
- Each market names its exact item: print, set, condition or wear (e.g. Unlimited · Near Mint, Factory New).
- Index perps track a basket. Price = Σ (constituent oracle price × quantity). One trade, a whole meta.
Trading
- Taker fee
- 0.045%
- Maker fee
- 0.015%
- Price band
- ±15% of oracle
- Market slippage
- 5% from mark
- Leverage
- 1× to market max
- Order rate
- 20 / min
- Long gains when the price rises. Short gains when it falls.
- Market fills now against the book, within the slippage bound. Limit rests at your price.
- Post-only limits never take; rejected if they would cross (post_only_would_cross).
- Reduce-only can only shrink a position, never grow or flip it.
- Self-trade prevention: your order never fills against your own resting order; the resting one is cancelled.
| Example | Value |
|---|---|
| Long 2 × a $500 card at 5× | $1,000 notional |
| Initial margin | $1,000 ÷ 5 = $200 |
| Taker fee | $1,000 × 0.045% = $0.45 |
| Card +10% | +$100 PnL · +50% on margin |
Rejections: insufficient_margin, price_band, oi_cap, min_notional, reduce_only, post_only_would_cross, no_liquidity, oracle_stale.
Margin & liquidation
- Mode
- Cross margin
- Initial margin
- Notional ÷ leverage
- Maintenance
- Notional ÷ (2 × max lev.)
- Partial liquidation
- 20% slices > $2,000
- Liquidation fills
- Within 10% of mark
- Vault backstop
- < ⅔ of maintenance
- Account value = balance + unrealized PnL. Free collateral = account value − margin in use − margin held by open orders.
- Below maintenance: open orders are cancelled and positions close into the book with reduce-only market orders, largest first.
- Small positions close in full. Large ones close 20% at a time. It stops once you're back above maintenance.
- Below ⅔ of maintenance: the MOX Liquidity Vault takes every position at mark and keeps the remaining margin. Any bad debt is the vault's; you never owe more than your balance.
- Everything runs on the mark price: a 150 s smoothed price that moves ≤ 0.3%/s and stays within ±10% of the oracle. One wild print can't liquidate you.
Funding
- Paid
- Hourly, on the hour
- Interest
- 0.00125% / h
- Premium clamp
- ±0.05% / 8 h
- Cap
- ±4% / h
- Perp above oracle → rate positive → longs pay shorts. Below → shorts pay longs.
- Rate / h = (premium + clamp(interest − premium, ±0.05%)) ÷ 8, Hyperliquid's 8 h formula paid hourly.
- Premium compares $1,000 impact bid/ask to the oracle, sampled every 5 s and averaged over the hour.
- Payment = position size × oracle price × rate. Shown as %/h on every market; your history is on Portfolio.
The oracle
- Card sources
- TCGplayer · Scryfall · PokémonTCG · JustTCG
- Skin sources
- Skinport · Steam · CSFloat
- Half-life
- 24 h cards · 2 h CS2
- Slew limit
- 6 bps/min cards · 15 CS2
- Stale after
- 48 h cards · 45 min CS2
- Max weight / sale
- 12%
- Collect. Sales, aggregate market prices and listings from each market's sources. Indexes price every constituent.
- Screen. Each print gets a manipulation score from 0 to 1. stat-v1 measures distance from the recent median (in MAD units), from the oracle and from other sources, plus same-direction bursts and walk-ups.
- Aggregate. Target = recency-weighted median of accepted and downweighted prints. No single sale carries more than 12%.
- Publish. The live price walks toward the target at the slew limit.
Jev (TypeSafe's decision model) reads every print after stat-v1 and answers two questions: was it made to manipulate the price, and should it be included? Score = max(stat-v1, Jev). Jev can raise risk, never lower it; a confident “don't include” drops the print. If Jev is down, stat-v1 stands.
Status is live, stale or seed (no live source yet). Every screened print, with its score and reasons, is public on Oracle.
Simulated activity
| Simulated | Real | |
|---|---|---|
| Money | Test USD for everyone | — |
| Prices | — | Oracle from outside collectible markets |
| Liquidity | Market makers quote 5 levels a side around the oracle | Your orders, and other traders' |
| Traders | A dozen sim traders (momentum, mean reversion) | Everyone tagged without “sim” |
| Engine | — | Matching, margin, funding, liquidation: same rules for all |
- Simulated accounts: market makers, sim traders, the MOX Liquidity Vault and the fee account. All tagged sim.
- Volume, open interest and trader counts show their simulated share (hover the stat).
- Real traders are highlighted on the live tape. Sim traders rank on the leaderboard, tagged; makers and the vault don't.
AI & agents
Endpoints
Checking…- Public MCP · no auth
- https://trademox.com/mcp
- Account MCP · key or OAuth
- https://trademox.com/mcp/trade
Set up your client
Create an API key below (scopes read + trade, or read only).
claude mcp add --transport http mox https://trademox.com/mcp/trade --header "Authorization: Bearer mox_sk_…"Or just market data, no key:
claude mcp add --transport http mox-public https://trademox.com/mcpAPI keys
Tools
Public
list_marketsMarkets with live stats; filter by category, kind or textget_marketOne market: spec, stats, index constituentsget_order_bookL2 bookget_recent_tradesLatest public tradesget_candlesOHLC candles (1d includes pre-listing reference bars)get_oracle_statePublished vs target price, sources, screened printslist_oracle_observationsScreened prints across all marketsget_trade_feedEvery trade on every marketget_top_moversBiggest 24h moves, per categoryget_leaderboardTraders ranked by PnL
Account
get_accountreadBalance, positions, open orderslist_fills · list_orders · list_funding_payments · get_activityreadHistoryplace_ordertradeMarket or limit, size in units or USD, leveragecancel_order · cancel_all_orderstradeCancel resting ordersclose_positiontradeClose all or part of a positionclaim_faucettradeTop test USD back up to $1,000
WebMCP · in-page, for browser agents
search_marketsFilter markets on the open pageget_market_snapshotPrice, oracle, funding, top of book, your positionopen_marketNavigate to a marketget_my_accountYour account summaryprepare_orderPre-fill the order form; you press the buttoncancel_orderCancel one of your open orders
API
- REST
- https://api.trademox.com/v1
- WebSocket
- wss://api.trademox.com/ws
- Auth
- Bearer: login token or API key
- Rate limit
- 120 / min per token
- Decimals are strings (
"1234.50"). Times are unix ms. Sizes are item units, signed on positions. Funding is a fraction per hour. - Errors:
{"error":{"code","message"}}. Order rejections are 4xx errors, never stored orders. - Public data is cached ≤ 1 s with ETags. Poll REST for the first paint, then switch to the socket.
- Full spec: OpenAPI 3.1.
curl https://api.trademox.com/v1/markets
curl "https://api.trademox.com/v1/markets/MTG-LOTUS/book?depth=10"
curl -X POST https://api.trademox.com/v1/orders \
-H "Authorization: Bearer mox_sk_…" -H "Content-Type: application/json" \
-d '{"symbol":"MTG-LOTUS","side":"buy","type":"market","sz_usd":"100","leverage":3}'{"op":"subscribe","channel":"markets"}
{"op":"subscribe","channel":"book","symbol":"MTG-LOTUS"}
{"op":"subscribe","channel":"feed"}
{"op":"auth","token":"mox_sk_…"}
{"op":"subscribe","channel":"account"}Channels: markets (changed stats ≤ 1/s), book (≤ 4/s), trades, feed, candles, oracle, account. Merge markets updates by symbol. Reconnect with backoff and resubscribe.
FAQ
Is this real money?
No. Test USD only. Nothing is deposited, nothing can be withdrawn.
Do I own the card or skin?
No. A perp is price exposure only. No custody, no delivery, no expiry.
Where do prices come from?
Outside collectible markets (TCGplayer, Scryfall, Skinport, Steam, CSFloat and more), screened for manipulation and slew-limited. See The oracle.
Why was my limit order rejected?
Most often price_band (more than 15% from the oracle) or insufficient_margin. The error code says which.
Can I lose more than my balance?
No. If an account falls below ⅔ of maintenance, the MOX Liquidity Vault takes over and absorbs any bad debt.
What happens when the oracle goes stale?
New opening orders pause in that market until a fresh print is accepted. Closing and reducing still work.
I'm out of test USD.
Use the faucet on Portfolio: back to $1,000 once an hour.
Who is “sim”?
Market makers, simulated traders, the liquidity vault and the fee account. See Simulated activity.
Can my AI trade for me?
Yes, with an API key or OAuth that has the trade scope. Revoke it any time in AI & agents.