Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Un'interazione con le offerte in tempo reale inizia quando Google invia una richiesta di offerta alla tua applicazione. Questa guida spiega come codificare l'applicazione per elaborare la richiesta di offerta.
Analizza richiesta
Google invia una richiesta di offerta serializzata nei formati JSON o Protobuf di OpenRTB, allegata come payload di una richiesta POST HTTP. Il formato ricevuto dipende dalla configurazione dell'endpoint. Per un esempio, consulta
Esempio di richiesta di offerta.
Devi analizzare questa richiesta per ricevere il BidRequest serializzato. Se utilizzi il formato Protobuf, devi scaricare openrtb.proto e openrtb-adx.proto dalla pagina Dati di riferimento e utilizzarli per generare una libreria che possa essere utilizzata per analizzare il messaggio BidRequest. Ad esempio, il seguente codice C++ analizza una richiesta fornendo un payload POST in una stringa:
Una volta ottenuto il BidRequest, puoi utilizzarlo come oggetto, estraendo e interpretando i campi di cui hai bisogno. Ad esempio, in C++ l'iterazione dei deal in un "BidRequest" OpenRTB potrebbe avere il seguente aspetto:
Ricevi una richiesta di offerta quando l'inventario pubblicitario di un publisher è scelto come target da una o più delle tue
configurazioni di pretargeting. BidRequest.imp.ext.billing_id
viene compilato con gli ID fatturazione di tutti gli acquirenti idonei e con le configurazioni di pretargeting pertinenti. Inoltre, per
l'inventario
del deal, puoi trovare gli ID fatturazione associati all'acquirente pertinente
utilizzando BidRequest.imp.pmp.deal.ext.billing_id. Quando si fa un'offerta, è possibile specificare solo gli ID fatturazione degli acquirenti inclusi nella richiesta di offerta.
Se nella richiesta di offerta sono inclusi più ID fatturazione, devi specificare
l'ID fatturazione dell'acquirente a cui intendi attribuire l'offerta con il
campoBidResponse.seatbid.bid.ext.billing_id.
File di dizionario
La richiesta di offerta utilizza gli identificatori definiti nei file di dizionario, disponibili nella pagina Dati di riferimento.
Macro URL dell'offerente
Facoltativamente, alcune informazioni del BidRequest possono essere inserite negli URL degli endpoint di offerta utilizzando le macro. Se configuri un URL
endpoint con una o più macro, queste verranno espanse se le informazioni sono
presenti nella richiesta di offerta. Ciò può essere utile, ad esempio, se vuoi eseguire il bilanciamento del carico in base alle informazioni in BidRequest.
Contatta il tuo account manager per richiedere assistenza per le nuove macro.
Macro
Descrizione
%%GOOGLE_USER_ID%%
Sostituito con l'ID utente Google trovato in
BidRequest.user.id. Ad esempio, l'URL dell'offerente
http://google.bidder.com/path?gid=%%GOOGLE_USER_ID%% verrà
sostituito con qualcosa come
http://google.bidder.com/path?gid=dGhpyBhbiBleGFtGxl al momento della richiesta.
Se l'ID utente Google non è noto, la stringa vuota viene sostituita con un risultato simile a
http://google.bidder.com/path?gid=
%%HAS_MOBILE%%
Deve essere sostituito con 1 per indicare che la richiesta di offerta proviene da un
dispositivo mobile oppure con 0 in caso contrario. Questo valore si basa su BidRequest.device.devicetype, dove i dispositivi mobili sono indicati da HIGHEND_PHONE (4) o Tablet (5).
%%HAS_VIDEO%%
Deve essere sostituito con 1 per indicare che la richiesta di offerta contiene
inventario video o con 0 in caso contrario. Questo dipende dal fatto che
BidRequest.imp.video sia compilato nella richiesta di offerta.
%%HOSTED_MATCH_DATA%%
Sostituito con un valore basato su BidRequest.user.buyeruid.
%%MOBILE_IS_APP%%
Deve essere sostituito con 1 per indicare che la richiesta di offerta riguarda l'inventario per app mobile o con 0 in caso contrario. Il valore dipende dal fatto che
BidRequest.app sia compilato.
Trovare l'ID app mobile dall'URL transazione
Le transazioni delle applicazioni mobile registreranno URL simili al seguente:
mbappgewtimrzgyytanjyg4888888.com
Utilizza un decodificatore base 32 per decodificare la parte della stringa in grassetto
(gewtimrzgyytanjyg4888888).
Puoi utilizzare un decodificatore online, ma dovrai usare le lettere maiuscole e sostituire i 8 finali con i valori =.
Pertanto, per decodificare questo valore:
GEWTIMRZGYYTANJYG4======
genera:
1-429610587
La stringa 429610587 è l'ID dell'app per l'app iOS
iFunny.
Ecco un altro esempio. L'URL segnalato è:
mbappgewtgmjug4ytmmrtgm888888.com
Decodifica di questo valore:
GEWTGMJUG4YTMMRTGM======
genera:
1-314716233
Il risultato 314716233 è l'ID app per l'app iOS
TextNow.
Trovare il nome dell'app mobile dall'URL della transazione
Ecco un esempio di recupero del nome dell'app. L'URL segnalato è il seguente:
Il risultato corrisponde all'app Android
slither.io.
Campi Open Bidding
Le richieste di offerta inviate agli offerenti di piattaforme di scambio e reti che partecipano a Open Bidding sono simili a quelle di Authorized Buyers che partecipano alle offerte in tempo reale standard. I clienti Open Bidding riceveranno un numero limitato di campi aggiuntivi e alcuni campi esistenti potrebbero avere utilizzi alternativi. tra cui:
OpenRTB
Dettagli
BidRequest.imp.ext.dfp_ad_unit_code
Contiene il codice di rete Ad Manager del publisher seguito dalla gerarchia delle unità pubblicitarie, separata da barre.
Ad esempio, verrà visualizzato con una formattazione simile a:
/1234/cruises/mars.
BidRequest.user.data.segment
Coppie chiave-valore ripetute inviate dal publisher all'offerente della piattaforma di scambio.
Puoi stabilire che i valori sono coppie chiave-valore inviate dall'editore quando BidRequest.user.data.name è impostato su “Publisher Passed”.
Dichiarare i fornitori consentiti
I fornitori di tecnologia che forniscono servizi come ricerca, remarketing e pubblicazione di annunci possono svolgere un ruolo nell'interazione tra acquirenti e venditori. Sono consentiti solo i fornitori che sono stati sottoposti a verifica da parte di Google per la partecipazione alle interazioni con Authorized Buyers.
Per comprendere il BidRequest e creare il tuo
BidResponse, devi conoscere le due diverse
possibilità per dichiarare i fornitori di tecnologia:
Altri fornitori possono partecipare solo se sono dichiarati in
BidRequest:
In BidRequest, il
BidRequest.imp.ext.allowed_vendor_type specifica
i fornitori consentiti dal venditore. I fornitori che verranno inviati nel
allowed_vendor_type sono elencati nel
vendors.txt
file del dizionario.
Esempio di richiesta di offerta
Gli esempi riportati di seguito rappresentano esempi leggibili delle richieste Protobuf e JSON.
Per convertire la richiesta di offerta in un formato binario, come si otterrebbe dal payload POST in una richiesta reale, puoi procedere nel seguente modo (in C++). Tieni presente, tuttavia, che questo non è applicabile a OpenRTB JSON.
Il feedback in tempo reale è disponibile per Authorized Buyers, nonché per le piattaforme di scambio e le reti che utilizzano Open Bidding.
Il feedback in tempo reale compila BidRequest.ext.bid_feedback in base al risultato di una o più offerte che hai effettuato in precedenza e può essere utilizzato per trovare dettagli come se l'offerta ha vinto l'asta o l'offerta minima necessaria per vincere l'asta. Contatta il tuo account manager per attivare il feedback in tempo reale.
Oltre ai campi predefiniti inviati nel feedback sulla risposta all'offerta, puoi anche inviare dati personalizzati nella risposta all'offerta utilizzando il campo BidResponse.seatbid.bid.ext.event_notification_token. event_notification_token è un dato arbitrario noto solo all'offerente che potrebbe essere utile per il debug, ad esempio un nuovo ID targeting o ID offerta che rappresenta una nuova tattica o i metadati associati alla creatività noti solo all'offerente. Per maggiori dettagli, consulta il
file Buffer del protocollo delle estensioni OpenRTB.
Quando Authorized Buyers invia una richiesta di offerta a un offerente, quest'ultimo risponde con un BidResponse. Se l'offerente ha attivato il feedback in tempo reale,
in una richiesta di offerta successiva, Authorized Buyers invia un feedback sulla risposta in un messaggio 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;}
In questo messaggio, il primo campo da controllare è
bid_feedback.creative_status_code; puoi trovare il significato del codice
in
creative-status-codes.txt. Tieni presente che se vinci l'offerta, puoi disattivare il feedback sul prezzo. Per ulteriori informazioni, consulta la sezione Come disattivare.
Il feedback in tempo reale include l'ID richiesta di offerta e uno dei seguenti elementi:
Risultato dell'asta
Feedback in tempo reale
L'acquirente non ha inviato un'offerta.
Niente.
L'acquirente ha inviato un'offerta che è stata filtrata prima di raggiungere l'asta.
L'acquirente ha inviato un'offerta, ma ha perso l'asta.
Il codice di stato della creatività 79 (offerta superiore nell'asta).
L'acquirente ha inviato un'offerta che ha vinto l'asta.
Il prezzo di aggiudicazione e il codice di stato della creatività 1.
Per un'impressione dell'app e un codice stato della creatività 83, il
Publisher dell'app potrebbe aver utilizzato una struttura a cascata della mediazione e quindi l'offerta migliore avrebbe gareggiato con altre richieste nella catena a cascata del passback del publisher. Scopri come utilizzare
sampled_mediation_cpm_ahead_of_auction_winner quando
fai offerte.
Esempio
Di seguito è riportato un esempio di feedback in tempo reale come visualizzato nei protocolli supportati:
Creare un modello di offerta per le aste al primo prezzo
Dopo aver fatto un'offerta in un'asta al primo prezzo, riceverai un feedback in tempo reale, inclusi i campi minimum_bid_to_win e sampled_mediation_cpm_ahead_of_auction_winner, se l'offerta non è stata filtrata dall'asta. Questi indicatori possono essere utilizzati per informare la logica di offerta su quanto più alta o più bassa avrebbe potuto essere l'offerta per vincere l'impressione.
minimum_bid_to_win: l'offerta minima che avrebbe potuto essere presentata per vincere l'asta con offerte in tempo reale. Se hai vinto l'asta, questa sarà
l'offerta più bassa che avresti potuto fare per vincere. Se hai perso l'asta, questa sarà l'offerta vincente.
sampled_mediation_cpm_ahead_of_auction_winner: se nella catena di mediazione sono presenti altre reti, il valore di questo campo è un prezzo che rappresenta un'offerta di esempio di una delle reti di mediazione idonee superiore a quella del vincitore dell'asta, ponderato in base al tasso di riempimento previsto. Questo valore verrà impostato su 0 se non è previsto che nessuna delle reti nella catena di mediazione venga riempita o se il publisher non utilizza la mediazione tramite SDK.
Come funziona
Per descrivere i calcoli utilizzati per determinare i possibili valori per minimum_bid_to_win e sampled_mediation_cpm_ahead_of_auction_winner, dobbiamo prima definire quanto segue:
Di seguito sono riportati i CPM nella catena di mediazione in ordine decrescente:
\[C_1, C_2, …, C_n\]
Di seguito sono riportati i tassi di riempimento corrispondenti per i CPM nella catena di mediazione:
\[f_1, f_2, …, f_n\]
Di seguito è riportata una funzione utilizzata per determinare il CPM previsto e la relativa probabilità dall'elemento della catena di mediazione \(i\), in base al tasso di riempimento specificato:
\(X_i = \{C_i\) con probabilità \(f_i\); \(0\) con probabilità \(1 - f_i\}\)
La catena di mediazione vincente finale sarà:
\[\{C_1, C_2, …, C_K, W\}\]
dove \(W\) è l'offerta vincente e \(C_K > W >= C_{K+1}\)
Il prezzo minimo, o prezzo base, è indicato come \(F\).
L'offerta seconda classificata è indicata come \(R\).
Calcoli per il vincitore dell'asta
Campo
Calcolo
minimum_bid_to_win
\(max\{F, R, X_{K+1}, …, X_n\}\)
sampled_mediation_cpm_ahead_ of_auction_winner
\(\{C_i\) con probabilità \(\prod_{j=1}^{i-1}(1-f_j) \cdot f_i \div \prod_{j=1}^{K}(1-f_j)\}\)
Per \(1 <= i <= K\).
Calcoli per il perdente dell'asta
Campo
Calcolo
minimum_bid_to_win
\(max\{F, W\}\)
sampled_mediation_cpm_ahead_ of_auction_winner
\(max\{X_1, …, X_K\}\)
Esempio con una semplice catena di mediazione
Supponiamo che un publisher utilizzi sia le offerte in tempo reale sia una catena di mediazione SDK come segue:
Catena di mediazione SDK
CPM previsto
Tasso di riempimento
Rete 1
\(C_1 = $3.00\)
\(f_1 = 5\%\)
Rete 2
\(C_2 = $2.00\)
\(f_2 = 45\%\)
Rete 3
\(C_3 = $0.50\)
\(f_3 = 80\%\)
Rete 4
\(C_4 = $0.10\)
\(f_4 = 85\%\)
Supponiamo che il risultato dell'asta RTB sia il seguente:
Asta RTB
CPM
Vincitore dell'asta (W)
1,00 $
Secondo classificato dell'asta (R)
$ 0,05
Prezzo di riserva / prezzo minimo (F)
0 $
Offerta che ha vinto l'asta
Di seguito è riportato un esempio di come vengono calcolati i valori e le probabilità per minimum_bid_to_win e sampled_mediation_cpm_ahead_of_auction_winner per un'offerta vincente.
Di seguito è riportato un esempio di come vengono calcolati i valori e le probabilità per
minimum_bid_to_win e
sampled_mediation_cpm_ahead_of_auction_winner per un
asta persa.
minimum_bid_to_win
Probabilità
\(max(F, W) = $1.00\)
\(100\%\)
sampled_mediation_cpm_ ahead_of_auction_winner
Probabilità
\(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\%\)
Suddivisione delle offerte
La suddivisione delle offerte descrive l'elaborazione di un singolo BidRequest complesso in più richieste di offerta inviate alla tua applicazione. Quando una richiesta di offerta viene appiattita, puoi capire quali richieste di offerta fanno parte dell'originale perché avranno un valore identico nel campo BidRequest.ext.google_query_id.
L'appiattimento delle offerte è abilitato per impostazione predefinita, ma puoi contattare il tuo account manager se preferisci disattivarlo.
Formati degli annunci
Alcune opportunità pubblicitarie possono accettare più formati. Con la semplificazione delle offerte, ogni formato viene inviato in una richiesta di offerta distinta in cui gli attributi come gli ID fatturazione idonei sono pertinenti al formato specificato nella richiesta.
Le richieste di offerta contenenti i seguenti formati verranno suddivise in richieste di offerta distinte:
Banner
Video
Audio
Nativo
Esempio di appiattimento del formato dell'annuncio
Di seguito è riportato un esempio che mostra una richiesta di offerta JSON OpenRTB semplificata senza appiattimento del formato dell'annuncio rispetto a un insieme equivalente di richieste appiattite:
Un'opportunità pubblicitaria per un determinato offerente può essere applicabile a vari tipi di deal, oltre all'asta aperta. Con la suddivisione delle offerte per i deal, verrà inviata una richiesta di offerta per l'asta aperta e una per ogni tipo di deal a prezzo fisso. In pratica, i vincoli degli annunci possono variare tra le aste e i tipi di deal a prezzo fisso. Ad esempio, per una determinata opportunità pubblicitaria video disponibile sia per l'asta aperta sia per un deal a prezzo fisso, un offerente riceverà richieste di offerta distinte per ciascuno, in cui i vincoli, come la durata massima dell'annuncio e la possibilità di utilizzare annunci ignorabili, possono variare. Di conseguenza, l'appiattimento applicato all'opportunità pubblicitaria ti consente di distinguere più facilmente i vincoli degli annunci per l'asta aperta e il deal a prezzo fisso.
Possibilità di ignorare i video e durata
La specifica OpenRTB non dispone di campi separati per specificare le durate video massime degli annunci ignorabili e non ignorabili. L'implementazione di Google
utilizza l'appiattimento delle offerte per distinguere questi tipi di offerte utilizzando i campi BidRequest.video.maxduration e
BidRequest.video.skip esistenti.
Di seguito è riportato un esempio di come l'inventario video viene appiattito quando la durata massima di un annuncio non ignorabile è 15 e la durata massima di un annuncio ignorabile è 60.
Esempio
max_ad_duration
skip (true OPPURE false)
Richiesta originale senza appiattimento
15
true
Richiesta appiattita 1: non ignorabile
15
false
Richiesta piatta 2: ignorabile
60
true
La suddivisione delle richieste di offerta in base alla durata dei video ignorabili viene eseguita solo se vengono soddisfatte queste condizioni:
La richiesta consente i video.
Sono consentiti sia i video ignorabili che quelli non ignorabili e le rispettive durate massime differiscono nel valore.
Questa richiesta è idonea per l'asta privata o l'asta aperta.
Puoi disattivare questo tipo di appiattimento contattando il tuo Technical Account Manager. Se questa impostazione è disattivata e il publisher consente sia gli annunci video ignorabili sia quelli non ignorabili con durate massime diverse in base all'ignorabilità,skip viene impostato su true emaxduration viene impostato sulla durata più breve tra i vincoli degli annunci ignorabili e non ignorabili.
Pod video
Le richieste di offerta per un pod video con più opportunità pubblicitarie vengono appiattite,
in modo che ogni richiesta di offerta riguardi una singola opportunità pubblicitaria del pod.
In questo modo puoi fare offerte per più opportunità pubblicitarie per un determinato pod.
Open Measurement
Open Measurement ti consente di specificare fornitori di terze parti che forniscono servizi di misurazione e verifica indipendenti per gli annunci pubblicati negli ambienti delle app mobile.
Puoi determinare se un publisher supporta Open Measurement nella richiesta di offerta controllando se l'opportunità pubblicitaria esclude l'attributo OmsdkType:
OMSDK 1.0 presente negli attributi della creatività escludibili dal publisher. Lo puoi trovare nell'attributo battr
per banner
o video, a seconda
del formato.
Per ulteriori informazioni su come interpretare le richieste di offerta contenenti gli indicatori di Open Measurement, consulta l'articolo del Centro assistenza sull'SDK Open Measurement.
Richieste di offerta di esempio
Le sezioni seguenti mostrano richieste di offerta di esempio per diversi tipi di annunci.
[null,null,["Ultimo aggiornamento 2025-08-21 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,[]]