Skip to main content

API - Control Your Scoreboard Programmatically

REST API for Keepthescore.com sports scoreboards. Control scores, timers, and game state for basketball, baseball, football and more.

New here? Start with the quick start guide before you wire anything up.

The API lives at /api/v1/sport/. It lets you read and (for some sports) update sports scoreboards from your own code.

Sports with read & write support

These sports support both reads and writes:

  • Basketball - scores, fouls, timeouts, period, possession, timers
  • Baseball - scores, balls, strikes, outs, bases, innings, timers
  • Football (American) - scores, timeouts, quarter, downs, yards, possession, foul flag, 1st & 10 reset, timers
  • Hockey - scores, shots, penalties (add/clear, with penalty timers synced to the game clock), empty net, timeouts, period
  • Soccer - scores, period, possession, FINAL, reset
  • Volleyball - scores, sets, serve
  • Pickleball, Badminton, Squash - points, sets, serve / side-out, reset (one shared set-based namespace)
  • Universal - scores, fouls, timeouts, period, possession

Basketball, baseball and football have the deepest field coverage; the others cover core scoring plus a reset. The full reference below lists the exact endpoints each sport exposes.

Read-only sports

Everything else is read-only for now. You can GET the scoreboard data, but you can't update it via the API. That covers Tennis, Softball, and the rest.

What you can do

Reads (every sport)

  • Pull the full scoreboard as JSON
  • Get current scores, timers, periods/innings, and game state
  • Read team names, colors, and logos
  • Pull all game stats and settings

Writes (the read/write sports above)

  • Set scores and game state
  • Run timers and shot clocks, including the short shot-clock reset (the FIBA 14-second rule)
  • Handle sport-specific fields: innings, outs, downs, fouls, penalties, possession, and so on
  • Increment or decrement values, with the scorekeeping logic handled for you
  • Trigger the same on-board animations as the web control panel — goal celebrations, victory dances, 3-pointer flashes — when you score, subject to the board's own animation settings (API scoring respects the same show/threshold toggles as the control panel)

Getting access

Sports scoreboards authenticate using the same token that's already in your board's URL.

Where the token lives

  • https://keepthescore.com/board/abcdefghijklm/
  • The token is abcdefghijklm. It's the 13-character code right after /board/.

Two kinds of tokens

  • Read token: the public URL token. Read-only.
  • Edit/Admin token: the admin URL token. Reads and writes.

Scoreboard URL showing the token The token is the 13-character code in your scoreboard's URL

What people build with it

Stream Deck control

Map the API to physical buttons so you can run the scoreboard without touching a laptop mid-game:

  • One-touch score updates
  • Dedicated timer buttons
  • Sport-specific actions like fouls, outs, and downs
  • Handy for streamers and scorekeepers

More here: Stream Deck Integration Guide

Custom integrations

Or roll your own:

  • Automated scoring from external data sources
  • Custom dashboards with your branding
  • Multi-board displays for tournaments
  • Integration with other sports software

Rate limits

Every endpoint is rate-limited so one client can't flood a board:

  • Limit: 5 requests per second per board
  • Cooldown: 1 minute if you exceed it
  • Response code: 429 (Too Many Requests) when you're rate-limited

Handle 429 responses in your client. This matters most if you're polling or pushing updates fast.

CORS

Every response sends access-control-allow-origin: *, so you can call the API straight from a browser.

Note: Watch the trailing slash on routes when calling from CORS. Hit the wrong variant and the request will fail.

API reference

The full reference is below, generated from the live API.

Note: The API still gets new features and tweaks based on what users ask for, so check back if something you need is missing.

General

GET /api/v1/sport/{token}/

Return all sport scoreboard data as JSON.

Path parameters

NameTypeRequiredDescription
token string yes The token of the board to retrieve.

Responses

StatusMeaningBody
204 No Content —
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Baseball

POST /api/v1/sport/{token}/baseball/away/runs/increment

Increment away team runs for baseball.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/baseball/balls/increment

Increment balls count for baseball.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/baseball/base/1/toggle

Toggle runner on first base.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/baseball/base/2/toggle

Toggle runner on second base.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/baseball/base/3/toggle

Toggle runner on third base.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/baseball/count/reset

Reset balls and strikes to zero.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/baseball/final/toggle

Toggle the FINAL state of a baseball scoreboard.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/baseball/home/runs/increment

Increment home team runs for baseball.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/baseball/outs/increment

Increment outs count for baseball.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/baseball/reset

Reset all game state to initial values for a new baseball game.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/baseball/strikes/increment

Increment strikes count for baseball.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message

Basketball

