Download OpenAPI specification:
FlowState is an enterprise sports-team asset generation platform. This API lets you operate FlowState programmatically with your organization's API key: create and manage templates, render single or batch assets, manage your sports-data entities, push data in through signed webhooks, and publish rendered assets to your destinations.
Every endpoint is authenticated with a per-organization API key sent in the x-api-key
header. Keys are generated by an org admin in the dashboard under Config -> API.
GET /api/v1/templates HTTP/1.1
Host: flowstate.bot
x-api-key: your_api_key_here
A request without a valid key returns 401. The key resolves your organization, and
every resource you read or write is scoped to that organization automatically.
API keys carry a list of scopes. Each operation below documents the scope it requires in its description. The available scopes are:
| Scope | Grants |
|---|---|
read:jobs |
Read render jobs and their status |
write:jobs |
Create, rerun, publish and delete render jobs (incl. renders and batches) |
read:templates |
Read templates, versions, variants and sets |
write:templates |
Create, update and publish templates; delete versions, variants and sets. Deleting a template itself needs admin:org |
read:destinations |
Read publishing destinations |
read:channel |
Poll and download one distribution channel's feed (channel subscriber keys; the key is bound to exactly one channel) |
admin:org |
Super-scope: grants every other scope |
Operations marked (any key) have no granular scope yet (the entity endpoints). They accept a
key with an empty scope list or a key with admin:org. A key that carries specific
scopes (for example only read:templates) is restricted to operations that require one of
its scopes and receives 403 with error code api_key_scope_required on any (any key)
operation. A 403 with { "error": "Insufficient API key scope", "required": [...], "missing": [...] }
is returned when a key lacks the scope an operation needs.
https://flowstate.botsnake_case (for example template_id, created_at).
The destination endpoints return raw payloads in camelCase; the affected fields are
documented as-is in each schema.{ "object": "<type>", "data": { ... } }.{ "object": "list", "data": [ ... ], "has_more": <bool>, "next_cursor": <string|null> },
sometimes with extra fields such as total or stats.{ success: true } envelope: the destination endpoints use a flatter
{ "success": true, ... } shape instead of the item/list envelope.{ "error": { "type", "code", "message", "param" } }.
In production, 5xx messages are generic; scope and legacy { success: false } errors use a
flatter shape (see the Scopes section)./api/v1 requests accept an optional Idempotency-Key header;
a replay with the same key returns the original response.GET),
write (POST/PUT/PATCH/DELETE) and render (/renders/sync).
Depending on the route, a limit applies per API key or per client IP. The channel feed
(/channel/...) adds a quota per API key on top (see the Channel Feed tag). Exceeding a limit
returns 429 in the standard error envelope (type: rate_limit_error,
code: rate_limited) with a Retry-After header (seconds until the window resets);
RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset describe the current window.Render a single asset and return the resulting PNG directly in the response body.
Requires the write:jobs scope. Image inputs are supplied either as uploaded files
(one part per template field) or as URL fields named <fieldId>_url.
| template | string Template id or slug. Defaults to |
| team_name | string |
| variant_id | string |
| standings_league_id | string League id for a standings render. Stamps |
| color | string Legacy templates - team colour (hex). |
| logo | string <binary> Legacy templates - logo image file. |
{- "error": {
- "type": "invalid_request_error",
- "code": "missing_field",
- "message": "string",
- "param": "string"
}
}Create a render job from a template. Requires the write:jobs scope.
| template_id required | string <uuid> |
object Field values for the template. | |
| variant_id | string or null <uuid> |
| output_format | string Default: "png" Enum: "png" "pdf"
|
{- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "data": { },
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "output_format": "png"
}{- "object": "job",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "variant_version_id": "8e18aff9-0b88-4926-addf-80dd9734f953",
- "template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
- "team_id": "810007d0-bec5-486c-b5d1-28fcd8a079ba",
- "status": "pending",
- "output_url": "string",
- "output_status": "string",
- "output_archived_at": "2019-08-24T14:15:22Z",
- "thumbnail_url": "string",
- "error_log": "string",
- "progress": {
- "stage": "string",
- "percent": 0,
- "message": "string",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "content_type": "image",
- "source": "manual",
- "team_name": "string",
- "opponent_name": "string",
- "league": "string",
- "match_label": "string",
- "match_date": "string",
- "input_data": { },
- "publish_status": { },
- "runtime_ms": 0,
- "created_by": "string",
- "created_by_name": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Permanently delete a set of jobs by id, together with their rendered files. Files that are still used elsewhere, for example by a Club Hub asset, are kept. Requires the write:jobs scope.
| jobIds required | Array of strings <uuid> non-empty [ items <uuid > ] |
{- "jobIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "object": "bulk_operation",
- "data": {
- "deleted": 0
}
}Publish a set of completed jobs to the same destinations in one request.
Requires the write:jobs scope.
Like the single-job publish endpoint this only enqueues the work and
answers 202; delivery happens asynchronously. Jobs that cannot be
published are not an error - they come back under skipped with a
reason (not_found, not_completed, no_output), where not_found
also covers ids belonging to another organization.
Poll /api/v1/jobs/publish-status for the per-destination outcome.
When the organization limits approval (Dispatch settings,
approval.mode other than anyone), only approvers may publish to a
social destination; everyone else gets 403 approval_required.
Storage destinations (S3, Drive, email, webhook) are not affected.
| jobIds required | Array of strings <uuid> [ 1 .. 100 ] items [ items <uuid > ] |
| destinationIds required | Array of strings <uuid> non-empty [ items <uuid > ] |
{- "jobIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "destinationIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "object": "bulk_publish_action",
- "data": {
- "queued": 0,
- "job_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "destination_count": 0,
- "skipped": [
- {
- "job_id": "453bd7d7-5355-4d6d-a38e-d9e7eb218c3f",
- "reason": "not_found"
}
]
}
}Per-destination publish result for up to 100 jobs. Requires the
read:jobs scope.
publish_status stays null until the asynchronous publish has
finished, which makes this the honest answer to "did it publish?" - the
publish endpoints themselves only ever confirm that the work was queued.
A job published earlier still carries the record of that run, so compare
published_at against what the job had before you queued.
| ids required | string Comma-separated job ids (max 100). |
{- "object": "list",
- "data": [
- {
- "job_id": "453bd7d7-5355-4d6d-a38e-d9e7eb218c3f",
- "status": "string",
- "publish_status": {
- "published_at": "2019-08-24T14:15:22Z",
- "timing_ms": 0,
- "destinations": [
- {
- "destination_id": "f73cdd0c-5b5d-4102-9dde-c2ec04ceba9e",
- "name": "string",
- "type": "string",
- "success": true,
- "error": "string"
}
]
}
}
]
}Streams a single ZIP archive of the selected completed jobs, built server-side. Each single-asset job becomes one entry named after its title; a batch job expands to its per-render assets under a folder. Unreachable assets are skipped rather than failing the whole archive. Requires the read:jobs scope.
| ids required | string Comma-separated job ids (max 100). |
{- "error": {
- "type": "invalid_request_error",
- "code": "missing_field",
- "message": "string",
- "param": "string"
}
}Paginated list of the organization's recent jobs. Requires the read:jobs scope.
The list envelope additionally includes total and a stats object.
| limit | integer [ 1 .. 100 ] Default: 25 |
| offset | integer >= 0 Default: 0 |
| search | string |
| type | string Enum: "templates" "workflows" |
| source | string Enum: "manual" "magnifi" |
| publish | string Enum: "published" "unpublished" |
| team | string Exact team name. |
| template | string Token |
| set | string Set id — only runs whose template belongs to that set. Pass |
| created_after | string <date-time> |
{- "object": "list",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "variant_version_id": "8e18aff9-0b88-4926-addf-80dd9734f953",
- "template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
- "team_id": "810007d0-bec5-486c-b5d1-28fcd8a079ba",
- "status": "pending",
- "output_url": "string",
- "output_status": "string",
- "output_archived_at": "2019-08-24T14:15:22Z",
- "thumbnail_url": "string",
- "error_log": "string",
- "progress": {
- "stage": "string",
- "percent": 0,
- "message": "string",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "content_type": "image",
- "source": "manual",
- "team_name": "string",
- "opponent_name": "string",
- "league": "string",
- "match_label": "string",
- "match_date": "string",
- "input_data": { },
- "publish_status": { },
- "runtime_ms": 0,
- "created_by": "string",
- "created_by_name": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "has_more": true,
- "next_cursor": "string",
- "total": 0,
- "stats": {
- "completed": 0,
- "failed": 0
}
}Fetch a single job by id. Requires the read:jobs scope.
| id required | string |
{- "object": "job",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "variant_version_id": "8e18aff9-0b88-4926-addf-80dd9734f953",
- "template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
- "team_id": "810007d0-bec5-486c-b5d1-28fcd8a079ba",
- "status": "pending",
- "output_url": "string",
- "output_status": "string",
- "output_archived_at": "2019-08-24T14:15:22Z",
- "thumbnail_url": "string",
- "error_log": "string",
- "progress": {
- "stage": "string",
- "percent": 0,
- "message": "string",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "content_type": "image",
- "source": "manual",
- "team_name": "string",
- "opponent_name": "string",
- "league": "string",
- "match_label": "string",
- "match_date": "string",
- "input_data": { },
- "publish_status": { },
- "runtime_ms": 0,
- "created_by": "string",
- "created_by_name": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Delete a single job together with its rendered files (output, thumbnail, batch files). Files that are still used elsewhere, for example by a Club Hub asset, are kept. Requires the write:jobs scope.
| id required | string |
{- "object": "item",
- "data": {
- "id": "string",
- "deleted": true
}
}Lightweight progress for fast polling. Requires the read:jobs scope.
| id required | string |
{- "object": "job_progress",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "status": "pending",
- "progress": {
- "stage": "string",
- "percent": 0,
- "message": "string",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
}Redirects to a short-lived signed URL that serves the asset as an attachment, named after the asset's title. Follow the redirect to receive the file. Batch jobs redirect to the batch ZIP endpoint. Requires the read:jobs scope.
| id required | string |
{- "error": {
- "type": "invalid_request_error",
- "code": "missing_field",
- "message": "string",
- "param": "string"
}
}Publish a completed job's asset to one or more destinations. The job must be
completed with an output_url. Requires the write:jobs scope.
When the organization limits approval (Dispatch settings,
approval.mode other than anyone), only approvers may publish to a
social destination; everyone else gets 403 approval_required.
Storage destinations (S3, Drive, email, webhook) are not affected. This applies to an immediate and a scheduled publish.
| id required | string |
| destinationIds required | Array of strings <uuid> non-empty [ items <uuid > ] |
| caption | string <= 64000 characters Optional per-post text. When present it overrides the destination's configured caption template for social destinations (Instagram, Facebook, LinkedIn). An empty string means "publish with no text"; omit the field to fall back to the template. Storage destinations ignore it. |
| scheduledAt | string <date-time> Optional ISO timestamp, at least one minute in the future. When present the publish is scheduled rather than sent immediately: one scheduled post per social destination is created and fired at that time by the scheduler. Only social destinations can be scheduled; a request that resolves to no social destination returns 400. Omit for immediate publish. |
object Per-post rich-publishing parameters. Applied on both the
immediate and scheduled paths. Unknown keys are ignored
(allowlist). Currently only |
{- "destinationIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "caption": "string",
- "scheduledAt": "2019-08-24T14:15:22Z",
- "options": {
- "alt_text": "string"
}
}{- "object": "publish_action",
- "data": {
- "job_id": "453bd7d7-5355-4d6d-a38e-d9e7eb218c3f",
- "published_to": 0,
- "scheduled": 0,
- "scheduled_at": "2019-08-24T14:15:22Z"
}
}Returns, per selected social destination, the final interpolated caption and the preflight findings (caption length / hashtag / mention limits, media format, carousel item count) that would apply if the job were published now. Read-only: nothing is posted and no event is dispatched. The caption and surface are computed with the same code the real publish uses, so the preview cannot drift from the actual post. Storage/webhook/ email destinations carry no caption and are omitted from the result.
Captions may use caption variables such as {home}, {score} or
{player}. They are resolved per asset; a variable without a value is reported in
missing_variables and as a preflight error, because the publish
refuses a caption with an unresolved variable. A {word} that is not a
caption variable is literal text (a warning, never a block). Stories
show no caption, so they report no open variables.
Requires the write:jobs scope.
| id required | string |
| destinationIds | Array of strings <uuid> non-empty [ items <uuid > ] |
| caption | string <= 64000 characters Optional per-post text override, same semantics as the publish endpoint. Omit to preview the destination's template. |
Array of objects [ 1 .. 10 ] items Per-destination caption and surface. A string
|
{- "destinationIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "caption": "string",
- "placements": [
- {
- "destination_id": "f73cdd0c-5b5d-4102-9dde-c2ec04ceba9e",
- "caption": "string",
- "surface": "feed"
}
]
}{- "object": "publish_preview",
- "data": {
- "job_id": "453bd7d7-5355-4d6d-a38e-d9e7eb218c3f",
- "previews": [
- {
- "destination_id": "f73cdd0c-5b5d-4102-9dde-c2ec04ceba9e",
- "name": "string",
- "platform": "instagram",
- "surface": "feed",
- "caption": "string",
- "variables": {
- "home": "Kadetten Schaffhausen",
- "score": "31:28"
}, - "missing_variables": [
- "string"
], - "unknown_variables": [
- "string"
], - "preflight": {
- "errors": [
- "string"
], - "warnings": [
- "string"
]
}
}
]
}
}Clone a completed or failed job into a new pending render. Requires write:jobs.
| id required | string |
{- "object": "job",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "variant_version_id": "8e18aff9-0b88-4926-addf-80dd9734f953",
- "template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
- "team_id": "810007d0-bec5-486c-b5d1-28fcd8a079ba",
- "status": "pending",
- "output_url": "string",
- "output_status": "string",
- "output_archived_at": "2019-08-24T14:15:22Z",
- "thumbnail_url": "string",
- "error_log": "string",
- "progress": {
- "stage": "string",
- "percent": 0,
- "message": "string",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "content_type": "image",
- "source": "manual",
- "team_name": "string",
- "opponent_name": "string",
- "league": "string",
- "match_label": "string",
- "match_date": "string",
- "input_data": { },
- "publish_status": { },
- "runtime_ms": 0,
- "created_by": "string",
- "created_by_name": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Create a template-centric batch render. Requires write:jobs. Provide exactly one
row source:
rows - CSV source: each row carries pre-resolved <field>_url values.league_id / team_ids - "Select League" source: the server expands the
league's active teams (or an explicit team_ids subset) into rows
(single-team templates). Mutually exclusive with rows.game_ids - "Select Matchday" source: the server expands the given games
into home-vs-away rows (matchup templates), resolving logos / colors /
names / score / kickoff from the DB. Org-scoped; foreign ids are dropped.
Mutually exclusive with rows and with the league source.This endpoint returns a raw { data } payload (no object wrapper).
| template_id required | string <uuid> |
Array of objects non-empty CSV source. One object per asset; carries | |
| league_id | string <uuid> "Select League" source. Renders the whole league (its active teams) x the selected variants. Mutually exclusive with |
| team_ids | Array of strings <uuid> [ items <uuid > ] "Select League" source, refined. Render exactly these teams (pick / deselect). Org-scoped; foreign ids are dropped. Wins over |
| game_ids | Array of strings <uuid> [ items <uuid > ] "Select Matchday" source. Render exactly these games as home-vs-away rows (matchup templates). Org-scoped; foreign ids are dropped. Mutually exclusive with |
| variant_ids | Array of strings <uuid> [ items <uuid > ] Variants to fan out per row. Empty - the template default variant. |
| name_column | string Default: "" |
| output_format | string Default: "png" Enum: "png" "pdf"
|
{- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "rows": [
- { }
], - "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "team_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "game_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "variant_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "name_column": "",
- "output_format": "png"
}{- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "status": "pending",
- "total": 0,
- "rows": 0,
- "variants": 0
}
}Streams a ZIP of all successfully rendered batch assets, built on demand from
the per-render asset URLs. Multi-team batches are grouped into one folder per
team; every file is named <team>_<template>_<variant>.<ext>. Legacy batches
that stored a combined ZIP are redirected (302) to it. Requires read:jobs.
| id required | string |
{- "error": {
- "type": "invalid_request_error",
- "code": "missing_field",
- "message": "string",
- "param": "string"
}
}List the organization's templates. Requires the read:templates scope. The list view
exposes the logo URL as thumbnail_url and omits html_content.
| include_live_status | string Value: "true" When |
{- "object": "list",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "description": "string",
- "thumbnail": "string",
- "thumbnail_url": "string",
- "engine": "string",
- "template_type": "string",
- "slug": "string",
- "source_path": "string",
- "html_content": "string",
- "config": { },
- "is_public": true,
- "organization_id": "string",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "club_hub_visible": true,
- "template_purpose": "reel_intro",
- "manual_minutes": 0,
- "published_version_id": "9e5718f5-1907-42cb-bf81-9b6854b603b7",
- "draft_version_id": "2369ad9c-68ef-4f99-9fef-504688a7ce49",
- "published_version_number": 0,
- "draft_version_number": 0,
- "latest_version_date": "2019-08-24T14:15:22Z",
- "variant_count": 0,
- "fields": [
- { }
], - "viewport": {
- "width": 0,
- "height": 0,
- "device_scale_factor": 0
}, - "screenshot": {
- "selector": "string",
- "omit_background": true,
- "type": "string",
- "width": 0,
- "height": 0
}, - "live_automation": {
- "active": true,
- "automation_id": "64fb5f73-6415-4f56-8e9e-ca06539f09ac",
- "automation_name": "string",
- "integration_type": "string",
- "integration_name": "string",
- "ui": { }
}
}
], - "has_more": true,
- "next_cursor": "string"
}Fetch a single template. Requires the read:templates scope. The single view exposes
the logo URL under the key thumbnail and includes html_content.
| id required | string |
| include_live_status | string Value: "true" |
{- "object": "template",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "description": "string",
- "thumbnail": "string",
- "thumbnail_url": "string",
- "engine": "string",
- "template_type": "string",
- "slug": "string",
- "source_path": "string",
- "html_content": "string",
- "config": { },
- "is_public": true,
- "organization_id": "string",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "club_hub_visible": true,
- "template_purpose": "reel_intro",
- "manual_minutes": 0,
- "published_version_id": "9e5718f5-1907-42cb-bf81-9b6854b603b7",
- "draft_version_id": "2369ad9c-68ef-4f99-9fef-504688a7ce49",
- "published_version_number": 0,
- "draft_version_number": 0,
- "latest_version_date": "2019-08-24T14:15:22Z",
- "variant_count": 0,
- "fields": [
- { }
], - "viewport": {
- "width": 0,
- "height": 0,
- "device_scale_factor": 0
}, - "screenshot": {
- "selector": "string",
- "omit_background": true,
- "type": "string",
- "width": 0,
- "height": 0
}, - "live_automation": {
- "active": true,
- "automation_id": "64fb5f73-6415-4f56-8e9e-ca06539f09ac",
- "automation_name": "string",
- "integration_type": "string",
- "integration_name": "string",
- "ui": { }
}
}
}Update template metadata. Requires the write:templates scope.
| id required | string |
| name | string |
| description | string |
| thumbnail_url | string |
object | |
| set_id | string or null <uuid> |
| club_hub_visible | boolean |
| template_purpose | string or null Enum: "reel_intro" "reel_lower_third" "reel_outro" Reel role tag so a template can serve as a reel intro or lower-third. Send null to clear it. |
| manual_minutes | integer or null >= 0 Estimated minutes to hand-make one asset from this template; drives the Time Saved figure. Send null to clear. |
object or null (PrintConfig) Print export settings for |
{- "name": "string",
- "description": "string",
- "thumbnail_url": "string",
- "config": { },
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "club_hub_visible": true,
- "template_purpose": "reel_intro",
- "manual_minutes": 0,
- "print_config": {
- "enabled": true,
- "dpi": 300,
- "supersample": "auto",
- "text": "raster",
- "bleed_mm": 10,
- "tac_limit": 300,
- "standard": "x4"
}
}{- "object": "template",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "description": "string",
- "thumbnail": "string",
- "thumbnail_url": "string",
- "engine": "string",
- "template_type": "string",
- "slug": "string",
- "source_path": "string",
- "html_content": "string",
- "config": { },
- "is_public": true,
- "organization_id": "string",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "club_hub_visible": true,
- "template_purpose": "reel_intro",
- "manual_minutes": 0,
- "published_version_id": "9e5718f5-1907-42cb-bf81-9b6854b603b7",
- "draft_version_id": "2369ad9c-68ef-4f99-9fef-504688a7ce49",
- "published_version_number": 0,
- "draft_version_number": 0,
- "latest_version_date": "2019-08-24T14:15:22Z",
- "variant_count": 0,
- "fields": [
- { }
], - "viewport": {
- "width": 0,
- "height": 0,
- "device_scale_factor": 0
}, - "screenshot": {
- "selector": "string",
- "omit_background": true,
- "type": "string",
- "width": 0,
- "height": 0
}, - "live_automation": {
- "active": true,
- "automation_id": "64fb5f73-6415-4f56-8e9e-ca06539f09ac",
- "automation_name": "string",
- "integration_type": "string",
- "integration_name": "string",
- "ui": { }
}
}
}Soft-delete a template. Restricted to org admins: a dashboard session needs the org
admin or owner role, an API key needs the admin:org scope (write:templates
alone is not enough). Members and narrower keys receive 403 with error code
admin_required (session) or admin_scope_required (API key).
| id required | string |
{- "object": "item",
- "data": {
- "id": "string",
- "deleted": true
}
}Master and per-variant version history. Requires the read:templates scope.
| id required | string |
{- "object": "versions",
- "data": {
- "master": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "version_number": 0,
- "change_summary": "string",
- "created_by": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "source_path": "string",
- "pruned": true,
- "is_published": true,
- "is_draft": true,
- "display_version": "string",
- "is_variant_active": true
}
], - "variants": [
- {
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "variant_name": "string",
- "versions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "version_number": 0,
- "change_summary": "string",
- "created_by": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "source_path": "string",
- "pruned": true,
- "is_published": true,
- "is_draft": true,
- "display_version": "string",
- "is_variant_active": true
}
]
}
]
}
}Render a template to HTML for preview. Requires the read:templates scope. This
endpoint returns a bare object (no item envelope). Only HTML engines are supported;
async engines (AE, motion) return 400.
| id required | string |
| team_id | string <uuid> |
| player_id | string <uuid> |
object Field value overrides. | |
| version_id | string <uuid> |
| variant_id | string <uuid> |
{- "team_id": "810007d0-bec5-486c-b5d1-28fcd8a079ba",
- "player_id": "f8b23bf6-c56d-4f96-b79c-96d80504663d",
- "fields": { },
- "version_id": "9e94c502-ca41-4342-a7f7-af96b444512c",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6"
}{- "html": "string",
- "viewport": {
- "width": 0,
- "height": 0
}, - "selector": "string",
- "motion_manifest": {
- "layers": [
- {
- "id": "string",
- "animatable": true,
- "roleHint": "string"
}
]
}
}Make a specific version the published version. Requires the write:templates scope.
| id required | string |
| version_id required | string <uuid> |
{- "version_id": "9e94c502-ca41-4342-a7f7-af96b444512c"
}{- "object": "template",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "description": "string",
- "thumbnail": "string",
- "thumbnail_url": "string",
- "engine": "string",
- "template_type": "string",
- "slug": "string",
- "source_path": "string",
- "html_content": "string",
- "config": { },
- "is_public": true,
- "organization_id": "string",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "club_hub_visible": true,
- "template_purpose": "reel_intro",
- "manual_minutes": 0,
- "published_version_id": "9e5718f5-1907-42cb-bf81-9b6854b603b7",
- "draft_version_id": "2369ad9c-68ef-4f99-9fef-504688a7ce49",
- "published_version_number": 0,
- "draft_version_number": 0,
- "latest_version_date": "2019-08-24T14:15:22Z",
- "variant_count": 0,
- "fields": [
- { }
], - "viewport": {
- "width": 0,
- "height": 0,
- "device_scale_factor": 0
}, - "screenshot": {
- "selector": "string",
- "omit_background": true,
- "type": "string",
- "width": 0,
- "height": 0
}, - "live_automation": {
- "active": true,
- "automation_id": "64fb5f73-6415-4f56-8e9e-ca06539f09ac",
- "automation_name": "string",
- "integration_type": "string",
- "integration_name": "string",
- "ui": { }
}
}
}Activate an earlier version. Requires the write:templates scope.
| id required | string |
| version_id required | string <uuid> |
{- "version_id": "9e94c502-ca41-4342-a7f7-af96b444512c"
}{- "object": "version",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "version_number": 0,
- "activated": true
}
}Activate an earlier scoped version of a variant. Requires the write:templates scope.
| id required | string |
| variantId required | string <uuid> |
| version_id required | string <uuid> |
{- "version_id": "9e94c502-ca41-4342-a7f7-af96b444512c"
}{- "object": "version",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "version_number": 0,
- "activated": true
}
}Delete a specific version. The published version and the last remaining version cannot
be deleted. Requires the write:templates scope.
| id required | string |
| versionId required | string <uuid> |
{- "object": "version",
- "data": {
- "deletedId": "02436a78-cdb4-4368-80a7-194d012df901",
- "version_number": 0
}
}Create a copy of a template. Requires the write:templates scope.
| id required | string |
{- "object": "template",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "description": "string",
- "thumbnail": "string",
- "thumbnail_url": "string",
- "engine": "string",
- "template_type": "string",
- "slug": "string",
- "source_path": "string",
- "html_content": "string",
- "config": { },
- "is_public": true,
- "organization_id": "string",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "club_hub_visible": true,
- "template_purpose": "reel_intro",
- "manual_minutes": 0,
- "published_version_id": "9e5718f5-1907-42cb-bf81-9b6854b603b7",
- "draft_version_id": "2369ad9c-68ef-4f99-9fef-504688a7ce49",
- "published_version_number": 0,
- "draft_version_number": 0,
- "latest_version_date": "2019-08-24T14:15:22Z",
- "variant_count": 0,
- "fields": [
- { }
], - "viewport": {
- "width": 0,
- "height": 0,
- "device_scale_factor": 0
}, - "screenshot": {
- "selector": "string",
- "omit_background": true,
- "type": "string",
- "width": 0,
- "height": 0
}, - "live_automation": {
- "active": true,
- "automation_id": "64fb5f73-6415-4f56-8e9e-ca06539f09ac",
- "automation_name": "string",
- "integration_type": "string",
- "integration_name": "string",
- "ui": { }
}
}
}Upload a template package (ZIP) as a multipart file field template_package. Requires
the write:templates scope. Returns a { success, data, message } envelope.
| template_package required | string <binary> |
| templateId | string <uuid> Update an existing template instead of creating one. |
| set_id | string <uuid> |
{- "success": true,
- "data": { },
- "message": "string"
}List the organization's sets. Requires the read:templates scope.
{- "object": "item",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "color": "string",
- "description": "string",
- "sort_order": 0,
- "template_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "parent_set_id": "d484354e-b6f3-4a6c-a8f8-87572ba77b6e"
}
]
}Create a new set. Requires the write:templates scope.
| name required | string |
| color | string |
| description | string |
| parent_set_id | string or null <uuid> Set this as a Campaign nested under a top-level set. The referenced set must itself be top-level (max nesting depth is 2 — no grandchildren). |
{- "name": "string",
- "color": "string",
- "description": "string",
- "parent_set_id": "d484354e-b6f3-4a6c-a8f8-87572ba77b6e"
}{- "object": "set",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "color": "string",
- "description": "string",
- "sort_order": 0,
- "template_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "parent_set_id": "d484354e-b6f3-4a6c-a8f8-87572ba77b6e"
}
}Update a set. Requires the write:templates scope.
| id required | string |
| name | string |
| color | string or null |
| description | string or null |
| parent_set_id | string or null <uuid> Reparent onto a top-level set (Campaign), or |
{- "name": "string",
- "color": "string",
- "description": "string",
- "parent_set_id": "d484354e-b6f3-4a6c-a8f8-87572ba77b6e"
}{- "object": "item",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "color": "string",
- "description": "string",
- "sort_order": 0,
- "template_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "parent_set_id": "d484354e-b6f3-4a6c-a8f8-87572ba77b6e"
}
}Partner-facing read API for one distribution channel. The channel is resolved from the API key (a channel subscriber key with scope read:channel), never from the URL. Assets a partner cannot see (embargo, expiry, withdrawal, not a member) are indistinguishable: one 404.
Rate limits per API key. Every channel feed endpoint counts against two limits of the calling key, the download endpoints against a third:
| Limit | Default | Applies to |
|---|---|---|
| Per minute | 120 requests | every channel feed endpoint |
| Daily quota | 20,000 requests per 24 hours | every channel feed endpoint |
| Downloads | 60 requests per minute | /download and /download-url only, on top of the two above |
Windows are fixed and start with the first request in them. Limits count
per key across all server instances; two keys never share a limit. A
request refused by a tighter limit does not count against the wider ones.
Exceeding a limit returns 429 in the standard error envelope
(type: rate_limit_error, code: rate_limited) with a Retry-After
header in seconds; the message names the limit (per minute, daily quota
or downloads). On a successful response the RateLimit-Limit,
RateLimit-Remaining and RateLimit-Reset headers describe the daily
quota; on a 429 they describe the limit that was hit.
Keyset-paginated feed of the channel bound to the calling API key. Pass the returned next_cursor back as cursor to resume; new assets appear at the end as their embargo lifts (available_at order), so a poller never misses one. Requires a channel subscriber key (scope read:channel); other keys get 403.
| cursor | string Opaque cursor from the previous page ( |
| limit | integer [ 1 .. 100 ] Default: 50 |
{- "object": "list",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "media_type": "video",
- "thumbnail_url": "string",
- "available_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "rights": {
- "embargo_until": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z",
- "license_code": "string",
- "territories": [
- "CH"
], - "credit": "string",
- "usage_note": "string"
}
}
], - "has_more": true,
- "next_cursor": "string",
- "channel": {
- "name": "Blick",
- "slug": "blick",
- "description": "string",
- "logo_url": "string",
- "primary_color": "string"
}
}Returns the asset if it is currently visible to this channel. An asset that does not exist, is embargoed, expired or withdrawn returns the SAME 404 - the feed does not disclose what exists or when it unlocks.
| assetId required | string <uuid> The asset id from the feed. |
{- "object": "channel_asset",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "media_type": "video",
- "thumbnail_url": "string",
- "available_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "rights": {
- "embargo_until": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z",
- "license_code": "string",
- "territories": [
- "CH"
], - "credit": "string",
- "usage_note": "string"
}
}
}302 redirect to a short-lived file URL. Files in FlowState storage get a signed storage URL; video sources FlowState cannot sign itself (Magnifi highlights, Sportradar full-match recordings, external links) get a FlowState media link that re-checks the rights on every use and then redirects to the source. Either lifetime is clamped to the asset's effective expires_at; an expired media link answers 410. Every download (and every denied attempt) is recorded in the channel access log. When the subscription's billing is suspended (payment overdue beyond the grace window or canceled) the download is refused with 403 and error code subscription_suspended; feed and asset reads stay available.
| assetId required | string <uuid> The asset id from the feed. |
{- "error": {
- "type": "invalid_request_error",
- "code": "missing_field",
- "message": "string",
- "param": "string"
}
}Machine-readable variant of the download redirect - returns the pull URL as JSON so an automation can pull the asset into its own system. Same rights check as the download and the same URL kinds (a signed storage URL, or a FlowState media link that redirects to the video source after re-checking the rights; follow redirects when pulling). The URL lifetime is clamped to the asset's effective expires_at, expires_at in the response is the real end of the URL, and the mint is recorded in the channel access log as a publish. Re-mint any time while the asset is available. Requires the channel egress feature; billing suspension refuses the mint like a download (403 subscription_suspended).
| assetId required | string <uuid> The asset id from the feed. |
{- "object": "channel_asset_download_url",
- "data": {
- "asset_id": "b4695157-0d1d-4da0-8f9e-5c53149389e4",
- "filename": "string",
- "ttl_seconds": 3600,
- "expires_at": "2019-08-24T14:15:22Z"
}
}Claims the full-match recording of a game for this channel subscriber. It spends one TAPE from the prepaid season allowance and adds the recording permanently to the channel as a native asset - afterwards download and egress are free and unlimited. Re-taping the same game is idempotent (no second TAPE). Only for subscribers on a recording plan and flag-gated (channel_hub_tapes): prepaid_allowance spends a TAPE, flat_per_league (catalog) adds the full match without a TAPE and additionally needs the catalog to be enabled. Returns 402 when the season allowance is exhausted. A paused or archived channel answers 404 (like the feed). Every check runs before the TAPE is spent, so a rejected call never costs a TAPE.
| game_id required | string <uuid> FlowState game id to tape the full-match recording of. |
{- "game_id": "129babd7-0a5a-4108-81e4-77c8f2b49aed"
}{- "object": "channel_recording_tape",
- "data": {
- "asset_id": "b4695157-0d1d-4da0-8f9e-5c53149389e4",
- "already_owned": true,
- "recording": {
- "title": "string",
- "sport": "string",
- "league": "string",
- "scheduled_start_at": "2019-08-24T14:15:22Z",
- "duration_sec": 0
}, - "tapes": {
- "remaining": 0,
- "allowance": 0
}
}
}List a template's variants. Requires the read:templates scope.
| id required | string |
{- "object": "item",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "name": "string",
- "field_schema": [
- { }
], - "binding_config": { },
- "sort_order": 0,
- "is_default": true,
- "is_motion": true,
- "engine": "ae",
- "engine_options": [
- "ae"
], - "motion_status": "none",
- "active_version_id": "eae64611-bd53-4a80-bb77-df1e432c0fbc",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
}Create a variant. Requires the write:templates scope.
| id required | string |
| name required | string |
Array of objects | |
object |
{- "name": "string",
- "field_schema": [
- { }
], - "binding_config": { }
}{- "object": "variant",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "name": "string",
- "field_schema": [
- { }
], - "binding_config": { },
- "sort_order": 0,
- "is_default": true,
- "is_motion": true,
- "engine": "ae",
- "engine_options": [
- "ae"
], - "motion_status": "none",
- "active_version_id": "eae64611-bd53-4a80-bb77-df1e432c0fbc",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Fetch a single variant. Requires the read:templates scope.
| id required | string |
| variantId required | string <uuid> |
{- "object": "item",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "name": "string",
- "field_schema": [
- { }
], - "binding_config": { },
- "sort_order": 0,
- "is_default": true,
- "is_motion": true,
- "engine": "ae",
- "engine_options": [
- "ae"
], - "motion_status": "none",
- "active_version_id": "eae64611-bd53-4a80-bb77-df1e432c0fbc",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Update a variant. Requires the write:templates scope.
| id required | string |
| variantId required | string <uuid> |
| name | string |
Array of objects or null | |
object or null | |
| sort_order | integer >= 0 |
{- "name": "string",
- "field_schema": [
- { }
], - "binding_config": { },
- "sort_order": 0
}{- "object": "item",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "name": "string",
- "field_schema": [
- { }
], - "binding_config": { },
- "sort_order": 0,
- "is_default": true,
- "is_motion": true,
- "engine": "ae",
- "engine_options": [
- "ae"
], - "motion_status": "none",
- "active_version_id": "eae64611-bd53-4a80-bb77-df1e432c0fbc",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Delete a variant (the default variant cannot be deleted). Requires the write:templates scope.
| id required | string |
| variantId required | string <uuid> |
{- "object": "item",
- "data": {
- "id": "string",
- "deleted": true
}
}Make a variant the template's default. Requires the write:templates scope.
| id required | string |
| variantId required | string <uuid> |
{- "object": "item",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "name": "string",
- "field_schema": [
- { }
], - "binding_config": { },
- "sort_order": 0,
- "is_default": true,
- "is_motion": true,
- "engine": "ae",
- "engine_options": [
- "ae"
], - "motion_status": "none",
- "active_version_id": "eae64611-bd53-4a80-bb77-df1e432c0fbc",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Pin the variant's active version (active_version_id) to the given version — this takes a
DRAFT variant (no active version, e.g. one created from chat / Figma) live. Requires the
write:templates scope.
| id required | string |
| variantId required | string <uuid> |
| version_id required | string <uuid> The variant-scoped version to make active. |
{- "version_id": "9e94c502-ca41-4342-a7f7-af96b444512c"
}{- "object": "item",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "name": "string",
- "field_schema": [
- { }
], - "binding_config": { },
- "sort_order": 0,
- "is_default": true,
- "is_motion": true,
- "engine": "ae",
- "engine_options": [
- "ae"
], - "motion_status": "none",
- "active_version_id": "eae64611-bd53-4a80-bb77-df1e432c0fbc",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}List publishing destinations. Requires the read:destinations scope. Credentials are
never returned; secret fields in config are redacted.
{- "success": true,
- "destinations": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "type": "s3",
- "config": { },
- "is_active": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
}Fetch a single destination. Requires the read:destinations scope.
| id required | string |
{- "success": true,
- "destination": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "type": "s3",
- "config": { },
- "is_active": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Returns the rolling 24h content-publishing quota for an Instagram
destination, so the composer can show remaining posts and block at the
cap. Non-Instagram destinations return supported: false. Read-only.
| id required | string |
{- "object": "publish_quota",
- "data": {
- "supported": true,
- "used": 0,
- "total": 0,
- "remaining": 0
}
}{- "object": "list",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "code": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "has_more": true,
- "next_cursor": "string"
}Create a country. Requires a valid key.
| name required | string |
| code required | string Stored uppercased. |
{- "name": "string",
- "code": "string"
}{- "object": "country",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "code": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}{- "object": "list",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "icon_url": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "has_more": true,
- "next_cursor": "string"
}Create a sport. Requires a valid key.
| name required | string |
| icon_url | string |
{- "name": "string",
- "icon_url": "string"
}{- "object": "sport",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "icon_url": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Fetch a single sport. Requires a valid key.
| id required | string |
{- "object": "sport",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "icon_url": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Update a sport. Requires a valid key.
| id required | string |
| name | string |
| icon_url | string |
{- "name": "string",
- "icon_url": "string"
}{- "object": "sport",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "icon_url": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}List leagues. Requires a valid key.
| sport_id | string <uuid> |
| country_id | string <uuid> |
| with_counts | string Enum: "1" "true" Include |
| exclude_empty | string Enum: "1" "true" Honoured only with |
{- "object": "list",
- "data": [
- {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "has_more": true,
- "next_cursor": "string"
}Create a league. Requires a valid key.
| name required | string |
| abbreviation | string |
| sport_id | string <uuid> |
| country_id | string <uuid> |
| logo_url | string |
| color | string |
| description | string |
{- "name": "string",
- "abbreviation": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "logo_url": "string",
- "color": "string",
- "description": "string"
}{- "object": "league",
- "data": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Search leagues by name. Requires a valid key.
| q required | string non-empty |
| limit | integer <= 50 Default: 15 |
{- "object": "list",
- "data": [
- {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "has_more": true,
- "next_cursor": "string"
}Fetch a single league. Requires a valid key.
| id required | string |
{- "object": "league",
- "data": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Update a league. Requires a valid key.
| id required | string |
| name | string |
| abbreviation | string |
| logo_url | string |
| sport_id | string <uuid> |
| country_id | string <uuid> |
| color | string |
| description | string |
object |
{- "name": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "color": "string",
- "description": "string",
- "metadata": { }
}{- "object": "league",
- "data": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}List clubs. Requires a valid key.
| league_id | string <uuid> |
{- "object": "list",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "name": "string",
- "slug": "string",
- "external_id": "string",
- "logo_url": "string",
- "metadata": { },
- "league": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "has_more": true,
- "next_cursor": "string"
}Create a club. Requires a valid key.
| name required | string |
| league_id | string <uuid> |
| external_id | string |
| logo_url | string |
{- "name": "string",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "external_id": "string",
- "logo_url": "string"
}{- "object": "club",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "name": "string",
- "slug": "string",
- "external_id": "string",
- "logo_url": "string",
- "metadata": { },
- "league": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}List teams. Requires a valid key. With paginated=true the response uses real
pagination and adds a top-level total; league_id=none selects league-less teams.
| club_id | string <uuid> |
| league_id | string |
| active | string Default: "true" Enum: "true" "false" "all" |
| sport | string Sport slug. |
| country_id | string <uuid> |
| sport_id | string <uuid> |
| search | string |
| limit | integer Default: 1000 |
| offset | integer Default: 0 |
| paginated | string Enum: "1" "true" |
{- "object": "list",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "sr_logo_url": "string",
- "shv_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "active": true,
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_team_id": "string",
- "season_id": "string",
- "metadata": { },
- "player_count": 0,
- "streamed": "true",
- "sr_tracked": "true",
- "club": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "league": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "has_more": true,
- "next_cursor": "string",
- "total": 0
}Create a team. Requires a valid key.
| name required | string |
| abbreviation | string Max 5 characters. |
| logo_url | string Stored as the manual upload ( |
| logo_on_light_url | string Logo version for light/white surfaces. |
| logo_on_dark_url | string Logo version for dark surfaces. |
| primary_color | string |
| secondary_color | string |
| club_id | string <uuid> |
| league_id | string <uuid> |
| set_id | string <uuid> |
| external_id | string |
{- "name": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_id": "string"
}{- "object": "team",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "sr_logo_url": "string",
- "shv_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "active": true,
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_team_id": "string",
- "season_id": "string",
- "metadata": { },
- "player_count": 0,
- "streamed": "true",
- "sr_tracked": "true",
- "club": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "league": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Search teams by name or abbreviation. A query that matches no team but matches a league name or abbreviation returns every team of that league (skipped when scoped by league_id). Requires a valid key.
| q required | string >= 2 characters |
| limit | integer <= 100 Default: 20 |
| league_id | string <uuid> Scope the search to one league (picker cascade). |
{- "object": "list",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "sr_logo_url": "string",
- "shv_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "active": true,
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_team_id": "string",
- "season_id": "string",
- "metadata": { },
- "player_count": 0,
- "streamed": "true",
- "sr_tracked": "true",
- "club": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "league": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "has_more": true,
- "next_cursor": "string"
}Fetch a single team. Requires a valid key.
| id required | string |
{- "object": "team",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "sr_logo_url": "string",
- "shv_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "active": true,
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_team_id": "string",
- "season_id": "string",
- "metadata": { },
- "player_count": 0,
- "streamed": "true",
- "sr_tracked": "true",
- "club": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "league": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Update a team. Requires a valid key.
| id required | string |
| name | string |
| abbreviation | string |
| logo_url | string Treated as |
| manual_logo_url | string or null Own uploaded logo. Send null to remove the upload. |
| logo_source | string or null Enum: "manual" "sportradar" "shv" Pin the effective logo source. Null returns to automatic (upload wins, otherwise Sportradar, then SHV). |
| logo_on_light_url | string or null Logo version for light/white surfaces. Send null to clear it. |
| logo_on_dark_url | string or null Logo version for dark surfaces. Send null to clear it. |
| primary_color | string |
| secondary_color | string |
| club_id | string <uuid> |
| league_id | string <uuid> |
| set_id | string <uuid> |
object | |
| active | boolean |
{- "name": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "metadata": { },
- "active": true
}{- "object": "team",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "sr_logo_url": "string",
- "shv_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "active": true,
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_team_id": "string",
- "season_id": "string",
- "metadata": { },
- "player_count": 0,
- "streamed": "true",
- "sr_tracked": "true",
- "club": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "league": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Roster plus player/goalie season stats from Hockeydata (German/Austrian ice hockey). Hockeydata is asked on every call and each answer is stored; if it fails or returns nothing, the last stored roster is returned. Only works for teams whose league is mapped to Hockeydata; other teams return source: null with empty arrays. During pre-season the most recent season with a filled roster is returned (see season_name). Requires a valid key.
| id required | string |
{- "object": "roster",
- "data": {
- "team": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "abbreviation": "string",
- "logo_url": "string"
}, - "source": "hockeydata",
- "season": 0,
- "season_name": "2025/26",
- "division": {
- "id": 0,
- "name": "string"
}, - "hd_team": {
- "id": 0,
- "longname": "string",
- "shortname": "string",
- "logo_url": "string",
- "picture_url": "string"
}, - "roster": [
- {
- "id": 0,
- "first_name": "string",
- "last_name": "string",
- "jersey_nr": 0,
- "position": "string",
- "nation": "AUT",
- "birthdate": "1998-12-17",
- "height_cm": 0,
- "weight_kg": 0,
- "shoots_catches": 0,
- "gender": 0,
- "portrait_url": "string"
}
], - "player_stats": [
- {
- "id": 0,
- "first_name": "string",
- "last_name": "string",
- "jersey_nr": 0,
- "position": "string",
- "games_played": 0,
- "goals": 0,
- "assists": 0,
- "points": 0,
- "plus_minus": 0,
- "penalty_minutes": 0,
- "powerplay_goals": 0,
- "shorthanded_goals": 0,
- "game_winning_goals": 0,
- "shots_on_goal": 0,
- "scoring_efficiency": 0,
- "faceoff_percentage": 0
}
], - "goalkeeper_stats": [
- {
- "id": 0,
- "first_name": "string",
- "last_name": "string",
- "jersey_nr": 0,
- "games_played": 0,
- "games_started": 0,
- "shots_against": 0,
- "goals_against": 0,
- "goals_against_average": 0,
- "save_percentage": 0,
- "shutouts": 0,
- "playing_time": 0
}
], - "team_stats": { }
}
}List players. Requires a valid key.
| team_id | string <uuid> |
| league_id | string <uuid> |
| active | string Default: "true" Enum: "true" "false" "all" |
| limit | integer Default: 1000 |
| offset | integer Default: 0 |
{- "object": "list",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "team_id": "810007d0-bec5-486c-b5d1-28fcd8a079ba",
- "first_name": "string",
- "last_name": "string",
- "name": "string",
- "slug": "string",
- "jersey_number": 0,
- "position": "string",
- "image_url": "string",
- "portrait_url": "string",
- "external_player_id": "string",
- "external_team_id": "string",
- "metadata": { },
- "active": true,
- "team": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "sr_logo_url": "string",
- "shv_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "active": true,
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_team_id": "string",
- "season_id": "string",
- "metadata": { },
- "player_count": 0,
- "streamed": "true",
- "sr_tracked": "true",
- "club": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "league": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "has_more": true,
- "next_cursor": "string"
}Create a player. Requires a valid key.
| first_name required | string |
| last_name required | string |
| team_id required | string <uuid> |
| jersey_number | integer |
| position | string |
| image_url | string |
| external_player_id | string |
{- "first_name": "string",
- "last_name": "string",
- "team_id": "810007d0-bec5-486c-b5d1-28fcd8a079ba",
- "jersey_number": 0,
- "position": "string",
- "image_url": "string",
- "external_player_id": "string"
}{- "object": "player",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "team_id": "810007d0-bec5-486c-b5d1-28fcd8a079ba",
- "first_name": "string",
- "last_name": "string",
- "name": "string",
- "slug": "string",
- "jersey_number": 0,
- "position": "string",
- "image_url": "string",
- "portrait_url": "string",
- "external_player_id": "string",
- "external_team_id": "string",
- "metadata": { },
- "active": true,
- "team": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "sr_logo_url": "string",
- "shv_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "active": true,
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_team_id": "string",
- "season_id": "string",
- "metadata": { },
- "player_count": 0,
- "streamed": "true",
- "sr_tracked": "true",
- "club": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "league": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Search players by name, jersey number or team. Requires a valid key.
| q required | string >= 2 characters |
| team_id | string <uuid> Scope the search to a single team's roster. |
| limit | integer <= 100 Default: 20 |
{- "object": "list",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "team_id": "810007d0-bec5-486c-b5d1-28fcd8a079ba",
- "first_name": "string",
- "last_name": "string",
- "name": "string",
- "slug": "string",
- "jersey_number": 0,
- "position": "string",
- "image_url": "string",
- "portrait_url": "string",
- "external_player_id": "string",
- "external_team_id": "string",
- "metadata": { },
- "active": true,
- "team": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "sr_logo_url": "string",
- "shv_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "active": true,
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_team_id": "string",
- "season_id": "string",
- "metadata": { },
- "player_count": 0,
- "streamed": "true",
- "sr_tracked": "true",
- "club": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "league": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "has_more": true,
- "next_cursor": "string"
}Fetch a single player. Requires a valid key.
| id required | string |
{- "object": "player",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "team_id": "810007d0-bec5-486c-b5d1-28fcd8a079ba",
- "first_name": "string",
- "last_name": "string",
- "name": "string",
- "slug": "string",
- "jersey_number": 0,
- "position": "string",
- "image_url": "string",
- "portrait_url": "string",
- "external_player_id": "string",
- "external_team_id": "string",
- "metadata": { },
- "active": true,
- "team": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "sr_logo_url": "string",
- "shv_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "active": true,
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_team_id": "string",
- "season_id": "string",
- "metadata": { },
- "player_count": 0,
- "streamed": "true",
- "sr_tracked": "true",
- "club": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "league": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Update a player. Requires a valid key.
| id required | string |
| first_name | string |
| last_name | string |
| jersey_number | integer |
| position | string |
| image_url | string |
| team_id | string <uuid> |
| external_player_id | string |
| external_team_id | string |
object | |
| active | boolean |
{- "first_name": "string",
- "last_name": "string",
- "jersey_number": 0,
- "position": "string",
- "image_url": "string",
- "team_id": "810007d0-bec5-486c-b5d1-28fcd8a079ba",
- "external_player_id": "string",
- "external_team_id": "string",
- "metadata": { },
- "active": true
}{- "object": "player",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "team_id": "810007d0-bec5-486c-b5d1-28fcd8a079ba",
- "first_name": "string",
- "last_name": "string",
- "name": "string",
- "slug": "string",
- "jersey_number": 0,
- "position": "string",
- "image_url": "string",
- "portrait_url": "string",
- "external_player_id": "string",
- "external_team_id": "string",
- "metadata": { },
- "active": true,
- "team": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "sr_logo_url": "string",
- "shv_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "active": true,
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_team_id": "string",
- "season_id": "string",
- "metadata": { },
- "player_count": 0,
- "streamed": "true",
- "sr_tracked": "true",
- "club": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "league": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Read-only schedule access. Requires a valid key.
| upcoming | string Default: "true" Enum: "true" "false" "all"
|
| league_id | string <uuid> |
| season_id | string |
| round_nr | string |
| team_id | string <uuid> |
| limit | integer <= 50 Default: 10 |
{- "object": "list",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kick_off_at": "2019-08-24T14:15:22Z",
- "competition": "string",
- "league_short": "string",
- "season_id": 0,
- "round_nr": 0,
- "is_playoff": true,
- "venue_name": "string",
- "venue_zip_city": "string",
- "source": "string",
- "external_game_id": "string",
- "home_score": 0,
- "away_score": 0,
- "game_type": "string",
- "pre_game_data": { },
- "home_team": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "sr_logo_url": "string",
- "shv_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "active": true,
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_team_id": "string",
- "season_id": "string",
- "metadata": { },
- "player_count": 0,
- "streamed": "true",
- "sr_tracked": "true",
- "club": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "league": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "away_team": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "sr_logo_url": "string",
- "shv_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "active": true,
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_team_id": "string",
- "season_id": "string",
- "metadata": { },
- "player_count": 0,
- "streamed": "true",
- "sr_tracked": "true",
- "club": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "league": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
], - "has_more": true,
- "next_cursor": "string"
}Search games by competition, league or team. When q names a team or a league, the search also covers that team's/league's whole season; otherwise it is forward-looking, returning the nearest fixtures. Requires a valid key.
| q required | string >= 2 characters |
| league_id | string <uuid> Explicitly scope the search to one league (resolves the league's teams and searches its whole season), skipping the |
| limit | integer <= 200 Default: 200 |
{- "object": "list",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kick_off_at": "2019-08-24T14:15:22Z",
- "competition": "string",
- "league_short": "string",
- "season_id": 0,
- "round_nr": 0,
- "is_playoff": true,
- "venue_name": "string",
- "venue_zip_city": "string",
- "source": "string",
- "external_game_id": "string",
- "home_score": 0,
- "away_score": 0,
- "game_type": "string",
- "pre_game_data": { },
- "home_team": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "sr_logo_url": "string",
- "shv_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "active": true,
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_team_id": "string",
- "season_id": "string",
- "metadata": { },
- "player_count": 0,
- "streamed": "true",
- "sr_tracked": "true",
- "club": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "league": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "away_team": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "sr_logo_url": "string",
- "shv_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "active": true,
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_team_id": "string",
- "season_id": "string",
- "metadata": { },
- "player_count": 0,
- "streamed": "true",
- "sr_tracked": "true",
- "club": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "league": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
], - "has_more": true,
- "next_cursor": "string"
}Distinct rounds (matchdays) of ONE season with kick-off windows. Requires a valid key. Pass group to scope the counts to one league sub-group. Without season_id the newest season that has rounds is used.
| league_id | string <uuid> |
| season_id | string Season to list, from /games/seasons. Omit for the newest season with rounds. |
| group | string League sub-group label (teams.group_label), e.g. 1, 2 or 3. |
{- "object": "list",
- "data": [
- {
- "round_nr": 0,
- "season_id": 0,
- "count": 0,
- "earliest_kick_off_at": "2019-08-24T14:15:22Z",
- "latest_kick_off_at": "2019-08-24T14:15:22Z"
}
], - "has_more": true,
- "next_cursor": "string"
}Seasons a league has games for, newest first. season_id is provider-specific (Sportradar stores the start year of 2026/27, the SFV the end year), so each entry carries a label derived from its kick-off range plus the providers it came from. Requires a valid key.
| league_id | string <uuid> |
| group | string League sub-group label (teams.group_label), e.g. 1, 2 or 3. |
{- "object": "list",
- "data": [
- {
- "season_id": 0,
- "label": "string",
- "game_count": 0,
- "matchday_count": 0,
- "first_kick_off_at": "2019-08-24T14:15:22Z",
- "last_kick_off_at": "2019-08-24T14:15:22Z",
- "sources": [
- "string"
]
}
], - "has_more": true,
- "next_cursor": "string"
}Distinct sub-group labels (teams.group_label) present in the league (e.g. "1", "2", "3" for 1. Liga Classic). Empty when the league has no groups. Requires a valid key.
| id required | string |
{- "object": "list",
- "data": [
- "string"
], - "has_more": true,
- "next_cursor": "string"
}Current league table from the league's data source (SHV group feed, SFV ranking, or Hockeydata for German/Austrian ice hockey, resolved from the league row). The source is asked on every call and each answer is stored; if the source fails or returns nothing, the last stored table is returned. Ice hockey rows additionally carry OT wins/losses and points per game. During pre-season the most recent completed season's table is returned (see season_name). Requires a valid key.
| id required | string |
| group | string Sub-group filter — SFV group id, or a Hockeydata division name substring (e.g. "Ost"). |
| limit | integer [ 1 .. 50 ] Default: 50 Max table rows. |
{- "object": "standings",
- "data": {
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "league_name": "string",
- "source": "string",
- "season": 0,
- "season_name": "2025/26",
- "group": "string",
- "available_groups": [
- "string"
], - "rows": [
- {
- "rank": 0,
- "team_id": null,
- "team_name": "string",
- "games": 0,
- "points": 0,
- "goals_for": 0,
- "goals_against": 0,
- "goal_difference": 0,
- "won": 0,
- "drawn": 0,
- "lost": 0,
- "won_ot": 0,
- "lost_ot": 0,
- "points_per_game": 0,
- "last_five": "string",
- "logo_url": "string"
}
]
}
}Fetch a single game. Requires a valid key.
| id required | string |
{- "object": "game",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kick_off_at": "2019-08-24T14:15:22Z",
- "competition": "string",
- "league_short": "string",
- "season_id": 0,
- "round_nr": 0,
- "is_playoff": true,
- "venue_name": "string",
- "venue_zip_city": "string",
- "source": "string",
- "external_game_id": "string",
- "home_score": 0,
- "away_score": 0,
- "game_type": "string",
- "pre_game_data": { },
- "home_team": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "sr_logo_url": "string",
- "shv_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "active": true,
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_team_id": "string",
- "season_id": "string",
- "metadata": { },
- "player_count": 0,
- "streamed": "true",
- "sr_tracked": "true",
- "club": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "league": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "away_team": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "manual_logo_url": "string",
- "sr_logo_url": "string",
- "shv_logo_url": "string",
- "logo_source": "manual",
- "logo_on_light_url": "string",
- "logo_on_dark_url": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "active": true,
- "club_id": "37075f18-9ac9-4298-acac-03d82cbc40e2",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "external_team_id": "string",
- "season_id": "string",
- "metadata": { },
- "player_count": 0,
- "streamed": "true",
- "sr_tracked": "true",
- "club": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "league": {
- "id": "string",
- "organization_id": "string",
- "sport_id": "3b33d728-5ec0-45ea-a7eb-bd6133196129",
- "country_id": "b42f7153-60f9-4aff-a5b5-21576be4161e",
- "name": "string",
- "slug": "string",
- "abbreviation": "string",
- "logo_url": "string",
- "sr_logo_url": "string",
- "color": "string",
- "sr_color": "string",
- "description": "string",
- "external_id": "string",
- "metadata": { },
- "team_count": 0,
- "is_unassigned": true,
- "sport": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "country": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "code": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
}Start an async CSV import of teams or players. Requires a valid key.
| csv_content required | string |
required | object Maps system field names to CSV column headers. |
| entity_type | string Default: "teams" Enum: "teams" "players" |
object |
{- "csv_content": "string",
- "mapping": {
- "property1": "string",
- "property2": "string"
}, - "entity_type": "teams",
- "options": {
- "createMissing": true,
- "sportId": "d853e53d-2208-46fd-b120-7bf69f55862f",
- "team_id": "810007d0-bec5-486c-b5d1-28fcd8a079ba"
}
}{- "object": "import_job",
- "data": {
- "job_id": "string",
- "message": "string",
- "status_url": "string"
}
}Create a league and its teams from structured rows (the hybrid League Import UI), rather than raw CSV. Provide either an existing league.id (add to it) or a league.name to get-or-create. Each team carries the logo_url of an already uploaded logo. Runs async on the same job store as the CSV import; poll GET /api/v1/entities/import/status/{jobId}. Requires a valid key.
required | object Existing league by id, or a new one by name. |
required | Array of objects <= 1000 items |
object |
{- "league": {
- "id": "string",
- "name": "string",
- "sport_id": "string",
- "country_id": "string",
- "color": "string",
- "abbreviation": "string"
}, - "teams": [
- {
- "name": "string",
- "abbreviation": "string",
- "primary_color": "string",
- "secondary_color": "string",
- "logo_url": "string",
- "external_id": "string"
}
], - "options": {
- "update_existing": true
}
}{- "object": "import_job",
- "data": {
- "job_id": "string",
- "message": "string",
- "status_url": "string"
}
}Poll an import job's status. Requires a valid key.
| jobId required | string |
{- "object": "import_job",
- "data": {
- "id": "string",
- "organization_id": "string",
- "status": "processing",
- "start_time": "2019-08-24T14:15:22Z",
- "total": 0,
- "processed": 0,
- "results": {
- "created": 0,
- "updated": 0,
- "skipped": 0,
- "errors": [
- {
- "row": 0,
- "error": "string"
}
]
}, - "error": "string",
- "completed_at": "2019-08-24T14:15:22Z"
}
}Production webhook ingestion: pushes a payload into a data source and triggers the
automations bound to it. The data source, its slug and its signing secret are set up in
the app under Config -> Data Sources. This endpoint is NOT authenticated with x-api-key; instead the raw body is signed with the
source's HMAC-SHA256 secret. Send the hex signature in one of X-Signature,
X-Webhook-Signature or X-Hub-Signature-256. Body cap is 1 MB.
| slug required | string |
| X-Signature required | string HMAC-SHA256 of the raw request body. |
| property name* additional property | any |
{ }{- "object": "webhook_replay_ignored",
- "data": {
- "message": "string",
- "replayed": true,
- "automations_triggered": 0
}
}