Open question
targeting.frequency_cap (core/targeting.json#L174) lets a buyer request a frequency cap on a package. There's no corresponding capability declaration on the seller side — buyers can't discover whether a seller will actually honor the cap, what dimensions it caps on, or what time windows it supports.
Compare to collection_list on the same schema, which explicitly notes "Seller must declare support in get_adcp_capabilities." Frequency capping doesn't have that hook.
Two questions for the WG:
1. What does "I support frequency capping" mean?
Possible shapes:
(A) Presence-only object — same pattern as conversion_tracking. Mere presence of frequency_capping: {} means the seller honors targeting.frequency_cap. Minimal, but doesn't communicate dimensions/granularity.
(B) Capability object with declared dimensions:
(C) Boolean — just frequency_capping: true. Cheapest, least informative.
Shape (B) is honest about what's variable in the field. Many sellers cap per-impression-per-day but not per-reach-per-week; some only enforce at the package level; some can only enforce within a single ad server's view.
2. How does this compose with target_frequency on reach goals?
optimization-goal.json declares target_frequency for reach optimization — a soft "prefer fresh reach" signal that's distinct from a hard cap. Does a seller advertising frequency_capping automatically support target_frequency, or are these independent capabilities?
My read: independent. frequency_cap is a hard targeting constraint; target_frequency is an optimization signal. A seller can support one without the other.
3. Does this need product-level or seller-level declaration?
metric_optimization is declared per-product; conversion_tracking is declared per-seller. Frequency capping could be either — different products on the same agent may have different caps. Most likely per-seller for the dimension declaration, per-product for limits (min/max).
Why now
media_buy_seller/frequency_cap_enforcement is on the storyboard backlog under #4637 — it would assert that a buy with targeting.frequency_cap set produces delivery whose observed frequency stays at-or-below the cap. The scenario needs a capability gate; without a declaration shape, the gate has nowhere to point.
Asks of the WG
- Which shape — (A), (B), or (C)?
- Should
target_frequency support inherit from the same capability or stay independent?
- Seller-level vs product-level (or both)?
Out of scope
- The storyboard scenario itself. That lands once the capability shape is settled.
- Reach measurement methodology. Frequency capping is a control, not a measurement.
Refs
Open question
targeting.frequency_cap(core/targeting.json#L174) lets a buyer request a frequency cap on a package. There's no corresponding capability declaration on the seller side — buyers can't discover whether a seller will actually honor the cap, what dimensions it caps on, or what time windows it supports.Compare to
collection_liston the same schema, which explicitly notes "Seller must declare support in get_adcp_capabilities." Frequency capping doesn't have that hook.Two questions for the WG:
1. What does "I support frequency capping" mean?
Possible shapes:
(A) Presence-only object — same pattern as
conversion_tracking. Mere presence offrequency_capping: {}means the seller honorstargeting.frequency_cap. Minimal, but doesn't communicate dimensions/granularity.(B) Capability object with declared dimensions:
(C) Boolean — just
frequency_capping: true. Cheapest, least informative.Shape (B) is honest about what's variable in the field. Many sellers cap per-impression-per-day but not per-reach-per-week; some only enforce at the package level; some can only enforce within a single ad server's view.
2. How does this compose with
target_frequencyon reach goals?optimization-goal.jsondeclarestarget_frequencyfor reach optimization — a soft "prefer fresh reach" signal that's distinct from a hard cap. Does a seller advertisingfrequency_cappingautomatically supporttarget_frequency, or are these independent capabilities?My read: independent.
frequency_capis a hard targeting constraint;target_frequencyis an optimization signal. A seller can support one without the other.3. Does this need product-level or seller-level declaration?
metric_optimizationis declared per-product;conversion_trackingis declared per-seller. Frequency capping could be either — different products on the same agent may have different caps. Most likely per-seller for the dimension declaration, per-product for limits (min/max).Why now
media_buy_seller/frequency_cap_enforcementis on the storyboard backlog under #4637 — it would assert that a buy withtargeting.frequency_capset produces delivery whose observed frequency stays at-or-below the cap. The scenario needs a capability gate; without a declaration shape, the gate has nowhere to point.Asks of the WG
target_frequencysupport inherit from the same capability or stay independent?Out of scope
Refs
frequency_capfieldtarget_frequencyon reach goals (related but distinct)