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, configure data sources and automations, 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, publish and delete templates, versions, variants and sets |
read:destinations |
Read publishing destinations |
admin:org |
Super-scope: grants every other scope, and is required for destination and data-source mutations |
Operations marked (any key) require only a valid key with no specific scope (entities,
data sources, automations, flows, workflows, integrations, uploads, reports and tools have
no granular scope yet). 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).
A subset of endpoints (destinations, the batch/* storage helpers, upload-asset, tools/*
and the reports/dashboard wrapper) 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: destinations, the batch/* storage helpers,
upload-asset and tools/* 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, workflow execution).
Exceeding a tier returns 429.Queue one asset render, or an array of renders (max 100 per request) in a single
call. Requires the write:jobs scope. Accepts a single object or an array of
objects; an array response is returned as a non-paginated list. An array with
more than 100 items returns 400.
| team_color required | string Team colour (hex). |
| template_id | string Default: "angled-logo" |
| team_name | string |
| logo_url | string |
| webhook_url | string |
| type | string Default: "template" |
| destination_ids | Array of strings <uuid> [ items <uuid > ] |
object |
[ ]{- "object": "list",
- "data": [
- {
- "id": "string",
- "status": "queued",
- "template_id": "string",
- "team_name": "string",
- "team_color": "string",
- "created_at": "2019-08-24T14:15:22Z"
}
]
}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_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Permanently delete a set of jobs by id. 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.
| 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_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
}
}Distinct team, template and set values for building job filters. Requires read:jobs.
{- "object": "job_filter_options",
- "data": {
- "teams": [
- "string"
], - "templates": [
- {
- "value": "string",
- "label": "string",
- "set_id": "string"
}
], - "sets": [
- {
- "value": "string",
- "label": "string"
}
], - "has_unassigned": true
}
}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_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}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.
| id required | string |
| destinationIds required | Array of strings <uuid> non-empty [ items <uuid > ] |
{- "destinationIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "object": "publish_action",
- "data": {
- "job_id": "453bd7d7-5355-4d6d-a38e-d9e7eb218c3f",
- "published_to": 0
}
}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_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
(upload logos first via /api/v1/batch/get-upload-link).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"
}
}Request a signed URL to upload a single batch file (for example a logo) directly to
storage. Returns a camelCase { success: true, ... } payload. Requires a valid key.
| filename required | string |
| sessionId | string Reuse an existing batch session, or omit for a new one. |
| contentType | string |
{- "filename": "string",
- "sessionId": "string",
- "contentType": "string"
}{- "success": true,
- "sessionId": "string",
- "uploadUrl": "string",
- "publicUrl": "string",
- "path": "string",
- "originalFilename": "string",
- "sanitizedFilename": "string"
}Upload a CSV plus one or more logo files for a batch. Returns a camelCase
{ success: true, ... } payload. Requires a valid key.
| csvFile required | string <binary> |
| logoFiles required | Array of strings <binary> [ items <binary > ] |
{- "success": true,
- "sessionId": "string",
- "csvUrl": "string",
- "logoStorageUrls": {
- "property1": "string",
- "property2": "string"
}, - "uploadedLogos": [
- "string"
]
}Submit storage URLs for analysis; returns the detected CSV structure and a session id.
Returns a camelCase { success: true, ... } payload. Requires a valid key.
| sessionId required | string |
| csvUrl required | string |
required | object |
{- "sessionId": "string",
- "csvUrl": "string",
- "logoStorageUrls": {
- "property1": "string",
- "property2": "string"
}
}{- "success": true,
- "sessionId": "string",
- "csvAnalysis": { },
- "uploadedLogos": [
- "string"
], - "message": "string"
}Start processing a previously submitted batch session with a column mapping. Returns a
camelCase { success: true, ... } payload with poll and download URLs. Requires a valid key.
| sessionId required | string |
required | object |
| skipFirstRow | boolean Default: false |
object |
{- "sessionId": "string",
- "columnMapping": { },
- "skipFirstRow": false,
- "manualLogoAssignments": { }
}{- "success": true,
- "message": "string",
- "sessionId": "string",
- "runId": "string",
- "status": "processing",
- "statusUrl": "string",
- "downloadUrl": "string"
}Poll a batch session's status. Returns a camelCase { success: true, status, ... } payload.
| sessionId required | string |
{- "success": true,
- "status": "processing",
- "sessionId": "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": { }
}
}
}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 new thumbnail image. Requires the write:templates scope.
| id required | string |
| thumbnail required | string <binary> |
{- "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"
}Get a signed URL to upload a large template package directly to storage. Requires the
write:templates scope. The data fields are camelCase.
| filename | string Default: "template.zip" |
{- "filename": "template.zip"
}{- "object": "item",
- "data": {
- "uploadUrl": "string",
- "storagePath": "string"
}
}Process a template package previously uploaded to storage. Depending on the flags this
creates a new template, updates the master, creates a new variant, or adds a variant
version. Requires the write:templates scope.
| storagePath required | string |
| templateId | string <uuid> |
| set_id | string <uuid> |
| asNewVariant | boolean |
| variant_name | string |
| targetVariantId | string <uuid> |
| change_summary | string |
{- "storagePath": "string",
- "templateId": "196100ac-4eec-4fb6-a7f7-86c8b584771d",
- "set_id": "516c4b88-fac0-4d1c-bb7a-9a8534cc5e71",
- "asNewVariant": true,
- "variant_name": "string",
- "targetVariantId": "a6f78b54-19c7-47eb-b6a7-1c0f19171a23",
- "change_summary": "string"
}{- "object": "template",
- "data": { }
}Create a Motion (FSCJ to GSAP) template directly from an FSCJ document. Requires write:templates.
required | object |
| name | string |
| change_summary | string |
{- "fscj": { },
- "name": "string",
- "change_summary": "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": { }
}
}
}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"
}
]
}Create a new set. Requires the write:templates scope.
| name required | string |
| color | string |
| description | string |
{- "name": "string",
- "color": "string",
- "description": "string"
}{- "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"
}
}Update a set. Requires the write:templates scope.
| id required | string |
| name | string |
| color | string or null |
| description | string or null |
{- "name": "string",
- "color": "string",
- "description": "string"
}{- "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"
}
}List the org's feature flags with resolved state. Descriptions and management fields are platform-admin only.
{- "object": "list",
- "data": [
- {
- "key": "new_dashboard",
- "description": "string",
- "default_enabled": true,
- "enabled": true,
- "beta": true,
- "has_override": true,
- "env_locked": true
}
], - "is_platform_admin": true
}Set a feature flag. Platform super-admin only. scope 'global' sets the registry default (for all orgs); otherwise a per-org override for the caller's org.
| key required | string The feature flag key. |
| enabled required | boolean |
| scope | string Default: "org" Enum: "org" "global" |
{- "enabled": true,
- "scope": "org"
}{- "object": "feature_flag",
- "data": {
- "key": "string",
- "enabled": true
}
}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,
- "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,
- "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,
- "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,
- "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,
- "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,
- "active_version_id": "eae64611-bd53-4a80-bb77-df1e432c0fbc",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}The entity/slot/role vocabulary for template field bindings — the server-owned
source of truth the Build Page binding editor builds its dropdowns from. Static and
org-agnostic. Read-only. Requires the read:templates scope.
Roles carry applies_to (the entities a role is canonical for; an empty list is a
content/metadata role). sponsor roles are dynamic (Club Hub brand-asset slots) and
are NOT listed here — the client loads them org-scoped separately.
{- "object": "item",
- "data": {
- "entities": [
- {
- "key": "competition",
- "label": "Competition",
- "resolvable": true,
- "slotted": true
}
], - "slots": [
- {
- "key": "home",
- "label": "Home"
}
], - "roles": [
- {
- "key": "round",
- "label": "Round",
- "applies_to": [
- "competition"
]
}
]
}
}Resolve a variant's entity bindings against the database for a per-slot team selection.
Read-only. Requires the read:templates scope. Note that the keys of data.field_values
are the template's own field keys and are not snake_cased.
| id required | string |
| variant_id | string <uuid> |
Array of objects | |
object | |
object | |
object Standings auto-fill (feature flag | |
object Top scorer auto-fill (feature flag | |
| league_id | string <uuid> |
{- "variant_id": "8a2d415d-59aa-4132-bef3-011f97c4a0f6",
- "field_schema": [
- { }
], - "slot_selections": { },
- "fixture_config": { },
- "standings_config": {
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "limit": 0
}, - "topscorer_config": {
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "limit": 0
}, - "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a"
}{- "object": "item",
- "data": {
- "field_values": { },
- "meta": {
- "resolved_slots": 0,
- "missing": [
- "string"
], - "fixtures": [
- { }
], - "match_count": 0
}
}
}Return the variant whose binding_config.fixture.match_count equals count, else the
default variant. Requires the read:templates scope.
| id required | string |
| count required | integer >= 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,
- "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"
}
]
}Create a destination. Requires the admin:org scope. Creatable types today are s3,
webhook and email; OAuth-based types are connected through the dashboard.
Types your organization is not enabled for are rejected with 403.
| name required | string |
| type required | string (DestinationType) Enum: "s3" "gdrive" "email" "webhook" "linkedin" "instagram" "facebook" "twitter" "youtube" "spiideo" Adapter type. Creatable today are |
object Non-sensitive config plus any credentials, which are split off and encrypted. |
{- "name": "string",
- "type": "s3",
- "config": { }
}{- "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"
}
}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"
}
}Update a destination. Requires the admin:org scope. config is merged; empty or null
values are skipped so existing secrets are preserved.
| id required | string |
| name | string |
object | |
| is_active | boolean |
{- "name": "string",
- "config": { },
- "is_active": true
}{- "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"
}
}Test connectivity with an inline config. Requires a valid key. Returns 200 even when the test fails.
| type required | string (DestinationType) Enum: "s3" "gdrive" "email" "webhook" "linkedin" "instagram" "facebook" "twitter" "youtube" "spiideo" Adapter type. Creatable today are |
required | object |
{- "type": "s3",
- "config": { }
}{- "success": true,
- "message": "string",
- "error": "string"
}Test connectivity for a stored destination. Requires a valid key. Returns 200 even when the test fails.
| id required | string |
{- "success": true,
- "message": "string",
- "error": "string"
}{- "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",
- "sr_logo_url": "string",
- "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 |
| 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",
- "sr_logo_url": "string",
- "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"
}
}Per-team provider coverage and a summary. Requires a valid key.
{- "object": "integration_coverage",
- "data": {
- "teams": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "external_team_id": "string",
- "magnifi": true,
- "heimspiel": true,
- "spiideo": true,
- "providers_count": 0
}
], - "summary": {
- "property1": 0,
- "property2": 0
}
}
}Search teams by name or abbreviation. 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",
- "sr_logo_url": "string",
- "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",
- "sr_logo_url": "string",
- "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 |
| 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",
- "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",
- "sr_logo_url": "string",
- "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, fetched live from Hockeydata (German/Austrian ice hockey) and never stored. 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",
- "sr_logo_url": "string",
- "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",
- "sr_logo_url": "string",
- "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",
- "sr_logo_url": "string",
- "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",
- "sr_logo_url": "string",
- "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",
- "sr_logo_url": "string",
- "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",
- "sr_logo_url": "string",
- "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",
- "sr_logo_url": "string",
- "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. Requires a valid key.
| q required | string >= 2 characters |
| limit | integer <= 50 Default: 15 |
{- "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",
- "sr_logo_url": "string",
- "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",
- "sr_logo_url": "string",
- "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, fetched live from the league's data source (SHV group feed, SFV ranking, or Hockeydata for German/Austrian ice hockey — resolved from the league row) and never stored. 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",
- "sr_logo_url": "string",
- "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",
- "sr_logo_url": "string",
- "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": { }
}{- "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. Team logos must already be uploaded via POST /api/v1/upload-asset, so each team carries a logo_url. Runs async on the same job store as the CSV import; poll GET /api/v1/entities/import/status/{jobId}. Gated by the league_import feature flag (403 when off). 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"
}
}List data sources. Requires a valid key. The list also includes enabled integrations as
virtual entries with type: INTEGRATION.
{- "object": "list",
- "data": [
- {
- "id": "string",
- "organization_id": "string",
- "name": "string",
- "type": "WEBHOOK",
- "config": { },
- "sample_payload": { },
- "webhook_slug": "string",
- "webhook_url": "string",
- "active": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "has_more": true,
- "next_cursor": "string"
}Create a data source. Requires an org admin (the admin:org scope for API keys). For
WEBHOOK sources a webhook_url is returned. If you omit webhook_secret, a generated
secret is returned once as plaintext_webhook_secret; supplying your own is preferred.
| name required | string |
| type required | string Enum: "WEBHOOK" "REST_GET" |
object For REST_GET: | |
| webhook_secret | string 32-256 url-safe base64 chars. Accepted at the top level or inside |
{- "name": "string",
- "type": "WEBHOOK",
- "config": { },
- "webhook_secret": "string"
}{- "object": "data_source",
- "data": {
- "id": "string",
- "organization_id": "string",
- "name": "string",
- "type": "WEBHOOK",
- "config": { },
- "sample_payload": { },
- "webhook_slug": "string",
- "webhook_url": "string",
- "active": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "plaintext_webhook_secret": "string",
- "warning": "string"
}
}Fetch a single data source. Requires a valid key.
| id required | string |
{- "object": "data_source",
- "data": {
- "id": "string",
- "organization_id": "string",
- "name": "string",
- "type": "WEBHOOK",
- "config": { },
- "sample_payload": { },
- "webhook_slug": "string",
- "webhook_url": "string",
- "active": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Update a data source. Requires an org admin (the admin:org scope for API keys).
| id required | string |
| name | string |
object | |
object |
{- "name": "string",
- "config": { },
- "sample_payload": { }
}{- "object": "data_source",
- "data": {
- "id": "string",
- "organization_id": "string",
- "name": "string",
- "type": "WEBHOOK",
- "config": { },
- "sample_payload": { },
- "webhook_slug": "string",
- "webhook_url": "string",
- "active": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Rotate the HMAC webhook secret. Requires an org admin (the admin:org scope for API
keys). If you omit webhook_secret, a generated secret is returned once.
| id required | string |
| webhook_secret | string |
{- "webhook_secret": "string"
}{- "object": "webhook_secret_rotation",
- "data": {
- "rotated": true,
- "secret_source": "caller",
- "plaintext_webhook_secret": "string",
- "warning": "string"
}
}Send a sample payload to a data source for schema discovery; the payload becomes the
source's sample_payload. Requires an org admin (the admin:org scope for API keys).
| slug required | string |
| property name* additional property | any |
{ }{- "object": "schema_discovery",
- "data": {
- "success": true,
- "schema_updated": true,
- "source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81"
}
}Production webhook ingestion that triggers the automations bound to a data source. 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_ingestion_result",
- "data": {
- "message": "string",
- "automations_triggered": 0,
- "automations_failed": 0,
- "results": [
- { }
]
}
}List the organization's automations. Requires a valid key.
{- "object": "list",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "data_source_id": "string",
- "target_type": "template",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "mappings": { },
- "trigger_config": { },
- "enabled": true,
- "description": "string",
- "destination_config": { },
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "last_triggered_at": "2019-08-24T14:15:22Z",
- "trigger_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "health": "ok",
- "reason": "last_run_ok",
- "last_run_at": "2019-08-24T14:15:22Z",
- "last_run_error": "string",
- "last_job_id": "ff50ec87-6f42-4569-b426-b1e2ecfdfc0f",
- "template": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "workflow": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "data_source": {
- "id": "string",
- "name": "string",
- "webhook_slug": "string",
- "type": "string"
}
}
], - "has_more": true,
- "next_cursor": "string"
}Create an automation. New automations start disabled. Requires a valid key.
| name required | string |
| data_source_id required | string A data-source UUID or |
| target_type required | string Enum: "template" "workflow" "multi_template" |
| template_id | string <uuid> |
| workflow_id | string <uuid> |
| template_ids | Array of strings <uuid> [ items <uuid > ] |
object Maps template field ids to source paths, for example |
{- "name": "string",
- "data_source_id": "string",
- "target_type": "template",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "mappings": {
- "property1": "string",
- "property2": "string"
}
}{- "object": "automation",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "data_source_id": "string",
- "target_type": "template",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "mappings": { },
- "trigger_config": { },
- "enabled": true,
- "description": "string",
- "destination_config": { },
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "last_triggered_at": "2019-08-24T14:15:22Z",
- "trigger_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "health": "ok",
- "reason": "last_run_ok",
- "last_run_at": "2019-08-24T14:15:22Z",
- "last_run_error": "string",
- "last_job_id": "ff50ec87-6f42-4569-b426-b1e2ecfdfc0f",
- "template": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "workflow": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "data_source": {
- "id": "string",
- "name": "string",
- "webhook_slug": "string",
- "type": "string"
}
}
}Create an automation for an enabled integration with auto-mapped fields. Requires a valid
key. Note that this endpoint takes camelCase body keys.
| integrationType required | string |
| templateId | string <uuid> |
| workflowId | string <uuid> |
| name | string |
object |
{- "integrationType": "string",
- "templateId": "196100ac-4eec-4fb6-a7f7-86c8b584771d",
- "workflowId": "43c4fa9b-0cbc-4b57-a121-9d7d46a3eaa4",
- "name": "string",
- "customMappings": { }
}{- "object": "automation_from_integration",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "data_source_id": "string",
- "target_type": "template",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "mappings": { },
- "trigger_config": { },
- "enabled": true,
- "description": "string",
- "destination_config": { },
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "last_triggered_at": "2019-08-24T14:15:22Z",
- "trigger_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "health": "ok",
- "reason": "last_run_ok",
- "last_run_at": "2019-08-24T14:15:22Z",
- "last_run_error": "string",
- "last_job_id": "ff50ec87-6f42-4569-b426-b1e2ecfdfc0f",
- "template": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "workflow": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "data_source": {
- "id": "string",
- "name": "string",
- "webhook_slug": "string",
- "type": "string"
}, - "mapped_field_count": 0,
- "total_field_count": 0,
- "mapping_status": "string"
}
}Fetch a single automation. Requires a valid key.
| id required | string |
{- "object": "automation",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "data_source_id": "string",
- "target_type": "template",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "mappings": { },
- "trigger_config": { },
- "enabled": true,
- "description": "string",
- "destination_config": { },
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "last_triggered_at": "2019-08-24T14:15:22Z",
- "trigger_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "health": "ok",
- "reason": "last_run_ok",
- "last_run_at": "2019-08-24T14:15:22Z",
- "last_run_error": "string",
- "last_job_id": "ff50ec87-6f42-4569-b426-b1e2ecfdfc0f",
- "template": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "workflow": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "data_source": {
- "id": "string",
- "name": "string",
- "webhook_slug": "string",
- "type": "string"
}
}
}Update an automation. Requires a valid key.
| id required | string |
| name | string |
| enabled | boolean |
object | |
| target_type | string Enum: "template" "workflow" "multi_template" |
| template_id | string <uuid> |
| workflow_id | string <uuid> |
| template_ids | Array of strings <uuid> [ items <uuid > ] |
object | |
| destination_ids | Array of strings <uuid> [ items <uuid > ] |
{- "name": "string",
- "enabled": true,
- "mappings": { },
- "target_type": "template",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "trigger_config": { },
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "object": "automation",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "data_source_id": "string",
- "target_type": "template",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "mappings": { },
- "trigger_config": { },
- "enabled": true,
- "description": "string",
- "destination_config": { },
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "last_triggered_at": "2019-08-24T14:15:22Z",
- "trigger_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "health": "ok",
- "reason": "last_run_ok",
- "last_run_at": "2019-08-24T14:15:22Z",
- "last_run_error": "string",
- "last_job_id": "ff50ec87-6f42-4569-b426-b1e2ecfdfc0f",
- "template": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "workflow": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "data_source": {
- "id": "string",
- "name": "string",
- "webhook_slug": "string",
- "type": "string"
}
}
}{- "object": "flows",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "description": "string",
- "enabled": true,
- "data_source_id": "string",
- "target_type": "template",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "mappings": { },
- "trigger_config": { },
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "destination_config": { },
- "last_triggered_at": "2019-08-24T14:15:22Z",
- "trigger_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "template": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "workflow": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "data_source": {
- "id": "string",
- "name": "string",
- "webhook_slug": "string",
- "type": "string"
}
}
]
}Create a flow. New flows start disabled. Requires a valid key.
| name | string Default: "Untitled Flow" |
| description | string |
| data_source_id | string |
| target_type | string Enum: "template" "workflow" "multi_template" |
| template_id | string <uuid> |
| workflow_id | string <uuid> |
| template_ids | Array of strings <uuid> [ items <uuid > ] |
object | |
object | |
| destination_ids | Array of strings <uuid> [ items <uuid > ] |
object |
{- "name": "Untitled Flow",
- "description": "string",
- "data_source_id": "string",
- "target_type": "template",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "mappings": { },
- "trigger_config": { },
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "destination_config": { }
}{- "object": "flow",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "description": "string",
- "enabled": true,
- "data_source_id": "string",
- "target_type": "template",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "mappings": { },
- "trigger_config": { },
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "destination_config": { },
- "last_triggered_at": "2019-08-24T14:15:22Z",
- "trigger_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "template": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "workflow": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "data_source": {
- "id": "string",
- "name": "string",
- "webhook_slug": "string",
- "type": "string"
}
}
}Fetch a single flow. Requires a valid key.
| id required | string |
{- "object": "flow",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "description": "string",
- "enabled": true,
- "data_source_id": "string",
- "target_type": "template",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "mappings": { },
- "trigger_config": { },
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "destination_config": { },
- "last_triggered_at": "2019-08-24T14:15:22Z",
- "trigger_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "template": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "workflow": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "data_source": {
- "id": "string",
- "name": "string",
- "webhook_slug": "string",
- "type": "string"
}
}
}Update a flow. enabled decides whether it runs.
status is accepted for backwards compatibility and mapped onto enabled
(active enables, anything else disables); an explicit enabled in the same
body wins. It is no longer stored or returned.
| id required | string |
| name | string |
| description | string |
| enabled | boolean Whether the flow runs. |
| status | string Deprecated Enum: "draft" "active" "paused" "error" Legacy alias - mapped onto |
object | |
| target_type | string Enum: "template" "workflow" "multi_template" |
| template_id | string <uuid> |
| workflow_id | string <uuid> |
| template_ids | Array of strings <uuid> [ items <uuid > ] |
object | |
| destination_ids | Array of strings <uuid> [ items <uuid > ] |
object | |
| data_source_id | string |
{- "name": "string",
- "description": "string",
- "enabled": true,
- "status": "draft",
- "mappings": { },
- "target_type": "template",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "trigger_config": { },
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "destination_config": { },
- "data_source_id": "string"
}{- "object": "flow",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "description": "string",
- "enabled": true,
- "data_source_id": "string",
- "target_type": "template",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "mappings": { },
- "trigger_config": { },
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "destination_config": { },
- "last_triggered_at": "2019-08-24T14:15:22Z",
- "trigger_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "template": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "workflow": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "data_source": {
- "id": "string",
- "name": "string",
- "webhook_slug": "string",
- "type": "string"
}
}
}Set a flow's status to active. Requires a valid key.
| id required | string |
{- "object": "flow",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "description": "string",
- "enabled": true,
- "data_source_id": "string",
- "target_type": "template",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "mappings": { },
- "trigger_config": { },
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "destination_config": { },
- "last_triggered_at": "2019-08-24T14:15:22Z",
- "trigger_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "template": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "workflow": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "data_source": {
- "id": "string",
- "name": "string",
- "webhook_slug": "string",
- "type": "string"
}
}
}Set a flow's status to paused. Requires a valid key.
| id required | string |
{- "object": "flow",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "description": "string",
- "enabled": true,
- "data_source_id": "string",
- "target_type": "template",
- "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "workflow_id": "03e70e31-d7a4-4401-a629-6a4b6096cdfe",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "mappings": { },
- "trigger_config": { },
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "destination_config": { },
- "last_triggered_at": "2019-08-24T14:15:22Z",
- "trigger_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "template": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "workflow": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}, - "data_source": {
- "id": "string",
- "name": "string",
- "webhook_slug": "string",
- "type": "string"
}
}
}Run a flow once, immediately. Requires a valid key.
| id required | string |
{- "object": "execution",
- "data": {
- "job_id": "453bd7d7-5355-4d6d-a38e-d9e7eb218c3f",
- "job_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "type": "template"
}
}List the organization's workflows. Requires a valid key.
| limit | integer Default: 25 |
| offset | integer Default: 0 |
{- "object": "list",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "description": "string",
- "category": "string",
- "shared_fields": { },
- "output_format": {
- "naming": "string",
- "zip_name": "string"
}, - "active": true,
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "template_count": 0,
- "templates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}
], - "field_schema": [
- {
- "id": "string",
- "key": "string",
- "type": "string",
- "label": "string",
- "description": "string",
- "required": true,
- "max_length": 0,
- "pattern": "string",
- "accepted_formats": [
- "string"
], - "max_size": 0
}
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "has_more": true,
- "next_cursor": "string"
}Create a workflow from a set of templates. Requires a valid key.
| name required | string |
| template_ids required | Array of strings <uuid> non-empty [ items <uuid > ] |
| description | string |
| category | string |
object | |
object | |
| destination_ids | Array of strings <uuid> [ items <uuid > ] |
{- "name": "string",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "description": "string",
- "category": "string",
- "output_format": { },
- "shared_fields": { },
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "object": "workflow",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "description": "string",
- "category": "string",
- "shared_fields": { },
- "output_format": {
- "naming": "string",
- "zip_name": "string"
}, - "active": true,
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "template_count": 0,
- "templates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}
], - "field_schema": [
- {
- "id": "string",
- "key": "string",
- "type": "string",
- "label": "string",
- "description": "string",
- "required": true,
- "max_length": 0,
- "pattern": "string",
- "accepted_formats": [
- "string"
], - "max_size": 0
}
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Preview the merged field schema for a set of templates. Requires a valid key.
| template_ids required | Array of strings <uuid> non-empty [ items <uuid > ] |
{- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "object": "workflow_preview",
- "data": {
- "merged_fields": { },
- "template_fields": { },
- "template_variant_fields": { },
- "field_count": 0
}
}Fetch a single workflow with its field schema. Requires a valid key.
| id required | string |
{- "object": "workflow",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "description": "string",
- "category": "string",
- "shared_fields": { },
- "output_format": {
- "naming": "string",
- "zip_name": "string"
}, - "active": true,
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "template_count": 0,
- "templates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}
], - "field_schema": [
- {
- "id": "string",
- "key": "string",
- "type": "string",
- "label": "string",
- "description": "string",
- "required": true,
- "max_length": 0,
- "pattern": "string",
- "accepted_formats": [
- "string"
], - "max_size": 0
}
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Update a workflow. Changing name regenerates the slug. Requires a valid key.
| id required | string |
| name | string |
| template_ids | Array of strings <uuid> [ items <uuid > ] |
| description | string |
| category | string |
object | |
object | |
| destination_ids | Array of strings <uuid> [ items <uuid > ] |
{- "name": "string",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "description": "string",
- "category": "string",
- "output_format": { },
- "shared_fields": { },
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "object": "workflow",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "name": "string",
- "slug": "string",
- "description": "string",
- "category": "string",
- "shared_fields": { },
- "output_format": {
- "naming": "string",
- "zip_name": "string"
}, - "active": true,
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "template_count": 0,
- "templates": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}
], - "field_schema": [
- {
- "id": "string",
- "key": "string",
- "type": "string",
- "label": "string",
- "description": "string",
- "required": true,
- "max_length": 0,
- "pattern": "string",
- "accepted_formats": [
- "string"
], - "max_size": 0
}
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Execute a workflow with shared field values supplied as multipart form data (text fields and/or files keyed by field name). Returns a ZIP archive of the rendered assets. Requires a valid key.
| id required | string |
| property name* additional property | any |
{- "error": {
- "type": "invalid_request_error",
- "code": "missing_field",
- "message": "string",
- "param": "string"
}
}Every scheduled sync and scheduled render the organization owns, across all integrations, each with a health verdict. Integrations the organization is not entitled to are omitted rather than rejected.
Use this for a dashboard view. To change a schedule, go through the per-integration routes.
{- "object": "integration_schedule_list",
- "data": {
- "schedules": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "integration_id": "string",
- "job_type": "matchday_render",
- "label": "string",
- "display_name": "Weekend Poster Regionalliga",
- "cron_expr": "0 6 * * 5",
- "enabled": true,
- "last_run_at": "2019-08-24T14:15:22Z",
- "last_run_status": "success",
- "last_run_error": "string",
- "last_run_stats": { },
- "next_run_at": "2019-08-24T14:15:22Z",
- "health": "ok",
- "reason": "last_run_ok",
- "overdue_ms": 0,
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "league_name": "string",
- "group_label": "string",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "template_names": [
- "string"
], - "window_mode": "upcoming",
- "window_days": 14,
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "destination_names": [
- "string"
], - "destination_folder": "string"
}
], - "summary": {
- "ok": 0,
- "warn": 0,
- "error": 0,
- "idle": 0
}
}
}Every schedule under this integration. league_name and template_names are
resolved server-side so a render schedule states what it renders, not only when.
| integrationId required | string
|
{- "object": "integration_schedule_list",
- "data": {
- "schedules": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "integration_id": "string",
- "job_type": "matchday_render",
- "label": "string",
- "display_name": "Weekend Poster Regionalliga",
- "cron_expr": "0 6 * * 5",
- "enabled": true,
- "last_run_at": "2019-08-24T14:15:22Z",
- "last_run_status": "success",
- "last_run_error": "string",
- "last_run_stats": { },
- "next_run_at": "2019-08-24T14:15:22Z",
- "health": "ok",
- "reason": "last_run_ok",
- "overdue_ms": 0,
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "league_name": "string",
- "group_label": "string",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "template_names": [
- "string"
], - "window_mode": "upcoming",
- "window_days": 14,
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "destination_names": [
- "string"
], - "destination_folder": "string"
}
]
}
}Only scheduled renders can be created here, and only under the matchday
integration — the data-pull schedules are seeded when their integration is
enabled. next_run_at is derived from the cron and is never accepted from a
client.
| integrationId required | string
|
| job_type required | string Enum: "matchday_render" "standings_render" |
| cron_expr required | string Standard 5-field cron, interpreted as UTC. |
| league_id required | string <uuid> |
| template_ids | Array of strings <uuid> [ items <uuid > ] At least one. |
| template_id | string <uuid> |
| window_mode required | string Enum: "upcoming" "past" |
| window_days | integer or null [ 0 .. 14 ]
|
| group_label | string or null |
| destination_ids | Array of strings <uuid> [ items <uuid > ] |
| destination_folder | string or null |
| display_name | string <= 80 characters Optional name for the schedule. Omitted, the name is derived from the job type. |
{- "job_type": "matchday_render",
- "cron_expr": "0 8 * * 5",
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
- "window_mode": "upcoming",
- "window_days": 14,
- "group_label": "string",
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "destination_folder": "string",
- "display_name": "string"
}{- "object": "integration_schedule",
- "data": {
- "schedule": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "integration_id": "string",
- "job_type": "matchday_render",
- "label": "string",
- "display_name": "Weekend Poster Regionalliga",
- "cron_expr": "0 6 * * 5",
- "enabled": true,
- "last_run_at": "2019-08-24T14:15:22Z",
- "last_run_status": "success",
- "last_run_error": "string",
- "last_run_stats": { },
- "next_run_at": "2019-08-24T14:15:22Z",
- "health": "ok",
- "reason": "last_run_ok",
- "overdue_ms": 0,
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "league_name": "string",
- "group_label": "string",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "template_names": [
- "string"
], - "window_mode": "upcoming",
- "window_days": 14,
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "destination_names": [
- "string"
], - "destination_folder": "string"
}
}
}Every field is optional; only what is sent is changed. Changing cron_expr
recomputes next_run_at.
The render-config half (league_id, template_ids, window_mode, window_days,
group_label, destination_ids, destination_folder) is rejected with 400 on
job types that have no render configuration, rather than silently ignored.
group_label, destination_folder and an empty destination_ids clear the
stored value.
label is not patchable: it is part of the uniqueness key the seeder
de-duplicates on. Use display_name to rename a schedule.
| integrationId required | string |
| id required | string <uuid> |
| cron_expr | string |
| enabled | boolean |
| display_name | string <= 80 characters Empty string resets to the name derived from the job type. |
| team_filter | Array of strings |
| league_id | string <uuid> |
| template_ids | Array of strings <uuid> non-empty [ items <uuid > ] |
| window_mode | string Enum: "upcoming" "past" |
| window_days | integer or null [ 0 .. 14 ] How far the window reaches, in days from the run day. null resets to the default (2 forward, 3 back). |
| group_label | string or null |
| destination_ids | Array of strings <uuid> [ items <uuid > ] |
| destination_folder | string or null |
{- "cron_expr": "0 8 * * 5",
- "enabled": true,
- "display_name": "string",
- "team_filter": [
- "string"
], - "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "window_mode": "upcoming",
- "window_days": 14,
- "group_label": "string",
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "destination_folder": "string"
}{- "object": "integration_schedule",
- "data": {
- "schedule": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "integration_id": "string",
- "job_type": "matchday_render",
- "label": "string",
- "display_name": "Weekend Poster Regionalliga",
- "cron_expr": "0 6 * * 5",
- "enabled": true,
- "last_run_at": "2019-08-24T14:15:22Z",
- "last_run_status": "success",
- "last_run_error": "string",
- "last_run_stats": { },
- "next_run_at": "2019-08-24T14:15:22Z",
- "health": "ok",
- "reason": "last_run_ok",
- "overdue_ms": 0,
- "league_id": "2a3fad45-7758-4caa-9967-1aff5d77e41a",
- "league_name": "string",
- "group_label": "string",
- "template_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "template_names": [
- "string"
], - "window_mode": "upcoming",
- "window_days": 14,
- "destination_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "destination_names": [
- "string"
], - "destination_folder": "string"
}
}
}Only scheduled renders (matchday_render, standings_render) can be deleted.
A data-pull schedule is seeded whenever its integration is enabled, so deleting
one would only hide it until the next reseed — disable it instead. Assets the
schedule already rendered are untouched.
| integrationId required | string |
| id required | string <uuid> |
{- "object": "integration_schedule_delete",
- "data": {
- "deleted": true,
- "schedule_id": "8929bb67-0da1-406c-99d2-5447376a4f58"
}
}Queue the schedule immediately, out of band. Deliberately forced: the run
happens even when a job for the same matchday already exists, which is the
point after a data fix. next_run_at is left alone.
| integrationId required | string |
| id required | string <uuid> |
{- "object": "integration_schedule_run",
- "data": {
- "queued": true,
- "schedule_id": "8929bb67-0da1-406c-99d2-5447376a4f58"
}
}List configured integrations and the available types. Requires a valid key. Secrets are redacted.
{- "object": "integration_list",
- "data": {
- "integrations": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "integration_type": "string",
- "config": { },
- "enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "available": [
- {
- "type": "string",
- "name": "string",
- "description": "string",
- "configured": true,
- "enabled": true
}
]
}
}Fetch one integration. Requires a valid key. Secrets are redacted.
| type required | string |
{- "object": "integration",
- "data": {
- "integration": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "integration_type": "string",
- "config": { },
- "enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "configured": true
}
}Create or update an integration's credentials. Requires an org admin (the admin:org
scope for API keys). magnifi needs accessKey and accessSecret; spiideo needs
clientId, clientSecret and userId.
| type required | string |
required | object |
| enabled | boolean Default: true |
{- "config": { },
- "enabled": true
}{- "object": "integration",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "integration_type": "string",
- "config": { },
- "enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Test integration credentials. Requires a valid key. Returns 200 even when the test fails.
| type required | string |
required | object |
{- "config": { }
}{- "object": "integration_test_result",
- "data": {
- "success": true,
- "message": "string",
- "error": "string"
}
}Metadata for all available integration types (no secrets). Requires a valid key.
{- "object": "list",
- "data": [
- {
- "id": "string",
- "name": "string",
- "type": "string",
- "tier": "string",
- "description": "string",
- "ui": { },
- "credentials": [
- {
- "key": "string",
- "label": "string",
- "type": "string",
- "required": true,
- "description": "string"
}
], - "sample_payload": { },
- "docs": "string"
}
], - "has_more": true,
- "next_cursor": "string"
}Metadata for one integration type. Requires a valid key.
| type required | string |
{- "object": "integration_config",
- "data": {
- "id": "string",
- "name": "string",
- "type": "string",
- "tier": "string",
- "description": "string",
- "ui": { },
- "credentials": [
- {
- "key": "string",
- "label": "string",
- "type": "string",
- "required": true,
- "description": "string"
}
], - "sample_payload": { },
- "docs": "string"
}
}Upload a single file (any multipart field name) and receive its public URL. Requires a
valid key. Returns a flat { success, url, filename } payload.
| file | string <binary> |
{- "success": true,
- "url": "string",
- "filename": "string"
}Get a signed PUT URL for direct browser-to-storage upload. Requires a valid key. The
data fields are camelCase.
| filename | string Default: "asset.bin" |
| contentType | string Accepted but currently ignored. |
{- "filename": "asset.bin",
- "contentType": "string"
}{- "success": true,
- "data": {
- "uploadUrl": "string",
- "publicUrl": "string",
- "storagePath": "string"
}
}Combined weekly, all-time and history report. Requires a valid key. Note the wrapper key
allTime is camelCase.
| weeks | integer <= 52 Default: 8 |
| weekStart | string <date> |
| weekEnd | string <date> |
{- "success": true,
- "data": {
- "weekly": {
- "period": {
- "start": "string",
- "end": "string",
- "label": "string"
}, - "current": { },
- "previous": { },
- "trend": { },
- "generated_at": "2019-08-24T14:15:22Z"
}, - "allTime": {
- "total_assets": 0,
- "total_jobs": 0,
- "days_since_launch": 0,
- "first_render": "2019-08-24T14:15:22Z",
- "avg_assets_per_week": 0
}, - "history": [
- {
- "week_start": "string",
- "week_label": "string",
- "assets": 0
}
]
}
}Weekly render summary with week-over-week trend. Requires a valid key.
| weekStart | string <date> |
| weekEnd | string <date> |
{- "success": true,
- "data": {
- "period": {
- "start": "string",
- "end": "string",
- "label": "string"
}, - "current": { },
- "previous": { },
- "trend": { },
- "generated_at": "2019-08-24T14:15:22Z"
}
}Per-week asset counts, oldest to newest. Requires a valid key.
| weeks | integer <= 52 Default: 8 |
{- "success": true,
- "data": [
- {
- "week_start": "string",
- "week_label": "string",
- "assets": 0
}
]
}Render throughput over a rolling window. Requires a valid key.
| days | integer [ 1 .. 90 ] Default: 7 |
{- "success": true,
- "data": {
- "window_days": 0,
- "period_start": "string",
- "period_end": "string",
- "total_renders": 0,
- "total_jobs": 0,
- "completed": 0,
- "failed": 0,
- "success_rate": 0,
- "avg_render_time_ms": 0,
- "avg_render_time_display": "string",
- "top_template": "string",
- "daily": [
- {
- "date": "string",
- "total": 0,
- "completed": 0,
- "failed": 0,
- "jobs": 0
}
], - "peak_day": "string",
- "peak_count": 0,
- "generated_at": "2019-08-24T14:15:22Z"
}
}Human-readable insight lines for a page's insight lane. Requires a valid key. Unknown areas fall back to 'runs'.
| area | string Default: "runs" Enum: "runs" "hub" "build" "library" |
{- "success": true,
- "data": {
- "area": "string",
- "items": [
- {
- "kind": "win",
- "message": "string"
}
], - "generated_at": "2019-08-24T14:15:22Z"
}
}Estimated hand-editing time the render engine replaced, from each template's user-entered manual_minutes (asset-aware). Reports the savings within the requested window plus a constant all-time anchor. Requires a valid key. has_estimates is false until at least one template is estimated.
| created_after | string <date-time> Lower bound of the reporting window (ISO 8601). The window figures cover created_after..now; omit for all-time. |
{- "success": true,
- "data": {
- "has_estimates": true,
- "templates_estimated": 0,
- "window_minutes": 0,
- "window_assets": 0,
- "window_hours": 0,
- "all_time_minutes": 0,
- "all_time_assets": 0,
- "all_time_hours": 0,
- "generated_at": "2019-08-24T14:15:22Z"
}
}Resize an uploaded logo to a 1000x1000 PNG. Requires a valid key. Returns the PNG directly.
| logo required | string <binary> |
| isNationalTeam | string Pass |
{- "success": false,
- "error": "string",
- "message": "string"
}Queue a batch logo resize from storage URLs. Requires a valid key. Returns a camelCase payload.
| sessionId required | string |
| logoStorageUrls required | Array of strings |
| logoBlobUrls | Array of strings Legacy alias for logoStorageUrls. |
| isNationalTeam | boolean |
{- "sessionId": "string",
- "logoStorageUrls": [
- "string"
], - "logoBlobUrls": [
- "string"
], - "isNationalTeam": true
}{- "success": true,
- "sessionId": "string",
- "eventId": "string",
- "message": "string"
}Upload logo files for a batch resize. Requires a valid key. Returns a camelCase payload.
| logoFiles required | Array of strings <binary> [ items <binary > ] |
| sessionId | string |
{- "success": true,
- "sessionId": "string",
- "logoUrls": [
- "string"
], - "uploadedCount": 0
}List every font registered for the organization. Requires the read:templates scope.
Brand fonts are uploaded once and reused across templates and plugins; at render time a
registered font takes precedence over the same Google Fonts family (the designer's exact cut).
{- "object": "list",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "family": "Montserrat",
- "weight": 700,
- "style": "normal",
- "postscript_name": "Montserrat-BoldItalic",
- "format": "woff2",
- "original_filename": "string",
- "size_bytes": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
}Register a font for the organization. Requires the write:templates scope. Re-uploading the
same face (matched by postscript, else family + weight + style) replaces it.
| font required | string <binary> The font file (.ttf, .otf, .woff or .woff2, max 8 MB). |
| family required | string |
| weight | integer Default: 400 |
| style | string Default: "normal" Enum: "normal" "italic" |
| postscript | string Exact face identifier (preferred match key). |
| format | string Enum: "woff2" "woff" "ttf" "otf" |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "string",
- "family": "Montserrat",
- "weight": 700,
- "style": "normal",
- "postscript_name": "Montserrat-BoldItalic",
- "format": "woff2",
- "original_filename": "string",
- "size_bytes": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Serve the raw font file. Requires the read:templates scope. Lets a browser client (e.g. the
Figma plugin) fetch a registered font through the API instead of the storage URL directly,
avoiding cross-origin restrictions.
| id required | string <uuid> |
{- "error": {
- "type": "invalid_request_error",
- "code": "missing_field",
- "message": "string",
- "param": "string"
}
}