The plan includes the full rangeProb-Tracks membership — the site, the app, the alerts, all of it. One subscription covers both; you are not paying twice.
Already a member? Subscribe here and then message us — we will cancel your membership subscription and refund whatever is left of the month. You will not pay for both. No need to cancel anything first.
Cancel any time and it runs to the end of the period you paid for.
Futures — NQ, ES, YM, RTY, GC and CL, on seventeen timeframes from 5 minutes to 240. Each open call carries its tier, its probability, the range high and low it was made against, and its target ladder. Plus price candles from 5m to 240m for context.
Stocks — the same engine pointed at 150 names. Every live call and every graded result, with the fire price and the close.
Crypto — the one board still moving at 3am and all weekend.
Everything is published before the outcome exists and graded in public afterwards, win or lose. The twenty-year record behind it is free to read at leppyrdtracks.com/record — no account needed.
One header. That is the whole authentication story.
curl -H "Authorization: Bearer lt_your_key_here" \
https://leppyrdtracks.com/api/v1/signals
Everything is JSON, everything is UTF-8, and every response carries the time it was published
so you can tell fresh from cached. Rate limits ride in the response headers
(RateLimit-Limit, RateLimit-Remaining), and a 429 always tells you how
long to wait rather than making you guess.
Feed it straight to a model. The payload is shaped to be read by software, not scraped off a page — several people run it into their own agents and backtests. Store it, chart it, build your own history off it. That is what you are paying for.
GET /api/v1/me answers with your key's identity: the email it is bound to, your
tier, what asset classes it may read, and how much of the hourly limit you have used.
Note that /api/me is a different thing. It is the website's own sign-in check and
it reads a browser cookie, so it will always answer "tier": "anon" to an API key.
That is not your subscription failing, it is the wrong door.
Two shapes come back. An open call is one the market has not settled yet. A graded row is finished and scored.
born is when the call fired. That is the anchor for everything else, and the
price on the row is the price at that moment.close_at is not the resolve time. It is the epoch of that timeframe's
next period close, measured from when the payload was published, and periods anchor at 18:00 ET.
So on a call that is still open hours later it moves forward with every publish. Read it as
"the next decision point", never as "when this call ends".resolved appears only on graded rows and is the real one. If you are building a
history, take your resolve timestamp from resolved and ignore
close_at entirely.hi and lo are the range the call was made against, on open rows
and on graded rows. Read them from the row. The candle strip under bars is for
drawing, and a box older than 24 of its own candles has scrolled out of it.born: it runs from
born − 1 min − timeframe to born − 1 min, on
periods anchored at the 18:00 ET session open. The engine stamps the birth on the first bar
of the next period, which is why the stamp sits a minute past the mark.up on a graded row is 1 when the tier was lifted by a confluence rule at fire
time. It is carried so upgraded calls can be scored on their own; it changes nothing about how
the call is read.User-Agent header. A bare request from a script is refused at the
edge with a Cloudflare 1010 page before it reaches the API, which looks like an auth failure and
is not one.GET /api/v1/history is every futures call posted to the channel since 31 Aug 2026,
with its grade and the target rungs as published, each rung with its own hit. It is rewritten on
every new grade. This is the live record: what members were actually sent, nothing else.
GET /api/v1/record?market=NQ&year=2025 is the 20-year backtest, one market and
year per request: every call the engine would have made, with fire and resolve time, timeframe,
direction, tier, odds and the hit, plus the price it fired at, the range it fired from and the
three target rungs with their odds (px, hi, lo, tgt). The range bounds are an API-only field: the free per-market CSVs and the direct /data/record files carry the fire price and the targets, not the box. 569,394 rows across six markets and all seventeen horizons, 5 to
240 minutes, 2007 to today; refreshed weekly, append-only, so a row you fetched never changes. One row per range-bar: where the engine reads the same bar through more than one construction, the record keeps the construction the live channel would send, selected by the live grid's own rule (changed 19 Sep 2026; before that both reads were listed, 148,673 twin rows with identical outcomes). Each row also carries live_tier, the tier the live grid assigns that bar; tier stays the replay grader, fitted only on years before the row. They differ on some bars because they are two graders. Filter on live_tier to get exactly what the channel would have sent; it is null where live would not post the bar at all. With no
parameters it returns the index (markets, years, counts). This is the engine replayed over
history; it is not the alerted ledger, and the two are never blended.
ts, so read the stamp and skip the work when it has not moved.
Alerts in Discord fire within seconds of the range closing, so on the 5 and 10 minute lanes the
API can sit up to a publish behind. If you are timing an entry off the fastest lanes, take the
entry from Discord and the grading from here.It is a personal licence. Your own trading, your own models, your own tools — all of it, none of it needs asking. What it is not is something to pass on: no sharing your key, no republishing the data, no running a service on it for other people.
If you do want to put it in front of your own users, that is a different arrangement and a fair conversation — ask rather than assume. The full terms are at leppyrdtracks.com/api-terms.
Subscribe above, then go to your account page and press Create API key. It appears instantly and works on the next request — no waiting on us, no email thread.
The key is yours to rotate whenever you want; rotating kills the old one in the same breath, so it is a real revocation rather than a second key floating around. Already a member? Same page, same button — the subscription is what switches the data on.