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 innurl,burl, or a tracking pixel inadm.${AUCTION_MIN_TO_WIN}is substituted only innurl.- Responses need
seatbid.seat,cid,crid, andadomain. The current guide and older DT pages disagree on whetherattr,cat, andbid.ext.crtypeare mandatory. - A response
dealidmust 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.bundleorbid.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
sourceidentifierfrom 0001 to 9999, nonces are UUIDs, and timestamps are Unix milliseconds as strings. - The request's
imp.ext.skadn.sourceappmatchesapp.bundle, andskadnetidsshould list 10 IDs or fewer. app.ext.fmwnameis unity or native,app.ext.storesubcatholds 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
| Path | Meaning |
|---|---|
imp.ext.skadn | SKAdNetwork request data. |
imp.ext.brsrclk | Whether an external browser is available for clicks. |
imp.ext.dpl | Whether deep links are supported. |
imp.video.ext.mraidendcard | Whether an MRAID end card is supported. |
app.ext.fmwname | App framework, unity or native. |
app.ext.storecat | Store category of the app. |
device.ext.atts | App Tracking Transparency status. |
device.ext.batterylevel | Battery level bucket, 1 to 8. |
user.ext.impdepth | Impressions shown in the current session. |
bid.ext.crtype | Markup type: HTML, MRAID 1.0 to 3.0, VAST 2.0 or 3.0, or Playable. |
bid.ext.skadn | SKAdNetwork response; version is required. |
bid.ext.dspdualendcard | JSON boolean that turns on the dual end card for the bid. |
What the validator checks for this profile
openrtb.profile.digital_turbine.array_emptyDT supply chain needs at least one node.openrtb.profile.digital_turbine.clicktrackersDT display Auto Store and SKOverlay click firing needs a nonempty tracker list.openrtb.profile.digital_turbine.creative_typeDT ext.crtype must identify the creative type when supplied.openrtb.profile.digital_turbine.currencyDT supports only USD.openrtb.profile.digital_turbine.deal_mismatchDT response dealid must reference a deal in the matched impression.openrtb.profile.digital_turbine.frameworkDT reports its app framework as unity or native.openrtb.profile.digital_turbine.macro_contextDT supports AUCTION_MIN_TO_WIN only in nurl.openrtb.profile.digital_turbine.native_assetDT Native producer asset IDs 1 through 7 identify title, main image, video, icon, description, rating and CTA respectively.openrtb.profile.digital_turbine.native_versionDT Native requests use version 1.2.openrtb.profile.digital_turbine.percentageDT user percentages range from 0 through 100.openrtb.profile.digital_turbine.playable_attrDT Rewarded Playable responses require creative attribute 13.openrtb.profile.digital_turbine.price_macroDT requires AUCTION_PRICE in nurl, burl or an adm tracking pixel.openrtb.profile.digital_turbine.producer_valueDT producer field contains a value outside its documented emitted subset.openrtb.profile.digital_turbine.skadn_campaignDT SKAdNetwork 2 and 3 campaign ranges 1 through 100.openrtb.profile.digital_turbine.skadn_mismatchDT request SKAdNetwork sourceapp must match app.bundle.openrtb.profile.digital_turbine.skadn_nonceDT attribution nonce must be a UUID string.openrtb.profile.digital_turbine.skadn_sourceidentifierDT SKAdNetwork 4 sourceidentifier is a four-digit string from 0001 through 9999.openrtb.profile.digital_turbine.skadn_timestampDT attribution timestamp must be a decimal Unix millisecond string.openrtb.profile.digital_turbine.skadn_versionDT supports SKAdNetwork 2.0 and later.openrtb.profile.digital_turbine.source_conflictDT sources give conflicting, conditional or optional presence guidance; verify this field against your integration.openrtb.profile.digital_turbine.store_categoriesDT caps store subcategories at three strings.openrtb.profile.digital_turbine.store_idDT Auto Store requires a store listing ID in bundle or SKAdNetwork itunesitem.
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
- Adform OpenRTB handler
- AppLovin ALX DSP response
- BidSwitch buyer 5.7
- Display & Video 360
- Equativ bidder contract
- Google Authorized Buyers
- Index Exchange DSP
- InMobi DSP
- Magnite DV+ xAPI
- Microsoft Monetize bidder
- MobileFuse in-app bidding
- MobileFuse SDK bidding
- Sovrn request
- Unity Exchange
- Vungle Exchange
- Yandex SDK bidding