Budowanie reakcji

Gdy aplikacja przetworzy żądanie stawki z Google, musi utworzyć i wysłać odpowiedź. Z tego przewodnika dowiesz się, jak zakodować aplikację, aby utworzyć odpowiedź.

Tworzenie wiadomości Protobuf BidResponse

Program Authorized Buyers wysyła BidRequest jako treść wiadomości HTTP POST. Jeśli punkt końcowy określania stawek jest skonfigurowany pod kątem używania formatu Protobuf, aplikacja musi wysłać odpowiedź z nagłówkiem Content-Type ustawionym na application/octet-stream oraz z tekstem wiadomości zawierającym serializowany bufor protokołu. Bufor protokołu to wiadomość BidResponse zgodnie z definicją w dokumentacji openrtb.proto. Aplikacja musi zwracać możliwą do przeanalizowania wartość BidResponse w odpowiedzi na każde BidRequest. Przekroczenie limitu czasu i odpowiedzi, których nie można przeanalizować, są uznawane za błędy, a Google ogranicza udział licytujących o wysokim współczynniku błędów.

Jeśli nie chcesz ustalać stawki za wyświetlenie, musisz zwrócić pustą odpowiedź HTTP 204. Dane openrtb.proto możesz pobrać na stronie danych referencyjnych.

Identyfikator kreacji

Twój element BidResponse określa kreację za pomocą pola BidResponse.seatbid.bid.crid (limit 64 bajtów). Nawet podobne kreacje muszą mieć w tym polu unikalne wartości, jeśli różnią się między sobą pod względem jakichkolwiek istotnych cech, takich jak rozmiar, zadeklarowany URL, atrybuty kreacji czy typ dostawcy. Inaczej mówiąc, musisz nadać różne identyfikatory kreacji dowolnym 2 reklamami, które:

  • wyglądać lub zachowywać się inaczej;
  • Renderowanie do różnych obrazów.
  • renderowanie za pomocą różnych metod (np. jedna reklama składa się z obrazu, a druga z filmu);

Podczas projektowania aplikacji należy wybrać systematyczny sposób generowania identyfikatorów, który będzie odpowiedni dla typu przesyłanych komponentów.

Oznaczenie reklamy

Google zaleca deklarowanie atrybutów kreacji, aby opisać cechy reklamy i jej kierowanie, za pomocą kombinacji atrybutów BidResponse.seatbid.bid.apisBidResponse.seatbid.bid.attr lub rozszerzenia BidResponse.seatbid.bid.ext.attribute. Poniżej znajdziesz opis sposobu deklarowania atrybutów:

  • VPAID
    Ustaw wartość BidResponse.seatbid.bid.apis na VPAID_1 lub VPAID_2. W przypadku formatu JSON możesz ustawić odpowiednio wartości 1 lub 2.
  • MRAID
    Ustaw wartość BidResponse.seatbid.bid.apis na MRAID_1 lub 3 w przypadku formatu JSON.
  • SIZELESS
    Ustaw wartość BidResponse.seatbid.bid.attr na RESPONSIVE lub 18 w przypadku formatu JSON.
  • PLAYABLE
    W tym celu należy ustawić wartość BidResponse.seatbid.bid.attr na USER_INTERACTIVE lub 13 w przypadku formatu JSON.

Więcej informacji o tym, jak uzyskać opinię na temat wykrytych właściwości kreacji, znajdziesz w zasobach dotyczących kreacji.

Pola Otwartego ustalania stawek

Odpowiedzi na żądanie reklamy wysyłane przez licytujących giełd i sieci uczestniczących w Otwartym ustalaniu stawek są podobne do odpowiedzi licytujących Authorized Buyers, którzy korzystają ze standardowego określania stawek w czasie rzeczywistym. Klienci korzystający z otwartego ustalania stawek mogą podać niewielką liczbę dodatkowych pól, a kilka dotychczasowych pól może mieć inne zastosowanie. Są to m.in.:

OpenRTB Authorized Buyers. Szczegóły
BidResponse.imp[].pmp.deals[].id BidResponse.ad[].adslot[].exchange_deal_id

Identyfikator umowy z przestrzeni nazw giełdy powiązany z tą stawką i przekazywany wydawcom.

BidResponse.seatbid[].bid[].ext.exchange_deal_type BidResponse.ad[].adslot[].exchange_deal_type

Typ umowy przekazywany wydawcom, który wpływa na sposób traktowania umowy w aukcji.

BidResponse.seatbid[].bid[].ext.third_party_buyer_token BidResponse.ad[].adslot[].third_party_buyer_token Token służący do identyfikowania informacji o kupującym, jeśli giełda jako uczestnik Otwartego ustalania stawek jest pośrednikiem. Wartość tę uzyskuje się od zewnętrznego kupującego i należy ją przekazać Google w niezmienionej postaci w odpowiedzi na pytanie o stawkę.

Rekomendacje

  • Włącz na serwerach trwałe połączenia HTTPS (zwane też „keep-alive” lub „ponownym użyciem połączenia”). Ustaw limit czasu na co najmniej 10 sekund – w wielu przypadkach korzystne są wyższe wartości. Google sprawdza to podczas początkowych testów opóźnień aplikacji, ponieważ program Authorized Buyers wysyła żądania z dużą częstotliwością i musi unikać opóźnień związanych z ustalaniem osobnego połączenia TCP dla każdego żądania.
  • Dodaj opcjonalny link monitorujący wyświetlenia, aby śledzić, kiedy wyświetlenie jest renderowane, a nie kiedy licytujący wygrywa. Ze względu na różnicę między wygranymi a wyrenderowaniami uzyskujesz dokładniejsze statystyki śledzenia.

  • Upewnij się, że kod licytującego nie jest zależny od wycofanych pól, które mogą powodować błędy w ustalaniu stawek.
  • Dodaj właściwości BidResponse.seatbid.bid.wBidResponse.seatbid.bid.h do pliku BidResponse. BidResponse do żądania zawierającego różne rozmiary reklam musi zawierać te pola, w przeciwnym razie zostanie wykluczone z aukcji.
  • Ogranicz rozmiar odpowiedzi do 8 K. Bardzo duże odpowiedzi mogą zwiększać czas oczekiwania na odpowiedź z sieci i powodować przekroczenie czasu oczekiwania.
  • Postępuj zgodnie z wytycznymi dotyczącymi stawek za zasoby reklamowe na iOS, które wymagają atrybucji SKAdNetwork.

