OpenProposal 3.0 JSON Schema Unofficial

Decision records · Types the tables leave open

D-027 What type does each member of the § 4.1 and § 5.7 to § 5.10 objects take?

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

What the schemas do

Each member takes the schema type or value list its meaning names.

Options

  • as-listed Chosen

    Each member takes the schema type or value list its meaning names.

  • open-objects

    Each object accepts any members.

Why

In negotiation_history[], version is the proposal's revision number, a Count, fields_changed[] lists the fields the step changed, each named by its path as the tables write it, such as pricing[].gross_rate; the text states no grammar for those paths, so they validate like any other ID a list defines, here the specification's own field tables, and each is an ExternalId whose description says what it names. at is a Timestamp. A committed metric is a Metric, whose core terms are the two the prose names, viewable_rate and completion_rate, with a Fraction value (D-005) and a basis of the open vocabulary MeasurementBasis (D-041), such as mrc. A measurement source names its vendor as the vendor writes its name, an ExternalId, its attribution_window as a Duration (D-040), and its qualifier as Text. A reporting option's cadence is the length of time between reports, a Duration (D-040), its delivery_mechanism a term of the open vocabulary ReportingDeliveryMechanism (D-041), metrics_provided[] lists Metrics, the concept a committed metric names, and latency is a Duration. A credential's issuer is an ExternalId and id_required a boolean. With the open PRs, terms_ref is { url, sha256, version }, whose version is the terms document's version as its publisher writes it, an ExternalId, and no member is required: no statement requires one, and "terms_ref MUST be hash-pinned" is a rule of its own (D-030). buyer_requirements is one object whose members are those of its two inline objects (D-012): the seat requirement is a boolean, the DSPs and seat IDs are ExternalId, and the seat owner is Text. An external reference's system, namespace, and id are ExternalId; its role is the open vocabulary ExternalReferenceRole, with no core terms on main (D-041) and, with the open PRs, the two documented roles, io and agreement. Billing IDs are ExternalId, and payment_terms and invoicing_party are Text. An agreement reference has an ExternalId, a list of party IDs, its type, and a validity window of Timestamps, like the proposal's.

What we ask the specification to state

Type the members of each inline object and say which are required.

The specification lines it rests on

Each line is quoted as the record pins it. Expand an item to read the quote.

main

  • § 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.9, the buyer_requirements row L342 at 44dfaaf
    buyer_requirements | Object | mixed | { seat_required, dsp_allowed[] } are seller-set; { dsp_seat_id, dsp_id, seat_owner_entity } are supplied
  • § 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 negotiation_history[] row's description: the inline object L192 at 44dfaaf
    { version, actor: buyer | seller, action: proposed | countered | accepted | declined | withdrawn, fields_changed[], at }
  • § 5.7, the committed_metrics[] row's description: the inline object L320 at 44dfaaf
    { metric, value, basis }
  • § 5.7, the measurement_source row's description: the inline object L321 at 44dfaaf
    { vendor, attribution_window, qualifier }
  • § 5.7, the reporting row's description: the inline object L323 at 44dfaaf
    { feed_type: log_level | aggregate | none, cadence, delivery_mechanism, metrics_provided[], latency }
  • § 5.8, the required_credentials[] row's description: the inline object L330 at 44dfaaf
    { type: iab_registry | dsp_seat | custom, scheme: api_key | oauth2_client_credentials | jwt_keypair | oidc_federated | none, issuer, id_required }
  • § 5.9, the buyer_requirements row's description: the inline object L342 at 44dfaaf
    { seat_required, dsp_allowed[] }
  • § 5.9, the buyer_requirements row's description: the inline object 2 L342 at 44dfaaf
    { dsp_seat_id, dsp_id, seat_owner_entity }
  • § 5.10, the external_references[] row's description: the inline object L349 at 44dfaaf
    { system, namespace, id, role }
  • § 5.10, the billing row's description: the inline object L351 at 44dfaaf
    { supplier_id, billing_supplier_id, payment_terms, invoicing_party }

