Skip to main content

Standardised JSON Feed

Description

The Standardised JSON Feed importer allow construct feeds that map 1-1 to our import structure.

Limitations

  • Not possible to create some assets through importer, such as products, apps.
  • Not possible to do translations for genres, cast and indicators.
  • Not possible to upload images on genres and indicators.
  • Not possible to create editions for podcasts, series and channels.
  • Not possible to update broadcasts through importer.

Creating VOD Data

In this section we explain how to create VOD data in backstage

Episode/ Series

There is two ways to create Episode/ Series in backstage.

  • The first one is used when you don't have or don't want to pass detailed information about series, and want create it just with the basic information. For that you just have to create a field called series_label, then backstage will create one series based on that and will attach your episode to that series.
[
{
"type": "episode",
"series_label": "Label series"
// Rest of the episode data
}
]
  • The second one is used when you want to pass detailed information about series. For that you just have to create a object called series inside episode object and pass the series data inside of it. You can see the episode/series data structure here.
[
{
"type": "episode",
"series": {
// Series data
}
// Rest of the episode data
}
]

Attaching episodes to series

Standardised JSON allows you to attach episodes to series that already exists in backstage, whether it was created manually, through old importer or in the current one. To do that you just have to pass the series object with the id, label or external_id of the series you want to attach the episode to.

[
{
"type": "episode",
"series": {
"id": "series-id"
// "label": "series-label",
// "external_id": "series-external-id"
}
// Rest of the episode data
}
]
caution

Always prefer to use id or external_id, if you have this information, to attach episodes to series, because label are not unique and can cause problems.

danger

If you pass series_label and series in the same episode, backstage will create a series based on series_label and will ignore the series object.

danger

When sending multiple episodes with detailed series object and for some wrong data inside series object, the serie is not created, the episodes (if the data is correct) will be created and might be there without being attached to a series and you will notice a loader below the episode title.

Episode/ Podcast

The behaviour of episode/podcast is the same as episode/series, the only difference is that you have to use podcast_label instead of series_label and podcast instead of series. You can see the episode/podcast data structure here.

[
{
"type": "episode",
"podcast_label": "Label podcast"
// Rest of the episode data
}
]
[
{
"type": "episode",
"podcasts": {
// Podcast data
}
// Rest of the episode data
}
]

Episode/ News Series

The behaviour of episode/news_series is the same as episode/series, the only difference is that you have to use news_series_label instead of series_label and news_series instead of series.. You can see the episode/news_series data structure here.

[
{
"type": "episode",
"news_series_label": "Label news series"
// Rest of the episode data
}
]
[
{
"type": "episode",
"news_series": {
// News series data
}
// Rest of the episode data
}
]

Other types

Right now, backstage supports creation of Movies, Clips and Live Events related to VOD Data. Those basically has the same data as episodes. Of course some of them has additional properties, some don't have some properties. You can check the data structure of each one:

Creating EPG Data

In this section we explain how to create EPG data in backstage. The way that EPG data works in backstage is similar to episode/series/podcast, but here we use Broadcasts -> Channels.

Most of the fields are the same as VOD Data, but there is some fields that are specific for Broadcasts. But there is some additional fields, such as:

  • startsAt: The start date of the broadcast
  • endsAt: The end date of the broadcast
  • programs: The programs that are part of the broadcast (you can link existing assets to the broadcast).
info

If you provide information about the program, be sure that this information exists in backstage, otherwise the broadcast won't be created.

"program": {
"type": "movie",
"id": "movie-1"
},

You can check the data structure of Broadcasts here.

Likely episode/series/podcast, with EPG data, you can provide inside the broadcast object, the channel object with the whole information about the channel that you want to create. If you don't want to provide detailed information about the channel, you can just provide the channel_label field and backstage will create a channel based on that.

[
{
"type": "broadcast",
"channel_label": "Label channel"
// Rest of the broadcast data
}
]
[
{
"type": "broadcast",
"channels": {
// Channel data
}
// Rest of the broadcast data
}
]

To attach broadcasts to channels that already exists in backstage, you can use the same logic as episode/series/podcast, which means that you can use id, label or external_id to attach broadcasts to channels.

