Open Bidding network integration

ORTB Request/Response

Yandex endpoint for server-server integration that will be provided by the manager.

Yandex supports the OpenRTB API Specification 2.5.

Bid Request structure

Bid RequestObject

Attribute

Type

Required

Description

id

String

Yes

Unique ID of the bid request, provided by the exchange

imp

Imp objects array

Yes

Array of Imp objects representing the impressions offered (see Imp object). Only the first imp object is taken into account

app

App object

Yes

Details via an App object about the publisher’s app (see App object)

device

device object

Yes

Details via a Device object about the user’s device to which the impression will be delivered (see Device object)

user

User object

Yes

Details via a User object about the human user of the device; the advertising audience (see User object)

tmax

Integer

Yes

Maximum time in milliseconds the exchange allows for bids to be received including Internet latency to avoid timeout

cur

String array

Yes

Array of allowed currencies for bids on this bid request using ISO-4217 alpha codes; ["USD"] by default

test

Integer

No

Indicator of test mode in which auctions are not billable, where 0 = live mode, 1 = test mode; 0 by default

at

Integer

No

Auction type, where 1 = First Price, 2 = Second Price Plus; 1 by default

bcat

String array

No

Blocked advertiser categories using the IAB content categories

regs

Regs object

No

A Regs object that specifies any industry, legal, or governmental regulations in force for this request (see Reqs object)

Appobject

Attribute

Type

Required

Description

bundle

String

Yes

A platform-specific application identifier intended to be unique to the app and independent of the exchange

id

String

No

Exchange-specific app ID

name

String

No

App name

cat

String array

No

Array of IAB content categories of the app

ver

String

No

Application version

publisher

publisher object

No

Details about the Publisher of the app

keywords

String

No

Comma separated list of keywords about the app

Publisherobject

Attribute

Type

Required

Description

id

String

No

Exchange-specific publisher ID

name

String

No

Publisher name

cat

String array

No

Array of IAB content categories that describe the publisher

domain

String

No

Highest level domain of the publisher

Deviceobject

Attribute

Type

Required

Description

ua

String

Yes

Browser user agent string

ip

String

Yes

IPv4 address closest to device

geo

Geo object

No

Location of the device assumed to be the user’s current location defined by a Geo object (see Geo object)

dnt

Integer

No

Standard Do Not Track flag as set in the header by the browser, where 0 = tracking is unrestricted, 1 = do not track

lmt

Integer

No

Limit Ad Tracking signal commercially endorsed, where 0 = tracking is unrestricted, 1 = tracking must be limited per commercial guidelines

ipv6

String

No

IP address closest to device as IPv6

os

String

No

Device operating system

osv

String

No

Device operating system version

h

Integer

No

Physical height of the screen in pixels

w

Integer

No

Physical width of the screen in pixels

language

String

No

Browser language using ISO-639-1-alpha-2

connectiontype

Integer

No

Network connection type

ifa

String

No

ID sanctioned for advertiser use in the clear

Geoobject

Attribute

Type

Required

Description

lat

Float

No

Latitude from -90.0 to +90.0, where negative is south

lon

Float

No

Longitude from -180.0 to +180.0, where negative is west

country

String

No

Country code using ISO-3166-1-alpha-3

region

String

No

Region code using ISO-3166-2; 2-letter state code if USA

city

String

No

City using United Nations Code for Trade & Transport Locations

Impobject

Attribute

Type

Required

Description

id

String

Yes

A unique identifier for this impression within the context of the bid request

tagid

String

Yes

Yandex Ads ad unit ID

ext.ad_type

String

Yes

A type of the ad. Values: banner, interstitial, rewarded, appopenad, native

banner

Banner object

No

A Banner object

video

Video object

No

A Video object

native

Native object

No

A Native object

instl

Integer

No

1 = the ad is interstitial or full screen, 0 = not interstitial

rwdd

Integer

No

Indicates whether the user receives a reward for viewing the ad, where 0 = no, 1 = yes

Attribute

Type

Required

Description

w

Integer

No

Exact width in device independent pixels (DIPS)

h

Integer

No

Exact height in device independent pixels (DIPS)

format

Format objects array

No

Array of Format objects representing the banner sizes permitted (see Format object)

Formatobject

Attribute

Type

Required

Description

w

Integer

No

Width in device independent pixels (DIPS)

h

Integer

No

Height in device independent pixels (DIPS)

wratio

Integer

No

Relative width when expressing size as a ratio

hratio

Integer

No

Relative height when expressing size as a ratio

wmin

Integer

No

The minimum width in device independent pixels (DIPS) at which the ad will be displayed. The size is expressed as a ratio

Videoobject

Attribute

Type

Required

Description

mimes

String array

No

Exact width in device independent pixels (DIPS)

w

Integer

No

Width of the video player in device independent pixels (DIPS)

h

Integer

No

Height of the video player in device independent pixels (DIPS)

Nativeobject

Attribute

Type

Required

Description

request

String

No

Request payload complying with the Native Ad Specification

ver

Integer

No

Version of the Dynamic Native Ads API to which request complies

Userobject

Attribute

Type

Required

Description

data.segment.signal

String

Yes

Bidder token acquired from Yandex Mobile Ads SDK

id

String

No

Exchange-specific ID for the user

keywords

String

No

Comma separated list of keywords, interests, or intent

Regsobject

Attribute

Type

Required

Description

coppa

Integer

No

Flag indicating if this request is subject to the COPPA regulations, where 0 = no, 1 = yes

gdpr

Integer

No

Flag indicating if this request is subject to the GDPR regulations, where 0 = no, 1 = yes

ext.consent

Integer

No

Flag indicating if a user has granted consent, where 0 = no, 1 = yes

