The open intelligence layer

The Paddock API

Read-only, public, versioned at /api/v1, CORS open. Every number on this site is served by these endpoints, and the same door is open to anyone building on Gigling Racing. Honest data holds in JSON exactly as in the UI: unrevealed stats are ranges with flags, never midpoints; thin comps say thin.

Start here

The whole dossier for Gigling #6249, in one call

This runs on load. Every value on that horse's page comes from exactly this response.

curl https://paddock.bot/api/v1/pet/6249

Every endpoint

GET

Pet dossier

Full dossier: honest stat ranges, traits with study lifts, confirmed quality, upside, shark profile, valuation band.

curl https://paddock.bot/api/v1/pet/6249
GET

Wallet summary

Stable report: A-team, hidden gems, reveal queue, track assignments, estimated value, flags.

curl https://paddock.bot/api/v1/wallet/0xA8A956a5690cc81bB367DA2C2f6f1796Be2B3C30
GET

Race + scanner verdict

Entrants with records and ELO, payout structure, and the scanner verdict object.

curl https://paddock.bot/api/v1/race/5667
GET

Odds

Per-entrant win probabilities from the model. Calibrated out of sample at /calibration.

curl https://paddock.bot/api/v1/odds/race/5667
GET

Leaderboard

Ranked by cq, elo, winrate (shrunk), earnings, or upside. metric=upside ranks lightly-revealed horses by reveal-adjusted upside (potential relative to how little they have shown), not a prediction. Paginated with limit (default 25, max 100) and offset.

curl https://paddock.bot/api/v1/leaderboard?metric=cq&limit=10
GET

Stable leaderboard

Wallets ranked by proven roster quality, the shrunk average confirmed quality of each stable's proven horses. Proven roster quality, not racing skill, not value. Each row carries ownerAddress, resolved ownerName, score, percentile, provenCount, totalHorses, and avgProvenCq. Paginated with limit (default 25, max 100) and offset.

curl https://paddock.bot/api/v1/stables?limit=10
GET

Racing records

Fastest finishes per distance from resolved races, on-chain times, and the programmatic export of the records board. mode=raw or adjusted (adjusted corrects for track temperature on tracks where it is board-fair out of sample; this reduces, but does not fully remove, condition effects, so the condition is always shown). window=all, weekly, or daily. Params track, mode, window, limit (default 25, max 100), offset. Response carries adjustmentApplied per the selected track, adjustedTracks, and fastest; each row carries petId, name, rarity, resolved ownerName, rawTimeMs, adjustedTimeMs (null where that track is not adjusted), raceTemp, raceId, resolvedAt.

curl https://paddock.bot/api/v1/records?track=500&mode=adjusted
GET

Live-lobby scan

A verdict for an ad-hoc field that is not a stored race. Mark your horse to check its fit.

curl https://paddock.bot/api/v1/scan?pets=6249,3010,1971,442&track=1200&mark=6249
GET

Races feed

Recent resolved races. Filter by track length.

curl https://paddock.bot/api/v1/races?limit=10
GET

Calibration

The odds model's out-of-sample backtest: split, metrics, and the predicted-vs-actual buckets.

curl https://paddock.bot/api/v1/calibration
GET

Race Finder, live lobbies

Open forming races right now, read-only and live (polled politely, cached a few seconds, so it may lag). Each lobby carries trackLength, raceTemp (null while forming), fieldSize, petCount, openSlots, entryFeeWei, payoutBps, and the current entrants with strength. Add ?wallet={address} or ?pet={id} and each lobby also carries your win edge as an honest band (the live model adds ELO and fit signals that are not validated at these odds, so it is a banded label, not a precise percent), an EV estimate, and recommended horse. Forming-field odds shift as horses enter and are uncalibrated estimates, never guarantees.

curl https://paddock.bot/api/v1/lobbies
GET

Site stats

Headline counts and the data freshness timestamps.

curl https://paddock.bot/api/v1/stats
GET

Health

Lightweight liveness check for monitors. Returns status, version, and time, with a fail-soft DB reachability flag. No heavy aggregation, safe to poll often.

curl https://paddock.bot/api/v1/health

Contract

What you can rely on

  • ✳Versioned path (/api/v1) from day one; breaking changes get a new version.
  • ✳Consistent error envelope { error: { code, message } } with correct HTTP status (400, 404, 429, 500), never a 200 wrapping an error.
  • ✳Reads are aggressively cached at the edge and the platform auto-scales, so the API stays up under load. A per-instance limiter adds defense in depth and returns 429 with Retry-After when it trips.
  • ✳Cache-Control tuned to the ingest cadence; reads are aggressively cacheable.
  • ✳Honest data in JSON: unrevealed stats are ranges with reveal flags, valuation bands carry a comp count and a thin flag.

How the numbers are computed and validated is on the methodology page.