Przykładowa odpowiedź na pytanie o stawkę

Poniższe przykłady przedstawiają żądania Protobuf i JSON w formie zrozumiałej dla człowieka.

Zserializowana odpowiedź
id: "9u09jhHJXT2fbaDZ9V1x66"
seatbid {
  bid {
    id: "37Td8Gbw1Lr8161bA4B"
    impid: "1"
    price: 0.075
    adm: "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>"
    adomain: "google.com"
    adomain: "google.com"
    crid: "test_creative_id_156129"
    cat: "IAB22"
    w: 320
    h: 50
    language: "es"
    slotinpod: SLOT_POSITION_POD_ANY
    cattax: IAB_CONTENT_1_0
    [com.google.doubleclick.bid] {
      impression_tracking_url: "https://test.com/impression?id=123456"
      exchange_deal_type: OPEN_AUCTION
      event_notification_token {
        payload: "token"
      }
      billing_id: 61560909063
    }
  }
  seat: "4778:9251:780612"
}
cur: "USD"
{
  "id": "9u09jhHJXT2fbaDZ9V1x66",
  "seatbid": [
    {
      "bid": [
        {
          "id": "37Td8Gbw1Lr8161bA4B",
          "impid": "1",
          "price": 0.075,
          "adm": "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>",
          "adomain": [
            "google.com",
            "google.com"
          ],
          "crid": "test_creative_id_156129",
          "cat": [
            "IAB22"
          ],
          "w": 320,
          "h": 50,
          "language": "es",
          "slotinpod": 0,
          "cattax": 1,
          "ext": {
            "impression_tracking_url": [
              "https://test.com/impression?id=123456"
            ],
            "exchange_deal_type": 0,
            "event_notification_token": {
              "payload": "token"
            },
            "billing_id": "61560909063"
          }
        }
      ],
      "seat": "4778:9251:780612"
    }
  ],
  "cur": "USD"
}
Zserializowana odpowiedź
ad {
  html_snippet: "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>"
  adslot {
    id: 1
    max_cpm_micros: 226722
    billing_id: 78614473201
    currency: "USD"
  }
  click_through_url: "google.com"
  attribute: 105
  buyer_creative_id: "test_creative_id_827359"
  width: 336
  height: 280
  impression_tracking_url: "https://test.com/imp?id=123456"
  event_notification_token: "token"
}

Ważne: komunikaty Protobuf przedstawione w próbkach są tu reprezentowane jako tekst zrozumiały dla człowieka. Nie jest to jednak sposób, w jaki wiadomości są wysyłane przez sieć. W przypadku korzystania z formatu Protobuf Google lub OpenRTB akceptowane są tylko serializowane wiadomości BidResponse.

Możesz utworzyć i zserializować wiadomość BidResponse, korzystając z tego kodu C++:

BidResponse bid_response;
// fill in bid response with bid information
string post_response;
if (bid_response.SerializeToString(&post_response)) {
  // respond to the POST with post_response as the content
} else {
  // return an error to the POST
}

Określanie kreacji

Odpowiedź na stawkę określa kreację, która zostanie wyświetlona, jeśli stawka wygra. Twoja stawka musi zawierać jeden z obsługiwanych formatów reklam (AMP, wideo, natywny). W tym przykładzie kreację określamy za pomocą pola html_snippet.

Możesz też określić kreację za pomocą jednego z tych pól, w zależności od formatu reklamy:

  • Reklama renderowana przez pakiet SDK
    • BidResponse.seatbid.bid.ext.sdk_rendered_ad
  • AMP
    • BidResponse.seatbid.bid.amp_ad_url
  • Film
    • BidResponse.seatbid.bid.adm
  • Reklama natywna
    • BidResponse.seatbid.bid.adm_native

Podaj reklamę hostowaną na własnych serwerach, używając fragmentu kodu HTML w polu BidResponse.seatbid.bid.adm. Fragment kodu jest umieszczony w elemencie iframe na stronie internetowej, co powoduje, że reklama jest pobierana i renderowana podczas wczytywania strony. Musisz utworzyć fragment kodu HTML, aby reklama (baner lub reklama pełnoekranowa) była prawidłowo renderowana w elemencie iframe i w odpowiednim rozmiarze do miejsca na reklamę, na które bierzesz udział w aukcji.

Dodatkowo rozmiar reklamy zadeklarowany w odpowiedzi na stawkę musi odpowiadać dokładnie jednej z kombinacji rozmiarów w pytaniu o stawkę, gdy:

  • Reklama jest zwykłym banerem (nie wideo, natywnym ani pełnoekranowym).
  • Licytujący zadeklarował rozmiar w odpowiedzi na pytanie o stawkę. Zadeklarowanie rozmiaru jest wymagane, gdy w żądaniu występuje więcej niż 1 rozmiar.
  • Wyjątkiem są reklamy pełnoekranowe. W przypadku reklam pełnoekranowych szerokość musi wynosić co najmniej 50% szerokości ekranu, a wysokość co najmniej 40% wysokości ekranu.

Kreację fragmentu kodu HTML możesz określić, używając dowolnego prawidłowego kodu HTML, który prawidłowo się renderuje, ale pamiętaj o ograniczeniach dotyczących pola crid w sekcji Tworzenie wiadomości BidResponse. Jednym z zastosować jest umieszczanie dodatkowych informacji w argumentach adresów URL pobieranych z Twoich serwerów w ramach renderowania reklamy. Dzięki temu możesz przekazać na własne serwery dowolne dane o wyświetleniu.

Większość zasad dotyczących fragmentów kodu HTML zwracanych w odpowiedziach na żądanie stawki jest takich samych jak w przypadku reklam innych firm. Więcej informacji znajdziesz w wymaganiach dotyczących wyświetlania reklam firm zewnętrznych, wymaganiach dotyczących wyświetlania reklam firm zewnętrznychdeklarowaniu adresów URL w reklamach.

Określanie makr

