Custom metadata support custom-metadata-support
The Media Collection API allows you to send custom key-value pairs alongside standard parameters in sessionStart, adStart, and chapterStart events. Custom metadata is forwarded to Adobe Analytics with the respective media close events.
To make this data available in Analysis Workspace, customers must define custom eVars and configure processing rules to populate them according to their use case. Once mapped to eVars or props, the data also becomes available in Adobe Experience Platform through the corresponding eVar paths, provided the Analytics source connector is configured.
For XDM-based implementations using Experience Edge, see Custom metadata support - XDM format.
Overview
Custom metadata is included in the request body as a customMetadata object, positioned alongside the params key. It applies to three event types:
sessionStartadStartchapterStartStructure
Custom metadata is a flat object (key-value pairs) at the event level, alongside the params key:
{
"playerTime": {
"playhead": 0,
"ts": 1646938800000
},
"eventType": "sessionStart",
"params": {
"analytics.trackingServer": "example.sc.omtrdc.net",
"analytics.reportSuite": "example-rsid",
"visitor.marketingCloudOrgId": "0123456789@AdobeOrg",
"media.id": "sample-video-id",
"media.length": 3600,
"media.contentType": "vod",
"media.playerName": "HTML5 Player",
"media.channel": "Sports"
},
"customMetadata": {
"field": "value"
}
}
Mandatory parameters by event type
paramssessionStartanalytics.trackingServer, analytics.reportSuite, visitor.marketingCloudOrgId, media.id, media.length, media.contentType, media.playerName, media.channeladStartmedia.ad.id, media.ad.length, media.ad.podPosition, media.ad.playerNamechapterStartmedia.chapter.length, media.chapter.offset, media.chapter.indexKey naming requirements
- Avoid using the
media.prefix in custom metadata keys — it maps to standard media fields and may overwrite them in Analytics reporting - The
a.prefix is reserved for Adobe standard metadata and must not be used
Main content custom metadata
Sent with sessionStart. Applies to the primary media being tracked and remains available throughout ad and chapter calls. Any custom metadata defined here will be automatically merged by the media backend on the corresponding close calls. It will be included alongside any specific custom metadata defined for ads and chapters.
curl -X POST "https://{uri}/api/v1/sessions" \
--header 'Content-Type: application/json' \
--data '{
"playerTime": {
"playhead": 0,
"ts": 1646938800000
},
"eventType": "sessionStart",
"params": {
"analytics.trackingServer": "example.sc.omtrdc.net",
"analytics.reportSuite": "example-rsid",
"analytics.visitorId": "visitor123",
"visitor.marketingCloudOrgId": "0123456789@AdobeOrg",
"media.id": "sample-video-id",
"media.name": "Sample Video",
"media.length": 3600,
"media.contentType": "vod",
"media.playerName": "HTML5 Player",
"media.channel": "Sports"
},
"customMetadata": {
"contentCategory": "Live Sports",
"leagueType": "Professional",
"broadcastRights": "Premium"
}
}'
Ad custom metadata
Sent with adStart. Specific to each individual advertisement. The custom metadata from sessionStart is also automatically merged by the media backend on the ad close call alongside any ad-specific custom metadata defined here.
curl -X POST "https://{uri}/api/v1/sessions/{sid}/events" \
--header 'Content-Type: application/json' \
--data '{
"playerTime": {
"playhead": 30,
"ts": 1646938830000
},
"eventType": "adStart",
"params": {
"media.ad.id": "summer-sale-2026",
"media.ad.name": "Summer Sale Ad",
"media.ad.length": 30,
"media.ad.playerName": "HTML5 Player",
"media.ad.podPosition": 1
},
"customMetadata": {
"campaignId": "SUMMER2026",
"targetAudience": "18-34",
"adFormat": "skippable"
}
}'
Chapter custom metadata
Sent with chapterStart. Specific to each content chapter or segment. The custom metadata from sessionStart is also automatically merged by the media backend on the chapter close call alongside any chapter-specific custom metadata defined here.
curl -X POST "https://{uri}/api/v1/sessions/{sid}/events" \
--header 'Content-Type: application/json' \
--data '{
"playerTime": {
"playhead": 600,
"ts": 1646938200000
},
"eventType": "chapterStart",
"params": {
"media.chapter.friendlyName": "Introduction",
"media.chapter.length": 300,
"media.chapter.index": 1,
"media.chapter.offset": 600
},
"customMetadata": {
"chapterType": "tutorial",
"difficulty": "beginner",
"instructor": "Jane Smith"
}
}'
Behavior
- All custom metadata values must be strings. Convert numbers and booleans before sending.
- Custom metadata appears in Analytics with a
c.prefix (e.g.,contentCategory→c.contentCategory) - Map custom metadata to eVars, props, or context data variables via Analytics processing rules
sessionStartmetadata persists for the entire session; updates require a new session- Each
adStartandchapterStartevent can carry different custom metadata
Related documentation
- Custom metadata support - XDM format — Send custom metadata via Experience Edge to both Analytics and AEP
- Adobe Analytics source connector for report suite data — Bring Analytics data into Adobe Experience Platform