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

Admin API: расходы

Четыре метода Admin API для расходов: состояние по дням, настройки, приём дневного снимка рекламного аккаунта и скачивание расширения.

Через эти методы работает вкладка Настройки → Расходы и расширение для расходов. Ими же можно передавать в трекер расход рекламного аккаунта из своей интеграции. Авторизация описана на странице Admin API: обзор и авторизация, формат ответов и ошибок — на странице Формат запросов, ответов и ошибок.

Доступ и лицензия

Методspend:writefull
GET /api/v1/spendдада
POST /api/v1/spend/snapshotsдада
PUT /api/v1/spend/settingsнетда
GET /api/v1/spend/extensionнетда

Токен spend:write создаётся в панели: Настройки → Расходы, блок Подключить профиль, кнопка Создать ключ. Срок такого ключа — 90 дней. Токен full создаётся во вкладке API — см. Виды доступа.

Все четыре метода работают только на платной лицензии. На пробной они отвечают кодом 403:

json
{"code": "spend_paid_required", "message": "Расширение для расходов доступно после оплаты лицензии."}

При неактивной лицензии ответ — 402, см. Истёкшая лицензия.

Методы

Получить настройки и состояние дней

http
GET /api/v1/spend

Возвращает настройки расходов и состояние последних 60 дней, по которым приходили снимки.

Права токена: spend:write или full. Параметров и тела нет.

Ответ — код 200:

ПолеТипОписание
settings.ad_keyстрокаПоле клика, в котором приходит ID объявления. Пока настройки не сохранены — sub_id_4
settings.timezoneстрокаЧасовой пояс рекламного аккаунта. Пока настройки не сохранены — UTC
jobsмассивДни со снимками, от нового к старому. Если снимков не было — []
jobs[].dayстрока, ГГГГ-ММ-ДДДата расхода в часовом поясе рекламного аккаунта
jobs[].pendingлогическоеtrue — снимок принят и ждёт раскладки по кампаниям, false — расход учтён в отчётах
jobs[].errorстрокаТекст ошибки последней раскладки. Пустая строка, если ошибки нет. Трекер повторяет раскладку сам
jobs[].campaignsчислоСколько кампаний получили расход за день
jobs[].unmatched_adsчислоСколько объявлений не привязано: за день нет кликов с их ID
jobs[].unmatched_spendчислоРасход этих объявлений в USD
jobs[].updated_atстрока, дата RFC 3339Время последнего изменения

Те же данные показывает таблица на вкладке Расходы — см. Таблица дней.

Пример ответа:

json
{
  "settings": {"ad_key": "sub_id_4", "timezone": "Europe/Warsaw"},
  "jobs": [
    {
      "day": "2026-10-03",
      "pending": false,
      "error": "",
      "campaigns": 4,
      "unmatched_ads": 1,
      "unmatched_spend": 3.2,
      "updated_at": "2026-10-04T06:15:22.104512Z"
    }
  ]
}

Сохранить настройки расходов

http
PUT /api/v1/spend/settings

Задаёт поле клика с ID объявления и часовой пояс рекламного аккаунта. В панели это поля Поле с ID объявления и Timezone рекламного аккаунта.

Права токена: full.

ПолеТипОбязательностьОписание
ad_keyстрокадаОдно из значений sub_id_1 … sub_id_30
timezoneстрокадаЧасовой пояс в формате IANA, например Europe/Warsaw. Значение Local не принимается

Ответ — код 200 и сохранённые значения:

json
{"ad_key": "sub_id_4", "timezone": "Europe/Warsaw"}
Внимание.

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

Ошибки:

КодcodemessageКогда
422validationВыберите sub_id_1…30 с ID объявленияТело не разобрано или ad_key вне списка
422validationУкажите IANA timezone рекламного кабинетаtimezone пустой, неизвестный или Local
409spend_historyПосле первого импорта поле и timezone фиксированы, чтобы не пересчитать историю другим способомВ трекере уже есть хотя бы один снимок

Передать дневной снимок расхода

http
POST /api/v1/spend/snapshots

Принимает полный расход одного рекламного аккаунта за один день: список объявлений и сумму по каждому.

Права токена: spend:write или full. Тело — один JSON-объект размером до 2 МиБ. Поля, которых нет в таблице, приводят к ошибке 422.

ПолеТипОбязательностьОписание
account_idстрокадаID рекламного аккаунта: только цифры, от 1 до 32 знаков
dayстрока, ГГГГ-ММ-ДДдаДата расхода в часовом поясе timezone. Сегодняшний день или один из 30 предыдущих
currencyстрокадаВалюта аккаунта: три латинские буквы, например PLN. Регистр не важен
timezoneстрокадаЧасовой пояс аккаунта в формате IANA. Должен совпадать с settings.timezone
fetched_atстрока, дата RFC 3339даКогда данные получены из рекламного кабинета. Не старше 24 часов и не больше чем на 5 минут в будущем
rowsмассивдаОбъявления аккаунта за день, до 10 000 строк. Пустой массив обнуляет расход аккаунта за этот день. Запрос без поля обрабатывается как пустой массив
rows[].ad_idстрокадаID объявления: только цифры, от 1 до 32 знаков. Без повторов внутри снимка
rows[].spendчислодаРасход объявления за день в валюте currency, от 0 до 1 000 000 000

