Быстрый старт

Шаг 1. Получите oauth-токен

  1. Создайте приложение, при этом заполните поля:

    • название — можно указать произвольно;

    • иконка сервиса — необязательно;

    • платформы приложения — выберите веб-сервисы;

    • redirect URI — укажите https://oauth.yandex.ru/verification_code;

    • доступ к данным — укажите набор доступов для вашего приложения. Какие бывают доступы:

      • metrika:read — получение статистики, чтение параметров своих и доверенных счетчиков, получение списка счетчиков;
      • metrika:write — создание счетчиков, изменение параметров своих и доверенных счетчиков, загрузка любых данных;
      • metrika:expenses — загрузка в счетчики расходов;
      • metrika:user_params — загрузка в счетчики параметров пользователей;
      • metrika:offline_data — загрузка в счетчики офлайн-данных (данные из CRM, офлайн-конверсии, звонки).

    Примечание

    Доступы metrika:expenses, metrika:user_params, metrika:offline_data не обязательны, если используется доступ metrika:write.

  2. Нажмите Создать приложение и скопируйте его ClientID (напротив идентификатора нажмите значок ).

  3. Добавьте скопированный ClientID в ссылку вида

    https://oauth.yandex.ru/authorize?response_type=token&client_id=<идентификатор приложения>
    
  4. Перейдите по ссылке и на открывшейся странице скопируйте ваш авторизационный токен.

Возможные проблемы и их решение

Ошибка 403 (Access is denied) после получения токена

Возможные причины:

На стороне приложения

  • Приложение не имеет доступа к Метрике. Для чтения данных счётчиков (построение отчётов, просмотр информации по счётчику и т.п.) нужен доступ metrika:read. Для управления счётчиками (загрузка офлайн-данных, изменения счётчиков, сегментов и т.п.) нужен metrika:write.

На стороне токена

  • Токен невалидный. Срок действия токена истек, либо на аккаунте, для которого он был заведен, изменился пароль авторизации. Перевыпустите токен.

  • Токен создан не для того аккаунта. Мог быть заведён на логине, который не имеет доступ к счётчику Яндекс Метрики.

    Важно

    Владельцем токена является не владелец приложения, а аккаунт, из-под которого вы были авторизованы, когда выполняли GET-запрос на получение токена.

  • Токен создан не для того приложения. При выполнении GET-запроса на получение токена в параметре client_id было указано не то значение или была допущена опечатка, из-за которой токен был заведён на приложение, не имеющее доступа к Метрике (metrika:read или metrika:write).

На стороне Метрики

  • На счётчике, к которому вы обращаетесь по API нет доступа у владельца токена. Подробнее о типах доступов к счётчику. Для API нужен владелец, гостевой доступ на просмотр или гостевой доступ на редактирование, если речь идёт об API управления.

На стороне API запроса

  • В коде для вызова API-запроса некорректно заданы параметры авторизации, из-за чего чтение токена происходит некорректно/не происходит вообще.
Ошибка 401 (unauthorized) после получения токена

Возможные причины:

  1. Параметры авторизации в заголовке запроса заданы некорректно.
  2. Параметры авторизации в заголовке отсутствуют.

Шаг 2. Выберите API для работы

Метрика предоставляет три основных API:

  • API управления. Через этот API можно создавать/редактировать счетчики, цели, фильтры и другие объекты.
  • API импорта данных. Через этот API можно импортировать данные о клиентах и заказах из CRM, звонках, офлайн-конверсиях, параметрах посетителей.
  • API отчетов. Через этот API можно получать информацию о посещаемости сайта и другие данные. Формировать отчеты, в том числе с помощью сегментации и параметризации.
  • API Logs. Через этот API можно получать неагрегированные данные, которые собирает Яндекс Метрика. Используйет API, если самостоятельно обрабатывающих статистические данные и использующих их для решения уникальных аналитических задач.

Шаг 3. Измените объект через API