POST /api/v1/sport/{token}/basketball/away/bonus/toggle

Toggle bonus for away team in basketball.

When show_double_bonus is enabled on the board, this cycles through three states: no bonus -> bonus -> double bonus -> no bonus When show_double_bonus is disabled, this performs a simple toggle: no bonus <-> bonus If double_bonus is active and the bonus is toggled off, double_bonus is also turned off.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
204 No Content —
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —
POST /api/v1/sport/{token}/basketball/away/fouls/increment

Increment away team fouls for basketball.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/basketball/away/points/increment

Increment away team points for basketball.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/basketball/away/timeouts/increment

Increment away team timeouts for basketball.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/basketball/final/toggle

Toggle the FINAL state of a basketball scoreboard.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/basketball/home/bonus/toggle

Toggle bonus for home team in basketball.

When show_double_bonus is enabled on the board, this cycles through three states: no bonus -> bonus -> double bonus -> no bonus When show_double_bonus is disabled, this performs a simple toggle: no bonus <-> bonus If double_bonus is active and the bonus is toggled off, double_bonus is also turned off.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
204 No Content —
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —
POST /api/v1/sport/{token}/basketball/home/fouls/increment

Increment home team fouls for basketball.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/basketball/home/points/increment

Increment home team points for basketball.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/basketball/home/timeouts/increment

Increment home team timeouts for basketball.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/basketball/period/increment

Increment period for basketball.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/basketball/possession/toggle

Toggle possession between home and away teams.

When toggling possession, one team gets possession and the other loses it.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/basketball/reset

Reset all game state to initial values for a new basketball game.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message

Football

POST /api/v1/sport/{token}/football/away/possession/toggle

Toggle away team possession for football.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/football/away/score/increment

Increment away team score for football.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/football/away/timeouts/increment

Increment away team timeouts for football.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/football/downs/increment

Increment downs for football.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/football/final/toggle

Toggle the FINAL state of a football scoreboard.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/football/first-down-reset

Reset down and distance to 1st & 10 in a single atomic update.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/football/flag/toggle

Toggle the foul/flag indicator on a football scoreboard.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/football/home/possession/toggle

Toggle home team possession for football.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/football/home/score/increment

Increment home team score for football.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/football/home/timeouts/increment

Increment home team timeouts for football.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/football/quarter/increment

Increment quarter for football.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/football/reset

Reset all game state to initial values for a new football game.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/football/yards/increment

Increment yards to go for football.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message

Hockey

POST /api/v1/sport/{token}/hockey/away/empty_net/toggle

Toggle away team empty net for hockey.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/hockey/away/penalty/add

Add a penalty for away team in hockey.

Body: {duration: seconds (default 120), number: player number (default "")}

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
204 No Content —
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —
POST /api/v1/sport/{token}/hockey/away/penalty/clear

Clear the oldest penalty for away team in hockey.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
204 No Content —
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —
POST /api/v1/sport/{token}/hockey/away/score/increment

Increment away team score for hockey.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/hockey/away/shots/increment

Increment away team shots for hockey.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/hockey/away/shots_on_goal/increment

Increment away team shots on goal for hockey.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/hockey/away/timeout/toggle

Toggle away team timeout for hockey.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/hockey/final/toggle

Toggle game final status for hockey.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/hockey/home/empty_net/toggle

Toggle home team empty net for hockey.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/hockey/home/penalty/add

Add a penalty for home team in hockey.

Body: {duration: seconds (default 120), number: player number (default "")}

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
204 No Content —
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —
POST /api/v1/sport/{token}/hockey/home/penalty/clear

Clear the oldest penalty for home team in hockey.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
204 No Content —
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —
POST /api/v1/sport/{token}/hockey/home/score/increment

Increment home team score for hockey.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/hockey/home/shots/increment

Increment home team shots for hockey.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/hockey/home/shots_on_goal/increment

Increment home team shots on goal for hockey.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/hockey/home/timeout/toggle

Toggle home team timeout for hockey.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/hockey/period/increment

Increment period for hockey.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/hockey/reset

Reset all game state to initial values for a new hockey game.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message

Lacrosse

POST /api/v1/sport/{token}/lacrosse/away/empty_net/toggle

Toggle away team empty net for lacrosse.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/lacrosse/away/score/increment

Increment away team score for lacrosse.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/lacrosse/away/shots_on_goal/increment

Increment away team shots on goal for lacrosse.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/lacrosse/final/toggle

Toggle game final status for lacrosse.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/lacrosse/home/empty_net/toggle

Toggle home team empty net for lacrosse.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/lacrosse/home/score/increment

Increment home team score for lacrosse.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/lacrosse/home/shots_on_goal/increment

