OpenProposal 3.0 JSON Schema Unofficial

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?

Gap Decision 19 on the supporting page of #121. Cited on main and with the open PRs.

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

  • by-role Chosen

    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.

  • all-closed

    Every list is a closed enum

  • all-open

    Every list is open.

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_method row L268 at 44dfaaf
    pricing[].cost_method | Enum | seller-set | CPM, CPC, flat, etc.
  • § 5.7, the committed_metrics[] row L320 at 44dfaaf
    committed_metrics[] | Array[Object] | requestable | { metric, value, basis } tuples — viewable_rate for display, completion_rate for 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 44dfaaf
    external_references[] | Array[Object] | derived | { system, namespace, id, role }. Replaces platform-specific key names. A buyer-owned reference such as a Prisma io_id is supplied
  • § 4.1, the type row's description: the value list L187 at 44dfaaf
    standard | custom
  • § 4.1, the status row's description: the value list L188 at 44dfaaf
    draft | published | under_review | agreed | withdrawn | expired
  • § 4.1, the negotiation_history[] row's description: the inline object's actor values L192 at 44dfaaf
    buyer | seller
  • § 4.1, the negotiation_history[] row's description: the inline object's action values L192 at 44dfaaf
    proposed | countered | accepted | declined | withdrawn
  • § 5.1, the status row's description: the value list L218 at 44dfaaf
    draft | published | under_review | agreed | withdrawn | sold_out | expired
  • § 5.1, the channel row's description: the value list L219 at 44dfaaf
    display | video | audio | ctv | dooh | native
  • § 5.2, the environments row's description: the value list L227 at 44dfaaf
    web_desktop | web_mobile | app_mobile | ctv | dooh | audio_streaming
  • § 5.3, the activation_route row's description: the value list L235 at 44dfaaf
    publisher_side | clean_room | id_partner
  • § 5.4, the creative_delivery row's description: the inline object's method values L245 at 44dfaaf
    buyer_hosted | seller_hosted | api | platform_managed
  • § 5.5, the frequency_cap row's description: the inline object's basis values L261 at 44dfaaf
    device | household | listener
  • § 5.6, the availability row's description: the inline object's type values L275 at 44dfaaf
    forecast | reservable
  • § 5.6.1, the commitment.basis key row's meaning: the value list L291 at 44dfaaf
    spend | units
  • § 5.6.2, the hold_status.hold_scope key row's meaning: the value list L308 at 44dfaaf
    line_item | proposal
  • § 5.6.2, the hold_status.state key row's meaning: the value list L309 at 44dfaaf
    none | requested | held | expired | released | converted
  • § 5.7, the shortfall_remedy row's description: the value list L322 at 44dfaaf
    makegood | credit | none
  • § 5.7, the reporting row's description: the inline object's feed_type values L323 at 44dfaaf
    log_level | aggregate | none
  • § 5.8, the visibility row's description: the value list L329 at 44dfaaf
    public | registry_gated | named
  • § 5.8, the required_credentials[] row's description: the inline object's type values L330 at 44dfaaf
    iab_registry | dsp_seat | custom
  • § 5.8, the required_credentials[] row's description: the inline object's scheme values L330 at 44dfaaf
    api_key | oauth2_client_credentials | jwt_keypair | oidc_federated | none
  • § 5.9, the buying_route row's description: the value list L338 at 44dfaaf
    DIRECT_PUBLISHER | PUBLISHER_AD_SERVER | SSP_PLATFORM | DSP | SEARCH_SOCIAL
  • § 5.9, the transaction_mechanism row's description: the value list L339 at 44dfaaf
    DIRECT_IO | PROGRAMMATIC_GUARANTEED | PREFERRED_DEAL | PRIVATE_AUCTION | OPEN_AUCTION
  • § 5.9, the serving_mode row's description: the value list L340 at 44dfaaf
    client_side | ssai | dai

