Docs
rtblint documentation
How rtblint validates OpenRTB bid requests, what each finding means, and how to run the same checks from the tester, the Rust core, or the CLI.
What rtblint checks
rtblint validates an OpenRTB bid request against a tracked snapshot of the specification. It is a structural and semantic linter, not a schema-only check: it parses the JSON, walks the object tree against the canonical OpenRTB catalog, and reports anything that does not belong, is in the wrong place, or has the wrong type.
The current core focuses on OpenRTB 2.6 bid requests. Bid response validation and OpenRTB 3.0 are on the roadmap and not wired yet.
Rule ids
Every issue carries a stable rule id and, where it applies, the JSON path that tripped it. The id is the contract: it does not change when wording changes, so you can match on it in CI.
openrtb.payload.invalid_jsonerrorThe payload is not parseable JSON. No field rules run until this is fixed.openrtb.field.undefinederrorA field is not defined in the canonical OpenRTB catalog for the selected version.openrtb.field.deprecatedwarningA field still parses but is deprecated in the selected version. Migrate to its replacement.openrtb.field.movederrorA field moved to a different path in this version (for example regs.ext.gdpr → regs.gdpr).OpenRTB protocol reference
Beyond the validator, the docs cover the protocol details that usually live in the spec PDF: object anatomy, enumerated lists, privacy signals, and the fields that changed between versions.
- OpenRTB bid request: objects and required fields
- OpenRTB bid response: seatbid, bid, and win notices
- OpenRTB enumerated lists reference
- Privacy signals in OpenRTB: gdpr, gpp, us_privacy, coppa
- OpenRTB supply chain object (schain)
- Native ads in OpenRTB
- CTV in OpenRTB: video object, ad pods, plcmt
- tmax in OpenRTB: auction timeouts explained
- Bid floors in OpenRTB: bidfloor and bidfloorcur
- OpenRTB substitution macros
Tracked versions
rtblint tracks OpenRTB 2.6 by release snapshot (2.6-202204 through 2.6-202505) so that deprecations and moved fields are reported against the exact version you target. The tester defaults to the latest 2.6 snapshot; pick an older one to validate against it.
Run it yourself
The tester is the rtblint Rust core compiled to WASM. The same core is available as a library and CLI:
- Rust:
rtblint-coreand thertblintCLI on crates.io - CLI:
rtblint validate request.jsonorrtblint validate --stdin
Start with the bid request tester to see the output shape, then wire the same checks into your pipeline.