- Print
Endpoints
- Print
Base URLs
Site | URL | Notes |
---|---|---|
Production Back Office | http://bo.prod.merlin.ccp.xcal.tv:9018/mmpWebService/ | For internal Comcast network calls |
Codebig Prod | ||
Codebig QA | ||
QA | http://qa.merlin.comcast.com:9018/mmpWebService | |
Dev | http://dev.merlin.comcast.com:9018/mmpWebService |
Obtaining a SAT Token
The Open Ingest Endpoint will only accept SAT tokens with one specified allowedPartner (this is based on the configuration of the SAT client and has probably been done for you).
Request
curl -v -X POST -H "x-client-id: <your_client_id>" -H "x-client-secret: <your_secret>" 'https://sat-prod.codebig2.net/oauth/token'
Response
{
"access_token": "<base64 token value>",
"expires_in": 86400,
"scope": "x1:compass:piws:read x1:compass:piws:write",
"token_type": "Bearer"
}
The contents of the access_token field will be used in the Authorization header in the OpenIngest request. Tokens expire after 24 hours and must be refreshed.
Sample Call
Your request should include a parameter ("partner") that specifies which partner account the content belongs to. The sample request below indicates the asset should be ingested under the generic OTT partner.
curl -v -X POST -H "Content-Type: application/xml" -H "Authorization: Bearer <your_SAT_token>" https://compass-mmpwebservice-prod.codebig2.net/openingestproxy/openIngestMerlin1?schema=1.0&form=xml&partner=globalott \
--data
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rss xmlns:gmrss="urn:uri:merlin-gold-FIXME" xmlns:media=http://search.yahoo.com/mrss/ xmlns:dcterms=http://purl.org/dc/terms/>
<channel>
<generator>NBC OTT Feed Generator</generator>
<item>
<title>Basketball</title>
<gmrss:seriesTitle>The Office</gmrss:seriesTitle>
<gmrss:shortDescription>Basketball</gmrss:shortDescription>
<gmrss:mediumDescription>Basketball medium Description</gmrss:mediumDescription>
<gmrss:longDescription>Facing a basketball game against the warehouse employees, Michael raises the stakes and bets on his handpicked team.</gmrss:longDescription>
<pubDate>1312416000000</pubDate>
<gmrss:videoAssetId namespace="SkyShowtime" provider="NBC">GMO_14713006559</gmrss:videoAssetId>
<gmrss:programVariantId namespace="SkyShowtime:en-US" provider="NBC">GTM1234</gmrss:programVariantId>
<gmrss:videoForm>long</gmrss:videoForm>
<gmrss:brand>nbcentertainment</gmrss:brand>
<gmrss:distributor>SkyShowtime</gmrss:distributor>
<gmrss:durableAppId>appId</gmrss:durableAppId>
<gmrss:entityType>Episode</gmrss:entityType>
<gmrss:seasonNumber>1</gmrss:seasonNumber>
<gmrss:episodeNumber>5</gmrss:episodeNumber>
<gmrss:duration>3800</gmrss:duration>
<gmrss:externalEntityId>entity123</gmrss:externalEntityId>
<gmrss:externalSeriesId>series123</gmrss:externalSeriesId>
<!--If we needed both ratings included on the primary program -->
<media:rating scheme="urn:sky:bskybca:gb">-5</media:rating>
<!-- tags: from NBC will of 2 types: without type for Genre/Subgenre and with Type for ProviderPlacement. NBC tags will be plain text. Gracenote be video descriptor id -->
<gmrss:tagReference provider="NBC">Genre:Movies</gmrss:tagReference>
<gmrss:tagReference provider="NBC">Subgenre:Sci-Fi & Fantasy</gmrss:tagReference>
<gmrss:tagReference provider="GRACENOTE_VIDEO_DESCRIPTOR">GN164S651XQJ19N</gmrss:tagReference>
<gmrss:tagReference provider="NBC" type="ProviderPlacement">action</gmrss:tagReference>
<!-- Reference to the Gracenote episode -->
<gmrss:entityReference provider="GRACENOTE" entityType="Episode">EP034829100019</gmrss:entityReference>
<!-- Reference to english series -->
<gmrss:entityReference provider="NBC" entityType="SeriesMaster">SM5678</gmrss:entityReference>
<!-- Entity Collection Reference links multi-language programs together. They should reference the programVariant id of the primary program -->
<gmrss:entityReference provider="NBC" entityType="EntityCollection">GTMV0000645117</gmrss:entityReference>
<!-- If this asset represents LIVOD content -->
<gmrss:playableStartDate>2022-03-19T11:00:00Z</gmrss:playableStartDate>
<gmrss:playableEndDate>2022-03-19T10:00:00Z</gmrss:playableEndDate>
<gmrss:hasReplay>False</gmrss:hasReplay>
<!-- Content metadata: repeated for each content type-->
<media:group>
<media:content duration="5047" lang="en-US" gmrss:videoQuality="HD" gmrss:framerate="23.976" gmrss:sap="false" gmrss:dvs="true" gmrss:subtitle="true" gmrss:cc="true" type="M3U" url=[https://$%7bUS_VOD_PROD%7d/pub/global/%20xYh/EIw/SKYSHOWTIME_1611852294372.3757_01/cmaf/mpeg_cenc/master_cmaf.m3u8]https://${US_VOD_PROD}/pub/global/ xYh/EIw/SKYSHOWTIME_1611852294372.3757_01/cmaf/mpeg_cenc/master_cmaf.m3u8>
<gmrss:audioTrack dvs="false" index="0" lang="en-US" audioType="Surround" original="true"/>
<gmrss:audioTrack dvs="false" index="1" lang="en-US" audioType="Stereo"/>
<gmrss:audioTrack dvs="false" index="2" lang="es-ES" audioType="Surround"/>
<gmrss:audioTrack dvs="false" index="3" lang="es-ES" audioType="Stereo"/>
<gmrss:subtitle lang="en-US" role="cc" />
<gmrss:subtitle lang="pl-PL" role="subtitle" />
<gmrss:subtitle lang="pl-PL" role="forcedNarrative" />
<gmrss:subtitle lang="nl-NL" role="subtitle" />
<gmrss:subtitle lang="nb-NO" role="subtitle" />
<gmrss:subtitle lang="sv-SE" role="subtitle" />
<gmrss:subtitle lang="da-DK" role="subtitle" />
<gmrss:subtitle lang="fi-FI" role="subtitle" />
<gmrss:videoCodec>H264</gmrss:videoCodec>
<gmrss:audioCodec>AAC</gmrss:audioCodec>
<gmrss:transport>HLS</gmrss:transport>
<gmrss:playerConfig key="ad_compatibility_encoding_profile">cmaf-hls-24fps-peacock-v1</gmrss:playerConfig>
<gmrss:transferMode>Streaming</gmrss:transferMode>
<gmrss:container>ISOBMFF</gmrss:container>
<gmrss:protectionScheme>CBCS</gmrss:protectionScheme>
<gmrss:protectionSystem>CKS</gmrss:protectionSystem>
<gmrss:protectionMethod>PLAYREADY</gmrss:protectionMethod>
<gmrss:protectionMethod>WIDEVINE</gmrss:protectionMethod>
<gmrss:protectionKey>"TEST-US-SLE-1-CENC:peacock_801363"</gmrss:protectionKey>
<gmrss:optimizedFor>STREAMING</gmrss:optimizedFor>
<gmrss:adInstructions key="test">break1</gmrss:adInstructions>
<gmrss:adInstructions key="real">break2</gmrss:adInstructions>
</media:content>
</media:group>
<!-- Rights metadata. Proposition should be supplied for each territory with windowing-->
<gmrss:contentRights>
<gmrss:segment>
<gmrss:segmentCode>SKYSHOWTIME</gmrss:segmentCode>
<gmrss:accessRole>base_d2c</gmrss:accessRole>
</gmrss:segment>
<gmrss:proposition>
<gmrss:territory>PL</gmrss:territory>
<gmrss:serviceProviderCode>SKYSHOWTIME</gmrss:serviceProviderCode>
<gmrss:propositionCode>SKYSHOWTIME</gmrss:propositionCode>
</gmrss:proposition>
<gmrss:windowType>ARCHIVE</gmrss:windowType>
<gmrss:windowMode>SVOD</gmrss:windowMode>
<gmrss:valid>start=2021-01-01T00:00Z;end=2021-12-31T00:00Z;scheme=W3C-DTF</gmrss:valid>
<gmrss:restriction type="REST:PLAYTERR">
<gmrss:playRegion>PL</gmrss:playRegion>
<gmrss:usage>inclusive</gmrss:usage>
</gmrss:restriction>
<gmrss:restriction type="REST:PLATFORMCAPABILITY">
<gmrss:platformCapability>RECS</gmrss:platformCapability>
<gmrss:usage>exclusive</gmrss:usage>
</gmrss:restriction>
<gmrss:downloadable>true</gmrss:downloadable>
<gmrss:streamable>true</gmrss:streamable>
<!-- Device Restrictions will be hardcoded downstream for MVP and do not need to be sent via OpenIngest-->
</gmrss:contentRights>
<media:status reason="add" state="active"/>
<gmrss:languageDetails title="en-US" description="en-US" episodeTitle="en-US" originalAudio="en-GB" intendedAudience="en-US"/>
</item>
</channel>
</rss>'
Open Ingest Result
OpenIngestResult will be returned without a wrapper through openIngestMerlin1.
Field | Notes | First Schema Version | Final Schema Version |
---|---|---|---|
failureCounts | A map containing the number of failures per OpenIngestFailure stage. OpenIngestFailures include CreateProgramInfo, CreateOfferInfo, CreateTvSeasonInfo, IngestProgram, IngestOffer, IngestTvSeason, CreateIngestMedia, IngestMedia, CallIngest, SaveOfferedItem, DeleteOfferedItem | 1.0 | 1.4 |
outcomeInfo | A map of the OpenIngestAssetId (comprised of asset id, namespace, and provider) to the AssetIngestResult (see AssetIngestResult table) | 1.4 | |
failureReasons | A set containing reasons for failures related to this asset | 1.0 | 1.4 |
outcomeMap | A map of the OpenIngestAssetId (comprised of asset id, namespace, and provider) to the AssetIngestResult (see AssetIngestResult table) | 1.2 | 1.4 |
failed | Whether the asset failed or was successfully ingested into Merlin | 1.5 |
AssetIngestResult
Field | Notes | First Schema Version | Final Schema Version |
---|---|---|---|
outcome | The status of the asset after open ingest submission. Possible values include processed, failed, processedWithErrors, skipped | 1.0 | |
failures | A description of the error in a certain phase of open ingest processing | 1.0 | 1.4 |
failureInfo | See OpenIngestFailureInfo table | 1.4 |
OpenIngestFailureInfo
Field | Notes | First Schema Version | Final Schema Version |
---|---|---|---|
failedURI | The identifier of the failed entity | 1.4 | |
reason | The reason for the failure | 1.4 | |
info | Additional information about the failure | 1.4 | |
hardFailure | Whether this failure prevented ingest. If true, it's considered a hard failure. A failure which allows processing to continue is considered soft | 1.6 | |
phase | The phase in which failure occurred. Phases include CreateProgramInfo, CreateOfferInfo, CreateTvSeasonInfo, IngestProgram, IngestOffer, IngestTvSeason, CreateIngestMedia, IngestMedia, CallIngest, SaveOfferedItem, DeleteOfferedItem | 1.4 |
Sample Response
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<openIngestResult>
<failed>true</failed>
<outcomeInfo>
<entry>
<key>
<namespace>SkyShowtime</namespace>
<provider>NBC</provider>
<value>GMO_14713006559</value>
</key>
<value>
<failureInfo>
<hardFailure>true</hardFailure>
<phase>IngestProgram</phase>
<reason>Failed to create ProgramInfo guid=SkyShowtime:GMO_14713006559, provider=NBC, details=null null</reason>
</failureInfo>
<failureInfo>
<hardFailure>true</hardFailure>
<phase>IngestProgram</phase>
<reason>IngestWebService exception guid=SkyShowtime:GMO_14713006559, provider=NBC, details=com.theplatform.web.tv.ingest.api.IngestException: -5 is not a valid value for rating when scheme==urn:sky:bskybca:gb null</reason>
</failureInfo>
<failures>
<description>Failed to create ProgramInfo guid=SkyShowtime:GMO_14713006559, provider=NBC, details=null null</description>
<phase>IngestProgram</phase>
</failures>
<failures>
<description>IngestWebService exception guid=SkyShowtime:GMO_14713006559, provider=NBC, details=com.theplatform.web.tv.ingest.api.IngestException: -5 is not a valid value for rating when scheme==urn:sky:bskybca:gb null</description>
<phase>IngestProgram</phase>
</failures>
<outcome>failed</outcome>
</value>
</entry>
</outcomeInfo>
<outcomeMap>
<entry>
<key>
<namespace>SkyShowtime</namespace>
<provider>NBC</provider>
<value>GMO_14713006559</value>
</key>
<value>
<failureInfo>
<hardFailure>true</hardFailure>
<phase>IngestProgram</phase>
<reason>Failed to create ProgramInfo guid=SkyShowtime:GMO_14713006559, provider=NBC, details=null null</reason>
</failureInfo>
<failureInfo>
<hardFailure>true</hardFailure>
<phase>IngestProgram</phase>
<reason>IngestWebService exception guid=SkyShowtime:GMO_14713006559, provider=NBC, details=com.theplatform.web.tv.ingest.api.IngestException: -5 is not a valid value for rating when scheme==urn:sky:bskybca:gb null</reason>
</failureInfo>
<failures>
<description>Failed to create ProgramInfo guid=SkyShowtime:GMO_14713006559, provider=NBC, details=null null</description>
<phase>IngestProgram</phase>
</failures>
<failures>
<description>IngestWebService exception guid=SkyShowtime:GMO_14713006559, provider=NBC, details=com.theplatform.web.tv.ingest.api.IngestException: -5 is not a valid value for rating when scheme==urn:sky:bskybca:gb null</description>
<phase>IngestProgram</phase>
</failures>
<outcome>failed</outcome>
</value>
</entry>
</outcomeMap>
</openIngestResult>