Разделы документации

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Проверить CSVfull
POST /api/v1/conversion-import/applyИмпортировать CSVfull
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строка, UUIDID типа
nameстрокаНазвание
statusстрокаСтатус, который запишет трекер: lead, sale, rejected или hold
paramsстрокаЗначения status от сети через запятую, например deposit,ftd
count_convлогическийСчитать в конверсиях отчётов
count_revenueлогическийСчитать выплату в доходе
send_postbackлогическийОтправлять исходящие S2S-постбеки по таким конверсиям
colorстрокаЦвет

Список типов

http
GET /api/v1/conversion-types

Возвращает все типы команды в порядке создания. Права токена: full или reports:read. Параметров нет.

Ответ — код 200 и массив объектов типа. Если типов нет — пустой массив [].

Создать тип

http
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 и объект созданного типа.

bash
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-объектом.

Изменить тип

http
PUT /api/v1/conversion-types/{id}

Заменяет настройки типа. Права токена: full.

Поля тела те же, что при создании, name обязателен. Передавайте объект целиком:

  • пропущенные count_conv, count_revenue и send_postback становятся false;
  • пропущенные params и color становятся пустой строкой;
  • пропущенный или пустой status не меняется.

Ответ — код 200 и объект типа после изменения.

Ошибки:

КодcodeКогда
404not_foundТипа с таким ID нет
422validationНет поля name или тело не является JSON-объектом

Удалить тип

http
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

http
POST /api/v1/conversion-import/preview

Проверяет файл и ничего не записывает. Права токена: full.

Если valid равен false, исправьте строки с полем error и повторите проверку. Тексты ошибок строк разобраны в разделе Если не получилось.

bash
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}'
json
{
  "rows": [
    {"line": 2, "click_id": "1a2b3c4d5e6f", "payout": "25.5", "tid": "order-1001", "status": "sale"}
  ],
  "valid": true,
  "token": "1791021600.9f2c…",
  "applied": false,
  "notify": false
}

Ошибки:

Кодcodemessage
400bad_requestНекорректный запрос — тело не является JSON-объектом
422validationНекорректная валюта, Файл больше 256 КБ, Не больше 200 строк за импорт, В CSV нет данных
422validationНужен CSV с заголовком sub_id,payout,tid,status, Нужны ровно 4 колонки: sub_id,payout,tid,status, Заголовок: sub_id,payout,tid,status
503unavailabletemporary error, retry later — повторите запрос позже

Импортировать CSV

http
POST /api/v1/conversion-import/apply

Записывает конверсии из проверенного файла. Права токена: full.

Отправьте те же csv, currency и notify, что в проверке, и добавьте token. Он действует 15 минут и подходит только к этим данным и только пользователю, чей API-токен выполнил проверку. Изменили хотя бы одно поле — проверьте файл заново.

Строки обрабатываются по тем же правилам, что и входящий постбек. При applied: true у каждой строки есть итог:

  • result со значением Принято (точный повтор не создаёт дубль) — конверсия принята;
  • error со значением Не принято: HTTP <код>. Проверьте журнал postback; строку можно повторить с тем же tid. — строка не записана, остальные строки на это не влияют.

Если при импорте valid равен false, ничего не записано: applied равен false.

Ошибки — те же, что у проверки, и ещё две:

Кодcodemessage
428preview_requiredСначала выполните предварительную проверку — нет поля token или он неверного вида
409preview_expiredДанные изменились или проверка устарела. Повторите проверку.

Доставки

Задача доставки — запись принятой конверсии в статистику, исходящий S2S-постбек или событие Facebook Conversions API. Что означают состояния и результаты и когда повтор безопасен — на странице Журнал доставки событий.

Объект задачи:

ПолеТипОписание
idстрока, UUIDID задачи
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Время следующей попытки

Последние доставки

http
GET /api/v1/deliveries

Возвращает последние 200 задач команды, новые первыми. Права токена: full. Параметров нет.

Ответ — код 200 и массив объектов задачи.

Поиск доставок

http
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, чтобы получить следующую страницу. Пустая строка — страница последняя
bash
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: <токен>"
json
{
  "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.

Повторить доставку

http
POST /api/v1/deliveries/{id}/retry

Возвращает задачу в очередь: state становится pending, отправка идёт сразу и в прежнем виде. Права токена: full. В адресе — id задачи, тела запроса нет.

Повторить можно только задачу в состоянии failed. Задачи с result_code, равным invalid_url, blocked_address, invalid_payload или invalid_kind, не повторяются.

Ответ — код 200:

json
{"ok": true}

Ошибки: 404, код not_found — задачи с таким ID нет, она не в состоянии failed или её нельзя повторить.

Внимание.

Если получатель уже принял событие, после повтора у него может появиться дубль. Задачи с result_code, равным unknown_delivery, сначала сверьте у получателя — см. «Получение не подтверждено».

Обновлено Нужна помощь? ↗