Papertrade Analytics docs

API reference

Base URL: https://papertrade-analytics.pages.dev. No key. CORS is open (Access-Control-Allow-Origin: *). The OpenAPI 3.1 document is at /openapi.json; the MCP server has its own reference.

GET /api/metrics#

One JSON document with everything on the dashboard. Cached 30 seconds in the Workers Cache; X-Cache is HIT or MISS. USD values are plain numbers.

curl -s https://papertrade-analytics.pages.dev/api/metrics | jq '.markets[] | {symbol, priceUsd, longShare, volume24hUsd}'
FieldContents
generatedAt, sourceWhen it was built and provenance: protocolBlock, protocolAt, historyAsOf, onchain, snapshots.
protocoltvlUsd, marginUsd, lpUsd, reserveUsd, queueUsd, allTimeVolumeUsd, volume24hUsd, openPositions, traders, trades, liquidatedVolumeUsd, traderPnlUsd, lifetimeFeesUsd, pendingFeesUsd, openNotionalUsd, houseOpenPnlUsd.
deltastvl, lp, traders, openPositions as {h24, d7}, plus volume24h (last 24h against the 24h before) and trades24h. Each delta is {abs, pct, fromMs, toMs, spanMs, partial}.
markets[]BTC and ETH: priceUsd, change24hPct, change7dPct, sparkline, volume24hUsd, open long and short, longShare, cap open interest, caps and utilization, maxLeverage, maxPositionUsd, status flags, impact, keepsExample.
papersupply, staked, stakedShare, mintRate, phase, curve, tailProgressToRate25Usd, reservePaper.
stakingtotalStaked, accRewardPerShareUsd, accRewardPerShareRaw, pendingRewardsUsd, rewardCapUsd, overflowAboveCapUsd, rewardsDistributedUsd.

Errors: 502 with {"code":"upstream_unavailable","message":"..."} when the Papertrade API cannot be reached, and 405 for methods other than GET, HEAD and OPTIONS.

GET /api/snapshots#

House-book samples recorded every five minutes while a SNAPSHOTS KV namespace is bound. Returns {intervalMs, recording, snapshots[]}; the list is empty when nothing is bound. Each snapshot has t, tvl, margin, lp, pnl, open and long and short notional for each market.

/api/papertrade/*#

A same-origin proxy to the Papertrade API, which sends no CORS headers. It forwards only the public surface: GET reads under /state/, /query/, /queue-rank/ and /relayer/health, the wallet live stream, and the POST routes that carry already-signed intents. It holds no keys and signs nothing. Point the SDK at it with new PapertradeClient({ baseUrl: '/api/papertrade' }). Other paths return 404 not_proxied.

Using the building blocks as a library#

The pure functions behind the dashboard live in src/ and are unit-tested on recorded responses: buildMetrics (the document above), historyPoints, deltaOver, windowOverWindow and diffSeries (time-series transforms), houseSeries (house book history), traderRows, positionInsights and concentration (leaderboard analysis), and seriesToCsv. They take plain inputs and return plain data, with no DOM or network access.

Unofficial, not affiliated with Papertrade. High leverage can lose your whole margin. Not financial advice. Edit this page.