Makra to sformatowany tekst umieszczony w niektórych polach odpowiedzi na ofertę, zawierający adresy URL, które w momencie wyświetlania reklamy są zastępowane odpowiednimi wartościami. Jeśli na przykład zwycięska stawka zawierała makro AUCTION_PRICE w kreacji fragmentu kodu HTML dołączonej do stawki, makro zostanie zastąpione wartością, którą możesz odszyfrować, aby określić kwotę, jaką zapłaciłeś/zapłaciłaś za wyświetlenie w aukcji.

Makra możesz uwzględniać w tych polach:

  • BidResponse.seatbid.bid.adm

    Makra są obsługiwane w przypadku fragmentów kodu HTML, formatów natywnych, adresów URL wideo i formatu XML VAST.

  • BidResponse.seatbid.bid.adm_native.eventtrackers.url

  • BidResponse.seatbid.bid.adm_native.imptrackers

  • BidResponse.seatbid.bid.ext.amp_ad_url

    W przypadku kreacji AMP obsługiwane są tylko makra WINNING_PRICEWINNING_PRICE_ESC specyficzne dla Google.

  • BidResponse.seatbid.bid.burl

  • BidResponse.seatbid.bid.ext.impression_tracking_url

    Użyj tego zamiast BidResponse.seatbid.bid.burl, jeśli potrzebujesz więcej niż 1 adresu URL do płatności.

Możesz np. umieścić makro w fragmentie kodu HTML, umieszczając w adresie URL używanym do pobierania kreacji makro ${MACRO}, gdzie MACRO to jedno z obsługiwanych makro opisanych w specyfikacji OpenRTB.

Makra Google RTB

Google obsługuje dodatkowe makropolecenia oprócz tych, które znajdują się w specyfikacji OpenRTB. Są one sformatowane inaczej i będą wyglądać tak:%%MACRO%%, jeśli zostaną umieszczone w adresie URL. Tabela poniżej opisuje te makro:

Makro Opis
ADVERTISING_IDENTIFIER Umożliwia kupującym otrzymywanie identyfikatora IDFA w iOS lub identyfikatora wyświetlania reklam (AdID) w Androidzie podczas renderowania wyświetlenia. Szczegółowe informacje znajdziesz w artykule Odszyfrowywanie identyfikatorów reklamodawcy.
CACHEBUSTER Ciąg znaków przedstawiający losową, bezznakową liczbę całkowitą o czterech bajtach.
CLICK_URL_UNESC

Niezmodyfikowany adres URL kliknięcia reklamy. W fragmentach kodu bezpośrednio po makrze powinna znajdować się ujęta w znaki ucieczki wersja adresu URL kliknięcia firmy zewnętrznej.

Jeśli np. klikany URL firmy zewnętrznej tohttp://my.adserver.com/some/path/handleclick?click=clk, możesz użyć kodu z jednokrotnym backslashem w klikanym adresie URL firmy zewnętrznej po wywołaniu makra:

<a href="%%CLICK_URL_UNESC%%http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a>

W momencie wyświetlania reklamy wartość ta jest rozszerzana do:

<a href="http://google-click-url?...&ad_url=http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a>

Adres URL najpierw rejestruje kliknięcie w Google, a potem przekierowuje do adresu URL kliknięcia należącego do osoby trzeciej.

CLICK_URL_ESC

Ucieczka adresu URL kliknięcia reklamy. Użyj tego zamiast CLICK_URL_UNESC, jeśli musisz najpierw przekazać wartość przez inny serwer, który zwróci przekierowanie.

W fragmentach kodu HTML można na przykład użyć tego kodu:

<a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC%%"></a>

W momencie wyświetlania reklamy wartość ta jest rozszerzana do:

<a href="http://my.adserver.com/click?google_click_url=http://google-click- url%3F...%26ad_url%3D"></a>

Spowoduje to zarejestrowanie kliknięcia w usługach my.adserver.com, które będą następnie odpowiedzialne za przekierowanie do adresu URL przekazanego w parametrze google_click_url. Zakładamy, że funkcja my.adserver.com dekoduje parametr google_click_url.

Po znaku %%CLICK_URL_ESC%% możesz dołączyć adres URL z podwójnym ucieczką. Po odkodowaniu przez my.adserver.com pozostaje wersja adresu URL ze zmianą znaczenia dołączona do google_click_url. Gdy zostanie pobrany parametr google_click_url, zostanie on ponownie ujęty w znaki ucieczki, a następnie nastąpi przekierowanie.

CLICK_URL_ESC_ESC

Podwójnie ujęty w znaki cudzysłowu adres URL reklamy. Użyj tego zamiast CLICK_URL_UNESC, jeśli musisz najpierw przekazać wartość przez inny serwer, który zwróci przekierowanie.

W fragmentach kodu HTML można na przykład użyć takiego kodu:

<a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC_ESC%%"></a>

W momencie wyświetlania reklamy wartość ta jest rozszerzana do:

<a href="http://my.otheradserver.com/click?google_click_url=http%3A%2F%2Fmy.adserver.com%2Fclick%3Fgoogle_click_url%3Dhttp%3A%2F%2Fgoogle-click-%20url%253F...%2526ad_url%253D"></a>
SCHEME Rozwinięte do http:, jeśli żądanie stawki nie wymaga protokołu SSL, lub do https:, jeśli żądanie stawki wymaga protokołu SSL.
SITE Domena z ucieczkami znaków w adresie URL treści lub anonimowy identyfikator anonimowego asortymentu.
SITE_URL Rola wycofana. Zastąpione przez makro SITE, które zapewnia identyczną funkcjonalność.
TZ_OFFSET przesunięcie strefy czasowej.
VERIFICATION

różne wartości w przypadku produkcji i skanowania kreacji w systemie weryfikacji. Format: %%?VERIFICATION:true-val:false-val%%, gdzie w przypadku parametrów true-valfalse-val można użyć dowolnych wartości (z wyjątkiem makr), w tym pustych ciągów znaków. W przypadku określania stawek w aukcjach otwartych zalecamy, aby giełdy używały tego makra. Po jego użyciu platformy po stronie popytu nie muszą wprowadzać zmian.

