Отрасль: Реклама и аналитика. Актуально на 2026-10-24.
API рекламной платформы Яндекс Директ (версия 5): управление кампаниями, группами, объявлениями и ключевыми фразами, а также выгрузка статистики через сервис Reports. API состоит из веб-сервисов, у каждого свой URL; методы — обычно add, update, delete, get и специфические (например, moderate у Ads). Подключение бесплатное, нагрузка регулируется баллами.
Расходы, показы, клики и конверсии по дням — в свою аналитику, BI или отчёт клиенту.
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)
Обзор кампаний аккаунта: названия, статусы, состояние — для своей панели управления рекламой.
curl -X POST https://api.direct.yandex.com/json/v5/campaigns \
-H "Authorization: Bearer $DIRECT_TOKEN" -H 'Content-Type: application/json; charset=utf-8' \
-d '{"method": "get", "params": {"SelectionCriteria": {}, "FieldNames": ["Id", "Name", "State", "Status"]}}'
Массово завести текстово-графические объявления: под новые товары, акции, города.
curl -X POST https://api.direct.yandex.com/json/v5/ads \
-H "Authorization: Bearer $DIRECT_TOKEN" -H 'Content-Type: application/json; charset=utf-8' \
-d '{"method": "add", "params": {"Ads": [{
"AdGroupId": 123456789,
"TextAd": {"Title": "Кружки с логотипом от 50 шт", "Text": "Печать за 3 дня. Доставка по России.", "Href": "https://example.ru/mugs", "Mobile": "NO"}
}]}}'
Аудит семантики: какие фразы есть в кампании, их статусы и ставки.
curl -X POST https://api.direct.yandex.com/json/v5/keywords \
-H "Authorization: Bearer $DIRECT_TOKEN" -H 'Content-Type: application/json; charset=utf-8' \
-d '{"method": "get", "params": {"SelectionCriteria": {"CampaignIds": [12345678]}, "FieldNames": ["Id", "Keyword", "AdGroupId", "State", "Status"], "Page": {"Limit": 1000}}}'
https://api.direct.yandex.comhttps://api-sandbox.direct.yandex.comhttps://api-sandbox.direct.yandex.com/v5/{service}Тип: OAuth 2.0
OAuth 2.0: приложение регистрируется заранее, OAuth-токен пользователя Директа передаётся в заголовке Authorization: Bearer <токен>.
Тело: "method": "get" и params. Возвращает не больше 10 000 объектов; при обрезке выборки приходит LimitedBy.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
method |
body | string | да | get |
params.SelectionCriteria.Ids |
body | array | нет | ID кампаний, до 1000; пустой SelectionCriteria — все кампании |
params.SelectionCriteria.Types |
body | array | нет | Типы кампаний |
params.SelectionCriteria.States |
body | array | нет | Состояния |
params.SelectionCriteria.Statuses |
body | array | нет | Статусы |
params.FieldNames |
body | array | да | Имена возвращаемых полей кампании |
params.Page.Limit |
body | integer | нет | Размер страницы |
params.Page.Offset |
body | integer | нет | Смещение |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
method |
body | string | да | get |
params.SelectionCriteria |
body | object | да | Нужен хотя бы один из Ids, AdGroupIds, CampaignIds |
params.SelectionCriteria.Ids |
body | array | нет | ID объявлений, до 10 000 |
params.SelectionCriteria.AdGroupIds |
body | array | нет | ID групп, до 1000 |
params.SelectionCriteria.CampaignIds |
body | array | нет | ID кампаний, до 10 |
params.FieldNames |
body | array | да | Поля верхнего уровня |
params.TextAdFieldNames |
body | array | нет | Поля текстово-графического объявления |
params.Page |
body | object | нет | Limit и Offset |
Тот же адрес, "method": "add". В result.AddResults[] для каждого объявления — Id или Errors.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
method |
body | string | да | add |
params.Ads |
body | array | да | Объявления |
params.Ads[].AdGroupId |
body | integer | да | ID группы объявлений |
params.Ads[].TextAd.Text |
body | string | нет | Текст текстово-графического объявления |
params.Ads[].TextAd.Title |
body | string | нет | Заголовок |
params.Ads[].TextAd.Href |
body | string | нет | Ссылка |
params.Ads[].TextAd.Mobile |
body | string | нет | Мобильное объявление: YES/NO |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
method |
body | string | да | get |
params.SelectionCriteria |
body | object | да | Нужен один из Ids, AdGroupIds, CampaignIds |
params.SelectionCriteria.Ids |
body | array | нет | ID фраз и автотаргетингов, до 10 000 |
params.SelectionCriteria.AdGroupIds |
body | array | нет | ID групп, до 1000 |
params.SelectionCriteria.CampaignIds |
body | array | нет | ID кампаний, до 10 |
params.FieldNames |
body | array | да | Возвращаемые поля; StatisticsSearch и StatisticsNetwork замедляют большие выборки |
params.Page |
body | object | нет | Limit и Offset |
Тело — 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 | нет | Сортировка |
method и, как правило, params. Поддерживается и SOAP/XML.error (request_id, error_code, error_string, error_detail) — проверяйте наличие error, а не только статус.add/update возвращаются в Errors соответствующего элемента результата.RequestId (указывать в обращениях в поддержку), Units (списано/остаток/суточный лимит, например 10/20828/64000), Units-Used-Login.https://api.direct.yandex.com/v501/.| Код | Описание |
|---|---|
52 |
Сервер авторизации временно недоступен — повторите позже |
53 |
Ошибка авторизации: недействительный OAuth-токен |
54 |
Нет прав |
152 |
Недостаточно баллов |
506 |
Превышено ограничение на число одновременных соединений |
513 |
Логин не подключён к Яндекс Директу |
1000 |
Внутренняя ошибка сервера API |
1002 |
Ошибка операции |
3000 |
Нет доступа к API |
3001 |
Нет доступа к методу |
4000 |
Неверно указаны параметры запроса |
8000 |
Некорректный запрос (нет токена, обязательного параметра, невалидный JSON) |
8800 |
Объект не найден |
Campaigns.get — 10 за вызов и 1 за объект; Ads.add — 20 за вызов и 20 за объект; Dictionaries.get — 1 балл.get возвращают не больше 10 000 объектов.Если этого недостаточно — официальная документация: https://yandex.ru/dev/direct/doc/ru/ JSON: https://mcp-everything.ru/api/integrations/yandex-direct. MCP: https://mcp-everything.ru/mcp