Partner data API v1
Last updated 5 November 2026
Read-only access for SportSnip's partners to a live event's games, score changes and clips, in a published schema. Every response names its version: "schema": "sportsnip.v1". Fields are only ever added to v1; anything that would break an existing reader becomes v2.
The data comes from the rights holder's feed, so there is no public access: keys are given to partner organisations, for named events, once the rights holder's permission is recorded. Ask support@sportsnip.com.
Keys and limits
- Send
Authorization: Bearer ssk_live_…on every request. Scope:read:events. - 60 requests a minute per key. Over that: 429, with Retry-After: 60.
- 401: no key, or an unknown, revoked or expired one. 403: the key can't see that event. 400: a bad parameter.
- Live: poll score-events and clips every 10 to 30 seconds, passing the last response's next as since.
- All times are ISO 8601 in UTC. stream_s values are seconds from the start of the event's recording.
Endpoints
GET /api/v1/events
The events this key may see.
{
"schema": "sportsnip.v1",
"data": [
{ "id": "61000000-0000-0000-0000-000000000001", "name": "Asia Sevens 2026", "org_id": "10000000-0000-0000-0000-000000000001",
"starts_at": "2026-11-06T00:00:00Z", "ends_at": "2026-11-07T23:59:59Z",
"rights_holder": "Asia Rugby", "rights_confirmed_by": "Asia Rugby, email 4 Nov", "status": "live" }
]
}GET /api/v1/events/{id}
One event, with its games and the scoreboard resets.
{
"schema": "sportsnip.v1",
"data": {
"id": "61000000-0000-0000-0000-000000000001", "name": "Asia Sevens 2026", "status": "live", "rights_holder": "Asia Rugby", "...": "as above",
"games": [
{ "id": "62000000-0000-0000-0000-000000000001", "event_id": "61000000-0000-0000-0000-000000000001", "seq": 1, "home": "Fiji", "away": "Japan",
"kickoff_stream_s": 12.5, "end_stream_s": 1062.0, "final_score": { "home": 26, "away": 7 }, "source": "board" }
],
"resets": [ { "event_id": "61000000-0000-0000-0000-000000000001", "stream_s": 1100.0, "to": { "home": 0, "away": 0 } } ]
}
}GET /api/v1/events/{id}/score-events?since=<cursor>
Score changes, oldest first, 200 a page. A corrected row comes back with a new cursor, latest values and its history.
{
"schema": "sportsnip.v1",
"data": [
{ "id": "63000000-0000-0000-0000-000000000001", "game_id": "62000000-0000-0000-0000-000000000001",
"side": "home", "kind": "converted_try", "from": 0, "to": 7, "board_change_stream_s": 290.0,
"detected_at": "2026-11-06T02:05:01.200Z", "late": false, "confidence": "board",
"clip_id": "64000000-0000-0000-0000-000000000001", "corrections": [], "cursor": "1042" }
],
"next": "1042"
}GET /api/v1/events/{id}/clips?since=<cursor>&kind=<kind>
Clips, oldest first, 200 a page, each with download links valid for 15 minutes. kind is optional: score, kick, card, big_moment, replay, partner or manual.
{
"schema": "sportsnip.v1",
"data": [
{ "id": "64000000-0000-0000-0000-000000000001", "event_id": "61000000-0000-0000-0000-000000000001", "game_id": "62000000-0000-0000-0000-000000000001",
"kind": "score", "label": "Fiji try 4'", "start_stream_s": 280.0, "end_stream_s": 310.0,
"created_at": "2026-11-06T02:05:21.000Z", "ready_lag_s": 21.5,
"versions": [ { "format": "16x9", "url": "https://…signed…", "bytes": 18234567 },
{ "format": "9x16", "url": "https://…signed…", "bytes": 15120334 } ],
"cursor": "1043" }
],
"next": "1043"
}GET /api/v1/events/{id}/export.csv
Every clip as CSV, with the same columns as the clipper's events.csv, plus clip_id.
time,stream_time,kind,label,file,detected_at,clip_ready_at,detect_lag_s,cut_lag_s,clip_id 10:05:00,300.0,Try,Fiji try 4',t1.mp4,10:05:01,10:05:21,1.2,20.3,64000000-0000-0000-0000-000000000001
Schemas
JSON Schema (2020-12) for each object:
- /schemas/v1/event.json
- /schemas/v1/game.json
- /schemas/v1/score_event.json
- /schemas/v1/clip.json
- /schemas/v1/reset.json
- /schemas/v1/response.json
Score kinds: converted_try means the clipper couldn't split a try from its conversion; score is a rise it couldn't name. A score change corrected by SportSnip shows the latest values, with the earlier ones in corrections.
Coming later: webhooks (clip.ready, score_event.created, event.status), signed with HMAC.
Terms
Use of the API is covered by the Terms of Service.