ext.tcf_consent_string

String

No

TCF consent string as url safe base64 string. Yandex AC Vendor ID is 1033

We recommend adding a header X-Country-Code with the value of the country code.

Bid Request examples

{
  "id": "00000000000000000000000",
  "at": 1,
  "tmax": 3000,
  "cur": [
    "USD"
  ],
  "app": {
    "name": "Test app",
    "bundle": "test.bundle",
    "cat": [
      "IAB9-30"
    ],
    "publisher": {
      "name": "Demo studio games",
      "domain": "test.domain"
    }
  },
  "device": {
    "ifa": "52fc72ad-dfa3-4ccb-a614-d60c3a9ec905",
    "ip": "000.000.000.000",
    "language": "en",
    "connectiontype": 6,
    "h": 1650,
    "w": 720,
    "geo": {
      "lat": 1.0,
      "lon": 1.0,
      "city": "Demo city"
    },
    "osv": "12.0.0",
    "os": "android",
    "ua": "demo user agent",
  },
  "imp": [
    {
      "id": "1",
      "instl": 0,
      "tagid": "demo-banner-yandex",
      "rwdd": 0,
      "banner": {
        "w": 320,
        "h": 50
      },
      "ext": {
        "ad_type": "banner"
      }
    }
  ],
  "user": {
    "data": [
      {
        "segment": [
          {
            "signal": "AAAAAZCN7oq0h2hscaYv9Toq9PQ5a/rlD2WTApTYPSXW0vYlQDYoLruywTekZYfFo6XhydKev15guctnw3WsQhhZ5bX19b59Ro00fVQqJ5k8uKbITKkDS/c/VDymvomUxg/B9yAfVm4BUDkzknfplXBlKXOwPCTbN7PXZ307OFEjvUhexcTkue4bK6sD/mGvOFZv6ZrT12zsJyfDVFdLJxbdPzsQM0Wg1/jgyDF+oO0zRLOCwbX2UNPW7DRJtsKvArZhqrY9tUTaSFaWFpimGKMkC6PXV9Q9BH5uw5qIptis8PCwrT5T/z9cKdQ+bb0DiQklyn9UZuldGGyJBYdzbEyaQ3hKDyjQqZMAM4EX19hrM/T0/4v8Xt63mgPVLNjQECQPpf9lErm0YQvlMsmF3iy5LbdNO3fUeFj8JK3P0QYpsylMBMm2JKnRW0pJGXuJpz8NjHjVvz/wFcj+KrYcsEYgq+rysEh/e1jTTMLntAnOyaCA/Hr53UKq1nzTgh3ovDksMm6V5RUPJzTrWSey1zPdqujrh8mKJNq1bi0Eq45waVkBJ011JFcQo0Hn9Gei6rOvvr8H98rC4PTufWsgmCxjxNeNTfeQQTMZGvWAmq02gsCSfp8reAzSWdRWEwJFxtgSVa45G01Q/aQuH4FRI5B/FOoIqqIP/J/lTo74PtSpuSU/WU0xXZaxDUdDkc26yEpv0KDU/7uQH4Ffjj8L3T/S93SKAuQVxhHqRGBr7xS2jHIsAXwcllV+L1HiUcgM4nBbXTUg6r0UB6U817hbRd+u5/9S6wXX6SqrUWBG/ACbSKpi5urQz1ZmKAUGzj098rKXonrrRGEMGOFnMA3mSAqKNOUfx+BVs7Je75IitJzhiyETzRjKodFRWWeavF69wxs/8roFqoUySSbipX9maEzKy3Uaevryx4k+QramYCNDNjjzimMyjlWnwI5bdcHuPP1iaM5X/gAfSwEQdWVkcU1VVhNJ6xV35wUmoqOQbVnvHSQIZPhaAT3ooZnK/UrIZ3EW3uVODfl/dnYmE5Pe+KoUg/qxoLpfPhxqiUJpQHkI697FT82JeG85hFmuldqbInKXVvoCWSvXvQIIBGNMtfHZFCtpiCFgGxLhQRVkSKyprYc/uCbmYaH38WruoFVvTx43M2rhMz1TKQODKRfrim6v4IEm1eSe76AC0/4fumZkcc3dVDV6BtItAtS58yeGb8UTRYdUHpTXvCqp5LsHUNow4yOxmzXeTFHHAZ3kv95IqlujanO7d+XnWLTTe8j0wcq+h559tK74UCoGgiWNKH84D7ePUuTzybY0Gr2LZYLbWIZBBIzsQQbZfjG3bTYIS8ePdUVQJGuoTl4R377zm/qBcKhMJlkrp/sCCj40xun5w/YRJ1NPoHMBoM9SCWGgUny51FIJI9TP4tRMBl3LhqwQPqYTDQz1qGF4oN74+EazQIskye33PPCay02uu8uVUg2OJA=="
          }
        ]
      }
    ]
  }
}
{
  "id": "00000000000000000000000",
  "at": 1,
  "tmax": 3000,
  "cur": [
    "USD"
  ],
  "app": {
    "name": "Test app",
    "bundle": "test.bundle",
    "cat": [
      "IAB9-30"
    ],
    "publisher": {
      "name": "Demo studio games",
      "domain": "test.domain"
    }
  },
  "device": {
    "ifa": "52fc72ad-dfa3-4ccb-a614-d60c3a9ec905",
    "ip": "000.000.000.000",
    "language": "en",
    "connectiontype": 6,
    "h": 1650,
    "w": 720,
    "geo": {
      "lat": 1.0,
      "lon": 1.0,
      "city": "Demo city"
    },
    "osv": "12.0.0",
    "os": "android",
    "ua": "demo user agent",
  },
  "imp": [
    {
      "id": "1",
      "instl": 1,
      "tagid": "demo-interstitial-yandex",
      "rwdd": 0,
      "ext": {
        "ad_type": "interstitial"
      }
    }
  ],
  "user": {
    "data": [
      {
        "segment": [
          {
            "signal": "AAAAAZCN7oq0h2hscaYv9Toq9PQ5a/rlD2WTApTYPSXW0vYlQDYoLruywTekZYfFo6XhydKev15guctnw3WsQhhZ5bX19b59Ro00fVQqJ5k8uKbITKkDS/c/VDymvomUxg/B9yAfVm4BUDkzknfplXBlKXOwPCTbN7PXZ307OFEjvUhexcTkue4bK6sD/mGvOFZv6ZrT12zsJyfDVFdLJxbdPzsQM0Wg1/jgyDF+oO0zRLOCwbX2UNPW7DRJtsKvArZhqrY9tUTaSFaWFpimGKMkC6PXV9Q9BH5uw5qIptis8PCwrT5T/z9cKdQ+bb0DiQklyn9UZuldGGyJBYdzbEyaQ3hKDyjQqZMAM4EX19hrM/T0/4v8Xt63mgPVLNjQECQPpf9lErm0YQvlMsmF3iy5LbdNO3fUeFj8JK3P0QYpsylMBMm2JKnRW0pJGXuJpz8NjHjVvz/wFcj+KrYcsEYgq+rysEh/e1jTTMLntAnOyaCA/Hr53UKq1nzTgh3ovDksMm6V5RUPJzTrWSey1zPdqujrh8mKJNq1bi0Eq45waVkBJ011JFcQo0Hn9Gei6rOvvr8H98rC4PTufWsgmCxjxNeNTfeQQTMZGvWAmq02gsCSfp8reAzSWdRWEwJFxtgSVa45G01Q/aQuH4FRI5B/FOoIqqIP/J/lTo74PtSpuSU/WU0xXZaxDUdDkc26yEpv0KDU/7uQH4Ffjj8L3T/S93SKAuQVxhHqRGBr7xS2jHIsAXwcllV+L1HiUcgM4nBbXTUg6r0UB6U817hbRd+u5/9S6wXX6SqrUWBG/ACbSKpi5urQz1ZmKAUGzj098rKXonrrRGEMGOFnMA3mSAqKNOUfx+BVs7Je75IitJzhiyETzRjKodFRWWeavF69wxs/8roFqoUySSbipX9maEzKy3Uaevryx4k+QramYCNDNjjzimMyjlWnwI5bdcHuPP1iaM5X/gAfSwEQdWVkcU1VVhNJ6xV35wUmoqOQbVnvHSQIZPhaAT3ooZnK/UrIZ3EW3uVODfl/dnYmE5Pe+KoUg/qxoLpfPhxqiUJpQHkI697FT82JeG85hFmuldqbInKXVvoCWSvXvQIIBGNMtfHZFCtpiCFgGxLhQRVkSKyprYc/uCbmYaH38WruoFVvTx43M2rhMz1TKQODKRfrim6v4IEm1eSe76AC0/4fumZkcc3dVDV6BtItAtS58yeGb8UTRYdUHpTXvCqp5LsHUNow4yOxmzXeTFHHAZ3kv95IqlujanO7d+XnWLTTe8j0wcq+h559tK74UCoGgiWNKH84D7ePUuTzybY0Gr2LZYLbWIZBBIzsQQbZfjG3bTYIS8ePdUVQJGuoTl4R377zm/qBcKhMJlkrp/sCCj40xun5w/YRJ1NPoHMBoM9SCWGgUny51FIJI9TP4tRMBl3LhqwQPqYTDQz1qGF4oN74+EazQIskye33PPCay02uu8uVUg2OJA=="
          }
        ]
      }
    ]
  }
}
{
  "id": "00000000000000000000000",
  "at": 1,
  "tmax": 3000,
  "cur": [
    "USD"
  ],
  "app": {
    "name": "Test app",
    "bundle": "test.bundle",
    "cat": [
      "IAB9-30"
    ],
    "publisher": {
      "name": "Demo studio games",
      "domain": "test.domain"
    }
  },
  "device": {
    "ifa": "52fc72ad-dfa3-4ccb-a614-d60c3a9ec905",
    "ip": "000.000.000.000",
    "language": "en",
    "connectiontype": 6,
    "h": 1650,
    "w": 720,
    "geo": {
      "lat": 1.0,
      "lon": 1.0,
      "city": "Demo city"
    },
    "osv": "12.0.0",
    "os": "android",
    "ua": "demo user agent",
  },
  "imp": [
    {
      "id": "1",
      "instl": 0,
      "tagid": "demo-rewarded-yandex",
      "rwdd": 1,
      "ext": {
        "ad_type": "rewarded"
      }
    }
  ],
  "user": {
    "data": [
      {
        "segment": [
          {
            "signal": "AAAAAZCN7oq0h2hscaYv9Toq9PQ5a/rlD2WTApTYPSXW0vYlQDYoLruywTekZYfFo6XhydKev15guctnw3WsQhhZ5bX19b59Ro00fVQqJ5k8uKbITKkDS/c/VDymvomUxg/B9yAfVm4BUDkzknfplXBlKXOwPCTbN7PXZ307OFEjvUhexcTkue4bK6sD/mGvOFZv6ZrT12zsJyfDVFdLJxbdPzsQM0Wg1/jgyDF+oO0zRLOCwbX2UNPW7DRJtsKvArZhqrY9tUTaSFaWFpimGKMkC6PXV9Q9BH5uw5qIptis8PCwrT5T/z9cKdQ+bb0DiQklyn9UZuldGGyJBYdzbEyaQ3hKDyjQqZMAM4EX19hrM/T0/4v8Xt63mgPVLNjQECQPpf9lErm0YQvlMsmF3iy5LbdNO3fUeFj8JK3P0QYpsylMBMm2JKnRW0pJGXuJpz8NjHjVvz/wFcj+KrYcsEYgq+rysEh/e1jTTMLntAnOyaCA/Hr53UKq1nzTgh3ovDksMm6V5RUPJzTrWSey1zPdqujrh8mKJNq1bi0Eq45waVkBJ011JFcQo0Hn9Gei6rOvvr8H98rC4PTufWsgmCxjxNeNTfeQQTMZGvWAmq02gsCSfp8reAzSWdRWEwJFxtgSVa45G01Q/aQuH4FRI5B/FOoIqqIP/J/lTo74PtSpuSU/WU0xXZaxDUdDkc26yEpv0KDU/7uQH4Ffjj8L3T/S93SKAuQVxhHqRGBr7xS2jHIsAXwcllV+L1HiUcgM4nBbXTUg6r0UB6U817hbRd+u5/9S6wXX6SqrUWBG/ACbSKpi5urQz1ZmKAUGzj098rKXonrrRGEMGOFnMA3mSAqKNOUfx+BVs7Je75IitJzhiyETzRjKodFRWWeavF69wxs/8roFqoUySSbipX9maEzKy3Uaevryx4k+QramYCNDNjjzimMyjlWnwI5bdcHuPP1iaM5X/gAfSwEQdWVkcU1VVhNJ6xV35wUmoqOQbVnvHSQIZPhaAT3ooZnK/UrIZ3EW3uVODfl/dnYmE5Pe+KoUg/qxoLpfPhxqiUJpQHkI697FT82JeG85hFmuldqbInKXVvoCWSvXvQIIBGNMtfHZFCtpiCFgGxLhQRVkSKyprYc/uCbmYaH38WruoFVvTx43M2rhMz1TKQODKRfrim6v4IEm1eSe76AC0/4fumZkcc3dVDV6BtItAtS58yeGb8UTRYdUHpTXvCqp5LsHUNow4yOxmzXeTFHHAZ3kv95IqlujanO7d+XnWLTTe8j0wcq+h559tK74UCoGgiWNKH84D7ePUuTzybY0Gr2LZYLbWIZBBIzsQQbZfjG3bTYIS8ePdUVQJGuoTl4R377zm/qBcKhMJlkrp/sCCj40xun5w/YRJ1NPoHMBoM9SCWGgUny51FIJI9TP4tRMBl3LhqwQPqYTDQz1qGF4oN74+EazQIskye33PPCay02uu8uVUg2OJA=="
          }
        ]
      }
    ]
  }
}
{
  "id": "00000000000000000000000",
  "at": 1,
  "tmax": 3000,
  "cur": [
    "USD"
  ],
  "app": {
    "name": "Test app",
    "bundle": "test.bundle",
    "cat": [
      "IAB9-30"
    ],
    "publisher": {
      "name": "Demo studio games",
      "domain": "test.domain"
    }
  },
  "device": {
    "ifa": "52fc72ad-dfa3-4ccb-a614-d60c3a9ec905",
    "ip": "000.000.000.000",
    "language": "en",
    "connectiontype": 6,
    "h": 1650,
    "w": 720,
    "geo": {
      "lat": 1.0,
      "lon": 1.0,
      "city": "Demo city"
    },
    "osv": "12.0.0",
    "os": "android",
    "ua": "demo user agent",
  },
  "imp": [
    {
      "id": "1",
      "instl": 0,
      "tagid": "demo-native-content-yandex",
      "rwdd": 0,
      "ext": {
        "ad_type": "native"
      }
    }
  ],
  "user": {
    "data": [
      {
        "segment": [
          {
            "signal": "AAAAAZCN7oq0h2hscaYv9Toq9PQ5a/rlD2WTApTYPSXW0vYlQDYoLruywTekZYfFo6XhydKev15guctnw3WsQhhZ5bX19b59Ro00fVQqJ5k8uKbITKkDS/c/VDymvomUxg/B9yAfVm4BUDkzknfplXBlKXOwPCTbN7PXZ307OFEjvUhexcTkue4bK6sD/mGvOFZv6ZrT12zsJyfDVFdLJxbdPzsQM0Wg1/jgyDF+oO0zRLOCwbX2UNPW7DRJtsKvArZhqrY9tUTaSFaWFpimGKMkC6PXV9Q9BH5uw5qIptis8PCwrT5T/z9cKdQ+bb0DiQklyn9UZuldGGyJBYdzbEyaQ3hKDyjQqZMAM4EX19hrM/T0/4v8Xt63mgPVLNjQECQPpf9lErm0YQvlMsmF3iy5LbdNO3fUeFj8JK3P0QYpsylMBMm2JKnRW0pJGXuJpz8NjHjVvz/wFcj+KrYcsEYgq+rysEh/e1jTTMLntAnOyaCA/Hr53UKq1nzTgh3ovDksMm6V5RUPJzTrWSey1zPdqujrh8mKJNq1bi0Eq45waVkBJ011JFcQo0Hn9Gei6rOvvr8H98rC4PTufWsgmCxjxNeNTfeQQTMZGvWAmq02gsCSfp8reAzSWdRWEwJFxtgSVa45G01Q/aQuH4FRI5B/FOoIqqIP/J/lTo74PtSpuSU/WU0xXZaxDUdDkc26yEpv0KDU/7uQH4Ffjj8L3T/S93SKAuQVxhHqRGBr7xS2jHIsAXwcllV+L1HiUcgM4nBbXTUg6r0UB6U817hbRd+u5/9S6wXX6SqrUWBG/ACbSKpi5urQz1ZmKAUGzj098rKXonrrRGEMGOFnMA3mSAqKNOUfx+BVs7Je75IitJzhiyETzRjKodFRWWeavF69wxs/8roFqoUySSbipX9maEzKy3Uaevryx4k+QramYCNDNjjzimMyjlWnwI5bdcHuPP1iaM5X/gAfSwEQdWVkcU1VVhNJ6xV35wUmoqOQbVnvHSQIZPhaAT3ooZnK/UrIZ3EW3uVODfl/dnYmE5Pe+KoUg/qxoLpfPhxqiUJpQHkI697FT82JeG85hFmuldqbInKXVvoCWSvXvQIIBGNMtfHZFCtpiCFgGxLhQRVkSKyprYc/uCbmYaH38WruoFVvTx43M2rhMz1TKQODKRfrim6v4IEm1eSe76AC0/4fumZkcc3dVDV6BtItAtS58yeGb8UTRYdUHpTXvCqp5LsHUNow4yOxmzXeTFHHAZ3kv95IqlujanO7d+XnWLTTe8j0wcq+h559tK74UCoGgiWNKH84D7ePUuTzybY0Gr2LZYLbWIZBBIzsQQbZfjG3bTYIS8ePdUVQJGuoTl4R377zm/qBcKhMJlkrp/sCCj40xun5w/YRJ1NPoHMBoM9SCWGgUny51FIJI9TP4tRMBl3LhqwQPqYTDQz1qGF4oN74+EazQIskye33PPCay02uu8uVUg2OJA=="
          }
        ]
      }
    ]
  }
}
{
  "id": "00000000000000000000000",
  "at": 1,
  "tmax": 3000,
  "cur": [
    "USD"
  ],
  "app": {
    "name": "Test app",
    "bundle": "test.bundle",
    "cat": [
      "IAB9-30"
    ],
    "publisher": {
      "name": "Demo studio games",
      "domain": "test.domain"
    }
  },
  "device": {
    "ifa": "52fc72ad-dfa3-4ccb-a614-d60c3a9ec905",
    "ip": "000.000.000.000",
    "language": "en",
    "connectiontype": 6,
    "h": 1650,
    "w": 720,
    "geo": {
      "lat": 1.0,
      "lon": 1.0,
      "city": "Demo city"
    },
    "osv": "12.0.0",
    "os": "android",
    "ua": "demo user agent",
  },
  "imp": [
    {
      "id": "1",
      "instl": 0,
      "tagid": "demo-appopenad-yandex",
      "rwdd": 0,
      "ext": {
        "ad_type": "appopenad"
      }
    }
  ],
  "user": {
    "data": [
      {
        "segment": [
          {
            "signal": "AAAAAZCN7oq0h2hscaYv9Toq9PQ5a/rlD2WTApTYPSXW0vYlQDYoLruywTekZYfFo6XhydKev15guctnw3WsQhhZ5bX19b59Ro00fVQqJ5k8uKbITKkDS/c/VDymvomUxg/B9yAfVm4BUDkzknfplXBlKXOwPCTbN7PXZ307OFEjvUhexcTkue4bK6sD/mGvOFZv6ZrT12zsJyfDVFdLJxbdPzsQM0Wg1/jgyDF+oO0zRLOCwbX2UNPW7DRJtsKvArZhqrY9tUTaSFaWFpimGKMkC6PXV9Q9BH5uw5qIptis8PCwrT5T/z9cKdQ+bb0DiQklyn9UZuldGGyJBYdzbEyaQ3hKDyjQqZMAM4EX19hrM/T0/4v8Xt63mgPVLNjQECQPpf9lErm0YQvlMsmF3iy5LbdNO3fUeFj8JK3P0QYpsylMBMm2JKnRW0pJGXuJpz8NjHjVvz/wFcj+KrYcsEYgq+rysEh/e1jTTMLntAnOyaCA/Hr53UKq1nzTgh3ovDksMm6V5RUPJzTrWSey1zPdqujrh8mKJNq1bi0Eq45waVkBJ011JFcQo0Hn9Gei6rOvvr8H98rC4PTufWsgmCxjxNeNTfeQQTMZGvWAmq02gsCSfp8reAzSWdRWEwJFxtgSVa45G01Q/aQuH4FRI5B/FOoIqqIP/J/lTo74PtSpuSU/WU0xXZaxDUdDkc26yEpv0KDU/7uQH4Ffjj8L3T/S93SKAuQVxhHqRGBr7xS2jHIsAXwcllV+L1HiUcgM4nBbXTUg6r0UB6U817hbRd+u5/9S6wXX6SqrUWBG/ACbSKpi5urQz1ZmKAUGzj098rKXonrrRGEMGOFnMA3mSAqKNOUfx+BVs7Je75IitJzhiyETzRjKodFRWWeavF69wxs/8roFqoUySSbipX9maEzKy3Uaevryx4k+QramYCNDNjjzimMyjlWnwI5bdcHuPP1iaM5X/gAfSwEQdWVkcU1VVhNJ6xV35wUmoqOQbVnvHSQIZPhaAT3ooZnK/UrIZ3EW3uVODfl/dnYmE5Pe+KoUg/qxoLpfPhxqiUJpQHkI697FT82JeG85hFmuldqbInKXVvoCWSvXvQIIBGNMtfHZFCtpiCFgGxLhQRVkSKyprYc/uCbmYaH38WruoFVvTx43M2rhMz1TKQODKRfrim6v4IEm1eSe76AC0/4fumZkcc3dVDV6BtItAtS58yeGb8UTRYdUHpTXvCqp5LsHUNow4yOxmzXeTFHHAZ3kv95IqlujanO7d+XnWLTTe8j0wcq+h559tK74UCoGgiWNKH84D7ePUuTzybY0Gr2LZYLbWIZBBIzsQQbZfjG3bTYIS8ePdUVQJGuoTl4R377zm/qBcKhMJlkrp/sCCj40xun5w/YRJ1NPoHMBoM9SCWGgUny51FIJI9TP4tRMBl3LhqwQPqYTDQz1qGF4oN74+EazQIskye33PPCay02uu8uVUg2OJA=="
          }
        ]
      }
    ]
  }
}

