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
andchannels
. - 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
insideepisode
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
}
]
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.
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.
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 broadcastendsAt
: The end date of the broadcastprograms
: The programs that are part of the broadcast (you can link existing assets to the broadcast).
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
}
]
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
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.
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"
}
]
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 coverposter
-> Portrait coversquare
-> Square coverbackground
-> Background (16:9 ratio)backgroundPortrait
-> Background (2:3 ratio)highlight
-> HighlightheroPortrait
-> 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
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"