Skip to main content
Measured on real traders, the cheapest call on this API is about 70 tokens and the most expensive is about 35,000. Knowing which is which is most of the skill.

What things cost

The two rules

1

Prefer summaries over raw arrays

get_market_summary and get_top_markets already contain sizing, timing, entry pricing, and per-market P/L — as computed numbers, with no arrays. They answer “how did they trade this?” outright.Reach for get_market_events when you need to chart a market or confirm a specific sequence. Not before.
2

On MCP, always pass limit

MCP returns every result twice — a readable text copy and a structured copy — so paged tools cost roughly double their REST equivalent.A default list_trader_markets page is ~35k tokens. limit: 20 turns that into ~2k. The same applies to get_recent_fills (limit) and get_market_events (points).
The single biggest waste on the whole surface is an unbounded list_trader_markets or get_recent_fills over MCP. One careless call can cost more tokens than an entire well-run trader crack.

Workflow costs

Reach for the right primitive

list_trader_markets is recency-ordered only, by design. A 40,000-market bot has no “biggest win” on page one, and paging 200 times to find it costs a fortune and still misses.get_top_markets returns top_wins, top_losses, most_traded, and top_volume from one scan. That is the extremes primitive.Keep n modest on mega-makers — a 180,000-market account sits near the heavy-query timeout, and a narrow n is both cheaper and likelier to return.
get_market_events returns a decimated price series plus the trader’s complete fills in a single response. No cursor, no tick flood.raw=1 returns the verbatim tick pages instead, where the same second repeats about 36 times — a 5-minute market becomes 8,000 rows across 4 pages. It exists as an export path. You almost never want it for a chart.
get_recent_fills with a since watermark holds no live slot and costs one request per poll. Record the last fill’s ts and pass it back next time so you only pull what is new.Poll on a minutes cadence. Freshness is bounded by the archive pipeline anyway, and a tight loop burns a Basic day in under an hour.
Cursors are opaque keyset tokens, forward-only. Never hand-craft or mutate one.A malformed cursor is a clean 400 bad_cursor. A well-formed forged cursor silently returns page 1 again — safe depth-wise, but you re-read and re-pay for data you already have.

Validate before you fire

Application errors on real routes burn a call. A typo’d condition_id is a 404 that costs a Basic user 1/50th of their day. 429 rejections do not burn a call, so the rate limiter is free — but your own mistakes are not.