Test Bid Response

To get a test response, specify test field in oRTB request with 1 value.

Bid Response structure

Bid Response object

Attribute

Type

Description

id

String

ID of the bid request to which this is a response

cur

String

Bid currency using ISO-4217 alpha codes

seatbid

Seatbid objects array

Array of 1 Seatbid object

Seatbidobject

Attribute

Type

Description

bid

Bid objects array

Array of 1 Bid object

Bidobject

Attribute

Type

Description

id

String

Bidder generated bid ID to assist with logging/tracking

impid

String

ID of the Imp object in the related bid request

price

Float

Bid price expressed as CPM although the actual transaction is for a unit impression only

ext.signaldata

String

Information about the selected ad. It must be transmitted during a client request

nurl

String

Win notice URL called by the exchange if the bid wins (not necessarily indicative of a delivered, viewed, or billable ad); optional means of serving ad markup

burl

String

Billing notice URL called by the exchange when a winning bid becomes billable based on exchange-specific business policy

lurl

String

Loss notice URL called by the exchange when a bid is known to have been lost

Supported macros

Macro

Place

Description

AUCTION_PRICE

nurl, burl, lurl

Clearing price using the same currency and units as the bid

AUCTION_LOSS

lurl

Loss reason codes

AUCTION_MIN_TO_WIN

