Documentation/Reference

Field and support matrix

Validated, matched, forwarded, and rejected fields in the current OpenRTB subset.

Contract reviewed · 2026-09-19

Reading this matrix

This is the current integration boundary, not a complete OpenRTB schema. Types describe what partners should send. Fields marked Forwarded do not receive full local type or semantic validation: forwarding does not make a wrong type valid or establish enforcement of media or privacy constraints.

Label Meaning
Validated ADX checks type, bounds, or correlation
Matched Used for routing, targeting, floors, or creative / seat filtering; may also be validated and forwarded
Forwarded Preserved as JSON values to the DSP, or within a bid to the SSP; not byte-for-byte preservation
Rewritten Changed when creating a downstream request or winning SSP response
Rejected Presence causes rejection, including explicit null, unless otherwise stated

Duplicate keys at every level, including escaped equivalents, invalid JSON, and reserved internal parser keys are rejected. Unknown fields are generally retained, but empty values cannot bypass explicitly rejected fields. Omission is different from null: validated optional fields generally reject explicit null or incorrect types.

Validated text has a UTF-8 byte limit, cannot consist entirely of whitespace, and cannot contain control characters; valid text is not automatically trimmed. Bounded string lists allow at most 64 entries of at most 512 bytes each; bad entries are not silently discarded. Attribute lists allow at most 64 integers in 1..4294967295. For prices, see DSP pricing.

Request root

Field Type / required Handling Limit or purpose
request object / yes Validated Raw SSP and rewritten downstream bodies are each at most 256 KiB
id string / yes Validated, forwarded 1–128 bytes; response correlation
at integer / yes Validated, rewritten Exactly 1, explicit first price
tmax integer / no Validated, rewritten 1–60000 ms; downstream receives remaining budget
cur string[] / no Validated, rewritten Omission means USD; otherwise exactly ["USD"]; set downstream
imp object[] / yes Validated, matched Exactly one object
app / site object / choose one Validated, matched, forwarded Exactly one; establishes source type
device object / no Validated, matched, forwarded Must be an object if present; see below
bcat string[] / no Validated, matched, forwarded Bounded list; exact comparison with bid.cat
badv string[] / no Validated, matched, forwarded Bounded list; ASCII case-insensitive comparison with bid.adomain
bapp string[] / no Validated, matched, forwarded Bounded list; exact comparison with bid.bundle
wseat / bseat string[] / no Validated, matched, forwarded Bounded lists; cannot both be nonempty; match original DSP seat, not DSP ID
cattax integer / no Validated, forwarded Only 1
wlang / wlangb / acat / durfloors any / forbidden Rejected Corresponding enforceable constraints are not implemented
test / allimps integer / no Forwarded Do not switch execution mode or allow multiple impressions
Other unlisted fields as agreed / no Forwarded No promise of associated auction semantics; agree before use

Device, app, and site

Field Type / required Handling Limit or purpose
device.os string / no Validated, matched, forwarded At most 512 bytes; matching uses ASCII lowercase
device.geo object / no Validated, forwarded Must be an object if present
device.geo.country string / no Validated, matched, forwarded Valid ISO alpha-2 / alpha-3. Country codes must be uppercase; matching uses alpha-2
device.geo.lat / lon number / no Forwarded Not used for local coordinate targeting
device.geo.region / city / zip string / no Forwarded No full geographical validation
device.ua / ip / ipv6 / ifa / make / model / osv / language string / no Forwarded Not local matching dimensions; send only within lawful data-use scope
device.dnt / lmt / devicetype / connectiontype / js integer / no Forwarded Does not establish local privacy or device-capability enforcement
device.sua / ext / other fields object or standard-defined type / no Forwarded Agree the relevant semantics separately
app.bundle string / no Validated, matched, forwarded At most 512 bytes; exact string, no case conversion
app.id / name / domain / storeurl / ver string / no Forwarded Do not replace SSP identity in the path
app.cat / sectioncat / pagecat string[] / no Forwarded Distinct from the locally enforced request.bcat restriction
app.publisher / content / ext / other fields object or standard-defined type / no Forwarded No guarantee of nested field validation
site.id / name / domain / page / ref / search string / no Forwarded Do not provide an App Bundle matching dimension
site.cat / sectioncat / pagecat string[] / no Forwarded Not used for local media-category blocking
site.publisher / content / ext / other fields object or standard-defined type / no Forwarded No guarantee of nested field validation

Country, OS, and App Bundle may be missing. Invalid present dimensions cannot turn into “missing” values to bypass matching. Matching normalization does not rewrite the original OS / country / bundle sent to a DSP.

Imp and media objects

