События

Для сбора статистики, расчёта целей и оптимизации кампаний необходимо передавать в Gravity Field информацию о действиях пользователя.


event: передача событий

В API V2 события передаются в массиве data[]. Дополнительные свойства события передавайте в customProps.

Передавайте вместе с событием актуальный ctx, чтобы кампания могла учитывать текущую страницу, экран или текущие условия запроса. Подробнее: Контекст.

Активация и таргетинг

/event не только сохраняет пользовательское событие для статистики. Ответ также может содержать кампании, подходящие под переданное событие.

Если в ответе вернулся непустой campaigns[], это означает:

  1. Для одного из переданных событий нашлась кампания.
  2. Пользователь и текущий ctx подходят под условия этой кампании.
  3. campaigns[].campaignId можно использовать в /choose, чтобы получить контент.

Если campaigns[] пустой или отсутствует, событие всё равно принято для аналитики и целей, но для текущего пользователя не нашлось кампании под это событие.

curl --request POST \
  --url 'https://evs-01.gravityfield.ai/v2/event' \
  --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": "CART",
    "data": [],
    "location": "https://shop.ru/cart"
  },
  "device": {
    "ua": "Mozilla/5.0",
    "ip": "54.100.200.255"
  },
  "data": [
    {
      "type": "purchase-v1",
      "name": "Purchase",
      "value": 1990,
      "currency": "RUB",
      "uniqueTransactionId": "order-100500",
      "cart": [
        {
          "productId": "sku-123",
          "quantity": 1,
          "itemPrice": 1990
        }
      ],
      "customProps": {
        "paymentMethod": "card"
      }
    }
  ]
}'
{
  "user": {
    "uid": "665f0a000000000000000001",
    "ses": "7356efc2-6ffd-4553-bade-b9ab5d9ce141"
  },
  "campaigns": [
    {
      "campaignId": "665f0b000000000000000001",
      "experienceId": "665f0c000000000000000001",
      "trigger": "event",
      "priority": 10,
      "delayTime": 0
    }
  ]
}

Как использовать ответ

  1. Сохраните обновлённые user.uid и user.ses, если они пришли в ответе.
  2. Если campaigns[] пустой, дополнительных действий для показа кампании не требуется.
  3. Если campaigns[] не пустой, выберите кампанию и передайте её campaignId в /choose.

/event отвечает за запись события и список подходящих кампаний. Контент, вариация и tracking URL возвращаются только в /choose.

Структура запроса

Поле Обязательность Как заполнять
sec Обязательно 24-символьный ID секции Gravity Field, к которой относится API-ключ.
user Обязательно Текущие uid и ses. Для нового пользователя можно передать пустые значения и сохранить идентификаторы из ответа. Поле custom используйте только для внешней идентификации вместе с ses.
ctx Обязательно Текущая страница или экран. Передайте type и location; для PRODUCT и CATEGORY заполните data. Подробнее: Контекст.
device Обязательно Данные устройства. Передавайте доступные ua, ip, id, userTime, tracking и permission. Если ua и ip не переданы, API использует доступные данные HTTP-запроса.
options Опционально isReturnCounter возвращает сегменты и счётчики, isReturnUserInfo — расширенные данные пользователя. По умолчанию оба значения false.
data Обязательно Массив от 1 до 100 событий. Каждое событие должно содержать type и name.

Данные устройства

Поле Тип Обязательность Как заполнять
ua string Опционально Полный User-Agent устройства или приложения, от 10 до 2048 символов.
ip string Опционально Публичный IPv4-адрес пользователя.
id string Опционально Стабильный ID устройства или установки приложения длиной от 32 до 36 символов. Не создавайте новый ID для каждого запроса.
userTime string Опционально Локальные дата и время пользователя в RFC 3339, например 2025-12-31T15:16:17+03:00.
tracking string Опционально Статус разрешения на отслеживание: notDetermined, restricted, denied, authorized или notSupported.
permission string Опционально Статус разрешения, переданный клиентом: provisional, granted, unknown или denied.

Общие поля события