lurl, nurl

Minimum bid to win the exchange's auction, using the same currency and units as the bid

Bid Response example

{
    "cur": "USD",
    "seatbid": [{
        "bid": [{
            "price": 8.2869000000,
            "id": "7149643471343346645",
            "ext": {
                "signaldata": "{\"cache_id\":\"openbidding_7149643471343346645\"}"
            },
            "impid": "1",
            "lurl": "https://yandex.ru/an/ssp_notifications/1Mldfsfadffasdfasdv618PGIAPrvDZl02YPUA0NcrLu74LA2u0yDCnWP52P1EXeMC2mu8WLah6GChEC6ilOoz7TKCHy7ygumWW-uoCiWmCFnbdCN4m32N2IIobEaNa5pBP0GappBz1uAdJ8dVLh2-OXBWQoYfkfhCm72mSCPfyKki37-PM86AMfcPWMGlc9pA339YBdC4o5fc9WQ51WO11eQhOD6xOF8diuCJFzWnArWQ3YTiOFaF0umxaDW7aDWtMS3g6JxOFsJHZEa_z5NZWVrR5f0VVh7m1kdwwfeQ6vXRcEWQ6JMnIkOa9kcbbURbLIOM51H3MCdvEVb5nITP-LlOmEPyPGKPku1jzwQ7RxfUVFgpdd4b6ypSHsoyKQvcLcMEnNaMOQvXvY_PO7R_XBC0WRgD-m00?ssp-notification-type=2&ssp-request-id=acbce306085481e0a42156b00d8a19523c2813a9&ssp-auction-loss=${AUCTION_LOSS}&ssp-auction-min-bid-to-win=${AUCTION_MIN_TO_WIN}&ssp-cur-price=${AUCTION_PRICE}",
            "nurl": "https://yandex.ru/an/ssp_notifications/1fsdafasdDEYKsGv618PGIAPrvDZl02YPUA0NcrLu74LA2u0yDCnWP52P1EXeMC2mu8WLah6GChEC6ilOoz7TKCHy7ygumWW-uoCiWmCFnbdCN4m32N2IIobEaNa5pBP0GappBz1uAdJ8dVLh2-OXBWQoYfkfhCm72mSCPfyKki37-PM86AMfcPWMGlc9pA339YBdC4o5fc9WQ51WO11eQhOD6xOF8diuCJFzWnArWQ3YTiOFaF0umxaDW7aDWtMS3g6JxOFsJHZEa_z5NZWVrR5f0VVh7m1kdwwfeQ6vXRcEWQ6JMnIkOa9kcbbURbLIOM51H3MCdvEVb5nITP-LlOmEPyPGKPku1jzwQ7RxfUVFgpdd4b6ypSHsoyKQvcLcMEnNaMOQvXvY_PO7R_XBC0WRgD-m00?ssp-notification-type=1&ssp-request-id=acbce306085481e0a42156b00d8a19523c2813a9&ssp-cur-price=${AUCTION_PRICE}&ssp-auction-min-bid-to-win=${AUCTION_MIN_TO_WIN}",
            "burl": "https://yandex.ru/an/ssp_notifications/1Ml0nI5N0QS10000000dsfasdfasd618PGIAPrvDZl02YPUA0NcrLu74LA2u0yDCnWP52P1EXeMC2mu8WLah6GChEC6ilOoz7TKCHy7ygumWW-uoCiWmCFnbdCN4m32N2IIobEaNa5pBP0GappBz1uAdJ8dVLh2-OXBWQoYfkfhCm72mSCPfyKki37-PM86AMfcPWMGlc9pA339YBdC4o5fc9WQ51WO11eQhOD6xOF8diuCJFzWnArWQ3YTiOFaF0umxaDW7aDWtMS3g6JxOFsJHZEa_z5NZWVrR5f0VVh7m1kdwwfeQ6vXRcEWQ6JMnIkOa9kcbbURbLIOM51H3MCdvEVb5nITP-LlOmEPyPGKPku1jzwQ7RxfUVFgpdd4b6ypSHsoyKQvcLcMEnNaMOQvXvY_PO7R_XBC0WRgD-m00?ssp-notification-type=3&ssp-request-id=acbce306085481e0a42156b00d8a19523c2813a9&ssp-cur-price=${AUCTION_PRICE}"
        }]
    }],
    "id": "acbce306085481e0a42156b00d8a19523c2813a9"
}