Jeśli np. kreacja zawierałaby tekst %%?VERIFICATION:-1:5000%%, w ramach procesu weryfikacji tekst zastępczy będzie miał postać 5000 w przypadku wyświetlania i -1 w przypadku ścieżki weryfikacji. Pomoże to odróżnić te 2 zbiory pingów.

WINNING_PRICE

Koszt zakodowanego wyświetlenia (czyli CPI, a nie CPM) w mikrosach waluty konta. Na przykład wygrany CPM w wysokości 5 USD odpowiada CPM w wysokości 5 000 000 milionowych części jednostki lub CPI w wysokości 5 000 milionowych części jednostki. Odkodowana wartość WINNING_PRICE w tym przypadku wynosiłaby 5000. Cena zwycięska jest podawana w CPI.

Aby przeanalizować to makro, musisz zaimplementować aplikację, która odszyfrowuje potwierdzenia cen. Więcej informacji znajdziesz na stronie Odszyfrowywanie potwierdzenia ceny.

WINNING_PRICE_ESC WINNING_PRICE w formie ucieczki składni URL.

Google wymaga, aby w kreacji reklamy obsługiwanej przez firmę zewnętrzną używać makra CLICK_URL_UNESC lub CLICK_URL_ESC. Google używa makro CLICK_URL do śledzenia kliknięć.

Makra używają ucieczki w adresach URL zgodnie z tym schematem:

  • Znak odstępu jest zastępowany znakiem plusa (+).
  • Znaki alfanumeryczne (0–9, a–z, A–Z) i znaki z zestawu !()*,-./:_~ pozostają niezmienione.
  • Wszystkie inne znaki są zastępowane przez %XX, gdzie XX to szesnastkowa liczba reprezentująca znak.

Ograniczenia i wymagania dotyczące wydawców

Pytanie o stawkę zawiera informacje o rodzajach ograniczeń i wymagań, które wydawcy nakładają na kreacje w aukcji.

  • BidRequest.bcat
    • Możesz porównać zablokowane kategorie określone w tym polu z kategoriami wykrytymi w przesłanych kreacjach za pomocą pola detectedCategories interfejsu Real-time Bidding API.
  • BidRequest.imp.ext.allowed_vendor_type
  • BidRequest.imp.secure
    • W praktyce zawsze będzie to wartość true, ponieważ Google wymaga obsługi protokołu SSL we wszystkich kreacjach.
  • BidRequest.imp.{audio/banner/native/video}
  • BidRequest.imp.{audio/banner/native/video}.api
  • BidRequest.imp.{audio/banner/native/video}.battr
  • BidRequest.imp.{audio/banner/video}.mimes

Nigdy nie licytuj reklamy zawierającej funkcję podlegającą ograniczeniom. W przypadku dozwolonych funkcji, takich jak typ dostawcy, zwracaj reklamę tylko wtedy, gdy typ dostawcy znajduje się na liście allowed_vendor_type w sekcji BidRequest. W stawce powinny być uwzględnione tylko formaty reklam określone w pytaniu o stawkę przez wypełnienie pól takich jak BidRequest.imp.banner. Aby dowiedzieć się więcej, zapoznaj się z komentarzami dotyczącymi tych pól w definicji bufora protokołu BidRequest.

Jeśli reklama jest zwracana w BidResponse, musisz prawidłowo ustawić pola BidResponse.seatbid.bid.attr, BidResponse.seatbid.bid.cat oraz BidResponse.seatbid.bid.adomain lub BidResponse.seatbid.bid.adm_native.link.urlBidResponse. Jeśli reklama ma wiele wartości w tych polach, musisz uwzględnić wszystkie wartości. Więcej informacji znajdziesz w opisach tych pól w definicji bufora protokołu BidResponse. Odpowiedzi, w których nie ma tych pól, są odrzucane.

Open Measurement

Open Measurement umożliwia określenie zewnętrznych dostawców, którzy zapewniają niezależne usługi pomiarowe i weryfikacyjne w przypadku reklam wyświetlanych w środowiskach aplikacji mobilnych.

Obsługiwane formaty reklam to reklamy wideo, banery i reklamy pełnoekranowe. Więcej informacji o używaniu pakietu Open Measurement w odpowiedzi na zapytanie o stawkę zawierającej te formaty znajdziesz w artykule w Centrum pomocy poświęconym pakietowi Open Measurement SDK.

Przykładowe odpowiedzi na stawkę

W następnych sekcjach znajdziesz przykładowe odpowiedzi na żądanie stawki w przypadku różnych typów reklam.

Baner aplikacji

