---
slug: "yandex-metrika"
name: "API Яндекс Метрики"
vendor: "Яндекс"
industry: "marketing"
docsUrl: "https://yandex.ru/dev/metrika/ru/"
version: 2
updatedAt: "2026-10-24"
---

# API Яндекс Метрики

Отрасль: Реклама и аналитика. Актуально на 2026-10-24.

API веб-аналитики Яндекс Метрики: API управления (счётчики, цели), API отчётов (таблицы, данные по времени, drill down, сравнение сегментов) и Logs API для выгрузки сырых данных о визитах и хитах. Ответы — UTF-8, JSON по умолчанию, отчёты также в CSV (суффикс `.csv` в пути).

## Сценарии

### Получить посещаемость и источники трафика за период

Визиты, посетители и источники — для своего дашборда или отчёта клиенту.

1. Получи OAuth-токен с доступом к Метрике и передавай его в заголовке Authorization: OAuth <токен>.
2. Узнай ID счётчика: GET /management/v1/counters — в counters[] id и название.
3. Запроси отчёт: GET /stat/v1/data с ids, metrics (например, ym:s:visits,ym:s:users,ym:s:bounceRate), dimensions (ym:s:lastTrafficSource), date1 и date2.
4. В ответе data[] — для каждой строки dimensions и metrics, итоги — в totals. sampled = true значит, что отчёт построен по выборке; accuracy = full даёт точные данные, но медленнее.
5. Метрики визитов (ym:s:) и хитов (ym:pv:) в одном запросе смешивать нельзя. Для CSV добавь .csv к пути.

```bash
curl -G https://api-metrika.yandex.net/stat/v1/data \
  -H "Authorization: OAuth $METRIKA_TOKEN" \
  -d ids=44147844 \
  -d metrics=ym:s:visits,ym:s:users,ym:s:bounceRate \
  -d dimensions=ym:s:lastTrafficSource \
  -d date1=2026-10-01 -d date2=2026-10-23 -d accuracy=full
```

### Построить график посещаемости по дням

Динамика визитов или конверсий во времени для графика.

1. Запроси данные: GET /stat/v1/data/bytime с теми же ids, metrics и датами плюс group = day (или week, month, hour).
2. В ответе для каждой метрики — массив значений по периодам; даты периодов — в time_intervals.
3. С dimensions можно получить отдельные ряды по группировке (например, по источникам): top_keys задаёт, сколько рядов вернуть (до 30).

```bash
curl -G https://api-metrika.yandex.net/stat/v1/data/bytime \
  -H "Authorization: OAuth $METRIKA_TOKEN" \
  -d ids=44147844 -d metrics=ym:s:visits -d date1=30daysAgo -d date2=yesterday -d group=day
```

### Посчитать конверсию по целям

Сколько визитов закончилось заявкой или покупкой — по источникам и кампаниям.

1. Получи цели счётчика: GET /management/v1/counter/{counterId}/goals — id, name и type каждой цели.
2. Запроси отчёт: GET /stat/v1/data с metrics вида ym:s:goal<ID цели>reaches и ym:s:goal<ID цели>conversionRate и нужными dimensions, например ym:s:lastTrafficSource.
3. Новый счётчик для сайта создаётся через POST /management/v1/counters с counter.name и counter.site2.site.

```bash
curl -G https://api-metrika.yandex.net/stat/v1/data \
  -H "Authorization: OAuth $METRIKA_TOKEN" \
  -d ids=44147844 \
  -d 'metrics=ym:s:visits,ym:s:goal123456reaches,ym:s:goal123456conversionRate' \
  -d dimensions=ym:s:lastTrafficSource -d date1=2026-10-01 -d date2=2026-10-23
```

### Выгрузить сырые визиты через Logs API

Неагрегированные данные о каждом визите или хите — для своего хранилища и сквозной аналитики.

