Digital Turbine Exchange

Digital Turbine runs DT Exchange (DTX), a mobile in-app exchange. Its older DSP onboarding form and content guidelines still carry the Fyber name.

Direction and version

DT Exchange sends bid requests to DSPs, and DSPs return bid responses to DT.

The guide supports OpenRTB 2.2, 2.3, and 2.5, and its tables also list newer fields such as imp.rwdd and imp.video.plcmt. Flags are 0 or 1 integers except the JSON boolean bid.ext.dspdualendcard, and Native 1.2 requests appear as an object in imp.native or a JSON string in imp.native.request.

The RTBlint profile digital-turbine checks requests and responses against the published contract.

Rules beyond the OpenRTB spec

  • DT supports only USD.
  • ${AUCTION_PRICE} must appear in nurl, burl, or a tracking pixel in adm. ${AUCTION_MIN_TO_WIN} is substituted only in nurl.
  • Responses need seatbid.seat, cid, crid, and adomain. The current guide and older DT pages disagree on whether attr, cat, and bid.ext.crtype are mandatory.
  • A response dealid must reference a deal in the matching impression.
  • Rewarded playable responses need creative attribute 13 when the request offers that format.
  • Auto Store bids need a store listing ID in bid.bundle or bid.ext.skadn.itunesitem, and dual end cards need the advertised app bundle.
  • SKAdNetwork versions start at 2.0. Versions 2 and 3 use campaigns 1 to 100, version 4 uses a four-digit sourceidentifier from 0001 to 9999, nonces are UUIDs, and timestamps are Unix milliseconds as strings.
  • The request's imp.ext.skadn.sourceapp matches app.bundle, and skadnetids should list 10 IDs or fewer.
  • app.ext.fmwname is unity or native, app.ext.storesubcat holds at most three strings, user percentages run from 0 to 100, and a supply chain needs at least one node.
  • Unsupported attributes and unknown creative type strings are ignored rather than rejected. DT publishes its own loss code 1010 for a malformed bundle.

Documented extensions

PathMeaning
imp.ext.skadnSKAdNetwork request data.
imp.ext.brsrclkWhether an external browser is available for clicks.
imp.ext.dplWhether deep links are supported.
imp.video.ext.mraidendcardWhether an MRAID end card is supported.
app.ext.fmwnameApp framework, unity or native.
app.ext.storecatStore category of the app.
device.ext.attsApp Tracking Transparency status.
device.ext.batterylevelBattery level bucket, 1 to 8.
user.ext.impdepthImpressions shown in the current session.
bid.ext.crtypeMarkup type: HTML, MRAID 1.0 to 3.0, VAST 2.0 or 3.0, or Playable.
bid.ext.skadnSKAdNetwork response; version is required.
bid.ext.dspdualendcardJSON boolean that turns on the dual end card for the bid.

What the validator checks for this profile

Loss and status codes

Validate against this contract

Open the tester with the Digital Turbine Exchange profile, or run:

rtblint validate --profile digital-turbine request.json

Similar integrations