# RTBlint > RTBlint is a free, open-source (Apache 2.0) OpenRTB validator. It checks > real-time bidding bid requests against the published IAB Tech Lab OpenRTB > specification: malformed JSON, missing required fields, unknown and > deprecated fields, moved paths, type mismatches, and documented enum values. > It is version-aware across OpenRTB 2.0 through 3.0, with the deepest rule > coverage on the dated 2.6 snapshots (2.6-202204 through 2.6-202606). The > validator runs in the browser (Rust core compiled to WebAssembly) and ships > as a Rust library and CLI > (`cargo install rtblint`, `rtblint validate request.json`), a WASM-backed > npm library (`npm install rtblint-core`), and a hosted MCP server at > https://rtblint.org/mcp. RTBlint is independent and not affiliated with IAB > Tech Lab. Full site content in one file: https://rtblint.org/llms-full.txt ## Tools - [Bid request & response tester](https://rtblint.org/tester/): paste an OpenRTB bid request or bid response JSON and validate it instantly, client-side, with happy and unhappy sample scenarios. Payloads you enter may be stored; see privacy and terms. - [Privacy](https://rtblint.org/privacy/): how tester and hosted MCP payloads are stored, redacted, opted out of, and used for research - [Terms](https://rtblint.org/terms/): what submitting a payload licenses; rule development and research that does not publish submitted JSON - [ARTF simulator](https://rtblint.org/demo/artf/): a simulated Agentic Real Time Framework hop with the real RTBlint engine in the middle. Envelope, mutation set, apply-then-revalidate, forward or drop. Host and agent are fiction; verdicts are not. - [CLI and library](https://rtblint.org/docs/cli/): rtblint validate, --stdin, --version, --format json, for CI and pipelines, plus the rtblint-core npm library for Node - [MCP server](https://rtblint.org/docs/mcp/): hosted Model Context Protocol server at https://rtblint.org/mcp exposing validate_bid_request, validate_bid_response, list_openrtb_versions, and get_adcp_capabilities to AI agents. Payloads sent to the hosted endpoint may be stored (identifiers stripped); local rtblint-mcp over stdio does not. Answers AdCP 3.1 capability discovery, declaring the experimental measurement protocol and three bid-stream conformance metrics (openrtb_error_count, openrtb_warning_count, openrtb_conformance_rate) - [OpenRTB JSON Schemas](https://rtblint.org/docs/json-schemas/): draft 2020-12 schemas per OpenRTB version for bid requests and bid responses, served at https://rtblint.org/schemas/openrtb--bid-request.schema.json; IAB Tech Lab publishes none for 2.6 or 3.0 ## Docs - [Documentation overview](https://rtblint.org/docs/): rule IDs, tracked versions, issue shape - [What is OpenRTB](https://rtblint.org/docs/openrtb/): the protocol, the auction, bid request and bid response - [OpenRTB bid request anatomy](https://rtblint.org/docs/openrtb/bid-request/): every object and required field - [OpenRTB bid response anatomy](https://rtblint.org/docs/openrtb/bid-response/): seatbid, bid, win/billing/loss notices - [OpenRTB enumerated lists](https://rtblint.org/docs/openrtb/enums/): auction types, device types, plcmt, playback methods, API frameworks, protocols - [Privacy signals](https://rtblint.org/docs/openrtb/privacy/): regs.gdpr, user.consent, regs.gpp, gpp_sid, us_privacy, coppa, DSA - [Supply chain (schain)](https://rtblint.org/docs/openrtb/supply-chain/): SupplyChain and SupplyChainNode fields - [Native ads](https://rtblint.org/docs/openrtb/native/): imp.native and the Native Ads 1.2 spec - [CTV and ad pods](https://rtblint.org/docs/openrtb/ctv/): podid, podseq, slotinpod, rqddurs, duration floors - [Video object](https://rtblint.org/docs/openrtb/video/): every imp.video field grouped by what it controls, including plcmt vs placement, skip controls, pods and duration floors - [Audio object](https://rtblint.org/docs/openrtb/audio/): imp.audio for podcast and streaming audio, including feed, stitched, nvol, and what audio drops from the video object - [tmax and timeouts](https://rtblint.org/docs/openrtb/tmax/) - [Bid floors](https://rtblint.org/docs/openrtb/floors/): bidfloor, bidfloorcur, deal floors - [Substitution macros](https://rtblint.org/docs/openrtb/macros/): AUCTION_PRICE, AUCTION_LOSS, and the rest - [OpenRTB versions](https://rtblint.org/docs/openrtb-versions/): why RTBlint tracks dated 2.6 snapshots, with a page per version (2.0 through 3.0) listing what each release added, deprecated, moved, or removed - [AdCOM object reference](https://rtblint.org/docs/openrtb/adcom/): the AdCOM 1.0 media, placement, and context object groups, and where the Impression object went in OpenRTB 3.0 - [What RTBlint checks](https://rtblint.org/docs/what-rtblint-checks/) - [Rule catalog](https://rtblint.org/docs/rules/): every versioned rule, each with its own page - [OpenRTB examples](https://rtblint.org/docs/openrtb-examples/): valid, annotated bid request and response payloads (banner, video, CTV pod, native, DOOH, GDPR/GPP, 3.0), each opening directly in the tester - [Substitution macro pages](https://rtblint.org/docs/openrtb/macros/): every macro from AUCTION_ID to AUCTION_DISCOUNT_CPM with its own page - [No-bid reason pages](https://rtblint.org/docs/openrtb/nbr/0/): every nbr code with its own page - [Loss reason pages](https://rtblint.org/docs/openrtb/loss/102/): every loss reason code with its own page - [Validate online](https://rtblint.org/docs/openrtb-validator-online/), [CLI](https://rtblint.org/docs/openrtb-validator-cli/), [Node.js](https://rtblint.org/docs/openrtb-validator-nodejs/), [Rust](https://rtblint.org/docs/openrtb-validator-rust/), [MCP](https://rtblint.org/docs/openrtb-validator-mcp/): one page per validation surface - [Diagnostic code reference](https://rtblint.org/docs/rule-reference/): the 110 stable issue ids the validator emits, each with its own page covering what it means, why it matters, and how to fix it. Covers OpenRTB bid requests and responses, the spec JSON and protobuf JSON dialects, and ARTF envelopes and mutation sets ## FAQ - [OpenRTB FAQ](https://rtblint.org/faq/): 80+ direct answers on bid request structure, no-bid debugging, CTV and ad pods, privacy signals, schain, floors, macros, and version migration, each anchored to the exact spec field and version ## Guides - [How to validate an OpenRTB bid request](https://rtblint.org/guides/validate-openrtb-bid-request/) - [Common OpenRTB bid request mistakes](https://rtblint.org/guides/common-openrtb-mistakes/) - [placement vs plcmt in OpenRTB video](https://rtblint.org/guides/placement-vs-plcmt/) - [OpenRTB no-bid reason codes (nbr)](https://rtblint.org/guides/openrtb-no-bid-reasons/) - [OpenRTB loss reason codes (lurl)](https://rtblint.org/guides/openrtb-loss-reason-codes/) - [Unity Exchange loss reason codes](https://rtblint.org/docs/openrtb/loss/exchange/unity/) - [Equativ loss reason codes](https://rtblint.org/docs/openrtb/loss/exchange/equativ/) - [Google Authorized Buyers loss reason 501](https://rtblint.org/docs/openrtb/loss/exchange/google/501/) - [Chartboost loss reason codes](https://rtblint.org/docs/openrtb/loss/exchange/chartboost/) - [Digital Turbine loss reason codes](https://rtblint.org/docs/openrtb/loss/exchange/digital-turbine/) - [Verve loss reason codes](https://rtblint.org/docs/openrtb/loss/exchange/verve/) - [Xandr loss reason codes](https://rtblint.org/docs/openrtb/loss/exchange/xandr/) - [Google creative status codes](https://rtblint.org/docs/openrtb/loss/exchange/google-creative-status/) - [OpenRTB 2.5 vs 2.6](https://rtblint.org/guides/openrtb-2-5-vs-2-6/) - [OpenRTB 2.6 vs 3.0](https://rtblint.org/guides/openrtb-2-6-vs-3-0/) - [OpenRTB validation in CI](https://rtblint.org/guides/openrtb-validation-in-ci/) - [OpenRTB bid request best practices](https://rtblint.org/guides/openrtb-bid-request-best-practices/) - [What is programmatic advertising?](https://rtblint.org/guides/what-is-programmatic-advertising/) - [SSP, DSP, and ad exchange explained](https://rtblint.org/guides/openrtb-ssp-dsp-ad-exchange/) - [OpenRTB vs Prebid and header bidding](https://rtblint.org/guides/openrtb-vs-prebid-header-bidding/) - [What is AdCOM?](https://rtblint.org/guides/what-is-adcom/) - [VAST and OpenRTB: how video creatives are delivered](https://rtblint.org/guides/vast-and-openrtb/) - [tmax and bidder timeouts](https://rtblint.org/guides/openrtb-tmax-timeouts/) - [bid.adm vs nurl](https://rtblint.org/guides/openrtb-adm-vs-nurl/) - [First-price vs second-price auctions](https://rtblint.org/guides/openrtb-first-price-vs-second-price/) - [OpenRTB deals and PMP](https://rtblint.org/guides/openrtb-deals-pmp/) - [OpenRTB user identity: eids and buyeruid](https://rtblint.org/guides/openrtb-user-identity-eids/) - [sellers.json, ads.txt, and schain: the supply chain trust stack](https://rtblint.org/guides/openrtb-supply-chain-trust-stack/) - [Migrating to SupplyChain v1.1: hp=0 custody nodes](https://rtblint.org/guides/openrtb-schain-1-1-migration/) - [Agentic buying and OpenRTB](https://rtblint.org/guides/agentic-buying-openrtb/) - [IAB Tech Lab's agentic advertising standards](https://rtblint.org/guides/iab-agentic-advertising-standards/) - [ARTF explained: the Agentic RTB Framework](https://rtblint.org/guides/artf-explained/) - [The Ad Context Protocol (AdCP), explained](https://rtblint.org/guides/ad-context-protocol-explained/) - [From an AdCP media buy to an OpenRTB bid request: the mapping](https://rtblint.org/guides/adcp-to-openrtb/) ## Answers One page per question, each opening with a direct, self-contained answer. - [OpenRTB answers index](https://rtblint.org/answers/) - [What is supply path optimization (SPO)?](https://rtblint.org/answers/what-is-supply-path-optimization/) - [What is bid shading and how does it work?](https://rtblint.org/answers/what-is-bid-shading/) - [What is curation in programmatic advertising?](https://rtblint.org/answers/what-is-curation-in-programmatic/) - [What are MFA (made for advertising) sites?](https://rtblint.org/answers/what-are-mfa-sites/) - [How do I build an OpenRTB bidder endpoint?](https://rtblint.org/answers/how-to-build-an-openrtb-bidder/) - [How does DOOH work in OpenRTB?](https://rtblint.org/answers/openrtb-dooh/) - [How do audio ads work in OpenRTB?](https://rtblint.org/answers/openrtb-audio-ads/) - [What is ID bridging in programmatic advertising?](https://rtblint.org/answers/what-is-id-bridging/) - [Why is my fill rate low?](https://rtblint.org/answers/why-is-my-fill-rate-low/) - [Is bidstream data personal data under GDPR?](https://rtblint.org/answers/is-bidstream-data-personal-data/) - [What does User-Agent deprecation mean for OpenRTB?](https://rtblint.org/answers/openrtb-user-agent-deprecation/) - [Where is the official OpenRTB spec?](https://rtblint.org/answers/where-is-the-openrtb-spec/) ## Blog - [OpenRTB news and analysis](https://rtblint.org/blog/): timely coverage of spec releases (2.6 dated snapshots), IAB Tech Lab updates, GPP and DSA privacy signals, CTV pod bidding, and protocol migration state; RSS at https://rtblint.org/feed.xml - [A spec-valid video bid can still fill with empty VAST.](https://rtblint.org/blog/video-bid-is-not-vast-proof/): the auction ends at bid.adm; wrapper 303, SIMID without MediaFile, and companions without width are tag failures the OpenRTB linter never sees - [SupplyChain v1.1 adds nodes that never touch the money. Most schain checks assume those cannot exist.](https://rtblint.org/blog/supplychain-1-1-hp-zero-nodes/): the proposed hp=0 custody node, the ver and complete changes, which schain checks stop being correct, and what to fix before public comment closes on August 21, 2026 - [The agentic protocols shipped a version handshake. A bid request still has nowhere to say which OpenRTB it is.](https://rtblint.org/blog/agentic-version-negotiation-openrtb-gap/): AdCP 3.1's adcp_version, supported_versions and VERSION_UNSUPPORTED compared with OpenRTB's out-of-band version agreement, and how to pin a dated snapshot per integration - [CTV runs at 65 percent of commercial capacity. Part of that gap is demand that could not read the request.](https://rtblint.org/blog/ctv-capacity-gap-bid-request-quality/): why unsold and unparseable land in the same bucket in a seller's fill rate, the OpenRTB pod fields that carry CTV's unsold slots, and the AdCOM 1.0-202607 enums that new CTV formats depend on - [ARTF lets agents rewrite the bid request in flight. Nothing in it checks the result.](https://rtblint.org/blog/artf-mutations-bid-request-validation/): the Agentic RTB Framework's eight mutation intents mapped onto the OpenRTB fields they touch, and where to put the conformance check ## Source - [GitHub](https://github.com/aleksUIX/rtblint): Rust core, CLI, and rule catalog ## Sister tools - VAST live tag tester: https://vastlint.org/tester/ - VAST wrapper inspector: https://vastlint.org/inspect/ - VAST XML validator: https://vastlint.org/validate/