Decision records · Types the tables leave open
D-025 What type does each member of the § 5.4 and § 5.5 objects take?
What the schemas do
Each member takes the schema type or value list its meaning names. Each exclusion type is a key of exclusions.
Options
Why
In creative_delivery, protocol is a term of the open vocabulary CreativeDeliveryProtocol (D-041), such as vast_4_2, secure_required a boolean, and endpoint a Url. In assets[], asset_id names an asset the buyer mints, a Uuid (D-037), format_ref is a format ID, a FormatId (D-019), url_or_tag is Text because it may hold tag markup, submitted_at is a Timestamp, and approval_status a term of the open vocabulary AssetApprovalStatus (D-041). A production option's build_owner is a Party, lead_time a Duration (D-040), and cost an Amount (D-036). In frequency_cap, max is the range { min, max } of Count (D-011), period a calendar period of FrequencyCapPeriod (D-044), and basis its vocabulary. With the open PRs, an exclusion type is a key of exclusions: § 5.5 says a buyer must not supply a type absent from exclusions_accepted.types, and the example lists domain, app_bundle, iab_content_category, and keyword, the keys of exclusions other than list_ref. So ExclusionType is that closed list, and max_entries and enforcement are maps from it. Enforcement is "pre_serve or best_effort", the closed list Enforcement. The verification vendors are ExternalId, the content categories ExternalId, as § 5.5 says they are IAB Content Taxonomy ids, the blocked domains Domain, and the keywords Text. An app_bundle[] entry has the two keys of an app, both required, as the App identity table makes platform and bundle; a bundle is the app store's ID, an ExternalId. A list_ref is { url, sha256 }, as the example writes it. Neither member is required: no statement requires either one, and "list_ref MUST be hash-pinned" is a rule of its own (D-030).
What we ask the specification to state
Type the members of each inline object. Define list_ref and the exclusion types as lists the schema can check, and say which members of frequency_cap, creative_delivery, and list_ref 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.4, the
creative_deliveryrow's description: the inline object L245 at 44dfaaf{ method: buyer_hosted | seller_hosted | api | platform_managed, protocol, secure_required, endpoint }
§ 5.4, the
assets[]row's description: the inline object L246 at 44dfaaf{ asset_id, format_ref, url_or_tag, submitted_at, approval_status }
§ 5.4, the
productionrow's description: the inline object L249 at 44dfaaf{ custom_unit, build_owner, lead_time, cost }
§ 5.5, the
frequency_caprow's description: the inline object L261 at 44dfaaf{ max: { min, max }, period, basis: device | household | listener }
With the open PRs
§ 5.4, the
creative_deliveryrow's description: the inline object L238 on main at 981a74e{ method: buyer_hosted | seller_hosted | api | platform_managed, protocol, secure_required, endpoint }
§ 5.4, the
assets[]row's description: the inline object L239 on main at 981a74e{ asset_id, format_ref, url_or_tag, submitted_at, approval_status }
§ 5.4, the
productionrow's description: the inline object L242 on main at 981a74e{ custom_unit, build_owner, lead_time, cost }
§ 5.5, the
frequency_caprow's description: the inline object L254 on main at 981a74e{ max: { min, max }, period, basis: device | household | listener }
§ 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 }
§ 5.5, paragraph 3: the inline object L286 in #71
{ platform, bundle }
§ 5.5, a sentence L293 in #71
enforcementispre_serveorbest_effortper type.§ 5.5, code block 1 L270-L271 in #71, L272 in #71, L273-L274 in #71, L275 in #71, L276-L280 in #71, L281 in #71, L282-L284 in #71
exclusions_accepted: types: [domain, app_bundle, iab_content_category, keyword] max_entries: { domain: 5000, keyword: 500 } enforcement: { domain: pre_serve, app_bundle: pre_serve, iab_content_category: pre_serve, keyword: best_effort } verification: ["IAS", "DoubleVerify"] exclusions: domain: ["example-gambling.example"] app_bundle: [{ platform: roku, bundle: "123456" }] iab_content_category: ["IAB-CT3.0:<id>"] # IAB Content Taxonomy ids keyword: ["crypto"] list_ref: { url: "<url>", sha256: "<hash>" }
§ 5.2, the
apps[].platformkey row L235 in #17platform| REQUIRED |ios|android|roku|fire_tv|samsung_tvand other store platforms. No OpenRTB equivalent§ 5.2, the
apps[].bundlekey row L236 in #17bundle| REQUIRED | Store ID. As OpenRTB 2.6app.bundle
What it shapes
main: AssetsEntry, CreativeDelivery, FrequencyCap, ProductionOption, AssetsEntry.approval_status, AssetsEntry.asset_id, AssetsEntry.format_ref, AssetsEntry.submitted_at, AssetsEntry.url_or_tag, CreativeDelivery.endpoint, CreativeDelivery.method, CreativeDelivery.protocol, CreativeDelivery.secure_required, FrequencyCap.basis, FrequencyCap.max, FrequencyCap.period, ProductionOption.build_owner, ProductionOption.cost, ProductionOption.custom_unit, ProductionOption.lead_time
With the open PRs: AppBundleEntry, AssetsEntry, CreativeDelivery, Enforcement, ExclusionType, Exclusions, ExclusionsAccepted, FrequencyCap, ListRef, ProductionOption, AppBundleEntry.bundle, AppBundleEntry.platform, AppsEntry.bundle, AppsEntry.platform, AssetsEntry.approval_status, AssetsEntry.asset_id, AssetsEntry.format_ref, AssetsEntry.submitted_at, AssetsEntry.url_or_tag, CreativeDelivery.endpoint, CreativeDelivery.method, CreativeDelivery.protocol, CreativeDelivery.secure_required, Exclusions.app_bundle, Exclusions.domain, Exclusions.iab_content_category, Exclusions.keyword, Exclusions.list_ref, ExclusionsAccepted.enforcement, ExclusionsAccepted.max_entries, ExclusionsAccepted.types, ExclusionsAccepted.verification, FrequencyCap.basis, FrequencyCap.max, FrequencyCap.period, ListRef.sha256, ListRef.url, ProductionOption.build_owner, ProductionOption.cost, ProductionOption.custom_unit, ProductionOption.lead_time