Android client-side setup

See Android SDK integration guide.

Set privacy settings

MobileAds.setUserConsent(hasUserConsent)
MobileAds.setAgeRestrictedUser(isAgeRestrictedUser)
MobileAds.setLocationConsent(hasLocationConsent)
MobileAds.setUserConsent(hasUserConsent);
MobileAds.setAgeRestrictedUser(isAgeRestrictedUser);
MobileAds.setLocationConsent(hasLocationConsent);

Bidder token generation in Android client

On the client side, we need to gather the required parameters for the auction request and send it to the auction server. Here the code example of obtaining the bidder token.

  1. Create a BidderTokenRequestConfiguration by passing the format of the requested ad.

    val requestBuilder = BidderTokenRequestConfiguration.Builder(adType)
    
    final BidderTokenRequestConfiguration.Builder requestBuilder = new BidderTokenRequestConfiguration.Builder(adType);
    
  2. Set the banner size if you request a banner.

    val bannerAdSize = BannerAdSize.fixedSize(context, width, height)
    requestBuilder.setBannerAdSize(size)
    
    final BannerAdSize bannerAdSize = new BannerAdSize.fixedSize(context, width, height);
    requestBuilder.setBannerAdSize(bannerAdSize);
    
  3. Add information about the adapter.

    val requestParameters = mutableMapOf<String, String>()
    requestParameters["adapter_version"] = "ADAPTER_VERSION"
    requestParameters["adapter_network_name"] = "MEDIATION_NETWORK_NAME"
    requestParameters["adapter_network_sdk_version"] = "MEDIATION_SDK_VERSION"
    requestBuilder.setParameters(requestParameters)
    
    final Map<String, String> requestParameters = new HashMap<>();
    requestParameters.put("adapter_version", "ADAPTER_VERSION");
    requestParameters.put("adapter_network_name", "MEDIATION_NETWORK_NAME");
    requestParameters.put("adapter_network_sdk_version", "MEDIATION_SDK_VERSION");
    requestBuilder.setParameters(requestParameters);
    
  4. Load the bidder token.

    val requestConfiguration = requestBuilder.build()
    
    BidderTokenLoader.loadBidderToken(context, requestConfiguration, object: BidderTokenLoadListener() {
        override fun onBidderTokenLoaded(bidderToken: String) {
            // obtain generated token
        }
    
        override fun onBidderTokenFailedToLoad(failureReason: String) {
            // obtain failure reason
        }
    })
    
    final BidderTokenRequestConfiguration requestConfiguration = requestBuilder.build();
    
    BidderTokenLoader.loadBidderToken(context, requestConfiguration, new BidderTokenLoadListener() {
        @Override
        public void onBidderTokenLoaded(@NonNull final String bidderToken) {
            // obtain generated token
        }
    
        @Override
        public void onBidderTokenFailedToLoad(@NonNull final String failureReason) {
            // obtain failure reason
        }
    });
    

