Go to article Go to contents Go to chapter navigation

sOU uses cookies for sign-in and form protection. There are no analytics or advertising cookies and no third-party tracking.

You can continue immediately. Only if you choose “Hide notice for 180 days” do we also store this preference in your browser.

Workspace and Creator API reference

Every public operation and data schema with permissions, parameters, complete requests, responses, errors and versioning rules.

Updated: 28 October 2026 · approx. 118 minute read

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

Method and pathoperationId
GET /api/v1/integration/workspaces/{workspace}/snapshotgetWorkspaceSnapshot
POST /api/v1/integration/workspaces/{workspace}/changesapplyWorkspaceChanges
POST /api/v1/integration/workspaces/{workspace}/media/checkcheckWorkspaceMedia
GET /api/v1/integration/workspaces/{workspace}/media/{name}downloadWorkspaceMedia
PUT /api/v1/integration/workspaces/{workspace}/media/{name}uploadWorkspaceMedia
GET /api/v1/integration/workspaces/{workspace}/teamslistTeams
GET /api/v1/integration/workspaces/{workspace}/teams/{id}getTeam
PUT /api/v1/integration/workspaces/{workspace}/teams/{id}writeTeam
DELETE /api/v1/integration/workspaces/{workspace}/teams/{id}deleteTeam
GET /api/v1/integration/workspaces/{workspace}/playerslistPlayers
GET /api/v1/integration/workspaces/{workspace}/players/{id}getPlayer
PUT /api/v1/integration/workspaces/{workspace}/players/{id}writePlayer
DELETE /api/v1/integration/workspaces/{workspace}/players/{id}deletePlayer
GET /api/v1/integration/workspaces/{workspace}/competitionslistCompetitions
GET /api/v1/integration/workspaces/{workspace}/competitions/{id}getCompetition
PUT /api/v1/integration/workspaces/{workspace}/competitions/{id}writeCompetition
DELETE /api/v1/integration/workspaces/{workspace}/competitions/{id}deleteCompetition
GET /api/v1/integration/workspaces/{workspace}/seasonslistSeasons
GET /api/v1/integration/workspaces/{workspace}/seasons/{id}getSeason
PUT /api/v1/integration/workspaces/{workspace}/seasons/{id}writeSeason
DELETE /api/v1/integration/workspaces/{workspace}/seasons/{id}deleteSeason
GET /api/v1/integration/workspaces/{workspace}/sectionslistSections
GET /api/v1/integration/workspaces/{workspace}/sections/{id}getSection
PUT /api/v1/integration/workspaces/{workspace}/sections/{id}writeSection
DELETE /api/v1/integration/workspaces/{workspace}/sections/{id}deleteSection
GET /api/v1/integration/workspaces/{workspace}/mapslistMaps
GET /api/v1/integration/workspaces/{workspace}/maps/{id}getMap
PUT /api/v1/integration/workspaces/{workspace}/maps/{id}writeMap
DELETE /api/v1/integration/workspaces/{workspace}/maps/{id}deleteMap
GET /api/v1/integration/workspaces/{workspace}/map-poolslistMapPools
GET /api/v1/integration/workspaces/{workspace}/map-pools/{id}getMapPool
PUT /api/v1/integration/workspaces/{workspace}/map-pools/{id}writeMapPool
DELETE /api/v1/integration/workspaces/{workspace}/map-pools/{id}deleteMapPool
GET /api/v1/integration/workspaces/{workspace}/matcheslistMatchs
GET /api/v1/integration/workspaces/{workspace}/matches/{id}getMatch
PUT /api/v1/integration/workspaces/{workspace}/matches/{id}writeMatch
DELETE /api/v1/integration/workspaces/{workspace}/matches/{id}deleteMatch
GET /api/v1/integration/workspaces/{workspace}/startup-configslistStartupConfigs
GET /api/v1/integration/workspaces/{workspace}/startup-configs/{id}getStartupConfig
PUT /api/v1/integration/workspaces/{workspace}/startup-configs/{id}writeStartupConfig
DELETE /api/v1/integration/workspaces/{workspace}/startup-configs/{id}deleteStartupConfig
GET /api/v1/integration/workspaces/{workspace}/panel-templateslistPanelTemplates
GET /api/v1/integration/workspaces/{workspace}/panel-templates/{id}getPanelTemplate
PUT /api/v1/integration/workspaces/{workspace}/panel-templates/{id}writePanelTemplate
DELETE /api/v1/integration/workspaces/{workspace}/panel-templates/{id}deletePanelTemplate
GET /api/v1/integration/organizations/{organization}/hudslistCreatorHuds
POST /api/v1/integration/organizations/{organization}/hudscreateCreatorHud
GET /api/v1/integration/organizations/{organization}/huds/{hud}getCreatorHud
GET /api/v1/integration/organizations/{organization}/huds/{hud}/detailsgetCreatorHudDetails
PUT /api/v1/integration/organizations/{organization}/huds/{hud}/detailssetCreatorHudDetails
POST /api/v1/integration/organizations/{organization}/huds/{hud}/media/{language}/{kind}uploadCreatorHudMedia
GET /api/v1/integration/organizations/{organization}/huds/{hud}/media/{media}getCreatorHudMedia
DELETE /api/v1/integration/organizations/{organization}/huds/{hud}/media/{media}deleteCreatorHudMedia
GET /api/v1/integration/organizations/{organization}/huds/{hud}/grantslistCreatorHudGrants
GET /api/v1/integration/organizations/{organization}/huds/{hud}/requestslistCreatorHudRequests
PUT /api/v1/integration/organizations/{organization}/huds/{hud}/grants/{workspace}setCreatorHudGrant
GET /api/v1/integration/organizations/{organization}/huds/{hud}/releaseslistCreatorReleases
POST /api/v1/integration/organizations/{organization}/huds/{hud}/releasesuploadCreatorRelease
GET /api/v1/integration/organizations/{organization}/huds/{hud}/releases/{release}getCreatorRelease

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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"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