Zserializowana odpowiedź
id: "8L85Di7e9374c3jriwo2W0"
seatbid {
  bid {
    id: "0L7hx7783rjD1hT81FH"
    impid: "1"
    price: 0.4000000059604645
    adm: "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>"
    adomain: "google.com"
    crid: "test_creative_id_192654"
    w: 300
    h: 50
    burl: "https://test.com/imp?id=123456"
    [com.google.doubleclick.bid] {
      impression_tracking_url: "https://test.com/impression?id=123456"
      billing_id: 70614819650
      skadn {
        version: "3.0"
        network: "Y8HK1z22"
        campaign: "72382716"
        itunesitem: "953637916"
        sourceapp: "com.google.testapp"
        fidelities {
          fidelity: VIEW_THROUGH_ADS
          nonce: "bf105d9a-6df9-4d49-a10d-44e21a539415"
          timestamp: "1730359683568"
          signature: "589Vb2BJlF955D6kUj197D84U8UWWtngYQ73o1SVMEcAk6ju348j0454AOxpR74j95BF13RLC119Qo73nyq2qgp4IJENP6yE"
        }
        fidelities {
          fidelity: STOREKIT_RENDERED_ADS
          nonce: "bf105d9a-6df9-4d49-a10d-44e21a539415"
          timestamp: "1730359683568"
          signature: "3Av39t8684YefY03NT715Z2dTtXQ39pQH7C9aq6Wuh4WzbS044734J7FAlw7690Nm7743G7Z4P6hX8K7H607886b7FBHTCYY"
        }
        skadn_opts {
          always_open_appstore: true
        }
      }
      app_promotion_type: INSTALLS
    }
  }
  seat: "4095:5416:758587"
}
cur: "USD"
[com.google.doubleclick.bid_response] {
  processing_time_ms: 16
}
{
  "id": "8L85Di7e9374c3jriwo2W0",
  "seatbid": [
    {
      "bid": [
        {
          "id": "0L7hx7783rjD1hT81FH",
          "impid": "1",
          "price": 0.4000000059604645,
          "adm": "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>",
          "adomain": [
            "google.com"
          ],
          "crid": "test_creative_id_192654",
          "w": 300,
          "h": 50,
          "burl": "https://test.com/imp?id=123456",
          "ext": {
            "impression_tracking_url": [
              "https://test.com/impression?id=123456"
            ],
            "billing_id": "70614819650",
            "skadn": {
              "version": "3.0",
              "network": "Y8HK1z22",
              "campaign": "72382716",
              "itunesitem": "953637916",
              "sourceapp": "com.google.testapp",
              "fidelities": [
                {
                  "fidelity": 0,
                  "nonce": "bf105d9a-6df9-4d49-a10d-44e21a539415",
                  "timestamp": "1730359683568",
                  "signature": "589Vb2BJlF955D6kUj197D84U8UWWtngYQ73o1SVMEcAk6ju348j0454AOxpR74j95BF13RLC119Qo73nyq2qgp4IJENP6yE"
                },
                {
                  "fidelity": 1,
                  "nonce": "bf105d9a-6df9-4d49-a10d-44e21a539415",
                  "timestamp": "1730359683568",
                  "signature": "3Av39t8684YefY03NT715Z2dTtXQ39pQH7C9aq6Wuh4WzbS044734J7FAlw7690Nm7743G7Z4P6hX8K7H607886b7FBHTCYY"
                }
              ],
              "skadn_opts": {
                "always_open_appstore": 1
              }
            },
            "app_promotion_type": 1
          }
        }
      ],
      "seat": "4095:5416:758587"
    }
  ],
  "cur": "USD",
  "ext": {
    "processing_time_ms": 16
  }
}
Zserializowana odpowiedź
ad {
  html_snippet: "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>"
  adslot {
    id: 1
    max_cpm_micros: 44095
    billing_id: 99718422589
  }
  click_through_url: "google.com"
  attribute: 47
  attribute: 50
  category: 7
  buyer_creative_id: "test_creative_id_997551"
  advertiser_name: "Google"
  width: 300
  height: 250
  impression_tracking_url: "https://test.com/imp?id=123456"
  skadn {
    version: "4.0"
    network: "DofiF4X5"
    itunesitem: "448730563"
    sourceapp: "195751234"
    fidelities {
      fidelity_type: VIEW_THROUGH_ADS
      nonce: "a869c155-3566-475c-8cb9-d0a75159e0c5"
      timestamp: 1728803273481
      signature: "0KXE97ri9xnW9M10NDg64r014MsN7SO5R11N29oe8h8Cuao3K477i9dFH61bKny28iA6337A6EK6T3fgR9p9EJK12qvaY96E"
    }
    fidelities {
      fidelity_type: STOREKIT_RENDERED_ADS
      nonce: "a869c155-3566-475c-8cb9-d0a75159e0c5"
      timestamp: 1728803273481
      signature: "EF1Vj82st371O79029Q9067AL00972U3NqNG9u295r8B4681c12Se2jk34XSR8404681c9WGa9a69779CQ87o9T81Y85198C"
    }
    source_identifier: 1
  }
  advertised_app_id: "APP_ID_OMITTED"
  app_promotion_type: INSTALLS
}
processing_time_ms: 13

Reklama pełnoekranowa w aplikacji

Zserializowana odpowiedź
id: "6700Z3L2o0zSw9g8IqmiQ5"
seatbid {
  bid {
    id: "0UBHDN63xQ8hj1F8184"
    impid: "1"
    price: 0.016728
    adid: "test_creative_id_179418"
    adm: "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>"
    adomain: "google.com"
    crid: "test_creative_id_179418"
    cat: "IAB13-7"
    w: 300
    h: 600
    burl: "https://test.com/imp?id=123456"
    [com.google.doubleclick.bid] {
      billing_id: 14443955188
      dsa {
        behalf: "TEST_ADVERTISER"
        paid: "TEST_PAYING_ENTITY"
        adrender: false
      }
    }
  }
  seat: "2054:4176:757161"
  group: false
}
bidid: "TI590379-wi3Z9CU8-6j8V-Uj0l1I102h2q"
cur: "USD"
{
  "id": "6700Z3L2o0zSw9g8IqmiQ5",
  "seatbid": [
    {
      "bid": [
        {
          "id": "0UBHDN63xQ8hj1F8184",
          "impid": "1",
          "price": 0.016728,
          "adid": "test_creative_id_179418",
          "adm": "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>",
          "adomain": [
            "google.com"
          ],
          "crid": "test_creative_id_179418",
          "cat": [
            "IAB13-7"
          ],
          "w": 300,
          "h": 600,
          "burl": "https://test.com/imp?id=123456",
          "ext": {
            "billing_id": "14443955188",
            "dsa": {
              "behalf": "TEST_ADVERTISER",
              "paid": "TEST_PAYING_ENTITY",
              "adrender": 0
            }
          }
        }
      ],
      "seat": "2054:4176:757161",
      "group": 0
    }
  ],
  "bidid": "TI590379-wi3Z9CU8-6j8V-Uj0l1I102h2q",
  "cur": "USD"
}
Zserializowana odpowiedź
ad {
  html_snippet: "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>"
  adslot {
    id: 1
    max_cpm_micros: 80117
    min_cpm_micros: 0
    billing_id: 12608068331
    deal_id: 0
  }
  click_through_url: "google.com"
  attribute: 47
  buyer_creative_id: "test_creative_id_266407"
  advertiser_name: "Google"
  width: 756
  height: 384
  impression_tracking_url: "https://test.com/imp?id=123456"
  event_notification_token: "token"
  dsa_transparency {
    buyer_render: true
  }
}
processing_time_ms: 11

Pełnoekranowa reklama wideo w aplikacji