Loading the ad from bid response on Android client

When the Yandex bid wins an auction, the next step is to the load ad with the bidding data.

App open

val adUnitId = "Yandex ad_unit_id"  // Yandex ad unit ID set by publisher in mediation console
val bidResponse = "{\"cache_id\":\"openbidding_714964347453245346645\"}" // ext.signaldata field from bidResponse
val appOpenAdLoader = AppOpenAdLoader(activity)
appOpenAdLoader.setAdLoadListener(object: AppOpenAdLoadListener {
    override fun onAdLoaded(appOpenAd: AppOpenAd) {
        // show ad
    }

    override fun onAdFailedToLoad(error: AdRequestError) {
        // log error
    }
})
val adRequest = AdRequest.Builder().setBiddingData(bidResponse).build()
appOpenAdLoader.loadAd(adRequest)
final String adUnitId = "Yandex ad_unit_id";  // Yandex ad unit ID set by publisher in mediation console
final String bidResponse = "{\"cache_id\":\"openbidding_714964347453245346645\"}"; // ext.signaldata field from bidResponse
final AppOpenAdLoader appOpenAdLoader = new AppOpenAdLoader(activity);
appOpenAdLoader.setAdLoadListener(new AppOpenAdLoadListener() {
    @Override
    public void onAdLoaded(@NonNull final AppOpenAd appOpenAd) {
        // show ad
    }

    @Override
    public void onAdFailedToLoad(@NonNull final AdRequestError error) {
        // log error
    }
});
final AdRequest adRequest = new AdRequest.Builder().setBiddingData(bidResponse).build();
appOpenAdLoader.loadAd(adRequest);

