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 twenty-one 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.
One grade per call. On /api/v1/signals the top-level tier,
prob and dir are the call’s grade, odds and side — the same
letter as the Discord card and the app (also in sig). A row with no call has them
null: the range is open but nothing has fired. The range’s own read at birth is
kept as range_tier, range_prob and range_dir; it is not the
call and never says S. Target ladders are 90/80/70/50 — match each rung on its
p, not its position.
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.
/signals, not a separate call.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 (open rows) is when the range was born, in ET — not when the
call fired. A range can sit open for a while before it calls.sig on an open row is the call itself, present only once one has fired:
sig.at is when it fired (ET), sig.px is the price it fired at, and
sig.tier, sig.p and sig.dir are its grade, odds and side.
Open rows carry no top-level price; take the entry from sig.px.at is when it fired, px the
price it fired at and res_px the price when it resolved.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 replay grader publishes (odds 73% or better), 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. Six markets and all twenty-one horizons, 5 to
240 minutes, 2007 to today (20m and 25m added 15 Oct 2026, then 35m and 40m the same day, each pair run as its own walk-forward so the other horizons were not re-graded); refreshed every weekday after the close. From the day each horizon went live, every row is a call we alerted, exactly as it was sent: tier, odds, price, targets and result (17 Oct 2026: the live era was rebuilt from our own log of the live feed, so it now holds every alerted call and nothing that was not alerted). Before that, the rows are every call the live engine would have made, replayed over twenty years and graded with walk-forward odds (17 Oct 2026: 426,298 replayed calls the older backtest had never listed were added, which moved the nine-horizon headline from 79.7% to 78.9%); those rows are 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. On live-era rows it equals tier: the tier we alerted. On backtest rows, tier is the walk-forward grader (fitted only on years before the row) and live_tier is the tier the live engine would have shown, null where it would not have shown the bar. 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.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.