L’API Availls repose sur le framework d’API pour les partenaires, qui offre une interface unifiée pour les API accessibles de l’extérieur. Ce framework permet aux studios, aux agences de post-production et aux autres partenaires de distribution de gérer leur catalogue vidéo de manière programmatique sur Prime Video.
Commencez
Pour accéder à l’API Avails, vous aurez besoin d’un certificat MTLS et d’une clé d’API. Cette section décrit les étapes à suivre pour générer une demande de signature de certificat (CSR), demander un certificat MTLS et envoyer des demandes d’API à l’API Avails.
Étape 1 : Le client crée sa clé privée et sa demande de signature de certificat (CSR) à l’aide d’openssl.
openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr
Étape 2 : Le client envoie un e-mail à pv-partner-apis-support@amazon.com avec le fichier client.csr en pièce jointe. (L’équipe vous répondra avec un certificat dans un délai d’un jour ouvrable.) L’extrait de code suivant est un exemple suggéré. EMAIL TEMPLATE
Partner Details
PartnerName :
Partner Alias :
Partner Resource Access : [Avails-Read,Avails-Write]
Request Limit :
Attachment
Partner Certificate signing request (client.csr).
Étape 3 : Le client reçoit un certificat public, un cacert et une clé d’API de la part de l’équipe Partner API. L’extrait de code suivant fournit un exemple des messages que vous pourriez recevoir. Prod EMAIL TEMPLATE
Hi <Name/s>
Attached you’ll find your MTLS cert for PartnerApi Production environment. It will be usable only with the client.key you used to create client.csr that you sent us
Your ApiKey is: XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX. Include it in your requests as http header ‘x-api-key’
Requests with a body must have Content-Type=application/json header
The base url is https://partnerapi.primevideo.com
MTLS certs and ApiKeys provided for Sandbox environment will not work for Prod environment. You will need to request a separate MTLS cert and ApiKey to make requests against our Prod environment when you are ready
We have given you a rate limit of 10 TPS and 5 burst TPS (meaning you can have up to 5 open concurrent connections/requests at a time).
As a place to start, I would suggest doing a request to make sure you’re able to get an authenticated response. Try a GET request to https://partnerapi.primevideo.com/v1/avails/<licensor>/full-extract/some-test-alid?territory=US&businessLine=PRIME_SUBSCRIPTION. You should get a 404 status code with a response body indicating ‘Title not found for ALID some-test-alid and Licensor <licensor>’
Please let us know if you have any questions/problems!
PV PartnerApi Team
Attachment
Partner public Certificate (clientCert.pem)
CertificateAuthority public certificate (cacert.pem)
SANDBOX EMAIL TEMPLATE
Hi <Name/s>
Attached you’ll find your MTLS cert for PartnerApi Sandbox environment. It will be usable only with the client.key you used to create client.csr that you sent us.
We have created a new sandbox only vendorAlias of api_sandbox_<licensor> that you will use as vendorAlias/licensor for all your sandbox API requests.
Your ApiKey is: XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX. Include it in your requests as http header ‘x-api-key’.
Requests with a body must have Content-Type=application/json header.
Sandbox offers the exact same endpoints offered by our Prod api but with a different base url. The base url for Sandbox is https://sandbox.partnerapi.primevideo.com
The MTLS cert and ApiKey provided here will only work in the Sandbox environment. You will need to request a separate MTLS cert and ApiKey to make requests against our Prod environment when you are ready.
When creating Avails in the sandbox environment, you may use whatever ALID/SKU you want. These will not be connected nor linked to any prod titles and need not be coordinated with any real title ALID/SKU you have created in your account. Additionally, in the Sandbox you may safely use the same ALID/SKU as real titles in your prod account if you wish.
We have given you a rate limit of 4 TPS and 2 burst TPS (burst meaning you can have up to 2 open concurrent connections/requests at a time).
Note that this sandbox is not intended for long-term storage. Lifetime of a sandbox Avail is intended to be less-than 30 days.
As a place to start, I would suggest doing a request to make sure you’re able to get an authenticated response. Try a GET request to https://sandbox.partnerapi.primevideo.com/v1/avails/api_sandbox_<licensor>/full-extract/some-test-alid?territory=US&businessLine=PRIME_SUBSCRIPTION. You should get a 404 status code with a response body indicating ‘Title not found for ALID some-test-alid and Licensor api_sandbox_<licensor>’
Please let us know if you have any questions/problems!
PV PartnerApi Team
Attachment
Partner public Certificate (clientCert.pem)
CertificateAuthority public certificate (cacert.pem)
Étape 4 : Le client utilise la clé publique, le certificat public du partenaire et la clé API pour appeler l’API.
Voici quelques exemples d’intégrations utilisant différentes technologies.
Bash
curl --location --request PUT 'https://partnerapi.primevideo.com/v1/avails/{partnerAlias}/full-extract/{ALID}' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'x-api-key: <api key>' \
--data-raw '{ "avail": <Avail json> }' \
--key ./private_key.txt --cert ./certificate.pem
Python https://requests.readthedocs.io/en/master/user/advanced/#client-side-certificates
requests.put(f'https://partnerapi.primevideo.com/v1/avails/{partnerAlias}/full-extract/{ALID}',
data={'{ "avail": <Avail json> }'},
cert=('/path/client.cert', '/path/client.key'),
headers={'x-api-key':'<api key>','Content-Type':'application/json'})
Nodejs https://nodejs.org/api/https.html#https_https_request_options_callback
const options = {
hostname: `https://partnerapi.primevideo.com/v1/avails/{partnerAlias}/full-extract/{ALID}`,
port: 443,
path: `/v1/avails/{partnerAlias}/full-extract/{ALID}`,
method: 'PUT',
headers: {
'Content-Type':'application/json',
'x-api-key':'<api key>'
},
key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'),
agent: false
};
const req = https.request(options, (res) => {
// ...
});
Révoquer l’accès au certificat MTLS
Il peut arriver qu’un certificat MTLS doive être révoqué. Si vous souhaitez que l’un de leurs certificats soit révoqué, envoyez les informations présentées dans l’exemple suivant par e-mail à pv-partner-apis-support@amazon.com. EMAIL TEMPLATE
Partner Details
PartnerName :
Partner Alias :
Owner Email Id :
Certificate Serial Number :
ApiKey :
Mappage du schéma MDDF vers EMA Avail
Nous utilisons le schéma MDDF Avail en JSON. Un schéma du schéma est disponible auprès de MovieLabs au lien suivant : https://www.movielabs.com/md/avails/v2.6/avails-v2.6.1/avails-v2.6.1.html#Link2. Le tableau suivant montre le mappage depuis l’EMA pour les propriétés et les attributs MDDF Avail pris en charge.
Prime Video MDDF JSON |
Feuille de calcul Prime Video EMA |
Avail.Compatibility.SpecVersion |
1.7.3 |
Disponible. Valide |
VALIDE |
Avail.Disposition.EntryType |
Type d’entrée |
Avail.Licensor.DisplayName |
Afficher le nom |
Actif disponible. _ID du contenu |
VALIDE |
Avail.Asset.WorkType |
Type de travail |
Avail.asset.metadata.titleInternalAliias |
Alias internes du titre |
Avail.Asset.EpisodeMetadata.TitleInternalAliias |
Titre de l’épisode Internal Alias |
Avail.Asset.EpisodeMetadata.EpisodeNumber.Number |
Numéro de l’épisode |
Avail.Asset.EpisodeMetadata.SeasonTitleInternalAlias |
Titre de la saison Internal Alias |
Avail.asset.EpisodeMetadata.SeasonMetadata.SeasonContentId |
ID saisonnier |
Avail.Asset.EpisodeMetadata.SeasonMetadata.SeasonNumber.Number |
Numéro de saison |
Avail.Asset.EpisodeMetadata.Season.Nombre d’épisodes |
Nombre d’épisodes |
Avail.asset.EpisodeMetadata.SeriesMetadata.SeriesContentId |
Série Aldid |
Avail.asset.EpisodeMetadata.SeriesMetadata.SeriesTitleInternalAlias |
Titre de la série Internal Alias |
Avail.Asset.Métadonnées d’épisodes. Métadonnées de série. Nombre de saisons |
Nombre de saisons |
Avail.Asset.SaisonMetadata.TitleInternalIIAS |
Titre de la saison Internal Alias |
Avail.asset.SeasonMetadata.SeasonContentId |
ID saisonnier |
Avail.asset.SeasonMetadata.SeasonNumber.Number |
Numéro de saison |
Avail.Asset.Métadonnées saisonnières. Nombre d’épisodes |
Nombre d’épisodes |
Avail.asset.SeasonMetadata.SeriesMetadata.SeriesContentId |
Série Aldid |
Avail.asset.SeasonMetadata.SeriesMetadata.SeriesTitleInternalAlias |
Titre de la série Internal Alias |
Avail.Asset.Métadonnées saisonnières. Métadonnées de série. Nombre de saisons |
Nombre de saisons |
Avail.Transaction.LicenseType |
Type de licence |
Disponible. Transaction. Territoire. Pays |
Territoire |
Avail.Transaction.Start |
Démarrer |
Avail.Transaction.Fin |
Fin |
Avail.Transaction.Langue autorisée |
Langues autorisées |
Avail.Transaction.HoldBackLanguage |
Langage de retenue |
Avail.Transaction.AssetLanguage.Value |
Langue des actifs |
Avail.Transaction.AssetLanguage. _actif |
Type de localisation |
Description des droits de licence de Avail.Transaction.LicenseRightsDescription |
Description des droits de licence |
Avail.Transaction.FormatProfile |
Formater le profil |
Avail.Transaction.ContractID |
ID du contrat |
Avail.Transaction.Autres instructions |
Autres instructions |
Disponible. Transaction. _ID de transaction |
ID disponible |
Avail.Transaction.Term. _TermName.ChannelIdentity |
Identité du groupe |
Avail.Transaction.Term. _TermName.Date d’annonce |
Date d’annonce |
Avail.Transaction.Term. _TermName.SuppressionLiftDate |
Date de levée de la suppression |
Avail.Transaction.Term. _TermName.Durée de location |
Durée de location |
Avail.Transaction.Term. _TermName.Durée de la montre |
Durée de la montre |
Avail.Transaction.Term. _TermName.Télécharger |
Télécharger |
Avail.Transaction.Term. _TermName.tier |
Type de prix |
Avail.Transaction.Term. _TermName.Catégorie |
Type de prix |
Avail.Transaction.Term. _TermName.wsp |
Type de prix |
Avail.Transaction.Term. _TermName.srp |
SRP |
Avail.Transaction.Term.Money.Value |
Prix |
Disponible, transaction, terme, argent. _devise |
Devise du prix |
Disponibilité.Transaction.Term.Exclusivité |
Exclusivité |
Avail.Transaction.Term.ExclusiveAttributes |
Attributs exclusifs |
Avail.sharedTitlement.ID de l’écosystème |
DMA_ID |
Avail.sharedTitlement.ecosystem |
DMA_ID |
Méthodes
Les sections suivantes décrivent les différentes méthodes de demande d’API que vous pouvez utiliser avec l’API Renseignements utiles, y compris leurs points de terminaison spécifiques, ainsi que le corps de chaque demande et de chaque réponse.
Catégorie : Extrait complet
OBTENIR :
- Point de terminaison :
/avails/ {licensor} /full-extract/ {ALID} ? territory= {territoire} &BusinessLine= {BusinessLine} - Organisme de la demande : -
- ResponseBody : profitez de transactions pour un seul scope
METTEZ :
- Point de terminaison :
/avails/ {licensor} /full-extract/ {ALID} - Organisme de la demande : {...
Données disponibles} - ResponseBody : réponse en cas de succès/d’échec
SUPPRIMER :
- Point de terminaison :
/avails/ {licensor} /full-extract/ {ALID} ? territory= {territoire} &BusinessLine= {BusinessLine} &ContractID= {CPH | FIXED_FEE} &ChannelIdentity= {ChannelIdentity} - Organisme de la demande : -
- ResponseBody : réponse en cas de succès/d’échec
PUBLICATION :
- Point de terminaison :
/avails/ {licensor} /full-extract/ {ALID} /validate - Organisme de la demande : {...
Données disponibles} - ResponseBody : réponse en cas de succès/d’échec
Catégorie : Batch
Sous-catégorie : Extrait complet
POST :
- Point de terminaison :
/avails/full-extract/batch/get - Organisme de la demande :
{ [ { 'requestId': '<RequestId>', 'path':'/avails/{licensor}/full-extract/{ALID}?territory={territory}&businessLine={businessLine}' }... ] } - Organisme d’intervention :
[ { 'requestItemId':'<requestId>', 'success':'<true | false>', 'avail':'<responseBody>', 'errorMessage':'<errorMessage>' }... ]
PUBLICATION :
- Point de terminaison :
/avails/full-extract/batch/put - Organisme de la demande :
{ [ { 'requestId': '<RequestId>', 'path':'/avails/{licensor}/full-extract/{ALID}' 'body': { avails: [<Avail data>] } }... ] } - Organisme d’intervention :
[ { 'requestId':'<requestId>', 'statusCode':'<statusCode>', 'body':'<responseBody>', 'errorMessage':'<errorMessage>' }... ]
PUBLICATION :
- Point de terminaison :
/avails/full-extract/batch/delete - Organisme de la demande :
{ [ { 'requestId': '<RequestId>', 'path':'/avails/{licensor}/full-extract/{ALID}?territory={territory}&businessLine={businessLine}&contractId={CPH | FIXED_FEE}&channelIdentity={channelIdentity}' }... ] } - Organisme d’intervention :
[ { 'requestId':'<requestId>', 'statusCode':'<statusCode>', 'body':'<responseBody>', 'errorMessage':'<errorMessage>' }... ]
PUBLICATION :
- Point de terminaison :
/avails/full-extract/batch/validate - Organisme de la demande :
{ [ { 'requestId': '<RequestId>', 'path':'/avails/{licensor}/full-extract/{ALID}/validate' 'body': { avails: [<Avail data>] } }... ] } - Organisme d’intervention :
[ { 'requestId':'<requestId>', 'statusCode':'<statusCode>', 'body':'<responseBody>', 'errorMessage':'<errorMessage>' }... ]
Secteurs d’activité
Pour Full Extract, tous les Renseignements utiles pour un secteur d’activité ou un territoire doivent être livrés en même temps. Les secteurs d’activité suivants sont pris en charge :
- PRIME_SUBSCRIPTION
- TVOD
- FVOD
- CHAÎNES
Les valeurs BusinessLine peuvent être déterminées par la combinaison de LicenseType et BenefitID, comme indiqué dans le tableau suivant.
Type de licence |
ID de prestation |
Secteur d’activité |
EST |
- |
TVOD |
VOD |
- |
TVOD |
POÈTE |
- |
TVOD |
SVOD |
PREMIER |
ABONNEMENT PRIME |
SVOD |
A4K |
ABONNEMENT PRIME |
SVOD |
N’IMPORTE LEQUEL (pas PRIME ou A4K) |
CHAÎNES |
VOD |
N’IMPORTE LEQUEL |
VOD |