Поле Тип Обязательность Как заполнять
type string Обязательно Стандартный eventType из справочника ниже или стабильный тип кастомного события. Максимум 100 символов.
name string Обязательно Стабильное человекочитаемое имя, например Purchase. Не включайте в него ID товара, заказа или пользователя.
productId string Зависит от события Точный SKU из товарного фида, включая регистр и разделители.
quantity integer Зависит от события Положительное количество единиц, относящееся к текущему действию.
value number Зависит от события Денежная сумма в основных единицах валюты, например 1990.50 рубля.
currency string Условно Трёхбуквенный код ISO 4217, например RUB. Обязательно для проектов с несколькими валютами.
cart array Зависит от события Товарные позиции с обязательными productId, quantity и itemPrice. Расположите их в порядке добавления — от самых старых к самым новым.
eventTime string Опционально Фактическое время действия в RFC 3339, например 2025-12-31T15:16:17+03:00. Используйте при отложенной отправке.
customProps object Опционально Дополнительные свойства события, где ключи и значения — строки. Числа передавайте строкой; вложенные объекты и массивы не поддерживаются контрактом.
uniqueTransactionId string Для покупки Стабильный ID заказа, используемый для дедупликации.
cuid, cuidType, hashedEmail string Для идентификации Поля регистрации и входа. Правила заполнения описаны ниже.

Объект товарной позиции в cart:

Поле Тип Обязательность Как заполнять
productId string Обязательно Точный SKU из товарного фида.
quantity integer Обязательно Положительное количество единиц этой позиции.
itemPrice number Обязательно Цена одной единицы после скидок, а не общая стоимость строки.

Справочник событий

Действие type Когда отправлять
Добавление в корзину add-to-cart-v1 После успешного добавления товара.
Покупка purchase-v1 После подтверждения заказа.
Удаление из корзины remove-from-cart-v1 После успешного удаления товара.
Синхронизация корзины sync-cart-v1 После пакетного или серверного изменения корзины.
Добавление в избранное add-to-wishlist-v1 После успешного добавления выбранной вариации товара.
Смена атрибута change-attr-v1 После выбора пользователем другого цвета, размера или иного атрибута.
Фильтрация товаров filter-items-v1 После применения фильтра.
Поиск keyword-search-v1 После ввода итогового поискового запроса.
Ввод промокода enter-promo-code-v1 После отправки промокода на проверку.
Сортировка sort-items-v1 После смены порядка товаров.
Подписка newsletter-subscription-v1 После подтверждённой подписки.
Регистрация signup-v1 После успешной регистрации.
Вход login-v1 После успешной авторизации.

Добавление в корзину

Отправляйте событие после подтверждённого добавления. quantity и value относятся только к текущему действию, а cart отражает полное состояние корзины после него.

{
  "type": "add-to-cart-v1",
  "name": "Add to Cart",
  "productId": "sku-4324-bg",
  "quantity": 2,
  "value": 24.68,
  "currency": "RUB",
  "cart": [
    {
      "productId": "sku-4324-bg",
      "quantity": 2,
      "itemPrice": 12.34
    }
  ]
}
Параметр Тип Обязательность Как заполнять
type string Обязательно Всегда add-to-cart-v1.
name string Обязательно Рекомендуемое стабильное имя — Add to Cart.
productId string Обязательно SKU добавленной позиции.
quantity integer Обязательно Количество единиц, добавленных именно этим действием.
value number Обязательно quantity × itemPrice для добавленных единиц. В примере: 2 × 12.34 = 24.68. Значение должно быть больше нуля.
currency string Условно Валюта значения value.
cart array Рекомендуется Полное состояние корзины после добавления.

Покупка

Отправляйте событие один раз после подтверждения заказа. cart должен содержать оплаченные позиции, а не состояние пользовательской корзины после её очистки.

{
  "type": "purchase-v1",
  "name": "Purchase",
  "uniqueTransactionId": "order-100500",
  "value": 90.55,
  "currency": "RUB",
  "cart": [
    {
      "productId": "item-34454",
      "quantity": 1,
      "itemPrice": 65.87
    },
    {
      "productId": "sku-4324-bg",
      "quantity": 2,
      "itemPrice": 12.34
    }
  ],
  "customProps": {
    "paymentMethod": "card"
  }
}
Параметр Тип Обязательность Как заполнять
type string Обязательно Всегда purchase-v1.
name string Обязательно Рекомендуемое стабильное имя — Purchase.
uniqueTransactionId string Обязательно Стабильный уникальный ID заказа. Используйте одно значение при всех повторных отправках.
value number Обязательно для корректной аналитики Итоговая сумма заказа после скидок, которую магазин учитывает как выручку. В примере: 65.87 + 2 × 12.34 = 90.55.
currency string Условно Валюта оплаченной суммы.
cart array Обязательно Непустой массив всех купленных позиций.
customProps object Опционально Дополнительные строковые свойства, например способ оплаты.

