Release notes

2024r13

External URL, languages and type added to images in curation API

In version 2024r3, the images array was added to the GET /productPages and GET /productPageSnapshots calls of the curation API. This returns the images linked to the product page or snapshot.

Previously, it contained the following attributes:

  "images": [
    {
      "pressTargets": [
        "string"
      ],
      "imageId": "string",
      "highResolutionURL": "string",
      "identification": "string"
    }
  ],

From this version, the following attributes have been added:

The GET /languages and /imageTypes drop-down calls can be used to match the value to their API reference.

An example of the GET /productPages call:

...
    "images": [
        {
            "imageId": "image",
            "highResolutionURL": "https:/myimage.net/v1/Promo01.jpg",
            "externalURL": "https:/myimage.net/v1/Promo01.jpg",
            "identification": "EN",
            "pressTargets": [
                "English"
            ],
            "languages": [
                "English"
            ],
            "imageType": "Promo"
        },
...

The YAML has been updated for these changes. The latest version can be retrieved by using the GET /api call.

API developers

The following has changed to the YAML:

At line 399, the /imagesTypes path was added.
From line 1156, the new attributes were added to the properties of the ImageForContent schema

For easier viewing, the YAMLs can also be compared here: https://www.textcompare.org/yaml

2024r6

New input after publication in GET calls of curation API

Since previous versions, the New input after publication check box (RN-6110) indicates whether the product page has changed after publication (RN-6115).

Previously, this property was not yet part of the curation API.

From this version, the hasNewInputAfterPublication attribute has been added to the response of the

  • GET /productPages/{productPageId} call; and

  • GET /productPageSnapshots/{productPageSnapshotId} call.

It will return true or false depending on the value on the product page or product page snapshot.

An example of the GET /productPages call:

{
    "productPageId": "9500438855",
    "name": "AVENGERS: ENDGAME",
    "displayTitle": "Avengers: Endgame",
    "translatedDisplayTitle": "อเวนเจอร์ส: เผด็จศึกz",
    "type": "Product page",
    "isLandingPage": false,
    "description": "The Avengers try to save half the universe after the Blip.",
    "translatedDescription1": "อเวนเจอร์สพยายามกอบกู้ครึ่งจักรวาลหลังจากเหตุการณ์ Blipz",
    "translatedDescription2": null,
    "displayType": null,
    "sorting": null,
    "hasNewInputAfterPublication": true,
    "parentProductPage": "9500443903"
}

The YAML has been updated for these changes. The latest version can be retrieved by using the GET /api call.

API developers

The following has changed in the YAML:

At line 855, the hasNewInputAfterPublication property has been added to the ProductPage schema.

At line 1069, the hasNewInputAfterPublication property has been added to the SubPageSnapshot schema.

2024r4

Additional fields in curation API

In a previous version, more properties were added to product pages (RN-6156, RN-6297). Some were already added to the curation API (Additional attributes in curation API).

In this version, the following attributes have also been added to the response of the GET /productPages/{productPageId} and GET /productPageSnapshots/{productPageSnapshotId} calls:

  • onDemandContentCategories
  • planningCategories
  • ForeignDVDReleaseDate
  • earliestStartDate
  • latestEndDate
  • earliestStartTime
  • latestEndTime

An example of the attributes in the response of the GET /productPages/{productPageId} call:

     "planningCategories": [
        "Blockbuster",
        "Fantasy",
        "Classic"
    ],
    "onDemandContentCategories": [
        "Movies"
    ],
    "foreignDVDReleaseDate": "2020-04-14",
    "earliestStartDate": "2022-02-01",
    "latestEndDate": "2028-04-30",
    "earliestStartTime": "09:00:00",
    "latestEndTime": "24:00:00",

To retrieve the values for the first two attributes mapped to drop-down lists, the following GET calls were added:

  • GET /onDemandContentCategories:

    Maps to the PLContentCategory drop-down list

  • GET /planningCategories:

    Maps to the PLPlanningCategory drop-down list

The YAML has been updated for these changes. The latest version can be retrieved by using the GET /api call.

API developers

The following has changed in the YAML:

At line 458, the /onDemandContentCategories and /planningCategories drop-down calls were added.
At line 817 in the ProductPage schema, the new attributes were added.
At line 1026 in the SubPageSnapshot schema, the new attributes were added.

For easier viewing, the YAMLs can also be compared here: https://www.textcompare.org/yaml

2024r3

Additional attributes in curation API

More properties were added to the product pages and product page snapshots (RN-6276, RN-6311, RN-6281).

Some of these properties have also been added to the curation API.

It is possible to define a display type and sorting on a product page (RN-6281). These attributes have been added to the following calls:

  • GET /productPages/{productPageId}

  • GET /productPageSnapshots/{productPageSnapshotId}

  • PUT /productPages/{productPageId}

  • POST /productPages

An example from the POST /productPages body:

{
  ...
  "isLandingPage": false,
  "displayType": "Movie",
  "sorting": "Alphabetical",
  "description": null,
   ...
}

Since both attributes map to drop-down lists, the GET /displayTypes and GET /sortings calls have been added to the API.

Moreover, a product page can now have a link to content, which is also part of the product page snapshot. (RN-6276) The content has been added to the response of the following calls:

  • GET /productPages/{productPageId}

  • GET /productPageSnapshots/{productPageSnapshotId}

Previously, the contentId was already part of the response but it was never returned because there was no content link.

This has now been replaced by a content array containing the contentId (or external reference of the content) and the contentType. The type can be used to identify which calls of the content API should be used to inspect or update the content of the product page. For example, if the contentType is program, the /program calls of the content API should be used.

An example of the response of the GET /productPages call:

{
   ...
    "shortDescriptionPress": null,
    "longDescriptionPress": null,
    "content": {
        "contentId": "143048527",
        "contentType": "program"
    },
    "parentProductPage": "9500443903",
    ...
}

Additionally, the properties from the Publication tab of the product pages (RN-6281) were also added to the GET /productPages and GET /productPageSnapshots calls.

Field

WON data type

JSON attribute

JSON type

Is original version

Boolean

isOriginalVersion

boolean

Genre

drop-down

genre

string

Category

drop-down

category

string

Production regions

drop-down (multi-selection)

productionRegions

array

Production year

number

productionYear

integer

Original language

drop-down

originalLanguage

string

Cast list

list

cast

array

Person

Object

personId

string

Function

drop-down

castFunction

string

Type

drop-down

castType

string

Role

string

role

string

Image list

list

images

array

Press targets

drop-down (multi-select)

pressTargets

array

External reference

string

imageId

string

High resolution url

string

highResolutionURL

string

Identification

string

identification

string

Content target group

drop-down

contentTargetGroup

string

Season

string

season

string

Title

string

title

string

Translated title

string

translatedTitle

string

Episode title

string

episodeTitle

string

Translated episode title

string

translatedEpisodeTitle

string

Short description

text

shortDescriptionPress

string

Long description

text

longDescriptionPress

string

To retrieve the values for the attributes mapped to drop-down lists, the following GET calls were added:

  • GET /genres:
    Maps to the BOGenre drop-down list

  • GET /categories:
    Maps to the Category DDL

  • GET /regions:
    Maps to the Region DDL

  • GET /languages:
    Maps to the PSILanguage DDL

  • GET /contentTargetGroups:
    Maps to the CategorySecondary DDL

  • GET /castFunctions:
    Maps to the Function DDL

  • GET /castTypes:
    Maps to the PSICastTypes DDL

  • GET /pressTargets:
    Maps to the WOnPressTarget DDL

The YAML has been updated for these changes. It can be retrieved by using the GET /api call.

API developers

For API developers, quite some changes were made to the YAML so it is recommended to compare them using https://www.textcompare.org/yaml for more efficient viewing.

Fix for GET /parentalRatings call of curation API

The parentalRating attribute was already part of the GET /productPages/{productPageId} and GET /productPageSnapshots/{productPageSnapshotId} calls.

It maps to the WOnProgramCertification drop-down list. The GET /parentalRatings drop-down call was added to retrieve the available values.

Previously, however, when the call was executed, the following error was returned:

Resource Not Found: GET <URL:/curation/v1/parentalRatings> HTTP/1.1

This was because the call had not been implemented correctly.

This issue has been fixed. Now, executing the call will return an array with all values of the WOnProgramCertification drop-down list.

    {
        "id": "allAges",
        "name": "All ages"
    }

2024r2

Additional attributes and drop-down call in curation API

In a previous version, the curation API was introduced, which allows to retrieve, create, and update product pages and product page snapshots (RN-6072).

In this version, the following attributes have been added to the response of the GET /productPages/{productPageId} call:

  • publicationStatus:
    This returns the API reference of the value of the Publication status field of the product page. (RN-6115)

  • dateCreatedUTC:
    This returns the timestamp of the date and time on which the product page was created in the UTC timezone. It corresponds to the Created on field on the product page.

  • dateModifiedUTC:
    This returns the timestamp of the date and time on which the product page was last modified in the UTC timezone. It corresponds to the Changed on field on the product page.

An example of the response body of the call:

{
    "productPageId": "9500438855",
    "name": "AVENGERS: ENDGAME",
    "displayTitle": "Avengers: Endgame",
    "translatedDisplayTitle": "อเวนเจอร์ส: เผด็จศึกz",
     ...
    "publicationStatus": "newInputAfterPublication",
    "dateCreatedUTC": "2023-12-28T10:06:15.514+00:00",
    "dateModifiedUTC": "2024-01-19T14:09:17.016+00:00"
}

Additionally, a GET /externalSystemResponses call has been added to retrieve the drop-down values of the PLExternalSystemResponse drop-down list. The id of the values can then be used in the PUT /productPageSnapshots/{productPageSnapshotId} call.

An example of the response:

[
    {
        "id": "Received",
        "name": "Received"
    },
    {
        "id": "Error",
        "name": "Error"
    }
]

The YAML has been updated for these changes. The latest version can be retrieved by using the GET /api call.

2023r13

Addition of Curation API

In the previous version, the nodes and navigation nodes were reworked to become product pages and curation nodes. (RN-6072)

Product pages determine how content will be presented on an on-demand platform, so they also need to be exported to external systems. Sometimes, the product page on a platform is even available before the actual content, for example, to announce when it is coming.

Exporting product pages can be done by publishing the product page structure, which creates a product page snapshot.

From this version, the curation API has been introduced, which allows to retrieve, create, and update product pages and product page snapshots.

When opening or creating a Business API interface service, the Curation API can be added to the BUSINESS API DEFINITIONS list if it has been made available in the WONComponent drop-down list.

The YAML file can be retrieved by executing the /api call. The latest version can also be found on the API Explorer.

The curation API contains calls for managing

  • product pages;

  • product page snapshots.

Product pages

From this version, the curation API has been introduced, which allows to retrieve, create, and update product pages and product page snapshots.

It contains the following calls for product pages.

PUT and POST /productPages

The POST call can be used to create product pages, and the PUT and POST can be used to update them by providing the external reference in the URL of the call. With these calls, the editable properties of the product page can be defined or it can be marked as landing page (RN-6114). It is not possible to add or delete subpages or link or remove transmissions.

Note that when you are creating a product page using the POST call, the name and parentProductPage attributes should be part of the call. The latter determines under which product page the new one will be created. If it not included, it will be created as a page on the highest level. In the PUT call, it will be ignored as the order of existing pages can only changed by using the Reorder product pages... command (RN-6110).

An example of the body:

{
    "productPageId": "9500438855",
    "name": "BARBIE",
    "displayTitle": "Barbie",
    "translatedDisplayTitle": "ตุ๊กตาบาร์บี้",
    "type": "Product page",
    "isLandingPage": false,
    "description": "Barbie and Ken are having the time of their lives in the colorful and seemingly perfect world of Barbie Land.
                    However, when they get a chance to go to the real world, they soon discover the joys and perils of living among humans.",
    "translatedDescription1": null,
    "translatedDescription2": null,
    "parentProductPage": "9500443903"
}

The type attribute maps to the PLProductPageType drop-down list. The available values can be retrieved using the GET /types drop-down call.

An example of the response:

    {
        "id": "Product page",
        "name": "Product page"
    },
    {
        "id": "Series overview",
        "name": "Series overview"
    }

GET /productPages/{productPageId}

This call can be used to retrieve the details of a single product page by providing the external reference in the URL of the call.

An example of the response:

{
    "productPageId": "9500438855",
    "name": "AVENGERS: ENDGAME",
    "displayTitle": "Avengers: Endgame",
    "translatedDisplayTitle": "อเวนเจอร์ส: เผด็จศึก",
    "type": "Product page",
    "isLandingPage": false,
    "description": "The Avengers try to save half the universe after the Blip.",
    "translatedDescription1": "อเวนเจอร์สพยายามกอบกู้ครึ่งจักรวาลหลังจากเหตุการณ์ Blip",
    "translatedDescription2": null,
    "parentProductPage": "9500443903",
    "sequenceNo": 2,
    "kind": "subPage",
    "parentalRating": "12",
    "lastPublishedOn": "2024-01-05T14:53:34Z",
    "numberOfSubPages": 2,
    "subPages": [
        "9500443997",
        "9500443995"
    ],
    "linkedTransmissions": [
        "2588669812",
        "9248910812",
        "9500432307"
    ]
}

The parentalRating attribute maps to the WOnProgramCertification drop-down list. The available values can be retrieved using the GET /parentalRatings drop-down call.

GET /productPages

This call can be used to search for product pages. It is possible to search using the name attribute as filter and sort parameters.

An example of the URL: GET /productPages?filter=eq(name,Bonus)

It returns a list of the pages that match the parameter and gives a limited number of properties.

An example of the response:

    {
        "productPageId": "9500443993",
        "name": "Bonus",
        "kind": "subPage"
    },
    {
        "productPageId": "9500443995",
        "name": "Bonus",
        "kind": "subPage"
    }

DELETE /productPages/{productPageId}

This call is used to delete a specific product page defined by its external reference.

If the product page has transmissions linked, a 403 error is returned:

{
    "statusCode": "403",
    "message": "Forbidden",
    "timestamp": "2024-01-19T15:06:42Z",
    "concept": "Product page",
    "id": "9500491091",
    "errors": [
        {
            "errorCode": "CURATION-00002",
            "description": "The product page or his children have transmissions linked to it. Please remove all the existing transmission links before deleting the node.",
            "data": []
        }
    ]
}

See the API Explorer for more information on the attributes.

Product page snapshots

From this version, the curation API has been introduced, which allows to retrieve, create, and update product pages and product page snapshots.

It contains the following calls for product page snapshots.

PUT /productPageSnapshots/{productPageSnapshotId}

This call will allow the downstream publication system to update the product page snapshot with some feedback around the status of the publication or activation of the product page on the on-demand platform. The call contains two attributes that can be used to update this feedback on the snapshot:

  • externalSystemResponse:
    This maps to the External system response field on a product page snapshot, which takes its values from the PLExternalSystemResponse drop-down list. (RN-6115) This attribute should contain the API reference of the drop-down value.

  • externalSystemRemarks:
    This maps to the External system remarks field on a product page snapshot and just contains text. (RN-6115)

An example of the body:

{
  "productPageSnapshotId": 923849240,
  "externalSystemResponse": "Activated",
  "externalSystemRemarks": "Failed due to violations: missing metadata"
}

GET /productPageSnapshots

This call can be used to search for product page snapshots. It is possible to search using the publishedOn and productPageId attributes as filter parameters.

An example of the URL: GET /productPageSnapshots?filter=gt(publishedOn,2023-10-01 10:10:10.000)

It returns a list of the snapshots that match the parameter and gives a limited number of properties. By default, the last created snapshots will be at the top of the list.

An example of the response:

[
  {
    "name": "meWatch",
    "productPageSnapshotId": 183501002,
    "kind": "rootPage",
    "productPageId": 9232343,
    "publishedOn": "2023-10-25T12:26:04.174Z"
  }
]

GET /productPages/{productPageId}

This call can be used to retrieve the details of a single product page snapshot by providing the external reference in the URL of the call. This gives the external system information on what a product page structure looks like.

For example, you have the following product page structure in WHATS'ON:

  • Movies

    • Avengers: Endgame

      • Bonus

This is an example of the response for that structure:

{
    "productPageSnapshotId": "9500490810",
    "productPageId": "9500443903",
    "name": "Movies",
    "displayTitle": "Movies",
    "translatedDisplayTitle": "Films",
    "type": null,
    "isLandingPage": true,
    "description": "All films available on our platform",
    "translatedDescription1": null,
    "translatedDescription2": null,
    "sequenceNo": 1,
    "kind": "rootPage",
    "parentalRating": null,
    "numberOfSubPages": 1,
    "subPageSnapshots": [
        {
            "productPageSnapshotId": "9500490812",
            "productPageId": "9500438855",
            "name": "AVENGERS: ENDGAME",
            "displayTitle": "Avengers: Endgame",
            "translatedDisplayTitle": "อเวนเจอร์ส: เผด็จศึก",
            "type": "Product page",
            "isLandingPage": false,
            "description": "The Avengers try to save half the universe after the Blip.",
            "translatedDescription1": "อเวนเจอร์สพยายามกอบกู้ครึ่งจักรวาลหลังจากเหตุการณ์ Blip",
            "translatedDescription2": null,
            "sequenceNo": 1,
            "kind": "subPage",
            "parentalRating": "12",
            "numberOfSubPages": 2,
            "subPageSnapshots": [
                {
                    "productPageSnapshotId": "9500490814",
                    "productPageId": "9500443995",
                    "name": "Bonus",
                    "displayTitle": null,
                    "translatedDisplayTitle": null,
                    "type": null,
                    "isLandingPage": false,
                    "description": null,
                    "translatedDescription1": null,
                    "translatedDescription2": null,
                    "sequenceNo": 1,
                    "kind": "subPage",
                    "parentalRating": null,
                    "numberOfSubPages": 0,
                    "subPageSnapshots": [],
                    "publishedOn": "2024-01-19T13:34:37Z",
                    "versionNumber": 4,
                    "externalSystemResponse": null,
                    "externalSystemRemarks": null
                }
            ],
            "publishedOn": "2024-01-19T13:34:37Z",
            "versionNumber": 4,
            "externalSystemResponse": null,
            "externalSystemRemarks": null
        }
    ],
    "publishedOn": "2024-01-19T13:34:37Z",
    "versionNumber": 4,
    "externalSystemResponse": null,
    "externalSystemRemarks": null
}

See the API Explorer for more information on the attributes.