RTB Architecture

    OpenRTB 2.5 vs 2.6 vs 3.0: what changed, and which version the market actually uses

    Published · Last updated
    Next scheduled review:

    OpenRTB 3.0 is a separate, layered specification that IAB Tech Lab released in November 2018, yet the market still trades on OpenRTB 2.x. OpenRTB 2.6 added CTV ad pods, core fields for supply chain, consent and GPP, and shared AdCOM lists. Its latest release is 2.6-202606.

    Contents

    Key facts

    • 2.6 is the maintained line. IAB Tech Lab publishes OpenRTB 2.6 as dated releases on GitHub. The newest, 2.6-202606, came out on 11 June 2026, and no later release was listed on 9 November 2026 (openrtb2.x releases, checked 9 November 2026).
    • 3.0 has been quiet since 2022. The 3.0 change log records the initial release in November 2018 and the last substantive change in March 2022, when schain was added to the Source object "to sync with 2.6" (OpenRTB 3.0, Appendix B).
    • Google moved to OpenRTB 2.x, not 3.0. Google's release notes record that its own RTB protocol "has been sunset" on 1 May 2025 (Google Authorized Buyers release notes). Its OpenRTB guide points buyers to the 2.6 specification (OpenRTB guide, updated 15 October 2026).
    • Most Prebid Server adapters still read 2.5 locations. In Prebid Server Go on 30 October 2026, 58 of 281 bidder adapters declared OpenRTB 2.6. For the rest, the server moves the relocated fields back to 2.5 ext paths (our count of bidder-info files; Prebid docs).
    • IAB Tech Lab asks for the widely deployed version. Its Programmatic Best Practices draft of 16 September 2026 tells companies to support "the most recent, widely deployed, production version of the OpenRTB specification" (IAB Tech Lab, public comment draft).
    Jump to the table

    Definition

    OpenRTB version: the release of IAB Tech Lab's real-time bidding protocol that a bid request follows, announced in the x-openrtb-version HTTP header. Since 2.6-202211 the number changes only for breaking changes, and additive changes ship as dated releases such as 2.6-202606 (OpenRTB 2.6, section 2.6). See the glossary entry for OpenRTB.

    If you need the auction itself first, read how real-time bidding works. This page compares versions and assumes you know what a request and a response are.

    OpenRTB 2.5 vs 2.6 vs 3.0 at a glance

    The table compares the three versions on the points that change code. Each row cites the specification text.

    15 of 15 rows

    Columns (4)

    Released

    December 2016 (2.5 PDF)

    April 2022; latest release 2.6-202606, 11 June 2026 (IAB Tech Lab; releases)

    November 2018; last change March 2022 (3.0 change log)

    Payload root

    BidRequest

    BidRequest

    openrtb wrapper with ver, domainspec, domainver, then request

    What is for sale

    imp[] with banner, video, audio, native

    Same, plus dooh and qty (2.6-202211)

    item[], each with spec.placement from AdCOM

    Context

    site or app, device, user, regs

    Same objects

    context holds AdCOM site, app or dooh, user, device, regs, restrictions

    Enumerated lists

    Section 5 of the spec

    Moved to AdCOM 1.0

    AdCOM 1.0

    Transport security

    HTTP allowed

    HTTPS "strongly recommended" (2.6)

    HTTPS with TLS 1.2+ required (3.0, Layer-1)

    CTV ad pods

    None (sequence only)

    podid, podseq, slotinpod, poddur, maxseq, mincpmpersec, rqddurs

    Same fields in AdCOM VideoPlacement since March 2022 (AdCOM change log)

    Supply chain

    source.ext.schain

    source.schain

    source.schain (March 2022), plus ds, dsmap, cert, digest for ads.cert 1.0 signing (beta)

    GDPR flag and TC String

    regs.ext.gdpr, user.ext.consent

    regs.gdpr, user.consent

    AdCOM regs.gdpr, user.consent

    GPP

    None

    regs.gpp, regs.gpp_sid (2.6-202211)

    AdCOM regs.gpp, regs.gpp_sid

    US Privacy String

    regs.ext.us_privacy

    regs.us_privacy

    Not in AdCOM Regs; use GPP

    Extended IDs

    user.ext.eids

    user.eids; inserter, matcher, mm since 2.6-202409

    AdCOM user.eids

    Deprecations

    None of note

    yob, gender, hashed device IDs, Video.sequence, Bid.api; placement replaced by plcmt in 2.6-202303

    yob and gender deprecated in AdCOM (March 2022)

    Versioning

    Minor number for non-breaking changes

    Number moves only on breaking changes, dated releases

    Same policy (3.0, Appendix D)

    Canonical text

    PDF

    Released

    OpenRTB 2.5

    December 2016 (2.5 PDF)

    OpenRTB 2.6

    April 2022; latest release 2.6-202606, 11 June 2026 (IAB Tech Lab; releases)

    OpenRTB 3.0

    November 2018; last change March 2022 (3.0 change log)

    Payload root

    OpenRTB 2.5

    BidRequest

    OpenRTB 2.6

    BidRequest

    OpenRTB 3.0

    openrtb wrapper with ver, domainspec, domainver, then request

    What is for sale

    OpenRTB 2.5

    imp[] with banner, video, audio, native

    OpenRTB 2.6

    Same, plus dooh and qty (2.6-202211)

    OpenRTB 3.0

    item[], each with spec.placement from AdCOM

    Context

    OpenRTB 2.5

    site or app, device, user, regs

    OpenRTB 2.6

    Same objects

    OpenRTB 3.0

    context holds AdCOM site, app or dooh, user, device, regs, restrictions

    Enumerated lists

    OpenRTB 2.5

    Section 5 of the spec

    OpenRTB 2.6

    Moved to AdCOM 1.0

    OpenRTB 3.0

    AdCOM 1.0

    Transport security

    OpenRTB 2.5

    HTTP allowed

    OpenRTB 2.6

    HTTPS "strongly recommended" (2.6)

    OpenRTB 3.0

    HTTPS with TLS 1.2+ required (3.0, Layer-1)

    CTV ad pods

    OpenRTB 2.5

    None (sequence only)

    OpenRTB 2.6

    podid, podseq, slotinpod, poddur, maxseq, mincpmpersec, rqddurs

    OpenRTB 3.0

    Same fields in AdCOM VideoPlacement since March 2022 (AdCOM change log)

    Supply chain

    OpenRTB 2.5

    source.ext.schain

    OpenRTB 2.6

    source.schain

    OpenRTB 3.0

    source.schain (March 2022), plus ds, dsmap, cert, digest for ads.cert 1.0 signing (beta)

    GDPR flag and TC String

    OpenRTB 2.5

    regs.ext.gdpr, user.ext.consent

    OpenRTB 2.6

    regs.gdpr, user.consent

    OpenRTB 3.0

    AdCOM regs.gdpr, user.consent

    GPP

    OpenRTB 2.5

    None

    OpenRTB 2.6

    regs.gpp, regs.gpp_sid (2.6-202211)

    OpenRTB 3.0

    AdCOM regs.gpp, regs.gpp_sid

    US Privacy String

    OpenRTB 2.5

    regs.ext.us_privacy

    OpenRTB 2.6

    regs.us_privacy

    OpenRTB 3.0

    Not in AdCOM Regs; use GPP

    Extended IDs

    OpenRTB 2.5

    user.ext.eids

    OpenRTB 2.6

    user.eids; inserter, matcher, mm since 2.6-202409

    OpenRTB 3.0

    AdCOM user.eids

    Deprecations

    OpenRTB 2.5

    None of note

    OpenRTB 2.6

    yob, gender, hashed device IDs, Video.sequence, Bid.api; placement replaced by plcmt in 2.6-202303

    OpenRTB 3.0

    yob and gender deprecated in AdCOM (March 2022)

    Versioning

    OpenRTB 2.5

    Minor number for non-breaking changes

    OpenRTB 2.6

    Number moves only on breaking changes, dated releases

    OpenRTB 3.0

    Same policy (3.0, Appendix D)

    Download JSON

    Table by AdSovereign, CC BY 4.0.

    Sources for unlinked cells: the 2.5 to 2.6 change log in OpenRTB 2.6, Appendix B, the 2.5 locations as Prebid Server's conversion code names them (convert_down.go), and the AdCOM 1.0 object tables.

    One impression, three versions: how the payload structure differs

    The fastest way to see the gap is to write the same impression three times. Each example below is a desktop visit to a business news page with one 300x250 slot. The publisher sells through two exchanges, GDPR applies and the user consented. Domains use the reserved .example name, the IP comes from a documentation range, and the consent string was generated for this page (see the appendix).

    OpenRTB 2.5. Consent, supply chain and extended IDs all sit in ext objects, because 2.5 had no core fields for them.

    {
      "id": "4c8e2f1a-9b3d-4a6e-8f20-1d5c7b9e3a64",
      "imp": [
        {
          "id": "1",
          "tagid": "markets-mpu",
          "banner": { "format": [{ "w": 300, "h": 250 }] },
          "bidfloor": 0.5,
          "bidfloorcur": "EUR",
          "secure": 1
        }
      ],
      "site": {
        "domain": "news.example",
        "page": "https://news.example/markets/rates",
        "cat": ["IAB3"],
        "publisher": { "id": "88123" }
      },
      "device": {
        "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
        "ip": "192.0.2.0",
        "devicetype": 2
      },
      "user": {
        "buyeruid": "dsp-55ab31c9",
        "ext": {
          "consent": "CQtaoIAQtaoIAAAABBENC4FgAPIAAELAAAYgF5wAgAaALzAvOACAvMAA.IF5wAwAFAA0AXm",
          "eids": [
            { "source": "pubcid.org", "uids": [{ "id": "8f0b2c6e-1d4a-4e95-b7c3-2a9e5f1d0c48", "atype": 1 }] }
          ]
        }
      },
      "source": {
        "tid": "0b7d3e9a-6c21-4f58-9e04-3a1c8b5d7f92",
        "ext": {
          "schain": {
            "ver": "1.0",
            "complete": 1,
            "nodes": [
              { "asi": "ssp-alpha.example", "sid": "pub-1047", "hp": 1 },
              { "asi": "exchange-beta.example", "sid": "88123", "hp": 1 }
            ]
          }
        }
      },
      "regs": { "ext": { "gdpr": 1 } },
      "at": 1,
      "tmax": 300,
      "cur": ["EUR"]
    }

    OpenRTB 2.6. The same signals move into core fields, the category gets an explicit taxonomy, and a GPP string can travel next to the TC String.

    {
      "id": "4c8e2f1a-9b3d-4a6e-8f20-1d5c7b9e3a64",
      "imp": [
        {
          "id": "1",
          "tagid": "markets-mpu",
          "banner": { "format": [{ "w": 300, "h": 250 }] },
          "bidfloor": 0.5,
          "bidfloorcur": "EUR",
          "secure": 1
        }
      ],
      "site": {
        "domain": "news.example",
        "page": "https://news.example/markets/rates",
        "cattax": 9,
        "cat": ["52"],
        "publisher": { "id": "88123" }
      },
      "device": {
        "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
        "ip": "192.0.2.0",
        "devicetype": 2
      },
      "user": {
        "buyeruid": "dsp-55ab31c9",
        "consent": "CQtaoIAQtaoIAAAABBENC4FgAPIAAELAAAYgF5wAgAaALzAvOACAvMAA.IF5wAwAFAA0AXm",
        "eids": [
          { "source": "pubcid.org", "uids": [{ "id": "8f0b2c6e-1d4a-4e95-b7c3-2a9e5f1d0c48", "atype": 1 }] }
        ]
      },
      "source": {
        "tid": "0b7d3e9a-6c21-4f58-9e04-3a1c8b5d7f92",
        "schain": {
          "ver": "1.0",
          "complete": 1,
          "nodes": [
            { "asi": "ssp-alpha.example", "sid": "pub-1047", "hp": 1 },
            { "asi": "exchange-beta.example", "sid": "88123", "hp": 1 }
          ]
        }
      },
      "regs": {
        "gdpr": 1,
        "gpp": "DBABM~CQtaoIAQtaoIAAAABBENC4FgAPIAAELAAAYgF5wAgAaALzAvOACAvMAA.IF5wAwAFAA0AXm",
        "gpp_sid": [2]
      },
      "at": 1,
      "tmax": 300,
      "cur": ["EUR"]
    }

    OpenRTB 3.0. The transaction layer wraps everything. The impression becomes an item whose spec holds an AdCOM placement, and all context moves under context.

    {
      "openrtb": {
        "ver": "3.0",
        "domainspec": "adcom",
        "domainver": "1.0",
        "request": {
          "id": "4c8e2f1a-9b3d-4a6e-8f20-1d5c7b9e3a64",
          "tmax": 300,
          "at": 1,
          "cur": ["EUR"],
          "source": {
            "tid": "0b7d3e9a-6c21-4f58-9e04-3a1c8b5d7f92",
            "schain": {
              "ver": "1.0",
              "complete": 1,
              "nodes": [
                { "asi": "ssp-alpha.example", "sid": "pub-1047", "hp": 1 },
                { "asi": "exchange-beta.example", "sid": "88123", "hp": 1 }
              ]
            }
          },
          "item": [
            {
              "id": "1",
              "flr": 0.5,
              "flrcur": "EUR",
              "spec": {
                "placement": {
                  "tagid": "markets-mpu",
                  "secure": 1,
                  "display": { "displayfmt": [{ "w": 300, "h": 250 }] }
                }
              }
            }
          ],
          "context": {
            "site": {
              "domain": "news.example",
              "page": "https://news.example/markets/rates",
              "cattax": 9,
              "cat": ["52"],
              "pub": { "id": "88123" }
            },
            "device": {
              "type": 2,
              "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
              "ip": "192.0.2.0"
            },
            "user": {
              "buyeruid": "dsp-55ab31c9",
              "consent": "CQtaoIAQtaoIAAAABBENC4FgAPIAAELAAAYgF5wAgAaALzAvOACAvMAA.IF5wAwAFAA0AXm",
              "eids": [
                { "source": "pubcid.org", "uids": [{ "id": "8f0b2c6e-1d4a-4e95-b7c3-2a9e5f1d0c48", "atype": 1 }] }
              ]
            },
            "regs": {
              "gdpr": 1,
              "gpp": "DBABM~CQtaoIAQtaoIAAAABBENC4FgAPIAAELAAAYgF5wAgAaALzAvOACAvMAA.IF5wAwAFAA0AXm",
              "gpp_sid": [2]
            }
          }
        }
      }
    }

    The same field in each version

    10 of 10 rows

    Columns (5)

    Slot size

    imp[0].banner.format[0]

    imp[0].banner.format[0]

    request.item[0].spec.placement.display.displayfmt[0]

    AdCOM renames the format object

    Floor

    imp[0].bidfloor, bidfloorcur

    Same

    request.item[0].flr, flrcur

    Shorter names in 3.0

    Page category

    site.cat with IAB3 (Content Category 1.0, Business)

    site.cattax 9 with cat 52 (Content Taxonomy 3.1, Business and Finance)

    context.site.cattax, cat

    AdCOM marks taxonomies 1 and 2 deprecated

    Seller account

    site.publisher.id

    Same

    context.site.pub.id

    Equals the last schain node's sid

    Device type

    device.devicetype 2

    Same

    context.device.type 2

    2 = personal computer in both lists

    TC String

    user.ext.consent

    user.consent

    context.user.consent

    Same string in all three

    GDPR flag

    regs.ext.gdpr

    regs.gdpr

    context.regs.gdpr

    Omitted means unknown

    GPP

    none

    regs.gpp, regs.gpp_sid

    context.regs.gpp, gpp_sid

    Section 2 carries the EU TCF string

    Supply chain

    source.ext.schain

    source.schain

    request.source.schain

    Same object, version 1.0

    Extended IDs

    user.ext.eids

    user.eids

    context.user.eids

    atype 1 = device or browser ID

    Slot size

    OpenRTB 2.5 path

    imp[0].banner.format[0]

    OpenRTB 2.6 path

    imp[0].banner.format[0]

    OpenRTB 3.0 path

    request.item[0].spec.placement.display.displayfmt[0]

    Note

    AdCOM renames the format object

    Floor

    OpenRTB 2.5 path

    imp[0].bidfloor, bidfloorcur

    OpenRTB 2.6 path

    Same

    OpenRTB 3.0 path

    request.item[0].flr, flrcur

    Note

    Shorter names in 3.0

    Page category

    OpenRTB 2.5 path

    site.cat with IAB3 (Content Category 1.0, Business)

    OpenRTB 2.6 path

    site.cattax 9 with cat 52 (Content Taxonomy 3.1, Business and Finance)

    OpenRTB 3.0 path

    context.site.cattax, cat

    Note

    AdCOM marks taxonomies 1 and 2 deprecated

    Seller account

    OpenRTB 2.5 path

    site.publisher.id

    OpenRTB 2.6 path

    Same

    OpenRTB 3.0 path

    context.site.pub.id

    Note

    Equals the last schain node's sid

    Device type

    OpenRTB 2.5 path

    device.devicetype 2

    OpenRTB 2.6 path

    Same

    OpenRTB 3.0 path

    context.device.type 2

    Note

    2 = personal computer in both lists

    TC String

    OpenRTB 2.5 path

    user.ext.consent

    OpenRTB 2.6 path

    user.consent

    OpenRTB 3.0 path

    context.user.consent

    Note

    Same string in all three

    GDPR flag

    OpenRTB 2.5 path

    regs.ext.gdpr

    OpenRTB 2.6 path

    regs.gdpr

    OpenRTB 3.0 path

    context.regs.gdpr

    Note

    Omitted means unknown

    GPP

    OpenRTB 2.5 path

    none

    OpenRTB 2.6 path

    regs.gpp, regs.gpp_sid

    OpenRTB 3.0 path

    context.regs.gpp, gpp_sid

    Note

    Section 2 carries the EU TCF string

    Supply chain

    OpenRTB 2.5 path

    source.ext.schain

    OpenRTB 2.6 path

    source.schain

    OpenRTB 3.0 path

    request.source.schain

    Note

    Same object, version 1.0

    Extended IDs

    OpenRTB 2.5 path

    user.ext.eids

    OpenRTB 2.6 path

    user.eids

    OpenRTB 3.0 path

    context.user.eids

    Note

    atype 1 = device or browser ID

    Download JSON

    Table by AdSovereign, CC BY 4.0.

    Every JSON block above parses as written. The field paths come from the OpenRTB 2.6 object tables, the OpenRTB 3.0 request example and AdCOM appendix C. To build or check your own payload, use the OpenRTB bid request builder.

    What OpenRTB 2.6 changed from 2.5

    Version 2.6 did three things. It gave CTV a real ad pod model, so a seller can offer a whole break and a buyer can bid on slots inside it. It moved signals that the industry had parked in ext objects into named fields: the SupplyChain object schain, plus eids, gdpr, consent and us_privacy. And it deleted its own enumerated lists, pointing every code value to AdCOM 1.0 instead (OpenRTB 2.6, Appendix B).

    The dated releases then kept adding fields. Release 2.6-202211 added gpp and gpp_sid for the Global Privacy Protocol, 2.6-202303 replaced placement with plcmt, and 2.6-202606 added the live content flags realtime and firstbroadcast (release notes). Each field is explained in OpenRTB 2.6 explained, field by field, the pod fields in SSAI and CTV ad serving, and the consent fields in GPP and TCF implementation.

    The pod fields matter most for streaming TV. A 2.5 request can describe one video slot; it cannot say that three slots form one 90-second break with a floor per second. Under 2.6, podid ties the slots together and mincpmpersec prices them by length, which is how pod bidding works in live sport and FAST channels.

    What OpenRTB 3.0 changed, and why it did not take over

    OpenRTB 3.0 was a rebuild, not an update. It split the protocol into four layers: transport, format, transaction and domain. OpenRTB itself became only the transaction layer, and AdCOM became the default domain layer that describes the goods (OpenRTB 3.0, Protocol Layers). It made HTTPS mandatory, and it added fields for digitally signed requests under the ads.cert 1.0 scheme.

    The new structure broke every parser. A 2.x bidder cannot read a 3.0 payload without new code, and PPC Land's reference entry describes 3.0 as not backward compatible (PPC Land, 29 September 2026). Media.net announced 3.0 adoption in early 2019, but the market stayed on 2.x, according to the same report. It also cites an April 2026 IAB Spain guide saying most platforms still run 2.5 or 2.6.

    Four facts explain why 2.x kept the market:

    1. 2.6 imported the parts people wanted. AdCOM lists, schain in the Source object and the structured user agent all reached 2.x. The 3.0 change log even records schain being added "to sync with 2.6" in March 2022 (3.0 Appendix B).
    2. The signing feature moved elsewhere. The ads.cert 1.0 fields in 3.0 stayed in beta. IAB Tech Lab calls ads.cert 2.0 "a complete departure" from that 2018 design, and its Authenticated Connections protocol signs HTTP calls whatever the message format (IAB Tech Lab, ads.cert page, updated 14 February 2024).
    3. 2.x became a living version. Since 2.6-202211, new fields ship as dated releases and partners must ignore what they do not know, so additive change no longer needs a major upgrade (openrtb2.x README).
    4. The biggest exchange chose 2.x. Google retired its own protocol on 1 May 2025 and moved buyers to its OpenRTB implementation, documented against the 2.6 specification (Google release notes; Google OpenRTB guide).

    What the market runs in 2026: the evidence

    Public documentation lets you check which fields real systems read. The table lists what we could verify on 9 November 2026.

    4 of 4 rows

    Columns (4)

    Google Authorized Buyers

    OpenRTB 2.x in JSON or Protobuf; guide links the 2.6 spec

    source.schain, regs.gpp, regs.gpp_sid, user.consent, plus user.ext.consent and a boolean regs.ext.gdpr; ad categories in Content Taxonomy 1.0

    Prebid Server (Go)

    OpenRTB 2.6 internally; adapters opt in to 2.6

    58 of 281 adapters declare 2.6; one declares 2.5; 222 declare nothing and receive 2.5 ext locations

    Prebid.js

    ORTB 2.x first-party data

    TCF signals written to regs.ext.gdpr and user.ext.consent; GPP to regs.gpp and regs.gpp_sid

    Industry survey

    Mostly 2.5 or 2.6

    n/d

    Google Authorized Buyers

    Version it speaks

    OpenRTB 2.x in JSON or Protobuf; guide links the 2.6 spec

    Where consent and supply chain go

    source.schain, regs.gpp, regs.gpp_sid, user.consent, plus user.ext.consent and a boolean regs.ext.gdpr; ad categories in Content Taxonomy 1.0

    Prebid Server (Go)

    Version it speaks

    OpenRTB 2.6 internally; adapters opt in to 2.6

    Where consent and supply chain go

    58 of 281 adapters declare 2.6; one declares 2.5; 222 declare nothing and receive 2.5 ext locations

    Prebid.js

    Version it speaks

    ORTB 2.x first-party data

    Where consent and supply chain go

    TCF signals written to regs.ext.gdpr and user.ext.consent; GPP to regs.gpp and regs.gpp_sid

    Download JSON

    Table by AdSovereign, CC BY 4.0.

    The Prebid Server figure is our own count. We read every file in static/bidder-info at commit 361cd6c and separated adapters from aliases: 397 files, 281 adapters and 116 aliases. A missing openrtb.version means the server "will downgrade values back to their 2.5 ext locations" for that bidder, according to the Prebid Server developer guide. The conversion code moves schain, gdpr, consent, us_privacy and eids, and clears fields added after 2.5 (convert_down.go).

    So the honest answer is "2.6 on the wire, 2.5 in many parsers". A Prebid Server host has to run both shapes, which the Prebid Server self-hosting guide covers. None of the systems above offers a 3.0 endpoint in its public documentation.

    What IAB Tech Lab says about version support

    IAB Tech Lab has not published a notice that retires OpenRTB 3.0, and we found none on 9 November 2026. Its statements point the same way, though:

    • The 2.x README says the version number moves only on breaking changes, so "OpenRTB 2.7 should be considered a distinct version" and releases follow a monthly cycle when there is approved work (openrtb2.x README).
    • The OpenRTB page lists 2.6 releases up to September 2023 and says version history "is now fully maintained in Github". It dates 3.0 to September 2017, the year the framework was announced (IAB Tech Lab, OpenRTB page, updated 23 January 2024).
    • The 3.0 repository says its master branch "contains the most recent release" and keeps branches for each 3.0 update; the newest is dated March 2022 (openrtb README).
    • Programmatic Best Practices v1.0, drafted by IAB Tech Lab's Programmatic Governance Council, asks firms to support the most recent, widely deployed production version and to include an schain object in each request. Comments closed on 16 October 2026 (IAB Tech Lab press release, 16 September 2026).

    AdCOM still changes. Its file received updates in June and July 2026, which flow into 2.6 because 2.6 reads AdCOM lists (AdCOM commit history). Trade press also reported that IAB Tech Lab made GitHub Markdown, not PDF, the reference text for its standards on 14 September 2026 (PPC Land).

    Which version to build for: five steps

    1. Target the latest 2.6 release. Parse and emit 2.6-202606 field names. Send x-openrtb-version: 2.6 and ask each partner which dated release they test against.
    2. Read both locations for moved fields. Accept schain, gdpr, consent, us_privacy and eids in core fields and in their 2.5 ext paths. Prefer the core field when both exist and disagree, and log the conflict.
    3. Write what the partner reads. Keep a per-partner output profile. A 2.5-only bidder gets the ext paths, as Prebid Server does for adapters without a version flag.
    4. Ignore unknown fields. The 2.6 policy requires tolerance of new fields and list values, so do not fail on them.
    5. Treat 3.0 as a mapping job. Build it only for a partner that requires it, as a translation layer over your 2.6 model. The mapping table above lists the paths that change.

    The request path and where this translation layer sits are drawn in RTB architecture explained. The engineering pages on this topic are collected in the RTB architecture hub.

    Common mistakes

    1. Rejecting a request because of an unknown field. OpenRTB 2.6 requires bidders and exchanges to tolerate new fields and values. A strict schema that fails breaks every dated release.
    2. Writing consent only to ext, or only to core. Google's exchange sends both user.consent and user.ext.consent; Prebid.js writes the ext form. Send both during migration and read both.
    3. Sending schain in two places with different contents. If source.schain and source.ext.schain disagree, buyers cannot know which chain is true. Keep one source of truth and mirror it.
    4. Assuming the version header tells you the release. Every 2.6 release sends 2.6. Agree the release in the integration contract, not in the header.
    5. Mixing category lists. A 2.5 code such as IAB3 sent without cattax reads as Content Category Taxonomy 1.0, which AdCOM now marks deprecated. Set cattax whenever you send newer IDs.
    6. Reading video.placement only. Release 2.6-202303 replaced it with plcmt. Read both while partners migrate.
    7. Calling 3.0 "the next version of 2.6". It is a different payload with a different root object. Plan it as a new protocol, with its own tests.
    8. Expecting signatures in a 2.6 request. The ds, dsmap and cert fields exist only in 3.0, and ads.cert 2.0 signs the HTTP call instead. The SupplyChain checks in schain, ads.txt and sellers.json together are what buyers use today.

    FAQ

    Is OpenRTB 3.0 used in production?
    Rarely, as far as public documentation shows. Google, Prebid Server and Prebid.js all document OpenRTB 2.x, and trade coverage reports that the market stayed on 2.x after early 3.0 announcements (PPC Land, September 2026). The 3.0 specification has had no substantive change since March 2022.
    What is the difference between OpenRTB 2.5 and 2.6?
    Version 2.6 adds ad pods for CTV and audio, a structured user agent, the Network and Channel objects, and GPP fields. It also promotes schain, eids, gdpr, consent and us_privacy from ext objects to core fields, and moves code lists to AdCOM 1.0 (OpenRTB 2.6, Appendix B). A 2.5 parser can read most of a 2.6 request but misses the moved signals.
    Where is the OpenRTB 3.0 spec?
    It is the file "OpenRTB v3.0 FINAL.md" in IAB Tech Lab's openrtb repository on GitHub, with domain objects in the separate AdCOM repository (OpenRTB 3.0). The same repository also holds the SupplyChain object specification and community extensions for 2.x.
    Will there be an OpenRTB 2.7?
    Only if IAB Tech Lab makes a breaking change. Under the policy in force since 2.6-202211, additive changes ship as dated 2.6 releases, and the README says a 2.7 would be a distinct version (openrtb2.x README). No 2.7 draft was public on 9 November 2026.
    Do OpenRTB 2.6 and 3.0 share AdCOM?
    Yes, in part. OpenRTB 3.0 uses AdCOM objects for the whole domain layer, while 2.6 uses only AdCOM's enumerated lists and keeps its own objects (OpenRTB 2.6, section 1). That is why a new device type or taxonomy value reaches both versions at once.

    How this works on owned infrastructure

    The choice between 2.5, 2.6 and 3.0 is rarely yours alone. It is the sum of what each partner parses, and most stacks end up translating between shapes at the edge. When the exchange runs on infrastructure you control, that translation layer is your code: you decide which partner receives ext paths, which gets core fields, and how conflicts are logged. AdSovereign is an enterprise RTB stack designed to run inside your own perimeter, with an exchange and bidder built on OpenRTB 2.6 and per-partner output profiles. The integrations page lists supported protocol versions, and the architecture page shows where the request mapping sits.

    Sources

    1. IAB Tech Lab, "OpenRTB API Specification Version 2.6" (2.6.md, main branch, accessed 9 November 2026). https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/2.6.md
    2. IAB Tech Lab, openrtb2.x releases, 2.6-202210 (3 November 2022) to 2.6-202606 (11 June 2026), accessed 9 November 2026. https://github.com/InteractiveAdvertisingBureau/openrtb2.x/releases
    3. IAB Tech Lab, openrtb2.x README (versioning policy and release process, accessed 9 November 2026). https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/README.md
    4. IAB Tech Lab, "OpenRTB API Specification Version 2.5" (December 2016). https://iabtechlab.com/wp-content/uploads/2016/07/OpenRTB-API-Specification-Version-2-5-FINAL.pdf
    5. IAB Tech Lab, "OpenRTB Specification v3.0" (change log November 2018 to March 2022). https://github.com/InteractiveAdvertisingBureau/openrtb/blob/main/OpenRTB%20v3.0%20FINAL.md
    6. IAB Tech Lab, openrtb repository README (OpenRTB 3.0). https://github.com/InteractiveAdvertisingBureau/openrtb/blob/main/README.md
    7. IAB Tech Lab, "AdCOM Specification v1.0" (change log and OpenRTB interfaces, accessed 9 November 2026). https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/main/AdCOM%20v1.0%20FINAL.md
    8. IAB Tech Lab, OpenRTB standards page (last updated 23 January 2024). https://iabtechlab.com/standards/openrtb/
    9. IAB Tech Lab, ads.cert page (last updated 14 February 2024). https://iabtechlab.com/ads-cert/
    10. IAB Tech Lab, "IAB Tech Lab's Programmatic Standard Practices Available for Public Comment" (16 September 2026). https://iabtechlab.com/press-releases/iab-tech-labs-programmatic-standard-practices-available-for-public-comment/
    More sources (9)
    1. IAB Tech Lab Programmatic Governance Council, "Programmatic Best Practices, Version 1.0, Public Comment" (16 September 2026). https://iabtechlab.com/wp-content/uploads/2026/09/Public-Comment-Programmatic-Best-Practices-v1-1.pdf
    2. Google, Authorized Buyers "OpenRTB Integration" guide (last updated 15 October 2026). https://developers.google.com/authorized-buyers/rtb/openrtb-guide
    3. Google, Authorized Buyers RTB release notes (entry of 1 May 2025). https://developers.google.com/authorized-buyers/rtb/relnotes
    4. Prebid.org, "Adding a New Bidder Adapter" for Prebid Server Go (accessed 9 November 2026). https://docs.prebid.org/prebid-server/developers/add-new-bidder-go.html
    5. Prebid, prebid-server repository, static/bidder-info at commit 361cd6c (30 October 2026). https://github.com/prebid/prebid-server/tree/361cd6c93d7e1212aa41c9584016659c50f0c13d/static/bidder-info
    6. Prebid, prebid-server, openrtb_ext/convert_down.go (accessed 9 November 2026). https://github.com/prebid/prebid-server/blob/master/openrtb_ext/convert_down.go
    7. Prebid, Prebid.js, modules/consentManagementTcf.ts and consentManagementGpp.ts (master, accessed 9 November 2026). https://github.com/prebid/Prebid.js/blob/master/modules/consentManagementTcf.ts
    8. PPC Land, "OpenRTB" (29 September 2026). https://ppc.land/openrtb/
    9. PPC Land, "IAB Tech Lab drops PDF as the source of truth for its ad standards" (14 September 2026). https://ppc.land/iab-tech-lab-drops-pdf-as-the-source-of-truth-for-its-ad-standards/
    Changelog
    • 9 November 2026. First edition. Covers OpenRTB 2.5, 2.6 up to release 2.6-202606, and 3.0 up to its March 2022 update; Prebid Server Go adapter count at commit 361cd6c. Next review 9 February 2027.