1. Проверь, можно ли выгрузить: GET /management/v1/counter/{counterId}/logrequests/evaluate с date1, date2 (не сегодняшний день, период до года), fields (например, ym:s:visitID,ym:s:dateTime,ym:s:lastTrafficSource,ym:s:goalsID) и source = visits.
2. Создай запрос: POST /management/v1/counter/{counterId}/logrequests с теми же параметрами. В ответе log_request с request_id.
3. Опрашивай статус: GET /management/v1/counter/{counterId}/logrequest/{requestId}, пока status не станет processed. Тогда в parts[] — номера частей.
4. Скачай каждую часть: GET /management/v1/counter/{counterId}/logrequest/{requestId}/part/{partNumber}/download — данные в TSV.
5. После скачивания очисти запрос: POST /management/v1/counter/{counterId}/logrequest/{requestId}/clean — подготовленные логи занимают квоту.

```bash
H="Authorization: OAuth $METRIKA_TOKEN"
API=https://api-metrika.yandex.net/management/v1/counter/44147844
FIELDS=ym:s:visitID,ym:s:dateTime,ym:s:clientID,ym:s:lastTrafficSource,ym:s:goalsID

REQ=$(curl -s -X POST "$API/logrequests?date1=2026-10-01&date2=2026-10-23&source=visits&fields=$FIELDS" -H "$H" | jq -r .log_request.request_id)
curl -s "$API/logrequest/$REQ" -H "$H" | jq .log_request.status        # повторять до processed
curl -s "$API/logrequest/$REQ/part/0/download" -H "$H" -o visits-part0.tsv
curl -s -X POST "$API/logrequest/$REQ/clean" -H "$H"
```

## Базовые URL

- Боевой: `https://api-metrika.yandex.net`

## Авторизация

Тип: OAuth 2.0

OAuth-токен Яндекса передаётся в заголовке `Authorization` в каждом запросе. Без токена или с недействительным токеном сервер отвечает `401`.

```
Authorization: OAuth <токен>
```

## Методы

### GET /management/v1/counters — Список счётчиков

В ответе: `rows` (всего счётчиков) и `counters[]` (`id`, `name`, `status`, `type`, `owner_login`, `permission` и др.).

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `counter_ids` | query | array | нет | ID счётчиков, которые нужно вернуть |
| `favorite` | query | boolean | нет | Только избранные, по умолчанию false |
| `field` | query | string | нет | Доп. поля: goals,mirrors,grants,filters,operations,counter_flags,measurement_tokens |
| `label_id` | query | integer | нет | Фильтр по метке |
| `offset` | query | integer | нет | Номер первого элемента (с 1), по умолчанию 1 |
| `per_page` | query | integer | нет | Счётчиков в ответе, по умолчанию 1000, максимум 10 000 |
| `permission` | query | string | нет | own, view, edit; можно несколько через запятую |
| `search_string` | query | string | нет | Поиск по ID, названию, адресу сайта |
| `sort` | query | string | нет | None, Default, Visits, Hits, Uniques, Name |
| `status` | query | string | нет | Active (по умолчанию) или Deleted |
| `type` | query | string | нет | simple или partner |

### POST /management/v1/counters — Создание счётчика

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `field` | query | string | нет | Доп. поля ответа |
| `ytm` | query | boolean | нет | Использовать систему управления тегами, по умолчанию false |
| `counter.name` | body | string | нет | Название счётчика, до 255 символов |
| `counter.site2.site` | body | string | нет | Полный домен сайта, до 255 символов |

### GET /management/v1/counter/{counterId}/goals — Список целей

В ответе — `goals[]`: `id`, `name`, `type`, `default_price`, `goal_source`, `is_favorite`, `status` и поля, зависящие от типа цели.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `counterId` | path | integer | да | ID счётчика |
| `useDeleted` | query | boolean | нет | Включать удалённые цели, по умолчанию false |

### GET /stat/v1/data — Отчёт «Таблица»