Increment home team shots on goal for lacrosse.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/lacrosse/period/increment

Increment period for lacrosse.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/lacrosse/reset

Reset all game state to initial values for a new lacrosse game.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message

Set-based

POST /api/v1/sport/{token}/set-based/away/score/increment

Increment the away team's points (simple or current-set, sport auto-detected).

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/set-based/away/set/increment

Increment the away team's sets won (simple mode).

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/set-based/current_set/increment

Advance to the next/previous set (expanded mode).

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/set-based/home/score/increment

Increment the home team's points (simple or current-set, sport auto-detected).

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/set-based/home/set/increment

Increment the home team's sets won (simple mode).

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/set-based/reset

Reset all game state to initial values for a new match.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/set-based/serve/toggle

Manually switch serve / side-out (pickleball-aware).

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message

Shotclock

POST /api/v1/sport/{token}/shotclock/adjust

Adjust the shot clock duration by a specified number of seconds.

Body: {"amount": <seconds>} - positive to add time, negative to subtract. The shot clock duration will not go below 0.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/shotclock/reset

Reset the shot clock to its initial duration.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/shotclock/reset-short

Reset the shot clock to its short-reset duration (e.g. the FIBA 14-second rule).

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/shotclock/toggle

Toggle the shot clock timer.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message

Soccer

POST /api/v1/sport/{token}/soccer/away/score/increment

Increment away team score for soccer.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/soccer/final/toggle

Toggle the FINAL state of a soccer scoreboard.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/soccer/home/score/increment

Increment home team score for soccer.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/soccer/period/increment

Increment period (half) for soccer.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/soccer/possession/toggle

Toggle possession between home and away teams.

When toggling possession, one team gets possession and the other loses it.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/soccer/reset

Reset all game state to initial values for a new soccer match.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message

Timer

POST /api/v1/sport/{token}/timer/adjust

Adjust the main timer duration by a specified number of seconds.

Body: {"amount": <seconds>} - positive to add time, negative to subtract. The timer duration will not go below 0.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/timer/reset

Reset the main timer to its initial duration.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/timer/toggle

Toggle the main timer for any sport scoreboard.

Sport-specific behavior: - Basketball: Also syncs the shot clock (starts/stops with main timer)

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message

Universal

POST /api/v1/sport/{token}/universal/away/fouls/increment

Increment away team fouls for universal scoreboard.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/universal/away/score/increment

Increment away team score for universal scoreboard.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/universal/away/timeouts/increment

Increment away team timeouts for universal scoreboard.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/universal/final/toggle

Toggle the FINAL state of a universal scoreboard.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/universal/home/fouls/increment

Increment home team fouls for universal scoreboard.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/universal/home/score/increment

Increment home team score for universal scoreboard.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/universal/home/timeouts/increment

Increment home team timeouts for universal scoreboard.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/universal/period/increment

Increment period for universal scoreboard.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/universal/possession/toggle

Toggle possession between home and away teams.

When toggling possession, one team gets possession and the other loses it.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message

Volleyball

POST /api/v1/sport/{token}/volleyball/away/score/increment

Increment away team score for volleyball.

In simple mode: updates away.score In expanded mode: updates away.scores_in_sets[current_set - 1] Also switches serve to away team when scoring (amount > 0).

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/volleyball/away/set/increment

Increment away team sets won (simple mode).

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/volleyball/current_set/increment

Increment current set number (expanded mode).

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/volleyball/home/score/increment

Increment home team score for volleyball.

In simple mode: updates home.score In expanded mode: updates home.scores_in_sets[current_set - 1] Also switches serve to home team when scoring (amount > 0).

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/volleyball/home/set/increment

Increment home team sets won (simple mode).

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/volleyball/reset

Reset all game state to initial values for a new volleyball game.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message
POST /api/v1/sport/{token}/volleyball/serve/toggle

Toggle serve between home and away teams.

Path parameters

NameTypeRequiredDescription
token string yes

Responses

StatusMeaningBody
200 OK MessageResponse
400 Malformed request —
403 This token does not allow the board to be edited —
404 Board not found —
429 Too many requests —
500 Internal server error —

Response body (200) — MessageResponse (JSON)

FieldTypeAlways presentDescription
message string yes Status message

Machine-readable spec

The same reference is available as OpenAPI 3 at /apispec.json, if you'd rather generate a client than read tables.

Try the endpoints in the browser

Open the interactive console

Heads up: the console sends real requests. Point it at a board you don't mind changing.

Stuck?

Got a question, a feature request, a bug, or just feedback? Email us at [email protected]. A real person reads it.