Index Exchange DSP

Index Exchange, also written as Index or IX, runs a sell-side ad exchange. This profile covers the requests Index sends to demand-side platforms and the responses DSPs return. Supply sent into Index is the separate index-exchange-seller profile.

Direction and version

Index sends bid requests to DSPs, and DSPs return bid responses to Index.

The DSP guide does not pin one OpenRTB version; it describes 2.6 fields with AdCOM 1.0 lists and Native 1.2. Flags are 0 or 1 integers, and Native requests are JSON strings in imp.native.request.

The RTBlint profile index-exchange checks requests and responses against the published contract.

Rules beyond the OpenRTB spec

  • Index prices requests in USD: cur and bidfloorcur are always USD.
  • Second-price auctions (at 2) are not supported. Deals use at 1 or 3, where 3 is a fixed price.
  • Responses need adomain unless the impression is passed on, and each advertiser domain is limited to 128 characters.
  • seatbid.seat is required by default and holds a numeric seat ID. Index can turn the requirement off for a DSP.
  • Banner creative dimensions must match one of the fixed sizes offered in imp.banner.format.
  • Native markup in adm must be wrapped in an outer native object.
  • A SKAdNetwork response must use a network ID the request offered, and bid.ext.skadn.itunesitem must match bid.bundle.
  • When billing notices are enabled, burl must contain ${AUCTION_PRICE}, and only impressions tracked through burl are billable.
  • Deal discounts in imp.pmp.deals[].ext.disc are fractions from 0.01 to 1.0, and probability metrics in imp.metric run from 0.0 to 1.0.
  • DSA names in bid.ext.dsa are limited to 100 characters. If the request is secure and adm loads insecure content, Index discards the impression.

Documented extensions

PathMeaning
source.ext.sourceTypeHow the request reached Index: 1 not header bidding, 2 client-side, 3 server-side.
source.ext.sourceOriginWhere the request came from, such as direct, another SSP, Amazon TAM, Google Open Bidding, Prebid, or the IX wrapper.
source.ext.omidpnOpen Measurement partner name.
imp.pmp.deals[].ext.discDiscount applied to the deal.
imp.ext.skadnSKAdNetwork request data; raw network IDs preferably go in skadnetlist.addl.
device.ext.ifviOS identifier for vendors.
device.ext.attsApp Tracking Transparency status.
regs.ext.dsaDigital Services Act requirements.
user.ext.consentTCF consent string in its legacy location.
user.eids[].ext.rtipartnerName of the identity provider.
bid.ext.skadnSKAdNetwork response data.
bid.ext.dsaDSA transparency returned by the buyer.

What the validator checks for this profile

Validate against this contract

Open the tester with the Index Exchange DSP profile, or run:

rtblint validate --profile index-exchange request.json

Similar integrations