Download OpenAPI specification:
Content Management System and content delivery endpoints for the EncoraStream OTT Platform.
Covers:
Returns published movies available to the authenticated user's territory and subscription.
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| sort | string Sort field and direction. Prefix with |
| q | string <= 200 characters Full-text search query (max 200 characters). |
| genre | string |
| release_year | integer |
| content_rating | string (ContentRating) Enum: "G" "PG" "PG-13" "R" "NC-17" "TV-Y" "TV-G" "TV-PG" "TV-14" "TV-MA" "UNRATED" |
| language | string |
| fields | string Comma-separated list of fields to include in the response (sparse fieldset).
Example: |
| If-None-Match | string ETag from a prior response. Returns |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "tagline": "string",
- "release_year": 1888,
- "runtime_minutes": 1,
- "content_rating": "G",
- "genres": [
- "string"
], - "country_of_origin": [
- "st"
], - "studio": "string",
- "audio_languages": [
- "string"
], - "subtitle_languages": [
- "string"
], - "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| movie_id required | string <uuid> |
| fields | string Comma-separated list of fields to include in the response (sparse fieldset).
Example: |
| If-None-Match | string ETag from a prior response. Returns |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "tagline": "string",
- "release_year": 1888,
- "runtime_minutes": 1,
- "content_rating": "G",
- "genres": [
- "string"
], - "country_of_origin": [
- "st"
], - "studio": "string",
- "audio_languages": [
- "string"
], - "subtitle_languages": [
- "string"
], - "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "type": "teaser",
- "language": "en",
- "duration_seconds": 1,
- "expires_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}
]
}Returns movies similar to the specified title based on genre, cast, and viewing patterns.
| movie_id required | string <uuid> |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "tagline": "string",
- "release_year": 1888,
- "runtime_minutes": 1,
- "content_rating": "G",
- "genres": [
- "string"
], - "country_of_origin": [
- "st"
], - "studio": "string",
- "audio_languages": [
- "string"
], - "subtitle_languages": [
- "string"
], - "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
}Returns short-lived signed DASH/HLS manifest URLs.
Requires an active subscription that covers this title.
Device ID header is required and validated against registered devices.
Concurrency is enforced against the plan's max_concurrent_streams limit.
| movie_id required | string <uuid> |
| X-Device-Id required | string <= 128 characters Registered device identifier. |
| X-Profile-Id | string <uuid> Active sub-profile ID for multi-profile accounts. |
{- "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",
- "expires_at": "2019-08-24T14:15:22Z",
- "token_refresh_before": "2019-08-24T14:15:22Z"
}| movie_id required | string <uuid> |
{- "subtitles": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "language": "en-US",
- "language_name": "English",
- "type": "subtitle",
- "format": "vtt",
- "url_expires_at": "2019-08-24T14:15:22Z",
- "is_default": true,
- "is_forced": true
}
], - "audio": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "language": "en-US",
- "language_name": "English",
- "type": "subtitle",
- "format": "vtt",
- "url_expires_at": "2019-08-24T14:15:22Z",
- "is_default": true,
- "is_forced": true
}
]
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| sort | string Sort field and direction. Prefix with |
| q | string <= 200 characters Full-text search query (max 200 characters). |
| genre | string |
| status | string Enum: "ongoing" "ended" "canceled" |
| content_rating | string (ContentRating) Enum: "G" "PG" "PG-13" "R" "NC-17" "TV-Y" "TV-G" "TV-PG" "TV-14" "TV-MA" "UNRATED" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "content_rating": "G",
- "genres": [
- "string"
], - "network": "string",
- "country_of_origin": [
- "st"
], - "language": "en",
- "first_air_date": "2019-08-24",
- "last_air_date": "2019-08-24",
- "total_seasons": 0,
- "total_episodes": 0,
- "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "content_rating": "G",
- "genres": [
- "string"
], - "network": "string",
- "country_of_origin": [
- "st"
], - "language": "en",
- "first_air_date": "2019-08-24",
- "last_air_date": "2019-08-24",
- "total_seasons": 0,
- "total_episodes": 0,
- "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| show_id required | string <uuid> |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "show_id": "503c9125-a11a-4f69-b904-e679735399e2",
- "season_number": 1,
- "title": "string",
- "synopsis": "string",
- "episode_count": 0,
- "images": {
}, - "air_date": "2019-08-24",
- "end_date": "2019-08-24",
- "status": "draft",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
}| show_id required | string <uuid> |
| season_number required | integer >= 1 |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "show_id": "503c9125-a11a-4f69-b904-e679735399e2",
- "season_number": 1,
- "title": "string",
- "synopsis": "string",
- "episode_count": 0,
- "images": {
}, - "air_date": "2019-08-24",
- "end_date": "2019-08-24",
- "status": "draft",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "type": "teaser",
- "language": "en",
- "duration_seconds": 1,
- "expires_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}
]
}| show_id required | string <uuid> |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "content_rating": "G",
- "genres": [
- "string"
], - "network": "string",
- "country_of_origin": [
- "st"
], - "language": "en",
- "first_air_date": "2019-08-24",
- "last_air_date": "2019-08-24",
- "total_seasons": 0,
- "total_episodes": 0,
- "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
}| show_id required | string <uuid> |
| season_number required | integer >= 1 |
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| sort | string Sort field and direction. Prefix with |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "show_id": "503c9125-a11a-4f69-b904-e679735399e2",
- "season_id": "3e93eb58-18e4-4960-a483-d51daf6cd6fd",
- "season_number": 1,
- "episode_number": 0,
- "title": "string",
- "synopsis": "string",
- "runtime_minutes": 1,
- "content_rating": "G",
- "images": {
}, - "status": "draft",
- "air_date": "2019-08-24",
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| show_id required | string <uuid> |
| season_number required | integer >= 1 |
| episode_number required | integer >= 0 |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "show_id": "503c9125-a11a-4f69-b904-e679735399e2",
- "season_id": "3e93eb58-18e4-4960-a483-d51daf6cd6fd",
- "season_number": 1,
- "episode_number": 0,
- "title": "string",
- "synopsis": "string",
- "runtime_minutes": 1,
- "content_rating": "G",
- "images": {
}, - "status": "draft",
- "air_date": "2019-08-24",
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Same concurrency, geo, and subscription enforcement as movie streaming.
| episode_id required | string <uuid> |
| X-Device-Id required | string <= 128 characters Registered device identifier. |
| X-Profile-Id | string <uuid> Active sub-profile ID for multi-profile accounts. |
{- "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",
- "expires_at": "2019-08-24T14:15:22Z",
- "token_refresh_before": "2019-08-24T14:15:22Z"
}| episode_id required | string <uuid> |
{- "subtitles": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "language": "en-US",
- "language_name": "English",
- "type": "subtitle",
- "format": "vtt",
- "url_expires_at": "2019-08-24T14:15:22Z",
- "is_default": true,
- "is_forced": true
}
], - "audio": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "language": "en-US",
- "language_name": "English",
- "type": "subtitle",
- "format": "vtt",
- "url_expires_at": "2019-08-24T14:15:22Z",
- "is_default": true,
- "is_forced": true
}
]
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| q | string <= 200 characters Full-text search query (max 200 characters). |
| category | string |
| language | string |
| status | string Enum: "live" "offline" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "number": 1,
- "description": "string",
- "category": "News",
- "language": "en",
- "images": {
}, - "status": "live",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "is_premium": true,
- "is_catchup_enabled": true,
- "catchup_days": 30,
- "sort_order": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "number": 1,
- "description": "string",
- "category": "News",
- "language": "en",
- "images": {
}, - "status": "live",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "is_premium": true,
- "is_catchup_enabled": true,
- "catchup_days": 30,
- "sort_order": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Returns short-lived signed DASH/HLS manifest URLs for a live channel. Validates subscription, geo, device registration, and concurrency.
| channel_id required | string <uuid> |
| X-Device-Id required | string <= 128 characters Registered device identifier. |
| X-Profile-Id | string <uuid> Active sub-profile ID for multi-profile accounts. |
{- "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",
- "expires_at": "2019-08-24T14:15:22Z",
- "token_refresh_before": "2019-08-24T14:15:22Z"
}Returns stream URLs for a previously aired programme (time-shifted replay).
| channel_id required | string <uuid> |
| program_id required | string <uuid> |
| X-Device-Id required | string <= 128 characters Registered device identifier. |
| X-Profile-Id | string <uuid> Active sub-profile ID for multi-profile accounts. |
{- "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",
- "expires_at": "2019-08-24T14:15:22Z",
- "token_refresh_before": "2019-08-24T14:15:22Z"
}Restarts the currently-airing programme from the beginning (start-over).
| channel_id required | string <uuid> |
| X-Device-Id required | string <= 128 characters Registered device identifier. |
| X-Profile-Id | string <uuid> Active sub-profile ID for multi-profile accounts. |
{- "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",
- "expires_at": "2019-08-24T14:15:22Z",
- "token_refresh_before": "2019-08-24T14:15:22Z"
}Returns programme schedule for one or more channels within a time range. Maximum time window: 7 days.
| channel_ids required | Array of strings <uuid> [ 1 .. 50 ] items [ items <uuid > ] |
| start_time required | string <date-time> |
| end_time required | string <date-time> |
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
{- "data": {
- "property1": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "channel_id": "bbe8aa76-a4bb-46f6-a785-df8e831cc459",
- "title": "string",
- "description": "string",
- "content_rating": "G",
- "language": "en",
- "start_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "duration_minutes": 0,
- "is_live": true,
- "is_catchup_available": true,
- "catchup_expires_at": "2019-08-24T14:15:22Z",
- "season_number": 0,
- "episode_number": 0,
- "categories": [
- "string"
], - "images": {
}, - "linked_vod_id": "657aaad7-6df0-4878-8900-295f294bc20e"
}
], - "property2": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "channel_id": "bbe8aa76-a4bb-46f6-a785-df8e831cc459",
- "title": "string",
- "description": "string",
- "content_rating": "G",
- "language": "en",
- "start_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "duration_minutes": 0,
- "is_live": true,
- "is_catchup_available": true,
- "catchup_expires_at": "2019-08-24T14:15:22Z",
- "season_number": 0,
- "episode_number": 0,
- "categories": [
- "string"
], - "images": {
}, - "linked_vod_id": "657aaad7-6df0-4878-8900-295f294bc20e"
}
]
}, - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Returns the currently-airing programme for each requested channel.
| channel_ids required | Array of strings <uuid> [ 1 .. 50 ] items [ items <uuid > ] |
{- "data": {
- "property1": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "channel_id": "bbe8aa76-a4bb-46f6-a785-df8e831cc459",
- "title": "string",
- "description": "string",
- "content_rating": "G",
- "language": "en",
- "start_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "duration_minutes": 0,
- "is_live": true,
- "is_catchup_available": true,
- "catchup_expires_at": "2019-08-24T14:15:22Z",
- "season_number": 0,
- "episode_number": 0,
- "categories": [
- "string"
], - "images": {
}, - "linked_vod_id": "657aaad7-6df0-4878-8900-295f294bc20e"
}, - "property2": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "channel_id": "bbe8aa76-a4bb-46f6-a785-df8e831cc459",
- "title": "string",
- "description": "string",
- "content_rating": "G",
- "language": "en",
- "start_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "duration_minutes": 0,
- "is_live": true,
- "is_catchup_available": true,
- "catchup_expires_at": "2019-08-24T14:15:22Z",
- "season_number": 0,
- "episode_number": 0,
- "categories": [
- "string"
], - "images": {
}, - "linked_vod_id": "657aaad7-6df0-4878-8900-295f294bc20e"
}
}
}| program_id required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "channel_id": "bbe8aa76-a4bb-46f6-a785-df8e831cc459",
- "title": "string",
- "description": "string",
- "content_rating": "G",
- "language": "en",
- "start_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "duration_minutes": 0,
- "is_live": true,
- "is_catchup_available": true,
- "catchup_expires_at": "2019-08-24T14:15:22Z",
- "season_number": 0,
- "episode_number": 0,
- "categories": [
- "string"
], - "images": {
}, - "linked_vod_id": "657aaad7-6df0-4878-8900-295f294bc20e"
}Returns published collections. Geo-filtered by caller region.
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "slug": "string",
- "title": "string",
- "subtitle": "string",
- "type": "manual",
- "status": "draft",
- "query": "string",
- "item_refs": [
- {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14"
}
], - "item_count": 0,
- "sort_order": 0,
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "images": {
}, - "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| collection_id required | string <uuid> |
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "slug": "string",
- "title": "string",
- "subtitle": "string",
- "type": "manual",
- "status": "draft",
- "query": "string",
- "item_refs": [
- {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14"
}
], - "item_count": 0,
- "sort_order": 0,
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "images": {
}, - "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Returns the server-driven home screen layout — an ordered list of rails.
Supports If-None-Match for efficient polling (returns 304 when unchanged).
| X-Profile-Id | string <uuid> Active sub-profile ID for multi-profile accounts. |
| If-None-Match | string ETag from a prior response. Returns |
{- "rails": [
- {
- "id": "string",
- "title": "string",
- "type": "standard",
- "layout": "landscape",
- "collection_id": "4bdef85c-3f50-4006-a713-2350da665f80",
- "items": [
- {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "images": {
}
}
]
}
], - "etag": "string"
}Returns the full genre taxonomy. Cacheable — changes infrequently.
| content_type | string Enum: "movie" "show" |
| If-None-Match | string ETag from a prior response. Returns |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Science Fiction",
- "slug": "science-fiction",
- "content_types": [
- "movie"
], - "parent_id": "1c6ca187-e61f-4301-8dcb-0e9749e89eef",
- "content_count": 0,
}
]
}Searches across movies, shows, episodes, and channels.
Results are geo-filtered and subscription-aware.
Only published and scheduled content appears.
| q | string <= 200 characters Full-text search query (max 200 characters). |
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| content_type | string Enum: "movie" "show" "episode" "channel" |
| genre | string |
| content_rating | string (ContentRating) Enum: "G" "PG" "PG-13" "R" "NC-17" "TV-Y" "TV-G" "TV-PG" "TV-14" "TV-MA" "UNRATED" |
| release_year_min | integer >= 1888 |
| release_year_max | integer <= 2100 |
| language | string |
{- "data": [
- {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "title": "string",
- "synopsis_snippet": "string",
- "images": {
}, - "score": 1,
- "release_year": 0,
- "content_rating": "G",
- "genres": [
- "string"
], - "status": "published"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Returns type-ahead suggestions as the user types. Results are lightweight (title + type only).
| q required | string [ 1 .. 100 ] characters |
| limit | integer [ 1 .. 20 ] Default: 10 |
{- "data": [
- {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "title": "string",
}
]
}Returns client configuration fetched on app launch: feature flags, minimum app
versions, CDN base URL, and maintenance status.
Supports If-None-Match for efficient polling.
| platform required | string Enum: "ios" "android" "tvos" "web" "roku" "firetv" |
| If-None-Match | string ETag from a prior response. Returns |
{- "minimum_app_version": {
- "property1": "string",
- "property2": "string"
}, - "feature_flags": {
- "property1": true,
- "property2": true
}, - "maintenance": {
- "active": true,
- "message": "string"
}, - "supported_locales": [
- "string"
], - "config_version": "string"
}Returns overall platform health and per-component status.
Does not require authentication. Used by load balancers and monitoring systems.
Returns 200 for ok and degraded; returns 503 for down.
{- "status": "ok",
- "version": "2.0.0",
- "timestamp": "2019-08-24T14:15:22Z",
- "components": {
- "property1": {
- "status": "ok",
- "latency_ms": 0,
- "detail": "string"
}, - "property2": {
- "status": "ok",
- "latency_ms": 0,
- "detail": "string"
}
}
}Returns all movies including drafts, unpublished, and scheduled. Geo-unfiltered.
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| sort | string Sort field and direction. Prefix with |
| q | string <= 200 characters Full-text search query (max 200 characters). |
| status | string Enum: "draft" "published" "scheduled" "unpublished" |
| genre | string |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "tagline": "string",
- "release_year": 1888,
- "runtime_minutes": 1,
- "content_rating": "G",
- "genres": [
- "string"
], - "country_of_origin": [
- "st"
], - "studio": "string",
- "audio_languages": [
- "string"
], - "subtitle_languages": [
- "string"
], - "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended — time-ordered, collision-resistant) that makes a write request safely retryable. Replaying the same key within 24h returns the original result instead of performing the action twice. Strongly recommended on all payment and subscription mutations. |
| title required | string <= 255 characters |
| original_title | string <= 255 characters Original title if different from localised title. |
| synopsis | string <= 5000 characters |
| tagline | string <= 300 characters |
| release_year | integer [ 1888 .. 2100 ] |
| runtime_minutes | integer >= 1 Total runtime. Required before publishing. |
| content_rating | string (ContentRating) Enum: "G" "PG" "PG-13" "R" "NC-17" "TV-Y" "TV-G" "TV-PG" "TV-14" "TV-MA" "UNRATED" Parental guidance rating. Required before publishing. |
| genres | Array of strings Genre slugs (from |
| country_of_origin | Array of strings[ items = 2 characters ] ISO 3166-1 alpha-2 production country codes. |
| studio | string <= 200 characters Primary production studio or distributor. |
| audio_languages | Array of strings BCP-47 language codes for available dubbed/original audio tracks. |
| subtitle_languages | Array of strings BCP-47 language codes for available subtitle/CC tracks. |
Array of objects (CastMember) | |
object (ImageSet) Content artwork. All URLs are CDN-hosted, immutable, and cache-safe. | |
| status required | string Enum: "draft" "published" "scheduled" "unpublished" |
object (GeoRestrictionRef) Inline geo-restriction summary embedded in content responses. | |
| drm_required required | boolean When true, clients must acquire a DRM licence before playback. |
| available_from | string <date-time> Earliest playback availability datetime (window start). |
| available_until | string <date-time> Last playback availability datetime (window end). Null = indefinite. |
{- "title": "string",
- "original_title": "string",
- "synopsis": "string",
- "tagline": "string",
- "release_year": 1888,
- "runtime_minutes": 1,
- "content_rating": "G",
- "genres": [
- "string"
], - "country_of_origin": [
- "st"
], - "studio": "string",
- "audio_languages": [
- "string"
], - "subtitle_languages": [
- "string"
], - "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "tagline": "string",
- "release_year": 1888,
- "runtime_minutes": 1,
- "content_rating": "G",
- "genres": [
- "string"
], - "country_of_origin": [
- "st"
], - "studio": "string",
- "audio_languages": [
- "string"
], - "subtitle_languages": [
- "string"
], - "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "tagline": "string",
- "release_year": 1888,
- "runtime_minutes": 1,
- "content_rating": "G",
- "genres": [
- "string"
], - "country_of_origin": [
- "st"
], - "studio": "string",
- "audio_languages": [
- "string"
], - "subtitle_languages": [
- "string"
], - "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| movie_id required | string <uuid> |
| If-Match | string ETag of the resource version the client last read. Enables optimistic concurrency on writes:
the request is rejected with |
| title required | string <= 255 characters |
| original_title | string <= 255 characters Original title if different from localised title. |
| synopsis | string <= 5000 characters |
| tagline | string <= 300 characters |
| release_year | integer [ 1888 .. 2100 ] |
| runtime_minutes | integer >= 1 Total runtime. Required before publishing. |
| content_rating | string (ContentRating) Enum: "G" "PG" "PG-13" "R" "NC-17" "TV-Y" "TV-G" "TV-PG" "TV-14" "TV-MA" "UNRATED" Parental guidance rating. Required before publishing. |
| genres | Array of strings Genre slugs (from |
| country_of_origin | Array of strings[ items = 2 characters ] ISO 3166-1 alpha-2 production country codes. |
| studio | string <= 200 characters Primary production studio or distributor. |
| audio_languages | Array of strings BCP-47 language codes for available dubbed/original audio tracks. |
| subtitle_languages | Array of strings BCP-47 language codes for available subtitle/CC tracks. |
Array of objects (CastMember) | |
object (ImageSet) Content artwork. All URLs are CDN-hosted, immutable, and cache-safe. | |
| status required | string Enum: "draft" "published" "scheduled" "unpublished" |
object (GeoRestrictionRef) Inline geo-restriction summary embedded in content responses. | |
| drm_required required | boolean When true, clients must acquire a DRM licence before playback. |
| available_from | string <date-time> Earliest playback availability datetime (window start). |
| available_until | string <date-time> Last playback availability datetime (window end). Null = indefinite. |
{- "title": "string",
- "original_title": "string",
- "synopsis": "string",
- "tagline": "string",
- "release_year": 1888,
- "runtime_minutes": 1,
- "content_rating": "G",
- "genres": [
- "string"
], - "country_of_origin": [
- "st"
], - "studio": "string",
- "audio_languages": [
- "string"
], - "subtitle_languages": [
- "string"
], - "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "tagline": "string",
- "release_year": 1888,
- "runtime_minutes": 1,
- "content_rating": "G",
- "genres": [
- "string"
], - "country_of_origin": [
- "st"
], - "studio": "string",
- "audio_languages": [
- "string"
], - "subtitle_languages": [
- "string"
], - "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Permanently deletes a movie. Only permitted when status is draft or unpublished.
| movie_id required | string <uuid> |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}Transitions movie from draft or unpublished to published.
Validates that required fields (runtime, content_rating, at least one video asset) are present.
| movie_id required | string <uuid> |
| If-Match | string ETag of the resource version the client last read. Enables optimistic concurrency on writes:
the request is rejected with |
| available_from | string <date-time> Schedule publication for a future datetime. Omit for immediate publication. |
{- "available_from": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "tagline": "string",
- "release_year": 1888,
- "runtime_minutes": 1,
- "content_rating": "G",
- "genres": [
- "string"
], - "country_of_origin": [
- "st"
], - "studio": "string",
- "audio_languages": [
- "string"
], - "subtitle_languages": [
- "string"
], - "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Moves movie from published to unpublished.
Immediately removes the title from subscriber catalogue.
Active streams are allowed to finish but no new streams can be started.
| movie_id required | string <uuid> |
| If-Match | string ETag of the resource version the client last read. Enables optimistic concurrency on writes:
the request is rejected with |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "tagline": "string",
- "release_year": 1888,
- "runtime_minutes": 1,
- "content_rating": "G",
- "genres": [
- "string"
], - "country_of_origin": [
- "st"
], - "studio": "string",
- "audio_languages": [
- "string"
], - "subtitle_languages": [
- "string"
], - "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| sort | string Sort field and direction. Prefix with |
| q | string <= 200 characters Full-text search query (max 200 characters). |
| status | string Enum: "draft" "published" "ongoing" "ended" "canceled" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "content_rating": "G",
- "genres": [
- "string"
], - "network": "string",
- "country_of_origin": [
- "st"
], - "language": "en",
- "first_air_date": "2019-08-24",
- "last_air_date": "2019-08-24",
- "total_seasons": 0,
- "total_episodes": 0,
- "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended — time-ordered, collision-resistant) that makes a write request safely retryable. Replaying the same key within 24h returns the original result instead of performing the action twice. Strongly recommended on all payment and subscription mutations. |
| title required | string <= 255 characters |
| original_title | string <= 255 characters |
| synopsis | string <= 5000 characters |
| content_rating | string (ContentRating) Enum: "G" "PG" "PG-13" "R" "NC-17" "TV-Y" "TV-G" "TV-PG" "TV-14" "TV-MA" "UNRATED" Parental guidance rating. Required before publishing. |
| genres | Array of strings Genre slugs (from |
| network | string <= 200 characters Original broadcaster or streaming network (e.g. HBO, Netflix). |
| country_of_origin | Array of strings[ items = 2 characters ] ISO 3166-1 alpha-2 production country codes. |
| language | string Primary audio language (BCP-47). |
| first_air_date | string <date> Date the first episode aired. |
| last_air_date | string <date> Date the most recent episode aired. |
Array of objects (CastMember) | |
object (ImageSet) Content artwork. All URLs are CDN-hosted, immutable, and cache-safe. | |
| status required | string Enum: "draft" "published" "ongoing" "ended" "canceled" |
object (GeoRestrictionRef) Inline geo-restriction summary embedded in content responses. | |
| drm_required required | boolean |
{- "title": "string",
- "original_title": "string",
- "synopsis": "string",
- "content_rating": "G",
- "genres": [
- "string"
], - "network": "string",
- "country_of_origin": [
- "st"
], - "language": "en",
- "first_air_date": "2019-08-24",
- "last_air_date": "2019-08-24",
- "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "content_rating": "G",
- "genres": [
- "string"
], - "network": "string",
- "country_of_origin": [
- "st"
], - "language": "en",
- "first_air_date": "2019-08-24",
- "last_air_date": "2019-08-24",
- "total_seasons": 0,
- "total_episodes": 0,
- "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "content_rating": "G",
- "genres": [
- "string"
], - "network": "string",
- "country_of_origin": [
- "st"
], - "language": "en",
- "first_air_date": "2019-08-24",
- "last_air_date": "2019-08-24",
- "total_seasons": 0,
- "total_episodes": 0,
- "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| show_id required | string <uuid> |
| If-Match | string ETag of the resource version the client last read. Enables optimistic concurrency on writes:
the request is rejected with |
| title required | string <= 255 characters |
| original_title | string <= 255 characters |
| synopsis | string <= 5000 characters |
| content_rating | string (ContentRating) Enum: "G" "PG" "PG-13" "R" "NC-17" "TV-Y" "TV-G" "TV-PG" "TV-14" "TV-MA" "UNRATED" Parental guidance rating. Required before publishing. |
| genres | Array of strings Genre slugs (from |
| network | string <= 200 characters Original broadcaster or streaming network (e.g. HBO, Netflix). |
| country_of_origin | Array of strings[ items = 2 characters ] ISO 3166-1 alpha-2 production country codes. |
| language | string Primary audio language (BCP-47). |
| first_air_date | string <date> Date the first episode aired. |
| last_air_date | string <date> Date the most recent episode aired. |
Array of objects (CastMember) | |
object (ImageSet) Content artwork. All URLs are CDN-hosted, immutable, and cache-safe. | |
| status required | string Enum: "draft" "published" "ongoing" "ended" "canceled" |
object (GeoRestrictionRef) Inline geo-restriction summary embedded in content responses. | |
| drm_required required | boolean |
{- "title": "string",
- "original_title": "string",
- "synopsis": "string",
- "content_rating": "G",
- "genres": [
- "string"
], - "network": "string",
- "country_of_origin": [
- "st"
], - "language": "en",
- "first_air_date": "2019-08-24",
- "last_air_date": "2019-08-24",
- "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "content_rating": "G",
- "genres": [
- "string"
], - "network": "string",
- "country_of_origin": [
- "st"
], - "language": "en",
- "first_air_date": "2019-08-24",
- "last_air_date": "2019-08-24",
- "total_seasons": 0,
- "total_episodes": 0,
- "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Permanently deletes a show and all its seasons/episodes. Only permitted when status is draft.
| show_id required | string <uuid> |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}| show_id required | string <uuid> |
| If-Match | string ETag of the resource version the client last read. Enables optimistic concurrency on writes:
the request is rejected with |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "content_rating": "G",
- "genres": [
- "string"
], - "network": "string",
- "country_of_origin": [
- "st"
], - "language": "en",
- "first_air_date": "2019-08-24",
- "last_air_date": "2019-08-24",
- "total_seasons": 0,
- "total_episodes": 0,
- "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| show_id required | string <uuid> |
| If-Match | string ETag of the resource version the client last read. Enables optimistic concurrency on writes:
the request is rejected with |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "original_title": "string",
- "slug": "string",
- "synopsis": "string",
- "content_rating": "G",
- "genres": [
- "string"
], - "network": "string",
- "country_of_origin": [
- "st"
], - "language": "en",
- "first_air_date": "2019-08-24",
- "last_air_date": "2019-08-24",
- "total_seasons": 0,
- "total_episodes": 0,
- "cast": [
- {
- "name": "string",
- "role": "actor",
- "character": "string",
- "display_order": 0
}
], - "images": {
}, - "average_rating": 5,
- "rating_count": 0,
- "status": "draft",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "show_id": "503c9125-a11a-4f69-b904-e679735399e2",
- "season_number": 1,
- "title": "string",
- "synopsis": "string",
- "episode_count": 0,
- "images": {
}, - "air_date": "2019-08-24",
- "end_date": "2019-08-24",
- "status": "draft",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
}| show_id required | string <uuid> |
| season_number required | integer >= 1 |
| title | string <= 255 characters Optional explicit season title (e.g. "Chapter One"). Null = "Season {N}" by default. |
| synopsis | string <= 2000 characters |
object (ImageSet) Content artwork. All URLs are CDN-hosted, immutable, and cache-safe. | |
| air_date | string <date> Date the first episode of this season aired. |
| end_date | string <date> Date the final episode aired (null if season is ongoing). |
| status required | string Enum: "draft" "published" "completed" completed = all episodes aired and available; published = actively airing; draft = not yet visible to subscribers. |
{- "season_number": 1,
- "title": "string",
- "synopsis": "string",
- "images": {
}, - "air_date": "2019-08-24",
- "end_date": "2019-08-24",
- "status": "draft"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "show_id": "503c9125-a11a-4f69-b904-e679735399e2",
- "season_number": 1,
- "title": "string",
- "synopsis": "string",
- "episode_count": 0,
- "images": {
}, - "air_date": "2019-08-24",
- "end_date": "2019-08-24",
- "status": "draft",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| show_id required | string <uuid> |
| season_number required | integer >= 1 |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "show_id": "503c9125-a11a-4f69-b904-e679735399e2",
- "season_number": 1,
- "title": "string",
- "synopsis": "string",
- "episode_count": 0,
- "images": {
}, - "air_date": "2019-08-24",
- "end_date": "2019-08-24",
- "status": "draft",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| show_id required | string <uuid> |
| season_number required | integer >= 1 |
| If-Match | string ETag of the resource version the client last read. Enables optimistic concurrency on writes:
the request is rejected with |
| season_number required | integer >= 1 |
| title | string <= 255 characters Optional explicit season title (e.g. "Chapter One"). Null = "Season {N}" by default. |
| synopsis | string <= 2000 characters |
object (ImageSet) Content artwork. All URLs are CDN-hosted, immutable, and cache-safe. | |
| air_date | string <date> Date the first episode of this season aired. |
| end_date | string <date> Date the final episode aired (null if season is ongoing). |
| status required | string Enum: "draft" "published" "completed" completed = all episodes aired and available; published = actively airing; draft = not yet visible to subscribers. |
{- "season_number": 1,
- "title": "string",
- "synopsis": "string",
- "images": {
}, - "air_date": "2019-08-24",
- "end_date": "2019-08-24",
- "status": "draft"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "show_id": "503c9125-a11a-4f69-b904-e679735399e2",
- "season_number": 1,
- "title": "string",
- "synopsis": "string",
- "episode_count": 0,
- "images": {
}, - "air_date": "2019-08-24",
- "end_date": "2019-08-24",
- "status": "draft",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Soft-deletes the season and all its episodes. Only permitted when none of the season's episodes have been published. Audit-logged.
| show_id required | string <uuid> |
| season_number required | integer >= 1 |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}| show_id required | string <uuid> |
| season_number required | integer >= 1 |
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "show_id": "503c9125-a11a-4f69-b904-e679735399e2",
- "season_id": "3e93eb58-18e4-4960-a483-d51daf6cd6fd",
- "season_number": 1,
- "episode_number": 0,
- "title": "string",
- "synopsis": "string",
- "runtime_minutes": 1,
- "content_rating": "G",
- "images": {
}, - "status": "draft",
- "air_date": "2019-08-24",
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| show_id required | string <uuid> |
| season_number required | integer >= 1 |
| season_number required | integer >= 1 |
| episode_number required | integer >= 0 0 indicates a special/bonus episode. |
| title required | string <= 255 characters |
| synopsis | string <= 2000 characters |
| runtime_minutes | integer >= 1 Runtime in minutes. Required before publishing. |
| content_rating | string (ContentRating) Enum: "G" "PG" "PG-13" "R" "NC-17" "TV-Y" "TV-G" "TV-PG" "TV-14" "TV-MA" "UNRATED" Inherits from show if not set; must be set before publishing. |
object (ImageSet) Content artwork. All URLs are CDN-hosted, immutable, and cache-safe. | |
| status required | string Enum: "draft" "published" "scheduled" "unpublished" |
| air_date | string <date> Original broadcast air date. |
| available_from | string <date-time> |
| available_until | string <date-time> |
{- "season_number": 1,
- "episode_number": 0,
- "title": "string",
- "synopsis": "string",
- "runtime_minutes": 1,
- "content_rating": "G",
- "images": {
}, - "status": "draft",
- "air_date": "2019-08-24",
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "show_id": "503c9125-a11a-4f69-b904-e679735399e2",
- "season_id": "3e93eb58-18e4-4960-a483-d51daf6cd6fd",
- "season_number": 1,
- "episode_number": 0,
- "title": "string",
- "synopsis": "string",
- "runtime_minutes": 1,
- "content_rating": "G",
- "images": {
}, - "status": "draft",
- "air_date": "2019-08-24",
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| show_id required | string <uuid> |
| season_number required | integer >= 1 |
| episode_number required | integer >= 0 |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "show_id": "503c9125-a11a-4f69-b904-e679735399e2",
- "season_id": "3e93eb58-18e4-4960-a483-d51daf6cd6fd",
- "season_number": 1,
- "episode_number": 0,
- "title": "string",
- "synopsis": "string",
- "runtime_minutes": 1,
- "content_rating": "G",
- "images": {
}, - "status": "draft",
- "air_date": "2019-08-24",
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| show_id required | string <uuid> |
| season_number required | integer >= 1 |
| episode_number required | integer >= 0 |
| If-Match | string ETag of the resource version the client last read. Enables optimistic concurrency on writes:
the request is rejected with |
| season_number required | integer >= 1 |
| episode_number required | integer >= 0 0 indicates a special/bonus episode. |
| title required | string <= 255 characters |
| synopsis | string <= 2000 characters |
| runtime_minutes | integer >= 1 Runtime in minutes. Required before publishing. |
| content_rating | string (ContentRating) Enum: "G" "PG" "PG-13" "R" "NC-17" "TV-Y" "TV-G" "TV-PG" "TV-14" "TV-MA" "UNRATED" Inherits from show if not set; must be set before publishing. |
object (ImageSet) Content artwork. All URLs are CDN-hosted, immutable, and cache-safe. | |
| status required | string Enum: "draft" "published" "scheduled" "unpublished" |
| air_date | string <date> Original broadcast air date. |
| available_from | string <date-time> |
| available_until | string <date-time> |
{- "season_number": 1,
- "episode_number": 0,
- "title": "string",
- "synopsis": "string",
- "runtime_minutes": 1,
- "content_rating": "G",
- "images": {
}, - "status": "draft",
- "air_date": "2019-08-24",
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "show_id": "503c9125-a11a-4f69-b904-e679735399e2",
- "season_id": "3e93eb58-18e4-4960-a483-d51daf6cd6fd",
- "season_number": 1,
- "episode_number": 0,
- "title": "string",
- "synopsis": "string",
- "runtime_minutes": 1,
- "content_rating": "G",
- "images": {
}, - "status": "draft",
- "air_date": "2019-08-24",
- "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| show_id required | string <uuid> |
| season_number required | integer >= 1 |
| episode_number required | integer >= 0 |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| q | string <= 200 characters Full-text search query (max 200 characters). |
| status | string Enum: "live" "offline" "scheduled_maintenance" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "number": 1,
- "description": "string",
- "category": "News",
- "language": "en",
- "images": {
}, - "status": "live",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "is_premium": true,
- "is_catchup_enabled": true,
- "catchup_days": 30,
- "sort_order": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended — time-ordered, collision-resistant) that makes a write request safely retryable. Replaying the same key within 24h returns the original result instead of performing the action twice. Strongly recommended on all payment and subscription mutations. |
| name required | string <= 100 characters |
| number | integer >= 1 Logical Channel Number (LCN) for display in the EPG grid. |
| description | string <= 1000 characters |
| category | string <= 100 characters Channel genre category (e.g. News, Sports, Entertainment). |
| language | string Primary broadcast language (BCP-47). |
object (ImageSet) Content artwork. All URLs are CDN-hosted, immutable, and cache-safe. | |
| status required | string Enum: "live" "offline" "scheduled_maintenance" |
object (GeoRestrictionRef) Inline geo-restriction summary embedded in content responses. | |
| drm_required required | boolean |
| is_premium required | boolean Requires a premium or higher plan tier to access. |
| is_catchup_enabled required | boolean Whether catch-up TV (time-shifted replay) is available for this channel. |
| catchup_days | integer [ 0 .. 30 ] Number of past days available for catch-up. Null when is_catchup_enabled is false. |
| sort_order | integer Default: 0 Display position in channel lists (lower = higher priority). |
| website_url | string <uri> Official broadcaster website URL. |
{- "name": "string",
- "number": 1,
- "description": "string",
- "category": "News",
- "language": "en",
- "images": {
}, - "status": "live",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "is_premium": true,
- "is_catchup_enabled": true,
- "catchup_days": 30,
- "sort_order": 0,
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "number": 1,
- "description": "string",
- "category": "News",
- "language": "en",
- "images": {
}, - "status": "live",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "is_premium": true,
- "is_catchup_enabled": true,
- "catchup_days": 30,
- "sort_order": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| channel_id required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "number": 1,
- "description": "string",
- "category": "News",
- "language": "en",
- "images": {
}, - "status": "live",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "is_premium": true,
- "is_catchup_enabled": true,
- "catchup_days": 30,
- "sort_order": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| channel_id required | string <uuid> |
| If-Match | string ETag of the resource version the client last read. Enables optimistic concurrency on writes:
the request is rejected with |
| name required | string <= 100 characters |
| number | integer >= 1 Logical Channel Number (LCN) for display in the EPG grid. |
| description | string <= 1000 characters |
| category | string <= 100 characters Channel genre category (e.g. News, Sports, Entertainment). |
| language | string Primary broadcast language (BCP-47). |
object (ImageSet) Content artwork. All URLs are CDN-hosted, immutable, and cache-safe. | |
| status required | string Enum: "live" "offline" "scheduled_maintenance" |
object (GeoRestrictionRef) Inline geo-restriction summary embedded in content responses. | |
| drm_required required | boolean |
| is_premium required | boolean Requires a premium or higher plan tier to access. |
| is_catchup_enabled required | boolean Whether catch-up TV (time-shifted replay) is available for this channel. |
| catchup_days | integer [ 0 .. 30 ] Number of past days available for catch-up. Null when is_catchup_enabled is false. |
| sort_order | integer Default: 0 Display position in channel lists (lower = higher priority). |
| website_url | string <uri> Official broadcaster website URL. |
{- "name": "string",
- "number": 1,
- "description": "string",
- "category": "News",
- "language": "en",
- "images": {
}, - "status": "live",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "is_premium": true,
- "is_catchup_enabled": true,
- "catchup_days": 30,
- "sort_order": 0,
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "number": 1,
- "description": "string",
- "category": "News",
- "language": "en",
- "images": {
}, - "status": "live",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "is_premium": true,
- "is_catchup_enabled": true,
- "catchup_days": 30,
- "sort_order": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "number": 1,
- "description": "string",
- "category": "News",
- "language": "en",
- "images": {
}, - "status": "live",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "is_premium": true,
- "is_catchup_enabled": true,
- "catchup_days": 30,
- "sort_order": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "number": 1,
- "description": "string",
- "category": "News",
- "language": "en",
- "images": {
}, - "status": "live",
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "drm_required": true,
- "is_premium": true,
- "is_catchup_enabled": true,
- "catchup_days": 30,
- "sort_order": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Returns the full schedule for a channel (past and future). No time window restriction.
| channel_id required | string <uuid> |
| start_time | string <date-time> |
| end_time | string <date-time> |
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "channel_id": "bbe8aa76-a4bb-46f6-a785-df8e831cc459",
- "title": "string",
- "description": "string",
- "content_rating": "G",
- "language": "en",
- "start_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "duration_minutes": 0,
- "is_live": true,
- "is_catchup_available": true,
- "catchup_expires_at": "2019-08-24T14:15:22Z",
- "season_number": 0,
- "episode_number": 0,
- "categories": [
- "string"
], - "images": {
}, - "linked_vod_id": "657aaad7-6df0-4878-8900-295f294bc20e"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| channel_id required | string <uuid> |
| channel_id required | string <uuid> |
| title required | string <= 255 characters |
| description | string <= 2000 characters |
| content_rating | string (ContentRating) Enum: "G" "PG" "PG-13" "R" "NC-17" "TV-Y" "TV-G" "TV-PG" "TV-14" "TV-MA" "UNRATED" |
| language | string Programme broadcast language (BCP-47). |
| start_time required | string <date-time> |
| end_time required | string <date-time> |
| is_live required | boolean True while the programme is currently airing. |
| is_catchup_available required | boolean True when this past programme is available for catch-up replay via |
| catchup_expires_at | string <date-time> When catch-up availability expires. Null if not available. |
| season_number | integer or null Season number for episodic content broadcast on live TV. |
| episode_number | integer or null Episode number within the season. |
| categories | Array of strings Genre/category tags. |
object (ImageSet) Content artwork. All URLs are CDN-hosted, immutable, and cache-safe. | |
| linked_vod_id | string <uuid> Linked VOD asset ID — allows direct navigation to the VOD version. |
{- "channel_id": "bbe8aa76-a4bb-46f6-a785-df8e831cc459",
- "title": "string",
- "description": "string",
- "content_rating": "G",
- "language": "en",
- "start_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "is_live": true,
- "is_catchup_available": true,
- "catchup_expires_at": "2019-08-24T14:15:22Z",
- "season_number": 0,
- "episode_number": 0,
- "categories": [
- "string"
], - "images": {
}, - "linked_vod_id": "657aaad7-6df0-4878-8900-295f294bc20e"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "channel_id": "bbe8aa76-a4bb-46f6-a785-df8e831cc459",
- "title": "string",
- "description": "string",
- "content_rating": "G",
- "language": "en",
- "start_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "duration_minutes": 0,
- "is_live": true,
- "is_catchup_available": true,
- "catchup_expires_at": "2019-08-24T14:15:22Z",
- "season_number": 0,
- "episode_number": 0,
- "categories": [
- "string"
], - "images": {
}, - "linked_vod_id": "657aaad7-6df0-4878-8900-295f294bc20e"
}| program_id required | string <uuid> |
| channel_id required | string <uuid> |
| title required | string <= 255 characters |
| description | string <= 2000 characters |
| content_rating | string (ContentRating) Enum: "G" "PG" "PG-13" "R" "NC-17" "TV-Y" "TV-G" "TV-PG" "TV-14" "TV-MA" "UNRATED" |
| language | string Programme broadcast language (BCP-47). |
| start_time required | string <date-time> |
| end_time required | string <date-time> |
| is_live required | boolean True while the programme is currently airing. |
| is_catchup_available required | boolean True when this past programme is available for catch-up replay via |
| catchup_expires_at | string <date-time> When catch-up availability expires. Null if not available. |
| season_number | integer or null Season number for episodic content broadcast on live TV. |
| episode_number | integer or null Episode number within the season. |
| categories | Array of strings Genre/category tags. |
object (ImageSet) Content artwork. All URLs are CDN-hosted, immutable, and cache-safe. | |
| linked_vod_id | string <uuid> Linked VOD asset ID — allows direct navigation to the VOD version. |
{- "channel_id": "bbe8aa76-a4bb-46f6-a785-df8e831cc459",
- "title": "string",
- "description": "string",
- "content_rating": "G",
- "language": "en",
- "start_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "is_live": true,
- "is_catchup_available": true,
- "catchup_expires_at": "2019-08-24T14:15:22Z",
- "season_number": 0,
- "episode_number": 0,
- "categories": [
- "string"
], - "images": {
}, - "linked_vod_id": "657aaad7-6df0-4878-8900-295f294bc20e"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "channel_id": "bbe8aa76-a4bb-46f6-a785-df8e831cc459",
- "title": "string",
- "description": "string",
- "content_rating": "G",
- "language": "en",
- "start_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "duration_minutes": 0,
- "is_live": true,
- "is_catchup_available": true,
- "catchup_expires_at": "2019-08-24T14:15:22Z",
- "season_number": 0,
- "episode_number": 0,
- "categories": [
- "string"
], - "images": {
}, - "linked_vod_id": "657aaad7-6df0-4878-8900-295f294bc20e"
}Submits an XMLTV or JSON programme schedule for one or more channels.
Returns a job ID for status polling. Large feeds should use source_url.
| format required | string Enum: "xmltv" "json" Encoding of the submitted schedule feed. |
| source required | string The schedule payload. For |
| source_url | string <uri> Allow-listed URL the platform will fetch the feed from (alternative to inline |
| channel_ids | Array of strings <uuid> [ items <uuid > ] Channels this import applies to. If omitted, channels are resolved from the feed. |
| replace_window | boolean Default: true When true, existing programmes within the feed's time range are replaced. |
{- "format": "xmltv",
- "source": "string",
- "channel_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "replace_window": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "status": "queued",
- "programs_imported": 0,
- "errors": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "completed_at": "2019-08-24T14:15:22Z"
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| status | string Enum: "draft" "published" "scheduled" "archived" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "slug": "string",
- "title": "string",
- "subtitle": "string",
- "type": "manual",
- "status": "draft",
- "query": "string",
- "item_refs": [
- {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14"
}
], - "item_count": 0,
- "sort_order": 0,
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "images": {
}, - "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| slug required | string <= 120 characters ^[a-z0-9-]+$ |
| title required | string <= 200 characters |
| subtitle | string or null <= 300 characters |
| type required | string Enum: "manual" "dynamic" "editorial" "franchise" manual = hand-picked items; dynamic = rule/query-driven. |
| status required | string Enum: "draft" "published" "scheduled" "archived" |
| query | string or null For dynamic collections, the catalogue filter expression that populates items. |
Array of objects For manual collections, ordered content references. | |
| sort_order | integer Display weight for ordering collections relative to one another. |
object (GeoRestrictionRef) Inline geo-restriction summary embedded in content responses. | |
object (ImageSet) Content artwork. All URLs are CDN-hosted, immutable, and cache-safe. | |
| available_from | string <date-time> |
| available_until | string <date-time> |
{- "slug": "string",
- "title": "string",
- "subtitle": "string",
- "type": "manual",
- "status": "draft",
- "query": "string",
- "item_refs": [
- {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14"
}
], - "sort_order": 0,
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "images": {
}, - "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "slug": "string",
- "title": "string",
- "subtitle": "string",
- "type": "manual",
- "status": "draft",
- "query": "string",
- "item_refs": [
- {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14"
}
], - "item_count": 0,
- "sort_order": 0,
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "images": {
}, - "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| collection_id required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "slug": "string",
- "title": "string",
- "subtitle": "string",
- "type": "manual",
- "status": "draft",
- "query": "string",
- "item_refs": [
- {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14"
}
], - "item_count": 0,
- "sort_order": 0,
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "images": {
}, - "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| collection_id required | string <uuid> |
| If-Match | string ETag of the resource version the client last read. Enables optimistic concurrency on writes:
the request is rejected with |
| slug required | string <= 120 characters ^[a-z0-9-]+$ |
| title required | string <= 200 characters |
| subtitle | string or null <= 300 characters |
| type required | string Enum: "manual" "dynamic" "editorial" "franchise" manual = hand-picked items; dynamic = rule/query-driven. |
| status required | string Enum: "draft" "published" "scheduled" "archived" |
| query | string or null For dynamic collections, the catalogue filter expression that populates items. |
Array of objects For manual collections, ordered content references. | |
| sort_order | integer Display weight for ordering collections relative to one another. |
object (GeoRestrictionRef) Inline geo-restriction summary embedded in content responses. | |
object (ImageSet) Content artwork. All URLs are CDN-hosted, immutable, and cache-safe. | |
| available_from | string <date-time> |
| available_until | string <date-time> |
{- "slug": "string",
- "title": "string",
- "subtitle": "string",
- "type": "manual",
- "status": "draft",
- "query": "string",
- "item_refs": [
- {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14"
}
], - "sort_order": 0,
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "images": {
}, - "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "slug": "string",
- "title": "string",
- "subtitle": "string",
- "type": "manual",
- "status": "draft",
- "query": "string",
- "item_refs": [
- {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14"
}
], - "item_count": 0,
- "sort_order": 0,
- "geo_restrictions": {
- "policy": "allow_all",
- "territories": [
- "st"
]
}, - "images": {
}, - "available_from": "2019-08-24T14:15:22Z",
- "available_until": "2019-08-24T14:15:22Z",
- "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Science Fiction",
- "slug": "science-fiction",
- "content_types": [
- "movie"
], - "parent_id": "1c6ca187-e61f-4301-8dcb-0e9749e89eef",
- "content_count": 0,
}
]
}| name required | string <= 100 characters |
| slug required | string <= 100 characters ^[a-z0-9-]+$ |
| content_types required | Array of strings Items Enum: "movie" "show" Which content types use this genre. |
| parent_id | string <uuid> Parent genre UUID for hierarchical taxonomy (e.g. Action → Superhero). |
| image_url | string <uri> CDN URL for genre artwork. |
{- "name": "Science Fiction",
- "slug": "science-fiction",
- "content_types": [
- "movie"
], - "parent_id": "1c6ca187-e61f-4301-8dcb-0e9749e89eef",
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Science Fiction",
- "slug": "science-fiction",
- "content_types": [
- "movie"
], - "parent_id": "1c6ca187-e61f-4301-8dcb-0e9749e89eef",
- "content_count": 0,
}| genre_id required | string <uuid> |
| name required | string <= 100 characters |
| slug required | string <= 100 characters ^[a-z0-9-]+$ |
| content_types required | Array of strings Items Enum: "movie" "show" Which content types use this genre. |
| parent_id | string <uuid> Parent genre UUID for hierarchical taxonomy (e.g. Action → Superhero). |
| image_url | string <uri> CDN URL for genre artwork. |
{- "name": "Science Fiction",
- "slug": "science-fiction",
- "content_types": [
- "movie"
], - "parent_id": "1c6ca187-e61f-4301-8dcb-0e9749e89eef",
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Science Fiction",
- "slug": "science-fiction",
- "content_types": [
- "movie"
], - "parent_id": "1c6ca187-e61f-4301-8dcb-0e9749e89eef",
- "content_count": 0,
}Fails if any published content references this genre.
| genre_id required | string <uuid> |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}Creates a media upload session and returns a signed upload URL.
Upload the source file directly to the URL using a resumable PUT.
After upload, call /complete to trigger transcoding.
| asset_type required | string Enum: "video_master" "trailer" "image" "subtitle" "audio_track" |
| filename required | string <= 255 characters |
| content_type required | string MIME type (e.g. video/mp4, image/jpeg). |
| size_bytes required | integer <int64> >= 1 |
object or null Content entity to attach the asset to after processing. |
{- "asset_type": "video_master",
- "filename": "string",
- "content_type": "string",
- "size_bytes": 1,
- "target": {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14"
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "asset_type": "video_master",
- "filename": "string",
- "content_type": "video/mp4",
- "size_bytes": 1,
- "upload_url_expires_at": "2019-08-24T14:15:22Z",
- "status": "awaiting_upload",
- "transcode_status": "pending",
- "asset_id": "b4695157-0d1d-4da0-8f9e-5c53149389e4",
- "target": {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14"
}, - "error_message": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| upload_id required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "asset_type": "video_master",
- "filename": "string",
- "content_type": "video/mp4",
- "size_bytes": 1,
- "upload_url_expires_at": "2019-08-24T14:15:22Z",
- "status": "awaiting_upload",
- "transcode_status": "pending",
- "asset_id": "b4695157-0d1d-4da0-8f9e-5c53149389e4",
- "target": {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14"
}, - "error_message": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Cancels a pending or in-progress upload. Cannot cancel a completed transcode.
| upload_id required | string <uuid> |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}Signals that the source file upload is finished and triggers the transcoding pipeline.
| upload_id required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "asset_type": "video_master",
- "filename": "string",
- "content_type": "video/mp4",
- "size_bytes": 1,
- "upload_url_expires_at": "2019-08-24T14:15:22Z",
- "status": "awaiting_upload",
- "transcode_status": "pending",
- "asset_id": "b4695157-0d1d-4da0-8f9e-5c53149389e4",
- "target": {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14"
}, - "error_message": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "description": "string",
- "policy": "allow_list",
- "territories": [
- "st"
], - "applies_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| name required | string <= 100 characters Human-readable rule name for admin display. |
| description | string <= 500 characters |
| policy required | string Enum: "allow_list" "block_list" |
| territories required | Array of strings non-empty [ items = 2 characters ] ISO 3166-1 alpha-2 country codes. |
| applies_to | Array of strings <uuid> [ items <uuid > ] Content asset UUIDs this rule is applied to. Empty = rule is unattached. |
{- "name": "string",
- "description": "string",
- "policy": "allow_list",
- "territories": [
- "st"
], - "applies_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "description": "string",
- "policy": "allow_list",
- "territories": [
- "st"
], - "applies_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| rule_id required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "description": "string",
- "policy": "allow_list",
- "territories": [
- "st"
], - "applies_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| rule_id required | string <uuid> |
| name required | string <= 100 characters Human-readable rule name for admin display. |
| description | string <= 500 characters |
| policy required | string Enum: "allow_list" "block_list" |
| territories required | Array of strings non-empty [ items = 2 characters ] ISO 3166-1 alpha-2 country codes. |
| applies_to | Array of strings <uuid> [ items <uuid > ] Content asset UUIDs this rule is applied to. Empty = rule is unattached. |
{- "name": "string",
- "description": "string",
- "policy": "allow_list",
- "territories": [
- "st"
], - "applies_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "description": "string",
- "policy": "allow_list",
- "territories": [
- "st"
], - "applies_to": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Test whether a given country code can access a specific content asset.
| content_id required | string <uuid> |
| content_type required | string Enum: "movie" "show" "episode" "channel" |
| country_code required | string = 2 characters |
{- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "content_type": "movie",
- "country_code": "st"
}{- "allowed": true,
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60"
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "description": "string",
- "events": [
- "subscription.created"
], - "status": "active",
- "signing_secret_hint": "stri",
- "failure_count": 0,
- "last_delivery_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Registers a new webhook URL.
The system generates an HMAC-SHA256 signing secret; only its last 4 characters are returned in
subsequent GET responses. Store the full secret securely on first creation — it cannot be recovered.
All deliveries include X-Encora-Signature-256: sha256=<HMAC> header.
| url required | string <uri> HTTPS endpoint. HTTP is rejected. |
| description | string <= 255 characters |
| events required | Array of strings (WebhookEventType) non-empty Items Enum: "subscription.created" "subscription.updated" "subscription.canceled" "subscription.payment_failed" "subscription.trial_ending" "user.created" "user.deleted" "user.suspended" "user.email_verified" "device.registered" "device.removed" "content.published" "content.unpublished" "profile.created" "profile.deleted" "stream.started" "stream.ended" "stream.concurrency_exceeded" |
{- "description": "string",
- "events": [
- "subscription.created"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "description": "string",
- "events": [
- "subscription.created"
], - "status": "active",
- "signing_secret_hint": "stri",
- "failure_count": 0,
- "last_delivery_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "signing_secret": "string"
}| webhook_id required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "description": "string",
- "events": [
- "subscription.created"
], - "status": "active",
- "signing_secret_hint": "stri",
- "failure_count": 0,
- "last_delivery_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| webhook_id required | string <uuid> |
| url | string <uri> |
| description | string <= 255 characters |
| events | Array of strings (WebhookEventType) Items Enum: "subscription.created" "subscription.updated" "subscription.canceled" "subscription.payment_failed" "subscription.trial_ending" "user.created" "user.deleted" "user.suspended" "user.email_verified" "device.registered" "device.removed" "content.published" "content.unpublished" "profile.created" "profile.deleted" "stream.started" "stream.ended" "stream.concurrency_exceeded" |
| status | string Enum: "active" "disabled" |
{- "description": "string",
- "events": [
- "subscription.created"
], - "status": "active"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "description": "string",
- "events": [
- "subscription.created"
], - "status": "active",
- "signing_secret_hint": "stri",
- "failure_count": 0,
- "last_delivery_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Sends a synthetic ping event to the endpoint and returns the delivery result.
| webhook_id required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "endpoint_id": "e9ce0d4f-d433-423d-9497-4c000544106c",
- "event_type": "subscription.created",
- "event_id": "a7a26ff2-e851-45b6-9634-d595f45458b7",
- "status": "pending",
- "http_status": 0,
- "response_snippet": "string",
- "attempt_count": 1,
- "next_retry_at": "2019-08-24T14:15:22Z",
- "delivered_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}| webhook_id required | string <uuid> |
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| status | string Enum: "pending" "delivered" "failed" "retrying" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "endpoint_id": "e9ce0d4f-d433-423d-9497-4c000544106c",
- "event_type": "subscription.created",
- "event_id": "a7a26ff2-e851-45b6-9634-d595f45458b7",
- "status": "pending",
- "http_status": 0,
- "response_snippet": "string",
- "attempt_count": 1,
- "next_retry_at": "2019-08-24T14:15:22Z",
- "delivered_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Manually triggers re-delivery of a failed event. Subject to retry rate limits.
| webhook_id required | string <uuid> |
| delivery_id required | string <uuid> |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}Returns high-level KPIs — active subscribers, MRR, ARPU, churn, and stream hours.
| period required | string Enum: "today" "last_7d" "last_30d" "last_90d" |
| currency | string = 3 characters Default: "USD" |
{- "period": "today",
- "currency": "str",
- "total_active_subscribers": 0,
- "new_subscribers": 0,
- "churned_subscribers": 0,
- "net_subscriber_change": 0,
- "total_stream_hours": 0.1,
- "avg_daily_active_users": 0.1,
- "mrr": 0.1,
- "arpu": 0.1,
- "churn_rate": 0.1
}Returns play counts, unique viewers, and completion rates. Sortable by total_plays or unique_viewers.
| period required | string Enum: "today" "last_7d" "last_30d" "last_90d" |
| content_type | string Enum: "movie" "show" "episode" "channel" |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| cursor | string Opaque pagination cursor from |
| sort | string Sort field and direction. Prefix with |
{- "data": [
- {
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "content_type": "movie",
- "title": "string",
- "period": "today",
- "total_plays": 0,
- "unique_viewers": 0,
- "avg_completion_rate": 1,
- "total_watch_hours": 0.1,
- "avg_watch_duration_minutes": 0.1
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Returns trial conversion rates and revenue breakdown by plan.
| period required | string Enum: "today" "last_7d" "last_30d" "last_90d" |
{- "period": "today",
- "trial_conversion_rate": 1,
- "by_plan": [
- {
- "plan_id": "00713021-9aea-41da-9a88-87760c08fa72",
- "plan_name": "string",
- "active_count": 0,
- "new_count": 0,
- "churned_count": 0,
- "revenue": 0.1
}
]
}Immutable, append-only audit log. Supports filtering by actor, resource, action, and time range. Results are always sorted newest-first.
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| actor_id | string <uuid> |
| action | string <= 100 characters Filter by action prefix (e.g. |
| resource_type | string <= 100 characters |
| resource_id | string <uuid> |
| from | string <date-time> |
| to | string <date-time> |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "action": "content.published",
- "actor_id": "04f37679-bfbf-4906-b749-01756515cecf",
- "actor_role": "subscriber",
- "resource_type": "movie",
- "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
- "ip_address": "203.0.113.0",
- "user_agent": "string",
- "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
- "metadata": { },
- "created_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "action": "content.published",
- "actor_id": "04f37679-bfbf-4906-b749-01756515cecf",
- "actor_role": "subscriber",
- "resource_type": "movie",
- "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
- "ip_address": "203.0.113.0",
- "user_agent": "string",
- "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
- "metadata": { },
- "created_at": "2019-08-24T14:15:22Z"
}{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "device_type": "smart_tv",
- "platform": "Android 14",
- "os_version": "14.0.1",
- "app_version": "3.5.2",
- "is_trusted": true,
- "last_active_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "limit": 0
}Registers a new device. Returns 409 if device limit is reached for the plan.
The fingerprint field must be a hashed, non-reversible value — never send raw hardware IDs.
| name required | string <= 100 characters |
| device_type required | string Enum: "smart_tv" "mobile" "tablet" "desktop" "console" "stb" "other" |
| platform | string <= 100 characters OS name and version (e.g. "Android 14"). |
| os_version | string <= 50 characters OS version string. |
| app_version | string <= 50 characters App version initiating registration. |
| fingerprint required | string <= 512 characters Opaque hardware/software fingerprint (hashed client-side using SHA-256). Never send raw device identifiers such as IMEI, MAC address, or serial numbers. |
{- "name": "string",
- "device_type": "smart_tv",
- "platform": "string",
- "os_version": "string",
- "app_version": "string",
- "fingerprint": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "device_type": "smart_tv",
- "platform": "Android 14",
- "os_version": "14.0.1",
- "app_version": "3.5.2",
- "is_trusted": true,
- "last_active_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "device_type": "smart_tv",
- "platform": "Android 14",
- "os_version": "14.0.1",
- "app_version": "3.5.2",
- "is_trusted": true,
- "last_active_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| device_id required | string <uuid> |
| name | string <= 100 characters |
{- "name": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "device_type": "smart_tv",
- "platform": "Android 14",
- "os_version": "14.0.1",
- "app_version": "3.5.2",
- "is_trusted": true,
- "last_active_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Removes the device and terminates any active streams on it.
| device_id required | string <uuid> |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}Accepts a CDM licence challenge and returns a signed DRM licence.
Security Notes
| X-Device-Id required | string <= 128 characters Registered device identifier. |
| content_id required | string <uuid> |
| content_type required | string Enum: "movie" "episode" "channel" |
| drm_system required | string Enum: "widevine" "fairplay" "playready" |
| license_request_bytes required | string <byte> Base64-encoded DRM licence challenge from the CDM. |
{- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "content_type": "movie",
- "drm_system": "widevine",
- "license_request_bytes": "string"
}{- "license_bytes": "string",
- "drm_system": "widevine",
- "expires_at": "2019-08-24T14:15:22Z",
- "offline_enabled": true,
- "renewal_before": "2019-08-24T14:15:22Z"
}Must be called every 30 seconds to maintain an active stream session. Reports current playback position, updates concurrency slot keepalive, and renews the manifest URLs when they approach expiry.
| session_id required | string <uuid> Stream session UUID from the stream response. |
| position_seconds required | integer >= 0 Current playback position in seconds. |
| is_paused | boolean Default: false |
{- "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",
- "position_seconds": 0,
- "is_paused": false
}{- "refreshed_urls": {
- "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",
- "expires_at": "2019-08-24T14:15:22Z",
- "token_refresh_before": "2019-08-24T14:15:22Z"
}, - "session_expires_at": "2019-08-24T14:15:22Z"
}Gracefully terminates a stream session and releases the concurrency slot.
| session_id required | string <uuid> |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}Returns all currently active stream sessions for the account.
{- "data": [
- {
- "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940",
- "profile_id": "bfcb6779-b1f9-41fc-92d7-88f8bc1d12e8",
- "status": "active",
- "position_seconds": 0,
- "started_at": "2019-08-24T14:15:22Z",
- "last_heartbeat_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z"
}
]
}| profile_id required | string <uuid> |
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| sort | string Sort field and direction. Prefix with |
| content_type | string Enum: "movie" "show" "episode" |
| completed | boolean |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "watch_progress_seconds": 0,
- "watch_progress_percent": 100,
- "completed": false,
- "added_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| profile_id required | string <uuid> |
| content_type required | string Enum: "movie" "show" "episode" |
| content_id required | string <uuid> |
{- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "watch_progress_seconds": 0,
- "watch_progress_percent": 100,
- "completed": false,
- "added_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Updates the playback position for resume functionality.
| profile_id required | string <uuid> |
| item_id required | string <uuid> |
| watch_progress_seconds | integer >= 0 |
| completed | boolean |
{- "watch_progress_seconds": 0,
- "completed": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "watch_progress_seconds": 0,
- "watch_progress_percent": 100,
- "completed": false,
- "added_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| profile_id required | string <uuid> |
| item_id required | string <uuid> |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}| profile_id required | string <uuid> |
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| content_type | string Enum: "movie" "episode" "channel" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "watch_duration_seconds": 0,
- "progress_seconds": 0,
- "completed": true,
- "device_type": "smart_tv",
- "watched_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Irreversibly deletes all watch history entries for the profile. Supports GDPR right-to-erasure. Requires confirmation field to prevent accidental deletion. Audit-logged.
| profile_id required | string <uuid> |
| confirmation required | string Value: "CLEAR_HISTORY" Must send this exact string to confirm the destructive operation. |
{- "confirmation": "CLEAR_HISTORY"
}{- "code": "BAD_REQUEST",
- "message": "Request body is malformed JSON.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}| profile_id required | string <uuid> |
| item_id required | string <uuid> |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}Returns ML-driven content recommendations for the profile. Results are geo-filtered and subscription-aware.
| profile_id required | string <uuid> |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| content_type | string Default: "mixed" Enum: "movie" "show" "mixed" |
| context | string Enum: "home" "continue_watching" "because_you_watched" "trending" "new_releases" |
{- "data": [
- {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "rank": 1,
- "score": 1,
- "reason": "Because you watched Inception",
- "context": "home"
}
]
}Platform-wide trending titles. Geo-filtered by caller's region.
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| content_type | string Default: "mixed" Enum: "movie" "show" "mixed" |
| window | string Default: "this_week" Enum: "today" "this_week" "this_month" |
{- "data": [
- {
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "rank": 1,
- "score": 1,
- "reason": "Because you watched Inception",
- "context": "home"
}
]
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| status | string Enum: "scheduled" "recording" "recorded" "failed" "expired" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "channel_id": "bbe8aa76-a4bb-46f6-a785-df8e831cc459",
- "program_id": "70c1146b-e933-4cb2-a789-bbca5312b517",
- "profile_id": "bfcb6779-b1f9-41fc-92d7-88f8bc1d12e8",
- "title": "string",
- "status": "scheduled",
- "quality": "sd",
- "start_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "duration_seconds": 0,
- "size_bytes": 0,
- "expires_at": "2019-08-24T14:15:22Z",
- "requested_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| channel_id required | string <uuid> |
| program_id | string <uuid> EPG programme ID. If provided, start/end times are derived from it. |
| start_time required | string <date-time> |
| end_time required | string <date-time> |
| quality | string Default: "hd" Enum: "sd" "hd" "fhd" "uhd" |
{- "channel_id": "bbe8aa76-a4bb-46f6-a785-df8e831cc459",
- "program_id": "70c1146b-e933-4cb2-a789-bbca5312b517",
- "start_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "quality": "sd"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "channel_id": "bbe8aa76-a4bb-46f6-a785-df8e831cc459",
- "program_id": "70c1146b-e933-4cb2-a789-bbca5312b517",
- "profile_id": "bfcb6779-b1f9-41fc-92d7-88f8bc1d12e8",
- "title": "string",
- "status": "scheduled",
- "quality": "sd",
- "start_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "duration_seconds": 0,
- "size_bytes": 0,
- "expires_at": "2019-08-24T14:15:22Z",
- "requested_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "channel_id": "bbe8aa76-a4bb-46f6-a785-df8e831cc459",
- "program_id": "70c1146b-e933-4cb2-a789-bbca5312b517",
- "profile_id": "bfcb6779-b1f9-41fc-92d7-88f8bc1d12e8",
- "title": "string",
- "status": "scheduled",
- "quality": "sd",
- "start_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "duration_seconds": 0,
- "size_bytes": 0,
- "expires_at": "2019-08-24T14:15:22Z",
- "requested_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| profile_id required | string <uuid> |
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "profile_id": "bfcb6779-b1f9-41fc-92d7-88f8bc1d12e8",
- "target_type": "epg_program",
- "target_id": "d3bcdc92-4191-401b-ad0c-42056c6efab9",
- "status": "scheduled",
- "notify_before_minutes": 10,
- "remind_at": "2019-08-24T14:15:22Z",
- "channels": [
- "push"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| profile_id required | string <uuid> |
| target_type required | string Enum: "epg_program" "live_channel" "upcoming_release" |
| target_id required | string <uuid> |
| notify_before_minutes | integer >= 0 Default: 10 |
| remind_at required | string <date-time> |
| channels | Array of strings Items Enum: "push" "email" |
{- "target_type": "epg_program",
- "target_id": "d3bcdc92-4191-401b-ad0c-42056c6efab9",
- "notify_before_minutes": 10,
- "remind_at": "2019-08-24T14:15:22Z",
- "channels": [
- "push"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "profile_id": "bfcb6779-b1f9-41fc-92d7-88f8bc1d12e8",
- "target_type": "epg_program",
- "target_id": "d3bcdc92-4191-401b-ad0c-42056c6efab9",
- "status": "scheduled",
- "notify_before_minutes": 10,
- "remind_at": "2019-08-24T14:15:22Z",
- "channels": [
- "push"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| profile_id required | string <uuid> |
| reminder_id required | string <uuid> |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}| profile_id required | string <uuid> |
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| status | string Enum: "queued" "downloading" "ready" "expired" "failed" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "quality": "SD",
- "status": "queued",
- "progress_percent": 100,
- "error_code": "string",
- "expires_at": "2019-08-24T14:15:22Z",
- "file_size_bytes": 0,
- "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Queues a movie or episode for offline download on the requesting device. Requires an active subscription with download entitlement and available storage quota.
| profile_id required | string <uuid> |
| X-Device-Id required | string <= 128 characters Registered device identifier. |
| content_type required | string Enum: "movie" "episode" |
| content_id required | string <uuid> |
| quality required | string Enum: "SD" "HD" "FHD" |
{- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "quality": "SD"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "quality": "SD",
- "status": "queued",
- "progress_percent": 100,
- "error_code": "string",
- "expires_at": "2019-08-24T14:15:22Z",
- "file_size_bytes": 0,
- "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| profile_id required | string <uuid> |
| download_id required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "quality": "SD",
- "status": "queued",
- "progress_percent": 100,
- "error_code": "string",
- "expires_at": "2019-08-24T14:15:22Z",
- "file_size_bytes": 0,
- "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Cancels a queued/in-progress download or removes a completed one from the device.
| profile_id required | string <uuid> |
| download_id required | string <uuid> |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}| profile_id required | string <uuid> |
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "value": 1,
- "review": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 2450,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| profile_id required | string <uuid> |
| content_type required | string Enum: "movie" "show" "episode" |
| content_id required | string <uuid> |
| value required | integer [ 1 .. 5 ] |
| review | string <= 2000 characters |
{- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "value": 1,
- "review": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "value": 1,
- "review": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| profile_id required | string <uuid> |
| rating_id required | string <uuid> |
| value | integer [ 1 .. 5 ] |
| review | string <= 2000 characters |
{- "value": 1,
- "review": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "content_type": "movie",
- "content_id": "713e4c61-5a69-43fb-a600-2e2699462e14",
- "value": 1,
- "review": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| profile_id required | string <uuid> |
| rating_id required | string <uuid> |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}Returns all publicly visible subscription plans.
| currency | string = 3 characters Example: currency=USD |
| billing_cycle | string Enum: "monthly" "quarterly" "semi_annual" "annual" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Standard HD",
- "description": "string",
- "price": 9.99,
- "currency": "USD",
- "billing_cycle": "monthly",
- "max_profiles": 1,
- "max_concurrent_streams": 1,
- "max_devices": 1,
- "max_quality": "SD",
- "has_downloads": true,
- "allow_download_count": 0,
- "has_ads": true,
- "has_hdr": true,
- "has_dolby_atmos": true,
- "trial_days": 0,
- "is_active": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Standard HD",
- "description": "string",
- "price": 9.99,
- "currency": "USD",
- "billing_cycle": "monthly",
- "max_profiles": 1,
- "max_concurrent_streams": 1,
- "max_devices": 1,
- "max_quality": "SD",
- "has_downloads": true,
- "allow_download_count": 0,
- "has_ads": true,
- "has_hdr": true,
- "has_dolby_atmos": true,
- "trial_days": 0,
- "is_active": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}