Перейти к основному содержанию
Доступ к аналитике кода, сгенерированной AI, для репозиториев твоей команды. Включает использование AI по каждому коммиту и детализированные принятые изменения, сгенерированные AI.
API в первой версии. Мы расширяем возможности на основе обратной связи — дай знать, какие эндпоинты тебе нужны!
  • Доступность: Только для enterprise‑команд
  • Статус: Альфа (схемы ответов и поля могут меняться)

Аутентификация

Все запросы к API требуют аутентификации с помощью ключа API. Этот API использует ту же схему аутентификации Admin API, что и другие эндпоинты. Подробные инструкции по аутентификации см. в разделе Admin API authentication.

Базовый URL

Все эндпоинты API используют:
https://api.cursor.com

Лимиты запросов

  • 5 запросов в минуту на команду на каждый endpoint

Параметры запроса

Все конечные точки ниже принимают одинаковые параметры через строку запроса:
ParameterTypeRequiredDescription
startDatestringdateNoДата в формате ISO, литерал “now” или относительные дни вроде “7d” (означает now - 7 days). По умолчанию: now - 7 days
endDatestringdateNoДата в формате ISO, литерал “now” или относительные дни вроде “0d”. По умолчанию: now
pagenumberNoНомер страницы (начиная с 1). По умолчанию: 1
pageSizenumberNoКоличество результатов на страницу. По умолчанию: 100, максимум: 1000
userstringNoНеобязательный фильтр по одному пользователю. Принимает email (например, developer@company.com), кодированный ID (например, user_abc123…), или числовой ID (например, 42)
В ответах userId возвращается как кодированный внешний ID с префиксом user_. Значение стабильно для использования через API.

Семантика и вычисление метрик

  • Источники: “TAB” — принятые встроенные автодополнения; “COMPOSER” — принятые диффы из Composer
  • Метрики по строкам: tabLinesAdded/Deleted и composerLinesAdded/Deleted считаются отдельно; nonAiLinesAdded/Deleted вычисляются как max(0, totalLines - AI lines)
  • Режим приватности: если включён в клиенте, часть метаданных (например, fileName) может быть опущена
  • Информация о ветке: isPrimaryBranch имеет значение true, когда текущая ветка совпадает с веткой по умолчанию в репозитории; может быть undefined, если данные о репозитории недоступны
Можешь пролистать этот файл, чтобы понять, как обнаруживаются и отображаются коммиты и изменения.

Эндпоинты

Получить метрики AI-коммитов (JSON, с пагинацией)

Получить агрегированные метрики по каждому коммиту с распределением строк между TAB, COMPOSER и non‑AI.
GET /analytics/ai-code/commits

Ответ

{
  items: AiCommitMetric[];
  totalCount: number;
  page: number;
  pageSize: number;
}

Поля AiCommitMetric

FieldTypeDescription
commitHashstringХеш коммита Git
userIdstringЗакодированный ID пользователя (например, user_abc123)
userEmailstringАдрес электронной почты пользователя
repoNamestringnullНазвание репозитория
branchNamestringnullНазвание ветки
isPrimaryBranchbooleannullЯвляется ли это основной веткой
totalLinesAddednumberВсего строк добавлено в коммите
totalLinesDeletednumberВсего строк удалено в коммите
tabLinesAddednumberСтрок добавлено с помощью автодополнения по TAB
tabLinesDeletednumberСтрок удалено с помощью автодополнения по TAB
composerLinesAddednumberСтрок добавлено через Composer
composerLinesDeletednumberСтрок удалено через Composer
nonAiLinesAddednumbernullСтрок, добавленных не ИИ
nonAiLinesDeletednumbernullСтрок, удаленных не ИИ
messagestringnullСообщение коммита
commitTsstringnullВременная метка коммита (формат ISO)
createdAtstringВременная метка загрузки (формат ISO)

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