HTTPMeaningResponse headers
200Collections from one workspace snapshot.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"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 $body

Responses

HTTPMeaningResponse headers
200Full typed snapshot after commit.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
409Revision or database conflict; reload and reconcile.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"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 $body

Responses

HTTPMeaningResponse headers
200Only missing names.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
namepathyes{"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

HTTPMeaningResponse headers
200Image bytes.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Image not found.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
namepathyes{"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 $file

Responses

HTTPMeaningResponse headers
204Stored in this workspace.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"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

HTTPMeaningResponse headers
200Typed collection with per-entity revisions.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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

HTTPMeaningResponse headers
200Typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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 $body

Responses

HTTPMeaningResponse headers
200Committed typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
409Stale revision or database conflict; reload and reconcile.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"}"team-a"
expectedRevisionqueryyes{"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

HTTPMeaningResponse headers
200Tombstone with null data and incremented revision.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
409Stale revision or database conflict.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"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

HTTPMeaningResponse headers
200Typed collection with per-entity revisions.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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

HTTPMeaningResponse headers
200Typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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 $body

Responses

HTTPMeaningResponse headers
200Committed typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
409Stale revision or database conflict; reload and reconcile.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"type":"string","pattern":"^[0-9]{17}$"}"76561198000000001"
expectedRevisionqueryyes{"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

HTTPMeaningResponse headers
200Tombstone with null data and incremented revision.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
409Stale revision or database conflict.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"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

HTTPMeaningResponse headers
200Typed collection with per-entity revisions.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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

HTTPMeaningResponse headers
200Typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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 $body

Responses

HTTPMeaningResponse headers
200Committed typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
409Stale revision or database conflict; reload and reconcile.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"}"competition-2026"
expectedRevisionqueryyes{"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

HTTPMeaningResponse headers
200Tombstone with null data and incremented revision.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
409Stale revision or database conflict.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"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

HTTPMeaningResponse headers
200Typed collection with per-entity revisions.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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

HTTPMeaningResponse headers
200Typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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 $body

Responses

HTTPMeaningResponse headers
200Committed typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
409Stale revision or database conflict; reload and reconcile.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"}"season-2026"
expectedRevisionqueryyes{"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

HTTPMeaningResponse headers
200Tombstone with null data and incremented revision.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
409Stale revision or database conflict.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"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

HTTPMeaningResponse headers
200Typed collection with per-entity revisions.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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

HTTPMeaningResponse headers
200Typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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 $body

Responses

HTTPMeaningResponse headers
200Committed typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
409Stale revision or database conflict; reload and reconcile.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"}"section-2026"
expectedRevisionqueryyes{"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

HTTPMeaningResponse headers
200Tombstone with null data and incremented revision.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
409Stale revision or database conflict.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"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

HTTPMeaningResponse headers
200Typed collection with per-entity revisions.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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

HTTPMeaningResponse headers
200Typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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 $body

Responses

HTTPMeaningResponse headers
200Committed typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
409Stale revision or database conflict; reload and reconcile.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"}"map-dust2"
expectedRevisionqueryyes{"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

HTTPMeaningResponse headers
200Tombstone with null data and incremented revision.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
409Stale revision or database conflict.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"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

HTTPMeaningResponse headers
200Typed collection with per-entity revisions.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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

HTTPMeaningResponse headers
200Typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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 $body

Responses

HTTPMeaningResponse headers
200Committed typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
409Stale revision or database conflict; reload and reconcile.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"}"pool-main"
expectedRevisionqueryyes{"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

HTTPMeaningResponse headers
200Tombstone with null data and incremented revision.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
409Stale revision or database conflict.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"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

HTTPMeaningResponse headers
200Typed collection with per-entity revisions.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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

HTTPMeaningResponse headers
200Typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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 $body

Responses

HTTPMeaningResponse headers
200Committed typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
409Stale revision or database conflict; reload and reconcile.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"}"match-2026"
expectedRevisionqueryyes{"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

HTTPMeaningResponse headers
200Tombstone with null data and incremented revision.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
409Stale revision or database conflict.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"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

HTTPMeaningResponse headers
200Typed collection with per-entity revisions.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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

HTTPMeaningResponse headers
200Typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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 $body

Responses

HTTPMeaningResponse headers
200Committed typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
409Stale revision or database conflict; reload and reconcile.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"}"config-demo"
expectedRevisionqueryyes{"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

HTTPMeaningResponse headers
200Tombstone with null data and incremented revision.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
409Stale revision or database conflict.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"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

HTTPMeaningResponse headers
200Typed collection with per-entity revisions.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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

HTTPMeaningResponse headers
200Typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"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 $body

Responses

HTTPMeaningResponse headers
200Committed typed resource.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
409Stale revision or database conflict; reload and reconcile.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
workspacepathyes{"type":"string","format":"uuid"}"11111111-1111-4111-8111-111111111111"
idpathyes{"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9_-]\u002B$"}"template-main"
expectedRevisionqueryyes{"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

HTTPMeaningResponse headers
200Tombstone with null data and incremented revision.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong workspace, insufficient key scope, or current workspace role.—
404Identity has never existed.—
409Stale revision or database conflict.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
organizationpathyes{"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

HTTPMeaningResponse headers
200Organization-scoped creator resource.—
400Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong organization, insufficient creator key scope or missing current explicit Publisher permission.—
404HUD, media or release not found within the bound organization.—
409Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying.—
413Request body exceeds the endpoint limit.—
415Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
organizationpathyes{"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 $body

Responses

HTTPMeaningResponse headers
200Organization-scoped creator resource.—
400Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong organization, insufficient creator key scope or missing current explicit Publisher permission.—
404HUD, media or release not found within the bound organization.—
409Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying.—
413Request body exceeds the endpoint limit.—
415Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
organizationpathyes{"type":"string","format":"uuid"}"22222222-2222-4222-8222-222222222222"
hudpathyes{"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

HTTPMeaningResponse headers
200Organization-scoped creator resource.—
400Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong organization, insufficient creator key scope or missing current explicit Publisher permission.—
404HUD, media or release not found within the bound organization.—
409Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying.—
413Request body exceeds the endpoint limit.—
415Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
organizationpathyes{"type":"string","format":"uuid"}"22222222-2222-4222-8222-222222222222"
hudpathyes{"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

HTTPMeaningResponse headers
200Organization-scoped creator resource.—
400Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong organization, insufficient creator key scope or missing current explicit Publisher permission.—
404HUD, media or release not found within the bound organization.—
409Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying.—
413Request body exceeds the endpoint limit.—
415Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
organizationpathyes{"type":"string","format":"uuid"}"22222222-2222-4222-8222-222222222222"
hudpathyes{"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 $body

Responses

HTTPMeaningResponse headers
200Organization-scoped creator resource.—
400Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong organization, insufficient creator key scope or missing current explicit Publisher permission.—
404HUD, media or release not found within the bound organization.—
409Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying.—
413Request body exceeds the endpoint limit.—
415Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
organizationpathyes{"type":"string","format":"uuid"}"22222222-2222-4222-8222-222222222222"
hudpathyes{"type":"string","format":"uuid"}"33333333-3333-4333-8333-333333333333"
languagepathyes{"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"
kindpathyes{"type":"string","enum":["preview","gallery","demo"]}"preview"
expectedRevisionqueryyes{"type":"integer","format":"int64","minimum":0}0
Content-Dispositionheaderno{"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

HTTPMeaningResponse headers
200Organization-scoped creator resource.—
400Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong organization, insufficient creator key scope or missing current explicit Publisher permission.—
404HUD, media or release not found within the bound organization.—
409Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying.—
413Request body exceeds the endpoint limit.—
415Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
organizationpathyes{"type":"string","format":"uuid"}"22222222-2222-4222-8222-222222222222"
hudpathyes{"type":"string","format":"uuid"}"33333333-3333-4333-8333-333333333333"
mediapathyes{"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

HTTPMeaningResponse headers
200Media bytes with the validated image or MP4 content type.—
400Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong organization, insufficient creator key scope or missing current explicit Publisher permission.—
404HUD, media or release not found within the bound organization.—
409Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying.—
413Request body exceeds the endpoint limit.—
415Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
organizationpathyes{"type":"string","format":"uuid"}"22222222-2222-4222-8222-222222222222"
hudpathyes{"type":"string","format":"uuid"}"33333333-3333-4333-8333-333333333333"
mediapathyes{"type":"string","format":"uuid"}"55555555-5555-4555-8555-555555555555"
expectedRevisionqueryyes{"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

HTTPMeaningResponse headers
200Organization-scoped creator resource.—
400Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong organization, insufficient creator key scope or missing current explicit Publisher permission.—
404HUD, media or release not found within the bound organization.—
409Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying.—
413Request body exceeds the endpoint limit.—
415Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
organizationpathyes{"type":"string","format":"uuid"}"22222222-2222-4222-8222-222222222222"
hudpathyes{"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

HTTPMeaningResponse headers
200Organization-scoped creator resource.—
400Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong organization, insufficient creator key scope or missing current explicit Publisher permission.—
404HUD, media or release not found within the bound organization.—
409Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying.—
413Request body exceeds the endpoint limit.—
415Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
organizationpathyes{"type":"string","format":"uuid"}"22222222-2222-4222-8222-222222222222"
hudpathyes{"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

HTTPMeaningResponse headers
200Organization-scoped creator resource.—
400Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong organization, insufficient creator key scope or missing current explicit Publisher permission.—
404HUD, media or release not found within the bound organization.—
409Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying.—
413Request body exceeds the endpoint limit.—
415Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
organizationpathyes{"type":"string","format":"uuid"}"22222222-2222-4222-8222-222222222222"
hudpathyes{"type":"string","format":"uuid"}"33333333-3333-4333-8333-333333333333"
workspacepathyes{"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 $body

Responses

HTTPMeaningResponse headers
204Workspace grant saved; request marked handled.—
400Malformed JSON, invalid schema, reference, identity, or document kind.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Insufficient creator key scope or missing current Publisher permission.—
404HUD is outside the bound organization or workspace does not exist.—
409Concurrent change; read the current grants before retrying.—
413Request body exceeds the endpoint limit.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
organizationpathyes{"type":"string","format":"uuid"}"22222222-2222-4222-8222-222222222222"
hudpathyes{"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

HTTPMeaningResponse headers
200Organization-scoped creator resource.—
400Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong organization, insufficient creator key scope or missing current explicit Publisher permission.—
404HUD, media or release not found within the bound organization.—
409Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying.—
413Request body exceeds the endpoint limit.—
415Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
organizationpathyes{"type":"string","format":"uuid"}"22222222-2222-4222-8222-222222222222"
hudpathyes{"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

HTTPMeaningResponse headers
200Organization-scoped creator resource.—
400Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong organization, insufficient creator key scope or missing current explicit Publisher permission.—
404HUD, media or release not found within the bound organization.—
409Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying.—
413Request body exceeds the endpoint limit.—
415Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

NameLocationRequiredType and limitsMeaningExample
organizationpathyes{"type":"string","format":"uuid"}"22222222-2222-4222-8222-222222222222"
hudpathyes{"type":"string","format":"uuid"}"33333333-3333-4333-8333-333333333333"
releasepathyes{"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

HTTPMeaningResponse headers
200Organization-scoped creator resource.—
400Malformed JSON, unsupported fields, missing English counterpart or invalid HUD content.—
401Missing, invalid, expired, revoked key or disabled account; WWW-Authenticate: Bearer.—
403Wrong organization, insufficient creator key scope or missing current explicit Publisher permission.—
404HUD, media or release not found within the bound organization.—
409Stale details revision, immutable version, package identity or concurrent database conflict; inspect the current state before retrying.—
413Request body exceeds the endpoint limit.—
415Unsupported media type. Packages require application/octet-stream; listing media require their validated image or MP4 type.—
429120 requests per minute per key owner; shared across their keys. Retry after the Retry-After interval.Retry-After: {"type":"string"} — Seconds until retry (60).
500Unexpected 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
nameyesstringminLength: 1; maxLength: 100; pattern: "\\S"
shortNamenostringmaxLength: 16
logonostring | nullnullable: true; pattern: "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$"
faceitIdnostring | nullnullable: true
dachcsIdnostring | nullnullable: 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

FieldRequiredType / referenceLimits and defaultMeaning
steamIdyesstringpattern: "^[0-9]{17}$"
nameyesstringminLength: 1; maxLength: 100; pattern: "\\S"
teamIdnostring | nullminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"; nullable: true
avatarnostring | nullnullable: true; pattern: "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$"
isCoachnoboolean

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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
nameyesstringminLength: 1; maxLength: 100; pattern: "\\S"
logonostring | nullnullable: true; pattern: "^/cast-media/[a-f0-9]{64}\\.(png|jpg)$"
sponsorsnoarray

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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
nameyesstringminLength: 1; maxLength: 100; pattern: "\\S"
competitionIdyesstringminLength: 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
nameyesstringminLength: 1; maxLength: 100; pattern: "\\S"
competitionIdyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
seasonIdnostring | nullminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"; nullable: true
parentIdnostring | nullminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"; nullable: true
kindnointegerformat: "int32"; minimum: 1; maximum: 61 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
nameyesstringminLength: 1; maxLength: 100; pattern: "\\S"
gameNameyesstringminLength: 1; maxLength: 128; pattern: "^[a-z0-9_][a-z0-9_/-]*$"
logonostring | nullnullable: true; pattern: "^/cast-media/[a-f0-9]{64}\\.(png|jpg|gif)$"
backgroundnostring | nullnullable: 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
nameyesstringminLength: 1; maxLength: 100; pattern: "\\S"
mapIdsnoarrayuniqueItems: 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
nameyesstringminLength: 1; maxLength: 100; pattern: "\\S"
startsAtnostring | nullformat: "date-time"; nullable: true
competitionIdnostring | nullminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"; nullable: true
seasonIdnostring | nullminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"; nullable: true
competitionSectionIdnostring | nullminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"; nullable: true
competitionRoundnostring | nullnullable: true; maxLength: 100
faceitIdnostring | nullnullable: true
dachcsIdnostring | nullnullable: true
teamAyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
teamByesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
bestOfnointegerformat: "int32"; minimum: 1; enum: [1,3,5,7]; default: 3
mapPoolIdnostring | nullminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"; nullable: true
winsAnointegerformat: "int32"; minimum: 0
winsBnointegerformat: "int32"; minimum: 0
mapIdsnoarrayuniqueItems: true
mapResultsnoarray | nullnullable: true
vetosnoarray

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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
nameyesstringminLength: 1; maxLength: 100; pattern: "\\S"
contentyesstringmaxLength: 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
hudIdyesstringminLength: 1
versionyesstringminLength: 1
valuesyesobjectadditionalProperties: 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
nameyesstringminLength: 1; maxLength: 100; pattern: "\\S"
imageyesstringnullable: 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

FieldRequiredType / referenceLimits and defaultMeaning
mapIdyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
typeyesintegerformat: "int32"; minimum: 0; maximum: 30 Unknown, 1 Pick, 2 Ban, 3 Decider.
teamIdnostring | nullminLength: 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

FieldRequiredType / referenceLimits and defaultMeaning
mapIdyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
statusnointegerformat: "int32"; minimum: 1; maximum: 3; default: 11 Pending, 2 Live, 3 Completed.
scoreAnointeger | nullformat: "int32"; minimum: 0; nullable: true
scoreBnointeger | nullformat: "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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
revisionyesintegerformat: "int64"; minimum: 0
deletedyesboolean
datayesobject | nulladditionalProperties: 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

FieldRequiredType / referenceLimits and defaultMeaning
expectedRevisionyesintegerformat: "int64"; minimum: 0
datayesteam

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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletednobooleanenum: [false]
datayesteam

Variant 2

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletedyesbooleanenum: [true]
datanoobject | nullnullable: 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringpattern: "^[0-9]{17}$"
revisionyesintegerformat: "int64"; minimum: 0
deletedyesboolean
datayesobject | nulladditionalProperties: 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

FieldRequiredType / referenceLimits and defaultMeaning
expectedRevisionyesintegerformat: "int64"; minimum: 0
datayesplayer

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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringpattern: "^[0-9]{17}$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletednobooleanenum: [false]
datayesplayer

Variant 2

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringpattern: "^[0-9]{17}$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletedyesbooleanenum: [true]
datanoobject | nullnullable: 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
revisionyesintegerformat: "int64"; minimum: 0
deletedyesboolean
datayesobject | nulladditionalProperties: 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

FieldRequiredType / referenceLimits and defaultMeaning
expectedRevisionyesintegerformat: "int64"; minimum: 0
datayescompetition

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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletednobooleanenum: [false]
datayescompetition

Variant 2

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletedyesbooleanenum: [true]
datanoobject | nullnullable: 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
revisionyesintegerformat: "int64"; minimum: 0
deletedyesboolean
datayesobject | nulladditionalProperties: 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

FieldRequiredType / referenceLimits and defaultMeaning
expectedRevisionyesintegerformat: "int64"; minimum: 0
datayesseason

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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletednobooleanenum: [false]
datayesseason

Variant 2

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletedyesbooleanenum: [true]
datanoobject | nullnullable: 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
revisionyesintegerformat: "int64"; minimum: 0
deletedyesboolean
datayesobject | nulladditionalProperties: 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

FieldRequiredType / referenceLimits and defaultMeaning
expectedRevisionyesintegerformat: "int64"; minimum: 0
datayessection

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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletednobooleanenum: [false]
datayessection

Variant 2

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletedyesbooleanenum: [true]
datanoobject | nullnullable: 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
revisionyesintegerformat: "int64"; minimum: 0
deletedyesboolean
datayesobject | nulladditionalProperties: 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

FieldRequiredType / referenceLimits and defaultMeaning
expectedRevisionyesintegerformat: "int64"; minimum: 0
datayesmap

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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletednobooleanenum: [false]
datayesmap

Variant 2

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletedyesbooleanenum: [true]
datanoobject | nullnullable: 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
revisionyesintegerformat: "int64"; minimum: 0
deletedyesboolean
datayesobject | nulladditionalProperties: 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

FieldRequiredType / referenceLimits and defaultMeaning
expectedRevisionyesintegerformat: "int64"; minimum: 0
datayesmapPool

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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletednobooleanenum: [false]
datayesmapPool

Variant 2

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletedyesbooleanenum: [true]
datanoobject | nullnullable: 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
revisionyesintegerformat: "int64"; minimum: 0
deletedyesboolean
datayesobject | nulladditionalProperties: 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

FieldRequiredType / referenceLimits and defaultMeaning
expectedRevisionyesintegerformat: "int64"; minimum: 0
datayesmatch

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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletednobooleanenum: [false]
datayesmatch

Variant 2

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletedyesbooleanenum: [true]
datanoobject | nullnullable: 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
revisionyesintegerformat: "int64"; minimum: 0
deletedyesboolean
datayesobject | nulladditionalProperties: 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

FieldRequiredType / referenceLimits and defaultMeaning
expectedRevisionyesintegerformat: "int64"; minimum: 0
datayesstartupConfig

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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletednobooleanenum: [false]
datayesstartupConfig

Variant 2

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletedyesbooleanenum: [true]
datanoobject | nullnullable: 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
revisionyesintegerformat: "int64"; minimum: 0
deletedyesboolean
datayesobject | nulladditionalProperties: 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

FieldRequiredType / referenceLimits and defaultMeaning
expectedRevisionyesintegerformat: "int64"; minimum: 0
datayespanelTemplate

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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletednobooleanenum: [false]
datayespanelTemplate

Variant 2

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringminLength: 1; maxLength: 100; pattern: "^[A-Za-z0-9_-]\u002B$"
expectedRevisionyesintegerformat: "int64"; minimum: 0
deletedyesbooleanenum: [true]
datanoobject | nullnullable: 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

FieldRequiredType / referenceLimits and defaultMeaning
teamsnoarraymaxItems: 5000
playersnoarraymaxItems: 5000
competitionsnoarraymaxItems: 5000
seasonsnoarraymaxItems: 5000
sectionsnoarraymaxItems: 5000
mapsnoarraymaxItems: 5000
mapPoolsnoarraymaxItems: 5000
matchesnoarraymaxItems: 5000
startupConfigsnoarraymaxItems: 5000
panelTemplatesnoarraymaxItems: 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

FieldRequiredType / referenceLimits and defaultMeaning
teamsyesarray
playersyesarray
competitionsyesarray
seasonsyesarray
sectionsyesarray
mapsyesarray
mapPoolsyesarray
matchesyesarray
startupConfigsyesarray
panelTemplatesyesarray

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

FieldRequiredType / referenceLimits and defaultMeaning
namesyesarrayAt 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

FieldRequiredType / referenceLimits and defaultMeaning
missingyesarray

Complete original definition:

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "missing": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "missing"
  ]
}

Schema-valid example:

{
  "missing": [
    "example"
  ]
}

HudTranslationInput

FieldRequiredType / referenceLimits and defaultMeaning
languageyesstringminLength: 1; maxLength: 63BCP 47 language tag, normalized to lowercase. Each populated translated field or media kind requires an English en counterpart.
descriptionnostring | nullnullable: true; maxLength: 8000Markdown source stored verbatim, including indentation and line breaks; whitespace-only values are empty. Raw HTML is not trusted or executed.
authornostring | nullnullable: true; maxLength: 200
authorUrlnostring | nullnullable: true; maxLength: 2048
imprintUrlnostring | nullnullable: true; maxLength: 2048
privacyUrlnostring | nullnullable: true; maxLength: 2048
termsnostring | nullnullable: true; maxLength: 8000Markdown 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.
licensenostring | nullnullable: true; maxLength: 8000Markdown 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringformat: "uuid"
languageyesstringminLength: 1; maxLength: 63BCP 47 language tag, normalized to lowercase. Each populated translated field or media kind requires an English en counterpart.
kindyesstringenum: ["preview","gallery","demo"]
contentTypeyesstring
lengthyesintegerformat: "int64"; minimum: 1
widthyesinteger | nullformat: "int32"; minimum: 1; nullable: true
heightyesinteger | nullformat: "int32"; minimum: 1; nullable: true
positionyesintegerformat: "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

FieldRequiredType / referenceLimits and defaultMeaning
languageyesstringminLength: 1; maxLength: 63BCP 47 language tag, normalized to lowercase. Each populated translated field or media kind requires an English en counterpart.
descriptionyesstring | nullnullable: true; maxLength: 8000Markdown source stored verbatim, including indentation and line breaks; whitespace-only values are empty. Raw HTML is not trusted or executed.
authoryesstring | nullnullable: true; maxLength: 200
authorUrlyesstring | nullnullable: true; maxLength: 2048
imprintUrlyesstring | nullnullable: true; maxLength: 2048
privacyUrlyesstring | nullnullable: true; maxLength: 2048
termsnostring | nullnullable: true; maxLength: 8000Markdown 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.
licensenostring | nullnullable: true; maxLength: 8000Markdown 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.
previewyesanyOfanyOf: [{"$ref":"#/components/schemas/HudMedia"},{"type":"object","nullable":true,"enum":[null]}]
galleryyesarray
demoyesanyOfanyOf: [{"$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

FieldRequiredType / referenceLimits and defaultMeaning
revisionyesintegerformat: "int64"; minimum: 0
translationsyesarray

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

FieldRequiredType / referenceLimits and defaultMeaning
revisionyesintegerformat: "int64"; minimum: 0
translationsyesarraymaxItems: 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

FieldRequiredType / referenceLimits and defaultMeaning
nameyesstringminLength: 1; maxLength: 100; pattern: "\\S"
visibilityyesstringenum: ["private","open","approval"]
translationsnoarray | nullnullable: 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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringformat: "uuid"
organizationIdyesstringformat: "uuid"
packageIdyesstring | nullnullable: true
nameyesstringminLength: 1; maxLength: 100; pattern: "\\S"
visibilityyesstringenum: ["private","open","approval"]
listedyesboolean

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

FieldRequiredType / referenceLimits and defaultMeaning
idyesstringformat: "uuid"
hudIdyesstringformat: "uuid"
versionyesstring
hashyesstringpattern: "^[a-f0-9]{64}$"
stateyesstringenum: ["pending","approved","rejected"]
reviewyesstring | nullnullable: 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

FieldRequiredType / referenceLimits and defaultMeaning
hudIdyesstringformat: "uuid"
workspaceIdyesstringformat: "uuid"
approvedyesboolean
selectedReleaseIdyesstring | nullformat: "uuid"; nullable: true
requestedyesboolean

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

FieldRequiredType / referenceLimits and defaultMeaning
approvedyesboolean

Complete original definition:

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "approved": {
      "type": "boolean"
    }
  },
  "required": [
    "approved"
  ]
}

Schema-valid example:

{
  "approved": false
}
Back to top

Image viewer