A detailed guide on App Open integration is here.

Interstitial

val adUnitId = "Yandex ad_unit_id"  // Yandex ad unit ID set by publisher in mediation console
val bidResponse = "{\"cache_id\":\"openbidding_714964347453245346645\"}" // ext.signaldata field from bidResponse
val interstitialAdLoader = InterstitialAdLoader(activity)
interstitialAdLoader.setAdLoadListener(object: InterstitialAdLoadListener {
    override fun onAdLoaded(interstitialAd: InterstitialAd) {
        // show ad
    }

    override fun onAdFailedToLoad(error: AdRequestError) {
        // log error
    }
})
val adRequest = AdRequest.Builder().setBiddingData(bidResponse).build()
interstitialAdLoader.loadAd(adRequest)
final String adUnitId = "Yandex ad_unit_id";  // Yandex ad unit ID set by publisher in mediation console
final String bidResponse = "{\"cache_id\":\"openbidding_714964347453245346645\"}"; // ext.signaldata field from bidResponse
final InterstitialAdLoader interstitialAdLoader = new InterstitialAdLoader(activity);
interstitialAdLoader.setAdLoadListener(new InterstitialAdLoadListener() {
    @Override
    public void onAdLoaded(@NonNull final InterstitialAd interstitialAd) {
        // show ad
    }

    @Override
    public void onAdFailedToLoad(@NonNull final AdRequestError error) {
        // log error
    }
});
final AdRequest adRequest = new AdRequest.Builder().setBiddingData(bidResponse).build();
interstitialAdLoader.loadAd(adRequest);