{
  "items": [
    {
      "commitHash": "a1b2c3d4",
      "userId": "user_3k9x8q...",
      "userEmail": "developer@company.com",
      "repoName": "company/repo",
      "branchName": "main",
      "isPrimaryBranch": true,
      "totalLinesAdded": 120,
      "totalLinesDeleted": 30,
      "tabLinesAdded": 50,
      "tabLinesDeleted": 10,
      "composerLinesAdded": 40,
      "composerLinesDeleted": 5,
      "nonAiLinesAdded": 30,
      "nonAiLinesDeleted": 15,
      "message": "Рефакторинг: вынести клиент аналитики"
      "commitTs": "2025-07-30T14:12:03.000Z",
      "createdAt": "2025-07-30T14:12:30.000Z"
    }
  ],
  "totalCount": 42,
  "page": 1,
  "pageSize": 100
}

Примеры запросов

Простой запрос:
curl -X GET "https://api.cursor.com/analytics/ai-code/commits?startDate=7d&endDate=now&page=1&pageSize=100" \
  -u ТВОЙ_API_KEY:
Фильтр по пользователю (email):
curl -X GET "https://api.cursor.com/analytics/ai-code/commits?startDate=2025-06-01T00:00:00Z&endDate=now&user=developer@company.com" \
  -u ТВОЙ_API_KEY:

Скачать метрики AI Commit (CSV, стриминг)

Скачай метрики коммитов в формате CSV для выгрузки больших объемов данных.
GET /analytics/ai-code/commits.csv

Ответ

Заголовки:
  • Content-Type: text/csv; charset=utf-8

Колонки CSV

ColumnTypeDescription
commit_hashstringХеш коммита Git
user_idstringКодированный ID пользователя
user_emailstringЭлектронная почта пользователя
repo_namestringНазвание репозитория
branch_namestringНазвание ветки
is_primary_branchbooleanЯвляется ли это основной веткой
total_lines_addednumberВсего строк добавлено в коммите
total_lines_deletednumberВсего строк удалено в коммите
tab_lines_addednumberСтрок добавлено через TAB-комплишны
tab_lines_deletednumberСтрок удалено через TAB-комплишны
composer_lines_addednumberСтрок добавлено через Composer
composer_lines_deletednumberСтрок удалено через Composer
non_ai_lines_addednumberСтрок, добавленных без ИИ
non_ai_lines_deletednumberСтрок, удалённых без ИИ
messagestringСообщение коммита
commit_tsstringМетка времени коммита (ISO)
created_atstringМетка времени загрузки (ISO)

Пример CSV-вывода

commit_hash,user_id,user_email,repo_name,branch_name,is_primary_branch,total_lines_added,total_lines_deleted,tab_lines_added,tab_lines_deleted,composer_lines_added,composer_lines_deleted,non_ai_lines_added,non_ai_lines_deleted,message,commit_ts,created_at
a1b2c3d4,user_3k9x8q...,developer@company.com,company/repo,main,true,120,30,50,10,40,5,30,15,"Рефакторинг: выделить клиент аналитики",2025-07-30T14:12:03.000Z,2025-07-30T14:12:30.000Z
e5f6g7h8,user_3k9x8q...,developer@company.com,company/repo,feature-branch,false,85,15,30,5,25,3,30,7,"Добавить обработку ошибок",2025-07-30T13:45:21.000Z,2025-07-30T13:45:45.000Z

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

curl -L "https://api.cursor.com/analytics/ai-code/commits.csv?startDate=2025-07-01T00:00:00Z&endDate=now&user=user_3k9x8q..." \
  -u ТВОЙ_API_KEY: \
  -o commits.csv

Получить метрики изменений кода ИИ (JSON, постранично)

Получай детальные принятые изменения ИИ, сгруппированные по детерминированному changeId. Полезно для анализа принятых событий ИИ независимо от коммитов.
GET /analytics/ai-code/changes

Ответ

{
  items: МетрикаИзмененийКодаИИ[];
  totalCount: number;
  page: number;
  pageSize: number;
}

Поля AiCodeChangeMetric

