Developer Platform

Open Scoreboard API

Technical documentation for the current v1 REST API, with copyable examples, route-by-route notes, and authenticated personal API key management.

Public developer docs

Rosters

Manage individual and team rosters through one public resource while Open Scoreboard maintains the compatible backing records.

Available in v1

Choose individual or team when creating a roster. The API creates and keeps the underlying player-list or team record in sync, while callers continue to work with the unified roster ID.

Scopesrosters.read / rosters.write
Typesindividual or team
RoutesGET / POST / PATCH / DELETE

Implementation notes

  • Roster-managed backing player lists and teams remain hidden from their legacy list pages.
  • Changing a roster between individual and team after creation is not supported; create a new roster instead.
  • Use the legacy player-list and team endpoints only when integrating with pre-Rosters workflows.

Endpoints

OpenAPI
GET/rosters

List rosters

List unified individual and team rosters with optional cursor pagination.

rosters.read
Response

An array of roster resources.

curl
curl https://your-domain.example/api/v1/rosters \
  -H "Authorization: Bearer osb_test_your_key_here"
POST/rosters

Create a roster

Create a roster and its managed individual player-list or team record.

rosters.write
Response

The created roster and generated roster ID.

curl
curl -X POST https://your-domain.example/api/v1/rosters \
  -H "Authorization: Bearer osb_test_your_key_here" \
  -H "Content-Type: application/json" \
  -H "OpenScoreboard-Request-ID: demo-request-001" \
  -d '{"name":"Summer League Players","rosterType":"individual","selfRegistrationEnabled":true}'
GET/rosters/{rosterID}

Read a roster

Read one unified roster and summary details from its backing record.

rosters.read
Response

A roster resource or a 404 error.

JavaScript
const baseURL = "https://your-domain.example/api/v1";
const apiKey = "osb_test_your_key_here";

async function api(path, init = {}) {
  const response = await fetch(`${baseURL}${path}`, {
    ...init,
    headers: {
      "Authorization": `Bearer ${apiKey}`,
      "Content-Type": "application/json",
      "OpenScoreboard-Request-ID": "demo-request-001",
      ...(init.headers || {})
    }
  });

  const body = await response.json();
  if (!response.ok) {
    throw new Error(body.error?.message || "Request failed");
  }

  return body.data;
}

const roster = await api("/rosters/roster-id");
PATCH/rosters/{rosterID}

Update a roster

Update roster settings and synchronize supported backing-record fields.

rosters.write
Response

The updated roster resource.

JavaScript
const baseURL = "https://your-domain.example/api/v1";
const apiKey = "osb_test_your_key_here";

async function api(path, init = {}) {
  const response = await fetch(`${baseURL}${path}`, {
    ...init,
    headers: {
      "Authorization": `Bearer ${apiKey}`,
      "Content-Type": "application/json",
      "OpenScoreboard-Request-ID": "demo-request-001",
      ...(init.headers || {})
    }
  });

  const body = await response.json();
  if (!response.ok) {
    throw new Error(body.error?.message || "Request failed");
  }

  return body.data;
}

const roster = await api("/rosters/roster-id", {
  method: "PATCH",
  body: JSON.stringify({ name: "Updated Players", selfRegistrationEnabled: false })
});
DELETE/rosters/{rosterID}

Delete a roster

Delete the roster and its roster-managed backing record.

rosters.write
Response

A deletion confirmation.

curl
curl -X DELETE https://your-domain.example/api/v1/rosters/roster-id \
  -H "Authorization: Bearer osb_test_your_key_here"