This reference describes all 59 published Workspace and Creator operations and 57 data schemas. Methods, paths, required fields, limits and responses come from the same OpenAPI contract as the download.
Download the OpenAPI contract · Workflows and API keys · OpenAPI 3.0.3 / 1.0.0
Using the examples
Examples use fixed valid sample identifiers and schema-valid values. Replace workspace, organization, HUD and resource identifiers with the identifiers you actually read. Referenced teams, competitions, maps and HUD versions must exist in the target; upload required media first. For updates, use the last revision you read. Examples do not imply that sample records or permissions already exist.
The PowerShell examples read your key from SOU_WORKSPACE_API_KEY or SOU_CREATOR_API_KEY. These environment variables are local example names. Send the key only as Authorization: Bearer, never as a URL parameter. Binary examples read an existing suitable file and transfer its original bytes.
Authentication and permissions
CreatorKey
Separate organization-bound creator key from /account/api-keys. Requires current explicit Publisher permission on every operation. Never a workspace or desktop key.
{
"type": "http",
"scheme": "bearer",
"bearerFormat": "sou_hud_\u003Cid\u003E_\u003Csecret\u003E",
"description": "Separate organization-bound creator key from /account/api-keys. Requires current explicit Publisher permission on every operation. Never a workspace or desktop key."
}WorkspaceKey
Workspace-bound API key from your account, not an OAuth desktop token. Send only in Authorization; never in a URL.
{
"type": "http",
"scheme": "bearer",
"bearerFormat": "sou_ws_\u003Cid\u003E_\u003Csecret\u003E",
"description": "Workspace-bound API key from your account, not an OAuth desktop token. Send only in Authorization; never in a URL."
}Revisions, limits and errors
Workspace writes compare expectedRevision with stored state. New resources start with expectedRevision: 0. Each successful change increments revision; tombstones remain available. Changes through /changes are atomic and validate every revision and reference before committing. HUD details and their media share a separate details revision.
The shared limit is 120 requests per minute per key owner across their keys. For 429, honor Retry-After (60 seconds). For 409, reload and reconcile current state. After a lost response or 500, a write may already have committed: inspect state, revision, or package version and SHA-256 before writing again. Errors without a response schema do not promise a JSON error object.
All operations
GET /api/v1/integration/workspaces/{workspace}/snapshot
operationId: getWorkspaceSnapshot
Read all typed collections, including tombstones.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/snapshot' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Collections from one workspace snapshot. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/WorkspaceSnapshot"
}Complete dependent schemas: WorkspaceSnapshot
{
"teams": [],
"players": [],
"competitions": [],
"seasons": [],
"sections": [],
"maps": [],
"mapPools": [],
"matches": [],
"startupConfigs": [],
"panelTemplates": []
}POST /api/v1/integration/workspaces/{workspace}/changes
operationId: applyWorkspaceChanges
Atomically apply changes grouped by entity type.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
At least one change is required across the named collections. At most 5000 changes in total. All identities must be unique within their collection. Revisions and references must all match; no partial commit. Deletions use deleted:true and omitted or null data.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" |
Request
Request body required: yes.
application/json
{
"$ref": "#/components/schemas/WorkspaceChanges"
}Complete dependent schemas: WorkspaceChanges
{
"teams": [
{
"id": "team-a",
"expectedRevision": 0,
"data": {
"id": "team-a",
"name": "Example team"
}
}
]
}$body = @'
{
"teams": [
{
"id": "team-a",
"expectedRevision": 0,
"data": {
"id": "team-a",
"name": "Example team"
}
}
]
}
'@
Invoke-RestMethod -Method Post -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/changes' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" } -ContentType 'application/json' -Body $bodyResponses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Full typed snapshot after commit. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
409 | Revision or database conflict; reload and reconcile. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/WorkspaceSnapshot"
}Complete dependent schemas: WorkspaceSnapshot
{
"teams": [
{
"id": "team-a",
"revision": 1,
"deleted": false,
"data": {
"id": "team-a",
"name": "Example team"
}
}
],
"players": [],
"competitions": [],
"seasons": [],
"sections": [],
"maps": [],
"mapPools": [],
"matches": [],
"startupConfigs": [],
"panelTemplates": []
}POST /api/v1/integration/workspaces/{workspace}/media/check
operationId: checkWorkspaceMedia
Find missing content-addressed images without changing data.
Authentication: WorkspaceKey. A read-only workspace key is sufficient; the account currently needs Editor or Manager access.
Requires the account to currently have Editor/Manager role; a read-only key is sufficient. 400000 body bytes, at most 5000 distinct names.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" |
Request
Request body required: yes.
application/json
{
"$ref": "#/components/schemas/CheckMedia"
}Complete dependent schemas: CheckMedia
{
"names": [
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.png"
]
}$body = @'
{
"names": [
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.png"
]
}
'@
Invoke-RestMethod -Method Post -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/media/check' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" } -ContentType 'application/json' -Body $bodyResponses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Only missing names. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/MediaPresence"
}Complete dependent schemas: MediaPresence
{
"missing": [
"example"
]
}GET /api/v1/integration/workspaces/{workspace}/media/{name}
operationId: downloadWorkspaceMedia
Download one workspace image.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
name | path | yes | {"type":"string","pattern":"^[a-f0-9]{64}\\.(png|jpg|gif)$"} | "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.png" |
Request
No request body.
Invoke-WebRequest -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/media/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.png' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" } -OutFile './download.bin'Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Image bytes. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Image not found. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/octet-stream
{
"type": "string",
"format": "binary"
}The response contains original binary bytes. Save them to a file using the example call; the contract does not define a JSON body.
PUT /api/v1/integration/workspaces/{workspace}/media/{name}
operationId: uploadWorkspaceMedia
Upload an image before referencing it in entities.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires read/write key and Editor/Manager. Maximum 4 MiB. Name is lowercase SHA-256 of exact bytes plus .png/.jpg/.gif. Use the document value /cast-media/{name}. Existing identical hashes may be reused.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
name | path | yes | {"type":"string","pattern":"^[a-f0-9]{64}\\.(png|jpg|gif)$"} | "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.png" |
Request
Request body required: yes.
application/octet-stream
{
"type": "string",
"format": "binary"
}$file = './image.png'
$name = (Get-FileHash -LiteralPath $file -Algorithm SHA256).Hash.ToLowerInvariant() + '.png'
Invoke-WebRequest -Method Put -Uri ( 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/media/' + $name ) -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" } -ContentType 'application/octet-stream' -InFile $fileResponses
| HTTP | Meaning | Response headers |
|---|---|---|
204 | Stored in this workspace. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
GET /api/v1/integration/workspaces/{workspace}/teams
operationId: listTeams
List teams including tombstones.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/teams' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed collection with per-entity revisions. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"type": "array",
"items": {
"$ref": "#/components/schemas/TeamResource"
}
}Complete dependent schemas: TeamResource
[
{
"id": "team-a",
"revision": 1,
"deleted": false,
"data": {
"id": "team-a",
"name": "Example team"
}
}
]GET /api/v1/integration/workspaces/{workspace}/teams/{id}
operationId: getTeam
Read one team or its tombstone.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "team-a" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/teams/team-a' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/TeamResource"
}Complete dependent schemas: TeamResource
{
"id": "team-a",
"revision": 1,
"deleted": false,
"data": {
"id": "team-a",
"name": "Example team"
}
}PUT /api/v1/integration/workspaces/{workspace}/teams/{id}
operationId: writeTeam
Create, replace or restore one team.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. expectedRevision is 0 for creation, otherwise the last read revision (including tombstones). data replaces the entity; its identity must match the path. Omitted optional fields take desktop defaults. Maximum 8 MiB request and 256000 serialized data characters.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "team-a" |
Request
Request body required: yes.
application/json
{
"$ref": "#/components/schemas/WriteTeam"
}Complete dependent schemas: WriteTeam
{
"expectedRevision": 0,
"data": {
"id": "team-a",
"name": "Example team"
}
}$body = @'
{
"expectedRevision": 0,
"data": {
"id": "team-a",
"name": "Example team"
}
}
'@
Invoke-RestMethod -Method Put -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/teams/team-a' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" } -ContentType 'application/json' -Body $bodyResponses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Committed typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
409 | Stale revision or database conflict; reload and reconcile. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/TeamResource"
}Complete dependent schemas: TeamResource
{
"id": "team-a",
"revision": 1,
"deleted": false,
"data": {
"id": "team-a",
"name": "Example team"
}
}DELETE /api/v1/integration/workspaces/{workspace}/teams/{id}
operationId: deleteTeam
Mark one team deleted; retain its revision.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. Referenced entities cannot be deleted without removing dependencies; use /changes for dependent changes. No physical deletion.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "team-a" | |
expectedRevision | query | yes | {"type":"integer","format":"int64","minimum":0} | 0 |
Request
No request body.
Invoke-RestMethod -Method Delete -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/teams/team-a?expectedRevision=1' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Tombstone with null data and incremented revision. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
409 | Stale revision or database conflict. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/TeamResource"
}Complete dependent schemas: TeamResource
{
"id": "team-a",
"revision": 2,
"deleted": true,
"data": null
}GET /api/v1/integration/workspaces/{workspace}/players
operationId: listPlayers
List players including tombstones.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/players' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed collection with per-entity revisions. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayerResource"
}
}Complete dependent schemas: PlayerResource
[
{
"id": "76561198000000001",
"revision": 1,
"deleted": false,
"data": {
"steamId": "76561198000000001",
"name": "Example player"
}
}
]GET /api/v1/integration/workspaces/{workspace}/players/{id}
operationId: getPlayer
Read one player or its tombstone.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","pattern":"^[0-9]{17}$"} | "76561198000000001" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/players/76561198000000001' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/PlayerResource"
}Complete dependent schemas: PlayerResource
{
"id": "76561198000000001",
"revision": 1,
"deleted": false,
"data": {
"steamId": "76561198000000001",
"name": "Example player"
}
}PUT /api/v1/integration/workspaces/{workspace}/players/{id}
operationId: writePlayer
Create, replace or restore one player.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. expectedRevision is 0 for creation, otherwise the last read revision (including tombstones). data replaces the entity; its identity must match the path. Omitted optional fields take desktop defaults. Maximum 8 MiB request and 256000 serialized data characters.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","pattern":"^[0-9]{17}$"} | "76561198000000001" |
Request
Request body required: yes.
application/json
{
"$ref": "#/components/schemas/WritePlayer"
}Complete dependent schemas: WritePlayer
{
"expectedRevision": 0,
"data": {
"steamId": "76561198000000001",
"name": "Example player"
}
}$body = @'
{
"expectedRevision": 0,
"data": {
"steamId": "76561198000000001",
"name": "Example player"
}
}
'@
Invoke-RestMethod -Method Put -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/players/76561198000000001' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" } -ContentType 'application/json' -Body $bodyResponses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Committed typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
409 | Stale revision or database conflict; reload and reconcile. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/PlayerResource"
}Complete dependent schemas: PlayerResource
{
"id": "76561198000000001",
"revision": 1,
"deleted": false,
"data": {
"steamId": "76561198000000001",
"name": "Example player"
}
}DELETE /api/v1/integration/workspaces/{workspace}/players/{id}
operationId: deletePlayer
Mark one player deleted; retain its revision.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. Referenced entities cannot be deleted without removing dependencies; use /changes for dependent changes. No physical deletion.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","pattern":"^[0-9]{17}$"} | "76561198000000001" | |
expectedRevision | query | yes | {"type":"integer","format":"int64","minimum":0} | 0 |
Request
No request body.
Invoke-RestMethod -Method Delete -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/players/76561198000000001?expectedRevision=1' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Tombstone with null data and incremented revision. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
409 | Stale revision or database conflict. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/PlayerResource"
}Complete dependent schemas: PlayerResource
{
"id": "76561198000000001",
"revision": 2,
"deleted": true,
"data": null
}GET /api/v1/integration/workspaces/{workspace}/competitions
operationId: listCompetitions
List competitions including tombstones.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/competitions' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed collection with per-entity revisions. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"type": "array",
"items": {
"$ref": "#/components/schemas/CompetitionResource"
}
}Complete dependent schemas: CompetitionResource
[
{
"id": "competition-2026",
"revision": 1,
"deleted": false,
"data": {
"id": "competition-2026",
"name": "Example competition"
}
}
]GET /api/v1/integration/workspaces/{workspace}/competitions/{id}
operationId: getCompetition
Read one competition or its tombstone.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "competition-2026" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/competitions/competition-2026' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/CompetitionResource"
}Complete dependent schemas: CompetitionResource
{
"id": "competition-2026",
"revision": 1,
"deleted": false,
"data": {
"id": "competition-2026",
"name": "Example competition"
}
}PUT /api/v1/integration/workspaces/{workspace}/competitions/{id}
operationId: writeCompetition
Create, replace or restore one competition.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. expectedRevision is 0 for creation, otherwise the last read revision (including tombstones). data replaces the entity; its identity must match the path. Omitted optional fields take desktop defaults. Maximum 8 MiB request and 256000 serialized data characters.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "competition-2026" |
Request
Request body required: yes.
application/json
{
"$ref": "#/components/schemas/WriteCompetition"
}Complete dependent schemas: WriteCompetition
{
"expectedRevision": 0,
"data": {
"id": "competition-2026",
"name": "Example competition"
}
}$body = @'
{
"expectedRevision": 0,
"data": {
"id": "competition-2026",
"name": "Example competition"
}
}
'@
Invoke-RestMethod -Method Put -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/competitions/competition-2026' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" } -ContentType 'application/json' -Body $bodyResponses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Committed typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
409 | Stale revision or database conflict; reload and reconcile. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/CompetitionResource"
}Complete dependent schemas: CompetitionResource
{
"id": "competition-2026",
"revision": 1,
"deleted": false,
"data": {
"id": "competition-2026",
"name": "Example competition"
}
}DELETE /api/v1/integration/workspaces/{workspace}/competitions/{id}
operationId: deleteCompetition
Mark one competition deleted; retain its revision.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. Referenced entities cannot be deleted without removing dependencies; use /changes for dependent changes. No physical deletion.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "competition-2026" | |
expectedRevision | query | yes | {"type":"integer","format":"int64","minimum":0} | 0 |
Request
No request body.
Invoke-RestMethod -Method Delete -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/competitions/competition-2026?expectedRevision=1' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Tombstone with null data and incremented revision. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
409 | Stale revision or database conflict. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/CompetitionResource"
}Complete dependent schemas: CompetitionResource
{
"id": "competition-2026",
"revision": 2,
"deleted": true,
"data": null
}GET /api/v1/integration/workspaces/{workspace}/seasons
operationId: listSeasons
List seasons including tombstones.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/seasons' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed collection with per-entity revisions. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"type": "array",
"items": {
"$ref": "#/components/schemas/SeasonResource"
}
}Complete dependent schemas: SeasonResource
[
{
"id": "season-2026",
"revision": 1,
"deleted": false,
"data": {
"id": "season-2026",
"name": "Example season",
"competitionId": "competition-2026"
}
}
]GET /api/v1/integration/workspaces/{workspace}/seasons/{id}
operationId: getSeason
Read one season or its tombstone.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "season-2026" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/seasons/season-2026' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/SeasonResource"
}Complete dependent schemas: SeasonResource
{
"id": "season-2026",
"revision": 1,
"deleted": false,
"data": {
"id": "season-2026",
"name": "Example season",
"competitionId": "competition-2026"
}
}PUT /api/v1/integration/workspaces/{workspace}/seasons/{id}
operationId: writeSeason
Create, replace or restore one season.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. expectedRevision is 0 for creation, otherwise the last read revision (including tombstones). data replaces the entity; its identity must match the path. Omitted optional fields take desktop defaults. Maximum 8 MiB request and 256000 serialized data characters.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "season-2026" |
Request
Request body required: yes.
application/json
{
"$ref": "#/components/schemas/WriteSeason"
}Complete dependent schemas: WriteSeason
{
"expectedRevision": 0,
"data": {
"id": "season-2026",
"name": "Example season",
"competitionId": "competition-2026"
}
}$body = @'
{
"expectedRevision": 0,
"data": {
"id": "season-2026",
"name": "Example season",
"competitionId": "competition-2026"
}
}
'@
Invoke-RestMethod -Method Put -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/seasons/season-2026' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" } -ContentType 'application/json' -Body $bodyResponses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Committed typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
409 | Stale revision or database conflict; reload and reconcile. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/SeasonResource"
}Complete dependent schemas: SeasonResource
{
"id": "season-2026",
"revision": 1,
"deleted": false,
"data": {
"id": "season-2026",
"name": "Example season",
"competitionId": "competition-2026"
}
}DELETE /api/v1/integration/workspaces/{workspace}/seasons/{id}
operationId: deleteSeason
Mark one season deleted; retain its revision.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. Referenced entities cannot be deleted without removing dependencies; use /changes for dependent changes. No physical deletion.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "season-2026" | |
expectedRevision | query | yes | {"type":"integer","format":"int64","minimum":0} | 0 |
Request
No request body.
Invoke-RestMethod -Method Delete -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/seasons/season-2026?expectedRevision=1' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Tombstone with null data and incremented revision. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
409 | Stale revision or database conflict. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/SeasonResource"
}Complete dependent schemas: SeasonResource
{
"id": "season-2026",
"revision": 2,
"deleted": true,
"data": null
}GET /api/v1/integration/workspaces/{workspace}/sections
operationId: listSections
List sections including tombstones.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/sections' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed collection with per-entity revisions. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"type": "array",
"items": {
"$ref": "#/components/schemas/SectionResource"
}
}Complete dependent schemas: SectionResource
[
{
"id": "section-2026",
"revision": 1,
"deleted": false,
"data": {
"id": "section-2026",
"name": "Example section",
"competitionId": "competition-2026"
}
}
]GET /api/v1/integration/workspaces/{workspace}/sections/{id}
operationId: getSection
Read one section or its tombstone.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "section-2026" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/sections/section-2026' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/SectionResource"
}Complete dependent schemas: SectionResource
{
"id": "section-2026",
"revision": 1,
"deleted": false,
"data": {
"id": "section-2026",
"name": "Example section",
"competitionId": "competition-2026"
}
}PUT /api/v1/integration/workspaces/{workspace}/sections/{id}
operationId: writeSection
Create, replace or restore one section.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. expectedRevision is 0 for creation, otherwise the last read revision (including tombstones). data replaces the entity; its identity must match the path. Omitted optional fields take desktop defaults. Maximum 8 MiB request and 256000 serialized data characters.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "section-2026" |
Request
Request body required: yes.
application/json
{
"$ref": "#/components/schemas/WriteSection"
}Complete dependent schemas: WriteSection
{
"expectedRevision": 0,
"data": {
"id": "section-2026",
"name": "Example section",
"competitionId": "competition-2026"
}
}$body = @'
{
"expectedRevision": 0,
"data": {
"id": "section-2026",
"name": "Example section",
"competitionId": "competition-2026"
}
}
'@
Invoke-RestMethod -Method Put -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/sections/section-2026' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" } -ContentType 'application/json' -Body $bodyResponses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Committed typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
409 | Stale revision or database conflict; reload and reconcile. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/SectionResource"
}Complete dependent schemas: SectionResource
{
"id": "section-2026",
"revision": 1,
"deleted": false,
"data": {
"id": "section-2026",
"name": "Example section",
"competitionId": "competition-2026"
}
}DELETE /api/v1/integration/workspaces/{workspace}/sections/{id}
operationId: deleteSection
Mark one section deleted; retain its revision.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. Referenced entities cannot be deleted without removing dependencies; use /changes for dependent changes. No physical deletion.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "section-2026" | |
expectedRevision | query | yes | {"type":"integer","format":"int64","minimum":0} | 0 |
Request
No request body.
Invoke-RestMethod -Method Delete -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/sections/section-2026?expectedRevision=1' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Tombstone with null data and incremented revision. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
409 | Stale revision or database conflict. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/SectionResource"
}Complete dependent schemas: SectionResource
{
"id": "section-2026",
"revision": 2,
"deleted": true,
"data": null
}GET /api/v1/integration/workspaces/{workspace}/maps
operationId: listMaps
List maps including tombstones.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/maps' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed collection with per-entity revisions. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"type": "array",
"items": {
"$ref": "#/components/schemas/MapResource"
}
}Complete dependent schemas: MapResource
[
{
"id": "map-dust2",
"revision": 1,
"deleted": false,
"data": {
"id": "map-dust2",
"name": "Example map",
"gameName": "de_dust2"
}
}
]GET /api/v1/integration/workspaces/{workspace}/maps/{id}
operationId: getMap
Read one map or its tombstone.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "map-dust2" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/maps/map-dust2' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/MapResource"
}Complete dependent schemas: MapResource
{
"id": "map-dust2",
"revision": 1,
"deleted": false,
"data": {
"id": "map-dust2",
"name": "Example map",
"gameName": "de_dust2"
}
}PUT /api/v1/integration/workspaces/{workspace}/maps/{id}
operationId: writeMap
Create, replace or restore one map.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. expectedRevision is 0 for creation, otherwise the last read revision (including tombstones). data replaces the entity; its identity must match the path. Omitted optional fields take desktop defaults. Maximum 8 MiB request and 256000 serialized data characters.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "map-dust2" |
Request
Request body required: yes.
application/json
{
"$ref": "#/components/schemas/WriteMap"
}Complete dependent schemas: WriteMap
{
"expectedRevision": 0,
"data": {
"id": "map-dust2",
"name": "Example map",
"gameName": "de_dust2"
}
}$body = @'
{
"expectedRevision": 0,
"data": {
"id": "map-dust2",
"name": "Example map",
"gameName": "de_dust2"
}
}
'@
Invoke-RestMethod -Method Put -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/maps/map-dust2' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" } -ContentType 'application/json' -Body $bodyResponses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Committed typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
409 | Stale revision or database conflict; reload and reconcile. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/MapResource"
}Complete dependent schemas: MapResource
{
"id": "map-dust2",
"revision": 1,
"deleted": false,
"data": {
"id": "map-dust2",
"name": "Example map",
"gameName": "de_dust2"
}
}DELETE /api/v1/integration/workspaces/{workspace}/maps/{id}
operationId: deleteMap
Mark one map deleted; retain its revision.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. Referenced entities cannot be deleted without removing dependencies; use /changes for dependent changes. No physical deletion.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "map-dust2" | |
expectedRevision | query | yes | {"type":"integer","format":"int64","minimum":0} | 0 |
Request
No request body.
Invoke-RestMethod -Method Delete -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/maps/map-dust2?expectedRevision=1' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Tombstone with null data and incremented revision. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
409 | Stale revision or database conflict. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/MapResource"
}Complete dependent schemas: MapResource
{
"id": "map-dust2",
"revision": 2,
"deleted": true,
"data": null
}GET /api/v1/integration/workspaces/{workspace}/map-pools
operationId: listMapPools
List map-pools including tombstones.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/map-pools' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed collection with per-entity revisions. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"type": "array",
"items": {
"$ref": "#/components/schemas/MapPoolResource"
}
}Complete dependent schemas: MapPoolResource
[
{
"id": "pool-main",
"revision": 1,
"deleted": false,
"data": {
"id": "pool-main",
"name": "Example mapPool"
}
}
]GET /api/v1/integration/workspaces/{workspace}/map-pools/{id}
operationId: getMapPool
Read one mapPool or its tombstone.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "pool-main" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/map-pools/pool-main' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/MapPoolResource"
}Complete dependent schemas: MapPoolResource
{
"id": "pool-main",
"revision": 1,
"deleted": false,
"data": {
"id": "pool-main",
"name": "Example mapPool"
}
}PUT /api/v1/integration/workspaces/{workspace}/map-pools/{id}
operationId: writeMapPool
Create, replace or restore one mapPool.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. expectedRevision is 0 for creation, otherwise the last read revision (including tombstones). data replaces the entity; its identity must match the path. Omitted optional fields take desktop defaults. Maximum 8 MiB request and 256000 serialized data characters.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "pool-main" |
Request
Request body required: yes.
application/json
{
"$ref": "#/components/schemas/WriteMapPool"
}Complete dependent schemas: WriteMapPool
{
"expectedRevision": 0,
"data": {
"id": "pool-main",
"name": "Example mapPool"
}
}$body = @'
{
"expectedRevision": 0,
"data": {
"id": "pool-main",
"name": "Example mapPool"
}
}
'@
Invoke-RestMethod -Method Put -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/map-pools/pool-main' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" } -ContentType 'application/json' -Body $bodyResponses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Committed typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
409 | Stale revision or database conflict; reload and reconcile. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/MapPoolResource"
}Complete dependent schemas: MapPoolResource
{
"id": "pool-main",
"revision": 1,
"deleted": false,
"data": {
"id": "pool-main",
"name": "Example mapPool"
}
}DELETE /api/v1/integration/workspaces/{workspace}/map-pools/{id}
operationId: deleteMapPool
Mark one mapPool deleted; retain its revision.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. Referenced entities cannot be deleted without removing dependencies; use /changes for dependent changes. No physical deletion.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "pool-main" | |
expectedRevision | query | yes | {"type":"integer","format":"int64","minimum":0} | 0 |
Request
No request body.
Invoke-RestMethod -Method Delete -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/map-pools/pool-main?expectedRevision=1' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Tombstone with null data and incremented revision. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
409 | Stale revision or database conflict. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/MapPoolResource"
}Complete dependent schemas: MapPoolResource
{
"id": "pool-main",
"revision": 2,
"deleted": true,
"data": null
}GET /api/v1/integration/workspaces/{workspace}/matches
operationId: listMatchs
List matches including tombstones.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/matches' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed collection with per-entity revisions. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"type": "array",
"items": {
"$ref": "#/components/schemas/MatchResource"
}
}Complete dependent schemas: MatchResource
[
{
"id": "match-2026",
"revision": 1,
"deleted": false,
"data": {
"id": "match-2026",
"name": "Example match",
"teamA": "team-a",
"teamB": "team-b"
}
}
]GET /api/v1/integration/workspaces/{workspace}/matches/{id}
operationId: getMatch
Read one match or its tombstone.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "match-2026" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/matches/match-2026' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/MatchResource"
}Complete dependent schemas: MatchResource
{
"id": "match-2026",
"revision": 1,
"deleted": false,
"data": {
"id": "match-2026",
"name": "Example match",
"teamA": "team-a",
"teamB": "team-b"
}
}PUT /api/v1/integration/workspaces/{workspace}/matches/{id}
operationId: writeMatch
Create, replace or restore one match.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. expectedRevision is 0 for creation, otherwise the last read revision (including tombstones). data replaces the entity; its identity must match the path. Omitted optional fields take desktop defaults. Maximum 8 MiB request and 256000 serialized data characters.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "match-2026" |
Request
Request body required: yes.
application/json
{
"$ref": "#/components/schemas/WriteMatch"
}Complete dependent schemas: WriteMatch
{
"expectedRevision": 0,
"data": {
"id": "match-2026",
"name": "Example match",
"teamA": "team-a",
"teamB": "team-b"
}
}$body = @'
{
"expectedRevision": 0,
"data": {
"id": "match-2026",
"name": "Example match",
"teamA": "team-a",
"teamB": "team-b"
}
}
'@
Invoke-RestMethod -Method Put -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/matches/match-2026' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" } -ContentType 'application/json' -Body $bodyResponses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Committed typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
409 | Stale revision or database conflict; reload and reconcile. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/MatchResource"
}Complete dependent schemas: MatchResource
{
"id": "match-2026",
"revision": 1,
"deleted": false,
"data": {
"id": "match-2026",
"name": "Example match",
"teamA": "team-a",
"teamB": "team-b"
}
}DELETE /api/v1/integration/workspaces/{workspace}/matches/{id}
operationId: deleteMatch
Mark one match deleted; retain its revision.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. Referenced entities cannot be deleted without removing dependencies; use /changes for dependent changes. No physical deletion.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "match-2026" | |
expectedRevision | query | yes | {"type":"integer","format":"int64","minimum":0} | 0 |
Request
No request body.
Invoke-RestMethod -Method Delete -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/matches/match-2026?expectedRevision=1' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Tombstone with null data and incremented revision. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
409 | Stale revision or database conflict. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/MatchResource"
}Complete dependent schemas: MatchResource
{
"id": "match-2026",
"revision": 2,
"deleted": true,
"data": null
}GET /api/v1/integration/workspaces/{workspace}/startup-configs
operationId: listStartupConfigs
List startup-configs including tombstones.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/startup-configs' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed collection with per-entity revisions. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"type": "array",
"items": {
"$ref": "#/components/schemas/StartupConfigResource"
}
}Complete dependent schemas: StartupConfigResource
[
{
"id": "config-demo",
"revision": 1,
"deleted": false,
"data": {
"id": "config-demo",
"name": "Example startupConfig",
"content": "echo sOU"
}
}
]GET /api/v1/integration/workspaces/{workspace}/startup-configs/{id}
operationId: getStartupConfig
Read one startupConfig or its tombstone.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "config-demo" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/startup-configs/config-demo' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/StartupConfigResource"
}Complete dependent schemas: StartupConfigResource
{
"id": "config-demo",
"revision": 1,
"deleted": false,
"data": {
"id": "config-demo",
"name": "Example startupConfig",
"content": "echo sOU"
}
}PUT /api/v1/integration/workspaces/{workspace}/startup-configs/{id}
operationId: writeStartupConfig
Create, replace or restore one startupConfig.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. expectedRevision is 0 for creation, otherwise the last read revision (including tombstones). data replaces the entity; its identity must match the path. Omitted optional fields take desktop defaults. Maximum 8 MiB request and 256000 serialized data characters.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "config-demo" |
Request
Request body required: yes.
application/json
{
"$ref": "#/components/schemas/WriteStartupConfig"
}Complete dependent schemas: WriteStartupConfig
{
"expectedRevision": 0,
"data": {
"id": "config-demo",
"name": "Example startupConfig",
"content": "echo sOU"
}
}$body = @'
{
"expectedRevision": 0,
"data": {
"id": "config-demo",
"name": "Example startupConfig",
"content": "echo sOU"
}
}
'@
Invoke-RestMethod -Method Put -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/startup-configs/config-demo' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" } -ContentType 'application/json' -Body $bodyResponses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Committed typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
409 | Stale revision or database conflict; reload and reconcile. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/StartupConfigResource"
}Complete dependent schemas: StartupConfigResource
{
"id": "config-demo",
"revision": 1,
"deleted": false,
"data": {
"id": "config-demo",
"name": "Example startupConfig",
"content": "echo sOU"
}
}DELETE /api/v1/integration/workspaces/{workspace}/startup-configs/{id}
operationId: deleteStartupConfig
Mark one startupConfig deleted; retain its revision.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. Referenced entities cannot be deleted without removing dependencies; use /changes for dependent changes. No physical deletion.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "config-demo" | |
expectedRevision | query | yes | {"type":"integer","format":"int64","minimum":0} | 0 |
Request
No request body.
Invoke-RestMethod -Method Delete -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/startup-configs/config-demo?expectedRevision=1' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Tombstone with null data and incremented revision. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
409 | Stale revision or database conflict. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/StartupConfigResource"
}Complete dependent schemas: StartupConfigResource
{
"id": "config-demo",
"revision": 2,
"deleted": true,
"data": null
}GET /api/v1/integration/workspaces/{workspace}/panel-templates
operationId: listPanelTemplates
List panel-templates including tombstones.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/panel-templates' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed collection with per-entity revisions. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"type": "array",
"items": {
"$ref": "#/components/schemas/PanelTemplateResource"
}
}Complete dependent schemas: PanelTemplateResource
[
{
"id": "template-main",
"revision": 1,
"deleted": false,
"data": {
"id": "template-main",
"hudId": "example-hud",
"version": "1.0.0",
"values": {}
}
}
]GET /api/v1/integration/workspaces/{workspace}/panel-templates/{id}
operationId: getPanelTemplate
Read one panelTemplate or its tombstone.
Authentication: WorkspaceKey. Requires a read-only workspace key and a current role in the bound workspace.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "template-main" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/panel-templates/template-main' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/PanelTemplateResource"
}Complete dependent schemas: PanelTemplateResource
{
"id": "template-main",
"revision": 1,
"deleted": false,
"data": {
"id": "template-main",
"hudId": "example-hud",
"version": "1.0.0",
"values": {}
}
}PUT /api/v1/integration/workspaces/{workspace}/panel-templates/{id}
operationId: writePanelTemplate
Create, replace or restore one panelTemplate.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. expectedRevision is 0 for creation, otherwise the last read revision (including tombstones). data replaces the entity; its identity must match the path. Omitted optional fields take desktop defaults. Maximum 8 MiB request and 256000 serialized data characters.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "template-main" |
Request
Request body required: yes.
application/json
{
"$ref": "#/components/schemas/WritePanelTemplate"
}Complete dependent schemas: WritePanelTemplate
{
"expectedRevision": 0,
"data": {
"id": "template-main",
"hudId": "example-hud",
"version": "1.0.0",
"values": {}
}
}$body = @'
{
"expectedRevision": 0,
"data": {
"id": "template-main",
"hudId": "example-hud",
"version": "1.0.0",
"values": {}
}
}
'@
Invoke-RestMethod -Method Put -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/panel-templates/template-main' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" } -ContentType 'application/json' -Body $bodyResponses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Committed typed resource. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
409 | Stale revision or database conflict; reload and reconcile. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/PanelTemplateResource"
}Complete dependent schemas: PanelTemplateResource
{
"id": "template-main",
"revision": 1,
"deleted": false,
"data": {
"id": "template-main",
"hudId": "example-hud",
"version": "1.0.0",
"values": {}
}
}DELETE /api/v1/integration/workspaces/{workspace}/panel-templates/{id}
operationId: deletePanelTemplate
Mark one panelTemplate deleted; retain its revision.
Authentication: WorkspaceKey. Requires workspace-key write scope and current Editor or Manager access to the bound workspace.
Requires write scope and Editor/Manager role. Referenced entities cannot be deleted without removing dependencies; use /changes for dependent changes. No physical deletion.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" | |
id | path | yes | {"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"} | "template-main" | |
expectedRevision | query | yes | {"type":"integer","format":"int64","minimum":0} | 0 |
Request
No request body.
Invoke-RestMethod -Method Delete -Uri 'https://www.getsou.app/api/v1/integration/workspaces/11111111-1111-4111-8111-111111111111/panel-templates/template-main?expectedRevision=1' -Headers @{ Authorization = "Bearer $env:SOU_WORKSPACE_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Tombstone with null data and incremented revision. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong workspace, insufficient key scope, or current workspace role. | — |
404 | Identity has never existed. | — |
409 | Stale revision or database conflict. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/PanelTemplateResource"
}Complete dependent schemas: PanelTemplateResource
{
"id": "template-main",
"revision": 2,
"deleted": true,
"data": null
}GET /api/v1/integration/organizations/{organization}/huds
operationId: listCreatorHuds
List HUDs owned by the bound organization.
Authentication: CreatorKey. Requires current explicit Publisher permission for the bound organization; a read-only creator key is sufficient.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
organization | path | yes | {"type":"string","format":"uuid"} | "22222222-2222-4222-8222-222222222222" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/organizations/22222222-2222-4222-8222-222222222222/huds' -Headers @{ Authorization = "Bearer $env:SOU_CREATOR_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Organization-scoped creator resource. | — |
400 | Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong organization, insufficient creator key scope or missing current explicit Publisher permission. | — |
404 | HUD, media or release not found within the bound organization. | — |
409 | Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying. | — |
413 | Request body exceeds the endpoint limit. | — |
415 | Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"type": "array",
"items": {
"$ref": "#/components/schemas/CreatorHud"
}
}Complete dependent schemas: CreatorHud
[
{
"id": "33333333-3333-4333-8333-333333333333",
"organizationId": "22222222-2222-4222-8222-222222222222",
"packageId": null,
"name": "Example HUD",
"visibility": "private",
"listed": false
}
]POST /api/v1/integration/organizations/{organization}/huds
operationId: createCreatorHud
Create a HUD entry in the bound organization.
Authentication: CreatorKey. Requires creator-key write scope and current explicit Publisher permission for the bound organization.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
organization | path | yes | {"type":"string","format":"uuid"} | "22222222-2222-4222-8222-222222222222" |
Request
Request body required: yes.
application/json
{
"$ref": "#/components/schemas/CreatorHudCreate"
}Complete dependent schemas: CreatorHudCreate
{
"name": "Example HUD",
"visibility": "private",
"translations": [
{
"language": "en",
"description": "Example HUD description.",
"author": "Example creator",
"authorUrl": "https://example.com/",
"terms": "Example terms.",
"license": "MIT"
}
]
}$body = @'
{
"name": "Example HUD",
"visibility": "private",
"translations": [
{
"language": "en",
"description": "Example HUD description.",
"author": "Example creator",
"authorUrl": "https://example.com/",
"terms": "Example terms.",
"license": "MIT"
}
]
}
'@
Invoke-RestMethod -Method Post -Uri 'https://www.getsou.app/api/v1/integration/organizations/22222222-2222-4222-8222-222222222222/huds' -Headers @{ Authorization = "Bearer $env:SOU_CREATOR_API_KEY" } -ContentType 'application/json' -Body $bodyResponses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Organization-scoped creator resource. | — |
400 | Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong organization, insufficient creator key scope or missing current explicit Publisher permission. | — |
404 | HUD, media or release not found within the bound organization. | — |
409 | Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying. | — |
413 | Request body exceeds the endpoint limit. | — |
415 | Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/CreatorHud"
}Complete dependent schemas: CreatorHud
{
"id": "33333333-3333-4333-8333-333333333333",
"organizationId": "22222222-2222-4222-8222-222222222222",
"packageId": null,
"name": "Example HUD",
"visibility": "private",
"listed": false
}GET /api/v1/integration/organizations/{organization}/huds/{hud}
operationId: getCreatorHud
Read one owned HUD, including its package identity.
Authentication: CreatorKey. Requires current explicit Publisher permission for the bound organization; a read-only creator key is sufficient.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
organization | path | yes | {"type":"string","format":"uuid"} | "22222222-2222-4222-8222-222222222222" | |
hud | path | yes | {"type":"string","format":"uuid"} | "33333333-3333-4333-8333-333333333333" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/organizations/22222222-2222-4222-8222-222222222222/huds/33333333-3333-4333-8333-333333333333' -Headers @{ Authorization = "Bearer $env:SOU_CREATOR_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Organization-scoped creator resource. | — |
400 | Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong organization, insufficient creator key scope or missing current explicit Publisher permission. | — |
404 | HUD, media or release not found within the bound organization. | — |
409 | Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying. | — |
413 | Request body exceeds the endpoint limit. | — |
415 | Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/CreatorHud"
}Complete dependent schemas: CreatorHud
{
"id": "33333333-3333-4333-8333-333333333333",
"organizationId": "22222222-2222-4222-8222-222222222222",
"packageId": null,
"name": "Example HUD",
"visibility": "private",
"listed": false
}GET /api/v1/integration/organizations/{organization}/huds/{hud}/details
operationId: getCreatorHudDetails
Read editable localized HUD details and media references.
Authentication: CreatorKey. Requires current explicit Publisher permission for the bound organization; a read-only creator key is sufficient.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
organization | path | yes | {"type":"string","format":"uuid"} | "22222222-2222-4222-8222-222222222222" | |
hud | path | yes | {"type":"string","format":"uuid"} | "33333333-3333-4333-8333-333333333333" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/organizations/22222222-2222-4222-8222-222222222222/huds/33333333-3333-4333-8333-333333333333/details' -Headers @{ Authorization = "Bearer $env:SOU_CREATOR_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Organization-scoped creator resource. | — |
400 | Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong organization, insufficient creator key scope or missing current explicit Publisher permission. | — |
404 | HUD, media or release not found within the bound organization. | — |
409 | Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying. | — |
413 | Request body exceeds the endpoint limit. | — |
415 | Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/HudDetails"
}Complete dependent schemas: HudDetails
{
"revision": 1,
"translations": [
{
"language": "en",
"description": null,
"author": null,
"authorUrl": null,
"imprintUrl": null,
"privacyUrl": null,
"preview": null,
"gallery": [],
"demo": null
}
]
}PUT /api/v1/integration/organizations/{organization}/huds/{hud}/details
operationId: setCreatorHudDetails
Replace localized HUD text and links using the last read revision.
Authentication: CreatorKey. Requires creator-key write scope and current explicit Publisher permission for the bound organization.
Metadata belongs to the HUD, outside .souhud packages. Description, terms and license contain Markdown source, up to 8000 characters per field; raw HTML is untrusted. All new fields are currently optional. Every translated populated field requires its en equivalent. On update, omitted or null terms/license preserve existing values for retained language rows; send an empty string to clear them. An omitted language row is removed completely. Absolute HTTP(S) URLs only, without credentials. Replacing texts preserves media. Maximum 512 KiB JSON; 256 distinct normalized language tags. Reload after conflicts; never blindly retry writes.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
organization | path | yes | {"type":"string","format":"uuid"} | "22222222-2222-4222-8222-222222222222" | |
hud | path | yes | {"type":"string","format":"uuid"} | "33333333-3333-4333-8333-333333333333" |
Request
Request body required: yes.
application/json
{
"$ref": "#/components/schemas/SetHudDetails"
}Complete dependent schemas: SetHudDetails
{
"revision": 0,
"translations": [
{
"language": "en",
"description": "Example HUD description.",
"author": "Example creator",
"authorUrl": "https://example.com/",
"terms": "Example terms.",
"license": "MIT"
}
]
}$body = @'
{
"revision": 0,
"translations": [
{
"language": "en",
"description": "Example HUD description.",
"author": "Example creator",
"authorUrl": "https://example.com/",
"terms": "Example terms.",
"license": "MIT"
}
]
}
'@
Invoke-RestMethod -Method Put -Uri 'https://www.getsou.app/api/v1/integration/organizations/22222222-2222-4222-8222-222222222222/huds/33333333-3333-4333-8333-333333333333/details' -Headers @{ Authorization = "Bearer $env:SOU_CREATOR_API_KEY" } -ContentType 'application/json' -Body $bodyResponses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Organization-scoped creator resource. | — |
400 | Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong organization, insufficient creator key scope or missing current explicit Publisher permission. | — |
404 | HUD, media or release not found within the bound organization. | — |
409 | Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying. | — |
413 | Request body exceeds the endpoint limit. | — |
415 | Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/HudDetails"
}Complete dependent schemas: HudDetails
{
"revision": 1,
"translations": [
{
"language": "en",
"description": "Example HUD description.",
"author": "Example creator",
"authorUrl": "https://example.com/",
"imprintUrl": null,
"privacyUrl": null,
"preview": null,
"gallery": [],
"demo": null,
"terms": "Example terms.",
"license": "MIT"
}
]
}POST /api/v1/integration/organizations/{organization}/huds/{hud}/media/{language}/{kind}
operationId: uploadCreatorHudMedia
Add a gallery image or replace the preview/demo for one language.
Authentication: CreatorKey. Requires creator-key write scope and current explicit Publisher permission for the bound organization.
Send raw bytes. Preview: at least 1920 x 900 px, at most 5000000 bytes. Gallery: multiple images, each at least 1920 x 900 px and at most 10000000 bytes. Demo: MP4 video only, at most 50000000 bytes. Upload en for each media kind before another language. Images are decoded and dimensions checked; MP4 container and video sample structure are validated. Media changes increment the shared details revision. Current minimum gallery count is zero; three is a future requirement.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
organization | path | yes | {"type":"string","format":"uuid"} | "22222222-2222-4222-8222-222222222222" | |
hud | path | yes | {"type":"string","format":"uuid"} | "33333333-3333-4333-8333-333333333333" | |
language | path | yes | {"type":"string","minLength":1,"maxLength":63,"description":"BCP 47 language tag, normalized to lowercase. Each populated translated field or media kind requires an English en counterpart."} | BCP 47 language tag, normalized to lowercase. Each populated translated field or media kind requires an English en counterpart. | "en" |
kind | path | yes | {"type":"string","enum":["preview","gallery","demo"]} | "preview" | |
expectedRevision | query | yes | {"type":"integer","format":"int64","minimum":0} | 0 | |
Content-Disposition | header | no | {"type":"string"} | Required for demo: attachment; filename="demo.mp4". File must have .mp4 extension. | "example" |
Request
Request body required: yes.
image/png
{
"type": "string",
"format": "binary"
}image/jpeg
{
"type": "string",
"format": "binary"
}image/webp
{
"type": "string",
"format": "binary"
}video/mp4
{
"type": "string",
"format": "binary"
}Invoke-RestMethod -Method Post -Uri 'https://www.getsou.app/api/v1/integration/organizations/22222222-2222-4222-8222-222222222222/huds/33333333-3333-4333-8333-333333333333/media/en/preview?expectedRevision=1' -Headers @{ Authorization = "Bearer $env:SOU_CREATOR_API_KEY" } -ContentType 'image/png' -InFile './preview.png'For a demo video, set kind to demo, send Content-Type: video/mp4 and Content-Disposition: attachment; filename="demo.mp4", and provide a valid MP4 file. The gallery kind has the separate image limits described above.
Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Organization-scoped creator resource. | — |
400 | Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong organization, insufficient creator key scope or missing current explicit Publisher permission. | — |
404 | HUD, media or release not found within the bound organization. | — |
409 | Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying. | — |
413 | Request body exceeds the endpoint limit. | — |
415 | Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/HudDetails"
}Complete dependent schemas: HudDetails
{
"revision": 2,
"translations": [
{
"language": "en",
"description": null,
"author": null,
"authorUrl": null,
"imprintUrl": null,
"privacyUrl": null,
"preview": {
"id": "55555555-5555-4555-8555-555555555555",
"language": "en",
"kind": "preview",
"contentType": "image/png",
"length": 32768,
"width": 1920,
"height": 900,
"position": 0
},
"gallery": [],
"demo": null
}
]
}GET /api/v1/integration/organizations/{organization}/huds/{hud}/media/{media}
operationId: getCreatorHudMedia
Read one owned HUD media file.
Authentication: CreatorKey. Requires current explicit Publisher permission for the bound organization; a read-only creator key is sufficient.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
organization | path | yes | {"type":"string","format":"uuid"} | "22222222-2222-4222-8222-222222222222" | |
hud | path | yes | {"type":"string","format":"uuid"} | "33333333-3333-4333-8333-333333333333" | |
media | path | yes | {"type":"string","format":"uuid"} | "55555555-5555-4555-8555-555555555555" |
Request
No request body.
Invoke-WebRequest -Method Get -Uri 'https://www.getsou.app/api/v1/integration/organizations/22222222-2222-4222-8222-222222222222/huds/33333333-3333-4333-8333-333333333333/media/55555555-5555-4555-8555-555555555555' -Headers @{ Authorization = "Bearer $env:SOU_CREATOR_API_KEY" } -OutFile './download.bin'Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Media bytes with the validated image or MP4 content type. | — |
400 | Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong organization, insufficient creator key scope or missing current explicit Publisher permission. | — |
404 | HUD, media or release not found within the bound organization. | — |
409 | Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying. | — |
413 | Request body exceeds the endpoint limit. | — |
415 | Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/octet-stream
{
"type": "string",
"format": "binary"
}The response contains original binary bytes. Save them to a file using the example call; the contract does not define a JSON body.
DELETE /api/v1/integration/organizations/{organization}/huds/{hud}/media/{media}
operationId: deleteCreatorHudMedia
Remove one media reference using the last read details revision.
Authentication: CreatorKey. Requires creator-key write scope and current explicit Publisher permission for the bound organization.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
organization | path | yes | {"type":"string","format":"uuid"} | "22222222-2222-4222-8222-222222222222" | |
hud | path | yes | {"type":"string","format":"uuid"} | "33333333-3333-4333-8333-333333333333" | |
media | path | yes | {"type":"string","format":"uuid"} | "55555555-5555-4555-8555-555555555555" | |
expectedRevision | query | yes | {"type":"integer","format":"int64","minimum":0} | 0 |
Request
No request body.
Invoke-RestMethod -Method Delete -Uri 'https://www.getsou.app/api/v1/integration/organizations/22222222-2222-4222-8222-222222222222/huds/33333333-3333-4333-8333-333333333333/media/55555555-5555-4555-8555-555555555555?expectedRevision=1' -Headers @{ Authorization = "Bearer $env:SOU_CREATOR_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Organization-scoped creator resource. | — |
400 | Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong organization, insufficient creator key scope or missing current explicit Publisher permission. | — |
404 | HUD, media or release not found within the bound organization. | — |
409 | Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying. | — |
413 | Request body exceeds the endpoint limit. | — |
415 | Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/HudDetails"
}Complete dependent schemas: HudDetails
{
"revision": 2,
"translations": [
{
"language": "en",
"description": null,
"author": null,
"authorUrl": null,
"imprintUrl": null,
"privacyUrl": null,
"preview": null,
"gallery": [],
"demo": null
}
]
}GET /api/v1/integration/organizations/{organization}/huds/{hud}/grants
operationId: listCreatorHudGrants
List all workspace grants and pending access requests for this HUD.
Authentication: CreatorKey. Requires current explicit Publisher permission for the bound organization; a read-only creator key is sufficient.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
organization | path | yes | {"type":"string","format":"uuid"} | "22222222-2222-4222-8222-222222222222" | |
hud | path | yes | {"type":"string","format":"uuid"} | "33333333-3333-4333-8333-333333333333" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/organizations/22222222-2222-4222-8222-222222222222/huds/33333333-3333-4333-8333-333333333333/grants' -Headers @{ Authorization = "Bearer $env:SOU_CREATOR_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Organization-scoped creator resource. | — |
400 | Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong organization, insufficient creator key scope or missing current explicit Publisher permission. | — |
404 | HUD, media or release not found within the bound organization. | — |
409 | Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying. | — |
413 | Request body exceeds the endpoint limit. | — |
415 | Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"type": "array",
"items": {
"$ref": "#/components/schemas/HudGrant"
}
}Complete dependent schemas: HudGrant
[
{
"hudId": "33333333-3333-4333-8333-333333333333",
"workspaceId": "11111111-1111-4111-8111-111111111111",
"approved": false,
"selectedReleaseId": null,
"requested": false
}
]GET /api/v1/integration/organizations/{organization}/huds/{hud}/requests
operationId: listCreatorHudRequests
List actual unhandled workspace access requests.
Authentication: CreatorKey. Requires current explicit Publisher permission for the bound organization; a read-only creator key is sufficient.
Returns only requested=true and approved=false. Historical unapproved records, denied requests and revoked grants are excluded. Never use all approved=false records as a pending-request queue.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
organization | path | yes | {"type":"string","format":"uuid"} | "22222222-2222-4222-8222-222222222222" | |
hud | path | yes | {"type":"string","format":"uuid"} | "33333333-3333-4333-8333-333333333333" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/organizations/22222222-2222-4222-8222-222222222222/huds/33333333-3333-4333-8333-333333333333/requests' -Headers @{ Authorization = "Bearer $env:SOU_CREATOR_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Organization-scoped creator resource. | — |
400 | Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong organization, insufficient creator key scope or missing current explicit Publisher permission. | — |
404 | HUD, media or release not found within the bound organization. | — |
409 | Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying. | — |
413 | Request body exceeds the endpoint limit. | — |
415 | Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"type": "array",
"items": {
"$ref": "#/components/schemas/HudGrant"
}
}Complete dependent schemas: HudGrant
[
{
"hudId": "33333333-3333-4333-8333-333333333333",
"workspaceId": "11111111-1111-4111-8111-111111111111",
"approved": false,
"selectedReleaseId": null,
"requested": true
}
]PUT /api/v1/integration/organizations/{organization}/huds/{hud}/grants/{workspace}
operationId: setCreatorHudGrant
Approve/deny a request, grant direct access without a request, or revoke access.
Authentication: CreatorKey. Requires creator-key write scope and current explicit Publisher permission for the bound organization.
Send approved:true to approve an existing request or directly grant an existing workspace access without a prior request. Send approved:false to deny/revoke. Each decision clears requested. Requires read/write CreatorKey and a current explicit Publisher grant for the bound organization. It does not install a package or change running output. Existing subscriptions remain bound to the HUD, not one release.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
organization | path | yes | {"type":"string","format":"uuid"} | "22222222-2222-4222-8222-222222222222" | |
hud | path | yes | {"type":"string","format":"uuid"} | "33333333-3333-4333-8333-333333333333" | |
workspace | path | yes | {"type":"string","format":"uuid"} | "11111111-1111-4111-8111-111111111111" |
Request
Request body required: yes.
application/json
{
"$ref": "#/components/schemas/SetHudGrant"
}Complete dependent schemas: SetHudGrant
{
"approved": false
}$body = @'
{
"approved": false
}
'@
Invoke-RestMethod -Method Put -Uri 'https://www.getsou.app/api/v1/integration/organizations/22222222-2222-4222-8222-222222222222/huds/33333333-3333-4333-8333-333333333333/grants/11111111-1111-4111-8111-111111111111' -Headers @{ Authorization = "Bearer $env:SOU_CREATOR_API_KEY" } -ContentType 'application/json' -Body $bodyResponses
| HTTP | Meaning | Response headers |
|---|---|---|
204 | Workspace grant saved; request marked handled. | — |
400 | Malformed JSON, invalid schema, reference, identity, or document kind. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Insufficient creator key scope or missing current Publisher permission. | — |
404 | HUD is outside the bound organization or workspace does not exist. | — |
409 | Concurrent change; read the current grants before retrying. | — |
413 | Request body exceeds the endpoint limit. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
GET /api/v1/integration/organizations/{organization}/huds/{hud}/releases
operationId: listCreatorReleases
List all versions and review states of an owned HUD.
Authentication: CreatorKey. Requires current explicit Publisher permission for the bound organization; a read-only creator key is sufficient.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
organization | path | yes | {"type":"string","format":"uuid"} | "22222222-2222-4222-8222-222222222222" | |
hud | path | yes | {"type":"string","format":"uuid"} | "33333333-3333-4333-8333-333333333333" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/organizations/22222222-2222-4222-8222-222222222222/huds/33333333-3333-4333-8333-333333333333/releases' -Headers @{ Authorization = "Bearer $env:SOU_CREATOR_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Organization-scoped creator resource. | — |
400 | Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong organization, insufficient creator key scope or missing current explicit Publisher permission. | — |
404 | HUD, media or release not found within the bound organization. | — |
409 | Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying. | — |
413 | Request body exceeds the endpoint limit. | — |
415 | Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"type": "array",
"items": {
"$ref": "#/components/schemas/CreatorRelease"
}
}Complete dependent schemas: CreatorRelease
[
{
"id": "44444444-4444-4444-8444-444444444444",
"hudId": "33333333-3333-4333-8333-333333333333",
"version": "1.0.0",
"hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"state": "pending",
"review": null
}
]POST /api/v1/integration/organizations/{organization}/huds/{hud}/releases
operationId: uploadCreatorRelease
Upload a new immutable .souhud package version for an existing owned HUD.
Authentication: CreatorKey. Requires creator-key write scope and current explicit Publisher permission for the bound organization.
Send raw .souhud ZIP bytes, no multipart wrapper. Maximum 128 MiB compressed and uncompressed total, at most 4096 ZIP entries, hud.json at most 64000 bytes. Uses the existing package validator. Supported package API versions: 2, 3; runtime blazor-wasm/web/lhm; valid entryPoint under wwwroot; version X.Y.Z with optional lowercase prerelease; stable globally unique package id. Existing versions cannot be overwritten, including rejected or pending versions. Updates require a new version. Uploads by accounts with creator trust are automatically approved after successful package validation; other uploads enter pending for regular review. Trust is account-bound, revocable, and does not grant Publisher rights or change existing review states. Keys cannot grant trust or make review decisions. Uploads do not change subscriptions, grants, listing, installed HUDs or running output. On response loss, inspect the release list and compare version and SHA-256 before retrying.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
organization | path | yes | {"type":"string","format":"uuid"} | "22222222-2222-4222-8222-222222222222" | |
hud | path | yes | {"type":"string","format":"uuid"} | "33333333-3333-4333-8333-333333333333" |
Request
Request body required: yes.
application/octet-stream
{
"type": "string",
"format": "binary"
}Invoke-RestMethod -Method Post -Uri 'https://www.getsou.app/api/v1/integration/organizations/22222222-2222-4222-8222-222222222222/huds/33333333-3333-4333-8333-333333333333/releases' -Headers @{ Authorization = "Bearer $env:SOU_CREATOR_API_KEY" } -ContentType 'application/octet-stream' -InFile './example-hud.souhud'Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Organization-scoped creator resource. | — |
400 | Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong organization, insufficient creator key scope or missing current explicit Publisher permission. | — |
404 | HUD, media or release not found within the bound organization. | — |
409 | Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying. | — |
413 | Request body exceeds the endpoint limit. | — |
415 | Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/CreatorRelease"
}Complete dependent schemas: CreatorRelease
{
"id": "44444444-4444-4444-8444-444444444444",
"hudId": "33333333-3333-4333-8333-333333333333",
"version": "1.0.0",
"hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"state": "pending",
"review": null
}GET /api/v1/integration/organizations/{organization}/huds/{hud}/releases/{release}
operationId: getCreatorRelease
Read upload status and the review note for one owned version.
Authentication: CreatorKey. Requires current explicit Publisher permission for the bound organization; a read-only creator key is sufficient.
Parameters
| Name | Location | Required | Type and limits | Meaning | Example |
|---|---|---|---|---|---|
organization | path | yes | {"type":"string","format":"uuid"} | "22222222-2222-4222-8222-222222222222" | |
hud | path | yes | {"type":"string","format":"uuid"} | "33333333-3333-4333-8333-333333333333" | |
release | path | yes | {"type":"string","format":"uuid"} | "44444444-4444-4444-8444-444444444444" |
Request
No request body.
Invoke-RestMethod -Method Get -Uri 'https://www.getsou.app/api/v1/integration/organizations/22222222-2222-4222-8222-222222222222/huds/33333333-3333-4333-8333-333333333333/releases/44444444-4444-4444-8444-444444444444' -Headers @{ Authorization = "Bearer $env:SOU_CREATOR_API_KEY" }Responses
| HTTP | Meaning | Response headers |
|---|---|---|
200 | Organization-scoped creator resource. | — |
400 | Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content. | — |
401 | Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer. | — |
403 | Wrong organization, insufficient creator key scope or missing current explicit Publisher permission. | — |
404 | HUD, media or release not found within the bound organization. | — |
409 | Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying. | — |
413 | Request body exceeds the endpoint limit. | — |
415 | Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type. | — |
429 | 120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval. | Retry-After: {"type":"string"} — Seconds until retry (60). |
500 | Unexpected server failure; do not assume a write failed. Reload and reconcile before retrying. | — |
200 · application/json
{
"$ref": "#/components/schemas/CreatorRelease"
}Complete dependent schemas: CreatorRelease
{
"id": "44444444-4444-4444-8444-444444444444",
"hudId": "33333333-3333-4333-8333-333333333333",
"version": "1.0.0",
"hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"state": "pending",
"review": null
}Complete data schemas
Each #/components/schemas/Name reference resolves here to the complete original schema. Field tables show the core rules; JSON also preserves nested fields, alternatives and every limit. Required means the property must be present. nullable separately permits null. additionalProperties: false forbids unknown properties.
- team
- player
- competition
- season
- section
- map
- mapPool
- match
- startupConfig
- panelTemplate
- Sponsor
- Veto
- MapResult
- TeamResource
- WriteTeam
- TeamChange
- PlayerResource
- WritePlayer
- PlayerChange
- CompetitionResource
- WriteCompetition
- CompetitionChange
- SeasonResource
- WriteSeason
- SeasonChange
- SectionResource
- WriteSection
- SectionChange
- MapResource
- WriteMap
- MapChange
- MapPoolResource
- WriteMapPool
- MapPoolChange
- MatchResource
- WriteMatch
- MatchChange
- StartupConfigResource
- WriteStartupConfig
- StartupConfigChange
- PanelTemplateResource
- WritePanelTemplate
- PanelTemplateChange
- WorkspaceChanges
- WorkspaceSnapshot
- CheckMedia
- MediaPresence
- HudTranslationInput
- HudMedia
- HudTranslation
- HudDetails
- SetHudDetails
- CreatorHudCreate
- CreatorHud
- CreatorRelease
- HudGrant
- SetHudGrant
team
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
name | yes | string | minLength: 1; maxLength: 100; pattern: "\\S" | |
shortName | no | string | maxLength: 16 | |
logo | no | string | null | nullable: true; pattern: "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$" | |
faceitId | no | string | null | nullable: true | |
dachcsId | no | string | null | nullable: true |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"shortName": {
"type": "string",
"maxLength": 16
},
"logo": {
"type": "string",
"nullable": true,
"pattern": "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$"
},
"faceitId": {
"type": "string",
"nullable": true
},
"dachcsId": {
"type": "string",
"nullable": true
}
},
"required": [
"id",
"name"
]
}Schema-valid example:
{
"id": "team-a",
"name": "Example team"
}player
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
steamId | yes | string | pattern: "^[0-9]{17}$" | |
name | yes | string | minLength: 1; maxLength: 100; pattern: "\\S" | |
teamId | no | string | null | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"; nullable: true | |
avatar | no | string | null | nullable: true; pattern: "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$" | |
isCoach | no | boolean | |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"steamId": {
"type": "string",
"pattern": "^[0-9]{17}$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"teamId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$",
"nullable": true
},
"avatar": {
"type": "string",
"nullable": true,
"pattern": "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$"
},
"isCoach": {
"type": "boolean"
}
},
"required": [
"steamId",
"name"
]
}Schema-valid example:
{
"steamId": "76561198000000001",
"name": "Example player"
}competition
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
name | yes | string | minLength: 1; maxLength: 100; pattern: "\\S" | |
logo | no | string | null | nullable: true; pattern: "^/cast-media/[a-f0-9]{64}\\.(png|jpg)$" | |
sponsors | no | array | |
Complete dependent schemas: Sponsor
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"logo": {
"type": "string",
"nullable": true,
"pattern": "^/cast-media/[a-f0-9]{64}\\.(png|jpg)$"
},
"sponsors": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Sponsor"
}
}
},
"required": [
"id",
"name"
]
}Schema-valid example:
{
"id": "competition-2026",
"name": "Example competition"
}season
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
name | yes | string | minLength: 1; maxLength: 100; pattern: "\\S" | |
competitionId | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"competitionId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
}
},
"required": [
"id",
"name",
"competitionId"
]
}Schema-valid example:
{
"id": "season-2026",
"name": "Example season",
"competitionId": "competition-2026"
}section
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
name | yes | string | minLength: 1; maxLength: 100; pattern: "\\S" | |
competitionId | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
seasonId | no | string | null | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"; nullable: true | |
parentId | no | string | null | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"; nullable: true | |
kind | no | integer | format: "int32"; minimum: 1; maximum: 6 | 1 Region, 2 Division, 3 Phase, 4 Group, 5 Round, 6 Other. Default 6. |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"competitionId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"seasonId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$",
"nullable": true
},
"parentId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$",
"nullable": true
},
"kind": {
"type": "integer",
"format": "int32",
"minimum": 1,
"maximum": 6,
"description": "1 Region, 2 Division, 3 Phase, 4 Group, 5 Round, 6 Other. Default 6."
}
},
"required": [
"id",
"name",
"competitionId"
]
}Schema-valid example:
{
"id": "section-2026",
"name": "Example section",
"competitionId": "competition-2026"
}map
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
name | yes | string | minLength: 1; maxLength: 100; pattern: "\\S" | |
gameName | yes | string | minLength: 1; maxLength: 128; pattern: "^[a-z0-9_][a-z0-9_/-]*$" | |
logo | no | string | null | nullable: true; pattern: "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$" | |
background | no | string | null | nullable: true; pattern: "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$" |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"gameName": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[a-z0-9_][a-z0-9_/-]*$"
},
"logo": {
"type": "string",
"nullable": true,
"pattern": "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$"
},
"background": {
"type": "string",
"nullable": true,
"pattern": "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$"
}
},
"required": [
"id",
"name",
"gameName"
]
}Schema-valid example:
{
"id": "map-dust2",
"name": "Example map",
"gameName": "de_dust2"
}mapPool
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
name | yes | string | minLength: 1; maxLength: 100; pattern: "\\S" | |
mapIds | no | array | uniqueItems: true |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"mapIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"uniqueItems": true
}
},
"required": [
"id",
"name"
]
}Schema-valid example:
{
"id": "pool-main",
"name": "Example mapPool"
}match
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
name | yes | string | minLength: 1; maxLength: 100; pattern: "\\S" | |
startsAt | no | string | null | format: "date-time"; nullable: true | |
competitionId | no | string | null | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"; nullable: true | |
seasonId | no | string | null | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"; nullable: true | |
competitionSectionId | no | string | null | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"; nullable: true | |
competitionRound | no | string | null | nullable: true; maxLength: 100 | |
faceitId | no | string | null | nullable: true | |
dachcsId | no | string | null | nullable: true | |
teamA | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
teamB | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
bestOf | no | integer | format: "int32"; minimum: 1; enum: [1,3,5,7]; default: 3 | |
mapPoolId | no | string | null | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"; nullable: true | |
winsA | no | integer | format: "int32"; minimum: 0 | |
winsB | no | integer | format: "int32"; minimum: 0 | |
mapIds | no | array | uniqueItems: true | |
mapResults | no | array | null | nullable: true | |
vetos | no | array | |
Complete dependent schemas: MapResult · Veto
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"startsAt": {
"type": "string",
"format": "date-time",
"nullable": true
},
"competitionId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$",
"nullable": true
},
"seasonId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$",
"nullable": true
},
"competitionSectionId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$",
"nullable": true
},
"competitionRound": {
"type": "string",
"nullable": true,
"maxLength": 100
},
"faceitId": {
"type": "string",
"nullable": true
},
"dachcsId": {
"type": "string",
"nullable": true
},
"teamA": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"teamB": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"bestOf": {
"type": "integer",
"format": "int32",
"minimum": 1,
"enum": [
1,
3,
5,
7
],
"default": 3
},
"mapPoolId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$",
"nullable": true
},
"winsA": {
"type": "integer",
"format": "int32",
"minimum": 0
},
"winsB": {
"type": "integer",
"format": "int32",
"minimum": 0
},
"mapIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"uniqueItems": true
},
"mapResults": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MapResult"
},
"nullable": true
},
"vetos": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Veto"
}
}
},
"required": [
"id",
"name",
"teamA",
"teamB"
]
}Schema-valid example:
{
"id": "match-2026",
"name": "Example match",
"teamA": "team-a",
"teamB": "team-b"
}startupConfig
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
name | yes | string | minLength: 1; maxLength: 100; pattern: "\\S" | |
content | yes | string | maxLength: 250000 |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"content": {
"type": "string",
"maxLength": 250000
}
},
"required": [
"id",
"name",
"content"
]
}Schema-valid example:
{
"id": "config-demo",
"name": "Example startupConfig",
"content": "echo sOU"
}panelTemplate
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
hudId | yes | string | minLength: 1 | |
version | yes | string | minLength: 1 | |
values | yes | object | additionalProperties: true |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"hudId": {
"type": "string",
"minLength": 1
},
"version": {
"type": "string",
"minLength": 1
},
"values": {
"type": "object",
"additionalProperties": true
}
},
"required": [
"id",
"hudId",
"version",
"values"
]
}Schema-valid example:
{
"id": "template-main",
"hudId": "example-hud",
"version": "1.0.0",
"values": {}
}Sponsor
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
name | yes | string | minLength: 1; maxLength: 100; pattern: "\\S" | |
image | yes | string | nullable: false; pattern: "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$" |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"image": {
"type": "string",
"nullable": false,
"pattern": "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$"
}
},
"required": [
"id",
"name",
"image"
]
}Schema-valid example:
{
"id": "example-id",
"name": "Example HUD",
"image": "/cast-media/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.png"
}Veto
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
mapId | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
type | yes | integer | format: "int32"; minimum: 0; maximum: 3 | 0 Unknown, 1 Pick, 2 Ban, 3 Decider. |
teamId | no | string | null | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"; nullable: true |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"mapId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"type": {
"type": "integer",
"format": "int32",
"minimum": 0,
"maximum": 3,
"description": "0 Unknown, 1 Pick, 2 Ban, 3 Decider."
},
"teamId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$",
"nullable": true
}
},
"required": [
"mapId",
"type"
]
}Schema-valid example:
{
"mapId": "map-dust2",
"type": 0
}MapResult
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
mapId | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
status | no | integer | format: "int32"; minimum: 1; maximum: 3; default: 1 | 1 Pending, 2 Live, 3 Completed. |
scoreA | no | integer | null | format: "int32"; minimum: 0; nullable: true | |
scoreB | no | integer | null | format: "int32"; minimum: 0; nullable: true |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"mapId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"status": {
"type": "integer",
"format": "int32",
"minimum": 1,
"maximum": 3,
"default": 1,
"description": "1 Pending, 2 Live, 3 Completed."
},
"scoreA": {
"type": "integer",
"format": "int32",
"minimum": 0,
"nullable": true
},
"scoreB": {
"type": "integer",
"format": "int32",
"minimum": 0,
"nullable": true
}
},
"required": [
"mapId"
]
}Schema-valid example:
{
"mapId": "map-dust2"
}TeamResource
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
revision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | | |
data | yes | object | null | additionalProperties: false; required: ["id","name"]; nullable: true |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"revision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean"
},
"data": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"shortName": {
"type": "string",
"maxLength": 16
},
"logo": {
"type": "string",
"nullable": true,
"pattern": "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$"
},
"faceitId": {
"type": "string",
"nullable": true
},
"dachcsId": {
"type": "string",
"nullable": true
}
},
"required": [
"id",
"name"
],
"nullable": true
}
},
"required": [
"id",
"revision",
"deleted",
"data"
]
}Schema-valid example:
{
"id": "team-a",
"revision": 1,
"deleted": false,
"data": {
"id": "team-a",
"name": "Example team"
}
}WriteTeam
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
data | yes | team | |
Complete dependent schemas: team
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"data": {
"$ref": "#/components/schemas/team"
}
},
"required": [
"expectedRevision",
"data"
]
}Schema-valid example:
{
"expectedRevision": 0,
"data": {
"id": "team-a",
"name": "Example team"
}
}TeamChange
Alternative schemas: 2
Variant 1
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | no | boolean | enum: [false] | |
data | yes | team | |
Variant 2
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | enum: [true] | |
data | no | object | null | nullable: true; enum: [null] |
Complete dependent schemas: team
Complete original definition:
{
"anyOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
false
]
},
"data": {
"$ref": "#/components/schemas/team"
}
},
"required": [
"id",
"expectedRevision",
"data"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
true
]
},
"data": {
"type": "object",
"nullable": true,
"enum": [
null
]
}
},
"required": [
"id",
"expectedRevision",
"deleted"
]
}
]
}Schema-valid example:
{
"id": "team-a",
"expectedRevision": 0,
"data": {
"id": "team-a",
"name": "Example team"
}
}PlayerResource
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | pattern: "^[0-9]{17}$" | |
revision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | | |
data | yes | object | null | additionalProperties: false; required: ["steamId","name"]; nullable: true |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9]{17}$"
},
"revision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean"
},
"data": {
"type": "object",
"additionalProperties": false,
"properties": {
"steamId": {
"type": "string",
"pattern": "^[0-9]{17}$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"teamId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$",
"nullable": true
},
"avatar": {
"type": "string",
"nullable": true,
"pattern": "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$"
},
"isCoach": {
"type": "boolean"
}
},
"required": [
"steamId",
"name"
],
"nullable": true
}
},
"required": [
"id",
"revision",
"deleted",
"data"
]
}Schema-valid example:
{
"id": "76561198000000001",
"revision": 1,
"deleted": false,
"data": {
"steamId": "76561198000000001",
"name": "Example player"
}
}WritePlayer
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
data | yes | player | |
Complete dependent schemas: player
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"data": {
"$ref": "#/components/schemas/player"
}
},
"required": [
"expectedRevision",
"data"
]
}Schema-valid example:
{
"expectedRevision": 0,
"data": {
"steamId": "76561198000000001",
"name": "Example player"
}
}PlayerChange
Alternative schemas: 2
Variant 1
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | pattern: "^[0-9]{17}$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | no | boolean | enum: [false] | |
data | yes | player | |
Variant 2
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | pattern: "^[0-9]{17}$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | enum: [true] | |
data | no | object | null | nullable: true; enum: [null] |
Complete dependent schemas: player
Complete original definition:
{
"anyOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9]{17}$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
false
]
},
"data": {
"$ref": "#/components/schemas/player"
}
},
"required": [
"id",
"expectedRevision",
"data"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9]{17}$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
true
]
},
"data": {
"type": "object",
"nullable": true,
"enum": [
null
]
}
},
"required": [
"id",
"expectedRevision",
"deleted"
]
}
]
}Schema-valid example:
{
"id": "76561198000000001",
"expectedRevision": 0,
"data": {
"steamId": "76561198000000001",
"name": "Example player"
}
}CompetitionResource
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
revision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | | |
data | yes | object | null | additionalProperties: false; required: ["id","name"]; nullable: true |
Complete dependent schemas: Sponsor
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"revision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean"
},
"data": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"logo": {
"type": "string",
"nullable": true,
"pattern": "^/cast-media/[a-f0-9]{64}\\.(png|jpg)$"
},
"sponsors": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Sponsor"
}
}
},
"required": [
"id",
"name"
],
"nullable": true
}
},
"required": [
"id",
"revision",
"deleted",
"data"
]
}Schema-valid example:
{
"id": "competition-2026",
"revision": 1,
"deleted": false,
"data": {
"id": "competition-2026",
"name": "Example competition"
}
}WriteCompetition
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
data | yes | competition | |
Complete dependent schemas: competition
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"data": {
"$ref": "#/components/schemas/competition"
}
},
"required": [
"expectedRevision",
"data"
]
}Schema-valid example:
{
"expectedRevision": 0,
"data": {
"id": "competition-2026",
"name": "Example competition"
}
}CompetitionChange
Alternative schemas: 2
Variant 1
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | no | boolean | enum: [false] | |
data | yes | competition | |
Variant 2
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | enum: [true] | |
data | no | object | null | nullable: true; enum: [null] |
Complete dependent schemas: competition
Complete original definition:
{
"anyOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
false
]
},
"data": {
"$ref": "#/components/schemas/competition"
}
},
"required": [
"id",
"expectedRevision",
"data"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
true
]
},
"data": {
"type": "object",
"nullable": true,
"enum": [
null
]
}
},
"required": [
"id",
"expectedRevision",
"deleted"
]
}
]
}Schema-valid example:
{
"id": "competition-2026",
"expectedRevision": 0,
"data": {
"id": "competition-2026",
"name": "Example competition"
}
}SeasonResource
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
revision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | | |
data | yes | object | null | additionalProperties: false; required: ["id","name","competitionId"]; nullable: true |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"revision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean"
},
"data": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"competitionId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
}
},
"required": [
"id",
"name",
"competitionId"
],
"nullable": true
}
},
"required": [
"id",
"revision",
"deleted",
"data"
]
}Schema-valid example:
{
"id": "season-2026",
"revision": 1,
"deleted": false,
"data": {
"id": "season-2026",
"name": "Example season",
"competitionId": "competition-2026"
}
}WriteSeason
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
data | yes | season | |
Complete dependent schemas: season
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"data": {
"$ref": "#/components/schemas/season"
}
},
"required": [
"expectedRevision",
"data"
]
}Schema-valid example:
{
"expectedRevision": 0,
"data": {
"id": "season-2026",
"name": "Example season",
"competitionId": "competition-2026"
}
}SeasonChange
Alternative schemas: 2
Variant 1
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | no | boolean | enum: [false] | |
data | yes | season | |
Variant 2
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | enum: [true] | |
data | no | object | null | nullable: true; enum: [null] |
Complete dependent schemas: season
Complete original definition:
{
"anyOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
false
]
},
"data": {
"$ref": "#/components/schemas/season"
}
},
"required": [
"id",
"expectedRevision",
"data"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
true
]
},
"data": {
"type": "object",
"nullable": true,
"enum": [
null
]
}
},
"required": [
"id",
"expectedRevision",
"deleted"
]
}
]
}Schema-valid example:
{
"id": "season-2026",
"expectedRevision": 0,
"data": {
"id": "season-2026",
"name": "Example season",
"competitionId": "competition-2026"
}
}SectionResource
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
revision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | | |
data | yes | object | null | additionalProperties: false; required: ["id","name","competitionId"]; nullable: true |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"revision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean"
},
"data": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"competitionId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"seasonId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$",
"nullable": true
},
"parentId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$",
"nullable": true
},
"kind": {
"type": "integer",
"format": "int32",
"minimum": 1,
"maximum": 6,
"description": "1 Region, 2 Division, 3 Phase, 4 Group, 5 Round, 6 Other. Default 6."
}
},
"required": [
"id",
"name",
"competitionId"
],
"nullable": true
}
},
"required": [
"id",
"revision",
"deleted",
"data"
]
}Schema-valid example:
{
"id": "section-2026",
"revision": 1,
"deleted": false,
"data": {
"id": "section-2026",
"name": "Example section",
"competitionId": "competition-2026"
}
}WriteSection
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
data | yes | section | |
Complete dependent schemas: section
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"data": {
"$ref": "#/components/schemas/section"
}
},
"required": [
"expectedRevision",
"data"
]
}Schema-valid example:
{
"expectedRevision": 0,
"data": {
"id": "section-2026",
"name": "Example section",
"competitionId": "competition-2026"
}
}SectionChange
Alternative schemas: 2
Variant 1
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | no | boolean | enum: [false] | |
data | yes | section | |
Variant 2
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | enum: [true] | |
data | no | object | null | nullable: true; enum: [null] |
Complete dependent schemas: section
Complete original definition:
{
"anyOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
false
]
},
"data": {
"$ref": "#/components/schemas/section"
}
},
"required": [
"id",
"expectedRevision",
"data"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
true
]
},
"data": {
"type": "object",
"nullable": true,
"enum": [
null
]
}
},
"required": [
"id",
"expectedRevision",
"deleted"
]
}
]
}Schema-valid example:
{
"id": "section-2026",
"expectedRevision": 0,
"data": {
"id": "section-2026",
"name": "Example section",
"competitionId": "competition-2026"
}
}MapResource
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
revision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | | |
data | yes | object | null | additionalProperties: false; required: ["id","name","gameName"]; nullable: true |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"revision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean"
},
"data": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"gameName": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[a-z0-9_][a-z0-9_/-]*$"
},
"logo": {
"type": "string",
"nullable": true,
"pattern": "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$"
},
"background": {
"type": "string",
"nullable": true,
"pattern": "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$"
}
},
"required": [
"id",
"name",
"gameName"
],
"nullable": true
}
},
"required": [
"id",
"revision",
"deleted",
"data"
]
}Schema-valid example:
{
"id": "map-dust2",
"revision": 1,
"deleted": false,
"data": {
"id": "map-dust2",
"name": "Example map",
"gameName": "de_dust2"
}
}WriteMap
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
data | yes | map | |
Complete dependent schemas: map
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"data": {
"$ref": "#/components/schemas/map"
}
},
"required": [
"expectedRevision",
"data"
]
}Schema-valid example:
{
"expectedRevision": 0,
"data": {
"id": "map-dust2",
"name": "Example map",
"gameName": "de_dust2"
}
}MapChange
Alternative schemas: 2
Variant 1
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | no | boolean | enum: [false] | |
data | yes | map | |
Variant 2
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | enum: [true] | |
data | no | object | null | nullable: true; enum: [null] |
Complete dependent schemas: map
Complete original definition:
{
"anyOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
false
]
},
"data": {
"$ref": "#/components/schemas/map"
}
},
"required": [
"id",
"expectedRevision",
"data"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
true
]
},
"data": {
"type": "object",
"nullable": true,
"enum": [
null
]
}
},
"required": [
"id",
"expectedRevision",
"deleted"
]
}
]
}Schema-valid example:
{
"id": "map-dust2",
"expectedRevision": 0,
"data": {
"id": "map-dust2",
"name": "Example map",
"gameName": "de_dust2"
}
}MapPoolResource
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
revision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | | |
data | yes | object | null | additionalProperties: false; required: ["id","name"]; nullable: true |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"revision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean"
},
"data": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"mapIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"uniqueItems": true
}
},
"required": [
"id",
"name"
],
"nullable": true
}
},
"required": [
"id",
"revision",
"deleted",
"data"
]
}Schema-valid example:
{
"id": "pool-main",
"revision": 1,
"deleted": false,
"data": {
"id": "pool-main",
"name": "Example mapPool"
}
}WriteMapPool
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
data | yes | mapPool | |
Complete dependent schemas: mapPool
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"data": {
"$ref": "#/components/schemas/mapPool"
}
},
"required": [
"expectedRevision",
"data"
]
}Schema-valid example:
{
"expectedRevision": 0,
"data": {
"id": "pool-main",
"name": "Example mapPool"
}
}MapPoolChange
Alternative schemas: 2
Variant 1
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | no | boolean | enum: [false] | |
data | yes | mapPool | |
Variant 2
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | enum: [true] | |
data | no | object | null | nullable: true; enum: [null] |
Complete dependent schemas: mapPool
Complete original definition:
{
"anyOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
false
]
},
"data": {
"$ref": "#/components/schemas/mapPool"
}
},
"required": [
"id",
"expectedRevision",
"data"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
true
]
},
"data": {
"type": "object",
"nullable": true,
"enum": [
null
]
}
},
"required": [
"id",
"expectedRevision",
"deleted"
]
}
]
}Schema-valid example:
{
"id": "pool-main",
"expectedRevision": 0,
"data": {
"id": "pool-main",
"name": "Example mapPool"
}
}MatchResource
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
revision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | | |
data | yes | object | null | additionalProperties: false; required: ["id","name","teamA","teamB"]; nullable: true |
Complete dependent schemas: MapResult · Veto
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"revision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean"
},
"data": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"startsAt": {
"type": "string",
"format": "date-time",
"nullable": true
},
"competitionId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$",
"nullable": true
},
"seasonId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$",
"nullable": true
},
"competitionSectionId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$",
"nullable": true
},
"competitionRound": {
"type": "string",
"nullable": true,
"maxLength": 100
},
"faceitId": {
"type": "string",
"nullable": true
},
"dachcsId": {
"type": "string",
"nullable": true
},
"teamA": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"teamB": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"bestOf": {
"type": "integer",
"format": "int32",
"minimum": 1,
"enum": [
1,
3,
5,
7
],
"default": 3
},
"mapPoolId": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$",
"nullable": true
},
"winsA": {
"type": "integer",
"format": "int32",
"minimum": 0
},
"winsB": {
"type": "integer",
"format": "int32",
"minimum": 0
},
"mapIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"uniqueItems": true
},
"mapResults": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MapResult"
},
"nullable": true
},
"vetos": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Veto"
}
}
},
"required": [
"id",
"name",
"teamA",
"teamB"
],
"nullable": true
}
},
"required": [
"id",
"revision",
"deleted",
"data"
]
}Schema-valid example:
{
"id": "match-2026",
"revision": 1,
"deleted": false,
"data": {
"id": "match-2026",
"name": "Example match",
"teamA": "team-a",
"teamB": "team-b"
}
}WriteMatch
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
data | yes | match | |
Complete dependent schemas: match
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"data": {
"$ref": "#/components/schemas/match"
}
},
"required": [
"expectedRevision",
"data"
]
}Schema-valid example:
{
"expectedRevision": 0,
"data": {
"id": "match-2026",
"name": "Example match",
"teamA": "team-a",
"teamB": "team-b"
}
}MatchChange
Alternative schemas: 2
Variant 1
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | no | boolean | enum: [false] | |
data | yes | match | |
Variant 2
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | enum: [true] | |
data | no | object | null | nullable: true; enum: [null] |
Complete dependent schemas: match
Complete original definition:
{
"anyOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
false
]
},
"data": {
"$ref": "#/components/schemas/match"
}
},
"required": [
"id",
"expectedRevision",
"data"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
true
]
},
"data": {
"type": "object",
"nullable": true,
"enum": [
null
]
}
},
"required": [
"id",
"expectedRevision",
"deleted"
]
}
]
}Schema-valid example:
{
"id": "match-2026",
"expectedRevision": 0,
"data": {
"id": "match-2026",
"name": "Example match",
"teamA": "team-a",
"teamB": "team-b"
}
}StartupConfigResource
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
revision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | | |
data | yes | object | null | additionalProperties: false; required: ["id","name","content"]; nullable: true |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"revision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean"
},
"data": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"content": {
"type": "string",
"maxLength": 250000
}
},
"required": [
"id",
"name",
"content"
],
"nullable": true
}
},
"required": [
"id",
"revision",
"deleted",
"data"
]
}Schema-valid example:
{
"id": "config-demo",
"revision": 1,
"deleted": false,
"data": {
"id": "config-demo",
"name": "Example startupConfig",
"content": "echo sOU"
}
}WriteStartupConfig
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
data | yes | startupConfig | |
Complete dependent schemas: startupConfig
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"data": {
"$ref": "#/components/schemas/startupConfig"
}
},
"required": [
"expectedRevision",
"data"
]
}Schema-valid example:
{
"expectedRevision": 0,
"data": {
"id": "config-demo",
"name": "Example startupConfig",
"content": "echo sOU"
}
}StartupConfigChange
Alternative schemas: 2
Variant 1
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | no | boolean | enum: [false] | |
data | yes | startupConfig | |
Variant 2
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | enum: [true] | |
data | no | object | null | nullable: true; enum: [null] |
Complete dependent schemas: startupConfig
Complete original definition:
{
"anyOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
false
]
},
"data": {
"$ref": "#/components/schemas/startupConfig"
}
},
"required": [
"id",
"expectedRevision",
"data"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
true
]
},
"data": {
"type": "object",
"nullable": true,
"enum": [
null
]
}
},
"required": [
"id",
"expectedRevision",
"deleted"
]
}
]
}Schema-valid example:
{
"id": "config-demo",
"expectedRevision": 0,
"data": {
"id": "config-demo",
"name": "Example startupConfig",
"content": "echo sOU"
}
}PanelTemplateResource
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
revision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | | |
data | yes | object | null | additionalProperties: false; required: ["id","hudId","version","values"]; nullable: true |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"revision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean"
},
"data": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"hudId": {
"type": "string",
"minLength": 1
},
"version": {
"type": "string",
"minLength": 1
},
"values": {
"type": "object",
"additionalProperties": true
}
},
"required": [
"id",
"hudId",
"version",
"values"
],
"nullable": true
}
},
"required": [
"id",
"revision",
"deleted",
"data"
]
}Schema-valid example:
{
"id": "template-main",
"revision": 1,
"deleted": false,
"data": {
"id": "template-main",
"hudId": "example-hud",
"version": "1.0.0",
"values": {}
}
}WritePanelTemplate
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
data | yes | panelTemplate | |
Complete dependent schemas: panelTemplate
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"data": {
"$ref": "#/components/schemas/panelTemplate"
}
},
"required": [
"expectedRevision",
"data"
]
}Schema-valid example:
{
"expectedRevision": 0,
"data": {
"id": "template-main",
"hudId": "example-hud",
"version": "1.0.0",
"values": {}
}
}PanelTemplateChange
Alternative schemas: 2
Variant 1
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | no | boolean | enum: [false] | |
data | yes | panelTemplate | |
Variant 2
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | minLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$" | |
expectedRevision | yes | integer | format: "int64"; minimum: 0 | |
deleted | yes | boolean | enum: [true] | |
data | no | object | null | nullable: true; enum: [null] |
Complete dependent schemas: panelTemplate
Complete original definition:
{
"anyOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
false
]
},
"data": {
"$ref": "#/components/schemas/panelTemplate"
}
},
"required": [
"id",
"expectedRevision",
"data"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z0-9_-]\u002B$"
},
"expectedRevision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"deleted": {
"type": "boolean",
"enum": [
true
]
},
"data": {
"type": "object",
"nullable": true,
"enum": [
null
]
}
},
"required": [
"id",
"expectedRevision",
"deleted"
]
}
]
}Schema-valid example:
{
"id": "template-main",
"expectedRevision": 0,
"data": {
"id": "template-main",
"hudId": "example-hud",
"version": "1.0.0",
"values": {}
}
}WorkspaceChanges
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
teams | no | array | maxItems: 5000 | |
players | no | array | maxItems: 5000 | |
competitions | no | array | maxItems: 5000 | |
seasons | no | array | maxItems: 5000 | |
sections | no | array | maxItems: 5000 | |
maps | no | array | maxItems: 5000 | |
mapPools | no | array | maxItems: 5000 | |
matches | no | array | maxItems: 5000 | |
startupConfigs | no | array | maxItems: 5000 | |
panelTemplates | no | array | maxItems: 5000 |
Complete dependent schemas: CompetitionChange · MapChange · MapPoolChange · MatchChange · PanelTemplateChange · PlayerChange · SeasonChange · SectionChange · StartupConfigChange · TeamChange
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"teams": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TeamChange"
},
"maxItems": 5000
},
"players": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayerChange"
},
"maxItems": 5000
},
"competitions": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CompetitionChange"
},
"maxItems": 5000
},
"seasons": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SeasonChange"
},
"maxItems": 5000
},
"sections": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SectionChange"
},
"maxItems": 5000
},
"maps": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MapChange"
},
"maxItems": 5000
},
"mapPools": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MapPoolChange"
},
"maxItems": 5000
},
"matches": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MatchChange"
},
"maxItems": 5000
},
"startupConfigs": {
"type": "array",
"items": {
"$ref": "#/components/schemas/StartupConfigChange"
},
"maxItems": 5000
},
"panelTemplates": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PanelTemplateChange"
},
"maxItems": 5000
}
},
"minProperties": 1
}Schema-valid example:
{
"teams": [
{
"id": "team-a",
"expectedRevision": 0,
"data": {
"id": "team-a",
"name": "Example team"
}
}
]
}WorkspaceSnapshot
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
teams | yes | array | | |
players | yes | array | | |
competitions | yes | array | | |
seasons | yes | array | | |
sections | yes | array | | |
maps | yes | array | | |
mapPools | yes | array | | |
matches | yes | array | | |
startupConfigs | yes | array | | |
panelTemplates | yes | array | |
Complete dependent schemas: CompetitionResource · MapPoolResource · MapResource · MatchResource · PanelTemplateResource · PlayerResource · SeasonResource · SectionResource · StartupConfigResource · TeamResource
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"teams": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TeamResource"
}
},
"players": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PlayerResource"
}
},
"competitions": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CompetitionResource"
}
},
"seasons": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SeasonResource"
}
},
"sections": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SectionResource"
}
},
"maps": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MapResource"
}
},
"mapPools": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MapPoolResource"
}
},
"matches": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MatchResource"
}
},
"startupConfigs": {
"type": "array",
"items": {
"$ref": "#/components/schemas/StartupConfigResource"
}
},
"panelTemplates": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PanelTemplateResource"
}
}
},
"required": [
"teams",
"players",
"competitions",
"seasons",
"sections",
"maps",
"mapPools",
"matches",
"startupConfigs",
"panelTemplates"
]
}Schema-valid example:
{
"teams": [],
"players": [],
"competitions": [],
"seasons": [],
"sections": [],
"maps": [],
"mapPools": [],
"matches": [],
"startupConfigs": [],
"panelTemplates": []
}CheckMedia
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
names | yes | array | | At most 5000 distinct names, 400000 body bytes; duplicates ignored. |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"names": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-f0-9]{64}\\.(png|jpg|gif)$"
},
"description": "At most 5000 distinct names, 400000 body bytes; duplicates ignored."
}
},
"required": [
"names"
]
}Schema-valid example:
{
"names": [
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.png"
]
}MediaPresence
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
missing | yes | array | |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"missing": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"missing"
]
}Schema-valid example:
{
"missing": [
"example"
]
}HudTranslationInput
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
language | yes | string | minLength: 1; maxLength: 63 | BCP 47 language tag, normalized to lowercase. Each populated translated field or media kind requires an English en counterpart. |
description | no | string | null | nullable: true; maxLength: 8000 | Markdown source stored verbatim, including indentation and line breaks; whitespace-only values are empty. Raw HTML is not trusted or executed. |
author | no | string | null | nullable: true; maxLength: 200 | |
authorUrl | no | string | null | nullable: true; maxLength: 2048 | |
imprintUrl | no | string | null | nullable: true; maxLength: 2048 | |
privacyUrl | no | string | null | nullable: true; maxLength: 2048 | |
terms | no | string | null | nullable: true; maxLength: 8000 | Markdown source stored verbatim, including indentation and line breaks; whitespace-only values are empty. Raw HTML is not trusted or executed. On update, null or an omitted value preserves the existing field in a retained language row; an explicit empty string clears it. Omitting a language row removes all of its text fields. |
license | no | string | null | nullable: true; maxLength: 8000 | Markdown source stored verbatim, including indentation and line breaks; whitespace-only values are empty. Raw HTML is not trusted or executed. On update, null or an omitted value preserves the existing field in a retained language row; an explicit empty string clears it. Omitting a language row removes all of its text fields. |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"language": {
"type": "string",
"minLength": 1,
"maxLength": 63,
"description": "BCP 47 language tag, normalized to lowercase. Each populated translated field or media kind requires an English en counterpart."
},
"description": {
"type": "string",
"nullable": true,
"maxLength": 8000,
"description": "Markdown source stored verbatim, including indentation and line breaks; whitespace-only values are empty. Raw HTML is not trusted or executed."
},
"author": {
"type": "string",
"nullable": true,
"maxLength": 200
},
"authorUrl": {
"type": "string",
"nullable": true,
"maxLength": 2048
},
"imprintUrl": {
"type": "string",
"nullable": true,
"maxLength": 2048
},
"privacyUrl": {
"type": "string",
"nullable": true,
"maxLength": 2048
},
"terms": {
"type": "string",
"nullable": true,
"maxLength": 8000,
"description": "Markdown source stored verbatim, including indentation and line breaks; whitespace-only values are empty. Raw HTML is not trusted or executed. On update, null or an omitted value preserves the existing field in a retained language row; an explicit empty string clears it. Omitting a language row removes all of its text fields."
},
"license": {
"type": "string",
"nullable": true,
"maxLength": 8000,
"description": "Markdown source stored verbatim, including indentation and line breaks; whitespace-only values are empty. Raw HTML is not trusted or executed. On update, null or an omitted value preserves the existing field in a retained language row; an explicit empty string clears it. Omitting a language row removes all of its text fields."
}
},
"required": [
"language"
]
}Schema-valid example:
{
"language": "en",
"description": "Example HUD description.",
"author": "Example creator",
"authorUrl": "https://example.com/",
"terms": "Example terms.",
"license": "MIT"
}HudMedia
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | format: "uuid" | |
language | yes | string | minLength: 1; maxLength: 63 | BCP 47 language tag, normalized to lowercase. Each populated translated field or media kind requires an English en counterpart. |
kind | yes | string | enum: ["preview","gallery","demo"] | |
contentType | yes | string | | |
length | yes | integer | format: "int64"; minimum: 1 | |
width | yes | integer | null | format: "int32"; minimum: 1; nullable: true | |
height | yes | integer | null | format: "int32"; minimum: 1; nullable: true | |
position | yes | integer | format: "int32"; minimum: 0 |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"language": {
"type": "string",
"minLength": 1,
"maxLength": 63,
"description": "BCP 47 language tag, normalized to lowercase. Each populated translated field or media kind requires an English en counterpart."
},
"kind": {
"type": "string",
"enum": [
"preview",
"gallery",
"demo"
]
},
"contentType": {
"type": "string"
},
"length": {
"type": "integer",
"format": "int64",
"minimum": 1
},
"width": {
"type": "integer",
"format": "int32",
"minimum": 1,
"nullable": true
},
"height": {
"type": "integer",
"format": "int32",
"minimum": 1,
"nullable": true
},
"position": {
"type": "integer",
"format": "int32",
"minimum": 0
}
},
"required": [
"id",
"language",
"kind",
"contentType",
"length",
"width",
"height",
"position"
]
}Schema-valid example:
{
"id": "55555555-5555-4555-8555-555555555555",
"language": "en",
"kind": "preview",
"contentType": "image/png",
"length": 32768,
"width": 1920,
"height": 900,
"position": 0
}HudTranslation
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
language | yes | string | minLength: 1; maxLength: 63 | BCP 47 language tag, normalized to lowercase. Each populated translated field or media kind requires an English en counterpart. |
description | yes | string | null | nullable: true; maxLength: 8000 | Markdown source stored verbatim, including indentation and line breaks; whitespace-only values are empty. Raw HTML is not trusted or executed. |
author | yes | string | null | nullable: true; maxLength: 200 | |
authorUrl | yes | string | null | nullable: true; maxLength: 2048 | |
imprintUrl | yes | string | null | nullable: true; maxLength: 2048 | |
privacyUrl | yes | string | null | nullable: true; maxLength: 2048 | |
terms | no | string | null | nullable: true; maxLength: 8000 | Markdown source stored verbatim, including indentation and line breaks; whitespace-only values are empty. Raw HTML is not trusted or executed. On update, null or an omitted value preserves the existing field in a retained language row; an explicit empty string clears it. Omitting a language row removes all of its text fields. |
license | no | string | null | nullable: true; maxLength: 8000 | Markdown source stored verbatim, including indentation and line breaks; whitespace-only values are empty. Raw HTML is not trusted or executed. On update, null or an omitted value preserves the existing field in a retained language row; an explicit empty string clears it. Omitting a language row removes all of its text fields. |
preview | yes | anyOf | anyOf: [{"$ref":"#/components/schemas/HudMedia"},{"type":"object","nullable":true,"enum":[null]}] | |
gallery | yes | array | | |
demo | yes | anyOf | anyOf: [{"$ref":"#/components/schemas/HudMedia"},{"type":"object","nullable":true,"enum":[null]}] |
Complete dependent schemas: HudMedia
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"language": {
"type": "string",
"minLength": 1,
"maxLength": 63,
"description": "BCP 47 language tag, normalized to lowercase. Each populated translated field or media kind requires an English en counterpart."
},
"description": {
"type": "string",
"nullable": true,
"maxLength": 8000,
"description": "Markdown source stored verbatim, including indentation and line breaks; whitespace-only values are empty. Raw HTML is not trusted or executed."
},
"author": {
"type": "string",
"nullable": true,
"maxLength": 200
},
"authorUrl": {
"type": "string",
"nullable": true,
"maxLength": 2048
},
"imprintUrl": {
"type": "string",
"nullable": true,
"maxLength": 2048
},
"privacyUrl": {
"type": "string",
"nullable": true,
"maxLength": 2048
},
"terms": {
"type": "string",
"nullable": true,
"maxLength": 8000,
"description": "Markdown source stored verbatim, including indentation and line breaks; whitespace-only values are empty. Raw HTML is not trusted or executed. On update, null or an omitted value preserves the existing field in a retained language row; an explicit empty string clears it. Omitting a language row removes all of its text fields."
},
"license": {
"type": "string",
"nullable": true,
"maxLength": 8000,
"description": "Markdown source stored verbatim, including indentation and line breaks; whitespace-only values are empty. Raw HTML is not trusted or executed. On update, null or an omitted value preserves the existing field in a retained language row; an explicit empty string clears it. Omitting a language row removes all of its text fields."
},
"preview": {
"anyOf": [
{
"$ref": "#/components/schemas/HudMedia"
},
{
"type": "object",
"nullable": true,
"enum": [
null
]
}
]
},
"gallery": {
"type": "array",
"items": {
"$ref": "#/components/schemas/HudMedia"
}
},
"demo": {
"anyOf": [
{
"$ref": "#/components/schemas/HudMedia"
},
{
"type": "object",
"nullable": true,
"enum": [
null
]
}
]
}
},
"required": [
"language",
"description",
"author",
"authorUrl",
"imprintUrl",
"privacyUrl",
"preview",
"gallery",
"demo"
]
}Schema-valid example:
{
"language": "en",
"description": null,
"author": null,
"authorUrl": null,
"imprintUrl": null,
"privacyUrl": null,
"preview": null,
"gallery": [],
"demo": null
}HudDetails
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
revision | yes | integer | format: "int64"; minimum: 0 | |
translations | yes | array | |
Complete dependent schemas: HudTranslation
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"revision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"translations": {
"type": "array",
"items": {
"$ref": "#/components/schemas/HudTranslation"
}
}
},
"required": [
"revision",
"translations"
]
}Schema-valid example:
{
"revision": 1,
"translations": [
{
"language": "en",
"description": null,
"author": null,
"authorUrl": null,
"imprintUrl": null,
"privacyUrl": null,
"preview": null,
"gallery": [],
"demo": null
}
]
}SetHudDetails
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
revision | yes | integer | format: "int64"; minimum: 0 | |
translations | yes | array | maxItems: 256 |
Complete dependent schemas: HudTranslationInput
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"revision": {
"type": "integer",
"format": "int64",
"minimum": 0
},
"translations": {
"type": "array",
"items": {
"$ref": "#/components/schemas/HudTranslationInput"
},
"maxItems": 256
}
},
"required": [
"revision",
"translations"
]
}Schema-valid example:
{
"revision": 0,
"translations": [
{
"language": "en",
"description": "Example HUD description.",
"author": "Example creator",
"authorUrl": "https://example.com/",
"terms": "Example terms.",
"license": "MIT"
}
]
}CreatorHudCreate
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
name | yes | string | minLength: 1; maxLength: 100; pattern: "\\S" | |
visibility | yes | string | enum: ["private","open","approval"] | |
translations | no | array | null | nullable: true; maxItems: 256 |
Complete dependent schemas: HudTranslationInput
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"visibility": {
"type": "string",
"enum": [
"private",
"open",
"approval"
]
},
"translations": {
"type": "array",
"items": {
"$ref": "#/components/schemas/HudTranslationInput"
},
"nullable": true,
"maxItems": 256
}
},
"required": [
"name",
"visibility"
]
}Schema-valid example:
{
"name": "Example HUD",
"visibility": "private",
"translations": [
{
"language": "en",
"description": "Example HUD description.",
"author": "Example creator",
"authorUrl": "https://example.com/",
"terms": "Example terms.",
"license": "MIT"
}
]
}CreatorHud
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | format: "uuid" | |
organizationId | yes | string | format: "uuid" | |
packageId | yes | string | null | nullable: true | |
name | yes | string | minLength: 1; maxLength: 100; pattern: "\\S" | |
visibility | yes | string | enum: ["private","open","approval"] | |
listed | yes | boolean | |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"organizationId": {
"type": "string",
"format": "uuid"
},
"packageId": {
"type": "string",
"nullable": true
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"visibility": {
"type": "string",
"enum": [
"private",
"open",
"approval"
]
},
"listed": {
"type": "boolean"
}
},
"required": [
"id",
"organizationId",
"packageId",
"name",
"visibility",
"listed"
]
}Schema-valid example:
{
"id": "33333333-3333-4333-8333-333333333333",
"organizationId": "22222222-2222-4222-8222-222222222222",
"packageId": null,
"name": "Example HUD",
"visibility": "private",
"listed": false
}CreatorRelease
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
id | yes | string | format: "uuid" | |
hudId | yes | string | format: "uuid" | |
version | yes | string | | |
hash | yes | string | pattern: "^[a-f0-9]{64}$" | |
state | yes | string | enum: ["pending","approved","rejected"] | |
review | yes | string | null | nullable: true |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"hudId": {
"type": "string",
"format": "uuid"
},
"version": {
"type": "string"
},
"hash": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"state": {
"type": "string",
"enum": [
"pending",
"approved",
"rejected"
]
},
"review": {
"type": "string",
"nullable": true
}
},
"required": [
"id",
"hudId",
"version",
"hash",
"state",
"review"
]
}Schema-valid example:
{
"id": "44444444-4444-4444-8444-444444444444",
"hudId": "33333333-3333-4333-8333-333333333333",
"version": "1.0.0",
"hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"state": "pending",
"review": null
}HudGrant
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
hudId | yes | string | format: "uuid" | |
workspaceId | yes | string | format: "uuid" | |
approved | yes | boolean | | |
selectedReleaseId | yes | string | null | format: "uuid"; nullable: true | |
requested | yes | boolean | |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"hudId": {
"type": "string",
"format": "uuid"
},
"workspaceId": {
"type": "string",
"format": "uuid"
},
"approved": {
"type": "boolean"
},
"selectedReleaseId": {
"type": "string",
"format": "uuid",
"nullable": true
},
"requested": {
"type": "boolean"
}
},
"required": [
"hudId",
"workspaceId",
"approved",
"selectedReleaseId",
"requested"
]
}Schema-valid example:
{
"hudId": "33333333-3333-4333-8333-333333333333",
"workspaceId": "11111111-1111-4111-8111-111111111111",
"approved": false,
"selectedReleaseId": null,
"requested": false
}SetHudGrant
| Field | Required | Type / reference | Limits and default | Meaning |
|---|---|---|---|---|
approved | yes | boolean | |
Complete original definition:
{
"type": "object",
"additionalProperties": false,
"properties": {
"approved": {
"type": "boolean"
}
},
"required": [
"approved"
]
}Schema-valid example:
{
"approved": false
}