ibiza
CPM · CTR …
/

OpenRTB: что это за протокол и как устроены запрос и ответ

≈ 3 мин чтения · обновлено

OpenRTB — открытый стандарт IAB Tech Lab, описывающий, как биржи и SSP передают покупателям запрос на рекламный показ и как DSP отвечают ставкой. Протокол задает транспорт (HTTP, обычно POST с JSON), набор объектов и полей, единицы цены, уведомления о выигрыше и отказ от участия. Благодаря ему одна DSP может торговаться на десятках бирж без отдельной интеграции под каждую.

Версии OpenRTB

Версия Что важно
2.3–2.4 нативная реклама (2.3), аудио и объект метрик imp.metric (2.4)
2.5 уведомления burl и lurl, объект source
2.6 поддержка CTV и рекламных пауз (pod), source.schain в основном объекте, перечни кодов вынесены в AdCOM; с 2.6-202211 обновления без смены номера версии выходят регулярно, примерно раз в месяц
3.0 новая структура с отдельной моделью AdCOM; распространения почти не получила

Большинство платформ в России и мире работает с 2.5 или 2.6 и расширениями в полях ext.

Из чего состоит запрос

Bid request — объект BidRequest, внутри которого:

  • id — уникальный идентификатор аукциона;
  • imp[] — места показа: формат (banner, video, native, audio), tagid, bidfloor и bidfloorcur;
  • app или site — где будет показ;
  • device — ОС, модель, IP, рекламный идентификатор ifa;
  • user, regs — пользователь и регуляторные признаки;
  • at — тип аукциона: 1 — первая цена, 2 — вторая цена плюс (по умолчанию);
  • tmax — сколько миллисекунд биржа ждет ответ, см. tmax;
  • cur, bcat, badv — допустимые валюты и блокировки.

Из чего состоит ответ

{
  "id": "1234567890",
  "seatbid": [{
    "seat": "512",
    "bid": [{
      "id": "1",
      "impid": "102",
      "price": 9.43,
      "adm": "<img src=\"…\">",
      "adomain": ["example.com"],
      "crid": "cr-31",
      "nurl": "https://dsp.example/win?id=1&p=${AUCTION_PRICE}",
      "burl": "https://dsp.example/bill?id=1&p=${AUCTION_PRICE}",
      "lurl": "https://dsp.example/loss?id=1&r=${AUCTION_LOSS}"
    }]
  }],
  "cur": "USD"
}
  • price — ставка в CPM; обязательное поле.
  • adm — разметка креатива; если есть и adm, и разметка в ответе на nurl, приоритет у adm.
  • nurl, burl, lurl — URL уведомлений о выигрыше, оплачиваемом событии и проигрыше. Подробнее — в статье про win notice.

Макросы подстановки

Перед вызовом URL биржа заменяет макросы значениями:

Макрос Значение
${AUCTION_ID} BidRequest.id
${AUCTION_IMP_ID} imp.id выигранного места
${AUCTION_PRICE} цена списания в той же валюте и единицах, что и ставка
${AUCTION_CURRENCY} валюта ставки
${AUCTION_LOSS} код причины проигрыша
${AUCTION_MIN_TO_WIN} минимальная ставка, которой хватило бы для выигрыша (2.6)

Значения можно шифровать (например, цену), алгоритм стороны согласуют между собой — спецификация его не задает.

OpenRTB в Ibiza

Биржа Ibiza работает по OpenRTB 2.6: принимает запросы от источников трафика и рассылает их demand-партнерам с заголовком X-OpenRTB-Version: 2.6. DSP Ibiza отвечает на базе 2.5 с отдельными полями 2.6 (например, mtype — тип креатива) и указывает в ответе X-OpenRTB-Version: 2.5. Поддерживаемые поля и расширения описаны в документации по интеграции предложения.

Ошибки при интеграции

  • Путать CPM и цену за показ. price: 9.43 — ставка за тысячу показов, то есть 0,00943 USD за один показ.
  • Игнорировать bidfloorcur. Флор в рублях и ставка в долларах без пересчета дают отклоненные ответы.
  • Отвечать 200 с пустым seatbid. Работает, но тратит трафик; HTTP 204 — штатный no-bid.
  • Полагаться на ext без договоренности. Поля расширений у каждой биржи свои.

Как проходит весь цикл торгов — в статье про RTB.

Частые вопросы

Какую версию OpenRTB используют чаще всего?

На практике — ветку 2.x: 2.5 и 2.6. Версия 3.0 с моделью AdCOM широкого распространения не получила, поэтому IAB Tech Lab продолжает развивать 2.6.

Как в OpenRTB ответить «не буду ставить»?

Вернуть пустой ответ с HTTP 204 No Content. Спецификация называет это самым экономным способом сообщить no-bid; можно также вернуть ответ с кодом причины в поле nbr.

В какой валюте и за что указывается цена в OpenRTB?

bid.price и imp.bidfloor — за тысячу показов (CPM), хотя сделка заключается за один показ. Валюта — ISO-4217, по умолчанию USD, если не указано иное.