Decision records · Types the tables leave open
D-014 Which vocabularies are open, a core list that implementations extend with namespaced terms, and which are closed?
What the schemas do
Closed: the states, actions, parties, and switches that the protocol itself acts on. Open: lists of market options that sellers and vendors extend, such as channels, environments, routes, and cost methods.
Options
Why
A closed list is right where a receiver must act on every value: the lifecycle states (ProposalStatus, LineItemStatus, HoldState), the negotiation actions and parties (NegotiationAction, Party), and the switches that change how a document is read (ProposalType, LinkedExecution, Visibility, HoldScope, CommitmentBasis, AvailabilityType, PlcmtSubtype, ExclusionType, Enforcement, CredentialType, AgreementType, and the kernel's Marker). CredentialType and AgreementType already end in custom and other. Every other list names options in a market that moves: the specification says so for channel (§ 5.1.1 tells a consumer to skip an unknown one), the store platforms ("and other store platforms"), cost_method ("etc."), and environments (open question 7), and the same holds for activation routes, delivery methods, frequency-cap bases, remedies, feed types, credential schemes, buying routes, transaction mechanisms, serving modes, metrics, and reference roles. An open vocabulary is the core enum or a NamespacedTerm (type rules § 6), so an extension never collides with a future core term.
What we ask the specification to state
Say for each value list whether it is closed or extensible, and how an extension term is spelled. The skip rule for an unknown channel, "and other store platforms", and "etc." in cost_method imply extensible lists. None says how to extend them.
The specification lines it rests on
Each line is quoted as the record pins it. Expand an item to read the quote.
main
§ 5.6, the
pricing[].cost_methodrow L268 at 44dfaafpricing[].cost_method| Enum | seller-set | CPM, CPC, flat, etc.§ 5.7, the
committed_metrics[]row L320 at 44dfaafcommitted_metrics[]| Array[Object] | requestable |{ metric, value, basis }tuples —viewable_ratefor display,completion_ratefor video/audio/CTV, an audience-modelled metric for DOOH. Seller declares a ceiling; a buyer MAY request above it§ 5.10, the
external_references[]row L349 at 44dfaafexternal_references[]| Array[Object] | derived |{ system, namespace, id, role }. Replaces platform-specific key names. A buyer-owned reference such as a Prismaio_idis supplied§ 4.1, the
typerow's description: the value list L187 at 44dfaafstandard|custom§ 4.1, the
statusrow's description: the value list L188 at 44dfaafdraft|published|under_review|agreed|withdrawn|expired§ 4.1, the
negotiation_history[]row's description: the inline object'sactorvalues L192 at 44dfaafbuyer|seller§ 4.1, the
negotiation_history[]row's description: the inline object'sactionvalues L192 at 44dfaafproposed|countered|accepted|declined|withdrawn§ 5.1, the
statusrow's description: the value list L218 at 44dfaafdraft|published|under_review|agreed|withdrawn|sold_out|expired§ 5.1, the
channelrow's description: the value list L219 at 44dfaafdisplay|video|audio|ctv|dooh|native§ 5.2, the
environmentsrow's description: the value list L227 at 44dfaafweb_desktop|web_mobile|app_mobile|ctv|dooh|audio_streaming§ 5.3, the
activation_routerow's description: the value list L235 at 44dfaafpublisher_side|clean_room|id_partner§ 5.4, the
creative_deliveryrow's description: the inline object'smethodvalues L245 at 44dfaafbuyer_hosted|seller_hosted|api|platform_managed§ 5.5, the
frequency_caprow's description: the inline object'sbasisvalues L261 at 44dfaafdevice|household|listener§ 5.6, the
availabilityrow's description: the inline object'stypevalues L275 at 44dfaafforecast|reservable§ 5.6.1, the
commitment.basiskey row's meaning: the value list L291 at 44dfaafspend|units§ 5.6.2, the
hold_status.hold_scopekey row's meaning: the value list L308 at 44dfaafline_item|proposal§ 5.6.2, the
hold_status.statekey row's meaning: the value list L309 at 44dfaafnone|requested|held|expired|released|converted§ 5.7, the
shortfall_remedyrow's description: the value list L322 at 44dfaafmakegood|credit|none§ 5.7, the
reportingrow's description: the inline object'sfeed_typevalues L323 at 44dfaaflog_level|aggregate|none§ 5.8, the
visibilityrow's description: the value list L329 at 44dfaafpublic|registry_gated|named§ 5.8, the
required_credentials[]row's description: the inline object'stypevalues L330 at 44dfaafiab_registry|dsp_seat|custom§ 5.8, the
required_credentials[]row's description: the inline object'sschemevalues L330 at 44dfaafapi_key|oauth2_client_credentials|jwt_keypair|oidc_federated|none§ 5.9, the
buying_routerow's description: the value list L338 at 44dfaafDIRECT_PUBLISHER|PUBLISHER_AD_SERVER|SSP_PLATFORM|DSP|SEARCH_SOCIAL§ 5.9, the
transaction_mechanismrow's description: the value list L339 at 44dfaafDIRECT_IO|PROGRAMMATIC_GUARANTEED|PREFERRED_DEAL|PRIVATE_AUCTION|OPEN_AUCTION§ 5.9, the
serving_moderow's description: the value list L340 at 44dfaafclient_side|ssai|dai
With the open PRs
§ 5.6, the
pricing[].cost_methodrow L261 on main at 981a74epricing[].cost_method| Enum | seller-set | CPM, CPC, flat, etc.§ 5.7, the
committed_metrics[]row L313 on main at 981a74ecommitted_metrics[]| Array[Object] | requestable |{ metric, value, basis }tuples —viewable_ratefor display,completion_ratefor video/audio/CTV, an audience-modelled metric for DOOH. Seller declares a ceiling; a buyer MAY request above it§ 5.10, the
external_references[]row L352 in #75external_references[]| Array[Object] | derived |{ system, namespace, id, role }. Replaces platform-specific key names. A buyer-owned reference such as a Prismaio_idis supplied. Documentedrolevalues:io, an IO id generated by an order management system and carried back on the line item;agreement, a buyer-held agreement id§ 5.2.2, the
placement.plcmtkey row L247 in #120plcmt| REQUIRED for video ads (channelvideo, or video onchannelctv); otherwise OPTIONAL | One value from List: Plcmt Subtypes - Video: Instream (1), Accompanying Content (2), Interstitial (3), No Content/Standalone (4), Pause (5), Screensaver (6), Overlay (7), Squeezeback (8), In-scene (9) |VideoPlacement.ptype,video.plcmt§ 4.1, the
typerow's description: the value list L180 on main at 981a74estandard|custom§ 4.1, the
statusrow's description: the value list L181 on main at 981a74edraft|published|under_review|agreed|withdrawn|expired§ 4.1, the
negotiation_history[]row's description: the inline object'sactorvalues L185 on main at 981a74ebuyer|seller§ 4.1, the
negotiation_history[]row's description: the inline object'sactionvalues L185 on main at 981a74eproposed|countered|accepted|declined|withdrawn§ 4.1, the
linked_executionrow's description: the value list L197 in #70none(default, subsettable) |all(every published line item must be committed together)§ 5.1, the
statusrow's description: the value list L211 on main at 981a74edraft|published|under_review|agreed|withdrawn|sold_out|expired§ 5.1, the
channelrow's description: the value list L219 in #119display|video|audio|ctv|dooh|native§ 5.2, the
environmentsrow's description: the value list L257 in #119web_desktop|web_mobile|app_mobile|ctv|dooh§ 5.2, the
apps[].platformkey row's meaning: the value list L235 in #17ios|android|roku|fire_tv|samsung_tv§ 5.2.2, the
placement.rewardkey row's meaning: the value list L245 in #1200(no) |1(yes)§ 5.3, the
activation_routerow's description: the value list L228 on main at 981a74epublisher_side|clean_room|id_partner§ 5.4, the
creative_deliveryrow's description: the inline object'smethodvalues L238 on main at 981a74ebuyer_hosted|seller_hosted|api|platform_managed§ 5.5, the
frequency_caprow's description: the inline object'sbasisvalues L254 on main at 981a74edevice|household|listener§ 5.6, the
availabilityrow's description: the inline object'stypevalues L268 on main at 981a74eforecast|reservable§ 5.6.1, the
commitment.basiskey row's meaning: the value list L284 on main at 981a74espend|units§ 5.6.2, the
hold_status.hold_scopekey row's meaning: the value list L301 on main at 981a74eline_item|proposal§ 5.6.2, the
hold_status.statekey row's meaning: the value list L302 on main at 981a74enone|requested|held|expired|released|converted§ 5.7, the
shortfall_remedyrow's description: the value list L315 on main at 981a74emakegood|credit|none§ 5.7, the
reportingrow's description: the inline object'sfeed_typevalues L316 on main at 981a74elog_level|aggregate|none§ 5.8, the
visibilityrow's description: the value list L322 on main at 981a74epublic|registry_gated|named§ 5.8, the
required_credentials[]row's description: the inline object'stypevalues L323 on main at 981a74eiab_registry|dsp_seat|custom§ 5.8, the
required_credentials[]row's description: the inline object'sschemevalues L323 on main at 981a74eapi_key|oauth2_client_credentials|jwt_keypair|oidc_federated|none§ 5.9, the
buying_routerow's description: the value list L331 on main at 981a74eDIRECT_PUBLISHER|PUBLISHER_AD_SERVER|SSP_PLATFORM|DSP|SEARCH_SOCIAL§ 5.9, the
transaction_mechanismrow's description: the value list L332 on main at 981a74eDIRECT_IO|PROGRAMMATIC_GUARANTEED|PREFERRED_DEAL|PRIVATE_AUCTION|OPEN_AUCTION§ 5.9, the
serving_moderow's description: the value list L333 on main at 981a74eclient_side|ssai|dai§ 5.10, the
agreement_refrow's description: the inline object'stypevalues L353 in #75upfront|annual|master_services|other§ 5.5, the
exclusions_acceptedrow's description: the inline object L264 in #71{ types[], max_entries, enforcement, verification[] }
§ 5.5, the
exclusionsrow's description: the inline object L265 in #71{ domain[], app_bundle[], iab_content_category[], keyword[], list_ref }
What it shapes
main: ActivationRoute, AvailabilityType, BuyingRoute, Channel, CommitmentBasis, CostMethod, CreativeDeliveryMethod, CredentialScheme, CredentialType, Environment, FrequencyCapBasis, HoldScope, HoldState, LineItemStatus, Metric, NegotiationAction, Party, ProposalStatus, ProposalType, ReportingFeedType, ServingMode, ShortfallRemedy, TransactionMechanism, Visibility, LineItem.committed_metrics, LineItem.external_references, LineItemSummaryPricingEntry.cost_method, PricingEntry.cost_method
With the open PRs: ActivationRoute, AgreementType, AvailabilityType, BuyingRoute, Channel, CommitmentBasis, CostMethod, CreativeDeliveryMethod, CredentialScheme, CredentialType, Enforcement, Environment, ExclusionType, ExternalReferenceRole, FrequencyCapBasis, HoldScope, HoldState, LineItemStatus, LinkedExecution, Metric, NegotiationAction, Party, PlcmtSubtype, ProposalStatus, ProposalType, ReportingFeedType, ServingMode, ShortfallRemedy, StorePlatform, TransactionMechanism, Visibility, Exclusions.app_bundle, Exclusions.domain, Exclusions.iab_content_category, Exclusions.keyword, Exclusions.list_ref, ExclusionsAccepted.enforcement, ExclusionsAccepted.max_entries, ExclusionsAccepted.types, ExclusionsAccepted.verification, LineItem.committed_metrics, LineItem.external_references, LineItemSummaryPlacement.plcmt, LineItemSummaryPricingEntry.cost_method, ListRef.sha256, ListRef.url, Placement.plcmt, PricingEntry.cost_method