Admin API: конверсии и постбек
Методы Admin API для типов конверсий, импорта конверсий из CSV и работы с очередью доставки событий: список, поиск и повторная отправка.
Через API доступны те же действия, что и в панели: типы конверсий, импорт конверсий из CSV и журнал доставки событий. Авторизация описана на странице Admin API: обзор и авторизация, формат запросов, ответов и ошибок — на странице Формат запросов, ответов и ошибок.
Методы группы
| Метод и адрес | Назначение | Права токена |
|---|---|---|
GET /api/v1/conversion-types | Список типов конверсий | full или reports:read |
POST /api/v1/conversion-types | Создать тип | full |
PUT /api/v1/conversion-types/{id} | Изменить тип | full |
DELETE /api/v1/conversion-types/{id} | Удалить тип | full |
POST /api/v1/conversion-import/preview | Проверить CSV | full |
POST /api/v1/conversion-import/apply | Импортировать CSV | full |
GET /api/v1/deliveries | Последние 200 задач доставки | full |
GET /api/v1/deliveries/search | Поиск по задачам доставки | full |
POST /api/v1/deliveries/{id}/retry | Повторить доставку | full |
Если {id} в адресе — не UUID, ответ — 400 с кодом bad_request. При неактивной лицензии все методы группы отвечают 402 — см. Истёкшая лицензия.
Журнал принятых конверсий кампании отдаёт GET /api/v1/campaigns/{id}/conversions — см. Admin API: кампании.
Приём постбеков и лидов
Адреса /api/v1/postback, /api/v1/lead и /api/v1/lead-file принимают данные без токена, заголовок Api-Key им не нужен. Параметры постбека, статусы, выплата, txid и секрет источника описаны на странице Входящий постбек, повторы и корректировки — на странице ID транзакции, дубли и корректировки, приём данных из форм — на странице Приём лидов из форм.
Типы конверсий
Тип сопоставляет значение status из постбека партнёрской сети со статусом трекера. Правила сопоставления — на странице Типы конверсий.
Объект типа:
| Поле | Тип | Описание |
|---|---|---|
id | строка, UUID | ID типа |
name | строка | Название |
status | строка | Статус, который запишет трекер: lead, sale, rejected или hold |
params | строка | Значения status от сети через запятую, например deposit,ftd |
count_conv | логический | Считать в конверсиях отчётов |
count_revenue | логический | Считать выплату в доходе |
send_postback | логический | Отправлять исходящие S2S-постбеки по таким конверсиям |
color | строка | Цвет |
Список типов
GET /api/v1/conversion-typesВозвращает все типы команды в порядке создания. Права токена: full или reports:read. Параметров нет.
Ответ — код 200 и массив объектов типа. Если типов нет — пустой массив [].
Создать тип
POST /api/v1/conversion-typesСоздаёт тип конверсии. Права токена: full.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
name | строка | да | Название |
status | строка | нет | lead, sale, rejected или hold. По умолчанию lead |
params | строка | нет | Значения status от сети через запятую. Тип без значений ни с чем не совпадает |
count_conv | логический | нет | По умолчанию true |
count_revenue | логический | нет | По умолчанию true |
send_postback | логический | нет | По умолчанию false. Передайте true, чтобы постбеки уходили в источник |
color | строка | нет | По умолчанию пустая строка |
Ответ — код 201 и объект созданного типа.
curl -X POST https://panel.example.com/api/v1/conversion-types \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"name":"Депозит","status":"sale","params":"deposit,ftd","send_postback":true}'Ошибки: 422, код validation, сообщение name is required — нет поля name или тело не является JSON-объектом.
Изменить тип
PUT /api/v1/conversion-types/{id}Заменяет настройки типа. Права токена: full.
Поля тела те же, что при создании, name обязателен. Передавайте объект целиком:
- пропущенные
count_conv,count_revenueиsend_postbackстановятсяfalse; - пропущенные
paramsиcolorстановятся пустой строкой; - пропущенный или пустой
statusне меняется.
Ответ — код 200 и объект типа после изменения.
Ошибки:
| Код | code | Когда |
|---|---|---|
404 | not_found | Типа с таким ID нет |
422 | validation | Нет поля name или тело не является JSON-объектом |
Удалить тип
DELETE /api/v1/conversion-types/{id}Удаляет тип. Права токена: full. Тела запроса нет.
Ответ — код 204 без тела. Если типа с таким ID нет — 404, код not_found. Что происходит с уже принятыми конверсиями — в разделе Удаление и изменение.
Импорт конверсий из CSV
Импорт идёт в два запроса: проверка возвращает token, импорт принимает те же данные вместе с этим token. Формат файла и правила для каждой колонки — на странице Импорт конверсий из CSV.
Тело обоих запросов:
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
csv | строка | да | Текст CSV с заголовком sub_id,payout,tid,status. До 256 КБ и до 200 строк с данными |
currency | строка | нет | Валюта сумм файла, три латинские буквы. По умолчанию USD |
notify | логический | нет | true — отправить по импортированным конверсиям исходящие S2S и CAPI. По умолчанию false |
token | строка | только для импорта | Значение token из ответа проверки |
Ответ обоих запросов — код 200:
| Поле | Тип | Описание |
|---|---|---|
rows | массив | По объекту на строку файла |
rows[].line | число | Номер строки в файле. Заголовок — строка 1 |
rows[].click_id, rows[].payout, rows[].status | строка | Значения колонок sub_id, payout и status. Статус — в нижнем регистре |
rows[].tid | строка | ID транзакции. Для пустой колонки — import: и значение sub_id |
rows[].error | строка | Причина, по которой строка не принята. Поля нет, если ошибки нет |
rows[].result | строка | Итог импорта строки. Есть только в ответе импорта |
valid | логический | true — все строки прошли проверку |
token | строка | Заполнен только в ответе проверки при valid: true, иначе пустая строка |
applied | логический | true — импорт выполнен |
notify | логический | Значение notify из запроса |
Проверить CSV
POST /api/v1/conversion-import/previewПроверяет файл и ничего не записывает. Права токена: full.
Если valid равен false, исправьте строки с полем error и повторите проверку. Тексты ошибок строк разобраны в разделе Если не получилось.
curl -X POST https://panel.example.com/api/v1/conversion-import/preview \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"csv":"sub_id,payout,tid,status\n1a2b3c4d5e6f,25.5,order-1001,sale\n","currency":"USD","notify":false}'{
"rows": [
{"line": 2, "click_id": "1a2b3c4d5e6f", "payout": "25.5", "tid": "order-1001", "status": "sale"}
],
"valid": true,
"token": "1791021600.9f2c…",
"applied": false,
"notify": false
}Ошибки:
| Код | code | message |
|---|---|---|
400 | bad_request | Некорректный запрос — тело не является JSON-объектом |
422 | validation | Некорректная валюта, Файл больше 256 КБ, Не больше 200 строк за импорт, В CSV нет данных |
422 | validation | Нужен CSV с заголовком sub_id,payout,tid,status, Нужны ровно 4 колонки: sub_id,payout,tid,status, Заголовок: sub_id,payout,tid,status |
503 | unavailable | temporary error, retry later — повторите запрос позже |
Импортировать CSV
POST /api/v1/conversion-import/applyЗаписывает конверсии из проверенного файла. Права токена: full.
Отправьте те же csv, currency и notify, что в проверке, и добавьте token. Он действует 15 минут и подходит только к этим данным и только пользователю, чей API-токен выполнил проверку. Изменили хотя бы одно поле — проверьте файл заново.
Строки обрабатываются по тем же правилам, что и входящий постбек. При applied: true у каждой строки есть итог:
resultсо значениемПринято (точный повтор не создаёт дубль)— конверсия принята;errorсо значениемНе принято: HTTP <код>. Проверьте журнал postback; строку можно повторить с тем же tid.— строка не записана, остальные строки на это не влияют.
Если при импорте valid равен false, ничего не записано: applied равен false.
Ошибки — те же, что у проверки, и ещё две:
| Код | code | message |
|---|---|---|
428 | preview_required | Сначала выполните предварительную проверку — нет поля token или он неверного вида |
409 | preview_expired | Данные изменились или проверка устарела. Повторите проверку. |
Доставки
Задача доставки — запись принятой конверсии в статистику, исходящий S2S-постбек или событие Facebook Conversions API. Что означают состояния и результаты и когда повтор безопасен — на странице Журнал доставки событий.
Объект задачи:
| Поле | Тип | Описание |
|---|---|---|
id | строка, UUID | ID задачи |
campaign_id | строка, UUID | Кампания |
click_id | строка | Subid клика |
kind | строка | conversion — запись конверсии, s2s — S2S-постбек, capi — событие Facebook |
destination | строка | Получатель S2S: source — источник, campaign — адрес кампании, source_and_campaign — адреса совпали, запрос один. Если получателя нет, поля нет |
state | строка | pending — ожидает, running — обрабатывается, sent — выполнено, failed — нужна проверка |
attempts | число | Сколько раз трекер выполнял задачу |
result_code | строка | Итог последней попытки, см. значения результата |
held_for_license | логический | Отправка отложена до продления лицензии. Заполняется только в GET /api/v1/deliveries, в ответе поиска всегда false |
created_at, updated_at | строка, дата RFC 3339 | Время создания и последнего изменения |
next_attempt_at | строка, дата RFC 3339 | Время следующей попытки |
Последние доставки
GET /api/v1/deliveriesВозвращает последние 200 задач команды, новые первыми. Права токена: full. Параметров нет.
Ответ — код 200 и массив объектов задачи.
Поиск доставок
GET /api/v1/deliveries/searchИщет задачи по клику, периоду и фильтрам. Права токена: full.
| Параметр | Тип | Обязательность | Описание |
|---|---|---|---|
click_id | строка | нет | Subid клика целиком: от 1 до 64 символов, латинские буквы, цифры, _ и - |
from | строка, дата RFC 3339 | нет | Начало периода по времени создания задачи. По умолчанию — 24 часа назад |
to | строка, дата RFC 3339 | нет | Конец периода. По умолчанию — текущее время |
campaign_id | строка, UUID | нет | Кампания |
state | строка | нет | pending, running, sent или failed |
kind | строка | нет | conversion, s2s или capi |
destination | строка | нет | source, campaign или source_and_campaign |
limit | число | нет | Размер страницы от 1 до 200. По умолчанию 100 |
cursor | строка | нет | Значение next_cursor из предыдущего ответа |
Период — не длиннее 93 дней. Если передан click_id без from и to, поиск идёт за всё время.
Ответ — код 200:
| Поле | Тип | Описание |
|---|---|---|
items | массив | Объекты задачи, новые первыми |
next_cursor | строка | Передайте в cursor, чтобы получить следующую страницу. Пустая строка — страница последняя |
curl "https://panel.example.com/api/v1/deliveries/search?state=failed&kind=s2s&from=2026-10-01T00:00:00Z&to=2026-10-04T00:00:00Z&limit=50" \
-H "Api-Key: <токен>"{
"items": [
{
"held_for_license": false,
"id": "0b7e4c19-6a2d-4f85-b3c1-8d9e0f1a2b3c",
"campaign_id": "c41a9e07-52bd-4f13-8a60-9d7e6f5a4b3c",
"click_id": "1a2b3c4d5e6f",
"kind": "s2s",
"destination": "source",
"state": "failed",
"attempts": 1,
"result_code": "http_404",
"created_at": "2026-10-03T14:22:05.418332Z",
"updated_at": "2026-10-03T14:22:06.102778Z",
"next_attempt_at": "2026-10-03T14:22:05.418332Z"
}
],
"next_cursor": ""
}Ошибки — код 400, code равен validation.
Сообщения об ошибках поиска
Некорректный subid—click_idне подходит по формату.Некорректное начало периода,Некорректный конец периода— дата не в формате RFC 3339.Выберите период до 93 дней— период длиннее 93 дней илиtoраньшеfrom.Размер страницы: от 1 до 200—limitвне пределов или не число.Некорректная страница—cursorне из ответа этого метода.Некорректная кампания—campaign_idне UUID.Некорректный фильтр— неизвестное значениеstate,kindилиdestination.
Повторить доставку
POST /api/v1/deliveries/{id}/retryВозвращает задачу в очередь: state становится pending, отправка идёт сразу и в прежнем виде. Права токена: full. В адресе — id задачи, тела запроса нет.
Повторить можно только задачу в состоянии failed. Задачи с result_code, равным invalid_url, blocked_address, invalid_payload или invalid_kind, не повторяются.
Ответ — код 200:
{"ok": true}Ошибки: 404, код not_found — задачи с таким ID нет, она не в состоянии failed или её нельзя повторить.
Если получатель уже принял событие, после повтора у него может появиться дубль. Задачи с result_code, равным unknown_delivery, сначала сверьте у получателя — см. «Получение не подтверждено».