Получение рекламных кампаний
Для получения рекламы через API V2 отправьте запрос /choose и передайте идентификатор рекламного плейсмента в data[].placementId.
Подробнее о настройке рекламных кампаний: Рекламные кампании
choose: запрос рекламы для плейсмента
API reference
API V2 использует общий Gateway endpoint /choose для персонализации и рекламной платформы. В рекламном сценарии основной ключ выбора - placementId: по нему платформа находит подходящие баннерные или товарные кампании, учитывая контекст страницы, пользователя, таргетинг, ставки и доступность инвентаря.
Основной flow
- Определите рекламный плейсмент, который должен быть отрисован на странице или экране.
- Вызовите
/chooseсdata[].placementId, актуальнымиuser.uid,user.ses,ctxиdevice. - Передайте
options.isBuildEngagementUrl: true, чтобы получить готовые tracking URL для рекламных событий. - Отрисуйте полученный рекламный юнит или fallback.
- Передайте взаимодействия через URL из ответа. Подробнее: Взаимодействия.
Пояснения к параметрам запроса
Placement ID (data[].placementId):
Идентификатор рекламного места, созданного в интерфейсе Gravity Ads. Один запрос /choose может содержать несколько элементов data[], если нужно запросить несколько плейсментов.
Context (ctx):
Контекст страницы или экрана. Для CATEGORY передавайте иерархию категорий в ctx.data, для PRODUCT - SKU товара. Значения должны совпадать с фидом и настройками таргетинга. Подробнее: Контекст.
Attributes (ctx.attributes):
Используйте для дополнительных условий таргетинга текущего запроса: регион, тип витрины, CRM-сегмент, источник или другие согласованные параметры.
Engagement URLs (options.isBuildEngagementUrl):
Включите, чтобы Gateway вернул готовые tracking URL. Для рекламной платформы это особенно важно: клиенту не нужно вручную собирать параметры tracking-события.
Implicit Pageview (options.isImplicitPageview):
Используйте, если просмотр страницы нужно учесть вместе с запросом /choose и вы не вызываете /visit отдельно.
Implicit Impression (options.isImplicitImpression):
Используйте только для рекламных плейсментов, где согласован неявный учёт потенциального показа вместе с /choose. Если вы передаёте isImplicitImpression: false, обработайте variables.onImpression, если этот handler вернулся в креативе, и вызовите соответствующие URL из content.events[].
Если вы используете динамические фильтры или request-time rules, предварительно добавьте соответствующие поля в Dynamic filter fields в настройках фида.
curl --request POST
--url 'https://evs-01.gravityfield.ai/v2/choose'
--header 'content-type: application/json'
--header 'Authorization: Bearer your-api-key'
--data '
{
"sec": "YOUR_SECTION_ID",
"user": {
"uid": "665f0a000000000000000001",
"ses": "7356efc2-6ffd-4553-bade-b9ab5d9ce141"
},
"ctx": {
"type": "CATEGORY",
"data": [
"Parent category",
"Sub category"
],
"lng": "MOW",
"location": "https://shop.ru/cat/1",
"attributes": {
"source": "web",
"region": "Moscow"
}
},
"device": {
"userTime": "2026-06-03T15:00:00+03:00",
"ua": "Mozilla/5.0",
"ip": "54.100.200.255"
},
"options": {
"isImplicitPageview": true,
"isImplicitImpression": false,
"isBuildEngagementUrl": true
},
"data": [
{
"placementId": "646689c3404f91f26103faa6"
}
]
}'
Обработка ответа
Ответ зависит от формата кампании и настроек плейсмента:
- для баннерной рекламы вернутся данные креатива, ссылка, рекламные метаданные и tracking URL;
- для товарной рекламы вернутся рекламные товары,
slotIdдля каждого слота, product fields из фида и tracking URL для товарных событий; - если подходящей рекламы нет, плейсмент можно не показывать или отрисовать согласованный fallback.
Для корректной аналитики не отбрасывайте данные, которые API вернул вместе с рекламным юнитом и товарными слотами:
{
"user": {
"uid": "665f0a000000000000000001",
"ses": "7356efc2-6ffd-4553-bade-b9ab5d9ce141"
},
"data": [
{
"placementId": "646689c3404f91f26103faa6",
"payload": [
{
"decisionId": "ads:...",
"ord": {
"erid": "test-erid"
},
"adSetId": "67051a995eadbaa5390785f5",
"campaignId": "67051a995eadbaa5390785f4",
"creativeId": "67051a995eadbaa5390785f6",
"testId": "67051a995eadbaa5390785f8",
"contents": [
{
"contentId": "67051a995eadbaa5390785f6",
"deliveryMethod": "API",
"contentType": "CUSTOM_JSON",
"custom": {
"json": "{\"title\":\"Здесь могут быть любые параметры креатива\"}"
},
"variables": {
"onImpression": {
"action": "AIMP"
},
"onVisibleImpression": {
"action": "WRIMP"
},
"onClick": {
"action": "ADCLICK"
}
},
"events": [
{
"type": "AIMP",
"urls": [
"https://evs-01.gravityfield.ai/v2/engagement?..."
]
},
{
"type": "WRIMP",
"urls": [
"https://evs-01.gravityfield.ai/v2/engagement?..."
]
},
{
"type": "ADCLICK",
"urls": [
"https://evs-01.gravityfield.ai/v2/engagement?..."
]
}
],
"products": {
"strategyId": "67051a995eadbaa5390785f9",
"fallback": false,
"slots": [
{
"slotId": "670519f27352da07900f3654:67051a995eadbaa5390785f5:0",
"campaignData": {
"placementId": "646689c3404f91f26103faa6",
"campaignId": "67051a995eadbaa5390785f4",
"adSetId": "67051a995eadbaa5390785f5",
"creativeId": "67051a995eadbaa5390785f6",
"testId": "67051a995eadbaa5390785f8",
"decisionId": "ads:...",
"deliveryMethod": "API",
"contentType": "CUSTOM_JSON",
"ord": {
"erid": "test-erid"
}
},
"item": {
"sku": "123",
"categories": ["Category A"],
"price": "1000",
"url": "https://shop.ru/product/123"
},
"strId": 1,
"fallback": false,
"events": [
{
"type": "visible_impression",
"urls": [
"https://evs-01.gravityfield.ai/v2/engagement?..."
]
},
{
"type": "click",
"urls": [
"https://evs-01.gravityfield.ai/v2/engagement?..."
]
}
]
}
]
}
}
]
}
]
}
]
}
Объект variables и любые ключи variables.on* опциональны. Если handler отсутствует, не отправляйте соответствующее content-level событие. Не привязывайте обработку к значению action внутри variables: используйте имя handler-а (onImpression, onVisibleImpression, onClick) и соответствующий content.events[].type.
Если список товаров пустой или рекламный блок не вернулся, не отправляйте кликовые события по отсутствующему рекламному юниту. Для учёта ёмкости инвентаря используйте variables.onImpression, только если этот handler вернулся в ответе.
Слайдер баннеров
Для слайдера один placementId может вернуть несколько элементов payload[]. Каждый элемент payload[] соответствует отдельному выбранному креативу и содержит собственные decisionId, contentId, metadata и tracking URL.
Если для плейсмента возвращается настройка контейнера, она приходит в data[].custom.json. Например, для carousel-сценария там может быть указан тип компонента и количество payload-элементов.
Обработка ошибок
- Установите таймаут ожидания ответа от Gateway.
- Если ответ не
200, не блокируйте страницу или экран. - В зависимости от UX сценария не показывайте плейсмент или отрисуйте стандартный fallback.
- Не повторяйте запрос бесконечно: повторные запросы могут исказить статистику показов.
Лимиты по количеству запросов