В ответе: `data[]` (`dimensions[]` и `metrics[]`), `totals`, `total_rows`, `sampled`, `sample_share`, `query`, `contains_sensitive_data` и др.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `ids` | query | array | нет | ID счётчиков через запятую |
| `metrics` | query | string | нет | Метрики через запятую, до 20 |
| `dimensions` | query | string | нет | Группировки через запятую, до 10 |
| `date1` | query | string | нет | Начало периода: YYYY-MM-DD, today, yesterday, ndaysAgo; по умолчанию 6daysAgo |
| `date2` | query | string | нет | Конец периода, по умолчанию today |
| `filters` | query | string | нет | Фильтр сегментации |
| `sort` | query | string | нет | Поля сортировки; - — по убыванию |
| `limit` | query | string | нет | Строк на странице, по умолчанию 100, максимум 100 000 |
| `offset` | query | string | нет | Первая строка (с 1) |
| `accuracy` | query | string | нет | Размер выборки (семплирование) |
| `preset` | query | string | нет | Шаблон отчёта, например sources_summary |
| `lang` | query | string | нет | Язык ответа |
| `timezone` | query | string | нет | Часовой пояс ±hh:mm, + передаётся как %2B |
| `direct_client_logins` | query | array | нет | Логины клиентов Яндекс Директа |
| `include_undefined` | query | boolean | нет | Строки с неопределёнными значениями |
| `proposed_accuracy` | query | boolean | нет | Разрешить API повышать accuracy |

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

```
https://api-metrika.yandex.net/stat/v1/data.csv?id=44147844&metrics=ym:s:avgPageViews&dimensions=ym:s:operatingSystem&limit=5
```

### GET /stat/v1/data/bytime — Данные по времени

Параметры как у `/stat/v1/data`, плюс:

Также доступны `GET /stat/v1/data/drilldown` (ветвь древовидного отчёта), `/stat/v1/data/comparison` и `/stat/v1/data/comparison/drilldown` (сравнение сегментов).

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `group` | query | string | нет | Шаг разбивки: all, auto, minute, hour, day, week (по умолчанию), month, quarter, year и др. |
| `top_keys` | query | string | нет | Число строк без row_ids, по умолчанию 7, максимум 30 |
| `row_ids` | query | array | нет | Выбор строк для графиков |
| `include_annotations` | query | string | нет | Включать примечания |

### GET /management/v1/counter/{counterId}/logrequests/evaluate — Оценка возможности выгрузки логов

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `counterId` | path | integer | да | ID счётчика |
| `date1` | query | string | да | Первый день, например 2016-01-01 |
| `date2` | query | string | да | Последний день (не текущий) |
| `fields` | query | string | да | Поля через запятую, например ym:pv:dateTime,ym:pv:referer |
| `source` | query | string | да | hits (события) или visits (визиты) |

### POST /management/v1/counter/{counterId}/logrequests — Создание запроса логов

В ответе — `log_request`: `request_id`, `counter_id`, `status`, `size`, `parts`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `counterId` | path | integer | да | ID счётчика |
| `date1` | query | string | да | Первый день периода |
| `date2` | query | string | да | Последний день (не текущий) |
| `fields` | query | string | да | Поля через запятую, до 3000 символов |
| `source` | query | string | да | hits или visits |
| `attribution` | query | string | нет | Модель атрибуции: FIRST, LAST, LASTSIGN, LAST_YANDEX_DIRECT_CLICK, AUTOMATIC и др. |

### GET /management/v1/counter/{counterId}/logrequest/{requestId} — Информация о запросе логов

Статусы: `created`, `canceled`, `processed`, `cleaned_by_user`, `cleaned_automatically_as_too_old`, `processing_failed`, `awaiting_retry`. Для `processed` в `parts[]` — номера и размеры частей.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `counterId` | path | integer | да | ID счётчика |
| `requestId` | path | integer | да | ID запроса логов |

### GET /management/v1/counter/{counterId}/logrequest/{requestId}/part/{partNumber}/download — Скачивание части логов

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `counterId` | path | integer | да | ID счётчика |
| `requestId` | path | integer | да | ID запроса логов |
| `partNumber` | path | integer | да | Номер части |