В качестве примера возьмем API управления и создадим цель:

  1. Перед тем как создать цель, выбираем счетчик, на котором необходимо создать цель. Для этого вызываем метод GET https://api-metrika.yandex.net/management/v1/counters и выбираем нужный счетчик из списка.

    Запрос:

    curl -i -X GET 'https://api-metrika.yandex.net/management/v1/counters' \
    -H 'Authorization: OAuth 05dd3dd8...'
    

    Ответ:

    {
      "rows": 2,
      "counters": [
        {
          "id": 880000,
          "status": "Active",
          "owner_login": "example-developer",
          "code_status": "CS_ERR_UNKNOWN",
          "activity_status": "low",
          "name": "counter_option test example-developer",
          "type": "simple",
          "favorite": 0,
          "hide_address": 0,
          "pro": 0,
          "permission": "view",
          "webvisor": {
            "arch_enabled": 0,
            "arch_type": "none",
            "load_player_type": "proxy",
            "wv_version": 2,
            "allow_wv2": true,
            "notify_wv2": false,
            "wv_forms": 1
          },
          "code_options": {
            "async": 1,
            "informer": {
              "enabled": 0,
              "type": "ext",
              "size": 3,
              "indicator": "pageviews",
              "color_start": "FFFFFFFF",
              "color_end": "EFEFEFFF",
              "color_text": 0,
              "color_arrow": 1
            },
            "visor": 0,
            "track_hash": 0,
            "xml_site": 0,
            "clickmap": 1,
            "in_one_line": 0,
            "ecommerce": 0,
            "alternative_cdn": 0,
            "ecommerce_object": "dataLayer",
            "ytm": false
          },
          "create_time": "2022-03-25T15:59:52+03:00",
          "time_zone_name": "Europe/Moscow",
          "time_zone_offset": 180,
          "partner_id": 0,
          "site": "example-developer.ru",
          "site2": {
            "site": "example-developer.ru",
            "domain": "example-developer.ru"
          },
          "gdpr_agreement_accepted": 0,
          "delete_guest_allowed": 1
        },
        {
          "id": 87686941,
          "status": "Active",
          "owner_login": "example-manager",
          "code_status": "CS_ERR_UNKNOWN",
          "activity_status": "low",
          "name": "example-manager_1",
          "type": "simple",
          "favorite": 0,
          "hide_address": 0,
          "pro": 0,
          "permission": "edit",
          "webvisor": {
            "arch_enabled": 0,
            "arch_type": "none",
            "load_player_type": "proxy",
            "wv_version": 2,
            "allow_wv2": true,
            "notify_wv2": false,
            "wv_forms": 1
          },
          "code_options": {
            "async": 1,
            "informer": {
              "enabled": 0,
              "type": "ext",
              "size": 3,
              "indicator": "pageviews",
              "color_start": "FFFFFFFF",
              "color_end": "EFEFEFFF",
              "color_text": 0,
              "color_arrow": 1
            },
            "visor": 0,
            "track_hash": 0,
            "xml_site": 0,
            "clickmap": 1,
            "in_one_line": 0,
            "ecommerce": 0,
            "alternative_cdn": 0,
            "ecommerce_object": "dataLayer",
            "ytm": false
          },
          "create_time": "2022-03-02T16:06:27+03:00",
          "time_zone_name": "Europe/Moscow",
          "time_zone_offset": 180,
          "partner_id": 0,
          "site": "example-manager.ru",
          "site2": {
            "site": "example-manager.ru",
            "domain": "example-manager.ru"
          },
          "gdpr_agreement_accepted": 0,
          "delete_guest_allowed": 1
        }
      ]
    }
    
  2. Для создания цели используем метод POST https://api-metrika.yandex.net/management/v1/counter/{counterId}/goals. Создадим цель MessengerGoal, которая будет фиксировать переходы в определенный мессенджер.

    Запрос:

    curl -i -X POST 'https://api-metrika.yandex.net/management/v1/counter/XXX/goals' \
    -H 'Authorization: OAuth 05dd3dd8...' \
    -H 'Content-Type: application/json' \
    
    -d '{
           "goal": {
             "id": 0,
             "name": "MyMessengerGoal",
             "type": "messenger ",
             "conditions" : [{
               "type" :  "messenger", 
               "url" :  "whatsapp"
             }]
           }
     }'
    

    Ответ:

    HTTP/1.1 200 OK
    
    {
       "goal": {
         "id": 222,
         "name": "MyMessengerGoal",
         "type": "messenger",
         "conditions" : [{
               "type" :  "messenger", 
               "url" :  "whatsapp"
             }]
         }
     }