RaceHooks for Race Strategy

Every stint, every stop,
structured while it happens.

The strategy record a pit wall reconstructs by hand — compound, stint age, pit loss, the lap the undercut landed — arriving as structured data during the session and queryable across every race since 1950. One API for the live call and the debrief behind it.

Everything on this page ships on Developer$99/mo, self-serve.
Stint board
Stint boardLAP 34/53 · SAFETY CAR
CarCompoundAgeStopsLast stop
NORMEDIUM14L121.4s
VERHARD3L220.9s
LECMEDIUM16L121.8s
PIAHARD3L222.6s
01 · What you build

What strategy teams build on RaceHooks

Live strategy monitoring

Compound, stint age, and new-set state per car, updated as the session runs, with pit stops and stationary time arriving as each one completes. The rival plan stops being something an engineer infers from a TV feed and becomes a field you can put a rule on.

Built from
tire.currenttire.stintspit.lane-timestiming.data

Undercut & pit-loss modelling

Pit-lane durations in milliseconds with the in and out laps attached, against lap and sector times for every car on track. That is both halves of an undercut calculation — the time lost in the lane and the time the out-lap actually returned — for your own model rather than ours.

Built from
pit.lane-timespit.stop-seriestiming.lap-historytiming.stats

Degradation & long-run analysis

Stint histories with compound and tyre age, lap-by-lap times behind them, and circuit-side air and track temperature on the same clock. Fit your own degradation curve on Friday long runs and carry it into Sunday, with practice sessions replayable on demand.

Built from
tire.historytiming.lap-historyweather.data-seriesdata/events/:eventId/pace

Post-session debrief & simulation input

Reach back for the numbers a debrief needs — stints, stops, lap times, tyre allocation, weather — for one race or for every race a circuit has held. The same shapes a live subscriber receives, so a simulator fed from the archive and a simulator fed from the session read the same fields.

Built from
historical/:season/:round/stintshistorical/:season/:round/pitstopsdata/races/:raceId/tyres
02 · What your users see

One payload, straight onto the screen

A strategy tool needs three things during a session: the rival plan as it stands, the moment something changes, and confidence that the data reached you when it happened. The payload above is the middle one; these are all three.

Pit-wall alert
# strategy
RH
racehooksAPP14:26
STOP COMPLETE — LEC
2.41s stationary, 21.84s in the lane. Fitted HARD on lap 34, stop 2 of the plan.
RH
racehooksAPP14:22
SAFETY CAR DEPLOYED
Lap 34 of 53. Pit loss collapses — the window opens for every car yet to stop.
RH
racehooksAPP14:44
RAIN ONSET
Rainfall detected at the circuit. weather.data-series carries the trend behind it.

Rules on structured fields, not on someone watching a screen. A stop completing, a flag changing, and rain starting are three different feeds and one alerting path.

Stop to strategy tool
IN THE LANEThe car crosses the pit-exit line
Pit entry, stationary time, and exit are timed on the live stream.
FEEDNormalized to a stop record
pit.lane-times carries lane and stationary milliseconds with the in and out laps and canonical driver identity; pit.stops follows with the official record.
YOUR TOOLDelivered and signed
Webhook POST or SSE frame, HMAC-SHA256 over the raw body, retried with backoff and logged.
Sub-second delivery · HMAC-signed · every attempt logged Replay a real session with /v1/simulate before you rely on it in a session.

The stationary time is the number a debrief argues about, and it is on your side of the wire while the car is still on the out-lap.

↑ all of it, from this payload
POST to your endpoint — pit.lane-times, a stop as it completes
{
  "feed": "pit.lane-times",
  "sessionId": "2026-italy_r",
  "utc": "2026-09-06T14:26:11.402Z",
  "stops": [
    {
      "driverId": "leclerc-charles", "constructorId": "ferrari", "number": "16",
      "tla": "LEC", "name": "Charles Leclerc", "team": "Ferrari",
      "stopNumber": 2,
      "pitInLap": 33,
      "pitOutLap": 34,
      "pitStopTimeMs": 2410,
      "pitLaneTimeMs": 21840
    }
  ]
}

# Signed: X-RaceHooks-Signature: sha256=…  (HMAC-SHA256 over the raw body)
# Retried with exponential backoff; every attempt logged in your console.

Example interfaces, rendered from the fields above — your product, your design system. Nothing here is a template you have to adopt.

03 · Endpoints

The endpoints that build it

Every route is Bearer-authenticated and versioned under /v1. Base URL https://api.racehooks.io/v1.