Удаление из корзины

quantity и value описывают удалённые единицы, а cart — состояние корзины после удаления.

{
  "type": "remove-from-cart-v1",
  "name": "Remove from Cart",
  "productId": "item-34454",
  "quantity": 1,
  "value": 59.13,
  "currency": "RUB",
  "cart": [
    {
      "productId": "item-34454",
      "quantity": 1,
      "itemPrice": 59.13
    }
  ]
}
Параметр Тип Обязательность Как заполнять
type string Обязательно Всегда remove-from-cart-v1.
name string Обязательно Рекомендуемое стабильное имя — Remove from Cart.
productId string Обязательно SKU удалённой позиции.
quantity integer Рекомендуется Количество единиц, удалённых текущим действием.
value number Обязательно для корректной аналитики Стоимость удалённых единиц: quantity × itemPrice.
currency string Условно Валюта значения value.
cart array Рекомендуется Полное состояние корзины после удаления.

Для полной очистки, объединения корзин или другого пакетного изменения используйте sync-cart-v1.

Синхронизация корзины

Событие передаёт снимок состояния корзины после восстановления, объединения, серверной корректировки или массового удаления.

{
  "type": "sync-cart-v1",
  "name": "Sync Cart",
  "currency": "RUB",
  "cart": [
    {
      "productId": "sku-4324-bg",
      "quantity": 2,
      "itemPrice": 12.34
    }
  ]
}
Параметр Тип Обязательность Как заполнять
type string Обязательно Всегда sync-cart-v1.
name string Обязательно Рекомендуемое стабильное имя — Sync Cart.
currency string Условно Валюта цен товарных позиций.
cart array Обязательно Полное состояние корзины. Для полной очистки передайте [].

Добавление в избранное

{
  "type": "add-to-wishlist-v1",
  "name": "Add to Wishlist",
  "productId": "item-34454",
  "customProps": {
    "size": "M"
  }
}
Параметр Тип Обязательность Как заполнять
type string Обязательно Всегда add-to-wishlist-v1.
name string Обязательно Рекомендуемое стабильное имя — Add to Wishlist.
productId string Обязательно SKU конкретной вариации, добавленной в избранное.
customProps.size string Опционально Выбранный размер, если он используется в вашей интеграции. Поле не заменяет productId: передавайте SKU конкретной вариации товара.

Смена атрибута товара

Параметры стандартного события, которых нет среди верхнеуровневых полей API V2, передаются в customProps.

{
  "type": "change-attr-v1",
  "name": "Change Attribute",
  "customProps": {
    "attributeType": "color",
    "attributeValue": "navy_blue"
  }
}
Параметр Тип Обязательность Как заполнять
type string Обязательно Всегда change-attr-v1.
name string Обязательно Рекомендуемое стабильное имя — Change Attribute.
customProps.attributeType string Обязательно Название свойства, совпадающее с полем в товарном фиде.
customProps.attributeValue string Обязательно Новое выбранное значение в формате фида.

Фильтрация товаров

{
  "type": "filter-items-v1",
  "name": "Filter Items",
  "customProps": {
    "filterType": "price",
    "filterNumericValue": "5000"
  }
}
Параметр Тип Обязательность Как заполнять
type string Обязательно Всегда filter-items-v1.
name string Обязательно Рекомендуемое стабильное имя — Filter Items.
customProps.filterType string Обязательно Название фильтра, соответствующее свойству товара в фиде.
customProps.filterNumericValue string Условно Числовое значение, сериализованное строкой, например "5000". Используется для числовых сравнений.
customProps.filterStringValue string Условно Значение цвета, бренда, категории или другого строкового свойства.

Передавайте ровно одно из полей filterNumericValue и filterStringValue.

Поиск

{
  "type": "keyword-search-v1",
  "name": "Keyword Search",
  "customProps": {
    "keywords": "беспроводные наушники"
  }
}
Параметр Тип Обязательность Как заполнять
type string Обязательно Всегда keyword-search-v1.
name string Обязательно Рекомендуемое стабильное имя — Keyword Search.
customProps.keywords string Обязательно Итоговый запрос в том виде, в котором его ввёл пользователь.

Для живого поиска используйте debounce и отправляйте последнее состояние ввода после заданной задержки, а не событие после каждого символа.

Ввод промокода

