Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Взаимодействие с назначением ставок в реальном времени начинается, когда Google отправляет запрос ставки в ваше приложение. В этом руководстве объясняется, как написать код приложения для обработки запроса ставки.
Разобрать запрос
Google отправляет запрос ставки, сериализованный в форматах OpenRTB JSON или Protobuf, который прикрепляется как полезная нагрузка HTTP-запроса POST. Полученный формат зависит от конфигурации вашей конечной точки . См. пример запроса ставки .
Вам необходимо проанализировать этот запрос, чтобы получить сериализованный BidRequest . Если вы используете формат Protobuf, вам необходимо скачать openrtb.proto и openrtb-adx.proto со страницы справочных данных и использовать их для создания библиотеки, которую можно использовать для анализа сообщения BidRequest . Например, следующий код C++ анализирует запрос, содержащий полезные данные POST в строке:
Получив BidRequest , вы можете работать с ним как с объектом, извлекая и интерпретируя нужные поля. Например, в C++ итерация сделок в OpenRTB BidRequest может выглядеть следующим образом:
Вы получаете запрос ставки, когда на рекламные ресурсы издателя нацелена одна или несколько ваших конфигураций предварительного таргетинга . BidRequest.imp.ext.billing_id будет заполнен платежными идентификаторами всех подходящих покупателей и соответствующими конфигурациями предварительного таргетинга. Кроме того, для инвентаря сделки вы можете найти платежные идентификаторы, связанные с соответствующим покупателем, с помощью BidRequest.imp.pmp.deal.ext.billing_id . При размещении ставки можно указывать только платежные идентификаторы покупателей, включенных в запрос ставки.
Если в запрос ставки включено несколько платежных идентификаторов, вы должны указать платежный идентификатор покупателя, которому вы хотите присвоить свою ставку, в поле BidResponse.seatbid.bid.ext.billing_id .
Файлы словарей
В запросе ставки используются идентификаторы, определенные в файлах словарей, которые доступны на странице справочных данных .
Макросы URL-адреса системы назначения ставок
При желании некоторую информацию из BidRequest можно вставить в URL-адреса конечных точек назначения ставок с помощью макросов. Если вы настроите URL-адрес конечной точки с одним или несколькими макросами, они будут расширены, если эта информация присутствует в запросе ставки. Это может быть полезно, например, если вы хотите выполнить балансировку нагрузки на основе информации в BidRequest . Свяжитесь с менеджером своего аккаунта, чтобы запросить поддержку для новых макросов.
Макрос
Описание
%%GOOGLE_USER_ID%%
Заменено идентификатором пользователя Google, найденным в BidRequest.user.id . Например, URL-адрес системы назначения ставок http://google.bidder.com/path?gid=%%GOOGLE_USER_ID%% будет заменен чем-то вроде http://google.bidder.com/path?gid=dGhpyBhbiBleGFtGxl во время запроса.
Если идентификатор пользователя Google неизвестен, подставляется пустая строка с результатом, аналогичным
http://google.bidder.com/path?gid=
%%HAS_MOBILE%%
Заменяется на 1 , чтобы указать, что запрос ставки поступил с мобильного устройства, или 0 в противном случае. Это основано на значении BidRequest.device.devicetype , где мобильные устройства обозначаются как HIGHEND_PHONE ( 4 ) или Tablet ( 5 ).
%%HAS_VIDEO%%
Заменяется на 1 , чтобы указать, что запрос ставки содержит видеоресурсы, или 0 в противном случае. Это зависит от того, заполнен ли BidRequest.imp.video в запросе ставки.
%%HOSTED_MATCH_DATA%%
Заменено значением, основанным на BidRequest.user.buyeruid .
%%MOBILE_IS_APP%%
Заменяется на 1 , чтобы указать, что запрос ставки предназначен для ресурсов мобильных приложений, или 0 в противном случае. Это зависит от того, заполнен ли BidRequest.app .
Найти идентификатор мобильного приложения по URL-адресу транзакции
Транзакции мобильных приложений будут сообщать URL-адреса, которые выглядят следующим образом:
mbappgewtimrzgyytanjyg4888888.com
Используйте декодер Base-32 для декодирования части строки, выделенной жирным шрифтом ( gewtimrzgyytanjyg4888888 ).
Вы можете использовать онлайн-декодер , но вам придется использовать заглавные буквы и заменять конечные 8 на значения = .
Итак, расшифровка этого значения:
GEWTIMRZGYYTANJYG4======
приводит к:
1-429610587
Строка 429610587 — это идентификатор приложения iOS iFunny .
Вот еще один пример. Сообщенный URL-адрес:
mbappgewtgmjug4ytmmrtgm888888.com
Расшифровка этого значения:
GEWTGMJUG4YTMMRTGM======
приводит к:
1-314716233
Результат 314716233 — это идентификатор приложения для iOS-приложения TextNow .
Найти название мобильного приложения по URL-адресу транзакции
Вот пример получения имени приложения. Сообщаемый URL-адрес выглядит следующим образом:
Результат соответствует приложению Android slither.io .
Открытые поля ставок
Запросы ставок, отправляемые бирже и сетевым участникам торгов, участвующим в Open Bidding, аналогичны запросам Авторизованных покупателей, участвующих в стандартных торгах в режиме реального времени. Клиенты Open Bidding получат небольшое количество дополнительных полей, а некоторые существующие поля могут иметь альтернативное использование. К ним относятся следующие:
OpenRTB
Подробности
BidRequest.imp.ext.dfp_ad_unit_code
Содержит код сети Менеджера рекламы издателя, за которым следует иерархия рекламных блоков, разделенных косой чертой.
Например, это будет иметь формат, аналогичный: /1234/cruises/mars .
BidRequest.user.data.segment
Повторяющиеся пары "ключ-значение", отправленные издателем системе назначения ставок на бирже.
Вы можете определить, что значения представляют собой пары «ключ-значение», отправленные издателем, если для BidRequest.user.data.name установлено значение “Publisher Passed” .
Объявить разрешенных поставщиков
Поставщики технологий, которые предоставляют такие услуги, как исследования, ремаркетинг и показ рекламы, могут играть определенную роль во взаимодействии между покупателями и продавцами. Допускаются только те поставщики, которых Google проверил на предмет участия во взаимодействии с Авторизованными покупателями.
Чтобы понять BidRequest и создать свой BidResponse , вам необходимо знать о двух различных возможностях объявления поставщиков технологий:
Другие поставщики могут участвовать только в том случае, если они указаны в BidRequest :
В BidRequest поле BidRequest.imp.ext.allowed_vendor_type указывает, каких поставщиков разрешает продавец. Поставщики, которые будут отправлены в allowed_vendor_type , перечислены в файле vendors.txt .
Пример запроса ставки
Следующие примеры представляют собой удобочитаемые образцы запросов Protobuf и JSON.
Чтобы преобразовать запрос ставки в двоичную форму, как если бы вы получили из полезных данных POST в реальном запросе, вы можете сделать следующее (на C++). Однако обратите внимание, что это неприменимо к OpenRTB JSON.
Обратная связь в режиме реального времени доступна авторизованным покупателям, а также биржам и сетям, использующим Open Bidding.
Обратная связь в режиме реального времени заполняет BidRequest.ext.bid_feedback на основе результата одной или нескольких ставок, которые вы разместили ранее, и может использоваться для поиска таких подробностей, как, например, выиграла ли ставка на аукционе или минимальная ставка, необходимая для победы в аукционе. Свяжитесь с менеджером своего аккаунта, чтобы включить обратную связь в режиме реального времени.
В дополнение к полям по умолчанию, отправляемым в ответе на запрос ставки, вы также можете отправлять собственные данные в ответ на заявку, используя поле BidResponse.seatbid.bid.ext.event_notification_token . event_notification_token — это произвольные данные, известные только системе назначения ставок, которые могут помочь в отладке, например: новый идентификатор таргетинга или идентификатор ставки, представляющий новую тактику, или метаданные, связанные с креативом, известные только системе назначения ставок. Подробности см. в файле буфера протокола расширений OpenRTB .
Когда Авторизованные покупатели отправляют запрос ставки участнику торгов, тот отвечает BidResponse . Если у участника торгов включена обратная связь в режиме реального времени, то в последующем запросе ставки Авторизованные покупатели отправляют отзыв об ответе в сообщении BidFeedback :
messageBidFeedback{//TheuniqueidfromBidRequest.id.optionalstringrequest_id=1;//Thestatuscodeforthead.Seecreative-status-codes.txtinthe//technicaldocumentationforalistofids.optionalint32creative_status_code=2;//Deprecated.ThisfieldisnotpopulatedandwillberemovedafterMarch,//2025.Ifthebidwontheauction,thisisthepricepaidinyouraccount//currency.Ifthebidparticipatedintheauctionbutwasout-bid,this//istheCPMthatshouldhavebeenexceededinordertowin.Thisisnot//setifthebidwasfilteredpriortotheauction,ifthepublisheror//winningbidderhasoptedoutofpricefeedbackorifyouraccounthas//optedoutofsharingwinningpriceswithotherbidders.Forfirst-price//auctions,minimum_bid_to_winispopulatedinsteadofthisfield.optionaldoubleprice=3[deprecated=true];//Theminimumbidvaluenecessarytohavewontheauction,inyouraccount//currency.Ifyourbidwontheauction,thisisthesecondhighestbid//thatwasnotfiltered(includingthefloorprice).Ifyourbiddidn't win//theauction,thisisthewinningcandidate's bid. This field will only be//populatedifyourbidparticipatedinafirst-priceauction,andwillnot//bepopulatedifyourbidwasfilteredpriortotheauction.optionaldoubleminimum_bid_to_win=6;//Theminimumbidvaluenecessarytohavewontheserver-sidecomponentof//theoverallauctiongiventhattherewasalsoaninterestgroupbidding//componenttotheoverallauctionwhichranusingtheProtectedAudience//API.ThevalueisexpressedinCPMofthebuyeraccountcurrency.The//minimumbidtowinfortheoverallauction,includingbidsfromthe//server-sideandtheon-deviceinterestgroupcomponents,ispopulatedin//theminimum_bid_to_winfieldofthesameBidFeedbackobject.optionaldoublesscminbidtowin=14;//Billableeventratemultiplierthatwasappliedtothisbidduring//ranking.Theadjustmentreflectsthelikelihoodthatyourbidwould//generateabillableevent(namely,theadrenderssuccessfully)ifitwon//theauction,relativetotheprobabilitythatotherbidsgeneratea//billableeventiftheywontheauction.Thisadjustmentcanbelargeror//smallerthan1.Thisaffectsthefinalrankingintheauctiononly;in//particular,thismultiplierdoesnotaffectthepaymentorwhetherthe//bidclearsanyfloorprice.optionalfloatbillable_event_rate_bid_adjustment=13[default=1];//WhenapublisherusesanRTBauctionandwaterfall-basedSDKmediationon//thesamequery,thewinnerofthereal-timeauctionmustalsocompetein//amediationwaterfall(whichisorderedbyprice)towintheimpression.//Ifthebidparticipatedintheauctionandtherewasnowaterfall,the//valueofthisfieldis0.Ifthebidparticipatedintheauctionand//therewasawaterfall,thevalueofthisfieldisapricerepresentinga//samplebidfromtheeligiblemediationnetworksthatwerehigherthanthe//auctionwinner,weightedbyexpectedfillrate.Thisfieldcanbeused//inconjunctionwithminimum_bid_to_wintotrainbiddingmodels.TheCPM//isinyouraccountcurrency.optionaldoublesampled_mediation_cpm_ahead_of_auction_winner=8;messageEventNotificationToken{//Thecontentsofthetoken.optionalstringpayload=1;}//Thetokenincludedinthecorrespondingbid.optionalEventNotificationTokenevent_notification_token=4;//ThecreativeIDincludedinthecorrespondingbid.optionalstringbuyer_creative_id=5;//Possibletypesofbidresponsefeedbackobjects.enumFeedbackType{FEEDBACK_TYPE_UNSPECIFIED=0;//Feedbackforabidthatwassubmittedonabidresponse.BID_FEEDBACK=1;//Feedbackforaninterestgroupbuyersubmittedonabidresponseto//particpateinaninterestgroupbiddingcomponentoftheauctionrun//usingtheProtectedAudienceAPI.INTEREST_GROUP_BUYER_FEEDBACK=2;}//ThetypeoftheBidFeedbackmessage.Googlewillsendseparate//BidFeedbackobjectsfor://a)Eachbidsubmittedonabidresponse//b)Eachbuyersubmittedonabidresponsetoparticpateinaninterest//groupbiddingcomponentoftheauctionrunusingtheProtectedAudience//API.optionalFeedbackTypefeedbacktype=15;//Originofaninterestgroupbuyerthatwasincludedinthebidresponse.//Thisfieldispopulatedonlyforfeedbackwhereabidderoptedinan//interestgroupbuyertoparticipateintheinterestgroupbidding//componentoftheoverallauctionrunusingtheProtectedAudienceAPI.//Tolearnmoreaboutorigins,seehttps://www.rfc-editor.org/rfc/rfc6454.//TolearnmoreaboutinterestgroupbiddingandtheProtectedAudience//API,see//https://developers.google.com/authorized-buyers/rtb/fledge-origin-trial.optionalstringbuyerorigin=16;//Thestatuscodeforthesubmittedinterestgroupbuyer.Thisfieldis//onlypopulatedinthefeedbackforaninterestgroupbuyerthatabidder//requestedtoenterintotheinterestgroupauctionthroughthebid//response.Individualcreativestatuscodesofbidssubmittedbythebuyer//intheon-deviceinterestgroupauctionarenotavailable.See//https://storage.googleapis.com/adx-rtb-dictionaries/interest-group-buyer-status-codes.txt//foralistofinterestgroupbuyerstatuscodes.optionalint32igbuyerstatus=17;}
В этом сообщении первое поле, которое вам следует проверить, — это bid_feedback.creative_status_code ; Значение кода можно найти в файле Creative-status-codes.txt . Обратите внимание: если вы выиграете тендер, вы можете отказаться от обратной связи по цене. Дополнительную информацию см. в разделе «Как отказаться» .
Обратная связь в режиме реального времени включает идентификатор запроса ставки и одну из следующих данных:
Результат аукциона
Обратная связь в режиме реального времени
Покупатель не подал заявку.
Ничего.
Покупатель подал ставку, которая была отфильтрована до того, как поступила на аукцион.
После размещения ставки на аукционе первой цены вы получите обратную связь в режиме реального времени, в том числе minimum_bid_to_win и sampled_mediation_cpm_ahead_of_auction_winner , если ставка не была отфильтрована на аукционе. Эти сигналы можно использовать для информирования вашей логики назначения ставок о том, насколько выше или ниже могла бы быть ваша ставка, чтобы выиграть показ.
minimum_bid_to_win : минимальная ставка, которую можно было бы сделать для победы на аукционе ставок в реальном времени. Если вы выиграли аукцион, это будет самая низкая ставка, которую вы могли бы сделать, пока выигрывали. Если вы проиграли аукцион, это будет выигрышная ставка.
sampled_mediation_cpm_ahead_of_auction_winner : если в цепочке медиации есть другие сети, значением этого поля является цена, представляющая примерную ставку из одной из подходящих сетей медиации, которая была выше, чем у победителя аукциона, взвешенная по ожидаемому уровню заполнения. Для этого параметра будет установлено значение 0, если ожидается, что ни одна из сетей в цепочке медиации не будет заполнена, или если издатель не использует медиацию SDK.
Как это работает
Чтобы описать вычисления, используемые для определения возможных значений minimum_bid_to_win и sampled_mediation_cpm_ahead_of_auction_winner , нам сначала необходимо определить следующее:
Ниже представлены цены за тысячу показов в цепочке медиации в порядке убывания:
\[C_1, C_2, …, C_n\]
Ниже представлены соответствующие показатели заполняемости для цен за тысячу показов в цепочке медиации:
\[f_1, f_2, …, f_n\]
Ниже приведена функция, используемая для определения ожидаемой цены за тысячу показов и ее вероятности на основе элемента цепочки медиации. \(i\), на основе заданной скорости заполнения:
\(X_i = \{C_i\) с вероятностью \(f_i\); \(0\) с вероятностью \(1 - f_i\}\)
Окончательная выигрышная посредническая цепочка будет такой:
\[\{C_1, C_2, …, C_K, W\}\]
где \(W\) является выигрышной заявкой, и \(C_K > W >= C_{K+1}\)
Резервная цена, или нижний предел, обозначается как \(F\).
Ставка, занявшая второе место, обозначается как \(R\).
Расчеты для победителя аукциона
Поле
Расчет
minimum_bid_to_win
\(max\{F, R, X_{K+1}, …, X_n\}\)
sampled_mediation_cpm_ahead_ of_auction_winner
\(\{C_i\) с вероятностью \(\prod_{j=1}^{i-1}(1-f_j) \cdot f_i \div \prod_{j=1}^{K}(1-f_j)\}\)
Для \(1 <= i <= K\).
Расчеты для проигравшего на аукционе
Поле
Расчет
minimum_bid_to_win
\(max\{F, W\}\)
sampled_mediation_cpm_ahead_ of_auction_winner
\(max\{X_1, …, X_K\}\)
Пример с простой цепочкой медиации
Предположим, издатель использует как назначение ставок в реальном времени, так и цепочку медиации SDK следующим образом:
Цепочка медиации SDK
Ожидаемая цена за тысячу показов
Скорость заполнения
Сеть 1
\(C_1 = $3.00\)
\(f_1 = 5\%\)
Сеть 2
\(C_2 = $2.00\)
\(f_2 = 45\%\)
Сеть 3
\(C_3 = $0.50\)
\(f_3 = 80\%\)
Сеть 4
\(C_4 = $0.10\)
\(f_4 = 85\%\)
Предположим, что в результате RTB-аукциона произойдет следующее:
RTB-аукцион
цена за тысячу показов
Победитель аукциона (Ж)
1,00 доллара США
Второе место на аукционе (R)
0,05 доллара США
Резервная цена/минимальный уровень (F)
$0
Ставка, выигравшая аукцион
Ниже приведен пример расчета значений и вероятностей для minimum_bid_to_win и sampled_mediation_cpm_ahead_of_auction_winner для выигравшей ставки.
Ниже приведен пример расчета значений и вероятностей для minimum_bid_to_win и sampled_mediation_cpm_ahead_of_auction_winner для проигравших ставок.
minimum_bid_to_win
Вероятность
\(max(F, W) = $1.00\)
\(100\%\)
sampled_mediation_cpm_ ahead_of_auction_winner
Вероятность
\(C_1 = $3.00\)
\(f_1 = 5\%\)
\(C_2 = $2.00\)
\((1-f_1) \cdot f_2 =~ 42.8\%\)
\(0\)
\((1-f_1) \cdot (1-f_2) =~ 52.2\%\)
Сглаживание ставок
Сглаживание ставок описывает обработку одного сложного BidRequest в несколько запросов ставок, которые отправляются в ваше приложение. Когда запрос ставки объединен, вы можете определить, какие запросы ставок были частью исходного, поскольку они будут иметь одинаковое значение в поле BidRequest.ext.google_query_id .
Сглаживание ставок включено по умолчанию, но вы можете связаться с менеджером своего аккаунта, если хотите отключить его.
Форматы рекламы
Некоторые рекламные возможности могут принимать несколько форматов. При выравнивании ставок каждый формат отправляется в отдельном запросе ставки, где такие атрибуты, как допустимые платежные идентификаторы, соответствуют формату, указанному в запросе.
Запросы ставок, содержащие следующие форматы, будут объединены в отдельные запросы ставок:
Баннер
Видео
Аудио
Родной
Пример выравнивания формата объявления
Ниже приведен пример, показывающий упрощенный запрос ставки OpenRTB JSON без выравнивания формата объявления по сравнению с эквивалентным набором объединенных запросов:
Рекламная возможность для конкретного участника торгов может быть применима к различным типам сделок, помимо открытого аукциона. При выравнивании ставок для сделок на открытый аукцион будет отправлен один запрос ставки и по одному для каждого типа сделки с фиксированной ценой. На практике ограничения на рекламу могут различаться для разных типов аукционов и сделок с фиксированной ценой. Например, для конкретной возможности видеорекламы, доступной как для открытого аукциона, так и для сделки с фиксированной ценой, участник торгов будет получать отдельные запросы ставок для каждого типа, при этом такие ограничения, как максимальная продолжительность объявления и возможность пропуска рекламы, могут различаться. В результате сглаживание, примененное к рекламной возможности, позволяет легче определить ограничения рекламы для открытого аукциона и сделки с фиксированной ценой.
Возможность пропуска и продолжительность видео
В спецификации OpenRTB нет отдельных полей для указания максимальной продолжительности видео для рекламы с возможностью пропуска и без нее. Реализация Google использует выравнивание ставок, чтобы различать их с помощью существующих полей BidRequest.video.maxduration и BidRequest.video.skip .
Ниже приведен пример выравнивания видеоинвентаря, когда максимальная продолжительность объявления без возможности пропуска – 15 , а максимальная продолжительность объявления с возможностью пропуска – 60 .
Пример
max_ad_duration
skip (истина ИЛИ ложь)
Исходный запрос без выравнивания
15
true
Упрощенный запрос № 1: без возможности пропуска
15
false
Упрощенный запрос № 2: с возможностью пропуска
60
true
Сглаживание запросов ставок на продолжительность видео с возможностью пропуска будет происходить только при соблюдении следующих условий:
Запрос разрешает видео.
Разрешены видео как с возможностью пропуска, так и без нее, при этом две соответствующие максимальные продолжительности различаются по значению.
Этот запрос может участвовать в частном или открытом аукционе.
Вы можете отказаться от этого типа сведения, обратившись к своему техническому менеджеру по работе с клиентами. Если эта функция отключена, а издатель разрешает видеорекламу как с возможностью пропуска, так и без нее, с разной максимальной продолжительностью в зависимости от возможности пропуска, для параметра skip будет установлено значение true , а maxduration будет установлено значение, которое короче между ограничениями объявлений с возможностью пропуска и без возможности пропуска.
Видео-модули
Запросы ставок для модуля видео с несколькими рекламными возможностями объединяются, так что каждый запрос ставки предназначен для отдельного рекламного варианта из этого модуля. Это позволяет вам делать ставки на несколько рекламных возможностей для данного модуля.
Открытое измерение
Open Measurement позволяет указать сторонних поставщиков, которые предоставляют независимые услуги по измерению и проверке рекламы, показываемой в среде мобильных приложений.
Вы можете определить, поддерживает ли издатель Open Measurement в запросе ставки, проверив, исключает ли рекламная возможность атрибут OmsdkType: OMSDK 1.0 , который находится в атрибутах объявлений, исключаемых издателем . Его можно найти под атрибутом battr для Banner или Video , в зависимости от формата.
Дополнительную информацию о том, как интерпретировать запросы ставок, содержащие сигналы Open Measurement, можно найти в статье Справочного центра Open Measurement SDK .
Примеры запросов ставок
В следующих разделах показаны примеры запросов ставок для различных типов объявлений.
[null,null,["Последнее обновление: 2025-08-18 UTC."],[[["\u003cp\u003eBid requests are sent as HTTP POST requests with a binary payload in Protobuf format, and they are parsed into a \u003ccode\u003eBidRequest\u003c/code\u003e object for access.\u003c/p\u003e\n"],["\u003cp\u003eBilling IDs, which are essential for transactions, are provided in specific fields of the \u003ccode\u003eBidRequest\u003c/code\u003e and must be used in corresponding bids.\u003c/p\u003e\n"],["\u003cp\u003eReal-time feedback, available in subsequent bid requests, offers details like creative status codes and minimum bid amounts, including a custom \u003ccode\u003eevent_notification_token\u003c/code\u003e for debugging.\u003c/p\u003e\n"],["\u003cp\u003eFirst-price auction bidding models utilize \u003ccode\u003eminimum_bid_to_win\u003c/code\u003e and \u003ccode\u003esampled_mediation_cpm_ahead_of_auction_winner\u003c/code\u003e feedback signals to help adjust bidding strategies.\u003c/p\u003e\n"],["\u003cp\u003eBid flattening separates complex \u003ccode\u003eBidRequest\u003c/code\u003e data into multiple requests based on ad formats, deals, and video ad types, all identifiable by a shared \u003ccode\u003egoogle_query_id\u003c/code\u003e.\u003c/p\u003e\n"]]],["Bid requests are HTTP POSTs using OpenRTB Protobuf, replacing the deprecated Google RTB protocol. Parsing involves `ParseFromString()` to access fields in the `BidRequest` object. Billing IDs, found in `BidRequest.imp.ext.billing_id` and `BidRequest.imp.pmp.deal.ext.billing_id`, must be specified in `BidResponse.seatbid.bid.ext.billing_id`. Key information comes from dictionary files. Bid URL macros dynamically insert `BidRequest` data. Complex bid requests can be broken into simpler, flattened requests per format or deal, such as skippable/non-skippable video ads, or video pods. Bidders get real-time feedback. The provided sample requests are used to help the process.\n"],null,[]]