Skip to content

Linear TV: book and report position in break (first/last in break) #8009

Open

Description

@bokelley

Problem

Linear TV buyers pay extra for where a spot sits inside a commercial break: first in break, second, second-to-last, last. In the Netherlands these "preferred positions" (A1, A2, E1, E2 in the industry tool) are a standard surcharged option at every sales house. The same idea exists in most TV markets and in radio.

AdCP can't express any of this:

  • Booking. A buyer cannot ask for a position, and a product cannot offer one or price it.
  • Reporting. by_spot[] (3.2) reports spot_id, aired_at, network, station, daypart and creative_id, but not where in the break the spot aired. A buyer cannot check that a surcharged position was delivered.

The only related things in the schema are the POD_POSITION creative macro and DOOH loop_position. Neither is a booking or reporting field. I found no open issue for this. #5686 covers a placement taxonomy for print, which is the closest analogue.

Proposed shape

  1. Reporting. Add optional break_position to by_spot[] items:

    • position_in_break (integer, 1-based)
    • spots_in_break (integer)
    • break_id (optional string)

    That lets a buyer derive first or last without a market-specific enum.

  2. Booking. Let a product declare position options a buyer can select (first, second, second_last, last, plus any), and price them through the price-adjustment mechanism in RFC: declare price adjustments for buyer-selectable product dimensions #7659 rather than a new pricing model.

  3. Capability. spot_reporting.available_fields (or similar) declares whether the seller reports break position, so buyers don't treat a missing field as "not delivered".

Relationship to other work

Milestone: 3.3.0. The reporting half is small and doesn't depend on the booking half.

Activity

  1. added this to the 3.3.0 milestone on Oct 8, 2026
  2. added
    rfcProtocol change — auto-adds to roadmap board
    media-buyIssue concerns the media-buy protocol domain
    on Oct 8, 2026
  3. added
    claude-triagingTriage routine is actively working on this issue (1-3 min)
    on Oct 8, 2026
  4. bokelley commented on Oct 8, 2026

    @bokelley
    ContributorAuthor

    Blocked-on: #7659 — the booking half (position pricing) depends on the price-adjustment mechanism; resurfaces on merge. The reporting half (break_position in by_spot[]) is independent but shares the by_spot[] item shape with #5683; recommend coordinating when either opens a PR.


    Generated by Claude Code

  5. added
    claude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.
    and removed
    claude-triagingTriage routine is actively working on this issue (1-3 min)
    on Oct 8, 2026
  6. bokelley commented on Oct 31, 2026

    @bokelley
    ContributorAuthor

    Part of this shipped: the reporting half, break_position on by_spot[] and supports_break_position, in #8017 (3.3.0-beta.0, experimental media_buy.spot_lifecycle).

    The booking half (position options priced through price adjustments) was kept on 3.4 in #8017 and was blocked on #7659, whose price_adjustments (#7955, 3.3.0-beta.1) has no break-position dimension. Per the WG rule ('anything not decided moves to 3.4') only the booking half moves to 3.4. Objections by Fri 2026-11-06. The milestone stays 3.3.0 for now; it will be moved after Nov 6.

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

    claude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.media-buyIssue concerns the media-buy protocol domainrfcProtocol change — auto-adds to roadmap boardspec / protocol

    Type

    No type

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions