Overview
The C21 Live Control REST API exposes every resource visible in the operator UI. Use it to script provisioning, integrate with playout systems, build internal dashboards or drive operations from an external scheduler. The MCP server documented under MCP server wraps the same operations for any MCP-compatible AI agent or automation.
Base URL
https://<host>/c21apiv2
<host> is the hostname of your C21 Live Control deployment. Every operation lives under /c21apiv2.
Resources
The API is organised around the same resources surfaced in the UI. Each resource usually exposes two scopes: an operational scope (e.g. /livestreams, /livestreams/{id}/start) and a CRUD scope (/crud/livestreams). Consult the OpenAPI spec for the full per-resource operation index.
| Resource | Operational path | UI section |
|---|---|---|
| Channels | /c21apiv2/channels | Sources |
| Encodings | /c21apiv2/encodings | Encodings |
| Encoding groups | /c21apiv2/encodings/groups | Encodings |
| Destinations | /c21apiv2/publishings | Destinations |
| Destination groups | /c21apiv2/publishings/groups | Destinations |
| Live streams | /c21apiv2/livestreams | Live streams |
| Schedules | /c21apiv2/schedules | Scheduler |
| Recordings | /c21apiv2/recordings | Recordings |
| Devices | /c21apiv2/devices | Devices |
| Device groups | /c21apiv2/devices/groups | Devices |
| Assets | /c21apiv2/assets (with ?fileType=logos|files|clips) | Assets |
| Users | /c21apiv2/users | Users |
| User groups | /c21apiv2/usergroups | Users |
| API tokens | /c21apiv2/security/tokens | (API-only — no UI Interface) |
| DRM providers | /c21apiv2/settings/integrations/drmproviders | Integrations → DRM Providers |
| C21 Live Cloud accounts | /c21apiv2/settings/integrations/c21livecloud | Integrations → C21 Live Cloud |
| MediaCopilot | /c21apiv2/settings/integrations/mediacopilot | Integrations → MediaCopilot |
| System | /c21apiv2/system | (API-only — System Administrator surface) |
Resource paths follow the OpenAPI spec literally. Where a path contains a templated segment in braces ({livestreamId}, etc.), substitute the concrete value at call time.
Content types
| Direction | Type |
|---|---|
| Request body | application/json |
| Response body | application/json |
| File uploads (Assets, licences) | multipart/form-data |
HTTP verbs
| Verb | Use |
|---|---|
GET | Read a single resource or list. |
POST | Create a resource, or trigger an action (/livestreams/{id}/start, /livestreams/{id}/stop). |
PUT | Full replace. |
PATCH | Partial update (used by patchSystemPreferences). |
DELETE | Remove a resource. |
Action endpoints under POST use a verb-shaped suffix (/start, /stop, /validate) rather than a separate verb.
Idempotency
Clients may send an optional Idempotency-Key header on mutating operations; where the deployment supports it, replayed requests with the same key within the retention window return the cached response from the first call. Confirm with your platform team before building a client that relies on this behaviour. Keys, when applicable, should be opaque, unique per logical operation, and at most 64 characters.
Worked example
Start a Live stream against the public API:
curl -X POST "https://<host>/c21apiv2/livestreams/{livestreamId}/start" \
-H "Authorization: Bearer $LIVECONTROL_TOKEN" \
-H "Idempotency-Key: ops-2026-05-15-news-start-01" \
-H "Content-Type: application/json"
The response carries an X-Request-Id header that correlates the call with server-side events. Clients should first call GET /c21apiv2/livestreams/{livestreamId}/start/config (operation getLivestreamStartConfig) to obtain a valid idEncoderGroup and the last saved startConfig[] before posting the start.
FAQ
https://<host>/c21doc/openapi.yaml and an interactive Swagger UI at https://<host>/c21doc/swagger/. Every operation, schema and enum cited in these reference pages traces back to it.