Sitelet https://cursor.com/ru/docs/account/teams/analytics-api#tab-usage
Skip to main content

Command Palette

Search for a command to run...

API

Analytics API

Analytics API предоставляет подробную аналитику использования Cursor вашей командой, включая метрики написания кода с ИИ-поддержкой, активных пользователей, использования моделей и многое другое.

  • Analytics API использует базовую аутентификацию. Для большинства конечных точек требуется API-ключ администратора с областью действия admin:*. Для аналитики ревью Bugbot требуется область действия read:*. Создайте ключ в Cursor Dashboard → API Keys.
  • Подробнее об аутентификации, ограничениях частоты запросов и рекомендациях см. в разделе API Overview.
  • Доступность: Только для корпоративных команд

Доступные конечные точки

Правки Agent

GET/analytics/team/agent-edits

Возвращает метрики по правкам кода, предложенным ИИ и принятым вашей командой в Cursor.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

users string

Фильтрация данных по конкретным пользователям (email-адреса или ID пользователей через запятую, например, alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/team/agent-edits" \  -u YOUR_API_KEY:

Ответ:

{  "data": [    {      "event_date": "2025-01-15",      "total_suggested_diffs": 145,      "total_accepted_diffs": 98,      "total_rejected_diffs": 47,      "total_green_lines_accepted": 820,      "total_red_lines_accepted": 160,      "total_green_lines_rejected": 210,      "total_red_lines_rejected": 60,      "total_green_lines_suggested": 1030,      "total_red_lines_suggested": 220,      "total_lines_suggested": 1250,      "total_lines_accepted": 980    },    {      "event_date": "2025-01-16",      "total_suggested_diffs": 132,      "total_accepted_diffs": 89,      "total_rejected_diffs": 43,      "total_green_lines_accepted": 740,      "total_red_lines_accepted": 150,      "total_green_lines_rejected": 185,      "total_red_lines_rejected": 55,      "total_green_lines_suggested": 925,      "total_red_lines_suggested": 175,      "total_lines_suggested": 1100,      "total_lines_accepted": 890    }  ],  "params": {    "metric": "agent-edits",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31"  }}

Использование Tab

GET/analytics/team/tabs

Возвращает метрики использования автодополнения Tab в вашей команде.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

users string

Фильтрует данные по конкретным пользователям (email-адреса или ID пользователей через запятую, например: alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/team/tabs" \  -u YOUR_API_KEY:

Ответ:

{  "data": [    {      "event_date": "2025-01-15",      "total_suggestions": 5420,      "total_accepts": 3210,      "total_rejects": 2210,      "total_green_lines_accepted": 4120,      "total_red_lines_accepted": 2000,      "total_green_lines_rejected": 1480,      "total_red_lines_rejected": 730,      "total_green_lines_suggested": 5600,      "total_red_lines_suggested": 2740,      "total_lines_suggested": 8340,      "total_lines_accepted": 6120    },    {      "event_date": "2025-01-16",      "total_suggestions": 4980,      "total_accepts": 3050,      "total_rejects": 1930,      "total_green_lines_accepted": 3890,      "total_red_lines_accepted": 1890,      "total_green_lines_rejected": 1350,      "total_red_lines_rejected": 580,      "total_green_lines_suggested": 5240,      "total_red_lines_suggested": 2650,      "total_lines_suggested": 7890,      "total_lines_accepted": 5780    }  ],  "params": {    "metric": "tabs",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31"  }}

Ежедневно активные пользователи (DAU)

GET/analytics/team/dau

Получить число ежедневно активных пользователей в вашей команде. DAU — это число уникальных пользователей, использовавших Cursor в определённый день. Активный пользователь — пользователь, который использовал хотя бы одну функцию ИИ в Cursor.

Ответ содержит метрики DAU с разбивкой по CLI Cursor, Cloud Agents и BugBot.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

users string

Фильтрация данных по конкретным пользователям (email-адреса или ID пользователей через запятую, например, alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/team/dau?startDate=14d&endDate=today" \  -u YOUR_API_KEY:

Ответ:

{  "data": [    {      "date": "2025-01-15",      "dau": 42,      "cli_dau": 5,      "cloud_agent_dau": 37,      "bugbot_dau": 10    },    {      "date": "2025-01-16",      "dau": 4,      "cli_dau": 4,      "cloud_agent_dau": 34,      "bugbot_dau": 12    }  ],  "params": {    "metric": "dau",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31"  }}

Версии клиента

GET/analytics/team/client-versions

Возвращает распределение версий клиента Cursor, используемых вашей командой (по умолчанию — за последние 7 дней). Для каждого пользователя за каждый день указывается последняя использованная версия (если пользователь установил несколько версий, указывается последняя).

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

users string

Фильтрация данных по конкретным пользователям (email-адреса или ID пользователей через запятую, например, alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/team/client-versions" \  -u YOUR_API_KEY:

Ответ:

{  "data": [    {      "event_date": "2025-01-01",      "client_version": "0.42.3",      "user_count": 35,      "percentage": 0.833    },    {      "event_date": "2025-01-01",      "client_version": "0.42.2",      "user_count": 7,      "percentage": 0.167    }  ],  "params": {    "metric": "client-versions",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31"  }}

Использование моделей

GET/analytics/team/models

Возвращает метрики использования ИИ-моделей вашей командой.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

users string

Фильтрация данных по конкретным пользователям (email-адреса или ID пользователей через запятую, например, alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/team/models" \  -u YOUR_API_KEY:

Ответ:

{  "data": [    {      "date": "2025-01-15",      "model_breakdown": {        "claude-sonnet-4.5": {          "messages": 1250,          "users": 28        },        "gpt-4o": {          "messages": 450,          "users": 15        },        "claude-opus-4.5": {          "messages": 320,          "users": 12        }      }    },    {      "date": "2025-01-16",      "model_breakdown": {        "claude-sonnet-4.5": {          "messages": 1180,          "users": 26        },        "gpt-4o": {          "messages": 420,          "users": 14        }      }    }  ],  "params": {    "metric": "models",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31"  }}

Самые популярные расширения файлов

GET/analytics/team/top-file-extensions

Возвращает наиболее часто редактируемые вашей командой в Cursor файлы. Для каждого дня возвращает 5 расширений файлов с наибольшим количеством предложений.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

users string

Фильтрация данных по конкретным пользователям (email-адреса или ID пользователей через запятую, например, alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/team/top-file-extensions?startDate=30d&endDate=today" \  -u YOUR_API_KEY:

Ответ:

{  "data": [    {      "event_date": "2025-01-15",      "file_extension": "tsx",      "total_files": 156,      "total_accepts": 98,      "total_rejects": 45,      "total_lines_suggested": 3230,      "total_lines_accepted": 2340,      "total_lines_rejected": 890    },    {      "event_date": "2025-01-15",      "file_extension": "ts",      "total_files": 142,      "total_accepts": 89,      "total_rejects": 38,      "total_lines_suggested": 2850,      "total_lines_accepted": 2100,      "total_lines_rejected": 750    }  ],  "params": {    "metric": "top-files",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31"  }}

Использование MCP

GET/analytics/team/mcp

Возвращает метрики использования инструментов MCP (Model Context Protocol) в вашей команде, включая ежедневное количество использований с разбивкой по названию инструмента и сервера MCP.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

users string

Фильтрация данных по конкретным пользователям (email-адреса или ID пользователей через запятую, например, alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/team/mcp" \  -u YOUR_API_KEY:

Ответ:

{  "data": [    {      "event_date": "2025-01-15",      "tool_name": "read_file",      "mcp_server_name": "filesystem",      "usage": 245    },    {      "event_date": "2025-01-15",      "tool_name": "search_web",      "mcp_server_name": "brave-search",      "usage": 128    },    {      "event_date": "2025-01-16",      "tool_name": "read_file",      "mcp_server_name": "filesystem",      "usage": 231    }  ],  "params": {    "metric": "mcp",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31"  }}

Использование команд

GET/analytics/team/commands

Возвращает метрики использования команд Cursor в вашей команде, включая ежедневное количество использований с разбивкой по названию команды.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

users string

Фильтрация данных по конкретным пользователям (email-адреса или ID пользователей через запятую, например, alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/team/commands" \  -u YOUR_API_KEY:

Ответ:

{  "data": [    {      "event_date": "2025-01-15",      "command_name": "explain",      "usage": 89    },    {      "event_date": "2025-01-15",      "command_name": "refactor",      "usage": 45    },    {      "event_date": "2025-01-16",      "command_name": "explain",      "usage": 92    }  ],  "params": {    "metric": "commands",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31"  }}

Использование режима Plan

GET/analytics/team/plans

Возвращает метрики использования режима Plan в вашей команде, включая ежедневное количество использований с разбивкой по ИИ-моделям, использованным для генерации планов.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

users string

Фильтрация данных по конкретным пользователям (email-адреса или ID пользователей через запятую, например, alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/team/plans" \  -u YOUR_API_KEY:

Ответ:

{  "data": [    {      "event_date": "2025-01-15",      "model": "claude-sonnet-4.5",      "usage": 156    },    {      "event_date": "2025-01-15",      "model": "default",      "usage": 42    },    {      "event_date": "2025-01-16",      "model": "claude-sonnet-4.5",      "usage": 148    }  ],  "params": {    "metric": "plans",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31"  }}

Использование навыков

GET/analytics/team/skills

Возвращает метрики использования навыков в команде. Ежедневное количество использований приводится с разбивкой по названию навыка.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

users string

Фильтрация данных по конкретным пользователям (email-адреса или ID пользователей через запятую, например, alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/team/skills" \  -u YOUR_API_KEY:

Ответ:

{  "data": [    {      "event_date": "2025-01-15",      "skill_name": "react-best-practices",      "usage": 53    },    {      "event_date": "2025-01-15",      "skill_name": "usage-billing",      "usage": 41    },    {      "event_date": "2025-01-16",      "skill_name": "react-best-practices",      "usage": 48    }  ],  "params": {    "metric": "skills",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31"  }}

Использование режима Ask

GET/analytics/team/ask-mode

Возвращает метрики использования режима Ask в вашей команде, включая ежедневное количество использований с разбивкой по ИИ-моделям, применяемым для запросов в режиме Ask.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

users string

Фильтрация данных по конкретным пользователям (email-адреса или ID пользователей через запятую, например, alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/team/ask-mode" \  -u YOUR_API_KEY:

Ответ:

{  "data": [    {      "event_date": "2025-01-15",      "model": "claude-sonnet-4.5",      "usage": 203    },    {      "event_date": "2025-01-15",      "model": "gpt-4o",      "usage": 67    },    {      "event_date": "2025-01-16",      "model": "claude-sonnet-4.5",      "usage": 198    }  ],  "params": {    "metric": "ask-mode",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31"  }}

Аналитика диалогов

GET/analytics/team/conversation-insights

Получите те же агрегированные данные Conversation Insights, что и на дашборде. Эта конечная точка возвращает агрегированную аналитику, а не необработанные экспортированные данные или содержимое диалогов.

intents и complexity описывают диалоги целиком.

categories, guidanceLevels и workTypes описывают работу в сегментах диалогов.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

include string | string[]

Обязательный параметр. Выберите, какие срезы Conversation Insights вернуть. Поддерживаемые значения: intents, complexity, categories, guidanceLevels и workTypes. include можно передать как список значений, разделённых запятыми, например include=intents,complexity, или указать несколько раз, например include=intents&include=workTypes.

users string

Необязательный параметр. Фильтруйте Conversation Insights по конкретным пользователям. Передайте адреса электронной почты или идентификаторы пользователей, разделённые запятыми, например users=alice@example.com,user_abc123.
curl -X GET "https://api.cursor.com/analytics/team/conversation-insights?startDate=2026-03-01&endDate=2026-03-07&include=intents,complexity,categories,guidanceLevels,workTypes&users=alice@example.com,bob@example.com" \  -u YOUR_API_KEY:

Ответ:

{  "data": {    "intents": {      "distribution": [        {          "intent": "Write Code",          "count": 18        },        {          "intent": "Ask",          "count": 7        },        {          "intent": "Plan",          "count": 3        }      ],      "topValues": [        {          "intent": "Write Code",          "count": 18        },        {          "intent": "Ask",          "count": 7        }      ],      "timeSeries": [        {          "date": "2026-03-01",          "intent": "Ask",          "count": 2        },        {          "date": "2026-03-02",          "intent": "Write Code",          "count": 6        }      ],      "subcategories": {        "askMode": [          {            "subcategory": "error_fix",            "count": 4          }        ],        "planMode": [          {            "subcategory": "implementation",            "count": 3          }        ],        "writeCode": [          {            "subcategory": "feature",            "count": 11          }        ]      }    },    "complexity": {      "distribution": [        {          "complexity": "high",          "count": 12        },        {          "complexity": "medium",          "count": 10        }      ],      "timeSeries": [        {          "date": "2026-03-01",          "complexity": "medium",          "count": 4        },        {          "date": "2026-03-02",          "complexity": "high",          "count": 5        }      ]    },    "categories": {      "distribution": [        {          "category": "New Features",          "count": 9        },        {          "category": "Bug Fixing & Debugging",          "count": 6        }      ],      "timeSeries": [        {          "date": "2026-03-01",          "category": "Bug Fixing & Debugging",          "count": 2        },        {          "date": "2026-03-02",          "category": "New Features",          "count": 4        }      ]    },    "guidanceLevels": {      "distribution": [        {          "guidanceLevel": "high",          "count": 8        },        {          "guidanceLevel": "medium",          "count": 7        }      ],      "timeSeries": [        {          "date": "2026-03-01",          "guidanceLevel": "medium",          "count": 3        },        {          "date": "2026-03-02",          "guidanceLevel": "high",          "count": 4        }      ]    },    "workTypes": {      "distribution": [        {          "workType": "new_feature",          "count": 9        },        {          "workType": "bug",          "count": 6        }      ],      "timeSeries": [        {          "date": "2026-03-01",          "workType": "bug",          "count": 2        },        {          "date": "2026-03-02",          "workType": "new_feature",          "count": 4        }      ]    }  },  "params": {    "metric": "conversation-insights",    "teamId": 12345,    "startDate": "2026-03-01",    "endDate": "2026-03-07",    "include": [      "intents",      "complexity",      "categories",      "guidanceLevels",      "workTypes"    ]  }}

Рейтинг

GET/analytics/team/leaderboard

Получить рейтинг участников команды по метрикам использования ИИ.

Поведение:

  • Без фильтрации по пользователям: возвращает пользователей, ранжированных по указанной метрике (по умолчанию: суммарное количество принятых строк)
  • С фильтрацией по пользователям: возвращает пользователей, соответствующих фильтру, с их фактическими позициями в рейтинге по всей команде
  • Поддерживает пагинацию для команд с большим числом участников

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

page number

Номер страницы при пагинации (нумерация с 1). По умолчанию: 1

pageSize number

Количество пользователей на странице (по умолчанию: 10, максимум: 500)

users string

Фильтрация по конкретным пользователям (адреса электронной почты или идентификаторы пользователей через запятую, например alice@example.com,user_abc123)
# Получить первую страницу таблицы лидеров (10 лучших пользователей)curl -X GET "https://api.cursor.com/analytics/team/leaderboard" \  -u YOUR_API_KEY:
# Получить вторую страницу с пользовательским размером страницыcurl -X GET "https://api.cursor.com/analytics/team/leaderboard?page=2&pageSize=20" \  -u YOUR_API_KEY:
# Фильтрация по конкретным пользователямcurl -X GET "https://api.cursor.com/analytics/team/leaderboard?users=alice@example.com,bob@example.com" \  -u YOUR_API_KEY:

Ответ:

{  "data": {    "tab_leaderboard": {      "data": [        {          "email": "alice@example.com",          "user_id": "user_abc123",          "profile_picture_url": "https://example.com/avatars/alice.jpg",          "total_accepts": 1334,          "total_lines_accepted": 3455,          "total_lines_suggested": 15307,          "line_acceptance_ratio": 0.2256519892590384,          "accept_ratio": 0.2330827067669173,          "rank": 1        },        {          "email": "bob@example.com",          "user_id": "user_def789",          "profile_picture_url": "https://example.com/avatars/bob.jpg",          "total_accepts": 796,          "total_lines_accepted": 2090,          "total_lines_suggested": 7689,          "line_acceptance_ratio": 0.2718168812589414,          "accept_ratio": 0.2731256599787746,          "rank": 2        }      ],      "total_users": 142    },    "agent_leaderboard": {      "data": [        {          "email": "alice@example.com",          "user_id": "user_abc123",          "profile_picture_url": "https://example.com/avatars/alice.jpg",          "total_accepts": 914,          "total_lines_accepted": 65947,          "total_lines_suggested": 201467,          "line_acceptance_ratio": 0.3273465219182842,          "rank": 1        },        {          "email": "bob@example.com",          "user_id": "user_def789",          "profile_picture_url": "https://example.com/avatars/bob.jpg",          "total_accepts": 843,          "total_lines_accepted": 61709,          "total_lines_suggested": 51092,          "line_acceptance_ratio": 1.2077924536684573,          "rank": 2        }      ],      "total_users": 142    }  },  "pagination": {    "page": 1,    "pageSize": 10,    "totalUsers": 142,    "totalPages": 15,    "hasNextPage": true,    "hasPreviousPage": false  },  "params": {    "metric": "leaderboard",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31",    "page": 1,    "pageSize": 10  }}

Аналитика Bugbot

GET/analytics/team/bugbot

Возвращает аналитику Bugbot review по PR вашей команды, включая количество задач по степени серьёзности и число решённых задач.

Для данных по отдельным ревью, включая стоимость и отдельные результаты, используйте аналитику Bugbot review.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. форматы дат

prState string

Фильтр по состоянию PR. Допустимые значения: merged или all. По умолчанию: merged. Используйте merged только для аналитики по объединённым PR. Используйте all для аналитики по PR во всех состояниях.

repo string

Необязательный фильтр по репозиторию. Принимает полные URL или значения в формате хост/путь (например, https://github.com/org/repo.git или github.com/org/repo). Приводится к формату host/owner/repo.

page number

Номер страницы для пагинации (нумерация с 1). По умолчанию: 1

pageSize number

Количество PR на странице (по умолчанию: 100, максимум: 250)
# Получить аналитику PR от Bugbot за последние 7 дней (период по умолчанию)curl -X GET "https://api.cursor.com/analytics/team/bugbot" \  -u YOUR_API_KEY:
# Фильтрация по репозиторию и диапазону датcurl -X GET "https://api.cursor.com/analytics/team/bugbot?repo=github.com/acme/app&startDate=2025-01-01&endDate=2025-01-31" \  -u YOUR_API_KEY:
# Разбить результаты на страницыcurl -X GET "https://api.cursor.com/analytics/team/bugbot?page=2&pageSize=50" \  -u YOUR_API_KEY:

Ответ:

{  "data": [    {      "repo": "github.com/acme/app",      "pr_number": 42,      "timestamp": "2025-01-21T00:00:00.000Z",      "reviews": 3,      "issues": {        "total": 5,        "by_severity": {          "high": 1,          "medium": 2,          "low": 2        }      },      "issues_resolved": {        "total": 2,        "by_severity": {          "high": 1,          "medium": 1,          "low": 0        }      }    }  ],  "pagination": {    "page": 1,    "pageSize": 100,    "totalItems": 1,    "totalPages": 1,    "hasNextPage": false,    "hasPreviousPage": false  },  "params": {    "metric": "bugbot",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31",    "repo": "github.com/acme/app",    "prState": "merged",    "page": 1,    "pageSize": 100  }}

Аналитика ревью Bugbot

GET/analytics/team/bugbot-reviews

Возвращает по одному элементу для каждого завершённого ревью Bugbot, включая проверенный коммит, количество находок, списанную стоимость и данные о статусе решения для каждой находки.

Включает опубликованные ревью и ревью в режиме dry-run. Опубликованные находки идентифицируются по comment_id и resolution_status. Для находок dry-run вместо этого возвращаются title, description и locations, поскольку в SCM ничего не публикуется.

Требуется API-ключ с областью действия read:*.

Параметры

startDate string

Начало периода аналитики. По умолчанию — 7 дней назад. См. Форматы дат.

endDate string

Конец периода аналитики. По умолчанию — now. См. Форматы дат.

repo string

Необязательный фильтр репозитория в формате host/owner/repo. Протокол и суффикс .git необязательны.

prNumber number

Необязательный номер pull request или merge request.

page number

Номер страницы для пагинации (нумерация с 1). По умолчанию: 1.

pageSize number

Количество ревью на странице. По умолчанию: 100, максимум: 250.

dryRun boolean

Необязательный фильтр: только ревью dry-run (true) или опубликованные ревью (false).
curl --get https://api.cursor.com/analytics/team/bugbot-reviews \  -u YOUR_API_KEY: \  --data-urlencode 'startDate=2026-06-01' \  --data-urlencode 'endDate=2026-06-29' \  --data-urlencode 'repo=github.com/your-org/your-repo' \  --data-urlencode 'prNumber=42' \  --data-urlencode 'page=1' \  --data-urlencode 'pageSize=100'
curl --get https://api.cursor.com/analytics/team/bugbot-reviews \  -u YOUR_API_KEY: \  --data-urlencode 'dryRun=true' \  --data-urlencode 'repo=github.com/your-org/your-repo' \  --data-urlencode 'prNumber=42'

Ответ (опубликованное ревью):

{  "data": [    {      "request_id": "6e0d261c-86a2-4383-89f0-9162c1c10662",      "timestamp": "2026-06-29T19:42:18.000Z",      "repo": "github.com/your-org/your-repo",      "repo_node_id": "R_kgDOABCDEF",      "pr_number": 42,      "commit_sha": "9f3c2a1b7d8e4f5061728394a5b6c7d8e9f0a1b2",      "bugs_found": 2,      "cost_cents": 42.5,      "dry_run": false,      "publication_status": "posted",      "bugs": [        {          "comment_id": "2147483999",          "resolution_status": "resolved",          "severity": "high"        },        {          "comment_id": "2147484000",          "resolution_status": "unresolved",          "severity": "medium"        }      ]    }  ],  "pagination": {    "page": 1,    "pageSize": 100,    "totalItems": 1,    "totalPages": 1,    "hasNextPage": false,    "hasPreviousPage": false  },  "params": {    "metric": "bugbot-reviews",    "teamId": 12345,    "startDate": "2026-06-01",    "endDate": "2026-06-29",    "repo": "github.com/your-org/your-repo",    "prNumber": 42,    "page": 1,    "pageSize": 100  }}

Ответ (ревью в режиме dry-run):

{  "data": [    {      "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",      "timestamp": "2026-06-29T20:15:03.000Z",      "repo": "github.com/your-org/your-repo",      "repo_node_id": "R_kgDOABCDEF",      "pr_number": 42,      "commit_sha": "9f3c2a1b7d8e4f5061728394a5b6c7d8e9f0a1b2",      "bugs_found": 1,      "cost_cents": null,      "dry_run": true,      "publication_status": "dry_run",      "bugs": [        {          "comment_id": null,          "resolution_status": null,          "severity": "medium",          "title": "Unbounded retry loop",          "description": "retry() recurses without a ceiling.",          "locations": [            { "file": "src/net.ts", "start_line": 5, "end_line": 9 }          ]        }      ]    }  ],  "pagination": {    "page": 1,    "pageSize": 100,    "totalItems": 1,    "totalPages": 1,    "hasNextPage": false,    "hasPreviousPage": false  },  "params": {    "metric": "bugbot-reviews",    "teamId": 12345,    "startDate": "2026-06-01",    "endDate": "2026-06-29",    "repo": "github.com/your-org/your-repo",    "prNumber": 42,    "dryRun": true,    "page": 1,    "pageSize": 100  }}

Значения repo_node_id, pr_number, commit_sha, cost_cents, bugs[].comment_id, bugs[].resolution_status и bugs[].severity могут быть null, если они недоступны. cost_cents равно null, если ревью не выставляется в счёт отдельно. Для ревью в режиме dry-run поля bugs[].title, bugs[].description и bugs[].locations содержат информацию о найденных проблемах. У результатов dry-run comment_id: null и resolution_status: null, поскольку в SCM ничего не публикуется.

Чтобы запустить ревью в режиме dry-run, отправьте запрос POST /bugbot/review с "dryRun": true. См. документацию API Bugbot.


Конечные точки By-User

Конечные точки by-user предоставляют те же метрики, что и конечные точки уровня команды, но с разбивкой по отдельным пользователям и поддержкой пагинации. Они идеально подходят для создания отчётов по пользователям или пакетной обработки больших команд.

Распространённые параметры запроса

ПараметрТипОбязательныйОписание
startDateСтрока датыНетДата начала периода аналитики (по умолчанию: 7 дней назад)
endDateСтрока датыНетДата окончания периода аналитики (по умолчанию: сегодня)
pagenumberНетНомер страницы (по умолчанию: 1)
pageSizenumberНетКоличество пользователей на странице (по умолчанию: 100, максимум: 500)
usersstringНетОграничить пагинацию указанными пользователями (электронные адреса или идентификаторы, разделённые запятыми, например alice@example.com,user_abc123)

Фильтрация пользователей: При передаче параметра users в конечные точки by-user:

  • Фильтрация пагинации: В результаты и подсчёт страниц включаются только указанные пользователи
  • Полезно для: Получения подробных данных по конкретным участникам команды без просмотра всех пользователей по страницам
  • Пример: Если у вас 500 пользователей, но нужны данные только по 3 конкретным пользователям, отфильтруйте их по электронным адресам, чтобы получить всех троих на одной странице

Примечание: Конечные точки by-user поддерживают те же форматы дат и сокращения, что и конечные точки уровня команды. См. раздел Форматы дат выше.

Формат ответа

Все конечные точки by-user возвращают данные в следующем формате:

{  "data": {    "user1@example.com": [ /* данные пользователя */ ],    "user2@example.com": [ /* данные пользователя */ ]  },  "pagination": {    "page": 1,    "pageSize": 100,    "totalUsers": 250,    "totalPages": 3,    "hasNextPage": true,    "hasPreviousPage": false  },  "params": {    "metric": "agent-edits",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31",    "page": 1,    "pageSize": 100,    "userMappings": [      { "id": "user_abc123", "email": "user1@example.com" },      { "id": "user_def456", "email": "user2@example.com" }    ]  }}

Структура ответа:

  • data — object, где ключами служат адреса электронной почты пользователей, а значениями — массивы метрик соответствующих пользователей
  • pagination — информация о пагинации
  • params — параметры запроса, возвращённые в ответе
    • userMappings — массив сопоставлений адресов электронной почты с публичными идентификаторами пользователей на этой странице. Используется для сверки данных с другими API или создания ссылок на профили пользователей.

Доступные конечные точки

Все конечные точки by-user соответствуют шаблону: /analytics/by-user/{metric}

  • GET /analytics/by-user/agent-edits - Правки Agent по пользователям
  • GET /analytics/by-user/tabs - Использование Tab по пользователям
  • GET /analytics/by-user/models - Использование моделей по пользователям
  • GET /analytics/by-user/top-file-extensions - Наиболее популярные файлы по пользователям
  • GET /analytics/by-user/client-versions - Версии клиента по пользователям
  • GET /analytics/by-user/mcp - Использование MCP по пользователям
  • GET /analytics/by-user/commands - Использование команд по пользователям
  • GET /analytics/by-user/plans - Использование тарифов по пользователям
  • GET /analytics/by-user/skills - Использование навыков по пользователям
  • GET /analytics/by-user/ask-mode - Использование режима Ask по пользователям

Правки Agent по пользователям

GET/analytics/by-user/agent-edits

Получить метрики правок Agent по отдельным пользователям с поддержкой пагинации.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

page number

Номер страницы (нумерация с 1). По умолчанию: 1

pageSize number

Количество пользователей на странице (по умолчанию: 100, максимум: 500)

users string

Ограничить пагинацию указанными пользователями (адреса электронной почты или идентификаторы пользователей, разделённые запятыми, например: alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/by-user/agent-edits?page=1&pageSize=50" \  -u YOUR_API_KEY:
curl -X GET "https://api.cursor.com/analytics/by-user/agent-edits?users=alice@example.com,bob@example.com,carol@example.com" \  -u YOUR_API_KEY:

Ответ:

{  "data": {    "alice@example.com": [      {        "event_date": "2025-01-15",        "total_suggested_diffs": 145,        "total_accepted_diffs": 98,        "total_rejected_diffs": 47,        "total_green_lines_accepted": 820,        "total_red_lines_accepted": 160,        "total_green_lines_rejected": 210,        "total_red_lines_rejected": 60,        "total_green_lines_suggested": 1030,        "total_red_lines_suggested": 220,        "total_lines_suggested": 1250,        "total_lines_accepted": 980      },      {        "event_date": "2025-01-16",        "total_suggested_diffs": 132,        "total_accepted_diffs": 89,        "total_rejected_diffs": 43,        "total_green_lines_accepted": 740,        "total_red_lines_accepted": 150,        "total_green_lines_rejected": 185,        "total_red_lines_rejected": 55,        "total_green_lines_suggested": 925,        "total_red_lines_suggested": 175,        "total_lines_suggested": 1100,        "total_lines_accepted": 890      }    ],    "bob@example.com": [      {        "event_date": "2025-01-15",        "total_suggested_diffs": 95,        "total_accepted_diffs": 72,        "total_rejected_diffs": 23,        "total_green_lines_accepted": 450,        "total_red_lines_accepted": 90,        "total_green_lines_rejected": 120,        "total_red_lines_rejected": 35,        "total_green_lines_suggested": 570,        "total_red_lines_suggested": 125,        "total_lines_suggested": 695,        "total_lines_accepted": 540      }    ]  },  "pagination": {    "page": 1,    "pageSize": 50,    "totalUsers": 120,    "totalPages": 3,    "hasNextPage": true,    "hasPreviousPage": false  },  "params": {    "metric": "agent-edits",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31",    "page": 1,    "pageSize": 50,    "userMappings": [      { "id": "user_abc123", "email": "alice@example.com" },      { "id": "user_def456", "email": "bob@example.com" }    ]  }}

Использование Tab по пользователям

GET/analytics/by-user/tabs

Получить метрики использования автодополнения Tab по отдельным пользователям с поддержкой пагинации.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

page number

Номер страницы (нумерация с 1). По умолчанию: 1

pageSize number

Количество пользователей на странице (по умолчанию: 100, максимум: 500)

users string

Ограничить пагинацию указанными пользователями (адреса электронной почты или ID пользователей, разделённые запятыми, например: alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/by-user/tabs?page=1&pageSize=50" \  -u YOUR_API_KEY:

Ответ:

{  "data": {    "alice@example.com": [      {        "event_date": "2025-01-15",        "total_suggestions": 320,        "total_accepts": 210,        "total_rejects": 110,        "total_green_lines_accepted": 280,        "total_red_lines_accepted": 120,        "total_green_lines_rejected": 90,        "total_red_lines_rejected": 45,        "total_green_lines_suggested": 370,        "total_red_lines_suggested": 165,        "total_lines_suggested": 535,        "total_lines_accepted": 400      }    ],    "bob@example.com": [      {        "event_date": "2025-01-15",        "total_suggestions": 180,        "total_accepts": 120,        "total_rejects": 60,        "total_green_lines_accepted": 150,        "total_red_lines_accepted": 70,        "total_green_lines_rejected": 50,        "total_red_lines_rejected": 25,        "total_green_lines_suggested": 200,        "total_red_lines_suggested": 95,        "total_lines_suggested": 295,        "total_lines_accepted": 220      }    ]  },  "pagination": {    "page": 1,    "pageSize": 50,    "totalUsers": 120,    "totalPages": 3,    "hasNextPage": true,    "hasPreviousPage": false  },  "params": {    "metric": "tabs",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31",    "page": 1,    "pageSize": 50,    "userMappings": [      { "id": "user_abc123", "email": "alice@example.com" },      { "id": "user_def456", "email": "bob@example.com" }    ]  }}

Использование моделей по пользователям

GET/analytics/by-user/models

Получение метрик использования моделей по отдельным пользователям с поддержкой пагинации.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

page number

Номер страницы (нумерация с 1). По умолчанию: 1

pageSize number

Количество пользователей на странице (по умолчанию: 100, максимум: 500)

users string

Ограничить пагинацию указанными пользователями (адреса электронной почты или идентификаторы пользователей, разделённые запятыми, например: alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/by-user/models?page=1&pageSize=50" \  -u YOUR_API_KEY:

Ответ:

{  "data": {    "alice@example.com": [      {        "date": "2025-01-15",        "model_breakdown": {          "claude-sonnet-4.5": {            "messages": 85,            "users": 1          },          "gpt-4o": {            "messages": 32,            "users": 1          }        }      }    ],    "bob@example.com": [      {        "date": "2025-01-15",        "model_breakdown": {          "claude-sonnet-4.5": {            "messages": 64,            "users": 1          }        }      }    ]  },  "pagination": {    "page": 1,    "pageSize": 50,    "totalUsers": 120,    "totalPages": 3,    "hasNextPage": true,    "hasPreviousPage": false  },  "params": {    "metric": "models",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31",    "page": 1,    "pageSize": 50,    "userMappings": [      { "id": "user_abc123", "email": "alice@example.com" },      { "id": "user_def456", "email": "bob@example.com" }    ]  }}

Самые популярные расширения файлов по пользователям

GET/analytics/by-user/top-file-extensions

Получает метрики по наиболее популярным расширениям файлов для отдельных пользователей с поддержкой пагинации.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

page number

Номер страницы (нумерация с 1). По умолчанию: 1

pageSize number

Количество пользователей на странице (по умолчанию: 100, максимум: 500)

users string

Ограничить пагинацию конкретными пользователями (адреса электронной почты или идентификаторы пользователей, разделённые запятыми, например: alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/by-user/top-file-extensions?page=1&pageSize=50" \  -u YOUR_API_KEY:

Ответ:

{  "data": {    "alice@example.com": [      {        "event_date": "2025-01-15",        "file_extension": "tsx",        "total_files": 45,        "total_accepts": 32,        "total_rejects": 10,        "total_lines_suggested": 890,        "total_lines_accepted": 650,        "total_lines_rejected": 240      },      {        "event_date": "2025-01-15",        "file_extension": "ts",        "total_files": 38,        "total_accepts": 28,        "total_rejects": 8,        "total_lines_suggested": 720,        "total_lines_accepted": 540,        "total_lines_rejected": 180      }    ],    "bob@example.com": [      {        "event_date": "2025-01-15",        "file_extension": "py",        "total_files": 22,        "total_accepts": 18,        "total_rejects": 4,        "total_lines_suggested": 410,        "total_lines_accepted": 340,        "total_lines_rejected": 70      }    ]  },  "pagination": {    "page": 1,    "pageSize": 50,    "totalUsers": 120,    "totalPages": 3,    "hasNextPage": true,    "hasPreviousPage": false  },  "params": {    "metric": "top-files",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31",    "page": 1,    "pageSize": 50,    "userMappings": [      { "id": "user_abc123", "email": "alice@example.com" },      { "id": "user_def456", "email": "bob@example.com" }    ]  }}

Версии клиентов по пользователям

GET/analytics/by-user/client-versions

Получение метрик версий клиентов по отдельным пользователям с поддержкой пагинации.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

page number

Номер страницы (нумерация с 1). По умолчанию: 1

pageSize number

Количество пользователей на странице (по умолчанию: 100, максимум: 500)

users string

Ограничить пагинацию указанными пользователями (адреса электронной почты или ID пользователей через запятую, например: alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/by-user/client-versions?page=1&pageSize=50" \  -u YOUR_API_KEY:

Ответ:

{  "data": {    "alice@example.com": [      {        "event_date": "2025-01-15",        "client_version": "0.42.3",        "user_count": 1,        "percentage": 1.0      }    ],    "bob@example.com": [      {        "event_date": "2025-01-15",        "client_version": "0.42.2",        "user_count": 1,        "percentage": 1.0      }    ]  },  "pagination": {    "page": 1,    "pageSize": 50,    "totalUsers": 120,    "totalPages": 3,    "hasNextPage": true,    "hasPreviousPage": false  },  "params": {    "metric": "client-versions",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31",    "page": 1,    "pageSize": 50,    "userMappings": [      { "id": "user_abc123", "email": "alice@example.com" },      { "id": "user_def456", "email": "bob@example.com" }    ]  }}

Использование MCP по пользователям

GET/analytics/by-user/mcp

Получение метрик использования инструментов MCP по отдельным пользователям с поддержкой пагинации.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

page number

Номер страницы (нумерация с 1). По умолчанию: 1

pageSize number

Количество пользователей на странице (по умолчанию: 100, максимум: 500)

users string

Ограничить пагинацию указанными пользователями (адреса электронной почты или идентификаторы пользователей, разделённые запятыми, например: alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/by-user/mcp?page=1&pageSize=50" \  -u YOUR_API_KEY:

Ответ:

{  "data": {    "alice@example.com": [      {        "event_date": "2025-01-15",        "tool_name": "read_file",        "mcp_server_name": "filesystem",        "usage": 45      },      {        "event_date": "2025-01-16",        "tool_name": "read_file",        "mcp_server_name": "filesystem",        "usage": 38      }    ],    "bob@example.com": [      {        "event_date": "2025-01-15",        "tool_name": "search_web",        "mcp_server_name": "brave-search",        "usage": 23      }    ]  },  "pagination": {    "page": 1,    "pageSize": 50,    "totalUsers": 120,    "totalPages": 3,    "hasNextPage": true,    "hasPreviousPage": false  },  "params": {    "metric": "mcp",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31",    "page": 1,    "pageSize": 50,    "userMappings": [      { "id": "user_abc123", "email": "alice@example.com" },      { "id": "user_def456", "email": "bob@example.com" }    ]  }}

Использование команд по пользователям

GET/analytics/by-user/commands

Получение метрик использования команд по отдельным пользователям с поддержкой пагинации.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

page number

Номер страницы (нумерация с 1). По умолчанию: 1

pageSize number

Число пользователей на странице (по умолчанию: 100, максимум: 500)

users string

Ограничить пагинацию указанными пользователями (адреса электронной почты или идентификаторы пользователей, разделённые запятыми, например: alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/by-user/commands?page=1&pageSize=50" \  -u YOUR_API_KEY:

Ответ:

{  "data": {    "alice@example.com": [      {        "event_date": "2025-01-15",        "command_name": "explain",        "usage": 12      },      {        "event_date": "2025-01-16",        "command_name": "explain",        "usage": 15      }    ],    "bob@example.com": [      {        "event_date": "2025-01-15",        "command_name": "refactor",        "usage": 8      }    ]  },  "pagination": {    "page": 1,    "pageSize": 50,    "totalUsers": 120,    "totalPages": 3,    "hasNextPage": true,    "hasPreviousPage": false  },  "params": {    "metric": "commands",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31",    "page": 1,    "pageSize": 50,    "userMappings": [      { "id": "user_abc123", "email": "alice@example.com" },      { "id": "user_def456", "email": "bob@example.com" }    ]  }}

Использование тарифов по пользователям

GET/analytics/by-user/plans

Получение метрик использования режима Plan по отдельным пользователям с поддержкой пагинации.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

page number

Номер страницы (нумерация с 1). По умолчанию: 1

pageSize number

Количество пользователей на странице (по умолчанию: 100, максимум: 500)

users string

Ограничить пагинацию указанными пользователями (адреса электронной почты или идентификаторы пользователей, разделённые запятыми, например: alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/by-user/plans?page=1&pageSize=50" \  -u YOUR_API_KEY:

Ответ:

{  "data": {    "alice@example.com": [      {        "event_date": "2025-01-15",        "model": "claude-sonnet-4.5",        "usage": 23      },      {        "event_date": "2025-01-16",        "model": "claude-sonnet-4.5",        "usage": 19      }    ],    "bob@example.com": [      {        "event_date": "2025-01-15",        "model": "gpt-4o",        "usage": 12      }    ]  },  "pagination": {    "page": 1,    "pageSize": 50,    "totalUsers": 120,    "totalPages": 3,    "hasNextPage": true,    "hasPreviousPage": false  },  "params": {    "metric": "plans",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31",    "page": 1,    "pageSize": 50,    "userMappings": [      { "id": "user_abc123", "email": "alice@example.com" },      { "id": "user_def456", "email": "bob@example.com" }    ]  }}

Использование навыков по пользователям

GET/analytics/by-user/skills

Возвращает показатели использования навыков по отдельным пользователям с поддержкой пагинации.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

page number

Номер страницы (нумерация с 1). По умолчанию: 1

pageSize number

Количество пользователей на странице (по умолчанию: 100, максимум: 500)

users string

Ограничить пагинацию указанными пользователями (адреса электронной почты или идентификаторы пользователей, разделённые запятыми, например: alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/by-user/skills?page=1&pageSize=50" \  -u YOUR_API_KEY:

Ответ:

{  "data": {    "alice@example.com": [      {        "event_date": "2025-01-15",        "skill_name": "react-best-practices",        "usage": 8      },      {        "event_date": "2025-01-15",        "skill_name": "create-rule",        "usage": 3      },      {        "event_date": "2025-01-16",        "skill_name": "react-best-practices",        "usage": 5      }    ],    "bob@example.com": [      {        "event_date": "2025-01-15",        "skill_name": "commit-message-helper",        "usage": 5      },      {        "event_date": "2025-01-15",        "skill_name": "create-skill",        "usage": 2      }    ]  },  "pagination": {    "page": 1,    "pageSize": 50,    "totalUsers": 120,    "totalPages": 3,    "hasNextPage": true,    "hasPreviousPage": false  },  "params": {    "metric": "skills",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31",    "page": 1,    "pageSize": 50,    "userMappings": [      { "id": "user_abc123", "email": "alice@example.com" },      { "id": "user_def456", "email": "bob@example.com" }    ]  }}

Использование режима Ask по пользователям

GET/analytics/by-user/ask-mode

Получить метрики использования режима Ask по отдельным пользователям с поддержкой пагинации.

Параметры

startDate string

Дата начала периода аналитики (по умолчанию: 7 дней назад). См. Форматы дат

endDate string

Дата окончания периода аналитики (по умолчанию: сегодня). См. Форматы дат

page number

Номер страницы (нумерация с 1). По умолчанию: 1

pageSize number

Количество пользователей на странице (по умолчанию: 100, максимум: 500)

users string

Ограничить пагинацию указанными пользователями (электронные адреса или идентификаторы пользователей, разделённые запятыми, например: alice@example.com,user_abc123)
curl -X GET "https://api.cursor.com/analytics/by-user/ask-mode?page=1&pageSize=50" \  -u YOUR_API_KEY:

Ответ:

{  "data": {    "alice@example.com": [      {        "event_date": "2025-01-15",        "model": "claude-sonnet-4.5",        "usage": 34      },      {        "event_date": "2025-01-16",        "model": "claude-sonnet-4.5",        "usage": 28      }    ],    "bob@example.com": [      {        "event_date": "2025-01-15",        "model": "gpt-4o",        "usage": 15      }    ]  },  "pagination": {    "page": 1,    "pageSize": 50,    "totalUsers": 120,    "totalPages": 3,    "hasNextPage": true,    "hasPreviousPage": false  },  "params": {    "metric": "ask-mode",    "teamId": 12345,    "startDate": "2025-01-01",    "endDate": "2025-01-31",    "page": 1,    "pageSize": 50,    "userMappings": [      { "id": "user_abc123", "email": "alice@example.com" },      { "id": "user_def456", "email": "bob@example.com" }    ]  }}

Конечные точки уровня команды

Конечные точки уровня команды предоставляют агрегированные метрики по всей команде или отфильтрованным группам пользователей. Все конечные точки поддерживают фильтрацию по диапазону дат и при необходимости — по пользователям.

Общие параметры запроса

ПараметрТипОбязательныйОписание
startDateСтрока датыНетДата начала периода аналитики (по умолчанию: 7 дней назад)
endDateСтрока датыНетДата окончания периода аналитики (по умолчанию: сегодня)
usersstringНетФильтрация данных по конкретным пользователям (значения через запятую). Каждое значение может быть адресом электронной почты (например, alice@example.com) или публичным ID пользователя (например, user_abc123). Можно сочетать оба формата.

Фильтрация пользователей: Параметр users принимает список идентификаторов, разделённых запятыми. Каждый идентификатор может быть:

  • Адрес электронной почты (например, alice@example.com) — определяется автоматически по наличию @
  • Публичный ID пользователя (например, user_abc123) — определяется автоматически по префиксу user_
  • Смешанный формат — в одном запросе можно сочетать адреса электронной почты и ID

Примеры:

# Фильтрация только по адресам электронной почты?users=alice@example.com,bob@example.com,carol@example.com# Фильтрация только по публичным идентификаторам пользователей?users=user_abc123,user_def456,user_ghi789# Смешанные адреса электронной почты и идентификаторы?users=alice@example.com,user_def456,bob@example.com

При фильтрации по пользователям API возвращает данные только по указанным пользователям. Это полезно для:

  • Анализа конкретных участников команд или групп (например, руководителей разработки, отдельных проектных команд)
  • Формирования отчётов по подмножеству пользователей
  • Сравнения метрик между выбранными пользователями

Форматы дат

Поведение по умолчанию: Если не указать startDate и endDate, API по умолчанию использует последние 7 дней (от 7 дней назад до сегодняшнего дня). Это удобно для быстрых запросов без указания дат.

Стандартные форматы:

  • YYYY-MM-DD — простой формат даты (например, 2025-01-15) ← Рекомендуется
  • Метки времени ISO 8601 (например, 2025-01-15T00:00:00Z)

Сокращения:

  • now или today — текущая дата (в 00:00:00)
  • yesterday — вчерашняя дата (в 00:00:00)
  • <number>d — количество дней назад (например, 7d = 7 дней назад, 30d = 30 дней назад)

Важные примечания:

  • Время игнорируется: Все даты приводятся к началу дня (00:00:00 UTC). Отправка 2025-01-15T14:30:00Z эквивалентна 2025-01-15.
  • Используйте рекомендуемые форматы: Для более эффективного HTTP-кэширования используйте YYYY-MM-DD или сокращения. Разные значения времени (например, T14:30:00Z и T08:00:00Z) не позволят использовать кэш, хотя соответствуют одному и тому же дню.
  • Диапазоны дат: Ограничены максимальной продолжительностью в 30 дней.

Примеры:

# Не указывайте даты: по умолчанию будут использованы последние 7 дней (проще всего и лучше для кэширования)curl "https://api.cursor.com/analytics/team/agent-edits"# Формат YYYY-MM-DD для конкретного диапазона дат (рекомендуется)?startDate=2025-01-01&endDate=2025-01-31# Сокращения для последних 30 дней?startDate=30d&endDate=today# Сокращения для последних 14 дней?startDate=14d&endDate=now# ❌ Не используйте временные метки: они мешают кэшированию, а время всё равно игнорируется?startDate=2025-01-15T14:30:00Z&endDate=2025-01-31T23:59:59Z

Ограничения частоты запросов

Ограничения частоты запросов действуют для каждой команды и сбрасываются каждую минуту:

  • Конечные точки уровня команды: 100 запросов в минуту на команду
  • Конечные точки by-user: 50 запросов в минуту на команду

Что происходит при превышении ограничения частоты запросов?

При превышении ограничения частоты запросов вы получите ответ 429 Too Many Requests:

{  "error": "Too Many Requests",  "message": "Rate limit exceeded. Please try again later."}

Рекомендации

Общие рекомендации по работе с API, включая экспоненциальную задержку, стратегии кэширования и обработку ошибок, см. в разделе Рекомендации в обзоре API.

  1. Используйте пагинацию для больших команд: Если в вашей команде более 100 пользователей, используйте конечные точки by-user с пагинацией, чтобы избежать тайм-аутов.
  2. Используйте кэширование: Конечные точки уровня Team и User поддерживают ETag. Сохраняйте ETag и используйте заголовки If-None-Match, чтобы сократить объём передаваемых данных.
  3. По возможности фильтруйте по пользователям: Если вам нужны данные только по конкретным пользователям, используйте параметр users, чтобы сократить время выполнения запроса.
  4. Диапазоны дат: Используйте разумные диапазоны дат (например, 1–3 месяца) для оптимальной производительности.