ПолеТипОписание
changeIdstringДетерминированный идентификатор изменения
userIdstringКодированный идентификатор пользователя (например, user_abc123)
userEmailstringАдрес электронной почты пользователя
source”TAB""COMPOSER”Источник AI-изменения
modelstringnullИспользуемая модель ИИ
totalLinesAddednumberВсего добавленных строк
totalLinesDeletednumberВсего удалённых строк
createdAtstringВремя загрузки (ISO-формат)
metadataArrayМетаданные файла (fileName может быть опущен в режиме приватности)

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

{
  "items": [
    {
      "changeId": "749356201",
      "userId": "user_3k9x8q...",
      "userEmail": "developer@company.com",
      "source": "COMPOSER",
      "model": null,
      "totalLinesAdded": 18,
      "totalLinesDeleted": 4,
      "createdAt": "2025-07-30T15:10:12.000Z",
      "metadata": [
        { "fileName": "src/analytics/report.ts", "fileExtension": "ts", "linesAdded": 12, "linesDeleted": 3 },
        { "fileName": "src/analytics/ui.tsx", "fileExtension": "tsx", "linesAdded": 6, "linesDeleted": 1 }
      ]
    }
  ],
  "totalCount": 128,
  "page": 1,
  "pageSize": 200
}

Примеры запросов

Простой запрос:
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?startDate=14d&endDate=now&page=1&pageSize=200" \
  -u ТВОЙ_API_KEY:
Фильтр по пользователю (кодированный ID):
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?user=user_3k9x8q..." \
  -u ТВОЙ_API_KEY:
Фильтр по пользователю (email):
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?user=developer@company.com" \
  -u ТВОЙ_API_KEY:

Скачать метрики изменений кода ИИ (CSV, стриминг)

Скачай метрики изменений в формате CSV для больших выгрузок.
GET /analytics/ai-code/changes.csv

Ответ

Заголовки:
  • Content-Type: text/csv; charset=utf-8

Столбцы CSV

ColumnTypeDescription
change_idstringДетерминированный идентификатор изменения
user_idstringКодированный идентификатор пользователя
user_emailstringАдрес электронной почты пользователя
sourcestringИсточник AI-изменения (TAB или COMPOSER)
modelstringИспользуемая AI‑модель
total_lines_addednumberВсего добавлено строк
total_lines_deletednumberВсего удалено строк
created_atstringВремя загрузки (формат ISO)
metadata_jsonstringСтрока JSON со строковым представлением массива записей метаданных

Примечания

  • metadata_json — это строка JSON со строковым представлением массива записей метаданных (в режиме приватности может опускаться fileName)
  • При чтении CSV обязательно парсь поля в кавычках

Пример вывода CSV

change_id,user_id,user_email,source,model,total_lines_added,total_lines_deleted,created_at,metadata_json
749356201,user_3k9x8q...,developer@company.com,COMPOSER,gpt-4o,18,4,2025-07-30T15:10:12.000Z,"[{""fileName"":""src/analytics/report.ts"",""fileExtension"":""ts"",""linesAdded"":12,""linesDeleted"":3},{""fileName"":""src/analytics/ui.tsx"",""fileExtension"":""tsx"",""linesAdded"":6,""linesDeleted"":1}]"
749356202,user_3k9x8q...,developer@company.com,TAB,,8,2,2025-07-30T15:08:45.000Z,"[{""fileName"":""src/utils/helpers.ts"",""fileExtension"":""ts"",""linesAdded"":8,""linesDeleted"":2}]"

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

curl -L "https://api.cursor.com/analytics/ai-code/changes.csv?startDate=30d&endDate=now" \
  -u YOUR_API_KEY: \
  -o changes.csv

Советы

  • Используй параметр user, чтобы быстро отфильтровать одного пользователя на всех эндпоинтах
  • Для больших выгрузок данных предпочитай CSV-эндпоинты — они передают данные потоками по 10 000 записей на стороне сервера
  • isPrimaryBranch может быть undefined, если клиент не смог определить ветку по умолчанию
  • commitTs — это метка времени коммита; createdAt — время приёма данных на наших серверах
  • Некоторые поля могут отсутствовать, если на клиенте включён режим конфиденциальности

Журнал изменений

  • Альфа-релиз: Первичные эндпоинты для коммитов и изменений. Форматы ответов могут меняться на основе обратной связи
I