MethodPathWhat it gives you
POST/v1/webhooksSubscribe an endpoint to a feed. Filter by driver at subscription time when only a handful of cars matter to the call.
GET/v1/streamServer-Sent Events over one long-lived connection — for a pit-wall or garage tool with no public webhook host.
GET/v1/data/races/:raceId/tyresTyre allocation and compound usage for a round; pitstops on the sibling route gives the stop that ended each stint.
GET/v1/data/races/:raceId/telemetry/stintsPer-stint aggregates from the telemetry archive — the long-run shape behind a compound decision.
GET/v1/data/events/:eventId/paceSession pace across an event weekend — the Friday long-run picture a Sunday plan is built on.
GET/v1/historical/:season/:round/stintsStint plans for any round back through the archive, with pitstops, laps, and weather on sibling routes.
GET/v1/simulate/sessionsReplay a real session at any speed from 0.1× to 120× into your own tooling — a strategy tool tested on a race that already happened. Developer unlocks 10 distinct current-season sessions; the full archive is Custom.
Feeds you subscribe to
tire.currentCurrent compound per driver with tyre age and the new-set flag — the rival plan as it stands right now.
tire.stintsStint activation state and stint gap data; tire.history carries the full compound plan behind it.
pit.lane-timesPit-lane duration in milliseconds with pit-in and pit-out laps — the pit-loss half of an undercut calculation.
pit.stop-seriesThe full stop history per driver. pit.stops carries the official single-stop record when it arrives.
timing.lap-historyAccumulated per-driver lap series — the pace half of the same calculation.
timing.dataPosition, leader gap and interval, lap and sector times, every lap, every car.
weather.data-seriesAir and track temperature, humidity, and rainfall over the session, on the same clock as the laps.
race-control.messagesSafety car, VSC, and red flag — the moments that rewrite a pit-loss assumption mid-race.

Developer includes all 30 live data feeds, not just the ones above; the remaining 25 in the 55-feed catalog are the Custom analytics feeds. Every id, cadence, and payload schema is documented.

04 · Delivery

Three ways the data reaches you

Pick per integration — you can run all three against one API key. Webhook and SSE frames both meter against your monthly delivery bucket; REST reads meter against the request rate limit instead.

Webhook

Push · default

Register an HTTPS endpoint and subscribe it to feeds. RaceHooks POSTs each event as it fires — typically well within a second. Every payload is HMAC-SHA256 signed, retried with exponential backoff on failure, and every attempt is logged in your console with headers, status, and latency.

POST /v1/webhooks
{ "webhookUrl": "https://your-app.com/hook",
  "feedId": "events.race" }
Best for: Server-side apps, scoring engines, alerting.

SSE stream

Push · no public URL

Open one long-lived connection and read frames as they arrive — no public webhook server to host or expose. Each frame is `event: <feedType>` + a JSON `data:` line, with a ping every 30s so proxies hold the connection open. Auth by Bearer header, or `?token=` for browser EventSource, which cannot set headers.

GET /v1/stream?feeds=raceevent,timingdata
Authorization: Bearer $TOKEN
Best for: Local development, dashboards, browser clients.

REST

Pull · on demand

Query completed and reference data directly whenever you need it — results, standings, laps, stints, pit stops, and the segment endpoints above. Use it to backfill history, hydrate a new user, or reconcile after an outage rather than to follow a live session.

GET /v1/historical/2026/16/results
Authorization: Bearer $TOKEN
Best for: Backfill, reference data, reconciliation.
05 · Before race day

Test the whole thing on a quiet Tuesday

Simulate replays a real current-season session through your own webhooks at any speed from 0.1× to 120×. Your integration receives the exact payloads it would in a live race — real data, known result — so you can validate strategy logic end to end before a live session ever runs. Free includes 5 sessions, Developer 10; Custom replays the full archive.

How Simulate works →
Upgrade · Custom tier

What the ML layer adds for strategy

Everything above is the observed record: what every car is on, what every stop cost, what the track was doing. Custom adds the decision surfaces on top of it — our own models over the same session, so a call has a number next to it. On Custom, fourteen production ML models attach an analytics key to every payload you already receive — same feeds, same delivery, same code path.

Pit decision surfaces & window state

analytics.strategy carries per-driver pit probability, window, plan, and call; analytics.pit-window fires OPEN and URGENT by combining that probability with undercut viability. The pit-stop and pit-window-survival models behind them are two of the fourteen in the fleet.

Tyre cliff, compound choice & stop quality

analytics.tire-strategy gives next-compound probabilities for a car approaching its window, and analytics.pit-quality scores a completed stop against expected stationary time — the debrief question answered before the debrief.

True pace, stripped of the race

analytics.true-pace separates a car's real pace from fuel load, tyre age, and traffic, and timing.mini-sectors shows where in the lap the difference actually lives. The long-run read a Friday is spent building.

Weather-driven strategy alerts & team radio

weather.tire-mismatch flags a car on slicks with rain falling or imminent, weather.compound-crossover fires when conditions cross into a different compound, and radio.transcript is what the pit wall and the driver actually said, transcribed.

Talk to salesRead the model methodology →Custom also adds a delivery SLA, unlimited deliveries, and full-archive replay.

Start on the free tier.

Build and test a complete integration on historical and replayed sessions — no credit card. Go Developer when you need it live.

Start buildingCompare plans