Wall Trader APIGuideTry it (Swagger)ReferenceOpenAPIYour API keys

Wall Trader API

Everything on the Wall Trader dashboard, as JSON: SPX 0DTE support and resistance, the sold walls, dealer Greek exposure by strike, Trend Matrix, market internals, sectors, the options tape and the community's strategies. Live while the market is open, and any past session minute by minute.

1. Get a key

Sign in to Wall Trader and open Account → API keys (walltrader.io/auth/account#api). Create a key, give it a name, and copy it: it starts with wt_ and is shown once. You can make several keys (one per app) and revoke any of them; a revoked key stops working at once.

Keep keys secret. Anyone with your key can read the API as you. Don't put a key in a web page or a public repository.

2. Make a request

Send the key in the Authorization header:

curl -H "Authorization: Bearer $WT_KEY" https://api.walltrader.io/v1/levels

X-API-Key: wt_… works too.

Python

import os, requests

API = "https://api.walltrader.io/v1"
H = {"Authorization": f"Bearer {os.environ['WT_KEY']}"}

lv = requests.get(f"{API}/levels", headers=H, timeout=10).json()
for s in lv["data"]["supports"]:
    print(s["label"], s["strike"], s["contracts"])

JavaScript (Node 18+)

const r = await fetch("https://api.walltrader.io/v1/exposure/gex?around=100", {
  headers: { Authorization: `Bearer ${process.env.WT_KEY}` },
});
const { meta, data } = await r.json();
console.log(meta.time, "GEX MVC", data.mvc, "total", data.total);

3. Sessions and replay

Parameter Meaning
(none) the latest session: live while the market is open (09:30–16:00 New York), else the last session's close
day=YYYY-MM-DD a past session
at=HH:MM a minute of that session, New York time (09:30–16:00) — replay it as it stood then
symbol=SPX where the endpoint says so: SPX (default), SPY, QQQ, IWM, DIA, NDX, RUT
curl -H "Authorization: Bearer $WT_KEY" "https://api.walltrader.io/v1/levels?day=2026-10-16&at=12:15"

4. What comes back

Every answer has the same shape:

{
  "meta": {"endpoint": "levels", "symbol": "SPX", "day": "2026-10-16", "time": "12:15", "live": false, "generated_at": 1792500000},
  "data": {
    "spot": 7703.52, "group": "grp5", "counts": "open",
    "supports":    [{"label": "S1", "strike": 7680, "contracts": 1304, "distance_pct": -0.306}, "…"],
    "resistances": [{"label": "R1", "strike": 7750, "contracts": 1273, "distance_pct": 0.603}, "…"]
  }
}

meta.live is true for the live session. The X-Data-Age header says how many seconds ago the answer was built.

5. Endpoints

Endpoint What it gives
GET /v1/market price, open, change, implied vol, expected move left, range band, gamma regime, net GEX, VIX
GET /v1/market/path price and 0DTE implied vol once a minute
GET /v1/market/vix VIX now, previous close, open / high / low, path
GET /v1/levels live S1–S3 / R1–R3 as on the dashboard's main chart, with contracts
GET /v1/levels/preopen the pre-open S1–S3 / R1–R3 from earlier sessions' book
GET /v1/walls every sold wall: calls (resistance), puts (support), contracts, distance
GET /v1/exposure/{greek} gex, dex, vanna, charm by strike: net, calls, puts, total, MVC
GET /v1/exposure net GEX, DEX, vanna, charm once a minute
GET /v1/trend-matrix Trend Matrix rows and the overall score (series=true for every minute)
GET /v1/rvolm relative volume by moneyness
GET /v1/internals NYSE / Nasdaq breadth, TICK, the internals bias
GET /v1/sectors S&P 500 sectors: cap-weighted move vs breadth
GET /v1/extremes how likely the high / low are in
GET /v1/opening-sigma previous close ± 1, 2, 3 σ
GET /v1/straddle the 0DTE at-the-money straddle through the day
GET /v1/flow/spreads the day's vertical spreads on the tape, largest first, and totals by type
GET /v1/flow/feed the dashboard's signal feed, newest first
GET /v1/strategies strategies shared in the community, with their forward tests
GET /v1/strategies/{id} one shared strategy: forward test day by day, trades
GET /v1/sessions sessions with data
GET /v1/status service status (no key needed)

Every endpoint, parameter and field is in the reference; you can call them from Swagger with Authorize and your key.

6. Freshness and speed

Live answers are rebuilt every few seconds during the session and served from memory, so a request answers in milliseconds. There's no need to poll faster than every 5 seconds. A past session's answers never change.

7. Limits and errors

Each key may make 60 requests a minute. Every answer carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (seconds); past the limit you get 429 with Retry-After.

Errors are JSON: {"error": {"code": "…", "message": "…"}}.

Status Code When
401 no_key, bad_key no key, a revoked key, or an account that can't use the API
400 bad_request, bad_symbol a parameter isn't valid
404 not_found no such strategy
429 rate_limited over 60 requests a minute
503 not_available that session or minute has no data yet

8. Fine print

The data is for information only and is not investment advice; your use of it is covered by the Terms and Conditions and the risk disclaimer. Don't resell or republish the data. The API is versioned: /v1 keeps its fields; new fields may be added.