You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
AdCP can transport macro-bearing creative URLs, but cannot currently establish
whether they will work at the destination:
url-asset.json accepts AdCP universal macros in URI templates.
vast-asset.json also accepts VAST [MACRO] and ad-server ${MACRO} tokens.
The 3.2 video contract explicitly treats unresolved macros as opaque and says
macro correctness and substitution verification are out of scope.
Real third-party tags mix vendor dialects from CM360, GAM, DV360, The Trade
Desk, Amazon, Microsoft/Xandr, Adobe, Adform, Yahoo, Innovid/Flashtalking,
verification vendors, and IAB VAST.
The same semantic has different spellings across platforms; the same-looking
token can have different scope; click URLs require different encoding depths;
and some values are owned by the buyer, seller, publisher player, or source ad
server. Preserving tokens is necessary but not sufficient: neither party can
determine preflight compatibility or explain which token remains unresolved.
Related: #6207 defines product tracking capabilities and substituted universal
macros for tracker assets. This issue covers creative delivery assets and
vendor/VAST dialects, not only tracker assets.
Add a macro contract usable by URL-delivered display tags, inline tag markup,
VAST URLs, and tracker assets. It should separate the literal source token from
its canonical meaning and resolver:
token: exact byte-preserved expression from the source.
dialect: IAB/AdCP or vendor namespace; no semantic inference from spelling
alone.
semantic: reference to the universal macro vocabulary when verified, or
unresolved/vendor-defined when not.
resolved_by: buyer, seller, publisher/player, source ad server, or already
resolved.
encoding/value-shape constraints, including nested URL-encoding depth.
required vs. optional and safe behavior when the value is unavailable.
Seller/product format options should advertise which macro dialects and
canonical semantics they can resolve. Creative validation should return a
structured result per token: resolved, preserved for a downstream resolver,
unsupported, or ambiguous.
Safety and interoperability rules
Never replace a token from spelling alone when dialect/context is unknown.
Never invent consent strings, vendor IDs, device IDs, or impression IDs.
Preserve the original creative bytes and token list through pre-binding
storage and variant selection.
Click-macro encoding depth is part of the contract, not a string-replacement
implementation detail.
IAB's live VAST macro registry should be referenced/versioned rather than
copied into an AdCP enum that will drift.
Vendor-specific mappings require a cited vendor source and remain extensions
until promoted into a governed shared semantic.
Acceptance criteria
Creative assets can declare exact source tokens, dialect, semantic,
resolver, and encoding requirements.
Problem
AdCP can transport macro-bearing creative URLs, but cannot currently establish
whether they will work at the destination:
url-asset.jsonaccepts AdCP universal macros in URI templates.vast-asset.jsonalso accepts VAST[MACRO]and ad-server${MACRO}tokens.macro correctness and substitution verification are out of scope.
Desk, Amazon, Microsoft/Xandr, Adobe, Adform, Yahoo, Innovid/Flashtalking,
verification vendors, and IAB VAST.
The same semantic has different spellings across platforms; the same-looking
token can have different scope; click URLs require different encoding depths;
and some values are owned by the buyer, seller, publisher player, or source ad
server. Preserving tokens is necessary but not sufficient: neither party can
determine preflight compatibility or explain which token remains unresolved.
Related: #6207 defines product tracking capabilities and substituted universal
macros for tracker assets. This issue covers creative delivery assets and
vendor/VAST dialects, not only tracker assets.
References:
url-asset.jsonvast-asset.jsonvideo.mdxVAST validationProposed direction
Add a macro contract usable by URL-delivered display tags, inline tag markup,
VAST URLs, and tracker assets. It should separate the literal source token from
its canonical meaning and resolver:
{ "token": "%%TTD_CLK_ESC2%%", "dialect": "the_trade_desk", "semantic": "click_redirect", "resolved_by": "seller", "encoding": { "kind": "url", "depth": 2 }, "required": true }Candidate fields/semantics:
token: exact byte-preserved expression from the source.dialect: IAB/AdCP or vendor namespace; no semantic inference from spellingalone.
semantic: reference to the universal macro vocabulary when verified, orunresolved/vendor-defined when not.
resolved_by: buyer, seller, publisher/player, source ad server, or alreadyresolved.
Seller/product format options should advertise which macro dialects and
canonical semantics they can resolve. Creative validation should return a
structured result per token: resolved, preserved for a downstream resolver,
unsupported, or ambiguous.
Safety and interoperability rules
storage and variant selection.
implementation detail.
copied into an AdCP enum that will drift.
until promoted into a governed shared semantic.
Acceptance criteria
resolver, and encoding requirements.
replacements.
GDPR/TCF, GPP, player/VAST macros, and an unresolved vendor token.
capability model.
depth.
Compatibility
Additive. Existing opaque-token behavior remains the fallback when no macro
contract is supplied; absence means undeclared, not supported.