Vevo accepts feed delivery via S3 in both DDEX and XML formats.
Examples of both of these formats can be found at the bottom of this support page.
Vevo Feed 101
Metadata Validator
Validate DDEX or vevoxml metadata at: https://cs-lingest.vevoprd.com/
This does not store or submit the metadata and can be used as often as needed to validate manifest metadata for correctness.
Please chose Orch as CP and Vevo to validate XML and DDEX to validate DDEX
Content ingestion feed configuration
Please contact content@vevo.com to request access keys to start delivery.
Please note that this can only be done if you have an active CLA with VEVO.
Once you have received your keys please follow the guide below to configure your S3 folder.
http://www.ingestionfeed.vevo.com/
Submission Fields
Depending on the submission purpose(Insert
/Update
/Delete
) the list of fields varies slightly, with a core set of always required fields.
Other fields supported by the DDEX format and not listed below may be included, however, they will not be ingested by the Vevo systems.
Required
The following fields are required and should always be included in the submission manifest.
- Isrc
- Title
- Label / RepetoireOwner
- Genres
- MainArtists
- YouTubeChannelName
Optinal
- Language
- DurationMs
- MadeForKids
- YouTubeUnlisted
- FeaturedArtists
- Directors
- Producers
- Editors
- Composers
- IsExplicit
- CopyRightYear
- CopyRightLine
- CustomId
- GRid
- UpcCode
- AudioIsrc
- YouTubeDescription
- Keywords
- VideoVersionTitle
Insert
When performing an Insert
an additional set of fields are possible.
Required
- VideoAsset
- Availability
- TerritorialPolicy
- StartDate
Optional
- ImageAsset
- CaptionAsset
- EndDate
Update
Required
- Availability
- TerritorialPolicy
- StartDate
Optional
- ImageAsset
- CaptionAsset
- EndDate
Delete
Note: No-Deal takedown is supported. PurgeReleaseMessage is not supported.
Optional
- EndDate
DDEX (ERN 3.8.X) support
Vevo supports the DDEX ERN standard for release deliveries. However, this standard still allows for some flexibility and the Vevo parser looks for certain release metadata in specific places.
Upload Structure
To make a submission via feed upload the xml manifest and media assets to vevo-ingestion S3 bucket.
General guidelines:
- Create a unique folder per-submission. For example:
- s3://vevo-ingestion/feed/sony/A10301A0000007246L_20211108214519818/
- All media assets(video, thumbnail, captions) must be uploaded first
- Upload the manifest file last. Delivery of the manifest is the signal to vevo ingestion to start processing the submission
- NOTE:
- "BatchComplete" files are not supported by the ingestion system at this time
- Do not send a complete file for DDEX submissions, it is not supported. Submission processing will stat as soon as the manifest is uploaded
General Rules
Mark Up One Release: R0
You can actually mark up any release you like without doing any harm, but Vevo's parser only looks at a single release, the release in /ernm:NewReleaseMessage/ReleaseList where /ernm:NewReleaseMessage/ReleaseList/Release/ReleaseReference is R0. There are cases where the parser will fail over to other releases in the release list if a piece of metadata is missing, but it will always prefer R0.
Use 'Worldwide' territory code to provide general release details
Some release details need to be provided under the ReleaseDealsByTerritory. When we discuss those cases below, we are specifically refering to the path /ernm:NewReleaseMessage/ReleaseList/Release/ReleaseDetailsByTerritory where the release is R0 and . We'll discuss those cases below. When we do we are referin
Youtube Channel
/ernm:NewReleaseMessage/ReleaseList/Release/ArtistProfilePage/PageName
The element text should be the name of the Youtube channel:
<PageName>lesinconnusVEVO</PageName>
The channel name is case-insensitive, but we should encourage the content provider to provide the channel exactly as it exists on youtube for readability.
PageName should be in the Main(<ReleaseType>VideoSingle</ReleaseType> aka R0) Release. abridged <Release> example:
<Release IsMainRelease="true"> <ReleaseId> <ICPN>886444169684</ICPN> ... </ReleaseId> <ReleaseReference>R0</ReleaseReference> <ReferenceTitle LanguageAndScriptCode="fr"> <TitleText>...</TitleText> </ReferenceTitle> <ReleaseResourceReferenceList> ... </ReleaseResourceReferenceList> <ReleaseType>VideoSingle</ReleaseType> <ReleaseDetailsByTerritory> <TerritoryCode>Worldwide</TerritoryCode> ... <Synopsis>...</Synopsis> </ReleaseDetailsByTerritory> <Duration>...</Duration> <CLine> <Year>...</Year> ... </CLine> <ArtistProfilePage> <PageName>lesinconnusVEVO</PageName> </ArtistProfilePage> </Release>
Thumbnail Image
Thumbnail is mandatory.
The thumbnail Image should be specified in the ResourceList and linked to the Video via ResourceGroup in the Main(<ReleaseType>VideoSingle</ReleaseType> aka R0) Release.
Image Resource
The main spec for the thumbnail image should be located at the following path:
/ernm:NewReleaseMessage/ResourceList/Image
see the abridged example below:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ernm:NewReleaseMessage LanguageAndScriptCode="en" MessageSchemaVersionId="/ern/381" xmlns:ernm="http://ddex.net/xml/ern/381" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:schemaLocation="http://ddex.net/xml/ern/381 http://ddex.net/xml/ern/381/release-notification.xsd"> <ResourceList> <Image> <ImageType>VideoScreenCapture</ImageType> <ImageId> <ProprietaryId Namespace="DPID:PADPIDA2007040502I">G010004278282M</ProprietaryId> </ImageId> <ResourceReference>A2</ResourceReference> <ImageDetailsByTerritory> <TerritoryCode>Worldwide</TerritoryCode> <TechnicalImageDetails> <TechnicalResourceDetailsReference>T2</TechnicalResourceDetailsReference> <ImageCodecType>JPEG</ImageCodecType> <ImageHeight>1080</ImageHeight> <ImageWidth>1920</ImageWidth> <ImageResolution>72</ImageResolution> <IsPreview>false</IsPreview> <File> <FileName>A10301A0004278282M_T-3300515145112_Image_001-001.jpg</FileName> <FilePath>resources/</FilePath> <HashSum> <HashSum>e1164a55f3a5ed7948bda2d7551b6103</HashSum> <HashSumAlgorithmType>MD5</HashSumAlgorithmType> </HashSum> </File> </TechnicalImageDetails> </ImageDetailsByTerritory> </Image> </ResourceList> </ernm:NewReleaseM
Image → Video link
In R0Release link the Image resource(ResourceReference ID A2) to the Video(ResourceReference ID A1) via LinkedReleaseResourceReference tag:
<LinkedReleaseResourceReference LinkDescription="VideoScreenCapture">A2</LinkedReleaseResourceReference> abridged <Release> example: <Release IsMainRelease="true"> <ReleaseId> ... <ReleaseReference>R0</ReleaseReference> <ReferenceTitle LanguageAndScriptCode="en"> ... <ReleaseResourceReferenceList> <ReleaseResourceReference ReleaseResourceType="PrimaryResource">A1</ReleaseResourceReference> <ReleaseResourceReference ReleaseResourceType="SecondaryResource">A2</ReleaseResourceReference> </ReleaseResourceReferenceList> <ReleaseType>VideoSingle</ReleaseType> <ReleaseDetailsByTerritory> <TerritoryCode>Worldwide</TerritoryCode> <DisplayArtistName>...</DisplayArtistName> <LabelName LabelNameType="DisplayLabelName">...</LabelName> <Title LanguageAndScriptCode="en" TitleType="DisplayTitle"> ... <DisplayArtist SequenceNumber="2"> ... <ResourceGroup> <ResourceGroup> <Title TitleType="GroupingTitle"> ... <SequenceNumber>1</SequenceNumber> <ResourceGroupContentItem> <SequenceNumber>1</SequenceNumber> <ResourceType>Video</ResourceType> <ReleaseResourceReference ReleaseResourceType="PrimaryResource">A1</ReleaseResourceReference> <LinkedReleaseResourceReference LinkDescription="VideoScreenCapture">A2</LinkedReleaseResourceReference> </ResourceGroupContentItem> </ResourceGroup> </ResourceGroup> <Genre> ... <Keywords>...</Keywords> </ReleaseDetailsByTerritory> <Duration>...</Duration> <PLine> ... <CLine> ... <ArtistProfilePage> ... </Release>
Video Version
/ernm:NewReleaseMessage/ResourceList/Video/VideoDetailsByTerritory/Title/SubTitle
- We use the first VideoDetailsByTerritory As far as we're concerned it doesn't matter what territory that is, we just look at the first one.
- Conventionally by https://kb.ddex.net/display/HBK/Titles+and+SubTitles+in+ERN-3, this would be the Title element with TitleType="FormalTitle", but we look for the last Title element with a child SubTitle element that comes before the Title element with TitleType="DisplayTitle". In this case the order matters. See the abridged example below.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ernm:NewReleaseMessage LanguageAndScriptCode="en" MessageSchemaVersionId="/ern/381" xmlns:ernm="http://ddex.net/xml/ern/381" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:schemaLocation="http://ddex.net/xml/ern/381 http://ddex.net/xml/ern/381/release-notification.xsd"> <ResourceList> <Video> <VideoType>ShortFormMusicalWorkVideo</VideoType> <VideoId> <ISRC>IT5082000070</ISRC> </VideoId> <ResourceReference>A1</ResourceReference> <!-- Not the ReferenceTitle --> <ReferenceTitle LanguageAndScriptCode="it"> <TitleText>All'asilo - La mia classe - Gioca con gli indovinelli e il dizionario</TitleText> <SubTitle>Official Video</SubTitle> </ReferenceTitle> <VideoDetailsByTerritory> <TerritoryCode>Worldwide</TerritoryCode> <!-- This one. We find the Title that has a SubTitle. It must come before the DisplayTitle --> <Title LanguageAndScriptCode="it" TitleType="FormalTitle"> <TitleText>All'asilo - La mia classe - Gioca con gli indovinelli e il dizionario</TitleText> <SubTitle>Official Video</SubTitle> </Title> <Title LanguageAndScriptCode="it" TitleType="DisplayTitle"> <TitleText>All'asilo - La mia classe - Gioca con gli indovinelli e il dizionario (Official Video)</TitleText> </Title> ... </VideoDetailsByTerritory> </Video> ... </ResourceList> ... </ernm:NewReleaseMessage>
Proprietary fields
YouTube Unlisted
To submit a video to be unlisted on just YouTube, the content provider can add a ProprietaryId to the ResourceList:
<ResourceList>
<Video>
<VideoType>ShortFormMusicalWorkVideo</VideoType>
<VideoId>
<ISRC>GBUV12345678</ISRC>
<ProprietaryId Namespace="VEVO:YouTubeUnlisted">true</ProprietaryId>
...
<Video xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' version='1.0'> <Url>QMAXQ1506046.mp4</Url> <VideoTitle>Whip Them Birdies</VideoTitle> <Action>Insert</Action> <AllowComments>Always</AllowComments> <AllowResponses>Always</AllowResponses> <VideoISRC>QMAXQ1506046</VideoISRC> <StartTime>12/03/18 7:00 PM</StartTime> <Policies> <Policy Rule='Share' Include='Exclude'></Policy> </Policies> <Genre>Rap/Hip-Hop</Genre> <Username>420BastardBoyVEVO</Username> <ContentCategory>music</ContentCategory> <VideoDescription>© 2018 N2K Music Group © 420 Bastard Boy LABEL- http://bit.ly/N2K_MUSIC ALL STREAMING LINKS: http://bit.ly/420_STREAMING LATEST FREE DOWNLOAD - http://bit.ly/trainwrekk_freedownload FACEBOOK - https://www.facebook.com/420Bastardboyy/ INSTAGRAM - https://www.instagram.com/420bastardboy/</VideoDescription> <Label>N2K Music Group</Label> <Artists> <Artist>420 Bastard Boy</Artist> </Artists> <AllowRatings>True</AllowRatings> <AllowEmbedding>True</AllowEmbedding> <Target>upload,claim</Target> <AdsenseForVideo>Allow</AdsenseForVideo> <InVideoAds>Allow</InVideoAds> <RepetoireOwner>N2K Music Group</RepetoireOwner> <DistributionRule>Allow</DistributionRule> <ThumbnailUrl>image.png</ThumbnailUrl> <HasPreRoll>True</HasPreRoll> <HasPostRoll>True</HasPostRoll> <HasMidRollSlots>False</HasMidRollSlots> <MadeForKids>True</MadeForKids> <YouTubeUnlisted>True</YouTubeUnlisted> </Video>
Vevoxml
Upload Structure
Submission procedure for vevoxml is largely similar to making DDEX submissions with a few important differences.
- Use a unique folder per-submission. The exact folder name is up to the user, including isrc and/or current timestamp can be helpful
- Example: s3://vevo-ingestion/feed/sony/QZNCS2101475_1632243025134/
- All media assets(video, thumbnail, captions) must be uploaded first
- The manifest file should be named manifest.xml
- When the submission is ready for processing, trigger submission processing by uploading a 0-byte file named complete
- This acts as a signal to vevo ingestion to start processing the contents of the submission folder
YouTube Unlisted
To submit a video to be unlisted on just YouTube, the content provider can add this field to the manifest:
<YouTubeUnlisted>True</YouTubeUnlisted>
Example manifest
<Video xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' version='1.0'> <Url>QMAXQ1506046.mp4</Url> <VideoTitle>Whip Them Birdies</VideoTitle> <Action>Insert</Action> <AllowComments>Always</AllowComments> <AllowResponses>Always</AllowResponses> <VideoISRC>QMAXQ1506046</VideoISRC> <StartTime>12/03/18 7:00 PM</StartTime> <Policies> <Policy Rule='Share' Include='Exclude'></Policy> </Policies> <Genre>Rap/Hip-Hop</Genre> <Username>420BastardBoyVEVO</Username> <ContentCategory>music</ContentCategory> <VideoDescription>© 2018 N2K Music Group © 420 Bastard Boy LABEL- http://bit.ly/N2K_MUSIC ALL STREAMING LINKS: http://bit.ly/420_STREAMING LATEST FREE DOWNLOAD - http://bit.ly/trainwrekk_freedownload FACEBOOK - https://www.facebook.com/420Bastardboyy/ INSTAGRAM - https://www.instagram.com/420bastardboy/</VideoDescription> <Label>N2K Music Group</Label> <Artists> <Artist>420 Bastard Boy</Artist> </Artists> <AllowRatings>True</AllowRatings> <AllowEmbedding>True</AllowEmbedding> <Target>upload,claim</Target> <AdsenseForVideo>Allow</AdsenseForVideo> <InVideoAds>Allow</InVideoAds> <RepetoireOwner>N2K Music Group</RepetoireOwner> <DistributionRule>Allow</DistributionRule> <ThumbnailUrl>image.png</ThumbnailUrl> <HasPreRoll>True</HasPreRoll> <HasPostRoll>True</HasPostRoll> <HasMidRollSlots>False</HasMidRollSlots> <MadeForKids>True</MadeForKids> <YouTubeUnlisted>True</YouTubeUnlisted> </Video>