A detailed guide on Interstitial is here.

Rewarded

val adUnitId = "Yandex ad_unit_id"  // Yandex ad unit ID set by publisher in mediation console
val bidResponse = "{\"cache_id\":\"openbidding_714953452343346645\"}" // ext.signaldata field from bidResponse
val rewardedAdLoader = new RewardedAdLoader(activity)
rewardedAdLoader.setAdLoadListener(object: RewardedAdLoadListener {
    override fun onAdLoaded(rewardedAd: RewardedAd) {
        // show ad
    }

    override fun onAdFailedToLoad(error: AdRequestError) {
        // log error
  }
})
val adRequest = AdRequest.Builder()
    .setBiddingData(bidResponse).build()
rewardedAdLoader.loadAd(adRequest)
final String adUnitId = "Yandex ad_unit_id";  // Yandex ad unit ID set by publisher in mediation console
final String bidResponse = "{\"cache_id\":\"openbidding_714953452343346645\"}"; // ext.signaldata field from bidResponse
final RewardedAdLoader rewardedAdLoader = new RewardedAdLoader(activity);
rewardedAdLoader.setAdLoadListener(new RewardedAdLoadListener() {
    @Override
    public void onAdLoaded(@NonNull final RewardedAd rewardedAd) {
        // show ad
    }

    @Override
    public void onAdFailedToLoad(@NonNull final AdRequestError error) {
        // log error
    }
});
final AdRequest adRequest = new AdRequest.Builder().setBiddingData(bidResponse).build();
rewardedAdLoader.loadAd(adRequest);

A detailed guide on Rewarded integration is here.

val adUnitId = "Yandex adUnitId"  // Yandex ad unit ID set by publisher in mediation console
val bidResponse = "{\"cache_id\":\"openbidding_71494532453346645\"}" // ext.signaldata field from bidResponse
val bannerAdView = BannerAdView(activity)
bannerAdView.setBlockId(adUnitId)
bannerAdView.setAdSize(adSize)
val adRequest = AdRequest.Builder().setBiddingData(bidResponse).build()
bannerAdView.loadAd(adRequest)
final String adUnitId = "Yandex adUnitId";  // Yandex ad unit ID set by publisher in mediation console
final String bidResponse = "{\"cache_id\":\"openbidding_71494532453346645\"}"; // ext.signaldata field from bidResponse
final BannerAdView bannerAdView = new BannerAdView(activity);
bannerAdView.setBlockId(adUnitId);
bannerAdView.setAdSize(adSize);
final AdRequest adRequest = new AdRequest.Builder().setBiddingData(bidResponse).build();
bannerAdView.loadAd(adRequest);

Native

val adUnitId = "Yandex adUnitId"  // Yandex ad unit ID set by publisher in mediation console
val bidResponse = "{\"cache_id\":\"openbidding_71494532453346645\"}" // ext.signaldata field from bidResponse
val nativeAdLoader = new NativeAdLoader(this)
nativeAdLoader.setNativeAdLoadListener(object: NativeAdLoadListener {
    override fun onAdLoaded(nativAd: NativeAd) {
        // bind nativeAd
    }

    override fun onAdFailedToLoad(error: AdRequestError) {
        // log error
    }
})

val nativeAdRequestConfiguration = NativeAdRequestConfiguration.Builder(adUnitId)
    .setBiddingData(bidResponse).build()
nativeAdLoader.loadAd(nativeAdRequestConfiguration)
final String adUnitId = "Yandex adUnitId";  // Yandex ad unit ID set by publisher in mediation console
final String bidResponse = "{\"cache_id\":\"openbidding_71494532453346645\"}"; // ext.signaldata field from bidResponse
final NativeAdLoader nativeAdLoader = new NativeAdLoader(this);
nativeAdLoader.setNativeAdLoadListener(new NativeAdLoadListener() {
    @Override
    public void onAdLoaded(@NonNull final NativeAd nativeAd) {
        // bind nativeAd
    }

    @Override
    public void onAdFailedToLoad(@NonNull final AdRequestError error) {
        // log error
    }
});

final NativeAdRequestConfiguration nativeAdRequestConfiguration = new NativeAdRequestConfiguration.Builder(adUnitId)
    .setBiddingData(bidResponse).build();
nativeAdLoader.loadAd(nativeAdRequestConfiguration);

Native format includes both the required and optional assets. The way to provide custom assets for binding strongly depends on the API of your ads SDK. The template shows how these assets are passed to adapter during the ad request by providing a map of string identifier to asset view identifier on the publisher side.

Detailed native ads docs are here.

Example

An example of the adapter is here.

Previous
Next