With the open PRs

  • § 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.9, the buyer_requirements row L335 on main at 981a74e
    buyer_requirements | Object | mixed | { seat_required, dsp_allowed[] } are seller-set; { dsp_seat_id, dsp_id, seat_owner_entity } are supplied
  • § 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
  • § 4.1, the negotiation_history[] row's description: the inline object L185 on main at 981a74e
    { version, actor: buyer | seller, action: proposed | countered | accepted | declined | withdrawn, fields_changed[], at }
  • § 5.7, the committed_metrics[] row's description: the inline object L313 on main at 981a74e
    { metric, value, basis }
  • § 5.7, the measurement_source row's description: the inline object L314 on main at 981a74e
    { vendor, attribution_window, qualifier }
  • § 5.7, the reporting row's description: the inline object L316 on main at 981a74e
    { feed_type: log_level | aggregate | none, cadence, delivery_mechanism, metrics_provided[], latency }
  • § 5.8, the required_credentials[] row's description: the inline object L323 on main at 981a74e
    { type: iab_registry | dsp_seat | custom, scheme: api_key | oauth2_client_credentials | jwt_keypair | oidc_federated | none, issuer, id_required }
  • § 5.8, the terms_ref row's description: the inline object L333 in #75
    { url, sha256, version }
  • § 5.9, the buyer_requirements row's description: the inline object L335 on main at 981a74e
    { seat_required, dsp_allowed[] }
  • § 5.9, the buyer_requirements row's description: the inline object 2 L335 on main at 981a74e
    { dsp_seat_id, dsp_id, seat_owner_entity }
  • § 5.10, the external_references[] row's description: the inline object L352 in #75
    { system, namespace, id, role }
  • § 5.10, the agreement_ref row's description: the inline object L353 in #75
    { agreement_id, parties[], type: upfront | annual | master_services | other, valid_from, valid_until }
  • § 5.10, the billing row's description: the inline object L344 on main at 981a74e
    { supplier_id, billing_supplier_id, payment_terms, invoicing_party }

What it shapes

main: Billing, BuyerRequirements, CommittedMetricsEntry, ExternalReferencesEntry, MeasurementSourceOption, Metric, NegotiationHistoryEntry, ReportingOption, RequiredCredentialsEntry, Billing.billing_supplier_id, Billing.invoicing_party, Billing.payment_terms, Billing.supplier_id, BuyerRequirements.dsp_allowed, BuyerRequirements.dsp_id, BuyerRequirements.dsp_seat_id, BuyerRequirements.seat_owner_entity, BuyerRequirements.seat_required, CommittedMetricsEntry.basis, CommittedMetricsEntry.metric, CommittedMetricsEntry.value, ExternalReferencesEntry.id, ExternalReferencesEntry.namespace, ExternalReferencesEntry.role, ExternalReferencesEntry.system, LineItem.buyer_requirements, LineItem.committed_metrics, LineItem.external_references, MeasurementSourceOption.attribution_window, MeasurementSourceOption.qualifier, MeasurementSourceOption.vendor, NegotiationHistoryEntry.action, NegotiationHistoryEntry.actor, NegotiationHistoryEntry.at, NegotiationHistoryEntry.fields_changed, NegotiationHistoryEntry.version, ReportingOption.cadence, ReportingOption.delivery_mechanism, ReportingOption.feed_type, ReportingOption.latency, ReportingOption.metrics_provided, RequiredCredentialsEntry.id_required, RequiredCredentialsEntry.issuer, RequiredCredentialsEntry.scheme, RequiredCredentialsEntry.type

With the open PRs: AgreementRef, Billing, BuyerRequirements, CommittedMetricsEntry, ExternalReferenceRole, ExternalReferencesEntry, MeasurementSourceOption, Metric, NegotiationHistoryEntry, ReportingOption, RequiredCredentialsEntry, TermsRef, AgreementRef.agreement_id, AgreementRef.parties, AgreementRef.type, AgreementRef.valid_from, AgreementRef.valid_until, Billing.billing_supplier_id, Billing.invoicing_party, Billing.payment_terms, Billing.supplier_id, BuyerRequirements.dsp_allowed, BuyerRequirements.dsp_id, BuyerRequirements.dsp_seat_id, BuyerRequirements.seat_owner_entity, BuyerRequirements.seat_required, CommittedMetricsEntry.basis, CommittedMetricsEntry.metric, CommittedMetricsEntry.value, ExternalReferencesEntry.id, ExternalReferencesEntry.namespace, ExternalReferencesEntry.role, ExternalReferencesEntry.system, LineItem.buyer_requirements, LineItem.committed_metrics, LineItem.external_references, MeasurementSourceOption.attribution_window, MeasurementSourceOption.qualifier, MeasurementSourceOption.vendor, NegotiationHistoryEntry.action, NegotiationHistoryEntry.actor, NegotiationHistoryEntry.at, NegotiationHistoryEntry.fields_changed, NegotiationHistoryEntry.version, ReportingOption.cadence, ReportingOption.delivery_mechanism, ReportingOption.feed_type, ReportingOption.latency, ReportingOption.metrics_provided, RequiredCredentialsEntry.id_required, RequiredCredentialsEntry.issuer, RequiredCredentialsEntry.scheme, RequiredCredentialsEntry.type, TermsRef.sha256, TermsRef.url, TermsRef.version

The record's YAML file