### POST /management/v1/counter/{counterId}/logrequest/{requestId}/clean — Очистка подготовленных логов

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `counterId` | path | integer | да | ID счётчика |
| `requestId` | path | integer | да | ID запроса логов |

## Нюансы

- Префиксы метрик и группировок: `ym:s:` — визиты, `ym:pv:` — хиты; смешивать их в одном запросе нельзя.
- Социально-демографические данные выдаются только при выборке больше 10 посетителей; признак ограничения — `contains_sensitive_data: true`.
- Logs API: период запроса — не больше 1 года, `date2` не может быть текущим днём, фильтрации на уровне запроса нет.
- Поток выгрузки логов: `evaluate` → создание запроса → опрос статуса до `processed` → скачивание частей → `clean`.
- Ограничения фильтров отчётов: до 20 фильтров, до 10 000 символов в строке, до 100 значений в одном условии.

## Ошибки

| Код | Описание |
|---|---|
| `invalid_parameter` | 400 — параметр задан некорректно |
| `missing_parameter` | 400 — не передан обязательный параметр |
| `filter_limits` | 400 — слишком сложный фильтр |
| `query_error` | 400 — слишком сложный запрос |
| `too_much_rows` | 400 — запрос читает слишком много данных |
| `invalid_json` | 400 — неверный JSON (API управления) |
| `limit_exceeded` | 400 — превышен лимит целей, операций или фильтров |
| `unauthorized` | 401 — пользователь не авторизован |
| `access_denied` | 403 — доступ запрещён |
| `invalid_token` | 403 — неверный OAuth-токен |
| `not_found` | 404 — объект не найден |
| `not_acceptable` | 406 — формат не поддерживается |
| `conflict` | 409 — нарушена целостность данных |
| `quota_requests_by_uid` | 429 — исчерпан суточный лимит пользователя |
| `quota_requests_by_ip` | 429 — превышен секундный лимит для IP |
| `quota_parallel_requests` | 429 — превышен лимит параллельных запросов |
| `backend_error` | 503 — сбой на стороне сервера |
| `timeout` | 504 — запрос не уложился во время |

## Ограничения

- 30 запросов в секунду с одного IP к API; 10 в секунду — к Logs API.
- 3 параллельных запроса одного пользователя.
- 5000 запросов пользователя в сутки (сброс в 00:00 GMT).
- 200 запросов к API отчётов за 5 минут.
- При превышении — `429 Too Many Requests`, в теле указана превышенная квота.

## Источники

- [Авторизация](https://yandex.ru/dev/metrika/ru/intro/authorization)
- [Квоты](https://yandex.ru/dev/metrika/ru/intro/quotas)
- [Ошибки](https://yandex.ru/dev/metrika/ru/intro/errors)
- [Список счётчиков](https://yandex.ru/dev/metrika/ru/management/openapi/counter/counters)
- [Создание счётчика](https://yandex.ru/dev/metrika/ru/management/openapi/counter/addCounter)
- [Список целей](https://yandex.ru/dev/metrika/ru/management/openapi/goal/goals)
- [API отчётов](https://yandex.ru/dev/metrika/ru/stat/)
- [Таблица](https://yandex.ru/dev/metrika/ru/stat/openapi/data_1)
- [Данные по времени](https://yandex.ru/dev/metrika/ru/stat/openapi/bytime)
- [Logs API — evaluate](https://yandex.ru/dev/metrika/ru/logs/openapi/evaluate)
- [Logs API — создание запроса](https://yandex.ru/dev/metrika/en/logs/openapi/createLogRequest)
- [Logs API — информация о запросе](https://yandex.ru/dev/metrika/ru/logs/openapi/getLogRequest)
- [Logs API — скачивание части](https://yandex.ru/dev/metrika/ru/logs/openapi/download)
- [Logs API — очистка](https://yandex.ru/dev/metrika/ru/logs/openapi/clean)

---

Если этого недостаточно — официальная документация: https://yandex.ru/dev/metrika/ru/
JSON: https://mcp-everything.ru/api/integrations/yandex-metrika. MCP: https://mcp-everything.ru/mcp
