Skip to content

[Change] § 5.5 — Buyer-supplied block lists (exclusions_accepted, exclusions) #25

Description

@Sirajmx

What kind of change?

Add a new field

Which section?

5.5 — Targeting envelope

Current text

n/a — new field

Proposed text

§ 5.5, two new rows:

| `exclusions_accepted` | Object | seller-set | What the seller can enforce: `{ types[], max_entries, enforcement, verification[] }` |
| `exclusions` | Object | supplied | The buyer's lists: `{ domain[], app_bundle[], iab_content_category[], keyword[], list_ref }` |

Shape:

exclusions_accepted:
  types:          [domain, app_bundle, iab_content_category, keyword]
  max_entries:    { domain: 5000, keyword: 500 }
  enforcement:    { domain: pre_serve, iab_content_category: pre_serve, keyword: best_effort }
  verification:   ["ias", "doubleverify"]   # optional, vendors who can attest

exclusions:
  domain:               ["example-gambling.example"]   # or list_ref
  app_bundle:           []
  iab_content_category: ["IAB-CT3.0:<id>"]              # IAB Content Taxonomy ids
  keyword:              ["crypto"]
  list_ref:             { url: "<url>", sha256: "<hash>" }   # for large lists

Rules:

- A buyer MUST NOT supply an exclusion type absent from
  `exclusions_accepted.types`. A seller agent MUST reject it deterministically
  rather than ignore it.
- `exclusions` are recompute inputs: `addressable_scale` and `availability`
  MUST reflect them (§ 3.3).
- `best_effort` enforcement MUST NOT be presented as a guarantee.
- Exclusions are visible only to the counterparty on the issued proposal, as
  they reveal buyer strategy (§ 5.8).
- `list_ref` MUST be hash-pinned, and resolved into the stored record at
  `agreed`, as for `catalog_ref` (§ 2.2).

Why

A buyer's brief often carries brand-safety constraints, such as no adjacency to gambling, cryptocurrency or competitor products. The draft cannot carry them into the commitment. The only exclusion field is the seller's advisory not_suitable_for[] (§ 4.2, non-normative), and creative_policy (§ 5.6) is the seller restricting the buyer's creative. There is nothing for the reverse: the buyer stating what its advertising must not run against.

The proposal follows the existing buyer_supplied pattern in § 5.3: the seller declares capability and the buyer supplies the data, so the lists resolve without a round trip. It does not let a buyer assume enforcement the seller cannot provide: keyword blocking on CTV or audio may not be enforceable, so the seller declares enforcement per type. It uses IAB taxonomies where they exist instead of free text.

Attendees at the 24 September 2026 Agentic Bootcamp flagged buyer-supplied domain, keyword and topic block lists as important and not yet in the specification.

Knock-on effects

  • § 3.3: exclusions added to the recompute inputs.
  • § 5.8: a note on the visibility of exclusions.
  • Appendix A / B: two new rows and the marker counts.
  • § 6: the display and CTV examples updated, with CTV showing keyword as unsupported or best_effort.
  • If a buyer needs enforcement guaranteed, that is a committed_metrics and measurement question, deferred to 4.0.

Would this break an implementation already built to this draft?

No — additive or editorial

Alternatives you considered and rejected

  • Extending not_suitable_for[]: it is the seller's advisory guidance and non-normative.
  • Free-text exclusions: not machine-evaluable.

You are commenting as

Standards body / working group participant

Activity

  1. fgranata commented on Oct 8, 2026

    @fgranata

    Agree with the cross-reference from #15: if app identity lands on properties, exclusions.app_bundle[] should carry the same identifier — the OpenRTB 2.6 app.bundle value, exactly as draft PR #17 defines apps[].bundle (iOS numeric store id, Android package name, platform-native id elsewhere). That is what buyers' block lists already hold and what a seller agent can enforce at bid time without a mapping step.

    Two small notes from the seller side:

    • No platform qualifier is needed on the exclusion entry: the iOS numeric store id and the Android package name are disjoint namespaces, so a flat list is unambiguous. If the group prefers symmetry with apps[].platform, make it optional rather than required.
    • exclusions_accepted.enforcement per type is the right shape for in-app and CTV: app_bundle and domain are pre_serve for us, keyword is at best best_effort on in-app and CTV inventory, so the per-type declaration lets a seller be honest about that instead of silently accepting the list.

    Commenting as an in-app / CTV supply-side exchange.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions