Multi-format impressions with banner, video, audio, and native in one imp

An imp can carry banner, video, audio, and native objects at once. Each object offers the same slot in another format, and any bid must fit exactly one of them. In OpenRTB 2.6 the bidder names its choice in Bid.mtype: 1 banner, 2 video, 3 audio, 4 native.

One imp, several offers

The specification lets the publisher offer one format, which is the usual case, or mix them. The presence of a media object is the offer. Everything else on the Imp applies to every format at once: imp.bidfloor, imp.pmp, imp.secure, imp.instl, and imp.tagid.

{
  "id": "c8d3e1f0-7a2b-4c5d-9e6f-0a1b2c3d4e5f",
  "at": 1,
  "tmax": 300,
  "cur": ["USD"],
  "imp": [
    {
      "id": "1",
      "tagid": "article-mid-1",
      "secure": 1,
      "bidfloor": 1.5,
      "bidfloorcur": "USD",
      "banner": {
        "format": [{ "w": 300, "h": 250 }, { "w": 336, "h": 280 }]
      },
      "video": {
        "mimes": ["video/mp4"],
        "protocols": [7, 11, 13],
        "plcmt": 4,
        "w": 300,
        "h": 250,
        "minduration": 6,
        "maxduration": 30,
        "durfloors": [
          { "maxdur": 15, "bidfloor": 6.0 },
          { "mindur": 16, "bidfloor": 9.0 }
        ]
      },
      "native": {
        "ver": "1.2",
        "request": "{\"ver\":\"1.2\",\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":90}},{\"id\":2,\"required\":1,\"img\":{\"type\":3,\"wmin\":300,\"hmin\":250}}]}"
      }
    }
  ],
  "site": {
    "id": "site-4410",
    "domain": "trailguide.example",
    "page": "https://trailguide.example/gear/winter-boots",
    "publisher": { "id": "pub-208" }
  }
}

This in-article slot takes a 300x250 or 336x280 banner, a standalone outstream video (plcmt 4, No Content/Standalone) of 6 to 30 seconds, or a native ad with a title and a main image. The native request is a JSON string inside the JSON, as the native request post explains.

Banner objects inside Video.companionad are not a separate banner offer. They describe companion ads that travel with the VAST response. An imp is a banner offer only when imp.banner itself is present.

mtype tells the exchange which offer you took

mtypeFormatExpected in admMust be offered as
1BannerHTML or JavaScript markupimp.banner
2VideoVAST XMLimp.video
3AudioVAST XML (DAAST in older integrations)imp.audio
4NativeNative markup response as JSONimp.native
{
  "id": "c8d3e1f0-7a2b-4c5d-9e6f-0a1b2c3d4e5f",
  "cur": "USD",
  "seatbid": [
    {
      "seat": "agency-977",
      "bid": [
        {
          "id": "b-31",
          "impid": "1",
          "price": 7.2,
          "mtype": 2,
          "dur": 15,
          "protocol": 13,
          "adm": "<VAST version=\"4.2\">...</VAST>",
          "adomain": ["northpeak-outfitters.com"],
          "crid": "cr-v-77",
          "w": 300,
          "h": 250
        }
      ]
    }
  ]
}

The bid takes the video offer: mtype 2, VAST 4.2 markup, and a 15-second creative in Bid.dur. Before 2.6 there was no mtype, and an exchange had to work out the format by inspecting the markup. Wrappers still differ on what they do without it. The Prebid.js ortbConverter discards a bid with no mtype unless the adapter has set the media type itself. Prebid Server adapters label each bid with a media type in code, and the server returns it as seatbid[].bid[].ext.prebid.type.

Floors per format

imp.bidfloor is a single floor for every offered format, in imp.bidfloorcur (default USD). That currency also applies to the other floors inside the Imp. OpenRTB has no banner-only or native-only floor field. Video and audio have two ways to vary the floor:

