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?
What the schemas do
Each member takes the schema type or value list its meaning names.
Options
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 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.9, the
buyer_requirementsrow L342 at 44dfaafbuyer_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 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
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_sourcerow's description: the inline object L321 at 44dfaaf{ vendor, attribution_window, qualifier }
§ 5.7, the
reportingrow'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_requirementsrow's description: the inline object L342 at 44dfaaf{ seat_required, dsp_allowed[] }
§ 5.9, the
buyer_requirementsrow'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
billingrow'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 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.9, the
buyer_requirementsrow L335 on main at 981a74ebuyer_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 #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§ 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_sourcerow's description: the inline object L314 on main at 981a74e{ vendor, attribution_window, qualifier }
§ 5.7, the
reportingrow'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_refrow's description: the inline object L333 in #75{ url, sha256, version }
§ 5.9, the
buyer_requirementsrow's description: the inline object L335 on main at 981a74e{ seat_required, dsp_allowed[] }
§ 5.9, the
buyer_requirementsrow'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_refrow's description: the inline object L353 in #75{ agreement_id, parties[], type: upfront | annual | master_services | other, valid_from, valid_until }
§ 5.10, the
billingrow'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