OpenRTB validator · open source · Apache 2.0
Validate OpenRTB
before it bids.
RTBlint checks OpenRTB bid requests against the published specification: malformed JSON, missing required fields, unknown and deprecated fields, moved paths, type mismatches, and documented enums. Version-aware across OpenRTB 2.0–3.0, from one Rust core that runs in your browser, in your terminal, and in your pipeline.
cargo install rtblintnpm install rtblint-corertblint validate request.jsonSpec deltas tracked
62+
Versions covered
2.0 → 3.0
Runs
In your browser
License
Apache 2.0
Version-aware by design
One validator, every OpenRTB version
The spec has evolved continuously since 2012. Fields move, deprecate, and appear with each release. RTBlint tracks those deltas so a finding always reflects the version you are validating against, not a single frozen snapshot.
2.0
2012
Unified display, mobile, and video around shared objects.
2.1
2012
Tier-2 categories, geo provenance.
2.2
2014
Native ads, video skip signaling.
2.3
2015
Native 1.1 alignment, refined enums.
2.4
2016
Audio, metric reporting.
2.5
2016
supplychain groundwork, source object.
2.6
2022–2025
Eight tracked snapshots: plcmt, DSA, GPP, durfloors, refresh.
3.0
2018
Layered model with AdCOM. Envelope tracked, not yet fully wired.
Bar height reflects the number of tracked spec deltas per version. OpenRTB 2.6 alone spans eight published snapshots from 2022 to 2025.
What RTBlint checks
The errors that drop a request
A malformed bid request does not bid. RTBlint catches the structural mistakes that exchanges reject and bidders silently misread, each one mapped to the field that caused it.
Malformed JSON & missing fields
Parse errors and absent required fields (imp, id, at) are caught before a request ever reaches an exchange.
Unknown & deprecated fields
Fields not in the targeted version, and fields the spec has since deprecated, are flagged with the exact path.
Moved paths across versions
When a field relocates between versions (placement → plcmt), RTBlint points to the new home.
Type mismatches
Integers where strings appear, objects where arrays belong: type errors that silently break bidding logic.
Documented enum values
Values outside the documented set for fields like auction type and placement are reported against the spec.
Version-aware checks
Validate against a specific OpenRTB version, or let RTBlint detect and check the latest tracked snapshot.
Every finding is actionable
A rule ID and a path, not a guess
RTBlint does not just say a request is invalid. Each issue names the rule that fired and the exact JSON path, so it maps straight to the line to fix and stays stable enough to gate a build on.
placement was superseded by plcmt in OpenRTB 2.6. Set plcmt for forward compatibility.
Why trust this validator
Grounded in the spec, run on your terms
Derived from the published spec
Every rule traces to the IAB Tech Lab OpenRTB specification: required fields, deprecations, moves, and documented enums. Each finding cites the version it applies to.
Runs entirely in your browser
The validator is the RTBlint Rust core compiled to WASM. Nothing is uploaded; every check happens client-side and returns instantly.
Stable rule IDs and JSON paths
Each issue carries a stable rule ID and the exact JSON path that tripped it, so a finding maps straight to the field to fix, in a report or in CI.
One core, many surfaces
Validate in the browser, the terminal, and the pipeline
Browser tester
Paste a bid request and validate instantly, client-side. Nothing is uploaded.
Open the tester →Rust CLI
rtblint validate request.json, with --stdin, --version, and --format json for CI.
MCP server
A hosted Model Context Protocol server at rtblint.org/mcp, so an AI agent can validate OpenRTB payloads mid-conversation.
Latest from the blog
Spec releases, decoded as they ship
SupplyChain v1.1 adds nodes that never touch the money. Most schain checks assume those cannot exist.
The proposed upgrade puts technical custody entities into the main chain with hp=0, bumps ver, and reworks what complete means. Public comment closes August 21. What that does to hop counting, sellers.json cross-checks, and every validator that treats hp=1 as an invariant.
Read the post →The agentic protocols shipped a version handshake. A bid request still has nowhere to say which OpenRTB it is.
AdCP 3.1 puts a version on every request and response, advertises supported releases, and returns a typed error when a buyer pins one the seller does not serve. AAMP 2.3 added trust verification on price-moving paths. OpenRTB, ten dated snapshots into 2.6, still agrees its version in an onboarding document.
Read the post →CTV runs at 65 percent of commercial capacity. Part of that gap is demand that could not read the request.
Omdia's July 29 benchmark puts ad-supported CTV at 65 percent of commercial capacity and prescribes a bigger advertiser base. A seller's fill rate cannot tell a buyer who passed from a buyer who filtered the request before pricing it, and the CTV fields most likely to be wrong are the pod fields carrying the unsold slots.
Read the post →Roadmap
Where RTBlint is, and where it is going
- Shipped
OpenRTB 2.x bid request & response validation
Required fields, unknown and deprecated paths, type mismatches, and documented enums across the tracked 2.6 snapshots, plus bid response validation.
- Shipped
Browser tester, Rust CLI, npm library & hosted MCP server
The same Rust core in the browser, as the RTBlint CLI and rtblint-core crate, as the rtblint-core npm package, and as a hosted MCP server at rtblint.org/mcp.
- In progress
Broader 2.0–2.5 rule depth
Deepening coverage of the earlier 2.x snapshots so a finding is as precise on legacy traffic as it is on 2.6.
- Planned
OpenRTB 3.0 + AdCOM
The layered 3.0 model with the AdCOM object catalog, fully validated end to end.
- Planned
Native Go & Python bindings
The same Rust core embeddable directly in Go and Python ad-serving pipelines.
FAQ
OpenRTB validation, answered
What is an OpenRTB validator?
An OpenRTB validator checks a programmatic bid request (or response) against the IAB Tech Lab OpenRTB specification. It reports malformed JSON, missing required fields, unknown or deprecated fields, moved paths, type mismatches, and out-of-range enum values, the structural mistakes that cause exchanges to drop a request or bidders to misread it. RTBlint does this version-aware, in the browser, with a rule ID and JSON path on every finding.
Which OpenRTB versions does RTBlint support?
RTBlint carries object catalogs for OpenRTB 2.0 through 3.0. Rule depth is richest on the tracked 2.6 snapshots (2022 through 2025), which is where most live programmatic traffic sits today. You can validate against a specific version or let RTBlint check against the latest tracked snapshot.
Is RTBlint free and open-source?
Yes. RTBlint is open-source under the Apache 2.0 license. There is no account, no rate limit, and no paywall. The browser tester, the Rust core, and the CLI are all free.
Does RTBlint upload my bid request?
No. Validation runs entirely client-side via the RTBlint Rust core compiled to WebAssembly. Your bid request JSON never leaves the browser and nothing is logged or retained.
Can I run RTBlint in CI or a pipeline?
Yes. RTBlint ships as a Rust CLI (rtblint validate <file.json>, or --stdin for piped input) with --version and --format json for version-aware, machine-readable output, so it drops into CI and pre-bid checks. Native Go and Python bindings and an MCP server are on the roadmap.
Is RTBlint an official IAB validator?
No. RTBlint is an independent, open-source validator that checks bid requests against the published IAB Tech Lab OpenRTB specification. It is not affiliated with or operated by IAB Tech Lab.
Validate an OpenRTB bid request now
Free, instant, nothing uploaded.