Admin API: источники трафика
Восемь методов для работы с источниками: каталог шаблонов, создание и изменение, токены, постбек, секреты и перенос параметров в кампании.
Методы этой страницы делают то же, что раздел Источники в панели: создают источники трафика, меняют их токены и постбек, переносят параметры в кампании. Всем методам нужен токен с доступом Полный доступ (full). Авторизация описана на странице Admin API: обзор и авторизация, формат запросов и общие коды ошибок — на странице Формат запросов, ответов и ошибок.
Объект источника
Методы списка, чтения, создания и изменения возвращают источник в таком виде:
| Поле | Тип | Описание |
|---|---|---|
id | uuid | Идентификатор источника |
name | string | Название |
template_id | string | Идентификатор шаблона каталога. У источника, созданного без шаблона, поля нет |
template_version | integer | Версия шаблона на момент создания. У источника без шаблона поля нет |
cost_model | string | Значение по умолчанию — cpc. Модель расхода задаётся в кампании — см. Модели расхода кампании |
tokens | array | Токены источника, всегда массив |
postback_mode | string | Режим постбека в источник: single — один адрес на все статусы, per_status — отдельный адрес на статус |
postback_url | string или null | Адрес постбека режима single |
postbacks | array | Строки режима per_status, всегда массив |
postback_secret | string или null | Секрет входящего постбека: ***, если задан, иначе null |
capi_enabled | boolean | Отправка событий в Facebook Conversions API |
capi_pixel_id | string или null | Pixel ID |
capi_token | string или null | Access Token: ***, если задан, иначе null |
Токен
Элемент массива tokens. В массиве до 128 токенов.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
name | string | да | Слот: external_id, cost, sub_id_1 … sub_id_30 и другие. До 64 байт |
param | string | да | Имя параметра в ссылке. До 128 байт, в пределах источника не повторяется |
alias | string | нет | Название токена. До 160 байт: это 160 латинских символов или 80 кириллических. В ответе поля нет, если название пустое |
placeholder | string | нет | Значение параметра в ссылке — макрос рекламной площадки. До 1024 байт |
Пробелы по краям name и param отбрасываются.
Строка постбека
Элемент массива postbacks. В массиве до 20 строк.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
status | string | да | Статус конверсии: lead, sale, rejected, hold или свой статус сети. До 32 символов, сохраняется в нижнем регистре |
url | string | да | Адрес с макросами. Требования те же, что у postback_url |
Адрес постбека — полный адрес http:// или https:// до 2048 символов, без пробелов и переносов строк. Фигурные скобки допустимы только у макросов.
В режиме single отправляется postback_url, строки postbacks не используются. В режиме per_status отправляются строки postbacks с подходящим статусом, postback_url не используется.
Секреты
Значения postback_secret и capi_token из API прочитать нельзя: в ответах вместо них стоит ***. Изменить и удалить секрет можно методом Изменить источник.
Каталог шаблонов
Получить каталог шаблонов
GET /api/v1/traffic-source-templatesВозвращает каталог шаблонов источников. Параметров нет.
Ответ — код 200 и объект:
| Поле | Тип | Описание |
|---|---|---|
version | integer | Версия каталога |
items | array | Шаблоны |
items[].id | string | Идентификатор шаблона, например facebook |
items[].name | string | Название, например Facebook Ads |
items[].version | integer | Версия шаблона. Передаётся при создании источника |
items[].cost_model | string | Значение cost_model для источника |
items[].tokens | array | Токены шаблона, поля как в разделе Токен |
items[].postback_url | string или null | Адрес постбека шаблона |
items[].setup_required | boolean | true у шаблонов, адрес постбека которых нужно заполнить вручную. У остальных поля нет |
Источники
Список источников
GET /api/v1/traffic-sourcesВозвращает все источники команды. Параметров нет.
Ответ — код 200 и массив объектов источника, новые первыми. Постраничной выдачи нет.
Получить источник
GET /api/v1/traffic-sources/{id}Возвращает один источник. {id} в пути — идентификатор источника.
Ответ — код 200 и объект источника.
Ошибки: 400 bad_request — {id} не в формате UUID, 404 not_found — источника нет.
Создать источник
POST /api/v1/traffic-sourcesСоздаёт источник из шаблона каталога или с полями из запроса.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
name | string | да | Название |
template_id | string | нет | Идентификатор шаблона из каталога |
template_version | integer | с template_id | Версия шаблона из каталога. Должна совпадать с текущей |
cost_model | string | нет | По умолчанию cpc |
tokens | array | нет | Токены. По умолчанию пустой массив |
postback_mode | string | нет | single или per_status. По умолчанию single |
postback_url | string или null | нет | Адрес постбека режима single |
postbacks | array | нет | Строки режима per_status |
postback_secret | string или null | нет | Секрет входящего постбека |
capi_enabled | boolean | нет | По умолчанию false |
capi_pixel_id | string или null | нет | Pixel ID |
capi_token | string или null | нет | Access Token |
Если передан template_id, поля tokens, cost_model и postback_url берутся из шаблона, а значения из запроса не учитываются. Режим постбека становится single, строки postbacks — пустыми. У шаблона с setup_required адрес постбека остаётся пустым: задайте его методом Изменить источник.
Ответ — код 201 и объект созданного источника.
curl -X POST https://panel.example.com/api/v1/traffic-sources \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"name":"Facebook Ads","template_id":"facebook","template_version":1}'Ошибки:
| Код | code | Когда |
|---|---|---|
400 | bad_request | Тело не разобрано как JSON |
400 | validation | Ошибка в postback_mode, postback_url или строках postbacks, либо строк больше 20. Текст называет поле или номер строки |
409 | template_changed | Шаблона с таким template_id и template_version в каталоге нет. Получите каталог заново |
422 | validation | Нет name — сообщение name is required. Либо ошибка в tokens: больше 128 токенов, пустые name или param, превышена длина, повтор param |
Ошибки постбека приходят с кодом 400, ошибки названия и токенов — с кодом 422. Тексты ошибок постбека разобраны на странице S2S-постбэк в источник, тексты ошибок токенов — на странице Токены источника.
Изменить источник
PUT /api/v1/traffic-sources/{id}Сохраняет источник. {id} в пути — идентификатор источника. Тело заменяет запись, поэтому передавайте источник целиком: получите его методом Получить источник, измените нужные поля и отправьте обратно. Секреты в виде *** при этом сохранятся.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
name | string | да | Название |
tokens | array | нет | Заменяет все токены. Без поля токены удаляются |
postback_url | string или null | нет | Без поля, null или пустая строка — адрес очищается |
capi_enabled | boolean | нет | Без поля — false |
capi_pixel_id | string или null | нет | Без поля или null — очищается |
cost_model | string | нет | Без поля или пустая строка — не меняется |
postback_mode | string | нет | Без поля или пустая строка — не меняется |
postbacks | array | нет | Без поля или null — не меняются. Пустой массив [] удаляет все строки |
postback_secret | string или null | нет | Новый секрет. Без поля, null, пустая строка или *** — прежний секрет остаётся |
capi_token | string или null | нет | Новый токен. Без поля, null, пустая строка или *** — прежний токен остаётся |
clear_postback_secret | boolean | нет | true удаляет секрет входящего постбека |
clear_capi_token | boolean | нет | true удаляет Access Token |
Поля template_id и template_version этим методом не меняются.
Ответ — код 200 и объект источника. Новые токены действуют на клики всех кампаний источника сразу. Параметры в ссылках кампаний не меняются — для этого есть перенос параметров.
Запрос без tokens, postback_url, capi_enabled или capi_pixel_id очищает эти поля. После удаления секрета постбеки по кликам источника принимаются без параметра secret.
Ошибки: те же 400 и 422, что при создании, 400 bad_request — {id} не в формате UUID, 404 not_found — источника нет.
Удалить источник
DELETE /api/v1/traffic-sources/{id}Удаляет источник. Кампании остаются, поле источника в них становится пустым. {id} в пути — идентификатор источника.
Ответ — код 204 без тела.
Ошибки: 400 bad_request — {id} не в формате UUID, 404 not_found — источника нет.
Перенос параметров в кампании
Перенос идёт в два запроса: сначала просмотр, затем применение. Правила слияния описаны на странице Применение источника к кампаниям.
Получить просмотр изменений
POST /api/v1/traffic-sources/{id}/apply/previewПоказывает, как сохранённые токены источника изменят параметры каждой кампании с этим источником. В кампаниях ничего не меняется. Тело запроса не нужно, {id} в пути — идентификатор источника.
Ответ — код 200 и объект:
| Поле | Тип | Описание |
|---|---|---|
id | uuid | Идентификатор просмотра для метода применения |
expires_at | string | Время, до которого просмотр можно применить: 15 минут с момента запроса |
campaigns | array | Кампании источника |
campaigns[].id | uuid | Идентификатор кампании |
campaigns[].name | string | Название кампании |
campaigns[].before | array | Параметры кампании сейчас: объекты {name, param, value} |
campaigns[].after | array | Параметры после применения |
campaigns[].changed | boolean | true, если параметры изменятся |
Ошибки:
| Код | code | Когда |
|---|---|---|
400 | bad_request | {id} не в формате UUID |
404 | not_found | Источника нет |
422 | batch_too_large | У источника больше 2000 кампаний |
422 | invalid_params | Параметры одной из кампаний сохранены в неверном формате |
422 | validation | Ошибка в сохранённых токенах источника |
Применить просмотр
POST /api/v1/traffic-sources/{id}/applyЗаписывает в кампании параметры из поля after просмотра. {id} в пути — идентификатор источника.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
preview_id | uuid | да | Поле id из ответа просмотра |
Применить просмотр можно только токеном того же пользователя, который его получил.
curl -X POST https://panel.example.com/api/v1/traffic-sources/3f6c1c1e-8a52-4a4b-9c0d-2b7e5d1a9f10/apply \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"preview_id":"b1d7a0c4-52e3-4c8f-a6b9-0e4f7d2c3a15"}'Ответ — код 200 и объект:
{
"updated": 1,
"total": 2,
"outcomes": [
{"id": "7a1e0f3b-6c2d-4e58-b9a1-3d5c8e2f4a60", "state": "updated"},
{"id": "c4b2d9e1-0f7a-4b36-8d5e-1a9c6f3b2e74", "state": "conflict"}
]
}updated — число обновлённых кампаний, total — число кампаний в просмотре. Значения state:
| Значение | Что значит |
|---|---|
updated | Параметры кампании заменены |
unchanged | У кампании не было отличий от источника |
conflict | Параметры кампании изменились после просмотра. Кампания не тронута |
unavailable | Кампания удалена или в ней выбран другой источник. Кампания не тронута |
Для кампаний с исходами conflict и unavailable получите новый просмотр и примените его. Повторный запрос с тем же preview_id возвращает сохранённый результат и ничего не меняет.
Ошибки:
| Код | code | Когда |
|---|---|---|
400 | bad_request | {id} или preview_id не в формате UUID |
404 | not_found | Просмотра с таким preview_id у этого источника и пользователя нет |
409 | preview_expired | Прошло больше 15 минут. Получите новый просмотр |
409 | source_changed | Токены источника изменились после просмотра. Получите новый просмотр |
422 | preview_required | В теле нет preview_id или тело не разобрано как JSON |