First-party data

RUNOUT Match API

We run our own 8-ball feed. Scorers, referee tablets and the studio vision system post straight into RUNOUT, and the markets board reprices from our data — no third-party provider in the loop.

Live in the studio

Every pot, miss and foul is posted as it happens. Scores, pattern and current ball update on the board instantly.

Freeze triggers

A single call opens the 45-second standstill and publishes the freeze market with fresh prices.

Bearer secured

Write endpoints require the feed secret. Read endpoints are public and safe to embed anywhere.

Reference

Endpoints

GET/api/public/feed/matchesPublic

Fixtures, live scores, freeze state and stream details for the markets board.

?status=live&discipline=8-ball&limit=50
GET/api/public/feed/matches/:idPublic

One match plus its last 50 shot-by-shot events.

—
POST/api/public/feed/matchesBearer

Create or update a fixture. Upserts on externalRef, so the scorer can post the same payload repeatedly.

{ "externalRef": "mnl-2026-041", "title": "Manila Table 1", "playerA": "R. Cruz", "playerB": "V. Foldes", "raceTo": 7, "streamType": "youtube", "streamUrl": "https://youtu.be/..." }
POST/api/public/feed/eventsBearer

Single event or { events: [...] } up to 25. Advances the pattern, updates the score, and reprices the book.

{ "matchId": "uuid", "kind": "shot", "ballIndex": 5, "potted": true, "difficulty": 6.2 }
POST/api/public/feed/freezeBearer

Referee tablet calls FREEZE. Starts the 45-second standstill and opens the freeze market.

{ "matchId": "uuid", "trigger": "Snookered behind the 6", "difficulty": 8.4 }

Example

Post a shot from the scorer

curl -X POST https://your-domain/api/public/feed/events \
  -H "Authorization: Bearer $FEED_INGEST_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "matchId": "8f0c...e21",
    "kind": "shot",
    "player": "R. Cruz",
    "ballIndex": 8,
    "potted": true,
    "difficulty": 7.1
  }'

The feed secret is stored server-side and never shipped to the browser. Operators who prefer not to run a scorer app can post the same events by hand from the Live feed tab of the trading room.