Rosters
Manage individual and team rosters through one public resource while Open Scoreboard maintains the compatible backing records.
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.
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/rostersList rosters
List unified individual and team rosters with optional cursor pagination.
curl https://your-domain.example/api/v1/rosters \
-H "Authorization: Bearer osb_test_your_key_here"/rostersCreate a roster
Create a roster and its managed individual player-list or team record.
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}'/rosters/{rosterID}Read a roster
Read one unified roster and summary details from its backing record.
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");/rosters/{rosterID}Update a roster
Update roster settings and synchronize supported backing-record fields.
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 })
});/rosters/{rosterID}Delete a roster
Delete the roster and its roster-managed backing record.
curl -X DELETE https://your-domain.example/api/v1/rosters/roster-id \
-H "Authorization: Bearer osb_test_your_key_here"