DRM Providers

Providers

Register, validate and manage DRM providers in C21 Live Control.

A DRM provider is the credentials catalogue entry that connects C21 Live Control to an upstream multi-DRM service. Each provider record declares a brand (provider_type), a SPEKE endpoint and the credentials the brand expects. Once registered, the provider can be attached to a Destination through the Destination's drm block.

Schema (DrmProvider)

UI labelFieldNotes
NamenameDisplay name (≤ 100 characters).
Provider typeprovider_typeBrand identifier from the server-side catalogue (today AXINOM, EZDRM). Drives the credential field set the form requires. The UI shows the values with human casing (Axinom, EZDRM); the spec and API expect uppercase.
SPEKE URLspeke_urlPrimary SPEKE endpoint.
SPEKE URL backupspeke_url_backupOptional fallback SPEKE endpoint.
Tenant IDtenant_idRequired when the brand declares requires_tenant_id = true (for example AXINOM).
CredentialscredentialsProvider-type-specific envelope. Write-only — GET returns the sentinel •••••••• for stored values. Resending the envelope unchanged on PUT preserves the stored blob.
EnabledenabledWhether the provider is selectable by Destinations.
Validation statusvalidation_statusOne of UNKNOWN, VALID, INVALID. Reset to UNKNOWN after any change that affects connectivity.
Last validationvalidation_dateTimestamp of the last validateDrmProvider round trip.
Validation errorvalidation_errorSanitised error message from the last failed validation.
Supported systemssupported_systemsArray exposed by the brand. A subset of Widevine, PlayReady, FairPlay. The OpenAPI spec emits the values in uppercase (WIDEVINE / PLAYREADY / FAIRPLAY); this document and the UI use TitleCase for readability.

Operations

ActionMethod + pathoperationId
List providersGET /c21apiv2/settings/integrations/drmprovidersgetAllDrmProviders
Read a providerGET /c21apiv2/settings/integrations/drmproviders/{providerId}getDrmProviderById
Register a providerPOST /c21apiv2/settings/integrations/drmprovidersaddDrmProvider
Update a providerPUT /c21apiv2/settings/integrations/drmproviders/{providerId}updateDrmProvider
Delete a providerDELETE /c21apiv2/settings/integrations/drmproviders/{providerId}deleteDrmProvider
Validate a providerPOST /c21apiv2/settings/integrations/drmproviders/{providerId}/validatevalidateDrmProvider

Every operation requires the System Administrator role.

Register a provider

Open the form

Open Integrations → DRM → Providers → Add provider.

Fill the fields

Set Name, Provider type, SPEKE URL, optional Tenant ID and the brand-specific Credentials envelope. Keep Enabled on for normal operation.

Save

Submitting calls addDrmProvider. The credentials envelope is encrypted on the server (AES-256-CBC, with a key derived via PBKDF2-SHA256) and never returned again; has_credentials is set to true on the row.

Validate

Run the Validate action. validateDrmProvider round-trips the stored credentials against the upstream SPEKE service and updates validation_status. A failed validation surfaces a sanitised error in validation_error; correct the credentials with an update and re-validate.

Edit and delete

updateDrmProvider is a partial update. Resending the credentials envelope with the sentinel •••••••• values preserves the stored blob; sending any field with a real value re-encrypts the full envelope.

deleteDrmProvider removes the provider. Destinations that referenced the deleted provider via drm.provider_id lose that reference and fail validation at start time until they are pointed at a different provider.

Attaching a provider to a Destination

Once a provider is registered and VALID, attach it on each protected Destination through the drm block (see Destinations):

{
  "drm": {
    "active": true,
    "provider_id": <provider id>,
    "contentid": "<content identifier>",
    "systems": ["Widevine", "PlayReady"]
  }
}

encryption_mode is omitted because the server derives it from systems (no FairPlaycenc). Sending it explicitly is allowed; the server recomputes the value either way.

A Destination without DRM configured publishes clear.

FAQ

Copyright © 2026