[
{
"type": "broadcast",
"channels": {
"id": "channel-id"
// "label": "channel-label",
// "external_id": "channel-external-id"
}
// Rest of the broadcast data
}
]
caution

Always prefer to use id or external_id, if you have this information. The label field are not unique and can cause problems.

Updating VOD/EPG Data

caution

If you want to update VOD/EPG data, such as series, news series, channels or podcasts, you must provide the external_id, id or label of the asset that you want to update and the rest of information that will be updated. If you don't provide those identifiers, backstage will create a new asset instead of updating the existing one.

info

Isn't possible to update an external id once the asset is created. So if you try to send a new external id, backstage will try to create new asset out of it.

Fields Reference

Here you can find the reference of some fields that you can use to create VOD Data.

Custom Label

Is a short text used to describe the asset. The name of the field is assetLabel and it's a string up to 16 characters.

Crew

Is a list of the cast of the movie/episode/etc. The name of the field is crew, is required even if you don't have any crew information, you must pass empty array []. The structure of the field is:

"crew": [
{
"label": "Name of the person",
"role": "Role of the person"
}
]
info

The role must be created before in backstage. Isn't possible to create roles through importer.

Age Classification

Is the age classification of the asset. The name of the field is age_classification. You can check more information about it here.

"age_classification": {
"types": [
{
"rating": 18,
"type": "NAME",
"indicatorLabels": ["PG"],
"description": "DESCRIPTION THAT WILL SHOW INSIDE THE ASSET"
}
]
}

Geo Restriction

Is the geo restriction of the asset. The name of the field is geoblock. It takes two lists, allow and deny. In the example below, the asset will be available only in Germany, Spain and Australia.

"geoblock": {
"allow": [
"DE",
"ES",
"AU"
],
"deny": []
}

Images

Is a list of images of the asset. The name of the field is images. Each type of image refer to a different image in backstage. Some assets doesn't support all types of images.

  • still -> Landscape cover
  • poster -> Portrait cover
  • square -> Square cover
  • background -> Background (16:9 ratio)
  • backgroundPortrait -> Background (2:3 ratio)
  • highlight -> Highlight
  • heroPortrait -> Slider & Hero (2:3 ratio)
  • heroLandscape -> Slider & Hero (16:9 ratio)
  • logo -> Logo (Just available in channels)

The structure of the image object is the following:

"images": {
"still": [
{
"url": "https://placehold.co/1920x1080.jpg",
"size": {
"width": 1920,
"height": 800
}
}
],
"poster": [
{
"url": "https://placehold.co/1200x1800.jpg",
"size": {
"width": 1200,
"height": 1800
}
}
],
"square": [
{
"url": "https://placehold.co/1200x1200.jpg",
"size": {
"width": 1200,
"height": 1200
}
}
],
"background": [
{
"url": "https://placehold.co/1920x1080.jpg",
"size": {
"width": 1920,
"height": 800
}
}
],
"backgroundPortrait": [
{
"url": "https://placehold.co/720x1080.jpg",
"size": {
"width": 720,
"height": 1080
}
}
],
"highlight": [
{
"url": "https://placehold.co/3840x1280.jpg",
"size": {
"width": 3840,
"height": 1280
}
}
],
"heroPortrait": [
{
"url": "https://placehold.co/720x1080.jpg",
"size": {
"width": 720,
"height": 1080
}
}
],
"heroLandscape": [
{
"url": "https://placehold.co/1920x1080.jpg",
"size": {
"width": 1920,
"height": 800
}
}
],
"logo": [
{
"url": "https://placehold.co/1024x1024.jpg",
"size": {
"width": 1024,
"height": 1024
}
}
]
},

Clip Ids

Is a list of ids of the clips that are linked to the asset. The name of the field is clipIds. Is not a required field, but if you have this information, you must pass a valid list of ids, which means that the clips must exist in backstage.

"clipIds": [
"id_of_clip_already_created_on_backstage",
"id_of_clip_already_created_on_backstage_2"
],

Deep links in backstage are uniques, so if you want to create a new one, make sure that deep link doesn't exist already in backstage. The name of the field is deepLink. The structure of the field is:

"deepLink": "https://www.example.com"