OpenRTB linter. Validates OpenRTB 2.x bid requests and bid responses against versioned IAB Tech Lab spec snapshots, from 2.0 through the monthly 2.6 releases (currently up to 2.6-202606).
Website and playground: rtblint.org
- Malformed JSON and wrong top-level shape
- Required fields, including required non-empty arrays
- Unknown objects and fields per version catalog (
extsubtrees stay open) - Type mismatches (string, integer, float, boolean, object, and array forms)
- Documented enum values, including AdCOM lists and vendor ranges (500+)
- Deprecated, moved, removed, and not-yet-available fields across versions
- Semantic rules: site/app/dooh exclusivity, imp media type presence, skippable video dependencies, duration exclusivity, seatbid/nbr presence on responses, and more
Every finding carries a stable rule id, a severity, a message, and a JSON path.
| Surface | Package | Status |
|---|---|---|
| Rust CLI | rtblint |
Working |
| Rust library | rtblint-core |
Working |
| MCP server | rtblint-mcp |
Working |
| Node (WASM) | rtblint-core on npm |
Working |
| Python | rtblint on PyPI |
Not implemented yet |
| Go | github.com/aleksUIX/rtblint/go |
Not implemented yet |
OpenRTB 3.0 payload validation is not implemented yet (the 3.0 catalog ships for introspection only). The 2.6-202204 snapshot has no extracted catalog and reports itself as unsupported instead of passing payloads silently. See ROADMAP.md for what's next and CHANGELOG.md for release history.
cargo install rtblint
rtblint validate request.json
rtblint validate --type response response.json
rtblint validate --version 2.5 --format json request.json
cat request.json | rtblint validate --stdinExit codes: 0 valid, 1 validation errors, 2 usage or I/O error.
import { validate, validateResponse, versions } from "rtblint-core";
const report = validate(JSON.stringify(bidRequest), "2.6-202505");
if (!report.valid) {
for (const issue of report.issues) {
console.log(`[${issue.severity}] ${issue.path}: ${issue.message} (${issue.id})`);
}
}rtblint-mcp speaks MCP over stdio and exposes validate_bid_request, validate_bid_response, and list_openrtb_versions.
{
"mcpServers": {
"rtblint": { "command": "rtblint-mcp" }
}
}use rtblint_core::{validate_bid_request_for_version, OpenRtbVersion};
let result = validate_bid_request_for_version(OpenRtbVersion::V2_6_202505, payload);
for issue in &result.issues {
println!("{} {} {:?}", issue.severity, issue.id, issue.path);
}The validator runs on structured catalogs extracted from the IAB Tech Lab OpenRTB specifications: object names, field names, type notations, enumerated value sets, and section citations. The catalogs carry no spec prose. rtblint is not affiliated with or endorsed by IAB Tech Lab. See NOTICE for attribution.
Apache-2.0. See LICENSE and NOTICE.