#Офлайн-конверсии
Статус: Планируется. Метод
POST /analytics/conversionsпроектируется. Страница фиксирует согласованные принципы; состав полей — предварительный и уточнится в OpenAPI 3.1.
Назначение: передать в Формула ИИ оплату или выигранную сделку из вашей CRM и учётной системы, чтобы платформа связала деньги с лидом, сессией и каналом привлечения и посчитала окупаемость каналов.
#Содержание
- Зачем это нужно
- Когда использовать
- Доступ
- Запрос
- Привязка к лиду, сессии или внешнему идентификатору
- Ответ
- Ошибки
- Примеры
- Как конверсии попадают в отчёты
- Заметки
- Открытые вопросы
#Зачем это нужно
Счётчики сайта видят визиты и заявки, но не деньги: оплата происходит в CRM, на кассе или на расчётном счёте. Без неё стратег Формула ИИ знает, сколько лидов принёс канал, но не знает, сколько он заработал. Офлайн-конверсия добавляет недостающее звено «лид → оплата» и позволяет рассчитать окупаемость канала.
В «Обзоре» шаги воронки deals_created, deals_won и revenue строятся по данным CRM платформы. Если ваши сделки живут во внешней CRM, этот метод и Лиды и CRM — способ дать платформе те же сведения. Правила, по которым конверсии и сделки платформы объединяются без двойного счёта, — в разделе Как конверсии попадают в отчёты.
#Когда использовать
| Ситуация | Что выбрать |
|---|---|
| Оплата или выигранная сделка зафиксированы в вашей CRM или бухгалтерии | этот метод |
| Событие произошло в браузере или приложении (клик, регистрация) | API событий |
| Нужно обновить статус лида | Статусы CRM |
| Нужны суммы по каналам | Чтение аналитики |
#Доступ
| Метод и путь | POST https://<домен ячейки>/api/public/v1/analytics/conversions |
| Аутентификация | Authorization: Bearer <ключ> (Аутентификация) |
| Область | analytics:write |
| Платно | нет |
| Предел | 120 запросов в минуту на ключ и арендатора (Соглашения) |
| Персональные данные | не принимаются. Область analytics:write допускает только псевдонимные идентификаторы: привязка — по идентификатору лида, сессии или вашему внешнему идентификатору, не по почте и телефону. Контакты в properties отклоняются с validation_failed |
| Идемпотентность | заголовок Idempotency-Key (Соглашения) и поле conversion_id |
Адреса ячеек: RU https://formula-cream.pro, EN https://wfacademy.org, ID https://wfacademy.id. Валюта суммы соответствует рынку ячейки: RUB для RU, GBP для EN, IDR для ID (Ячейки и данные).
#Запрос
Заголовки: Authorization, Content-Type: application/json, Idempotency-Key (Соглашения).
Тело (предварительно)
| Поле | Тип | Обязательно | Ограничения | Пример |
|---|---|---|---|---|
conversion_id | string | да | ваш уникальный идентификатор конверсии; повтор не создаёт вторую | pay_48213_1 |
type | string | да | payment (оплата) или deal_won (выигранная сделка); перечень уточнится | payment |
value | object | да | {"amount":"4990.00","currency":"RUB"}; сумма строкой, валюта ячейки. Отрицательная сумма — возврат (см. ниже) | {"amount":"4990.00","currency":"RUB"} |
occurred_at | string | да | ISO 8601 UTC, момент оплаты | 2026-10-11T08:15:30Z |
lead_id | string | один из трёх | идентификатор лида в Формула ИИ | lead_EXAMPLE_01 |
external_id | string | один из трёх | идентификатор лида или сделки в вашей CRM (поле external_id, см. Лиды) | crm-48213 |
session_id | string | один из трёх | сессия, переданная в API событий | sess_EXAMPLE_01 |
properties | object | нет | дополнительные пары «ключ — скаляр», без персональных данных | {"product":"emulsion-mastery"} |
Нужен хотя бы один из lead_id, external_id, session_id. Если указано несколько, приоритет определяется в порядке lead_id, external_id, session_id (предварительно).
{
"conversion_id": "pay_48213_1",
"type": "payment",
"value": { "amount": "4990.00", "currency": "RUB" },
"occurred_at": "2026-10-11T08:15:30Z",
"external_id": "crm-48213",
"properties": { "product": "emulsion-mastery" }
}
#Привязка к лиду, сессии или внешнему идентификатору
| Способ | Когда подходит | Что получает платформа |
|---|---|---|
lead_id | лид создан или принят через API лидов | прямую связь с лидом и его атрибуцией (источник, UTM, история визита) |
external_id | лид создан вашей CRM методом POST /leads с этим же external_id | связь через идентификатор вашей CRM |
session_id | заявки нет, конверсия идёт от посетителя (например, покупка без формы) | связь с сессией и её каналом |
Если лид или сессия не найдены, конверсия отклоняется с кодом not_found; платформа не создаёт «висячих» конверсий.
#Ответ
Успех — 201 Created для новой конверсии и 200 OK при повторе с тем же conversion_id. Метод не асинхронный: объект operation не возвращается, а пересчёт отчётов идёт после ответа.
{
"conversion_id": "pay_48213_1",
"status": "attributed",
"lead_id": "lead_EXAMPLE_01",
"attribution": { "channel": "search", "basis": "form" },
"created_at": "2026-10-11T08:16:02Z"
}
| Поле | Тип | Описание |
|---|---|---|
conversion_id | string | ваш идентификатор |
status | string | attributed — связана с каналом; unattributed — принята, но канал неизвестен (у лида нет атрибуции) |
lead_id | string | null | найденный лид |
attribution.channel | string | null | канал, к которому отнесена конверсия |
attribution.basis | string | основа: funnel, form или none |
Имена полей ответа предварительные.
#Ошибки
Формат — application/problem+json, коды — в каталоге ошибок.
| HTTP | Код | Когда |
|---|---|---|
| 401 | invalid_api_key | ключ неверен, отозван или истёк |
| 403 | scope_missing | нет области analytics:write |
| 404 | not_found | лид или сессия не найдены |
| 403 | ip_not_allowed | запрос с адреса вне списка IP интеграции |
| 409 | idempotency_conflict | тот же Idempotency-Key с другим телом |
| 422 | validation_failed | нет ни одной привязки; сумма не строкой; валюта не совпадает с валютой ячейки; контактные данные в properties |
| 429 | rate_limited | превышен предел частоты |
| 503 | service_unavailable | хранилище пределов временно недоступно |
#Примеры
#curl
curl -X POST 'https://formula-cream.pro/api/public/v1/analytics/conversions' \
-H 'Authorization: Bearer sap_ru_live_EXAMPLE0KEYI_EXAMPLEEXAMPLEEXAMPLEEXAMPLEEXAMPLE' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: pay_48213_1' \
-d '{
"conversion_id": "pay_48213_1",
"type": "payment",
"value": { "amount": "4990.00", "currency": "RUB" },
"occurred_at": "2026-10-11T08:15:30Z",
"external_id": "crm-48213"
}'
#Python
import os, requests
response = requests.post(
"https://wfacademy.org/api/public/v1/analytics/conversions",
headers={
"Authorization": f"Bearer {os.environ['API_KEY']}",
"Idempotency-Key": "pay_48213_1",
},
json={
"conversion_id": "pay_48213_1",
"type": "payment",
"value": {"amount": "49.00", "currency": "GBP"},
"occurred_at": "2026-10-11T08:15:30Z",
"external_id": "crm-48213",
},
timeout=5,
)
response.raise_for_status()
#Как конверсии попадают в отчёты
Метрики deals_won и revenue в аналитике (Чтение аналитики) берутся из CRM платформы или из офлайн-конверсий, без двойного счёта:
- конверсия с
lead_id, у которого в CRM платформы уже есть выигранная сделка, заменяет её сумму; если конверсий по лиду несколько, действует последняя поoccurred_at; - конверсия без выигранной сделки у лида добавляется как новая выигранная сделка на сумму
value; - в режимах CRM
externalиboth(режимы) тот же принцип: платформа не складывает сделку и конверсию по одному лиду.
Конверсия попадает и в разрез по каналам. Стратег использует её, чтобы считать окупаемость канала и приоритизировать темы и рекламу. Данные появляются в отчётах не мгновенно: пересчёт идёт после приёма.
#Возвраты
Возврат передаётся как конверсия с отрицательной суммой в value.amount (например, "-4990.00") и собственным conversion_id. Она уменьшает revenue за период, в который попал occurred_at возврата.
{
"conversion_id": "refund_48213_1",
"type": "payment",
"value": { "amount": "-4990.00", "currency": "RUB" },
"occurred_at": "2026-10-20T10:00:00Z",
"external_id": "crm-48213"
}
#Заметки
- Деньги — только строкой и только в валюте ячейки; пересчёта валют нет.
- Повтор с тем же
conversion_idбезопасен. - Возвраты передаются отрицательной суммой (Возвраты).
#Открытые вопросы
- Техническое. Состав и имена полей запроса и ответа предварительные: проект задаёт лишь замысел «оплата, сделка с привязкой к лиду/сессии».
- К владельцу. Мультивалютность: допустимо ли присылать сумму в валюте, отличной от валюты ячейки.
- Техническое. Предельное «окно» давности
occurred_atи порядок пересчёта окупаемости при поздних конверсиях; частичные оплаты и корректировки суммы (кроме возврата). - К владельцу. Область
analytics:writeобщая с событиями; раздельного права на конверсии (денежные данные) нет.