Skip to content

Docs

Getting started

Collateral
Test USD
Starting balance
$1,000
Faucet
Back to $1,000 · 1/h
Liquidity
Simulated + real
  1. Log in. Your account opens with $1,000 test USD.
  2. Pick a market on Markets: a card, a skin or an index basket.
  3. Long or short. Set size (units or USD), leverage and order type, then place it.
  4. Manage it on Portfolio: PnL, funding, liquidation price, close.

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.
ExampleValue
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%
  1. Collect. Sales, aggregate market prices and listings from each market's sources. Indexes price every constituent.
  2. 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.
  3. Aggregate. Target = recency-weighted median of accepted and downweighted prints. No single sale carries more than 12%.
  4. 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

SimulatedReal
MoneyTest USD for everyone—
Prices—Oracle from outside collectible markets
LiquidityMarket makers quote 5 levels a side around the oracleYour orders, and other traders'
TradersA 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).

Account (trading)
claude mcp add --transport http mox https://trademox.com/mcp/trade --header "Authorization: Bearer mox_sk_…"

Or just market data, no key:

Public (read-only)
claude mcp add --transport http mox-public https://trademox.com/mcp

API keys

Log in to create API keys

Tools

Public

  • list_marketsMarkets with live stats; filter by category, kind or text
  • get_marketOne market: spec, stats, index constituents
  • get_order_bookL2 book
  • get_recent_tradesLatest public trades
  • get_candlesOHLC candles (1d includes pre-listing reference bars)
  • get_oracle_statePublished vs target price, sources, screened prints
  • list_oracle_observationsScreened prints across all markets
  • get_trade_feedEvery trade on every market
  • get_top_moversBiggest 24h moves, per category
  • get_leaderboardTraders ranked by PnL

Account

  • get_accountreadBalance, positions, open orders
  • list_fills · list_orders · list_funding_payments · get_activityreadHistory
  • place_ordertradeMarket or limit, size in units or USD, leverage
  • cancel_order · cancel_all_orderstradeCancel resting orders
  • close_positiontradeClose all or part of a position
  • claim_faucettradeTop test USD back up to $1,000

WebMCP · in-page, for browser agents

  • search_marketsFilter markets on the open page
  • get_market_snapshotPrice, oracle, funding, top of book, your position
  • open_marketNavigate to a market
  • get_my_accountYour account summary
  • prepare_orderPre-fill the order form; you press the button
  • cancel_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.
Markets, book, an order
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}'
WebSocket · wss://api.trademox.com/ws
{"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.