Find why a payload fails.
Load a failing request, inspect its rule and field, and compare the correction. Share findings with your integration partner.
Debug a payload →Check bid requests and responses against a selected OpenRTB version and exchange profile. Get a rule ID and JSON path for each finding, then run the same Rust core in your application or CI.
Validation runs in your browser. Entered payloads may be stored; choose whether to share them before pasting. See privacy details.
cargo install rtblintnpm install rtblint-corertblint validate request.jsonOpen source · Apache 2.0 · OpenRTB 2.0–3.0
{
"id": "req-banner-example",
"at": "1",
"imp": [
{
"id": "1",
"banner": {
"w": 300,
"h": 250
}
}
]
}at expects integer but received string.
Change the string to an integer: "at": 1.
The corrected request has no findings against 2.6-202606.
Built-in example · spec profile · no sample upload
Load a failing request, inspect its rule and field, and compare the correction. Share findings with your integration partner.
Debug a payload →Add the GitHub Action, select a specification snapshot, and fail a build on validation errors.
Set up CI →Compare a library, gRPC sidecar, and captured-stream checks. Trace where payloads and findings go.
Compare deployment options →Check the specification or a partner's documented requirements: Google Authorized Buyers, Prebid Server, Xandr, or Magnite.
Need help integrating RTBlint?
Leave your email and a note about your setup. I'll reply personally.
Explore a separate consumer that reads captured bid requests and emits validation findings. Select a message to inspect the payload, then open the same example in the tester.
Interactive illustration. Kafka metrics and traffic are synthetic; payload findings are generated by the browser engine against OpenRTB 2.6-202606, spec profile. Your infrastructure captures traffic; RTBlint reads NDJSON. This is not a packaged Kafka connector.
Topics openrtb.bid-request
4 partitions · 12.4M messages · 8.4k/s
Design a capture or sidecar workflow →Copy a captured-stream command →
Versioned changes cataloged
64
Versions covered
2.0 → 3.0
Runs
On your stack
License
Apache 2.0
Each square represents a change in RTBlint's versioned rule catalog. Follow a row to inspect its fields and migration notes before choosing a snapshot for validation.
2.0
2012
4
Shared request objects for display, mobile, and video.Inspect 2.0 →
2.1
2012
3
More content categories and location provenance.Inspect 2.1 →
2.2
2014
4
Private marketplace deals, secure inventory, and COPPA.Inspect 2.2 →
2.3
2015
5
Native request assets, followed by 2.3.1 corrections.Inspect 2.3.1 →
2.4
2016
4
Audio inventory and video skippability.Inspect 2.4 →
2.5
2016
6
Source, metrics, video placement, and loss notices.Inspect 2.5 →
2.6
2022–2026
31
Dated snapshots for CTV, privacy, identity, and video placement.Inspect 2.6-202606 →
3.0
2018
7
A layered transport envelope with AdCOM domain objects.Inspect 3.0 →
Source: RTBlint's generated rule catalog (64 entries). The 2.6 row groups dated snapshots; counts describe cataloged changes, not complete validation coverage. Compare all snapshots and coverage notes.
Use the finding type to choose your next step. These examples open in the tester or reference docs so you can investigate the rule in context.
imp: []Check JSON syntax, the request ID, and the impressions needed to describe the opportunity.
Inspect the check →device.didsha1Unknown, deprecated, and removed fields are reported at their JSON paths, with findings specific to the selected version.
Inspect the check →regs.ext.gdpr → regs.gdprFor a moved field, inspect its replacement path. Video placement and plcmt need a separate enum migration.
Inspect the check →"at": "1" → "at": 1An auction type should be an integer. A string that looks like a number still produces a type mismatch.
Inspect the check →"at": 99A well-typed integer can still be outside the allowed set. Exchange profiles may add documented values.
Inspect the check →version + profileSelect the exact snapshot and exchange profile before comparing reports. Rule depth varies by version and protocol.
Inspect the check →This is the same auction-type error shown above. Its rule ID identifies the check, its path identifies the field, and the selected snapshot makes the report reproducible.
at expects integer but received string.
Review versioned changes and diagnostic references before changing a payload. A valid report does not guarantee a bid or partner acceptance.
Check coverage and limits →The local CLI, library, and gRPC service do not upload payloads. The browser tester and hosted MCP have separate sharing and storage behavior.
Compare data flow →Share the rule ID, field path, selected version, and profile. Use the same context in fixtures and CI to make a failure reproducible.
Add a fixture to CI →Read a file or stdin, choose the snapshot and profile, and return JSON findings. Validation errors can fail a CI job.
CLI reference →Connect through hosted rtblint.org/mcp or local stdio. Hosted payloads may be stored; local rtblint-mcp does not upload them.
Check a request or response locally through WebAssembly. Choose your sharing preference before entering a payload, then inspect its findings.
Open the tester →Copy a local, CI, or captured-stream example. Each selects the same specification snapshot as the visual examples above.
Install the CLI, save your payload as request.json, and return a machine-readable report. Validation errors produce a failing exit code.
cargo install rtblint
rtblint validate request.json --version 2.6-202606 --format jsonRead the release context and integration implications behind specification and ecosystem changes.
OpenAI's November 9, 2026 bidding rollout replaces Max Bid and Max CPC for new campaigns and remaps legacy API fields on November 18 so submitted values mean Target CPA and Target CPC averages; programmatic integrations that never switched fields can mis-price delivery while the second-price auction still clears above the number they thought was a cap.
Read the post →The October 15, 2026 OpenX trend report ranks mixed deals by the most advanced signal and files genre and rating buys under quality SST, so the 51% CTV share is a marketplace taxonomy story that outruns OpenRTB content fields buyers actually receive.
Read the post →Pixalate's Q3 2026 CTV Seller Trust Index reports 0.8% of ranked U.S. inventory resold through unauthorized paths, but 7 of 118 ranked seller listings are primarily resellers, up from about 1% of listings in Q2, so the headline rate and the seller roster tell different supply-path stories.
Read the post →Validate requests and responses across OpenRTB 2.x.
Versioned catalogs, field checks, and paired response validation.
Explore this capability →Run the same core in your preferred environment.
CLI, Rust and Node libraries, gRPC, browser tester, and MCP.
Explore this capability →Inspect the OpenRTB 3.0 envelope and AdCOM objects.
Check the transport layer and the domain objects it references.
Explore this capability →Resolve supply-chain references against your local cache.
Opt-in checks join schain with sellers.json and ads.txt or app-ads.txt.
Explore this capability →Find recurring issues in captured traffic.
NDJSON batch reports and rule-frequency summaries run locally.
Explore this capability →Apply a partner's documented protocol requirements.
26 vendor and integration-direction profiles, including documented supplier and bidder contracts.
Explore this capability →Fail CI when a fixture produces validation errors.
The GitHub Action returns machine-readable findings and a failing exit code.
Explore this capability →Embed native bindings in Go and Python services.
Planned bindings. Use the CLI or gRPC service today.
Follow the project →It means no error-level findings were produced by the selected version and profile. It does not guarantee a bid, exchange acceptance, legal compliance, or compliance with a partner's business rules. Warnings and informational findings still need review.
Check validation scope →Browser validation runs locally through WebAssembly. Entered tester payloads may be stored with identifiers stripped if sharing is enabled; choose before pasting. Built-in examples are not uploaded. Hosted MCP has separate storage terms. The local CLI, library, and gRPC sidecar do not upload payloads.
Read the data handling policy →Pin both the RTBlint release and the OpenRTB snapshot. Select the same exchange profile across environments, keep representative fixtures in your repository, and use JSON reports to track rule IDs and field paths. Error-level findings fail validation; warnings do not.
Set up CI checks →RTBlint is independent of IAB Tech Lab and open source under Apache 2.0. You can use the browser tester without an account and run the validator on your own infrastructure.
Read the project documentation →Start with a built-in example, then bring the check into your workflow.