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

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

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

Базовый URL

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

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

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

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

Все эндпоинты ниже принимают те же параметры через query string:
ПараметрТипОбязательныйОписание
startDatestringdateНетСтрока даты в формате ISO, литерал “now” или относительные дни, например “7d” (означает now − 7 дней). По умолчанию: now − 7 дней
endDatestringdateНетСтрока даты в формате ISO, литерал “now” или относительные дни, например “0d”. По умолчанию: now
pagenumberНетНомер страницы (от 1). По умолчанию: 1
pageSizenumberНетРезультатов на страницу. По умолчанию: 100, максимум: 1000
userstringНетНеобязательный фильтр по одному пользователю. Принимает email (например, developer@company.com), закодированный ID (например, user_abc123…) или числовой ID (например, 42)
В ответах userId возвращается как закодированный внешний ID с префиксом user_. Это стабильно для использования через API.

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

  • Источники: “TAB” — принятые inline‑дополнения; “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)
userEmailstringEmail пользователя
repoNamestringnullИмя репозитория
branchNamestringnullИмя ветки
isPrimaryBranchbooleannullЭто основная ветка
totalLinesAddednumberВсего строк добавлено в коммите
totalLinesDeletednumberВсего строк удалено в коммите
tabLinesAddednumberСтрок добавлено с TAB-комплитами
tabLinesDeletednumberСтрок удалено с TAB-комплитами
composerLinesAddednumberСтрок добавлено через Composer
composerLinesDeletednumberСтрок удалено через Composer
nonAiLinesAddednumbernullСтрок добавлено без AI
nonAiLinesDeletednumbernullСтрок удалено без AI
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:

Скачать метрики AI-коммитов (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,"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

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

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

Ответ

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

Поля AiCodeChangeMetric

FieldTypeDescription
changeIdstringДетерминированный ID изменения
userIdstringЗакодированный ID пользователя (например, user_abc123)
userEmailstringЭлектронная почта пользователя
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

ColumnTypeDescription
change_idstringДетерминированный ID изменения
user_idstringЗакодированный ID пользователя
user_emailstringEmail пользователя
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 может быть неопределён, если клиент не смог определить ветку по умолчанию
  • commitTs — это отметка времени коммита; createdAt — время поступления данных на наши серверы
  • Некоторые поля могут отсутствовать, если на клиенте включён режим приватности

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

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