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

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

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

Базовый URL

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

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

  • 5 запросов в минуту на команду, на эндпоинт

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

Все эндпоинты ниже принимают одинаковые параметры запроса через query string:
ПараметрТипОбязательныйОписание
startDatestringdateНетСтрока даты в формате ISO, литерал “now” или относительные дни вида “7d” (означает сейчас - 7 дней). По умолчанию: сейчас - 7 дней
endDatestringdateНетСтрока даты в формате ISO, литерал “now” или относительные дни вида “0d”. По умолчанию: сейчас
pagenumberНетНомер страницы (начиная с 1). По умолчанию: 1
pageSizenumberНетКоличество результатов на страницу. По умолчанию: 100, максимум: 1000
userstringНетОпциональная фильтрация по одному пользователю. Принимает 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, если сведения о репозитории недоступны
Можешь посмотреть тот файл, чтобы понять, как определяются и передаются в отчёты коммиты и изменения.

Эндпоинты

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

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

Ответ

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

Поля AiCommitMetric

ПолеТипОписание
commitHashstringХеш Git-коммита
userIdstringЗакодированный ID пользователя (например, user_abc123)
userEmailstringEmail-адрес пользователя
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": "Refactor: extract analytics client",
      "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 YOUR_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 YOUR_API_KEY:

Скачать метрики ИИ-коммитов (CSV, потоковая передача)

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

Ответ

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

Столбцы CSV

СтолбецТипОписание
commit_hashstringХеш коммита Git
user_idstringЗакодированный ID пользователя
user_emailstringEmail-адрес пользователя
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,"Refactor: extract analytics client",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,"Add error handling",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 YOUR_API_KEY: \
  -o commits.csv

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

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

Ответ

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

Поля AiCodeChangeMetric

ПолеТипОписание
changeIdstringДетерминированный ID изменения
userIdstringЗакодированный ID пользователя (например, user_abc123)
userEmailstringEmail-адрес пользователя
source”TAB""COMPOSER”Источник изменения ИИ
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 YOUR_API_KEY:
Фильтрация по пользователю (зашифрованный ID):
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?user=user_3k9x8q..." \
  -u YOUR_API_KEY:
Фильтрация по пользователю (email):
curl -X GET "https://api.cursor.com/analytics/ai-code/changes?user=developer@company.com" \
  -u YOUR_API_KEY:

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

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

Ответ

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

Столбцы CSV

СтолбецТипОписание
change_idstringДетерминированный ID изменения
user_idstringЗашифрованный ID пользователя
user_emailstringEmail пользователя
sourcestringИсточник AI-изменения (TAB или COMPOSER)
modelstringИспользуемая AI-модель
total_lines_addednumberОбщее количество добавленных строк
total_lines_deletednumberОбщее количество удаленных строк
created_atstringВременная метка создания (формат ISO)
metadata_jsonstringJSON-строка с массивом записей метаданных

Примечания

  • 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 — это время поступления на наши серверы
  • Некоторые поля могут отсутствовать при включенном режиме приватности на клиенте

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

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