Как трекер обрабатывает снимок:

  • Снимок заменяет прежние данные этого аккаунта за этот день, а не прибавляется к ним. Передавайте все объявления аккаунта, а не только изменившиеся.
  • Из двух снимков одного аккаунта за один день остаётся тот, у которого fetched_at позже. Снимок с более ранним временем не применяется.
  • Сумма переводится в USD по курсу на дату расхода. Курс закрепляется за аккаунтом и днём при первом снимке — см. Курс для расходов из расширения. Для USD курс не нужен.
  • Расход объявления делится между кампаниями по кликам с его ID в поле settings.ad_key — см. Как расход попадает в отчёты.

Ответ — код 202: снимок принят, раскладка по кампаниям идёт в фоне. Результат смотрите в jobs метода GET /api/v1/spend.

ПолеТипОписание
acceptedлогическоеВсегда true
changedлогическоеtrue — снимок сохранён, день поставлен на раскладку. false — в трекере уже есть снимок с тем же или более поздним fetched_at, данные не менялись
rowsчислоСколько строк было в запросе

Пример запроса:

bash
curl -X POST https://panel.example.com/api/v1/spend/snapshots \
  -H "Api-Key: <токен>" \
  -H "Content-Type: application/json" \
  -d '{
    "account_id": "1234567890123456",
    "day": "2026-10-03",
    "currency": "PLN",
    "timezone": "Europe/Warsaw",
    "fetched_at": "2026-10-04T06:15:00Z",
    "rows": [
      {"ad_id": "120210000000000001", "spend": 182.4},
      {"ad_id": "120210000000000002", "spend": 57.15}
    ]
  }'

Пример ответа:

json
{"accepted": true, "changed": true, "rows": 2}

Ошибки:

КодcodemessageКогда
422validationразные, см. список нижеОшибка в теле или в значениях полей
422timezone_mismatchTimezone аккаунта отличается от настроек расширения в трекереtimezone не совпадает с settings.timezone
422currency_rateНет курса USD на дату расхода; добавьте курс и повторитеДля currency нет курса на дату day — см. Если курса нет
422snapshot_limitЛимит дня: 100 аккаунтов, 100000 объявлений и допустимая сумма USD; ad_id должен принадлежать одному аккаунтуЗа день больше 100 аккаунтов или 100 000 объявлений, сумма дня в USD больше 1 000 000 000, либо этот ad_id за день уже пришёл из другого аккаунта
409currency_mismatchВалюта сохранённого снимка отличаетсяЗа этот день аккаунт уже загружен в другой валюте
409snapshot_conflictСнимки с одинаковым временем содержат разные данные; выполните новый сборfetched_at совпадает с сохранённым, а строки отличаются. Отправьте снимок с новым временем
429rate_limitedслишком много запросов, попробуйте позжеБольше 120 запросов в минуту с одного IP — см. Ограничения частоты
Сообщения с кодом validation
  • Некорректный снимок расходов (до 2 МиБ) — тело не JSON, больше 2 МиБ, есть неизвестное поле или значение не того типа.
  • Ожидается один JSON снимок — после объекта в теле есть ещё данные.
  • Некорректный аккаунт, валюта или размер снимка (до 10000 объявлений) — ошибка в account_id или currency, либо строк больше 10 000.
  • Некорректная timezone — timezone пустой, неизвестный или Local.
  • Дата должна быть в пределах последних 31 дней — day в другом формате, в будущем или старше 30 дней.
  • Обновите снимок расхода: время получения устарело или находится в будущем — fetched_at не задан или вне допустимого окна.
  • Некорректный расход или повтор ID объявления — ошибка в ad_id, повтор ad_id, отрицательный или слишком большой spend.
  • Суммарный расход слишком велик — сумма строк снимка в валюте currency больше 1 000 000 000.
  • Недопустимый курс или сумма USD — сумма снимка после перевода в USD больше 1 000 000 000.

Повтор того же снимка с тем же fetched_at безопасен: трекер ответит 202 с "changed": false.

Скачать расширение

http
GET /api/v1/spend/extension

Отдаёт архив расширения расходов, собранный под домен панели, название и логотип этой установки. Это тот же файл, что скачивается кнопкой на вкладке Расходы — см. Расширение для расходов Facebook.

Права токена: full. Параметров и тела нет.

Ответ — код 200, тип application/zip, имя файла micator-spend.zip.

Пример запроса:

bash
curl https://panel.example.com/api/v1/spend/extension \
  -H "Api-Key: <токен>" \
  -o micator-spend.zip

Ошибки:

КодcodemessageКогда
503extension_configПроверьте домен панели и логотип в конфигурации установкиАрхив не собран — см. Архив не скачивается

Порядок загрузки из своей интеграции

  1. Сохраните настройки методом PUT /api/v1/spend/settings или на вкладке Настройки → Расходы.
  2. Отправляйте по одному запросу POST /api/v1/spend/snapshots на каждую пару «аккаунт — день».
  3. Запросите GET /api/v1/spend и дождитесь у нужного дня "pending": false с пустым error.
  4. Если unmatched_ads не ноль, проверьте, что ссылка в объявлении передаёт ID объявления в поле settings.ad_key — см. Токены источника и параметры ссылки.

Чтобы расход разложился по кликам, которые пришли после загрузки, отправьте снимок этого дня ещё раз с новым fetched_at.

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