API Яндекс Директа v5: Выгрузить статистику рекламных кампаний

Сценарий из mcp-everything. Актуально на 2026-10-24.

Расходы, показы, клики и конверсии по дням — в свою аналитику, BI или отчёт клиенту.

  1. Зарегистрируй приложение и получи OAuth-токен пользователя Директа; передавай его в заголовке Authorization: Bearer <токен>. Для агентского аккаунта добавляй заголовок Client-Login с логином клиента.
  2. Запроси отчёт: POST /json/v5/reports с params — ReportDefinition: SelectionCriteria (DateFrom, DateTo), FieldNames (Date, CampaignName, Impressions, Clicks, Cost), ReportName, ReportType (например, CAMPAIGN_PERFORMANCE_REPORT), DateRangeType = CUSTOM_DATE, Format = TSV, IncludeVAT.
  3. В режиме processingMode = offline отчёт готовится асинхронно: ответ 201 или 202 значит «ещё не готов» — повтори тот же запрос через retryIn секунд из заголовка. Ответ 200 — тело с отчётом в TSV.
  4. Деньги по умолчанию умножены на 1 000 000 — передай заголовок returnMoneyInMicros: false, чтобы получать рубли с копейками. skipReportHeader и skipReportSummary убирают служебные строки.
  5. ReportName должен быть уникальным для разных отчётов: повтор с тем же именем вернёт уже сформированный отчёт.
import time, requests

headers = {"Authorization": "Bearer <токен>", "processingMode": "offline", "returnMoneyInMicros": "false",
           "skipReportHeader": "true", "skipReportSummary": "true"}
body = {"params": {
    "SelectionCriteria": {"DateFrom": "2026-10-01", "DateTo": "2026-10-23"},
    "FieldNames": ["Date", "CampaignName", "Impressions", "Clicks", "Cost"],
    "ReportName": "campaigns-2026-10-01-23", "ReportType": "CAMPAIGN_PERFORMANCE_REPORT",
    "DateRangeType": "CUSTOM_DATE", "Format": "TSV", "IncludeVAT": "YES"}}
while True:
    r = requests.post("https://api.direct.yandex.com/json/v5/reports", headers=headers, json=body)
    if r.status_code == 200:
        rows = [line.split("\t") for line in r.text.strip().splitlines()]
        break
    if r.status_code in (201, 202):
        time.sleep(int(r.headers.get("retryIn", 10)))
        continue
    raise RuntimeError(r.text)

Базовые URL

Авторизация

Тип: OAuth 2.0

OAuth 2.0: приложение регистрируется заранее, OAuth-токен пользователя Директа передаётся в заголовке Authorization: Bearer <токен>.

Методы сценария

POST /json/v5/reports — Reports: отчёт статистики

Тело — params (ReportDefinition); ответ — отчёт в формате TSV. В режиме offline отчёт формируется асинхронно, заголовок ответа retryIn подсказывает интервал повторного запроса в секундах.

Параметр Где Тип Обяз. Описание
processingMode header string нет online, offline или auto (по умолчанию)
returnMoneyInMicros header string нет false — деньги в валюте с двумя знаками; по умолчанию × 1 000 000
skipReportHeader header string нет true — без строки с названием отчёта
skipColumnHeader header string нет true — без строки с названиями полей
skipReportSummary header string нет true — без строки с числом строк
params.SelectionCriteria body object да Критерии отбора; DateFrom/DateTo — только при CUSTOM_DATE, Filter — необязательный
params.FieldNames body array да Поля отчёта
params.ReportName body string да Название отчёта
params.ReportType body string да Тип отчёта, например ACCOUNT_PERFORMANCE_REPORT
params.DateRangeType body string да Период, например CUSTOM_DATE
params.Format body string да Только TSV
params.IncludeVAT body string да Учитывать НДС: YES/NO
params.Goals body array нет Цели
params.AttributionModels body array нет Модели атрибуции
params.Page.Limit body integer нет Ограничение строк (обязательно внутри Page)
params.OrderBy body array нет Сортировка

Нюансы

Другие сценарии


Если этого недостаточно — официальная документация: https://yandex.ru/dev/direct/doc/ru/ Вся интеграция одним документом: https://mcp-everything.ru/integrations/yandex-direct.md