FieldSinceWhat it floors
imp.video.durfloors, imp.audio.durfloors2.6-202309Bids in that format, by creative duration range
imp.video.mincpmpersec, imp.audio.mincpmpersec2.6The dynamic part of an ad pod, per second of ad time
Deal.durfloors, Deal.mincpmpersec2.6-202309The same, for video or audio bids on one deal

In the example, a banner or native bid must clear 1.50. A video bid of up to 15 seconds must clear 6.00 and a longer one 9.00, through the DurFloors.bidfloor entries. A creative outside every range falls back to the Imp floor. The specification puts no constraints on the ranges and leaves overlaps for buyer and seller to settle. A bidder that reads only imp.bidfloor will price a 30-second video against 1.50 when the seller asked for 9.00. The floors reference covers currencies and deal floors.

Prebid.js fills the gap with an extension. When its Price Floors module resolves different floors per media type, it writes them to imp.banner.ext.bidfloor, imp.video.ext.bidfloor, and imp.native.ext.bidfloor, and per size to imp.banner.format[].ext.bidfloor, each with an ext.bidfloorcur. These are not OpenRTB fields. A bidder has to read them on purpose.

How exchanges validate a multi-format bid

OpenRTB does not rank formats. Bids in different formats for the same imp compete in one auction, and any preference for video over banner is exchange or publisher policy. What an exchange can check is whether the bid fits the offer it claims:

A bid with adm and no mtype on a 2.6 request draws the warning openrtb.bid.mtype_missing.

Bidders and wrappers that handle one format

Not every bidder accepts every offer. Prebid Server (Go) wraps each adapter in a filter driven by the bidder's info file. Media types the bidder does not support for site, app, or DOOH traffic are removed from the imp before the adapter sees it, and an imp with nothing left is dropped. A bidder whose info file sets multiformat-supported: false receives one media type per imp, chosen by ext.prebid.biddercontrols.{bidder}.prefmtype. Without a preferred type, the server removes the imp for that bidder. The Prebid Server extensions guide covers the rest of the request.

In Prebid.js, an ad unit whose mediaTypes lists banner, video, and native becomes one imp with all three objects when the adapter uses the shared ortbConverter. An adapter can pass a single mediaType in the converter context to build a one-format imp instead. The Prebid.js ortb2 guide walks through the converter.

Mistakes that get multi-format bids rejected

  • A constant mtype. One code path hard-codes 1 and then returns VAST on a video win.
  • A size the imp never listed. A 728x90 banner against an imp that offered 300x250 and 336x280 fails the size check, whatever the price.
  • Video priced against the Imp floor. The bid ignores durfloors and lands under the floor for its duration.
  • A creative outside the duration limits. A 45-second spot against a maxduration of 30 does not fit the video offer.
  • Treating companions as a banner offer. A banner bid on an imp whose only Banner objects sit in video.companionad answers an offer nobody made.
  • Native markup sent as HTML. mtype 4 promises the JSON response the native request described.

To see a format check fail, load the mismatched pair sample: it returns banner markup with mtype 1 against a video-only imp.

Sources

Questions people ask

Can one OpenRTB imp offer banner and video at the same time?

Yes. An Imp may carry banner, video, audio, and native objects together, and each one offers the same slot in that format. A bid must fit exactly one of the offered formats. In OpenRTB 2.6 the bidder says which one in Bid.mtype.

What are the Bid.mtype values?

1 is banner, 2 is video, 3 is audio, and 4 is native. The field arrived with OpenRTB 2.6. It must name a media object present on the imp the bid references, and the markup in adm must match it: HTML for banner, VAST XML for video and audio, and a native JSON response for native.

Can one imp carry a different floor for video and banner?

Only in part. Imp.bidfloor is one floor for every format. Video and audio can add duration floors in durfloors (2.6-202309) and a per-second floor for dynamic pods in mincpmpersec. OpenRTB has no banner-only or native-only floor. Prebid.js writes per-format floors to ext.bidfloor on each media object, which a bidder has to read on purpose.