Field Type / required Handling Limit or purpose
imp.id string / yes Validated, forwarded 1–128 bytes; bid.impid correlation
imp.banner / video / native object / choose one Validated, matched, forwarded Exactly one object, selecting format; null invalid
imp.bidfloor number / no Validated, rewritten Nonnegative USD CPM; omission means 0; rounds up to micro-units; downstream becomes gross floor
imp.bidfloorcur string / no Validated, rewritten Omission means USD; only explicit USD allowed; set downstream
imp.secure / instl / clickbrowser / exp integer / no Forwarded No independent secure-creative or rendering validation
imp.tagid / displaymanager / displaymanagerver string / no Forwarded Not local rule-matching dimensions
imp.metric object[] / no Forwarded Metric authenticity is not validated
imp.ext / other fields object or standard-defined type / no Forwarded No promise of extension auction semantics
imp.pmp / audio / qty / rwdd / durfloors any / forbidden Rejected These PMP, audio, quantity, and extension fields are unsupported
banner.battr / video.battr / native.battr integer[] / no Validated, matched, forwarded Bounded positive integer list; compared with bid.attr
Media btype / podid / podseq / poddur / maxseq / mincpmpersec / rqddurs / durfloors any / forbidden Rejected Rejected in each of the three media objects
banner.w / h / wmin / wmax / hmin / hmax / pos / topframe integer / no Forwarded Dimensions and placement are not fully checked; partners must validate
banner.format object[] / no Forwarded No full validation of candidate dimensions
banner.mimes string[] / no Forwarded DSP must honor media-type constraints
banner.api / expdir integer[] / no Forwarded No independent API / expansion validation
banner.id / ext / other fields standard-defined type / no Forwarded Full Banner schema not enforced
video.mimes string[] / per media agreement Forwarded Supply according to IAB and player capabilities; not fully validated by ADX
video.protocols / api / playbackmethod / delivery / companiontype integer[] / no Forwarded No independent VAST or player-capability verification
video.minduration / maxduration / w / h / linearity / placement / plcmt / startdelay / skip / skipmin / skipafter / minbitrate / maxbitrate / pos integer / no Forwarded Full media restrictions not enforced; does not imply POD support
video.companionad object[] / no Forwarded No recursive guarantee of full Banner support
video.ext / other fields standard-defined type / no Forwarded VAST contents are not independently validated
native.request string (serialized Native JSON) / per media agreement Forwarded Inner asset request is not parsed; partners validate Native version and assets
native.ver string / no Forwarded Example uses 1.2; not a claim of full Native 1.2 validation
native.api / ext / other fields standard-defined type / no Forwarded Full Native schema not enforced

User, regs, source, and extensions

Field Type / required Handling Limit or purpose
user object / no Forwarded Not used for local user matching; object and child fields not fully validated
user.id / buyeruid / keywords / customdata string / no Forwarded Send only within authorized data-use scope
user.geo / ext, user.data object / object[] / no Forwarded Includes consent extensions; not a compliance decision
regs object / no Forwarded Regulatory semantics are not fully validated
regs.coppa / gdpr, regs.gpp / gpp_sid / ext integer / string / integer[] / object, by field / no Forwarded Partners must honor applicable restrictions; no automatic legality guarantee
source object / no Forwarded Not the authenticated identity source
source.fd / tid / pchain / schain / ext integer / string / object, by field / no Forwarded No independent endorsement of supply-chain authenticity
ext object / no Forwarded Root and otherwise unhandled nested extensions are generally retained, without implicit new support

For full standard semantics, see IAB OpenRTB and Native Ads. Forwarding privacy fields does not independently validate regulatory compliance. Partners must establish lawful collection, transmission, use, and creative rendering.

DSP response and seatbid

Field Type / required Handling Limit or purpose
response object / for a 200 bid response Validated, rebuilt At most 512 KiB; root errors reject the entire DSP response
response.id string / yes Validated, rebuilt 1–128 bytes; must equal request.id
response.cur string / no Validated, rewritten Omission means USD; only explicit USD allowed; set in SSP response
response.seatbid object[] / no Validated, rebuilt Omitted or empty means no bid; at most 64 seats; SSP receives only the winner
response.bidid / nbr / customdata / ext / other fields standard-defined type / no Not retained SSP response root rebuilt as id, cur, seatbid
seatbid.seat string / conditional Validated, matched, retained At most 512 bytes; a seat allow/block list requires a determinable identity
seatbid.group integer / no Validated, filtered Unsigned integer; nonzero excludes the entire seat; grouped acceptance unsupported
seatbid.bid object[] / yes Validated, rebuilt At most 64 per seat and 64 total; empty array means no bid
seatbid.ext / other fields standard-defined type / no Not retained Output seat contains only seat (if present) and the winning bid

An invalid seat object, seat type, group type, bid array, or overall count rejects the entire DSP response. A failed individual bid check below only drops that bid and does not hide a valid sibling bid.

Bid fields

Field Type / required Handling Limit or purpose
bid.id string / yes Validated, retained 1–128 bytes; also used for stable equal-price ordering
bid.impid string / yes Validated, retained 1–128 bytes; must match the single imp.id
bid.price number / yes Validated, auctioned, rewritten DSP gross must remain positive after rounding down and meet floor; SSP output is net
bid.cur string / no Validated, retained USD only; cannot override an invalid response currency
bid.adm string / yes Validated, macro-replaced, retained Not whitespace-only, at most 256 KiB, no NUL; newlines allowed; full creative contents not parsed
bid.nurl / burl / lurl string / no Validated, macro-replaced, retained At most 8192 bytes each, general text rules; not full URL validation; ADX does not call them
bid.adomain / cat string[] / conditional Validated, matched, retained Bounded lists; badv / bcat require a nonempty corresponding identity list
bid.attr integer[] / conditional Validated, matched, retained Bounded positive integer list; battr requires the field to exist, but an empty array is allowed
bid.crid string / no Validated, matched, retained At most 512 bytes; supplied to creative-blocking rules
bid.bundle string / conditional Validated, matched, retained At most 512 bytes; required when bapp is nonempty
bid.cattax integer / no Validated, retained Only 1
bid.dealid / podid / slotinpod any / forbidden Bid rejected Deals and PODs unsupported
bid.adid / cid / iurl / language string / no Retained Does not establish independent identity or creative verification
bid.w / h / api / protocol / qagmediarating / exp integer / no Retained Full media response validation is not performed
bid.ext / other fields object or standard-defined type / no Retained Preserved in the winning bid without promising support for unknown constraints

Creative adomain, category, crid, and advertised Bundle also participate in configured creative blocking. If the rewritten winning response exceeds 512 KiB, that bid is dropped and a valid lower bid may still win; no remaining winner yields 204. See DSP integration for the distinction between bid price and ${AUCTION_PRICE}.

Protocol and implementation checked: 2026-09-19.

Search documentation

Search fields, guides and examples.