OpenRTB examples

OpenRTB video bid response example

A realistic CTV video bid response: VAST markup inline in adm, mtype declared, and win/billing/loss notices carrying macros.

The payload

{
  "id": "9d2f3a7e-ctv-pod",
  "bidid": "resp-77120",
  "cur": "USD",
  "seatbid": [
    {
      "seat": "dsp-acme",
      "group": 0,
      "bid": [
        {
          "id": "bid-1",
          "impid": "1",
          "price": 21.4,
          "adid": "cr-90341",
          "nurl": "https://dsp.example.com/win?p=${AUCTION_PRICE}",
          "burl": "https://dsp.example.com/bill?p=${AUCTION_PRICE}",
          "lurl": "https://dsp.example.com/loss?r=${AUCTION_LOSS}",
          "adm": "<VAST version='4.2'><Ad id='cr-90341'><Wrapper><AdSystem>acme-dsp</AdSystem><VASTAdTagURI><![CDATA[https://dsp.example.com/vast/cr-90341]]></VASTAdTagURI><Impression><![CDATA[https://dsp.example.com/imp]]></Impression></Wrapper></Ad></VAST>",
          "adomain": ["acmesnacks.com"],
          "crid": "cr-90341",
          "cid": "camp-221",
          "cat": ["IAB8"],
          "cattax": 1,
          "language": "en",
          "w": 1920,
          "h": 1080,
          "dur": 30,
          "mtype": 2,
          "apis": [7],
          "protocol": 8
        }
      ]
    }
  ]
}

Open this payload in the tester to validate it live, change fields, and watch which rules fire.

What to notice

  • adm carries the VAST document itself; mtype: 2 declares it as video so nothing downstream has to sniff.
  • nurl, burl, and lurl each carry substitution macros; the exchange expands them at win, billing, and loss time.
  • impid echoes the request's imp.id exactly; a response is only as valid as the request it answers.

More examples