-
Notifications
You must be signed in to change notification settings - Fork 356
#2060 Add reusable datatypes and examples supporting Paid Media #2061
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
ece7997
4ac58fc
0463359
8498560
63765b8
0aa8fbf
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| { | ||
| "xdm:fieldName": "platform_specific_metric", | ||
| "xdm:stringValue": "high_engagement" | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| { | ||
| "xdm:fieldName": "custom_score", | ||
| "xdm:numberValue": 87.5 | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| { | ||
| "xdm:fieldName": "is_optimized", | ||
| "xdm:booleanValue": true | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| { | ||
| "xdm:fieldName": "last_updated", | ||
| "xdm:dateValue": "2025-01-15T10:30:00Z" | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,43 @@ | ||
| { | ||
| "meta:license": [ | ||
| "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", | ||
| "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", | ||
| "you may not use this file except in compliance with the License. You may obtain a copy", | ||
| "of the License at https://creativecommons.org/licenses/by/4.0/" | ||
| ], | ||
| "$schema": "http://json-schema.org/draft-06/schema#", | ||
| "$id": "https://ns.adobe.com/xdm/datatypes/paid-media-additional-field", | ||
| "title": "Paid Media Additional Field", | ||
| "type": "object", | ||
| "description": "Flexible field structure for storing platform-specific or custom fields not defined in core schema. Supports multiple value types to accommodate different data types from paid media network APIs.", | ||
| "properties": { | ||
| "xdm:fieldName": { | ||
| "title": "Field Name", | ||
| "type": "string", | ||
| "description": "Name of the additional field" | ||
| }, | ||
| "xdm:stringValue": { | ||
| "title": "String Value", | ||
| "type": "string", | ||
| "description": "String value of the field" | ||
| }, | ||
| "xdm:numberValue": { | ||
| "title": "Number Value", | ||
| "type": "number", | ||
| "description": "Numeric value of the field" | ||
| }, | ||
| "xdm:booleanValue": { | ||
| "title": "Boolean Value", | ||
| "type": "boolean", | ||
| "description": "Boolean value of the field" | ||
| }, | ||
| "xdm:dateValue": { | ||
| "title": "Date Value", | ||
| "type": "string", | ||
| "format": "date-time", | ||
| "description": "Date/time value of the field" | ||
| } | ||
| }, | ||
| "required": ["xdm:fieldName"], | ||
| "meta:status": "experimental" | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,34 @@ | ||
| { | ||
| "xdm:creativeID": "creative-12345", | ||
| "xdm:creativeType": "image", | ||
| "xdm:title": "Summer Sale - 50% Off", | ||
| "xdm:body": "Don't miss our biggest sale of the season. Shop now and save big on all summer items.", | ||
| "xdm:callToAction": "Shop Now", | ||
| "xdm:destinationURL": "https://example.com/summer-sale?utm_source=facebook&utm_campaign=summer2025", | ||
| "xdm:displayURL": "https://example.com/summer-sale", | ||
| "xdm:trackingURLs": [ | ||
| { | ||
| "xdm:eventType": "impression", | ||
| "xdm:url": "https://tracking.example.com/imp?id=12345" | ||
| }, | ||
| { | ||
| "xdm:eventType": "click", | ||
| "xdm:url": "https://tracking.example.com/click?id=12345" | ||
| } | ||
| ], | ||
| "xdm:assets": [ | ||
| { | ||
| "xdm:assetID": "asset-001", | ||
| "xdm:assetType": "image", | ||
| "xdm:name": "summer-sale-hero.jpg", | ||
| "xdm:url": "https://cdn.example.com/images/summer-sale-hero.jpg", | ||
| "xdm:thumbnailURL": "https://cdn.example.com/images/summer-sale-hero-thumb.jpg", | ||
| "xdm:dimensions": { | ||
| "xdm:width": 1200, | ||
| "xdm:height": 628 | ||
| }, | ||
| "xdm:fileSize": 245760, | ||
| "xdm:hash": "a3f5c8d9e2b1f4a6c7d8e9f0a1b2c3d4" | ||
| } | ||
| ] | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| { | ||
| "xdm:creativeID": "creative-67890", | ||
| "xdm:creativeType": "video", | ||
| "xdm:title": "New Product Launch", | ||
| "xdm:body": "Introducing our revolutionary new product. Watch the video to learn more.", | ||
| "xdm:callToAction": "Learn More", | ||
| "xdm:destinationURL": "https://example.com/new-product", | ||
| "xdm:assets": [ | ||
| { | ||
| "xdm:assetID": "asset-video-001", | ||
| "xdm:assetType": "video", | ||
| "xdm:name": "product-launch-video.mp4", | ||
| "xdm:url": "https://cdn.example.com/videos/product-launch.mp4", | ||
| "xdm:thumbnailURL": "https://cdn.example.com/videos/product-launch-thumb.jpg", | ||
| "xdm:dimensions": { | ||
| "xdm:width": 1920, | ||
| "xdm:height": 1080 | ||
| }, | ||
| "xdm:fileSize": 15728640, | ||
| "xdm:duration": 30.5, | ||
| "xdm:hash": "b4e6d9f1a2c3e5d7f8a9b0c1d2e3f4a5" | ||
| } | ||
| ] | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,43 @@ | ||
| { | ||
| "xdm:creativeID": "creative-carousel-001", | ||
| "xdm:creativeType": "carousel", | ||
| "xdm:title": "Explore Our Collection", | ||
| "xdm:body": "Swipe through our latest products and find your favorites.", | ||
| "xdm:callToAction": "View Collection", | ||
| "xdm:destinationURL": "https://example.com/collection", | ||
| "xdm:assets": [ | ||
| { | ||
| "xdm:assetID": "asset-carousel-001", | ||
| "xdm:assetType": "image", | ||
| "xdm:name": "product-1.jpg", | ||
| "xdm:url": "https://cdn.example.com/carousel/product-1.jpg", | ||
| "xdm:dimensions": { | ||
| "xdm:width": 1080, | ||
| "xdm:height": 1080 | ||
| }, | ||
| "xdm:fileSize": 180224 | ||
| }, | ||
| { | ||
| "xdm:assetID": "asset-carousel-002", | ||
| "xdm:assetType": "image", | ||
| "xdm:name": "product-2.jpg", | ||
| "xdm:url": "https://cdn.example.com/carousel/product-2.jpg", | ||
| "xdm:dimensions": { | ||
| "xdm:width": 1080, | ||
| "xdm:height": 1080 | ||
| }, | ||
| "xdm:fileSize": 195584 | ||
| }, | ||
| { | ||
| "xdm:assetID": "asset-carousel-003", | ||
| "xdm:assetType": "image", | ||
| "xdm:name": "product-3.jpg", | ||
| "xdm:url": "https://cdn.example.com/carousel/product-3.jpg", | ||
| "xdm:dimensions": { | ||
| "xdm:width": 1080, | ||
| "xdm:height": 1080 | ||
| }, | ||
| "xdm:fileSize": 172032 | ||
| } | ||
| ] | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,187 @@ | ||
| { | ||
| "meta:license": [ | ||
| "Copyright 2025 Adobe Systems Incorporated. All rights reserved.", | ||
| "This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license", | ||
| "you may not use this file except in compliance with the License. You may obtain a copy", | ||
| "of the License at https://creativecommons.org/licenses/by/4.0/" | ||
| ], | ||
| "$schema": "http://json-schema.org/draft-06/schema#", | ||
| "$id": "https://ns.adobe.com/xdm/datatypes/paid-media-creative", | ||
| "title": "Paid Media Creative", | ||
| "type": "object", | ||
| "description": "Data type representing creative assets and content for paid media ads", | ||
| "definitions": { | ||
| "paidMediaCreative": { | ||
| "properties": { | ||
| "xdm:creativeID": { | ||
| "type": "string", | ||
| "title": "Creative ID", | ||
| "description": "Unique identifier for the creative" | ||
| }, | ||
| "xdm:creativeType": { | ||
| "type": "string", | ||
| "title": "Creative Type", | ||
| "description": "Type of creative content", | ||
| "enum": [ | ||
| "image", | ||
| "video", | ||
| "carousel", | ||
| "collection", | ||
| "dynamic", | ||
| "text", | ||
| "html5", | ||
| "playable", | ||
| "other" | ||
| ], | ||
| "meta:enum": { | ||
| "image": "Static Image", | ||
| "video": "Video", | ||
| "carousel": "Carousel/Multi-image", | ||
| "collection": "Collection/Catalog", | ||
| "dynamic": "Dynamic Creative", | ||
| "text": "Text Only", | ||
| "html5": "HTML5/Rich Media", | ||
| "playable": "Playable Ad", | ||
| "other": "Other Creative Type" | ||
| } | ||
| }, | ||
| "xdm:title": { | ||
| "type": "string", | ||
| "title": "Title", | ||
| "description": "Creative title or headline" | ||
| }, | ||
| "xdm:body": { | ||
| "type": "string", | ||
| "title": "Body Text", | ||
| "description": "Main body text or description" | ||
| }, | ||
| "xdm:callToAction": { | ||
| "type": "string", | ||
| "title": "Call to Action", | ||
| "description": "Call to action text or type" | ||
| }, | ||
| "xdm:destinationURL": { | ||
| "type": "string", | ||
| "format": "uri", | ||
| "title": "Destination URL", | ||
| "description": "Landing page URL where users are directed" | ||
| }, | ||
| "xdm:displayURL": { | ||
| "type": "string", | ||
| "format": "uri", | ||
| "title": "Display URL", | ||
| "description": "URL displayed in the ad" | ||
| }, | ||
| "xdm:trackingURLs": { | ||
| "type": "array", | ||
| "title": "Tracking URLs", | ||
| "description": "Third-party tracking URLs", | ||
| "items": { | ||
| "type": "object", | ||
| "properties": { | ||
| "xdm:eventType": { | ||
| "type": "string", | ||
| "title": "Event Type", | ||
| "description": "Type of event being tracked (click, impression, conversion)" | ||
| }, | ||
| "xdm:url": { | ||
| "type": "string", | ||
| "format": "uri", | ||
| "title": "Tracking URL", | ||
| "description": "The tracking URL" | ||
| } | ||
| } | ||
| } | ||
| }, | ||
| "xdm:assets": { | ||
| "type": "array", | ||
| "title": "Creative Assets", | ||
| "description": "Media assets used in the creative", | ||
| "items": { | ||
| "$ref": "#/definitions/asset" | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do you reuse the "asset" block defined in the schema in the future? Wanted to find out why it was taken out from the items and defined as a separate block. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't think we might reuse "asset" in the schema, should I move it in items? |
||
| } | ||
| } | ||
| } | ||
| }, | ||
| "asset": { | ||
| "properties": { | ||
| "xdm:assetID": { | ||
| "type": "string", | ||
| "title": "Asset ID", | ||
| "description": "Unique identifier for the asset" | ||
| }, | ||
| "xdm:assetType": { | ||
| "type": "string", | ||
| "title": "Asset Type", | ||
| "description": "Type of media asset", | ||
| "enum": ["image", "video", "audio", "document", "other"], | ||
| "meta:enum": { | ||
| "image": "Image", | ||
| "video": "Video", | ||
| "audio": "Audio", | ||
| "document": "Document", | ||
| "other": "Other Asset Type" | ||
| } | ||
| }, | ||
| "xdm:name": { | ||
| "type": "string", | ||
| "title": "Asset Name", | ||
| "description": "Name or title of the asset" | ||
| }, | ||
| "xdm:url": { | ||
| "type": "string", | ||
| "format": "uri", | ||
| "title": "Asset URL", | ||
| "description": "URL where the asset can be accessed" | ||
| }, | ||
| "xdm:thumbnailURL": { | ||
| "type": "string", | ||
| "format": "uri", | ||
| "title": "Thumbnail URL", | ||
| "description": "URL for asset thumbnail" | ||
| }, | ||
| "xdm:dimensions": { | ||
| "type": "object", | ||
| "title": "Asset Dimensions", | ||
| "description": "Dimensions of the asset", | ||
| "properties": { | ||
| "xdm:width": { | ||
| "type": "integer", | ||
| "title": "Width", | ||
| "description": "Width in pixels", | ||
| "minimum": 0 | ||
| }, | ||
| "xdm:height": { | ||
| "type": "integer", | ||
| "title": "Height", | ||
| "description": "Height in pixels", | ||
| "minimum": 0 | ||
| } | ||
| } | ||
| }, | ||
| "xdm:fileSize": { | ||
| "type": "integer", | ||
| "title": "File Size", | ||
| "description": "File size in bytes", | ||
| "minimum": 0 | ||
| }, | ||
| "xdm:duration": { | ||
| "type": "number", | ||
| "title": "Duration", | ||
| "description": "Duration in seconds (for video/audio assets)" | ||
| }, | ||
| "xdm:hash": { | ||
| "type": "string", | ||
| "title": "Asset Hash", | ||
| "description": "Unique hash identifier for the asset content" | ||
| } | ||
| } | ||
| } | ||
| }, | ||
| "allOf": [ | ||
| { | ||
| "$ref": "#/definitions/paidMediaCreative" | ||
| } | ||
| ], | ||
| "meta:status": "experimental" | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| { | ||
| "xdm:geoTargeting": { | ||
| "xdm:countries": ["US", "CA", "GB"], | ||
| "xdm:regions": ["California", "New York", "Ontario"], | ||
| "xdm:cities": ["San Francisco", "New York", "Toronto"] | ||
| }, | ||
| "xdm:demographicTargeting": { | ||
| "xdm:ageRanges": [ | ||
| { | ||
| "xdm:minAge": 25, | ||
| "xdm:maxAge": 34 | ||
| }, | ||
| { | ||
| "xdm:minAge": 35, | ||
| "xdm:maxAge": 44 | ||
| } | ||
| ], | ||
| "xdm:genders": ["all"], | ||
| "xdm:languages": ["en-US", "en-CA", "en-GB"] | ||
| }, | ||
| "xdm:interestTargeting": { | ||
| "xdm:interests": ["Technology", "E-commerce", "Fashion"], | ||
| "xdm:behaviors": ["Online Shoppers", "Frequent Travelers"], | ||
| "xdm:customAudiences": [ | ||
| { | ||
| "xdm:audienceID": "aud-12345", | ||
| "xdm:audienceName": "Website Visitors - Last 30 Days", | ||
| "xdm:audienceType": "retargeting" | ||
| } | ||
| ] | ||
| }, | ||
| "xdm:deviceTargeting": { | ||
| "xdm:deviceTypes": ["mobile", "desktop"], | ||
| "xdm:operatingSystems": ["iOS", "Android", "Windows", "macOS"], | ||
| "xdm:browsers": ["Chrome", "Safari", "Firefox"] | ||
| }, | ||
| "xdm:placementTargeting": { | ||
| "xdm:placements": ["feed", "stories", "search"], | ||
| "xdm:publisherCategories": ["News", "Entertainment", "Technology"] | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd recommend to keep these fields inside an object that acts like a namespace, for example "xdm:paidMediaCreative". You can choose an appropriate name that does not clash; some of the fields defined in this datatype clash with other datatypes in global XDM (for example "xdm:createiveID", "xdm:body", "xdm:destinationURL".) By nesting inside an object will avoid collisions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
changed creative to paidMediaCreative to avoid collisions.