Передача событий

Чтобы собирать статистику и оптимизировать кампании, передавайте в Gravity Field информацию о действиях пользователя на сайте или в приложении.


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

curl --request POST \
  --url 'https://evs-01.gravityfield.ai/ssapi/event' \
  --header 'content-type: application/json' \
  --header 'Authorization: Bearer your-api-key' \
  --data '
{
	"user": { 
		"id": "yaexono4ohphania" 
	},
	"session": { 
		"custom": "iquahngaishe2koh" 
	},
	"context": { 
		"page": {
			"type": "CART",
			"data": ["sku-4324-bg", "item-34454"],
			"location": "https://shop.ru/cart"
		},
		"device": {
			"userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
			"ip": "54.100.200.255" 
		}
	},
	"events": [
	{
		"name": "Add to Cart",
		"properties": {
			"eventType": "add-to-cart-v1",
			"value": 118.26,
			"currency": "RUB",
			"productId": "item-34454",
			"quantity": 2,
			"cart": [
			{
        "productId": "sku-4324-bg",
        "quantity": 1,
        "itemPrice": 12.34
      },
      {
        "productId": "item-34454",
        "quantity": 2,
        "itemPrice": 59.13
      }
	    ]
		}
	}
	]
}'

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

Поле Обязательность Как заполнять
user Обязательно Для первого запроса нового пользователя передайте пустой объект {}. Для server-side интеграции используйте user.id, для hybrid — user.slid или user.slid_server. Не смешивайте эти способы в одном запросе.
session Обязательно Для первого запроса новой сессии передайте пустой объект {}. Для внешней сессии используйте session.custom, для сессии Gravity Field — session.sl. Способ должен соответствовать выбранному полю user.
context Обязательно Передайте context.page.type, context.page.location и массив context.page.data. Для PRODUCT укажите SKU, для CATEGORY — иерархию категорий, для CART — SKU товаров корзины, для SEARCH — поисковый запрос. Для остальных типов передайте data: [].
events Обязательно Массив из одного или нескольких событий. Каждое событие содержит стабильное name и, для стандартных событий, объект properties.

Если Gravity Field создал нового пользователя или новую сессию, сохраните user.slid и session.sl из ответа и передавайте их в следующих запросах.

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

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

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

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

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

Действие eventType Когда отправлять
Добавление в корзину 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 — полное состояние корзины после действия.

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

Покупка

Отправляйте событие один раз после подтверждения заказа. Корзина в событии покупки — это состав оплаченного заказа, а не состояние пользовательской корзины после её очистки.

{
  "name": "Purchase",
  "properties": {
    "eventType": "purchase-v1",
    "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
      }
    ]
  }
}
Параметр Тип Обязательность Как заполнять
eventType string Обязательно Всегда purchase-v1.
uniqueTransactionId string Обязательно Стабильный уникальный ID заказа. Используйте одно и то же значение при повторной отправке события этого заказа.
value number Обязательно Итоговая сумма заказа после скидок, которую магазин учитывает как выручку. В примере: 65.87 + 2 × 12.34 = 90.55.
currency string Условно Валюта оплаченной суммы.
cart array Обязательно Все купленные позиции. itemPrice — фактическая цена одной единицы после скидки.

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

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

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

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

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

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

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

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

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

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

Используйте событие при выборе другого размера, цвета или иного товарного атрибута.

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

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

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

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

Поиск

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

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

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

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

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

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

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

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

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

Регистрация

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

Вход

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

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

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

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

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

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

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

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

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

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

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

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