Zserializowana odpowiedź
id: "79N7F1708654i75q3k69j1"
seatbid {
  bid {
    id: "1gR655162hOsH9q3X6R"
    impid: "1"
    price: 2.3833
    adid: "test_creative_id_648299"
    adm: "https://video.test.com/ads?id=123456&wprice=%%WINNING_PRICE%%"
    adomain: "google.com"
    crid: "test_creative_id_648299"
    attr: VIDEO_IN_BANNER_AUTO_PLAY
    w: 1920
    h: 1080
    [com.google.doubleclick.bid] {
      event_notification_token {
        payload: "token"
      }
      billing_id: 11004606416
      skadn {
        version: "4.0"
        network: "O5O88B57"
        itunesitem: "509167749"
        nonce: ""
        sourceapp: "com.google.testapp"
        timestamp: "OMITTED"
        signature: "OMITTED"
        fidelities {
          fidelity: VIEW_THROUGH_ADS
          nonce: "d3be52b1-8ef6-4277-8922-54450b07fd5b"
          timestamp: "1730409097616"
          signature: "8d52E359K158Dj1u89EpLP3544Qz7B10CV0a92YZJ6JXX8d9uXi72N43ZxjRl96Ph7v8R5u1k5y9Aoy3jZcN3C5dxRU390qc"
        }
        fidelities {
          fidelity: STOREKIT_RENDERED_ADS
          nonce: "d3be52b1-8ef6-4277-8922-54450b07fd5b"
          timestamp: "1730409097616"
          signature: "43C2b79X4nPY913Qs3jJLLhCjUNZg39cK022pCE2wH731Ie7q4584b5UGG137Jh12I2R6a0e35LJbvQJbn5o564roQ7G1Mtd"
        }
        sourceidentifier: "1"
      }
      app_promotion_type: INSTALLS
    }
  }
  seat: "1061:9160:833989"
}
bidid: "m7V3rjn0-aF599ZZ6-37hA-b9o7DU8CLrtp"
cur: "USD"
{
  "id": "79N7F1708654i75q3k69j1",
  "seatbid": [
    {
      "bid": [
        {
          "id": "1gR655162hOsH9q3X6R",
          "impid": "1",
          "price": 2.3833,
          "adid": "test_creative_id_648299",
          "adm": "https://video.test.com/ads?id=123456&wprice=%%WINNING_PRICE%%",
          "adomain": [
            "google.com"
          ],
          "crid": "test_creative_id_648299",
          "attr": [
            6
          ],
          "w": 1920,
          "h": 1080,
          "ext": {
            "event_notification_token": {
              "payload": "token"
            },
            "billing_id": "11004606416",
            "skadn": {
              "version": "4.0",
              "network": "O5O88B57",
              "itunesitem": "509167749",
              "nonce": "",
              "sourceapp": "com.google.testapp",
              "timestamp": "OMITTED",
              "signature": "OMITTED",
              "fidelities": [
                {
                  "fidelity": 0,
                  "nonce": "d3be52b1-8ef6-4277-8922-54450b07fd5b",
                  "timestamp": "1730409097616",
                  "signature": "8d52E359K158Dj1u89EpLP3544Qz7B10CV0a92YZJ6JXX8d9uXi72N43ZxjRl96Ph7v8R5u1k5y9Aoy3jZcN3C5dxRU390qc"
                },
                {
                  "fidelity": 1,
                  "nonce": "d3be52b1-8ef6-4277-8922-54450b07fd5b",
                  "timestamp": "1730409097616",
                  "signature": "43C2b79X4nPY913Qs3jJLLhCjUNZg39cK022pCE2wH731Ie7q4584b5UGG137Jh12I2R6a0e35LJbvQJbn5o564roQ7G1Mtd"
                }
              ],
              "sourceidentifier": "1"
            },
            "app_promotion_type": 1
          }
        }
      ],
      "seat": "1061:9160:833989"
    }
  ],
  "bidid": "m7V3rjn0-aF599ZZ6-37hA-b9o7DU8CLrtp",
  "cur": "USD"
}
Zserializowana odpowiedź
ad {
  adslot {
    id: 1
    max_cpm_micros: 2454000
    billing_id: 95400492935
    deal_id: 1
  }
  click_through_url: "google.com"
  attribute: 22
  attribute: 105
  buyer_creative_id: "test_creative_id_716344"
  width: 0
  height: 0
  video_vast_xml: "OMITTED_VAST_XML"
  event_notification_token: "token"
  skadn {
    version: "4.0"
    network: "113tdmXM"
    itunesitem: "460184775"
    sourceapp: "751592940"
    fidelities {
      fidelity_type: STOREKIT_RENDERED_ADS
      nonce: "1c3ed154-33f5-4cb7-960a-3e571cb9c3b9"
      timestamp: 1728932156118
      signature: "7m3PDLV778PZ741T2I3561kkCW3UjIp5p63989cP311iiZ2445v20HP5ymfD8ThYO7437h22075h4h9O21S8A08U1kw3qis2"
    }
    fidelities {
      fidelity_type: VIEW_THROUGH_ADS
      nonce: "1c3ed154-33f5-4cb7-960a-3e571cb9c3b9"
      timestamp: 1728932156118
      signature: "28X90AX01Z762a3W92186a40Eb4J8ekACsYFo55J8vD445f5pcA80MH45753Iy887596gK8ax0s55ndC23eg0V7P862yS240"
    }
    source_identifier: 1
  }
  advertised_app_id: "APP_ID_OMITTED"
  app_promotion_type: INSTALLS
}
processing_time_ms: 51

Aplikacja natywna

