OpenProposal 3.0 JSON Schema Unofficial

Decision records · Types the tables leave open

D-013 What is each vocabulary called, where the specification names a value list only by the field that holds it?

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

What the schemas do

Each list is named for what its values are. Where the field names one concept, the list takes the field's name, capitalized and singular, as for channel and visibility. Where the field's name is generic or shared, the name adds the object's, as for a proposal's status and a hold's state. The fields that name a party, buyer or seller, share one list of the two parties.

Options

  • concept-names Chosen

    Each list is named for what its values are. Where the field names one concept, the list takes the field's name, capitalized and singular, as for channel and visibility. Where the field's name is generic or shared, the name adds the object's, as for a proposal's status and a hold's state. The fields that name a party, buyer or seller, share one list of the two parties.

  • field-names

    The field's name in PascalCase, as type rules § 7 names a copy, with a number on a collision, such as Status and Status2.

  • object-and-field

    Always the object's name and the field's name, such as ProposalStatus and LineItemChannel.

Why

The same field name carries different lists: status lists six values on the proposal and seven on the line item, and type and basis each name several lists. Names derived from the field alone collide. A vocabulary is a type every SDK exposes, so it is named for what its values are, as type rules § 3 does with Channel, CostMethod, and HoldState. A list of the two parties, buyer and seller, is Party, so actor and build_owner share it; no module owns the two parties, whom every § 3 marker names, so Party is the kernel's, beside Marker. Where the specification doesn't list the values as a value list, the vocabulary is declared with its terms, each from the decision that states them: CostMethod, PlcmtSubtype, ExclusionType, Enforcement, Metric, and ExternalReferenceRole. A list that restates another, such as the store platforms twice, is the same vocabulary, StorePlatform. The three 0 | 1 lists of § 5.2.2 are flags, not a vocabulary (D-039).

What we ask the specification to state

Name each value list once, as a type, so that schemas and SDKs share one name for it. The status, type, and basis fields each carry two or more different lists under one name.

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