RTB Architecture

    OpenRTB bid request builder and validator: build, paste and check OpenRTB 2.6 requests

    Published · Last updated
    Next scheduled review:

    This OpenRTB bid request builder creates a valid OpenRTB 2.6 request from six presets: display, outstream video, CTV pod, native, audio and DOOH. It also validates any request you paste. Each finding names the field, the rule broken and the section of the IAB Tech Lab specification behind it. Nothing leaves your browser.

    OpenRTB 2.6 bid request builder

    Validation runs in your browser. Your request is never sent to a server.

    Build fields
    imp (1)
    imp 1
    imp[0].banner
    imp[0].banner.format (2)
    imp[0].banner.format 1
    imp[0].banner.format 2
    site
    site.publisher
    device
    device.geo
    user
    source
    source.schain
    source.schain.nodes (1)
    source.schain.nodes 1
    regs

    0 errors · 0 warnings · 0 notes

    HTTP and cURL
    POST /bid HTTP/1.1
    Content-Type: application/json
    x-openrtb-version: 2.6
    
    {
      "id": "d0c58cff-0fc6-42dc-b407-569a0e676455",
      "imp": [
        {
          "id": "1",
          "tagid": "home-top-1",
          "banner": {
            "format": [
              {
                "w": 320,
                "h": 50
              },
              {
                "w": 300,
                "h": 250
              }
            ],
            "pos": 1
          },
          "bidfloor": 0.4,
          "bidfloorcur": "USD",
          "secure": 1
        }
      ],
      "site": {
        "id": "site-1001",
        "domain": "news.example.com",
        "page": "https://news.example.com/local/weather-update",
        "mobile": 1,
        "publisher": {
          "id": "pub-1001",
          "domain": "example.com"
        }
      },
      "device": {
        "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1",
        "ip": "203.0.113.17",
        "devicetype": 4,
        "make": "Apple",
        "os": "iOS",
        "js": 1,
        "language": "en",
        "geo": {
          "country": "USA",
          "region": "CA",
          "type": 2
        }
      },
      "user": {
        "id": "exch-u-5521"
      },
      "source": {
        "tid": "0307d8fd-f34c-4711-822f-691a13522787",
        "schain": {
          "complete": 1,
          "ver": "1.0",
          "nodes": [
            {
              "asi": "ssp.example",
              "sid": "pub-1001",
              "hp": 1
            }
          ]
        }
      },
      "regs": {
        "gpp": "DBABLA~CAAAVVVVVVRA.QA",
        "gpp_sid": [
          7
        ]
      },
      "at": 1,
      "tmax": 250,
      "cur": [
        "USD"
      ]
    }

    Decode regs.gpp

    Paste a request from your exchange logs, a Prebid Server debug response or a partner's integration guide. The validator reads it the way a careful bidder would and tells you what to fix before a partner rejects it. For what each field means, read OpenRTB 2.6 explained alongside the tool.

    Contents

    Key facts

    • 2.6 keeps moving inside one version number. OpenRTB 2.6 has shipped as dated releases since 2.6-202210. The latest, 2.6-202606, was published on 11 June 2026 and added Content.realtime and Content.firstbroadcast (openrtb2.x releases, checked 9 November 2026). The version header still says 2.6.
    • Unknown fields are allowed by design. Since release 2.6-202211, bidders and exchanges "must tolerate" new fields and enumerated values they do not recognise (OpenRTB 2.6, section 2.6). The validator therefore reports an unknown field as a note, not an error.
    • The value lists live in AdCOM. OpenRTB 2.6 points every enumerated field to AdCOM 1.0, whose main branch last changed on 23 July 2026 (AdCOM commit history). The video placement list now has nine values, from 1 (Instream) to 9 (In-scene) (AdCOM, List: Plcmt Subtypes - Video).
    • DOOH and GPP arrived together. Release 2.6-202211 of 17 November 2022 added the DOOH object, regs.gpp and regs.gpp_sid (2.6-202211 release notes). Release 2.6-202303, published on 5 April 2023, added plcmt and deprecated placement (2.6-202303 release notes).
    • The official examples are not clean. All five request examples in section 6.2 of the specification use category IDs such as IAB3-1 from Content Taxonomy 1.0, which AdCOM marks deprecated (OpenRTB 2.6, section 6.2). The two DOOH request examples use geo.long, venuetax and venuetypeid, which the object tables do not define (implementation guide, section 7.9.6).
    Jump to the table

    How to use the builder

    1. Pick a preset. Choose display banner, outstream video, CTV pod, native, audio or DOOH. Each preset loads a complete request that passes every check.
    2. Edit the form. Change sizes, durations, floors, currency, the site or app, the device and the privacy signals. Drop-downs show the AdCOM label next to each code, so you pick "4 = No Content/Standalone", not a bare 4.
    3. Watch the findings. The validator runs on every change. A red badge means the request breaks a rule; amber means a bidder may misread it; grey is a note.
    4. Copy or download. Copy the JSON, download it as bid-request.json, or copy a cURL command with the x-openrtb-version: 2.6 header for your own test endpoint. The tool never sends the request anywhere.
    5. Share the state. The share link stores the whole form in the URL fragment, which browsers do not send to our server.

    To validate instead, open the Paste tab, paste a request and press Validate. Findings appear in document order, each with a JSON path, a plain-English message and a link to the section of the spec.

    OpenRTB bid request examples: six presets that pass

    Every preset uses reserved .example domains, documentation IP ranges and invented IDs. Codes come from AdCOM 1.0 and are labelled in the form. The privacy strings are real test strings from the IAB Tech Lab reference library (iabgpp-es, GppModel tests), so they decode in our GPP consent string decoder.

    6 of 6 rows

    Columns (4)

    Display banner

    Mobile web, US

    banner.format 320x50 and 300x250, pos 1 (above the fold)

    GPP section 7, US National

    Outstream video

    Desktop web, Portugal

    video.plcmt 4 (No Content/Standalone), playbackmethod 6 (starts in view, sound off)

    gdpr 1, TC String, GPP section 2

    CTV pod

    Connected TV app, US

    Dynamic pre-roll pod: podid, podseq 1, poddur 90, maxseq 4, rqddurs 15 and 30, ssai 3

    GPP section 7

    Native

    News app, US

    Native 1.2 request string: title, main image, icon, sponsor, description, call to action

    GPP section 7

    Audio

    Music app, US

    audio.feed 1 (music streaming), 15 to 30 seconds, VAST 4.1 and 4.2

    GPP section 7

    DOOH

    Rail platform screen, UK

    dooh object, qty.multiplier 14.2, dt in milliseconds, devicetype 8

    none (no personal data)

    Display banner

    Context

    Mobile web, US

    The fields that define it

    banner.format 320x50 and 300x250, pos 1 (above the fold)

    Privacy signal

    GPP section 7, US National

    Outstream video

    Context

    Desktop web, Portugal

    The fields that define it

    video.plcmt 4 (No Content/Standalone), playbackmethod 6 (starts in view, sound off)

    Privacy signal

    gdpr 1, TC String, GPP section 2

    CTV pod

    Context

    Connected TV app, US

    The fields that define it

    Dynamic pre-roll pod: podid, podseq 1, poddur 90, maxseq 4, rqddurs 15 and 30, ssai 3

    Privacy signal

    GPP section 7

    Native

    Context

    News app, US

    The fields that define it

    Native 1.2 request string: title, main image, icon, sponsor, description, call to action

    Privacy signal

    GPP section 7

    Audio

    Context

    Music app, US

    The fields that define it

    audio.feed 1 (music streaming), 15 to 30 seconds, VAST 4.1 and 4.2

    Privacy signal

    GPP section 7

    DOOH

    Context

    Rail platform screen, UK

    The fields that define it

    dooh object, qty.multiplier 14.2, dt in milliseconds, devicetype 8

    Privacy signal

    none (no personal data)

    Download JSON

    Table by AdSovereign, CC BY 4.0.

    The display and CTV examples are explained field by field in OpenRTB 2.6 explained, so this page prints the two formats that article does not cover. Here is the outstream video preset. The slot sits in an article, below the fold, and the player starts muted when it scrolls into view.

    {
      "id": "eae2cef7-9be5-49a4-be64-b7272f0b9386",
      "imp": [
        {
          "id": "1",
          "tagid": "article-video-1",
          "video": {
            "mimes": ["video/mp4", "video/webm"],
            "minduration": 6,
            "maxduration": 30,
            "protocols": [7, 8, 11, 12, 13, 14],
            "w": 640,
            "h": 360,
            "plcmt": 4,
            "linearity": 1,
            "skip": 1,
            "skipafter": 5,
            "playbackmethod": [6],
            "playbackend": 2,
            "api": [7],
            "pos": 3
          },
          "bidfloor": 2.5,
          "bidfloorcur": "EUR",
          "secure": 1
        }
      ],
      "site": {
        "id": "site-2040",
        "domain": "magazine.example",
        "page": "https://magazine.example/travel/lisbon-guide",
        "publisher": { "id": "pub-2040", "domain": "magazine.example" }
      },
      "device": {
        "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
        "ip": "192.0.2.0",
        "devicetype": 2,
        "js": 1,
        "language": "pt",
        "geo": { "country": "PRT", "type": 2 }
      },
      "user": {
        "id": "exch-u-8812",
        "consent": "CPSG_8APSG_8AAAAAAENAAFgAAAAAAAAAAAAAOAAAABAAAAA.IAOABgAB.YAAAAAAAAAAA"
      },
      "source": {
        "tid": "4749b971-b7a4-49ae-a8cf-e9b04f0d1dc3",
        "schain": {
          "complete": 1,
          "ver": "1.0",
          "nodes": [{ "asi": "ssp.example", "sid": "pub-2040", "hp": 1 }]
        }
      },
      "regs": {
        "gdpr": 1,
        "gpp": "DBABMA~CPSG_8APSG_8AAAAAAENAAFgAAAAAAAAAAAAAOAAAABAAAAA.IAOABgAB.YAAAAAAAAAAA",
        "gpp_sid": [2]
      },
      "at": 1,
      "tmax": 300,
      "cur": ["EUR"]
    }

    Three choices make this outstream rather than instream. A plcmt of 4 tells buyers there is no video content around the ad. A playbackmethod of 6 says the player starts when it enters the viewport, with sound off. A playbackend of 2 says it stops when the player leaves the viewport (AdCOM, Playback Methods and Playback Cessation Modes). The implementation guide maps the old "In-Article" placement to this value (implementation guide, section 7.10.2).

    The TC String in user.consent matches section 2 of the GPP string, so both readers see the same consent; you can open it in the TCF consent string decoder.

    The DOOH preset shows the fields a screen needs and a phone does not.

    {
      "id": "8c46efce-3335-432e-a0ed-cb940c6249b5",
      "imp": [
        {
          "id": "1",
          "banner": { "w": 1080, "h": 1920, "mimes": ["image/jpeg", "image/png"] },
          "bidfloor": 6.0,
          "bidfloorcur": "GBP",
          "secure": 1,
          "exp": 3600,
          "dt": 1794229200000,
          "qty": { "multiplier": 14.2, "sourcetype": 1, "vendor": "measurement.example" }
        }
      ],
      "dooh": {
        "id": "screen-group-42",
        "name": "Example Central, platform 4",
        "venuetype": ["10602"],
        "venuetypetax": 5,
        "publisher": { "id": "pub-0042", "name": "Example Outdoor Ltd", "domain": "outdoor.example" },
        "domain": "outdoor.example"
      },
      "device": {
        "devicetype": 8,
        "w": 1080,
        "h": 1920,
        "ppi": 40,
        "ifa": "screen-00042",
        "geo": { "lat": 51.5113, "lon": -0.0904, "type": 3, "country": "GBR" },
        "ext": { "ifa_type": "ppid" }
      },
      "source": {
        "tid": "d3f1a7c2-5b84-4e19-9c60-7a2e8b4f1d93",
        "schain": {
          "complete": 1,
          "ver": "1.0",
          "nodes": [{ "asi": "dooh-ssp.example", "sid": "pub-0042", "hp": 1 }]
        }
      },
      "at": 1,
      "tmax": 500,
      "cur": ["GBP"]
    }

    One play of this ad counts as 14.2 impressions, so a winning bid of 6.00 GBP CPM costs 6.00 / 1000 x 14.2, or about 0.085 GBP. That is the pricing rule in the implementation guide, section 7.9.4. The dt value is the planned display time in milliseconds: 1794229200000 is 9 November 2026 at 13:00 UTC. Venue 10602 is "Transit, Train Stations, Platform" in the OpenOOH Venue Taxonomy, and venuetypetax 5 names version 1.1 of that list. The ifa_type value sits in device.ext, where the IAB community extension defines it.

    Bid request example from the spec, checked line by line

    The best test of a validator is the specification itself. We pasted Example 4, the video request in section 6.2.4 of 2.6.md. It parses, it has every required field, and it gets no errors. It still draws two warnings and four notes.

    6 of 6 rows

    Columns (4)

    E02

    warning

    /site/cat

    IAB2-1 comes from taxonomy 1 (the default when cattax is absent), which AdCOM marks deprecated

    E02

    warning

    /site/content/cat

    Same problem for the content categories

    U01

    note

    /imp/0/video/apis

    apis is not a Video field; did you mean api?

    O12

    note

    /imp/0/video

    No plcmt, so buyers cannot tell instream from outstream

    O11

    note

    /imp/0/video/playbackmethod

    Two playback methods; the spec advises using only the first

    O05

    note

    /imp/0

    No secure flag, so buyers assume non-secure creatives are fine

    E02

    Severity

    warning

    Path

    /site/cat

    What the validator says

    IAB2-1 comes from taxonomy 1 (the default when cattax is absent), which AdCOM marks deprecated

    E02

    Severity

    warning

    Path

    /site/content/cat

    What the validator says

    Same problem for the content categories

    U01

    Severity

    note

    Path

    /imp/0/video/apis

    What the validator says

    apis is not a Video field; did you mean api?

    O12

    Severity

    note

    Path

    /imp/0/video

    What the validator says

    No plcmt, so buyers cannot tell instream from outstream

    O11

    Severity

    note

    Path

    /imp/0/video/playbackmethod

    What the validator says

    Two playback methods; the spec advises using only the first

    O05

    Severity

    note

    Path

    /imp/0

    What the validator says

    No secure flag, so buyers assume non-secure creatives are fine

    Download JSON

    Table by AdSovereign, CC BY 4.0.

    The apis finding is the instructive one. The field apis exists in OpenRTB 2.6, but on the bid object of the response, not on the video object of the request (OpenRTB 2.6, Object: Video). A bidder that follows the versioning rule will silently ignore it, so the VPAID support the example meant to signal never reaches the buyer. Three edits clear both warnings and the two most useful notes: rename apis to api, add "plcmt": 1, and set cattax to a current taxonomy with matching category IDs.

    What the validator checks against the OpenRTB 2.6 spec

    The validator applies 11 families of checks, in the order a parser meets them. Severity follows one rule. An error means the request breaks a "must" in the specification or cannot be read. A warning means a buyer may misread it or a "should" is broken. A note is information.

    11 of 11 rows

    Columns (4)

    Parse

    Valid JSON, an object at the top, duplicate keys

    Error; duplicate keys warn

    Required fields

    id, imp, Imp.id, Video.mimes, Native.request, Deal.id, SupplyChain fields

    Error

    Object tables, section 3.2

    Types

    Strings, integers, floats and arrays where the tables say so; 0 or 1 flags

    Error

    Object tables

    Enumerations

    Every coded field against its AdCOM list, with vendor codes of 500 or more

    Warning

    Relationships

    One media object per impression, unique Imp.id, site or app or dooh, rqddurs versus min and max duration, pods, deal floors

    Error or warning

    Sections 3.1, 3.2.7, 3.2.32

    Deprecated and removed

    placement, sequence, hashed device IDs, yob, gender; wmax and protocol removed

    Warning

    Unknown fields

    Fields no table defines, with a "did you mean" hint; pre-2.6 ext locations

    Note

    Section 2.6

    Privacy

    GPP header, gpp_sid against the header, gdpr and consent, US Privacy format

    Error or warning

    Supply chain

    ver "1.0", node fields, hp 1, sid length, last node against publisher.id

    Error or warning

    Native

    The request string parses and carries valid Native 1.2 assets

    Error or warning

    DOOH

    No site or app, devicetype 8, latitude and longitude, dt in milliseconds, qty.vendor

    Error or warning

    Parse

    Examples of what it checks

    Valid JSON, an object at the top, duplicate keys

    Typical severity

    Error; duplicate keys warn

    Spec basis

    Section 2.3

    Required fields

    Examples of what it checks

    id, imp, Imp.id, Video.mimes, Native.request, Deal.id, SupplyChain fields

    Typical severity

    Error

    Spec basis

    Object tables, section 3.2

    Types

    Examples of what it checks

    Strings, integers, floats and arrays where the tables say so; 0 or 1 flags

    Typical severity

    Error

    Spec basis

    Object tables

    Enumerations

    Examples of what it checks

    Every coded field against its AdCOM list, with vendor codes of 500 or more

    Typical severity

    Warning

    Spec basis

    AdCOM 1.0 lists

    Relationships

    Examples of what it checks

    One media object per impression, unique Imp.id, site or app or dooh, rqddurs versus min and max duration, pods, deal floors

    Typical severity

    Error or warning

    Spec basis

    Sections 3.1, 3.2.7, 3.2.32

    Deprecated and removed

    Examples of what it checks

    placement, sequence, hashed device IDs, yob, gender; wmax and protocol removed

    Typical severity

    Warning

    Spec basis

    Appendix B

    Unknown fields

    Examples of what it checks

    Fields no table defines, with a "did you mean" hint; pre-2.6 ext locations

    Typical severity

    Note

    Spec basis

    Section 2.6

    Privacy

    Examples of what it checks

    GPP header, gpp_sid against the header, gdpr and consent, US Privacy format

    Typical severity

    Error or warning

    Spec basis

    Object: Regs

    Supply chain

    Examples of what it checks

    ver "1.0", node fields, hp 1, sid length, last node against publisher.id

    Typical severity

    Error or warning

    Native

    Examples of what it checks

    The request string parses and carries valid Native 1.2 assets

    Typical severity

    Error or warning

    DOOH

    Examples of what it checks

    No site or app, devicetype 8, latitude and longitude, dt in milliseconds, qty.vendor

    Typical severity

    Error or warning

    Download JSON

    Table by AdSovereign, CC BY 4.0.

    Enumerated values outside AdCOM are warnings rather than errors for the same reason unknown fields are notes. A partner may be on a newer AdCOM release than our copy, and the spec tells receivers to cope. For GPP the validator reads the header and compares it with gpp_sid; the GPP consent string decoder reads each section in full.

    What the official examples teach

    We ran all seven request examples that IAB Tech Lab publishes in the two specification files. None has an error, which is good news for anyone copying them. None is clean either.

    7 of 7 rows

    Columns (6)

    Simple banner

    0

    2

    3

    Deprecated taxonomy in site.cat and publisher.cat; no device; no tmax

    Expandable creative

    0

    2

    4

    As above, plus user.data[2].value, which belongs in a Segment object

    Mobile

    0

    2

    2

    bcat and app.cat in the deprecated taxonomy

    Video

    0

    2

    4

    apis instead of api; no plcmt

    PMP with direct deal

    0

    2

    2

    Deprecated taxonomy

    DOOH banner

    0

    2

    10

    geo.long instead of lon; dt of 12345670 reads as 1 January 1970; venuetax and venuetypeid

    DOOH video

    0

    2

    9

    dt of 1647010095 looks like seconds (11 March 2022); same field names

    Simple banner

    File and section

    2.6.md, 6.2.1

    Errors

    0

    Warnings

    2

    Notes

    3

    Expandable creative

    File and section

    2.6.md, 6.2.2

    Errors

    0

    Warnings

    2

    Notes

    4

    Mobile

    File and section

    2.6.md, 6.2.3

    Errors

    0

    Warnings

    2

    Notes

    2

    Video

    File and section

    2.6.md, 6.2.4

    Errors

    0

    Warnings

    2

    Notes

    4

    PMP with direct deal

    File and section

    2.6.md, 6.2.5

    Errors

    0

    Warnings

    2

    Notes

    2

    Download JSON

    Table by AdSovereign, CC BY 4.0.

    The DOOH rows matter most. A bidder that reads only geo.lon sees no longitude at all, and the guide itself says latitude and longitude are required for DOOH. The deal floors in the DOOH banner example are also read as USD while the impression floor is in GBP, because a deal's currency never inherits the impression's (OpenRTB 2.6, Object: Deal). If you copy an official example as a template, run it through the validator first.

    Mistakes the validator is built to catch

    These patterns break integrations quietly, because JSON parsers accept them and bidders then drop or misprice the request.

    1. Numbers sent as strings. "bidfloor": "0.50" is a string. A strict parser rejects it, and a lenient one has to guess.
    2. Booleans for flags. "secure": true is not the integer 1 the spec asks for.
    3. A single currency instead of an array. cur is a string array, so "cur": "USD" fails the type check.
    4. Two duration models at once. rqddurs must not appear with minduration or maxduration (Object: Video).
    5. Pre-2.6 locations. OpenRTB 2.6 moved regs.ext.gdpr, user.ext.consent and source.ext.schain into the core objects, and a 2.6 bidder may not look in ext at all.
    6. A GPP string without gpp_sid. The buyer then cannot tell which section governs the transaction.
    7. A supply chain that does not end with the seller. The last node's sid should equal publisher.id; the SupplyChain, ads.txt and sellers.json guide explains why buyers check this.
    8. DOOH timestamps in seconds. dt is milliseconds since 1970. A value in seconds lands in January 1970.
    9. A native request sent as an object. OpenRTB 2.x defines native.request as a JSON-encoded string, although some exchanges accept an object.
    10. Site and app together. Only one context object applies to a request, and a DOOH request must carry neither.

    Methodology and limits

    The checks follow the OpenRTB 2.6 specification and implementation guide at release 2.6-202606, which was still the latest state of the repository on 9 November 2026. Enumerations come from AdCOM 1.0 as of its 23 July 2026 commit. Native checks follow Native Ads 1.2; supply chain checks follow the SupplyChain object 1.0. Each finding links to the section it relies on, so you can disagree with us on the evidence.

    The tool checks one bid request at a time. It does not check bid responses, exchange-specific ext rules, or whether a seller ID appears in an exchange's sellers.json; the ads.txt and sellers.json validator does that last job. It reads the GPP header and the shape of a TC String; full consent decoding happens in the two decoders linked above. For how the auction around a request works, see how real-time bidding works. Pod logic is covered in depth in SSAI and CTV ad serving. Other engineering tools and guides sit in the RTB architecture hub.

    FAQ

    Where is the OpenRTB 2.6 spec?
    The canonical text is 2.6.md in IAB Tech Lab's openrtb2.x repository on GitHub, with implementation notes in implementation.md beside it (openrtb2.x). Enumerated values live in AdCOM 1.0 in a separate repository. How 2.6 differs from 2.5 and 3.0 is covered in OpenRTB 2.5 vs 2.6 vs 3.0.
    What is the smallest valid OpenRTB bid request?
    An object with an id and an imp array holding one impression that has its own id and one media object, such as a banner with w and h. The validator accepts it with no errors, but it warns that no site, app or dooh object says where the ad runs. Real buyers need that context, a device and the privacy signals before they bid.
    Does the validator reject unknown fields?
    No. Section 2.6 of the spec tells partners to tolerate fields and values they do not know, so unknown fields are notes. The validator still suggests the field you probably meant, such as lon for long.
    Can I check an OpenRTB 2.5 request?
    Yes, with care. A 2.5 request usually parses, and the validator then flags what 2.6 moved, deprecated or removed, such as user.ext.consent or Video.protocol (OpenRTB 2.6, Appendix B). Treat those findings as a migration list rather than as faults in a 2.5 integration.
    Does it check bid responses?
    Not in this version. It validates the OpenRTB bid request only. Response checks, such as impid matching and price against floor, are planned and will be announced in the changelog.
    Is my bid request stored?
    No. Building and validating run in your browser, and the share link keeps the request in the URL fragment, which is never sent to a server. A real request can contain IP addresses, device IDs and consent strings, so prefer test data when you can.

    How this works on owned infrastructure

    A browser validator catches a broken template once. The harder question is what happens to the millions of requests that follow it. When the exchange belongs to a vendor, its validation rules, its tolerance for unknown fields and its handling of malformed GPP strings are written in that vendor's documentation, and a change may surface only as a drop in bids. AdSovereign is an enterprise RTB stack designed to run on infrastructure you control, so the rule set that screens incoming and outgoing OpenRTB 2.6 requests is configuration you version, test against fixtures like the ones on this page, and roll out on your own schedule. The architecture page shows where request validation sits in the bid path, and integrations lists the protocol versions it supports.

    Sources

    1. IAB Tech Lab, "OpenRTB API Specification Version 2.6" (2.6.md, release 2.6-202606; accessed 9 November 2026). https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/2.6.md
    2. IAB Tech Lab, "OpenRTB 2.x Implementation Notes" (implementation.md, accessed 9 November 2026). https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/implementation.md
    3. IAB Tech Lab, openrtb2.x releases 2.6-202210 (3 November 2022) to 2.6-202606 (11 June 2026), including the 2.6-202211 and 2.6-202303 notes (accessed 9 November 2026). https://github.com/InteractiveAdvertisingBureau/openrtb2.x/releases
    4. IAB Tech Lab, "AdCOM Specification v1.0" (main branch, last commit 23 July 2026; accessed 9 November 2026). https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/main/AdCOM%20v1.0%20FINAL.md
    5. IAB Tech Lab, "OpenRTB Dynamic Native Ads API Specification Version 1.2" (accessed 9 November 2026). https://github.com/InteractiveAdvertisingBureau/Native-Ads/blob/main/OpenRTB-Native-Ads-Specification-Final-1.2.md
    6. IAB Tech Lab, "SupplyChain Object" 1.0 (accessed 9 November 2026). https://github.com/InteractiveAdvertisingBureau/openrtb/blob/main/supplychainobject.md
    7. IAB Tech Lab, "IFA_TYPE" community extension for OpenRTB (accessed 9 November 2026). https://github.com/InteractiveAdvertisingBureau/openrtb/blob/main/extensions/community_extensions/ifa_type.md
    8. IAB Tech Lab, "Global Privacy Platform: Consent String Specification" and "Section Information" (accessed 9 November 2026). https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/Section%20Information.md
    9. IAB Tech Lab, iabgpp-es reference library, GppModel.test.ts (accessed 9 November 2026). https://github.com/IABTechLab/iabgpp-es/blob/master/modules/cmpapi/test/GppModel.test.ts
    10. OpenOOH, "Venue Taxonomy" specification 1.1 (accessed 9 November 2026). https://github.com/openooh/venue-taxonomy/blob/main/specification-1.1.md
    Changelog
    • 9 November 2026. First edition: builder with six presets, validator with 11 check families, results for the seven official request examples, 32 test cases. Baseline OpenRTB 2.6-202606 and AdCOM 1.0 of 23 July 2026. Next review 9 February 2027.