Blog · Spec release

OpenRTB 2.6-202606, field by field: live content and discount macros

OpenRTB 2.6-202606 shipped on June 11, 2026, the first dated snapshot in just over a year. Our agentic roundup flagged it in passing; this is the field-by-field version we promised. Two things shipped, both aimed at live and linear content, and one of them is a semantic change to an existing field rather than a new attribute. If you sell CTV inventory, the migration matters more than the additions.

What shipped

The snapshot was proposed for public comment on April 28, 2026 and released on June 11. It touches two areas of the spec, plus mirrored additions in AdCOM:

  • Three fields on the Content object (Section 3.2.16): two new attributes, realtime and firstbroadcast, and a redefinition of the existing livestream field.
  • Two substitution macros (Section 4.4): ${AUCTION_DISCOUNT_PCT} and ${AUCTION_DISCOUNT_CPM}, with the description of ${AUCTION_PRICE} updated to match.

Nothing here is a breaking change. The version number stays 2.6 because, since 2.6-202211, the number only moves on breaking changes; everything else lands as a dated snapshot. But a redefinition is not an addition, and that is where the work is.

The three live-content fields

The motivation is the same live-sports CTV surge behind the pod bidding toolkit. Live inventory prices differently from a replay, and a replay prices differently from a premiere, so sellers needed three independent axes to describe what a viewer is actually watching. Here is exactly what each field now says.

content.livestream (integer) kept its name and type but changed what it means, and that is the change to watch. Before 202606 the field flagged whether content was live at all: 0 was "not live" and 1 was "content is live." From 202606 it flags whether the broadcast is scheduled: 0 is on-demand or user-initiated (VOD), and 1 is scheduled, linear viewing. Same field, different question. The "is it live right now" idea left this field entirely and became its own attribute.

content.realtime (integer), new, is where "live right now" landed. It is set to 1 when the event is happening in real time as it is watched, a live sports game being the canonical case, and 0 when it is not, such as a replay.

content.firstbroadcast (integer), new, is a premiere flag independent of the other two: 1 the first time the content reaches an audience, and 0 for every showing after that.

Because the three axes are independent, a single piece of content can sit at any corner of the cube. That is the point: a live final and its rerun are the same content with different value, and buyers can now tell them apart.

Content                              livestream  realtime  firstbroadcast
-------------------------------------------------------------------------
Live cup final, airing now              1          1           1
Rerun of that final on a linear feed    1          0           0
Same final, on demand after the fact    0          0           0
On-demand premiere of a new series      0          0           1

Why the redefinition is the risky part

Additions are safe. A parser that has never heard of realtime ignores it and loses nothing it had before. The redefinition is different, because the field name did not change and the type did not change. Only the meaning did.

If your exchange or SSP populates livestream=1 today to mean "a live event is in progress," that request is now making a different claim under the new snapshot: it says the content is scheduled or linear, which may be true for a live game but is false for a live blog or a user-initiated stream that used to qualify. A buyer reading the field under 202606 semantics, and pricing on it, will read your old data wrong. Nothing errors. The bid math just drifts.

The two failure directions worth checking:

  • Over-claiming linear. Content you marked livestream=1 for "live blog" or an unscheduled stream is not scheduled linear viewing. Under the new definition it should be livestream=0 with realtime=1.
  • Losing the "live now" signal. Anything genuinely live needs realtime=1 going forward. If you only ever set livestream, buyers lose the real-time signal the moment they adopt the new reading.

The two discount macros

The second half of 202606 is about money. Two new substitution macros let a seller communicate a net price to a DSP through win and billing notices instead of a side channel:

  • ${AUCTION_DISCOUNT_PCT}: the discount percentage applied by the seller, expressed as a percentage of the bid price.
  • ${AUCTION_DISCOUNT_CPM}: the same discount, expressed as a CPM.

To keep the accounting coherent, the definition of ${AUCTION_PRICE} was updated so the clearing price a seller reports is understood as the post-discount figure, with the two new macros exposing how that figure was derived. Like every macro, these expand in the win, billing, and loss notice URLs and in markup; they are optional, and a seller populates them only if it has a discount to communicate.

What to do this week

  • Audit livestream before your fixtures drift. Find every path that sets content.livestream and confirm it means "scheduled or linear," not "live in progress." Move the live-now cases to realtime.
  • Plan realtime and firstbroadcast for CTV. Any seller of live or premiere inventory now has a standard way to say so. The CTV reference covers where these sit alongside the pod bidding fields.
  • Decide on the discount macros if you emit win notices. Choose whether to populate ${AUCTION_DISCOUNT_PCT} or ${AUCTION_DISCOUNT_CPM} before a buyer asks for net pricing.
  • Pin your validation. rtblint's rule catalog currently runs through the 2.6-202505 snapshot; catalog support for the 202606 attributes is in progress. If you gate builds on validity, stay pinned to 202505 until your livestream semantics are migrated, then re-pin, as described in the CLI docs.

To sanity-check a content-heavy request against the current snapshot, paste it into the bid request tester, and to gate it automatically, see OpenRTB validation in CI.

Sources

The OpenRTB specification is published by IAB Technology Laboratory under a Creative Commons Attribution 3.0 License. Field names and definitions referenced here are drawn from it; the analysis is our own. rtblint is independent and not affiliated with IAB Tech Lab.