Bid request в OpenRTB: структура запроса на ставку и пример
Bid request — сообщение, которое биржа или SSP отправляет покупателям (DSP), когда у площадки появляется рекламный показ. В нем описано, где и в каком формате будет показ, на каком устройстве, кому, по какой минимальной цене и сколько времени есть на ответ. По этим данным DSP решает, ставить ли и сколько. Формат запроса задает протокол OpenRTB.
Структура bid request по OpenRTB
Пример запроса на баннер в мобильном приложении:
{
"id": "f3b7c1d2-req",
"at": 1,
"tmax": 200,
"cur": ["RUB"],
"imp": [{
"id": "1",
"tagid": "home_banner_top",
"instl": 0,
"banner": { "w": 320, "h": 50, "pos": 1 },
"bidfloor": 35.0,
"bidfloorcur": "RUB",
"secure": 1
}],
"app": {
"id": "a-118",
"bundle": "ru.example.taxi",
"publisher": { "id": "pub-42" }
},
"device": {
"os": "android", "osv": "14", "make": "Samsung", "model": "SM-A546E",
"ifa": "…", "lmt": 0, "connectiontype": 6,
"geo": { "country": "RUS", "city": "Kazan" }
},
"user": { "id": "u-ex-77" },
"source": { "schain": { "complete": 1, "ver": "1.0", "nodes": [ … ] } }
}
Главные поля
| Поле | Зачем DSP |
|---|---|
id |
связать ставку, выигрыш и показ |
imp[].banner / video / native |
подобрать креатив подходящего формата |
imp[].tagid |
конкретное место размещения, ставки по слотам |
imp[].bidfloor, bidfloorcur |
минимальная цена в CPM |
app.bundle или site.domain |
идентификатор приложения или сайта: таргетинг, блок-листы |
device.ifa, lmt |
рекламный идентификатор и признак ограничения трекинга |
device.geo, connectiontype |
гео и тип соединения (6 — 4G) |
at |
тип аукциона: первая или вторая цена |
tmax |
лимит времени на ответ, мс |
source.schain |
цепочка посредников от площадки до DSP |
Полный список объектов — в статье про OpenRTB.
Что DSP делает с запросом
- Проверяет базовые фильтры: формат, ОС, гео, блокировки площадки.
- Ищет устройство в сегментах аудитории и частотных счетчиках.
- Оценивает показ: вероятность клика или конверсии, ожидаемую цену.
- Отвечает ставкой (
BidResponse) или HTTP 204, если ставить не будет.
Один запрос может содержать несколько imp — например, несколько слотов на экране. DSP вправе ставить на любые из них, каждая ставка ссылается на свой impid.
Bid request и ad request
Ad request — обращение SDK или тега к своему серверу: «дай рекламу». Bid request — то, во что сервер превращает это обращение, чтобы опросить покупателей. Одно обращение может породить много запросов: SSP рассылает его нескольким DSP, а иногда через несколько бирж, из-за чего один и тот же показ приходит покупателю дважды.
Что портит запрос
- Пустые поля. Без
app.bundle, гео или идентификатора покупатели не могут оценить показ — ставки ниже или их нет вовсе. - Флор без валюты. По спецификации
bidfloorcurпо умолчаниюUSD; если продавец имел в виду рубли и не указал валюту, флор окажется завышенным в десятки раз. - Неверный тип соединения или ОС. Ломает таргетинг покупателей и выглядит как подозрительный трафик.
- Слишком много запросов без ставок. Если DSP отвечает на малую долю запросов, имеет смысл согласовать с биржей фильтрацию на ее стороне — это экономит трафик обеим сторонам.
Где теряются запросы на пути к показу — в статье «Воронка RTB».
Частые вопросы
Что такое bid response?
Ответ DSP на bid request — объект BidResponse со ставкой (seatbid.bid.price), разметкой креатива и URL уведомлений. Если DSP ставить не будет, она возвращает HTTP 204 без тела.
Сколько bid request получает DSP?
Зависит от подключенных бирж и согласованного лимита запросов в секунду (QPS). На одну ставку обычно приходятся десятки и сотни запросов: большинство не подходит под таргетинг ни одной кампании.
Есть ли в bid request персональные данные?
Запрос может содержать IP, рекламный идентификатор устройства и геокоординаты. Это обезличенные данные, но правила их использования задают законы и согласия пользователя.