Zserializowana odpowiedź
id: "96Z599PGNvp7Mr99138Fm0"
seatbid {
  bid {
    id: "NQb32Ge7Rtt84wFn2p8"
    impid: "1"
    price: 0.153584
    adid: "test_creative_id_272596"
    adomain: "google.com"
    crid: "test_creative_id_272596"
    cat: "IAB13-7"
    burl: "https://test.com/imp?id=123456"
    adm_native {
      ver: "1.2"
      assets {
        id: 1
        required: true
        title {
          text: "Luxury Mars Cruises"
        }
      }
      assets {
        id: 2
        required: true
        data {
          value: "Visit the planet in a luxury spaceship."
        }
      }
      assets {
        id: 3
        required: false
        data {
          value: "Book today"
        }
      }
      assets {
        id: 4
        required: true
        data {
          value: "Galactic Luxury Cruises"
        }
      }
      assets {
        id: 5
        required: true
        img {
          url: "https://native.test.com/image?id=123456"
          w: 1200
          h: 627
        }
      }
      link {
        url: "https://www.google.com"
      }
      eventtrackers {
        event: IMPRESSION
        method: IMG
        url: "https://test.com/event?id=123456"
      }
      privacy: "https://adssettings.google.com/whythisad?source=display&reasons=OMITTED"
    }
    [com.google.doubleclick.bid] {
      ad_choices_destination_url: "https://test.com/preferences"
      billing_id: 29846056590
      dsa {
        behalf: "TEST_ADVERTISER"
        paid: "TEST_PAYING_ENTITY"
        adrender: false
      }
    }
  }
  bid {
    id: "4vwb23qm6iqU6w6G978"
    impid: "1"
    price: 0.153584
    adid: "test_creative_id_272596"
    adomain: "google.com"
    crid: "test_creative_id_272596"
    cat: "IAB21"
    burl: "https://test.com/imp?id=123456"
    adm_native {
      ver: "1.2"
      assets {
        id: 1
        required: true
        title {
          text: "Luxury Mars Cruises"
        }
      }
      assets {
        id: 2
        required: true
        data {
          value: "Visit the planet in a luxury spaceship."
        }
      }
      assets {
        id: 3
        required: false
        data {
          value: "Book today"
        }
      }
      assets {
        id: 4
        required: true
        data {
          value: "Galactic Luxury Cruises"
        }
      }
      assets {
        id: 5
        required: true
        img {
          url: "https://native.test.com/image?id=123456"
          w: 1200
          h: 627
        }
      }
      link {
        url: "https://www.google.com"
      }
      eventtrackers {
        event: IMPRESSION
        method: IMG
        url: "https://test.com/event?id=123456"
      }
      privacy: "https://adssettings.google.com/whythisad?source=display&reasons=OMITTED"
    }
    [com.google.doubleclick.bid] {
      ad_choices_destination_url: "https://test.com/preferences"
      dsa {
        behalf: "TEST_ADVERTISER"
        paid: "TEST_PAYING_ENTITY"
        adrender: false
      }
    }
  }
  seat: "4528:1161:591635"
  group: false
}
bidid: "hgu4ev7j-ZK929XM0-79f7-0A23O0VN2CFC"
cur: "USD"
{
  "id": "96Z599PGNvp7Mr99138Fm0",
  "seatbid": [
    {
      "bid": [
        {
          "id": "NQb32Ge7Rtt84wFn2p8",
          "impid": "1",
          "price": 0.153584,
          "adid": "test_creative_id_272596",
          "adomain": [
            "google.com"
          ],
          "crid": "test_creative_id_272596",
          "cat": [
            "IAB13-7"
          ],
          "burl": "https://test.com/imp?id=123456",
          "ext": {
            "ad_choices_destination_url": "https://test.com/preferences",
            "billing_id": "29846056590",
            "dsa": {
              "behalf": "TEST_ADVERTISER",
              "paid": "TEST_PAYING_ENTITY",
              "adrender": 0
            }
          },
          "adm": "{\"ver\":\"1.2\",\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"text\":\"Luxury Mars Cruises\"}},{\"id\":2,\"required\":1,\"data\":{\"value\":\"Visit the planet in a luxury spaceship.\"}},{\"id\":3,\"required\":0,\"data\":{\"value\":\"Book today\"}},{\"id\":4,\"required\":1,\"data\":{\"value\":\"Galactic Luxury Cruises\"}},{\"id\":5,\"required\":1,\"img\":{\"url\":\"https://native.test.com/image?id=123456\",\"w\":1200,\"h\":627}}],\"link\":{\"url\":\"https://www.google.com\"},\"eventtrackers\":[{\"event\":1,\"method\":1,\"url\":\"https://test.com/event?id=123456\"}],\"privacy\":\"https://adssettings.google.com/whythisad?source=display&reasons=OMITTED\"}"
        },
        {
          "id": "4vwb23qm6iqU6w6G978",
          "impid": "1",
          "price": 0.153584,
          "adid": "test_creative_id_272596",
          "adomain": [
            "google.com"
          ],
          "crid": "test_creative_id_272596",
          "cat": [
            "IAB21"
          ],
          "burl": "https://test.com/imp?id=123456",
          "ext": {
            "ad_choices_destination_url": "https://test.com/preferences",
            "dsa": {
              "behalf": "TEST_ADVERTISER",
              "paid": "TEST_PAYING_ENTITY",
              "adrender": 0
            }
          },
          "adm": "{\"ver\":\"1.2\",\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"text\":\"Luxury Mars Cruises\"}},{\"id\":2,\"required\":1,\"data\":{\"value\":\"Visit the planet in a luxury spaceship.\"}},{\"id\":3,\"required\":0,\"data\":{\"value\":\"Book today\"}},{\"id\":4,\"required\":1,\"data\":{\"value\":\"Galactic Luxury Cruises\"}},{\"id\":5,\"required\":1,\"img\":{\"url\":\"https://native.test.com/image?id=123456\",\"w\":1200,\"h\":627}}],\"link\":{\"url\":\"https://www.google.com\"},\"eventtrackers\":[{\"event\":1,\"method\":1,\"url\":\"https://test.com/event?id=123456\"}],\"privacy\":\"https://adssettings.google.com/whythisad?source=display&reasons=OMITTED\"}"
        }
      ],
      "seat": "4528:1161:591635",
      "group": 0
    }
  ],
  "bidid": "hgu4ev7j-ZK929XM0-79f7-0A23O0VN2CFC",
  "cur": "USD"
}
Zserializowana odpowiedź
ad {
  adslot {
    id: 1
    max_cpm_micros: 158000
    billing_id: 41106584355
    deal_id: 1
  }
  click_through_url: "google.com"
  attribute: 70
  buyer_creative_id: "test_creative_id_251451"
  advertiser_name: "Google"
  native_ad {
    headline: "Luxury Mars Cruises"
    body: "Visit the planet in a luxury spaceship."
    call_to_action: "Book today"
    advertiser: "Galactic Luxury Cruises"
    image {
      url: "https://native.test.com/image?id=123456"
      width: 1200
      height: 222
    }
    app_icon {
      url: "https://native.test.com/icon?id=123456"
      width: 512
      height: 512
    }
    star_rating: 4.300000190734863
    click_link_url: "https://www.google.com"
  }
  impression_tracking_url: "https://test.com/imp?id=123456"
  impression_tracking_url: "https://test.com/imp?id=123456"
  event_notification_token: "token"
  skadn {
    version: "4.0"
    network: "l6x39K4z"
    itunesitem: "731305960"
    sourceapp: "627009739"
    fidelities {
      fidelity_type: STOREKIT_RENDERED_ADS
      nonce: "9216faff-74a9-4b35-badc-66878c35f67c"
      timestamp: 1728975919221
      signature: "b0USXkmg02Q3v6p301kYOHG36CCOWWdEo52RHRttB9t8PTNi79qL17E4D6h7UeUSuq479oTK13G2Ev34MJlU86C5vY1SMVw2"
    }
    fidelities {
      fidelity_type: VIEW_THROUGH_ADS
      nonce: "9216faff-74a9-4b35-badc-66878c35f67c"
      timestamp: 1728975919221
      signature: "4Cf4NH6239z9f3wa8j6420Z7H0UISYxyxN5720444dkq6457I5FY0Jg8bk1xge2P8YgiDp74l2738136v2g1A8D50331IRm0"
    }
    source_identifier: 1
  }
  click_tracking_urls: "https://google.com/rtb/click?imp_id=55d2112c-4947-4da5-bc37-b79ebf4577dd"
  advertised_app_id: "APP_ID_OMITTED"
  app_promotion_type: INSTALLS
}
processing_time_ms: 63

