Skip to content

Commit 9216ea7

Browse files
bokelleyclaude
andauthored
feat: export PromotedOfferingsRequirement and PromotedOfferingsAssetRequirements, sync latest schemas (#133)
- Export PromotedOfferingsRequirement enum (7 values: si_agent_url, offerings, brand.logos, brand.colors, brand.tone, brand.assets, brand.product_catalog) from adcp and adcp.types public APIs - Export PromotedOfferingsAssetRequirements model (requires: list[...]) from adcp and adcp.types public APIs - Sync 29 upstream schema updates and regenerate types (new: audience-member, sync-audiences request/response; updated: format, targeting, capabilities, task-type, and various response schemas) - Add 14 tests covering enum values, string coercion, JSON round-trip, minItems constraint, SI agent use cases, and extra fields preservation Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 0dca021 commit 9216ea7

61 files changed

Lines changed: 1324 additions & 74 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

schemas/cache/.hashes.json

Lines changed: 30 additions & 27 deletions
Large diffs are not rendered by default.

schemas/cache/account/list-accounts-request.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
"pagination": {
1313
"$ref": "../core/pagination-request.json"
1414
},
15+
"sandbox": {
16+
"description": "Filter by sandbox status. true returns only sandbox accounts, false returns only production accounts. Omit to return all accounts.",
17+
"type": "boolean"
18+
},
1519
"status": {
1620
"description": "Filter accounts by status. Omit to return accounts in all statuses.",
1721
"enum": [

schemas/cache/account/sync-accounts-request.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@
8181
"description": "Domain of the entity operating the seat (e.g., 'groupm.com', 'mindshare.com'). Verified against the brand's authorized_operators in brand.json. Omit if the brand operates its own seat.",
8282
"pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$",
8383
"type": "string"
84+
},
85+
"sandbox": {
86+
"description": "When true, provision this as a sandbox account. No real platform calls or billing. Sandbox accounts are identified by account_id in subsequent requests.",
87+
"type": "boolean"
8488
}
8589
},
8690
"required": [

schemas/cache/account/sync-accounts-response.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,10 @@
146146
"description": "Rate card applied to this account",
147147
"type": "string"
148148
},
149+
"sandbox": {
150+
"description": "Whether this is a sandbox account, echoed from the request.",
151+
"type": "boolean"
152+
},
149153
"setup": {
150154
"additionalProperties": true,
151155
"description": "Setup information for pending accounts. Provides the agent (or human) with next steps to complete account activation.",

schemas/cache/core/account.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@
135135
"description": "Identifier for the rate card applied to this account",
136136
"type": "string"
137137
},
138+
"sandbox": {
139+
"description": "When true, this is a sandbox account. All requests using this account_id are treated as sandbox \u2014 no real platform calls, no real spend.",
140+
"type": "boolean"
141+
},
138142
"status": {
139143
"description": "Account status. pending_approval: seller reviewing (credit, contracts). payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: terminated.",
140144
"enum": [
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-07/schema#",
3+
"additionalProperties": true,
4+
"anyOf": [
5+
{
6+
"required": [
7+
"hashed_email"
8+
]
9+
},
10+
{
11+
"required": [
12+
"hashed_phone"
13+
]
14+
},
15+
{
16+
"required": [
17+
"uids"
18+
]
19+
}
20+
],
21+
"description": "Hashed identifiers for a CRM audience member. All identifiers must be normalized before hashing: emails to lowercase+trim, phone numbers to E.164 format (e.g. +12065551234). At least one identifier is required. Providing multiple identifiers for the same person improves match rates. Composite identifiers (e.g. hashed first name + last name + zip for Google Customer Match) are not yet standardized \u2014 use the ext field for platform-specific extensions.",
22+
"properties": {
23+
"ext": {
24+
"$ref": "ext.json"
25+
},
26+
"hashed_email": {
27+
"description": "SHA-256 hash of lowercase, trimmed email address.",
28+
"pattern": "^[a-f0-9]{64}$",
29+
"type": "string"
30+
},
31+
"hashed_phone": {
32+
"description": "SHA-256 hash of E.164-formatted phone number (e.g. +12065551234).",
33+
"pattern": "^[a-f0-9]{64}$",
34+
"type": "string"
35+
},
36+
"uids": {
37+
"description": "Universal ID values (MAIDs, RampID, UID2, etc.) for user matching.",
38+
"items": {
39+
"additionalProperties": true,
40+
"properties": {
41+
"type": {
42+
"$ref": "../enums/uid-type.json",
43+
"description": "Universal ID type"
44+
},
45+
"value": {
46+
"description": "Universal ID value",
47+
"type": "string"
48+
}
49+
},
50+
"required": [
51+
"type",
52+
"value"
53+
],
54+
"type": "object"
55+
},
56+
"minItems": 1,
57+
"type": "array"
58+
}
59+
},
60+
"title": "Audience Member",
61+
"type": "object"
62+
}

schemas/cache/core/format.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -656,12 +656,19 @@
656656
"$ref": "format-id.json",
657657
"description": "Structured format identifier with agent URL and format name"
658658
},
659+
"input_format_ids": {
660+
"description": "Array of format IDs this format accepts as input creative manifests. When present, indicates this format can take existing creatives in these formats as input. Omit for formats that work from raw assets (images, text, etc.) rather than existing creatives.",
661+
"items": {
662+
"$ref": "format-id.json"
663+
},
664+
"type": "array"
665+
},
659666
"name": {
660667
"description": "Human-readable format name",
661668
"type": "string"
662669
},
663670
"output_format_ids": {
664-
"description": "For generative formats: array of format IDs that this format can generate. When a format accepts inputs like brand context and message, this specifies what concrete output formats can be produced (e.g., a generative banner format might output standard image banner formats).",
671+
"description": "Array of format IDs that this format can produce as output. When present, indicates this format can build creatives in these output formats (e.g., a multi-publisher template format might produce standard display formats across many publishers). Omit for formats that produce a single fixed output (the format itself).",
665672
"items": {
666673
"$ref": "format-id.json"
667674
},

schemas/cache/core/media-buy-features.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
},
66
"description": "Optional media-buy protocol features. Used in capability declarations (seller declares support) and product filters (buyer requires support). If a seller declares a feature as true, they MUST honor requests using that feature.",
77
"properties": {
8+
"audience_targeting": {
9+
"description": "Supports sync_audiences task and audience_include/audience_exclude in targeting overlays for first-party CRM audience management",
10+
"type": "boolean"
11+
},
812
"content_standards": {
913
"description": "Full support for content_standards configuration including sampling rates and category filtering",
1014
"type": "boolean"
@@ -20,6 +24,10 @@
2024
"property_list_filtering": {
2125
"description": "Honors property_list parameter in get_products to filter results to buyer-approved properties",
2226
"type": "boolean"
27+
},
28+
"sandbox": {
29+
"description": "Supports sandbox mode for operations without real platform calls or spend",
30+
"type": "boolean"
2331
}
2432
},
2533
"title": "Media Buy Features",

schemas/cache/core/targeting.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,22 @@
3232
],
3333
"type": "object"
3434
},
35+
"audience_exclude": {
36+
"description": "Suppress delivery to members of these first-party CRM audiences. Matched users are excluded regardless of other targeting. References audience_id values from sync_audiences on the same seller account \u2014 audience IDs are not portable across sellers. Seller must declare support in get_adcp_capabilities.",
37+
"items": {
38+
"type": "string"
39+
},
40+
"minItems": 1,
41+
"type": "array"
42+
},
43+
"audience_include": {
44+
"description": "Restrict delivery to members of these first-party CRM audiences. Only users present in the uploaded lists are eligible. References audience_id values from sync_audiences on the same seller account \u2014 audience IDs are not portable across sellers. Not for lookalike expansion \u2014 express that intent in the campaign brief. Seller must declare support in get_adcp_capabilities.",
45+
"items": {
46+
"type": "string"
47+
},
48+
"minItems": 1,
49+
"type": "array"
50+
},
3551
"axe_exclude_segment": {
3652
"description": "AXE segment ID to exclude from targeting",
3753
"type": "string"

schemas/cache/creative/asset-types/index.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
},
9292
"baseUrl": "/schemas/latest",
9393
"description": "Registry of asset types used in AdCP creative manifests. Each asset type defines the structure of actual content payloads (what you send), not requirements or constraints (which belong in format specifications).",
94-
"lastUpdated": "2026-02-18",
94+
"lastUpdated": "2026-02-20",
9595
"title": "AdCP Asset Type Registry",
9696
"usage_notes": {
9797
"creative_manifests": "Creative manifests provide actual asset content, keyed by asset_id from the format. Asset type is determined by the format specification, not declared in the payload.",

0 commit comments

Comments
 (0)