{
  "type": "enter-promo-code-v1",
  "name": "Promo Code Entered",
  "customProps": {
    "code": "SALE10"
  }
}
Параметр Тип Обязательность Как заполнять
type string Обязательно Всегда enter-promo-code-v1.
name string Обязательно Рекомендуемое стабильное имя — Promo Code Entered.
customProps.code string Обязательно Промокод в том виде, в котором магазин отправляет его на проверку.

Сортировка товаров

{
  "type": "sort-items-v1",
  "name": "Sort Items",
  "customProps": {
    "sortBy": "price",
    "sortOrder": "ASC"
  }
}
Параметр Тип Обязательность Как заполнять
type string Обязательно Всегда sort-items-v1.
name string Обязательно Рекомендуемое стабильное имя — Sort Items.
customProps.sortBy string Обязательно Стабильное системное имя критерия: price, popularity, rating или другое согласованное значение.
customProps.sortOrder string Обязательно ASC для сортировки по возрастанию или DESC по убыванию.

Подписка на рассылку

Отправляйте событие после подтверждённой подписки. Идентификаторы в нём не заменяют Login или Signup для склейки профиля.

{
  "type": "newsletter-subscription-v1",
  "name": "Subscription",
  "hashedEmail": "SHA256_LOWERCASE_EMAIL"
}
Параметр Тип Обязательность Как заполнять
type string Обязательно Всегда newsletter-subscription-v1.
name string Обязательно Рекомендуемое стабильное имя — Subscription.
hashedEmail string Опционально SHA-256 хеш email, предварительно приведённого к нижнему регистру.
cuid string Опционально Внешний идентификатор пользователя. Не передавайте персональные данные без хеширования.
cuidType string Условно Тип cuid; передавайте вместе с cuid.

Регистрация

{
  "type": "signup-v1",
  "name": "Signup",
  "cuid": "HASHED_PHONE_STRING",
  "cuidType": "phone_hash"
}

Вход

{
  "type": "login-v1",
  "name": "Login",
  "cuid": "HASHED_PHONE_STRING",
  "cuidType": "phone_hash"
}

Для Signup и Login используется одинаковый набор идентификационных полей:

Параметр Тип Обязательность Как заполнять
type string Обязательно signup-v1 для регистрации или login-v1 для входа.
name string Обязательно Signup или Login.
cuid string Условно SHA-256 хеш нормализованного номера телефона. Передайте ровно одно из cuid и hashedEmail.
cuidType string Обязательно с cuid Для рекомендованной идентификации по телефону используйте phone_hash.
hashedEmail string Условно SHA-256 хеш email, приведённого к нижнему регистру. Передайте ровно одно из cuid и hashedEmail.

Идентификация через CUID

Для объединения профилей между Web, мобильными SDK, API V2 и офлайн-данными используйте один и тот же cuid:

  1. Удалите из номера телефона все символы, кроме цифр.
  2. Для РФ и КЗ приведите номер к формату 7XXXXXXXXXX. Для других стран используйте международный формат без + и разделителей.
  3. Рассчитайте SHA-256 по нормализованной UTF-8 строке.
  4. Передайте результат как шестнадцатеричную строку в нижнем регистре и укажите cuidType: "phone_hash".

Если используется hashedEmail, сначала приведите email к нижнему регистру, затем вычислите SHA-256. В одном событии V2 нельзя одновременно передавать cuid и hashedEmail.

Одинаковая функция нормализации и хеширования должна использоваться в клиентской и серверной части, а также в ETL-процессах. Если CDP или DWH уже рассчитывает cuid, используйте именно этот хеш во всех каналах.

📖 Подробнее о формате cuid и cuidType при импорте транзакций: Импорт транзакций

Кастомные события

Для нестандартного действия задайте стабильные type и name. Дополнительные параметры передавайте в customProps; ключи и значения должны быть строками.

{
  "type": "survey-completed-v1",
  "name": "Survey Completed",
  "value": 100,
  "eventTime": "2025-12-31T15:16:17+03:00",
  "customProps": {
    "surveyId": "summer-2025-feedback",
    "rating": "5"
  }
}
Параметр Тип Обязательность Как заполнять
type string Обязательно Стабильный технический тип, одинаковый для всех отправок одного логического события.
name string Обязательно Стабильное человекочитаемое имя.
value number Опционально Денежная ценность события, если она применима.
eventTime string Опционально Фактическое время события в RFC 3339.
customProps object Опционально Только строковые значения. Числа сериализуйте строкой; не передавайте вложенные объекты и массивы.