Docs

Rule reference

Every issue carries a stable 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.

Issue codes are not the whole rule set

The thirteen ids below are the diagnostic codes: the kinds of finding rtblint can report. They are not the body of rules. Each code is parameterized by the object, field, and version that tripped it, and the knowledge behind them comes from two sources:

  • 62 versioned rules across OpenRTB 2.0 through 3.0, each with its own code (for example openrtb.2.2.regs.coppa or openrtb.2.3.imp.native) describing a field that was added, deprecated, moved, removed, or corrected in a specific release.
  • Per-version object catalogs defining every object and field. The 2.6-202505 catalog alone covers 38 objects and roughly 380 fields; across all 17 tracked versions that is 447 objects and over 10,000 field definitions. Every presence, type, enum, and undefined-field check is driven by these.

So a single code like openrtb.type.mismatch stands behind hundreds of concrete field checks. The table is the taxonomy; the catalog is the coverage.

Diagnostic codes

Rule idSeverityMeaning
openrtb.payload.invalid_jsonerrorThe payload is not parseable JSON. No field rules run until this is fixed.
openrtb.payload.root_not_objecterrorThe JSON parses but the root is not an object. A bid request must be a single JSON object.
openrtb.field.requirederrorA field the specification marks as required is missing at this path.
openrtb.field.undefinederrorThe field is not defined in the canonical OpenRTB catalog for the selected version. Usually a typo or an invented key.
openrtb.field.deprecatedwarningThe field still parses but is deprecated in the selected version. Migrate to its replacement.
openrtb.field.movederrorThe field moved to a different path in this version, for example regs.ext.gdpr to regs.gdpr.
openrtb.field.removederrorThe field was removed in the selected version and is no longer valid.
openrtb.field.not_yet_availableerrorThe field belongs to a later version than the one selected, so it is not valid against this snapshot.
openrtb.field.requires_skippable_videoerrorThe field only applies to skippable video and was used where skippability is not in effect.
openrtb.fields.mutually_exclusiveerrorTwo fields that cannot coexist were both present. Keep one.
openrtb.imp.media_type.requirederrorAn impression has no media-type object. Each imp needs a banner, video, audio, or native object.
openrtb.type.mismatcherrorThe value has the wrong JSON type, for example a string where an integer is expected.
openrtb.value.invaliderrorThe value is outside the documented set or range for this field, such as an out-of-range enum.

Severities

An error means the payload is invalid against the selected version. A warning means it still parses but uses something deprecated you should migrate away from. The tester counts each separately so you can gate on errors and triage warnings.

See what rtblint checks for the categories behind these ids, or OpenRTB versions for how the selected snapshot changes which ids fire.