Unity Exchange

Unity Exchange is Unity's programmatic exchange for in-app inventory. DSPs receive its bid requests and bid in a first-price auction.

Direction and version

Unity Exchange sends bid requests to DSP bidders over HTTPS, and bidders return bid responses to Unity.

Unity's pages mix OpenRTB 2.6 integration guidance with OpenRTB 2.5 field descriptions. Flags are 0 or 1 integers, and Native is not documented.

The RTBlint profile unity checks requests and responses against the published contract.

Rules beyond the OpenRTB spec

  • Each request carries exactly one impression whose imp.id is the string "1". at is 1 (first price) and imp.secure is 1.
  • Video requests use minduration 5, maxduration 30, pos 7, and placement 1 or 5. Banner-only impressions set instl to 0, and video impressions set it to 1.
  • Responses need cur, seatbid.seat, adm, cat, and bid.ext.crtype. The creative type is a case-insensitive name such as VAST 3.0, MRAID 2.0, BANNER, or HTML.
  • price must be above zero with at most three decimal places.
  • adomain holds exactly one root domain with no protocol, path, or www prefix. Other subdomains are allowed.
  • Tracking needs burl, or nurl together with bid.ext.imptrackers. Unity returns loss code 1011 when both are missing.
  • App ads need bid.bundle and bid.ext.storeurl, and banner bids need w and h.
  • A dealid must match a deal offered on the impression.
  • SKAdNetwork responses must match the impression's sourceapp and one of its skadnetids, and bid.ext.skadn.itunesitem must match bid.bundle. Versions 2 and 3 use campaign strings from 1 to 100, and version 4 uses a four-digit sourceidentifier.
  • Unity publishes its own loss codes from 1000 upward in ${AUCTION_LOSS}, such as 1004 for a missing crtype.

Documented extensions

PathMeaning
imp.ext.skadnSKAdNetwork data, sent only when the DSP's network ID is in the app's list.
imp.ext.skadn.skoverlayWhether SKOverlay is allowed.
imp.ext.skadn.productpageWhether custom product pages are allowed.
imp.ext.skadn.ext.askWhether Auto StoreKit is allowed.
source.ext.omidpnOpen Measurement partner name, Unity3d.
source.ext.header_bidding1 for bidding traffic, 0 for waterfall.
device.ext.ifviOS identifier for vendors.
device.ext.attsApp Tracking Transparency status, 0 to 3.
bid.ext.crtypeRequired creative type of the markup.
bid.ext.storeurlApp store URL of the advertised app.
bid.ext.imptrackersImpression tracker URLs.
bid.ext.skadnSKAdNetwork response, including SKOverlay settings and the product page ID.

What the validator checks for this profile

Loss and status codes

Validate against this contract

Open the tester with the Unity Exchange profile, or run:

rtblint validate --profile unity request.json

Similar integrations