With the open PRs

  • § 5.6, the pricing[].cost_method row L261 on main at 981a74e
    pricing[].cost_method | Enum | seller-set | CPM, CPC, flat, etc.
  • § 5.7, the committed_metrics[] row L313 on main at 981a74e
    committed_metrics[] | Array[Object] | requestable | { metric, value, basis } tuples — viewable_rate for display, completion_rate for 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 #75
    external_references[] | Array[Object] | derived | { system, namespace, id, role }. Replaces platform-specific key names. A buyer-owned reference such as a Prisma io_id is supplied. Documented role values: 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.plcmt key row L247 in #120
    plcmt | REQUIRED for video ads (channel video, or video on channel ctv); 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 type row's description: the value list L180 on main at 981a74e
    standard | custom
  • § 4.1, the status row's description: the value list L181 on main at 981a74e
    draft | published | under_review | agreed | withdrawn | expired
  • § 4.1, the negotiation_history[] row's description: the inline object's actor values L185 on main at 981a74e
    buyer | seller
  • § 4.1, the negotiation_history[] row's description: the inline object's action values L185 on main at 981a74e
    proposed | countered | accepted | declined | withdrawn
  • § 4.1, the linked_execution row's description: the value list L197 in #70
    none (default, subsettable) | all (every published line item must be committed together)
  • § 5.1, the status row's description: the value list L211 on main at 981a74e
    draft | published | under_review | agreed | withdrawn | sold_out | expired
  • § 5.1, the channel row's description: the value list L219 in #119
    display | video | audio | ctv | dooh | native
  • § 5.2, the environments row's description: the value list L257 in #119
    web_desktop | web_mobile | app_mobile | ctv | dooh
  • § 5.2, the apps[].platform key row's meaning: the value list L235 in #17
    ios | android | roku | fire_tv | samsung_tv
  • § 5.2.2, the placement.reward key row's meaning: the value list L245 in #120
    0 (no) | 1 (yes)
  • § 5.3, the activation_route row's description: the value list L228 on main at 981a74e
    publisher_side | clean_room | id_partner
  • § 5.4, the creative_delivery row's description: the inline object's method values L238 on main at 981a74e
    buyer_hosted | seller_hosted | api | platform_managed
  • § 5.5, the frequency_cap row's description: the inline object's basis values L254 on main at 981a74e
    device | household | listener
  • § 5.6, the availability row's description: the inline object's type values L268 on main at 981a74e
    forecast | reservable
  • § 5.6.1, the commitment.basis key row's meaning: the value list L284 on main at 981a74e
    spend | units
  • § 5.6.2, the hold_status.hold_scope key row's meaning: the value list L301 on main at 981a74e
    line_item | proposal
  • § 5.6.2, the hold_status.state key row's meaning: the value list L302 on main at 981a74e
    none | requested | held | expired | released | converted
  • § 5.7, the shortfall_remedy row's description: the value list L315 on main at 981a74e
    makegood | credit | none
  • § 5.7, the reporting row's description: the inline object's feed_type values L316 on main at 981a74e
    log_level | aggregate | none
  • § 5.8, the visibility row's description: the value list L322 on main at 981a74e
    public | registry_gated | named
  • § 5.8, the required_credentials[] row's description: the inline object's type values L323 on main at 981a74e
    iab_registry | dsp_seat | custom
  • § 5.8, the required_credentials[] row's description: the inline object's scheme values L323 on main at 981a74e
    api_key | oauth2_client_credentials | jwt_keypair | oidc_federated | none
  • § 5.9, the buying_route row's description: the value list L331 on main at 981a74e
    DIRECT_PUBLISHER | PUBLISHER_AD_SERVER | SSP_PLATFORM | DSP | SEARCH_SOCIAL
  • § 5.9, the transaction_mechanism row's description: the value list L332 on main at 981a74e
    DIRECT_IO | PROGRAMMATIC_GUARANTEED | PREFERRED_DEAL | PRIVATE_AUCTION | OPEN_AUCTION
  • § 5.9, the serving_mode row's description: the value list L333 on main at 981a74e
    client_side | ssai | dai
  • § 5.10, the agreement_ref row's description: the inline object's type values L353 in #75
    upfront | annual | master_services | other
  • § 5.5, the exclusions_accepted row's description: the inline object L264 in #71
    { types[], max_entries, enforcement, verification[] }
  • § 5.5, the exclusions row'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

The record's YAML file