Film internetowy

Zserializowana odpowiedź
id: "b2F6m05a9d83V7I35iw415"
seatbid {
  bid {
    id: "Ob7259K5679O36pMt00"
    impid: "1"
    price: 1.52
    adid: "test_creative_id_262797"
    adm: "https://video.test.com/ads?id=123456&wprice=%%WINNING_PRICE%%"
    adomain: "google.com"
    crid: "test_creative_id_262797"
    exp: 3600
    [com.google.doubleclick.bid] {
      event_notification_token {
        payload: "token"
      }
      billing_id: 47460168025
    }
  }
  bid {
    id: "0890di791A75n9R13jM"
    impid: "1"
    price: 1.2
    adid: "test_creative_id_262797"
    adm: "https://video.test.com/ads?id=123456&wprice=%%WINNING_PRICE%%"
    adomain: "google.com"
    crid: "test_creative_id_262797"
    exp: 3600
    [com.google.doubleclick.bid] {
      event_notification_token {
        payload: "token"
      }
    }
  }
  seat: "2121:7826:598388"
}
cur: "USD"
{
  "id": "b2F6m05a9d83V7I35iw415",
  "seatbid": [
    {
      "bid": [
        {
          "id": "Ob7259K5679O36pMt00",
          "impid": "1",
          "price": 1.52,
          "adid": "test_creative_id_262797",
          "adm": "https://video.test.com/ads?id=123456&wprice=%%WINNING_PRICE%%",
          "adomain": [
            "google.com"
          ],
          "crid": "test_creative_id_262797",
          "exp": 3600,
          "ext": {
            "event_notification_token": {
              "payload": "token"
            },
            "billing_id": "47460168025"
          }
        },
        {
          "id": "0890di791A75n9R13jM",
          "impid": "1",
          "price": 1.2,
          "adid": "test_creative_id_262797",
          "adm": "https://video.test.com/ads?id=123456&wprice=%%WINNING_PRICE%%",
          "adomain": [
            "google.com"
          ],
          "crid": "test_creative_id_262797",
          "exp": 3600,
          "ext": {
            "event_notification_token": {
              "payload": "token"
            }
          }
        }
      ],
      "seat": "2121:7826:598388"
    }
  ],
  "cur": "USD"
}
Zserializowana odpowiedź
fad {
  adslot {
    id: 1
    max_cpm_micros: 68340760
    min_cpm_micros: 0
    billing_id: 75752641104
    deal_id: 0
  }
  click_through_url: "google.com"
  vendor_type: 145
  attribute: 47
  attribute: 8
  video_url: "https://video.test.com/ads?id=123456&wprice=%%WINNING_PRICE%%"
  buyer_creative_id: "test_creative_id_877383"
  advertiser_name: "Google"
  event_notification_token: "token"
  dsa_transparency {
    buyer_render: true
  }
}
processing_time_ms: 17

Baner internetowy na urządzenia mobilne dla licytujących na giełdzie

Zserializowana odpowiedź
id: "l30Zu42070Man1Z5u751yG"
seatbid {
  bid {
    id: "4X6uu65F9J3m467C571"
    impid: "1"
    price: 0.17
    adm: "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>"
    adomain: "google.com"
    crid: "test_creative_id_941528"
    w: 320
    h: 50
    [com.google.doubleclick.bid] {
      impression_tracking_url: "https://test.com/impression?id=123456"
      impression_tracking_url: "https://test.com/impression?id=123456"
      event_notification_token {
        payload: "token"
      }
      billing_id: 50962964480
    }
  }
  seat: "7632:7504:809671"
}
bidid: "II638Xkf-6432F06d-VGu8-27B4407D136w"
[com.google.doubleclick.bid_response] {
  processing_time_ms: 70
}
{
  "id": "l30Zu42070Man1Z5u751yG",
  "seatbid": [
    {
      "bid": [
        {
          "id": "4X6uu65F9J3m467C571",
          "impid": "1",
          "price": 0.17,
          "adm": "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>",
          "adomain": [
            "google.com"
          ],
          "crid": "test_creative_id_941528",
          "w": 320,
          "h": 50,
          "ext": {
            "impression_tracking_url": [
              "https://test.com/impression?id=123456",
              "https://test.com/impression?id=123456"
            ],
            "event_notification_token": {
              "payload": "token"
            },
            "billing_id": "50962964480"
          }
        }
      ],
      "seat": "7632:7504:809671"
    }
  ],
  "bidid": "II638Xkf-6432F06d-VGu8-27B4407D136w",
  "ext": {
    "processing_time_ms": 70
  }
}