Conversation
4833861 to
345364c
Compare
345364c to
eabaf28
Compare
eabaf28 to
8faa2c2
Compare
8faa2c2 to
130904c
Compare
130904c to
b378838
Compare
b378838 to
f268199
Compare
f268199 to
6efc293
Compare
6efc293 to
11817ab
Compare
11817ab to
74eb920
Compare
74eb920 to
c1e880d
Compare
c1e880d to
c51d1cf
Compare
c51d1cf to
40d7b06
Compare
40d7b06 to
ed4a67e
Compare
ed4a67e to
e2ab0ea
Compare
e2ab0ea to
c43d60e
Compare
902f1ff to
e9d8e0c
Compare
e9d8e0c to
a0f0b6d
Compare
a0f0b6d to
78196a8
Compare
78196a8 to
06e3bbb
Compare
06e3bbb to
456c29f
Compare
456c29f to
88e39ea
Compare
88e39ea to
7f04a9b
Compare
7f04a9b to
1568800
Compare
1568800 to
e036fa7
Compare
e036fa7 to
c869482
Compare
c869482 to
39e0685
Compare
39e0685 to
e6c24fb
Compare
e6c24fb to
db766c2
Compare
db766c2 to
0e86837
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
mainis currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, runchangeset pre exitonmain.Releases
[email protected]
Major Changes
e81235c: Add structured tone guidelines and structured logo fields to Brand Manifest schema.
BREAKING: Tone field changes:
voice,attributes,dos, anddontsfields{ "voice": "<previous-string>" }Logo object changes:
orientationenum field:square,horizontal,vertical,stackedbackgroundenum field:dark-bg,light-bg,transparent-bgvariantenum field:primary,secondary,icon,wordmark,full-lockupusagefield for human-readable descriptionstagsarray for additional custom categorizationThese structured fields enable creative agents to reliably filter and select appropriate logo variants.
Closes Refine Brand Manifest schema: structured tone guidelines and standardized logo tags #945
96a90ec: Standardize cursor-based pagination across all list operations.
Breaking Changes
list_creatives: Replace offset-basedlimit/offsetwith cursor-basedpaginationobjecttasks_list: Replace offset-basedlimit/offsetwith cursor-basedpaginationobjectlist_property_lists: Move top-levelmax_results/cursorinto nestedpaginationobjectget_property_list: Move top-levelmax_results/cursorinto nestedpaginationobjectget_media_buy_artifacts: Move top-levellimit/cursorinto nestedpaginationobjectNon-Breaking Changes
pagination-request.jsonandpagination-response.jsonschemas tocore/paginationsupport tolist_accounts,get_products,list_creative_formats,list_content_standards, andget_signalsAll list operations now use a consistent pattern:
pagination.max_results+pagination.cursorin requests,pagination.has_more+pagination.cursor+ optionalpagination.total_countin responses.Minor Changes
d7e7550: Add optional account_id parameter to get_media_buy_delivery and get_media_buy_artifacts requests, allowing buyers to scope queries to a specific account.
b708168: Add sync_accounts task, authorized_operators, and account capabilities to AdCP.
account_idis optional oncreate_media_buy. Single-account agents can omit it; multi-account agents must provide it.sync_accountstask: Agent declares brand portfolio to seller with upsert semanticsauthorized_operatorsin brand.json: Brand declares which operators can represent themget_adcp_capabilities: require_operator_auth, supported_billing, required_for_products0da0b36: Add channel fields to property and product schemas. Properties can now declare
supported_channelsand products can declarechannelsto indicate which advertising channels they align with. Both fields reference the Media Channel Taxonomy enum and are optional.ac4a81f: Add CPA (Cost Per Acquisition) pricing model for outcome-based campaigns.
CPA enables advertisers to pay per conversion event (purchase, lead, signup, etc.) rather than per impression or click. The pricing option declares which
event_typetriggers billing, independent of any optimization goal.This single model covers use cases previously described as CPO (Cost Per Order), CPL (Cost Per Lead), and CPI (Cost Per Install) — differentiated by event type rather than separate pricing models.
New schema:
cpa-option.json: CPA pricing option (fixed price per conversion event)Updated schemas:
pricing-model.json: Addedcpaenum valuepricing-option.json: Added cpa-option to discriminated unionindex.json: Added cpa-option to registry34ece9f: Add conversion tracking with log_event and sync_event_sources tasks
098fce2: Add TIME pricing model for sponsorship-based advertising where price scales with campaign duration. Supports hour, day, week, and month time units with optional min/max duration constraints.
a854090: Add attribution window metadata to delivery response. The response root now includes an optional
attribution_windowobject describingclick_window_days,view_window_days, and attributionmodel(last_touch, first_touch, linear, time_decay, data_driven). Placed at response level since all media buys from a single seller share the same attribution methodology. Enables cross-platform comparison of conversion metrics.8a8e4e7: Add Brand Protocol for brand discovery and identity resolution
Schema:
Builder Tools:
Manifest Reference Registry:
Infrastructure:
Admin UI:
Documentation:
8079271: Add commerce attribution metrics to delivery response schema. Adds
new_to_brand_rateas a first-class field in DeliveryMetrics. Addsroasandnew_to_brand_ratetoaggregated_totalsanddaily_breakdownin the delivery response. Updates documentation to reflect commerce metric availability.37dbd0d: Add creative delivery reporting to the AdCP specification.
by_creativemetrics breakdown withinby_packagein delivery responsesget_creative_deliverytask on creative agents for variant-level delivery data with manifestscreative-variantcore object supporting three tiers: standard (1:1), asset group optimization, and generative creative. Variants include full creative manifests showing what was rendered.preview_creativewithrequest_type: "variant"for post-flight variant previewsselection_modeto repeatable asset groups to distinguish sequential (carousel) from optimize (asset pool) behaviorsupports_creative_breakdownto reporting capabilitiesdeliverycreative agent capability37f46ec: Add delivery forecasting to the Media Buy protocol
DeliveryForecastcore type with budget curve, forecast method, currency, and measurement contextForecastRangecore type (low/mid/high) for metric forecastsForecastPointcore type — pairs a budget level with metric ranges; single point is a standard forecast, multiple points form a budget curveforecast-methodenum (estimate, modeled, guaranteed)forecastable-metricenum defining standard metric vocabulary (audience_size, reach, impressions, clicks, spend, etc.)demographic-systemenum (nielsen, barb, agf, oztam, mediametrie, custom) for GRP demographic notationreach-unitenum (individuals, households, devices, accounts, cookies, custom) for cross-channel reach comparisondemographic_systemto CPP pricing option parametersforecastfield toProductAllocationforecastfield toProposaldaypart-targetcore type for explicit day+hour targeting windows (follows Google Ads / DV360 pattern)day-of-weekenum (monday through sunday)forecast-range-unitenum (spend, reach_freq, weekly, daily, clicks, conversions) for interpreting forecast curvesdaypart_targetstoTargetingfor hard daypart constraintsdaypart_targetstoProductAllocationfor publisher-recommended time windows in spot plansforecast_range_unittoDeliveryForecastfor curve type identificationf37a00c: Deprecate FormatCategory enum and make
typefield optional in Format objectsThe
typefield (FormatCategory) is now optional on Format objects. Theassetsarray is the authoritative source for understanding creative requirements.Rationale:
assetsarray already provides precise information about what asset types are neededMigration:
typefield continue to worktypeentirelyassetsarray to understand creative requirements37dbd0d: Add reported_metrics to creative formats and expand available-metric enum
a859fd1: Add geographic exclusion targeting fields to targeting overlay schema.
New fields:
geo_countries_exclude,geo_regions_exclude,geo_metros_exclude,geo_postal_areas_exclude. These enable RCT holdout groups and regulatory compliance exclusions without requiring exhaustive inclusion lists.8836151: Make top-level format_id optional in preview_creative request. The field was redundant with creative_manifest.format_id (which is always required). Callers who omit it fall back to creative_manifest.format_id. Existing callers who send both still work.
96d6fa0: Add product_selectors to get_products for commerce product discovery. Add manifest_gtins to promoted-products schema for cross-retailer GTIN matching.
c8cdbca: Add Signal Catalog feature for data providers
Data providers (Polk, Experian, Acxiom, etc.) can now publish signal catalogs via
adagents.json, enabling AI agents to discover, verify authorization, and activate their signals—without custom integrations.Why this matters:
New schemas:
signal-id.json- Universal signal identifier withsourcediscriminator:catalog(data_provider_domain + id, verifiable) oragent(agent_url + id, trust-based)signal-definition.json- Signal spec in data provider's catalogsignal-targeting.json- Discriminated union for targeting by value_typesignal-category.json/signal-value-type.json/signal-source.json- EnumsModified schemas:
adagents.json- Addedsignalsarray,signal_tags, and signal authorization typesget-signals-request.json/get-signals-response.json- Addedsignal_idslookup and structured responsesproduct.json- Addedsignal_targeting_allowedflagServer updates:
AdAgentsManager- Full signals validation, creation, and authorization verificationSee Data Provider Guide for implementation details.
e84aafd: Add functional restriction overlays: age_restriction (with verification methods for compliance), device_platform (technical compatibility using Sec-CH-UA-Platform values), and language (localization). These are compliance/technical restrictions, not audience targeting - demographic preferences should be expressed in briefs.
f543f44: Add typed asset requirements schemas for creative formats
Introduces explicit requirement schemas for every asset type with proper discriminated unions. In
format.json, assets useoneOfwithasset_typeas the discriminator - each variant pairs a specificasset_typeconst with its typed requirements schema. This produces clean discriminated union types for code generation.min_width,max_width,min_height,max_height,formats,max_file_size_kb,animation_allowed, etc.containers,codecs,max_bitrate_kbps, etc.min_duration_ms,max_duration_ms,formats,sample_rates,channels, bitrate constraintsmin_length,max_length,min_lines,max_lines,character_pattern,prohibited_termsmax_lengthsandbox(none/iframe/safeframe/fencedframe),external_resources_allowed,allowed_external_domains,max_file_size_kbmax_file_size_kbmodule_type,external_resources_allowed,max_file_size_kbvast_versiondaast_versionprotocols,allowed_domains,macro_support,rolemethodsThis allows sales agents to declare execution environment constraints for HTML creatives (e.g., "must work in SafeFrame with no external JS") as part of the format definition.
efa8e6a: Add universal macro enum schema and improve macro documentation
Schema:
New Macros:
Documentation:
Patch Changes