Admin API
Admin API позволяет программно получать доступ к данным вашей команды, включая сведения об участниках, метрики использования, информацию о расходах, группы каталога команды, доступ к моделям и Grok Bot.
- Admin API использует базовая аутентификация, при которой в качестве имени пользователя используется ваш API‑ключ.
- Подробные сведения о создании API‑ключей, методах аутентификации, ограничении частоты запросов и рекомендациях по лучшим практикам см. в разделе Обзор API.
Для действий на уровне всей организации во всех ваших командах см. Организации и API организации.
Эндпоинты
Получить участников команды
/teams/membersПолучение списка всех участников команды и их данных.
Поля ответа
teamMembers array
idstring - Закодированный идентификатор пользователя участника команды (например,user_PDSPmvukpYgZEDXsoNirw3CFhy). Экспорт OpenTelemetry передаёт то же значение в необязательном атрибуте ресурсаcursor.user.account_id.emailstring - Адрес электронной почты участника командыnamestring - Отображаемое имя участника командыrolestring - Роль в команде (например,member,owner)isRemovedboolean - Был ли участник удалён из команды
curl -X GET https://api.cursor.com/teams/members \ -u YOUR_API_KEY:Ответ:
{ "teamMembers": [ { "id": "user_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Alex", "email": "developer@company.com", "role": "member", "isRemoved": false }, { "id": "user_kljUvI0ASZORvSEXf9hV0ydcso", "name": "Sam", "email": "admin@company.com", "role": "owner", "isRemoved": false } ]}Получить журналы аудита
/teams/audit-logsПолучите события журналов аудита для вашей команды с возможностью фильтрации. Отслеживайте активность команды, события безопасности и изменения конфигурации. Ограничение частоты — 20 запросов в минуту на команду. См. лимиты запросов и рекомендации по использованию.
Параметры
startTime string | number
endTime string | number
eventTypes string
event_type через запятую, например login,add_user. Полный список значений и соответствующих им полей event_data см. в таблицах типов событийsearch string
user_email, event_type и event_id. Поле event_data в поиске не участвуетpage number
1pageSize number
100users string
Диапазон дат не может превышать 30 дней. Для более длинных периодов сделайте несколько запросов.
Форматы дат
Параметры startTime и endTime поддерживают несколько форматов:
- Относительные сокращения:
now,today,yesterday,7d(7 дней назад),5h(5 часов назад),300s(300 секунд назад) - Строки в формате ISO 8601:
2024-01-15T12:00:00Zили2024-01-15T10:00:00-05:00 - Формат YYYY-MM-DD:
2024-01-15(время по умолчанию — 00:00:00 UTC) - Временные метки Unix:
1705315200(в секундах) или1705315200000(в миллисекундах)
Примеры:
?startTime=7d&endTime=now- последние 7 дней?startTime=5h&endTime=now- последние 5 часов?startTime=2024-01-15&endTime=2024-01-20- конкретный диапазон дат?startTime=1705315200000&endTime=1705401600000- временные метки Unix
Фильтрация по пользователям
Параметр users принимает несколько форматов, разделённых запятыми:
- Адреса электронной почты:
developer@company.com,admin@company.com - Кодированные ID пользователей:
user_PDSPmvukpYgZEDXsoNirw3CFhy,user_kljUvI0ASZORvSEXf9hV0ydcso
Форматы можно смешивать: developer@company.com,12345,user_PDSPmvukpYgZEDXsoNirw3CFhy
Максимальное количество пользователей в одном запросе равно pageSize.
curl -X GET "https://api.cursor.com/teams/audit-logs?users=admin@company.com,developer@company.com&eventTypes=login,add_user" \ -u YOUR_API_KEY:Ответ:
События возвращаются в порядке от самых старых к самым новым. Каждый object в events включает application_type: grok_bot для Grok Bot, cursor для других surfaces Cursor или пустую строку, если приложение определить не удалось (в том числе для записей, созданных до появления этого поля). Поля event_data для каждого event_type перечислены в разделе Соответствие требованиям и мониторинг. old_value и new_value преобразуются в JSON, если хранящееся значение является корректным JSON.
В строках сценариев бот определяется полем event_data.sand_agent_id.
{ "events": [ { "event_id": "3b6d2c1e-5f8a-4a0b-9c7d-1e2f3a4b5c6d", "timestamp": "2024-01-15T10:15:00.000Z", "ip_address": "192.168.1.1", "user_email": "developer@company.com", "event_type": "login", "application_type": "cursor", "event_data": { "success": true, "login_type": "LOGIN_TYPE_WEB" } }, { "event_id": "8a1f0f0e-0d1b-4c7e-9b3a-2f6e1c9d4a55", "timestamp": "2024-01-15T12:30:00.000Z", "ip_address": "203.0.113.42", "user_email": "admin@company.com", "event_type": "add_user", "application_type": "cursor", "event_data": { "user_email": "developer@company.com", "role": "member", "source": "invite", "team_id": "12345", "invited_by_email": "admin@company.com", "invited_by_user_id": "4242", "invite_id": "3f9a1c2b" } } ], "pagination": { "page": 1, "pageSize": 100, "totalCount": 2, "totalPages": 1, "hasNextPage": false, "hasPreviousPage": false }, "params": { "teamId": 12345, "startDate": 1704729600000, "endDate": 1705334400000 }}Получение ежедневных данных об использовании
/teams/daily-usage-dataПолучение ежедневных метрик использования вашей команды. Данные агрегируются почасово — рекомендуем опрашивать этот эндпоинт не чаще одного раза в час. Ограничение: не более 20 запросов в минуту на команду. См. рекомендации.
Параметры
startDate число Обязательно
endDate number Обязательное
page число
pageSize включает постраничную навигацию и возвращает данные о всех участниках команды, у которых было членство в запрошенном диапазоне дат.pageSize число
page включает пагинацию и возвращает данные обо всех участниках команды, имевших членство в запрошенном диапазоне дат.Без параметров пагинации этот endpoint возвращает только активных пользователей (пользователей, проявлявших активность в указанный диапазон дат). Чтобы получить всех участников команды, укажите оба параметра: page и pageSize.
При использовании пагинации ответ включает поле isActive для каждого пользователя, которое показывает, был ли он активен в этот день. Участники, присоединившиеся после запрошенного периода, исключаются.
Диапазон дат не может превышать 30 дней. Для более длительного периода отправьте несколько запросов.
Поля subscriptionIncludedReqs, usageBasedReqs и apiKeyReqs учитывают необработанные события использования, а не оплачиваемые единицы запросов в прежних тарифах на основе запросов. Чтобы получить точное число оплачиваемых запросов, используйте эндпоинт /teams/filtered-usage-events и суммируйте значения поля requestsCosts.
Поля ответа
Каждый object в массиве data содержит:
userIdnumber — уникальный идентификатор пользователяdaystring — Дата, к которой относится эта запись (в формате ISO, например2024-03-18)datenumber — Дата в миллисекундах с начала эпохиemailstring — адрес электронной почты пользователяisActiveboolean — Была ли активность у пользователя в этот день (доступно только при пагинации)totalLinesAddednumber — Общее количество добавленных строк кодаtotalLinesDeletednumber — Общее количество удалённых строк кодаacceptedLinesAddednumber — количество добавленных строк, предложенных и принятых ИИacceptedLinesDeletednumber — количество удалённых строк, предложенных ИИ и принятых пользователемtotalAppliesnumber — Общее количество применений кода, написанного ИИtotalAcceptsnumber — Общее число принятых предложений ИИtotalRejectsnumber — Общее количество отклонённых предложений ИИtotalTabsShownnumber — Общее количество автодополнений Tab, показанных пользователюtotalTabsAcceptednumber — Общее число Tab Completions, принятых пользователемcomposerRequestsnumber — Количество запросов к ComposerchatRequestsnumber — Количество отправленных запросов в чатеagentRequestsnumber — Количество запросов, выполненных в режиме AgentcmdkUsagesnumber — Количество использований встроенного редактирования с помощью Cmd+KsubscriptionIncludedReqsnumber — Количество запросов, включённых в тариф подпискиapiKeyReqsnumber — Запросы через API-ключusageBasedReqsnumber — Запросы с оплатой по мере использования (сверх лимита)bugbotUsagesnumber — Количество использований BugbotmostUsedModelstring | null - Наиболее часто используемая за день модель ИИapplyMostUsedExtensionstring | null — Наиболее распространённое расширение файлов для операций примененияtabMostUsedExtensionstring | null — Наиболее распространённое расширение файлов для Tab CompletionsclientVersionstring | null — используемая версия клиента Cursor
# Получить данные только по активным пользователям (без пагинации)curl -X POST https://api.cursor.com/teams/daily-usage-data \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "startDate": 1710720000000, "endDate": 1710892800000 }'# Получить данные по ВСЕМ участникам команды (с пагинацией)curl -X POST https://api.cursor.com/teams/daily-usage-data \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "startDate": 1710720000000, "endDate": 1710892800000, "page": 1, "pageSize": 1000 }'Ответ (без пагинации — только активные пользователи):
{ "data": [ { "userId": 12345, "day": "2024-03-18", "date": 1710720000000, "isActive": true, "totalLinesAdded": 1543, "totalLinesDeleted": 892, "acceptedLinesAdded": 1102, "acceptedLinesDeleted": 645, "totalApplies": 87, "totalAccepts": 73, "totalRejects": 14, "totalTabsShown": 342, "totalTabsAccepted": 289, "composerRequests": 45, "chatRequests": 128, "agentRequests": 12, "cmdkUsages": 67, "subscriptionIncludedReqs": 180, "apiKeyReqs": 0, "usageBasedReqs": 5, "bugbotUsages": 3, "mostUsedModel": "gpt-5", "applyMostUsedExtension": ".tsx", "tabMostUsedExtension": ".ts", "clientVersion": "0.25.1", "email": "developer@company.com" } ], "period": { "startDate": 1710720000000, "endDate": 1710892800000 }}Ответ (с постраничной разбивкой — все члены команды):
{ "data": [ { "userId": 12345, "day": "2024-03-18", "date": 1710720000000, "isActive": true, "totalLinesAdded": 1543, "totalLinesDeleted": 892, "acceptedLinesAdded": 1102, "acceptedLinesDeleted": 645, "totalApplies": 87, "totalAccepts": 73, "totalRejects": 14, "totalTabsShown": 342, "totalTabsAccepted": 289, "composerRequests": 45, "chatRequests": 128, "agentRequests": 12, "cmdkUsages": 67, "subscriptionIncludedReqs": 180, "apiKeyReqs": 0, "usageBasedReqs": 5, "bugbotUsages": 3, "mostUsedModel": "gpt-5", "applyMostUsedExtension": ".tsx", "tabMostUsedExtension": ".ts", "clientVersion": "0.25.1", "email": "developer@company.com" }, { "userId": 12346, "day": "2024-03-18", "date": 1710720000000, "isActive": false, "totalLinesAdded": 0, "totalLinesDeleted": 0, "acceptedLinesAdded": 0, "acceptedLinesDeleted": 0, "totalApplies": 0, "totalAccepts": 0, "totalRejects": 0, "totalTabsShown": 0, "totalTabsAccepted": 0, "composerRequests": 0, "chatRequests": 0, "agentRequests": 0, "cmdkUsages": 0, "subscriptionIncludedReqs": 0, "apiKeyReqs": 0, "usageBasedReqs": 0, "bugbotUsages": 0, "mostUsedModel": null, "applyMostUsedExtension": null, "tabMostUsedExtension": null, "clientVersion": null, "email": "inactive-user@company.com" } ], "period": { "startDate": 1710720000000, "endDate": 1710892800000 }, "pagination": { "page": 1, "pageSize": 1000, "totalUsers": 150, "totalPages": 1, "hasNextPage": false, "hasPreviousPage": false }}Получить данные о расходах
/teams/spendПолучите информацию о расходах за текущий расчетный период с возможностью поиска, сортировки и постраничной навигации.
Параметры
searchTerm string
sortBy string
amount, date, user. По умолчанию: datesortDirection string
asc, desc. По умолчанию: descpage number
1pageSize number
Поля ответа
Каждый объект в teamMemberSpend содержит:
userIdstring - Закодированный идентификатор пользователя (например,user_PDSPmvukpYgZEDXsoNirw3CFhy). Использует то же пространство имён идентификаторов, что иteamMembers[].idиз/teams/members.namestring - Отображаемое имя пользователяemailstring - Адрес электронной почты пользователяrolestring - Роль в команде (например,member,owner)spendCentsnumber - Расходы по запросу в центах за текущий расчетный период и не включает включенное использованиеoverallSpendCentsnumber - Общая сумма расходов в центах за текущий расчетный период, включая как расходы по запросу, так и включенное использованиеfastPremiumRequestsnumber - Количество премиальных запросов с оплатой за использование за расчетный периодhardLimitOverrideDollarsnumber - Индивидуальное переопределение жесткого лимита расходов в долларах для этого пользователя (0 означает отсутствие переопределения)monthlyLimitDollarsnumber | null - Ежемесячный лимит расходов в долларах, установленный для этого пользователя, илиnull, если лимит не установленeffectivePerUserLimitDollarsnumber - Текущий применяемый лимит расходов в долларах для пользователя, вычисляемый на основеmonthlyLimitDollarsиhardLimitOverrideDollars
4 июня 2026 года мы добавили дополнительную точность к полям spendCents и overallSpendCents, чтобы избежать ошибок округления при сравнении результатов с суммами в счёте.
curl -X POST https://api.cursor.com/teams/spend \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "searchTerm": "alex@company.com", "page": 2, "pageSize": 25 }'Ответ:
{ "teamMemberSpend": [ { "userId": "user_PDSPmvukpYgZEDXsoNirw3CFhy", "spendCents": 2450.125487, "overallSpendCents": 2450.125487, "fastPremiumRequests": 1250, "name": "Alex", "email": "developer@company.com", "role": "member", "hardLimitOverrideDollars": 100, "monthlyLimitDollars": 200, "effectivePerUserLimitDollars": 100 }, { "userId": "user_kljUvI0ASZORvSEXf9hV0ydcso", "spendCents": 1875.500123, "overallSpendCents": 3200.750456, "fastPremiumRequests": 980, "name": "Sam", "email": "admin@company.com", "role": "owner", "hardLimitOverrideDollars": 0, "monthlyLimitDollars": null, "effectivePerUserLimitDollars": 50 } ], "subscriptionCycleStart": 1708992000000, "totalMembers": 15, "totalPages": 1}Получить данные о событиях использования
/teams/filtered-usage-eventsПолучите подробные события использования для вашей команды с возможностями фильтрации, поиска и пагинации. Этот эндпоинт предоставляет детальную информацию о вызовах API, использовании моделей, потреблении токенов и расходах. Данные агрегируются почасово. Рекомендуем опрашивать этот эндпоинт не чаще одного раза в час. Ограничение — 60 запросов в минуту на команду. См. руководство по API.
Расчёт стоимости: Чтобы сверить расходы на уровне отдельных событий с общими суммами в /teams/spend, суммируйте поле chargedCents по всем событиям. Это поле включает как стоимость модели, так и ставку токенов Cursor, если для запроса действует эта ставка, и соответствует итоговым значениям на дашборде. Это работает как для тарификации по токенам, так и для тарифов с тарификацией по запросам.
Поле cursorTokenFee обозначает ставку токенов Cursor и присутствует только тогда, когда эта ставка применяется к запросу к сторонней модели. Это также относится к случаям, когда режим Auto направляет запрос к сторонней модели. Собственные модели Cursor, такие как Grok и Composer, и аккаунты Enterprise с тарификацией по запросам не включают эту комиссию. См. ставку токенов Cursor.
Параметры
startDate number
endDate number
startDate и endDate — это моменты времени с точностью до миллисекунд, и
обе границы задаются включительно. Событие ровно в 2026-05-08T00:00:00.000Z
попадает в диапазон, если endDate равно 1778198400000. Для неперекрывающихся ежедневных
окон приёма данных задайте endDate предыдущего окна как последнюю
миллисекунду дня, например 2026-05-07T23:59:59.999Z.
userId number
page number
1pageSize number
100. Максимум: 1000.email string
serviceAccountId string
cloudAgentId string
*, чтобы получить события со всех запусков облачного агента.automationId string
*, чтобы вернуть события из всех автоматизаций.hostingType string
CLOUD- запуски под управлением CursorSELF_HOSTED- любой запуск в собственной инфраструктуре (воркер Team Pool или воркер My Machines)SELF_HOSTED_POOL- только воркеры Team PoolSELF_HOSTED_MACHINE- только персональные воркеры "My Machine"
Нераспознанное значение hostingType возвращает ошибку 400, а не пустой результат, поэтому опечатку нельзя принять за реально нулевые расходы на self-hosted. Этот фильтр учитывает только расходы на inference; self-hosted-вычисления выполняются на ваших собственных машинах и никогда не тарифицируются в Cursor.
При указании нескольких фильтров эндпоинт объединяет их оператором AND. Например, automationId и serviceAccountId вернут события, соответствующие обоим значениям.
Поля ответа
Каждый объект в usageEvents содержит:
timestampstring - Метка времени события в миллисекундах Unix-эпохи (в виде строки)userEmailstring - Адрес электронной почты пользователя, отправившего запросserviceAccountIdstring | undefined - ID сервисного аккаунта, выполнившего запрос. Отсутствует для событий, инициированных пользователями.serviceAccountNamestring | undefined - Отображаемое имя сервисного аккаунта, который отправил запрос. Отсутствует для событий, инициированных пользователями.cloudAgentIdstring | undefined - ID запуска облачного агента, к которому относится это событие. Отсутствует для событий, не связанных с облачными агентами.automationIdstring | undefined - UUID автоматизации, к которой относится это событие. Отсутствует для событий вне автоматизаций.conversationIdstring | undefined - ID диалога (сессии агента), в котором было сгенерировано это событие. Используйте его, чтобы отнести расходы к сессии или в качестве ключа для объединения с другими источниками, содержащими ID диалогов, например API отслеживания ИИ-кода. Отсутствует для событий без связанного диалога.modelstring - Модель ИИ, использованная для запросаkindstring - Категория тарификации (например,Usage-based,Included in Business)maxModeboolean - Был ли запрос выполнен в максимальном режимеrequestsCostsnumber - Стоимость в единицах запросовisTokenBasedCallboolean - Тарифицировался ли запрос по числу токеновisChargeableboolean - Приводит ли это событие к списанию средствisHeadlessboolean - Выполнен ли этот запрос без подключённого клиента (например, фоновыми агентами)tokenUsageobject | undefined - Сведения об использовании токенов (присутствуют, когдаisTokenBasedCallравноtrue):inputTokensnumber - Количество потреблённых входных токеновoutputTokensnumber - Количество сгенерированных выходных токеновcacheWriteTokensnumber - Количество токенов, записанных в кэшcacheReadTokensnumber - Количество токенов, прочитанных из кэшаtotalCentsnumber - Общая стоимость модели в центахdiscountPercentOffnumber | undefined - Размер применённой скидки в процентах, если есть
chargedCentsnumber - Общая сумма, списанная в центах за это событие. Для запросов к сторонним моделям, на которые распространяется ставка токенов Cursor, это поле включает стоимость модели и ставку токенов Cursor. Используйте это поле, чтобы сверить расходы на уровне отдельных событий с итоговыми значениями/teams/spend. Работает как для тарифов с оплатой по токенам, так и для тарифов с оплатой по запросам.cursorTokenFeenumber | undefined - Ставка токенов Cursor в центах. Присутствует только тогда, когда эта ставка применяется к запросу к сторонней модели (в том числе когда Auto направляет запрос к сторонней модели).
curl -X POST https://api.cursor.com/teams/filtered-usage-events \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "startDate": 1748411762359, "endDate": 1751003762359, "email": "developer@company.com", "page": 1, "pageSize": 25 }'Ответ:
{ "totalUsageEventsCount": 113, "pagination": { "numPages": 5, "currentPage": 1, "pageSize": 25, "hasNextPage": true, "hasPreviousPage": false }, "usageEvents": [ { "timestamp": "1750979225854", "userEmail": "developer@company.com", "conversationId": "8f2e4a1b-6c3d-4e5f-9a7b-2d1c8e6f4a3b", "model": "claude-4.5-sonnet", "kind": "Usage-based", "maxMode": true, "requestsCosts": 5, "isTokenBasedCall": true, "isChargeable": true, "isHeadless": false, "tokenUsage": { "inputTokens": 126, "outputTokens": 450, "cacheWriteTokens": 6112, "cacheReadTokens": 11964, "totalCents": 20.18232 }, "chargedCents": 21.36232, "cursorTokenFee": 1.18 }, { "timestamp": "1750979173824", "userEmail": "developer@company.com", "conversationId": "8f2e4a1b-6c3d-4e5f-9a7b-2d1c8e6f4a3b", "model": "claude-4.5-sonnet", "kind": "Usage-based", "maxMode": true, "requestsCosts": 10, "isTokenBasedCall": true, "isChargeable": true, "isHeadless": false, "tokenUsage": { "inputTokens": 5805, "outputTokens": 311, "cacheWriteTokens": 11964, "cacheReadTokens": 0, "totalCents": 40.167, "discountPercentOff": 10 }, "chargedCents": 37.33, "cursorTokenFee": 1.18 }, { "timestamp": "1750978339901", "userEmail": "admin@company.com", "model": "claude-4-sonnet-thinking", "kind": "Included in Business", "maxMode": true, "requestsCosts": 1.4, "isTokenBasedCall": false, "isChargeable": false, "isHeadless": false, "chargedCents": 8 } ], "period": { "startDate": 1748411762359, "endDate": 1751003762359 }}Пример использования сервисного аккаунта:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "startDate": 1748411762359, "endDate": 1751003762359, "serviceAccountId": "sa_abc123", "page": 1, "pageSize": 10 }'Ответ сервисного аккаунта:
{ "totalUsageEventsCount": 1, "pagination": { "numPages": 1, "currentPage": 1, "pageSize": 10, "hasNextPage": false, "hasPreviousPage": false }, "usageEvents": [ { "timestamp": "1750979225854", "userEmail": "agent-runner@company.com", "serviceAccountId": "sa_abc123", "serviceAccountName": "Nightly CI Agent", "conversationId": "3b9d7c2e-1f4a-4b8c-a6d5-e9f0a2b4c6d8", "model": "claude-4.5-sonnet", "kind": "Usage-based", "maxMode": true, "requestsCosts": 5, "isTokenBasedCall": true, "isChargeable": true, "isHeadless": true, "tokenUsage": { "inputTokens": 126, "outputTokens": 450, "cacheWriteTokens": 6112, "cacheReadTokens": 11964, "totalCents": 20.18232 }, "chargedCents": 21.36232, "cursorTokenFee": 1.18 } ], "period": { "startDate": 1748411762359, "endDate": 1751003762359 }}Пример использования автоматизации:
Используйте UUID автоматизации для получения её событий использования. Атрибуция автоматизации работает для автоматизаций, выполняемых от имени пользователя или сервисного аккаунта.
curl -X POST https://api.cursor.com/teams/filtered-usage-events \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "startDate": 1748411762359, "endDate": 1751003762359, "automationId": "7fc64f90-6d7a-4a5d-91b1-bd1f529a85dd", "page": 1, "pageSize": 100 }'Каждое совпадающее событие содержит поля automationId и cloudAgentId. Сложите значения chargedCents по всем событиям, чтобы вычислить общую стоимость автоматизации.
Пример расходов self-hosted агента:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "startDate": 1748411762359, "endDate": 1751003762359, "hostingType": "SELF_HOSTED", "page": 1, "pageSize": 10 }'Задать лимит расходов пользователя
/teams/user-spend-limitУстанавливает лимиты расходов для отдельных участников команды. Это позволяет контролировать, сколько каждый пользователь может потратить на использование ИИ внутри вашей команды. Ограничение частоты запросов — 250 запросов в минуту на команду. См. ограничения частоты запросов.
Чтобы обновить до 100 участников за один запрос, используйте Массовую установку лимитов расходов пользователей (предварительная версия).
Параметры
userEmail string Обязательный
spendLimitDollars number | null Обязательный
null, чтобы убрать лимит.- Доступность: только для Enterprise
- Пользователь уже должен быть участником вашей команды
- Принимаются только целые значения (без дробных сумм)
- При значении
spendLimitDollars0 лимит будет равен $0 - При значении
spendLimitDollarsnullлимит будет полностью снят
curl -X POST https://api.cursor.com/teams/user-spend-limit \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "userEmail": "developer@company.com", "spendLimitDollars": 100 }'Успешный ответ:
{ "outcome": "success", "message": "Spend limit set to $100 for user developer@company.com"}Ответ с ошибкой:
{ "outcome": "error", "message": "Invalid email format"}Массовая установка лимитов расходов пользователей (предварительная версия)
/teams/user-spend-limitsЗадайте лимиты расходов сразу для 100 участников команды одним запросом. Ограничение частоты запросов: 20 запросов в минуту на команду. См. ограничения частоты запросов.
Этот массовый маршрут доступен в предварительной версии и может измениться. Формат запроса, поля ответа и поведение при ошибках могут измениться до общей доступности.
Параметры
updates array Обязательный
userEmailstring — адрес электронной почты участника командыspendLimitDollarsnumber | null — целочисленный лимит расходов в долларах. Укажитеnull, чтобы снять лимит.
Поля ответа
requestedCountnumber — количество обновлений в запросеupdatedCountnumber — количество изменённых лимитовunchangedCountnumber — количество лимитов, для которых запрошенное значение уже было заданоfailedCountnumber — количество обновлений, которые Cursor не смог применитьresultsarray — результаты в порядке следования запроса. Каждый результат включаетuserEmailи статусupdated,unchangedилиfailed. Неудачные результаты также включают сообщениеerror.
- Доступность: только для Enterprise. Массовый эндпоинт внедряется постепенно; команды, для которых он ещё не включён, получают ответ
403 - Если участник команды не найден, для него выдаётся результат
failed, при этом остальные обновления применяются - Некорректные поля запроса, дублирующиеся адреса электронной почты или более 100 обновлений приводят к ответу
400, и ни одно обновление не применяется - Повторное выполнение успешного обновления возвращает
unchangedи не создаёт новое событие аудита
curl -X POST https://api.cursor.com/teams/user-spend-limits \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "updates": [ { "userEmail": "developer@company.com", "spendLimitDollars": 100 }, { "userEmail": "contractor@company.com", "spendLimitDollars": null }, { "userEmail": "former-employee@company.com", "spendLimitDollars": 50 } ] }'Ответ:
{ "requestedCount": 3, "updatedCount": 1, "unchangedCount": 1, "failedCount": 1, "results": [ { "userEmail": "developer@company.com", "status": "updated" }, { "userEmail": "contractor@company.com", "status": "unchanged" }, { "userEmail": "former-employee@company.com", "status": "failed", "error": "User not found in team" } ]}Удалить участника команды
/teams/remove-memberПрограммно удалите участника из вашей команды. Полезно для автоматизации процессов офбординга или интеграции с HR-системами. Ограничение частоты запросов — 50 запросов в минуту на команду. См. лимит запросов.
Параметры
userId string
user_PDSPmvukpYgZEDXsoNirw3CFhy). Обязателен, если email не указан.email string
userId не указан.- Доступность: только для Enterprise
- Укажите либо
userId, либоemail, но не оба сразу - После удаления как минимум один платный участник должен остаться в команде
- После удаления как минимум один администратор (owner или free-owner) должен остаться в команде
curl -X POST https://api.cursor.com/teams/remove-member \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "email": "developer@company.com" }'Ответ:
{ "success": true, "userId": "user_PDSPmvukpYgZEDXsoNirw3CFhy", "hasBillingCycleUsage": true}Удаление по user ID:
curl -X POST https://api.cursor.com/teams/remove-member \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "userId": "user_PDSPmvukpYgZEDXsoNirw3CFhy" }'Ответы об ошибке:
{ "error": "User is not a member of this team"}{ "error": "Either userId or email must be provided"}{ "error": "Only one of userId or email should be provided, not both"}Получить списки блокировки репозиториев команды
/settings/repo-blocklists/reposПолучите все списки блокировки репозиториев, настроенные для вашей команды. Добавляйте репозитории и используйте шаблоны, чтобы файлы или каталоги не индексировались и не использовались в качестве контекста.
Примеры шаблонов
Распространённые шаблоны списка блокировки:
*— заблокировать весь репозиторий*.env— заблокировать все файлы .envconfig/*— заблокировать все файлы в каталоге config**/*.secret— заблокировать все файлы .secret в любом подкаталогеsrc/api/keys.ts— заблокировать конкретный файл
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \ -u YOUR_API_KEY:Ответ:
{ "repos": [ { "id": "repo_123", "url": "https://github.com/company/sensitive-repo", "patterns": ["*.env", "config/*", "secrets/**"] }, { "id": "repo_456", "url": "https://github.com/company/internal-tools", "patterns": ["*"] } ]}Добавить или обновить списки блокировки репозиториев
/settings/repo-blocklists/repos/upsertЗаменяет существующие списки блокировки репозиториев для указанных репозиториев. Этот эндпоинт перезаписывает шаблоны только для переданных репозиториев. Все остальные репозитории не затрагиваются.
Параметры
repos array обязательный
Массив объектов списка блокировки репозиториев. Каждый объект репозитория должен содержать:
urlstring - URL репозитория для добавления в список блокировкиpatternsstring[] - массив шаблонов файлов для блокировки (поддерживаются шаблоны в формате glob)
curl -X POST https://api.cursor.com/settings/repo-blocklists/repos/upsert \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "repos": [ { "url": "https://github.com/company/sensitive-repo", "patterns": ["*.env", "config/*", "secrets/**"] }, { "url": "https://github.com/company/internal-tools", "patterns": ["*"] } ] }'Ответ:
{ "repos": [ { "id": "repo_123", "url": "https://github.com/company/sensitive-repo", "patterns": ["*.env", "config/*", "secrets/**"] }, { "id": "repo_456", "url": "https://github.com/company/internal-tools", "patterns": ["*"] } ]}Удалить список блокировки репозитория
/settings/repo-blocklists/repos/:repoIdУдаляет указанный репозиторий из списка блокировки. При успешном удалении возвращает 204 No Content.
Параметры
repoId string обязательный
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \ -u YOUR_API_KEY:Ответ:
204 No ContentГруппы каталога команды
Маршруты Team Admin API по адресу /teams/directory-groups управляют группами каталога команды. Такие группы задают расходы и политики в пределах одной команды. О том, чем они отличаются от групп уровня организации, см. Organization Groups, а также Группы выставления счетов.
Сопоставьте группу с командой, если состав участников этой команды должна определять Organization Group. Создавайте группы каталога команды, просматривайте их, а также добавляйте и удаляйте участников с помощью Team API-ключ. Настройка через дашборд и SCIM описана в разделе группы каталога команды.
Эти маршруты относятся к другому API, нежели группы выставления счетов. Выберите нужный путь и идентификатор по таблице:
| Группы | Путь | ID |
|---|---|---|
| Organization Groups | /organizations/groups | id использует префикс g_. В ответах также возвращается publicId с префиксом grp_. См. Organization Groups. |
| Группы каталога команды | /teams/directory-groups | Публичный идентификатор использует префикс team_group_…, например team_group_01k2ja2000e0080000000000n2. |
| Группы выставления счетов | /teams/groups | group_… |
:groupId — это публичный идентификатор группы каталога команды. Он использует префикс team_group_…. Не передавайте идентификаторы Organization Group g_ или grp_, а также идентификаторы группы выставления счетов group_….
- Аутентификация: Team API-ключ (базовая аутентификация). Для чтения требуется
read:*, для записи —admin:*. Ключи сadmin:*подходят для обоих случаев. Запись с ключомread:*возвращает401. - ID групп: Каждый
:groupId— это публичный идентификатор группы с префиксомteam_group_…, напримерteam_group_01k2ja2000e0080000000000n2. Organization Groups используютg_иgrp_. Группы выставления счетов используютgroup_…. - Пагинация: Маршруты списков принимают
pageиpageSize. Оба значения должны быть положительными целыми числами. - Ограничение частоты запросов: Каждый маршрут допускает 20 запросов в минуту на команду. См. ограничения частоты запросов и рекомендации по лучшим практикам.
- Группы, синхронизированные через SCIM: Управляйте составом участников в своём провайдере идентификации. Запросы на добавление и удаление участников для таких групп возвращают
400.
Для маршрутов групп действуют общие ответы об ошибках:
| Статус | Когда |
|---|---|
400 | Некорректный ID группы, значение пагинации или тело запроса |
401 | Недействительный API-ключ либо у ключа отсутствует область read:* (чтение) или admin:* (запись) |
404 | Группа не существует в этой команде |
429 | Превышено ограничение частоты запросов. Ответ содержит заголовок Retry-After: 60 |
Список групп каталога команды
/teams/directory-groupsПолучить группы каталога команды для команды, к которой привязан ваш API-ключ.
Параметры запроса
page number
1.pageSize number
50. Максимум — 200; значения больше 200 усекаются до 200.Поля ответа
Каждый object в groups содержит:
idстрока — публичный идентификатор группы с префиксомteam_group_…. Используйте это значение как:groupIdв остальных маршрутах.nameстрока — название группыmemberCountnumber — количество участников в группеmonthlySpendingLimitDollarsnumber | null — месячный лимит расходов в целых долларах для каждого участника группы.nullозначает, что у группы нет лимита.createdAtстрока — время создания в формате ISO 8601updatedAtстрока — время последнего обновления в формате ISO 8601
pagination object
page, pageSize, totalCount, totalPages, hasNextPage и hasPreviousPage.curl -X GET "https://api.cursor.com/teams/directory-groups?page=1&pageSize=50" \ -u YOUR_API_KEY:Ответ:
{ "groups": [ { "id": "team_group_01k2ja2000e0080000000000n2", "name": "Engineering", "memberCount": 12, "monthlySpendingLimitDollars": 500, "createdAt": "2026-01-15T10:30:00.000Z", "updatedAt": "2026-01-20T14:22:00.000Z" }, { "id": "team_group_01k2jb4000e0080000000000p7", "name": "Design", "memberCount": 8, "monthlySpendingLimitDollars": null, "createdAt": "2026-01-16T09:00:00.000Z", "updatedAt": "2026-01-16T09:00:00.000Z" } ], "pagination": { "page": 1, "pageSize": 50, "totalCount": 2, "totalPages": 1, "hasNextPage": false, "hasPreviousPage": false }}Получить группу каталога команды
/teams/directory-groups/:groupIdПолучить одну группу каталога команды.
Параметры
groupId строка Обязательный
team_group_…, например team_group_01k2ja2000e0080000000000n2. Идентификаторы Organization Group вида g_ или grp_ и идентификаторы группы выставления счетов вида group_… возвращают 400 или 404.Поля ответа
group object содержит id, name, memberCount, monthlySpendingLimitDollars, createdAt и updatedAt. Эти поля совпадают с полями ответа Список групп каталога команды.
curl -X GET https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2 \ -u YOUR_API_KEY:Ответ:
{ "group": { "id": "team_group_01k2ja2000e0080000000000n2", "name": "Engineering", "memberCount": 12, "monthlySpendingLimitDollars": 500, "createdAt": "2026-01-15T10:30:00.000Z", "updatedAt": "2026-01-20T14:22:00.000Z" }}Создать группу каталога команды
/teams/directory-groupsСоздание группы каталога команды с ручным управлением составом участников. Чтобы создать группу, синхронизированную через SCIM, синхронизируйте её из вашего провайдера идентификации. См. SCIM.
Тело запроса
name строка Обязательный
Поля ответа
Возвращает 201 Created с новым object group. object содержит id, name, memberCount, monthlySpendingLimitDollars, createdAt и updatedAt. Поле id — это публичный идентификатор группы с префиксом team_group_….
Ошибки
400— имя группы отсутствует, пустое или уже используется другой активной группой.
curl -X POST https://api.cursor.com/teams/directory-groups \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "name": "Engineering" }'Ответ:
{ "group": { "id": "team_group_01k2ja2000e0080000000000n2", "name": "Engineering", "memberCount": 0, "monthlySpendingLimitDollars": null, "createdAt": "2026-01-15T10:30:00.000Z", "updatedAt": "2026-01-15T10:30:00.000Z" }}Обновление группы каталога команды
/teams/directory-groups/:groupIdОбновляет название группы или её месячный лимит расходов. Обновление частичное: укажите хотя бы одно поле — все пропущенные поля сохранят текущие значения.
Параметры
groupId строка Обязательный
team_group_…, например team_group_01k2ja2000e0080000000000n2.Тело запроса
name строка
monthlySpendingLimitDollars number
0 до 2147483647.clearMonthlySpendingLimitDollars boolean
true, чтобы снять лимит расходов группы. Не передавайте monthlySpendingLimitDollars в этом же запросе.Поля ответа
Возвращает обновлённый object group с полями id, name, memberCount, monthlySpendingLimitDollars, createdAt и updatedAt.
Ошибки
400- В запросе нет полей для обновления, указано недопустимое значение, используется название другой активной группы либо лимит расходов одновременно задаётся и сбрасывается в одном запросе.
curl -X PATCH https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2 \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "name": "Platform Engineering", "monthlySpendingLimitDollars": 500 }'Ответ:
{ "group": { "id": "team_group_01k2ja2000e0080000000000n2", "name": "Platform Engineering", "memberCount": 12, "monthlySpendingLimitDollars": 500, "createdAt": "2026-01-15T10:30:00.000Z", "updatedAt": "2026-01-20T14:22:00.000Z" }}Удаление группы каталога команды
/teams/directory-groups/:groupIdУдаляет группу каталога команды. Группа должна быть пустой: перед удалением исключите из неё всех участников.
Параметры
groupId строка Обязательный
team_group_…, например team_group_01k2ja2000e0080000000000n2.Ответ
После удаления группы возвращает 204 No Content.
Ошибки
400— в группе ещё есть участники либо у группы есть активное сопоставление SCIM.
Через эту конечную точку нельзя удалить группу с активным сопоставлением SCIM. Удалите сопоставление в дашборде, исключите всех участников, а затем удалите группу.
curl -X DELETE https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2 \ -u YOUR_API_KEY:Ответ: 204 No Content
Список участников группы каталога команды
/teams/directory-groups/:groupId/membersПолучить участников группы каталога команды.
Параметры
groupId строка Обязательный
team_group_…, например team_group_01k2ja2000e0080000000000n2.Параметры запроса
page number
1.pageSize number
50. Максимум — 200; значения больше 200 приводятся к 200.Поля ответа
Каждый object в members содержит:
userIdстрока — публичный идентификатор пользователя с префиксомuser_nameстрока — отображаемое имя участникаemailстрока — адрес электронной почты участникаjoinedAtстрока — время добавления участника в группу в формате ISO 8601
pagination object
page, pageSize, totalCount, totalPages, hasNextPage и hasPreviousPage.curl -X GET "https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2/members?page=1&pageSize=50" \ -u YOUR_API_KEY:Ответ:
{ "members": [ { "userId": "user_abc123", "name": "Alex Developer", "email": "alex@company.com", "joinedAt": "2026-01-15T10:30:00.000Z" }, { "userId": "user_def456", "name": "Sam Engineer", "email": "sam@company.com", "joinedAt": "2026-01-16T09:15:00.000Z" } ], "pagination": { "page": 1, "pageSize": 50, "totalCount": 2, "totalPages": 1, "hasNextPage": false, "hasPreviousPage": false }}Добавление участников в группу каталога команды
/teams/directory-groups/:groupId/members/bulk-addДобавляет участников в группу каталога команды, управляемую вручную.
Параметры
groupId строка обязательный
team_group_…, например team_group_01k2ja2000e0080000000000n2.Тело запроса
userIds строка[] обязательный
user_. Один запрос может включать до 100 пользователей.Поля ответа
addedCount number
Группы, синхронизированные через SCIM, отклоняют ручные изменения состава участников с ответом 400.
Управляйте их составом в своём провайдере идентификации.
curl -X POST https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2/members/bulk-add \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "userIds": ["user_abc123", "user_def456"] }'Ответ:
{ "addedCount": 2}Удаление участников из группы каталога команды
/teams/directory-groups/:groupId/members/bulk-removeУдаляет участников из группы каталога команды, управляемой вручную.
Параметры
groupId строка обязательный
team_group_…, например team_group_01k2ja2000e0080000000000n2.Тело запроса
userIds строка[] обязательный
user_. Один запрос может включать до 100 пользователей.Поля ответа
removedCount number
Группы, синхронизированные через SCIM, отклоняют ручные изменения состава участников с ответом 400.
Управляйте их составом в своём провайдере идентификации.
curl -X POST https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2/members/bulk-remove \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "userIds": ["user_def456"] }'Ответ:
{ "removedCount": 1}Группы выставления счетов
Группы выставления счетов позволяют администраторам Enterprise отслеживать и управлять расходами по группам пользователей. Эта функция полезна для отчётности, внутреннего распределения затрат и бюджетирования.
Участники могут одновременно состоять только в одной группе выставления счетов. Участники, не назначенные ни в одну группу, попадают в зарезервированную группу Unassigned.
Группы выставления счетов находятся по адресу /teams/groups и используют идентификаторы вида group_…. Группы каталога команды находятся по адресу /teams/directory-groups и используют идентификаторы вида team_group_…. Эти два API не принимают идентификаторы друг друга.
Список групп
/teams/groupsПолучить список всех групп выставления счетов вашей команды с данными о расходах за текущий биллинговый цикл.
Параметры
billingCycle строка
2025-01-15), определяющая, какой биллинговый цикл запрашивать. По умолчанию используется текущий цикл.curl -X GET "https://api.cursor.com/teams/groups?billingCycle=2025-01-15" \ -u YOUR_API_KEY:Ответ:
{ "groups": [ { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Engineering", "type": "BILLING", "directoryGroupId": null, "memberCount": 12, "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-20T14:22:00.000Z", "spendCents": 245000, "currentMembers": [ { "userId": "user_abc123", "name": "Alex Developer", "email": "alex@company.com", "joinedAt": "2024-01-15T10:30:00.000Z", "leftAt": null, "spendCents": 12500 } ], "formerMembers": [], "dailySpend": [ { "date": "2025-01-15", "spendCents": 8500 }, { "date": "2025-01-16", "spendCents": 9200 } ] }, { "id": "group_kljUvI0ASZORvSEXf9hV0ydcso", "name": "Design", "type": "BILLING", "directoryGroupId": "dir_group_abc123xyz", "memberCount": 5, "createdAt": "2024-01-16T09:00:00.000Z", "updatedAt": "2024-01-16T09:00:00.000Z", "spendCents": 87500, "currentMembers": [], "formerMembers": [], "dailySpend": [] } ], "unassignedGroup": { "id": "group_unassigned", "name": "Unassigned", "type": "BILLING", "directoryGroupId": null, "memberCount": 3, "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z", "spendCents": 15000, "currentMembers": [], "formerMembers": [], "dailySpend": [] }, "billingCycle": { "cycleStart": "2025-01-01T00:00:00.000Z", "cycleEnd": "2025-02-01T00:00:00.000Z" }}Получить группу
/teams/groups/:groupIdПолучить одну биллинговую группу с её участниками и данными о расходах за текущий биллинговый цикл.
Параметры
groupId string Обязательный
group_PDSPmvukpYgZEDXsoNirw3CFhy)billingCycle string
2025-01-15) для указания биллингового цикла, по которому выполняется запрос. По умолчанию используется текущий цикл.curl -X GET "https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy?billingCycle=2025-01-15" \ -u YOUR_API_KEY:Ответ:
{ "group": { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Engineering", "type": "BILLING", "directoryGroupId": null, "memberCount": 3, "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-20T14:22:00.000Z", "spendCents": 125000, "currentMembers": [ { "userId": "user_abc123", "name": "Alex Developer", "email": "alex@company.com", "joinedAt": "2024-01-15T10:30:00.000Z", "leftAt": null, "spendCents": 75000, "dailySpend": [ { "date": "2025-01-15", "spendCents": 5000 }, { "date": "2025-01-16", "spendCents": 7500 } ] }, { "userId": "user_def456", "name": "Sam Engineer", "email": "sam@company.com", "joinedAt": "2024-01-16T09:15:00.000Z", "leftAt": null, "spendCents": 50000, "dailySpend": [ { "date": "2025-01-15", "spendCents": 3500 }, { "date": "2025-01-16", "spendCents": 4200 } ] } ], "formerMembers": [ { "userId": "user_xyz789", "name": "Former Member", "email": "former@company.com", "joinedAt": "2024-01-10T08:00:00.000Z", "leftAt": "2024-01-14T17:00:00.000Z", "spendCents": 0 } ], "dailySpend": [ { "date": "2025-01-15", "spendCents": 8500 }, { "date": "2025-01-16", "spendCents": 11700 } ] }, "billingCycle": { "cycleStart": "2025-01-01T00:00:00.000Z", "cycleEnd": "2025-02-01T00:00:00.000Z" }}Создать группу
/teams/groupsСоздаёт новую биллинговую группу. Ограничение частоты запросов — 20 запросов в минуту на команду.
Параметры
name string Обязательный
type string
BILLING. Значение по умолчанию: BILLINGcurl -X POST https://api.cursor.com/teams/groups \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "name": "Engineering" }'Ответ:
{ "group": { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Engineering", "type": "BILLING", "directoryGroupId": null, "memberCount": 0, "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-15T10:30:00.000Z", "members": [] }}Обновить группу
/teams/groups/:groupIdОбновить название биллинговой группы или привязку к группе в директории. Ограничение частоты запросов — 20 запросов в минуту на команду.
За один запрос можно обновить только одно поле. Чтобы обновить и название, и привязку к директории, выполните отдельные запросы.
Параметры
groupId string обязательный
name string
directoryGroupId string | null
null, чтобы отключить синхронизацию с директориейcurl -X PATCH https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "name": "Platform Engineering" }'Ответ:
{ "group": { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Platform Engineering", "type": "BILLING", "directoryGroupId": null, "memberCount": 3, "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-25T16:45:00.000Z", "members": [ { "userId": "user_abc123", "name": "Alex Developer", "email": "alex@company.com", "joinedAt": "2024-01-15T10:30:00.000Z" } ] }}Удалить группу
/teams/groups/:groupIdУдалить биллинговую группу. При успехе возвращает 204 No Content. Ограничение частоты запросов — 20 запросов в минуту на команду.
Удаление биллинговой группы — необратимая операция; данные нельзя восстановить. Все исторические данные об использовании для удалённых групп задним числом переназначаются в группу Unassigned.
Параметры
groupId string обязательный
curl -X DELETE https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy \ -u YOUR_API_KEY:Ответ:
204 No ContentДобавить участников в группу
/teams/groups/:groupId/membersДобавьте участников команды в биллинговую группу. Пользователи уже должны быть участниками вашей команды и при этом не состоять ни в какой другой группе. Ограничение частоты запросов — 20 запросов в минуту на команду.
Биллинговые группы, синхронизированные по SCIM, нельзя изменять через API. Все назначения участников для групп с SCIM-синхронизацией должны выполняться через SCIM.
Параметры
groupId string Обязательный
userIds string[] Обязательный
["user_abc123", "user_def456"])curl -X POST https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy/members \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "userIds": ["user_abc123", "user_def456"] }'Ответ:
{ "group": { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Engineering", "type": "BILLING", "directoryGroupId": null, "memberCount": 2, "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-25T16:50:00.000Z", "members": [ { "userId": "user_abc123", "name": "Alex Developer", "email": "alex@company.com", "joinedAt": "2024-01-25T16:50:00.000Z" }, { "userId": "user_def456", "name": "Sam Engineer", "email": "sam@company.com", "joinedAt": "2024-01-25T16:50:00.000Z" } ] }}Удалить участников из группы
/teams/groups/:groupId/membersУдалите участников команды из биллинговой группы. Удалённые участники перемещаются в группу Unassigned. Ограничение частоты запросов — 20 запросов в минуту на команду.
Биллинговые группы, синхронизированные через SCIM, нельзя изменять через API. Все изменения состава участников для групп с SCIM-синхронизацией нужно выполнять через SCIM.
Параметры
groupId string обязательный
userIds string[] обязательный
curl -X DELETE https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy/members \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "userIds": ["user_def456"] }'Ответ:
{ "group": { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Engineering", "type": "BILLING", "directoryGroupId": null, "memberCount": 1, "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-25T17:00:00.000Z", "members": [ { "userId": "user_abc123", "name": "Alex Developer", "email": "alex@company.com", "joinedAt": "2024-01-25T16:50:00.000Z" } ] }}Model Access
Маршруты Model Access находятся в предварительной версии и могут измениться. Пути, поля ответа и поведение при ошибках могут измениться до общедоступного выпуска.
Просматривайте и обновляйте политику Model Access команды: включена ли пользовательская политика, значения по умолчанию для новых провайдеров и моделей, переключатели для каждого провайдера и модели, а также параметры для каждой модели, например Fast и усилие рассуждений.
Включение модели без параметров оставляет для неё значения по умолчанию из каталога. Используйте параметры для каждой модели, если эти значения по умолчанию, например Fast, не соответствуют политике вашей команды.
Эти маршруты возвращают базовую политику команды. Группы организации по-прежнему могут расширять доступ для некоторых участников; списки разрешённых моделей для групп не входят в этот API. Настройки личного API-ключа (BYOK) остаются в дашборде.
Для чтения на уровне организации и массового переключения настроек во всех связанных командах см. маршруты Model Access API организации.
- Доступность: Команды с включённым контролем доступа к моделям
- Аутентификация: API-ключ команды (Basic auth). Для чтения требуется
models:read. Для записи требуетсяmodels:*. Ключи сadmin:*подходят для обоих случаев. Универсальные ключиread:*не могут вызывать эти маршруты. - Идентификаторы провайдеров и моделей: Сегменты пути — это идентификаторы каталога, например
anthropicиclaude-opus-4-6, а не отображаемые имена. Ответы GET содержат отображаемые имена. - Сначала конфигурация: Операции чтения и записи для провайдеров и моделей возвращают 409, пока
stateимеет значениеunrestricted(илиlegacy). Первый вызовPUT /teams/model-access/configurationсо значениями по умолчанию для команды без ограничений включает политику и заполняет текущий каталог (аналогично первому сохранению на странице Models). Последующие вызовы PUT для конфигурации со значениями по умолчанию обновляют только значения по умолчанию и сохраняют существующие переключатели. - Возврат к состоянию без ограничений:
PUT /teams/model-access/configurationс{ "state": "unrestricted" }сбрасывает пользовательскую политику, иstateснова получает значениеunrestricted. - Ограничения скорости: 20 запросов в минуту. Операции записи отображаются в журналах аудита команды как события
team_settings. См. ограничения скорости и рекомендации по лучшим практикам.
Получить конфигурацию Model Access
/teams/model-access/configurationВозвращает информацию о том, задана ли для команды пользовательская политика Model Access, а также значения по умолчанию для новых провайдеров и моделей.
Поля ответа
teamId number
state string
unrestricted, custom или legacy.newProviderDefault string | null
enabled или disabled, когда state имеет значение custom. В противном случае — null.newModelDefault string | null
enabled или disabled, когда state имеет значение custom. В противном случае — null.curl -X GET https://api.cursor.com/teams/model-access/configuration \ -u YOUR_API_KEY:Ответ:
{ "teamId": 7, "state": "unrestricted", "newProviderDefault": null, "newModelDefault": null}Обновление конфигурации Model Access
/teams/model-access/configurationСоздайте пользовательскую политику, обновите настройки по умолчанию или верните команде неограниченный доступ.
Отправьте один из следующих вариантов:
{ "state": "unrestricted" }, чтобы удалить пользовательскую политику (и устаревшие списки разрешённых и заблокированных элементов), после чегоstateпримет значениеunrestricted{ "newProviderDefault", "newModelDefault" }, чтобы создать или обновить пользовательскую политику (сокращённая форма с обратной совместимостью дляstate: "custom")
Первый PUT с настройками по умолчанию для команды с неограниченным доступом создаёт пользовательскую политику и добавляет записи каталога. Последующие PUT с настройками по умолчанию обновляют только эти настройки, сохраняя существующие переключатели без изменений.
Тело запроса
state string
unrestricted, чтобы удалить политику. Не указывайте при отправке настроек по умолчанию.newProviderDefault string
enabled или disabled. Обязательно при создании или обновлении пользовательской политики; не указывайте, если state имеет значение unrestricted.newModelDefault string
enabled или disabled. Обязательно при создании или обновлении пользовательской политики; не указывайте, если state имеет значение unrestricted.curl -X PUT https://api.cursor.com/teams/model-access/configuration \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "newProviderDefault": "disabled", "newModelDefault": "enabled" }'Ответ:
{ "teamId": 7, "state": "custom", "newProviderDefault": "disabled", "newModelDefault": "enabled"}Вернуть команде неограниченный доступ:
curl -X PUT https://api.cursor.com/teams/model-access/configuration \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "state": "unrestricted" }'Ответ:
{ "teamId": 7, "state": "unrestricted", "newProviderDefault": null, "newModelDefault": null}Список провайдеров Model Access
/teams/model-access/providersВозвращает список провайдеров и моделей из каталога с вычисленными флагами включения и массивом parameters для каждой модели. Возвращает 409, если у команды нет пользовательской политики.
Каждая модель содержит массив parameters, формируемый на основе каталога. Идентификаторы параметров и поддерживаемые значения берутся из каталога моделей (например, fast, reasoning, effort, context). Используйте этот GET, чтобы узнать, какие параметры поддерживает модель, перед записью.
Поля parameters модели
id string
fast или reasoning).displayName string
supportedValues string[]
allowedValues string[]
configuredDefaultValue string | null
null, если оно не задано.catalogDefaultValue string | null
curl -X GET https://api.cursor.com/teams/model-access/providers \ -u YOUR_API_KEY:Ответ:
{ "teamId": 7, "state": "custom", "providers": [ { "id": "anthropic", "displayName": "Anthropic", "enabled": true, "models": [ { "id": "claude-opus-4-6", "displayName": "Opus 4.6", "enabled": true, "parameters": [ { "id": "fast", "displayName": "Fast", "supportedValues": ["false", "true"], "allowedValues": ["false", "true"], "configuredDefaultValue": null, "catalogDefaultValue": "true" } ] } ] }, { "id": "openai", "displayName": "OpenAI", "enabled": true, "models": [ { "id": "gpt-5.4", "displayName": "GPT-5.4", "enabled": true, "parameters": [ { "id": "reasoning", "displayName": "Reasoning", "supportedValues": ["low", "medium", "high", "xhigh", "max"], "allowedValues": ["low", "medium", "high"], "configuredDefaultValue": "high", "catalogDefaultValue": "medium" } ] } ] } ]}Обновить Model Access Provider
/teams/model-access/providers/:providerВключает или отключает провайдера. Возвращает 409, если для команды по-прежнему установлен режим unrestricted или legacy.
Параметры
provider string Обязательно
openai или anthropic).Тело запроса
enabled boolean Обязательно
curl -X PUT https://api.cursor.com/teams/model-access/providers/openai \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{"enabled": false}'Список моделей провайдера
/teams/model-access/providers/:provider/modelsВозвращает список моделей одного провайдера с вычисленными флагами включения и параметрами parameters для каждой модели. Поля параметров соответствуют ответу со списком провайдеров. Возвращает 409, если у команды нет пользовательской политики.
Параметры
provider string Обязательно
anthropic).curl -X GET https://api.cursor.com/teams/model-access/providers/anthropic/models \ -u YOUR_API_KEY:Обновление модели в Model Access
/teams/model-access/providers/:provider/models/:modelВключает или отключает отдельную модель, а также позволяет при необходимости задать для неё ограничения параметров и значения по умолчанию. Возвращает 409, если для команды по-прежнему установлен режим unrestricted или legacy.
Параметры
provider string Обязательный
anthropic).model string Обязательный
claude-opus-4-6).Тело запроса
enabled boolean Обязательный
parameters object
allowedValuesstring[] | null: Ограничивает значения, которые могут выбирать участники. Передайтеnull, чтобы снять ограничение.defaultValuestring | null: Значение по умолчанию для команды. При заданном ограничении должно входить вallowedValues. Передайтеnull, чтобы восстановить значение по умолчанию из каталога.
Неизвестные идентификаторы параметров или значения, пустые массивы allowedValues, значения по умолчанию вне allowedValues и настройки, не соответствующие ни одному допустимому варианту модели, возвращают 400.
Отключить Fast для модели:
curl -X PUT https://api.cursor.com/teams/model-access/providers/anthropic/models/claude-opus-4-6 \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "enabled": true, "parameters": { "fast": { "allowedValues": ["false"] } } }'Задать допустимые уровни рассуждений и значение по умолчанию:
curl -X PUT https://api.cursor.com/teams/model-access/providers/openai/models/gpt-5.4 \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "enabled": true, "parameters": { "reasoning": { "allowedValues": ["low", "medium", "high"], "defaultValue": "high" } } }'Снять ограничение и восстановить значение по умолчанию из каталога:
curl -X PUT https://api.cursor.com/teams/model-access/providers/openai/models/gpt-5.4 \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "enabled": true, "parameters": { "reasoning": { "allowedValues": null, "defaultValue": null } } }'Ответ:
{ "id": "gpt-5.4", "displayName": "GPT-5.4", "enabled": true, "provider": "openai", "parameters": [ { "id": "reasoning", "displayName": "Reasoning", "supportedValues": ["low", "medium", "high", "xhigh", "max"], "allowedValues": ["low", "medium", "high", "xhigh", "max"], "configuredDefaultValue": null, "catalogDefaultValue": "medium" } ]}Ошибки
В ответах с ошибками используются:
{ "code": "error", "message": "…" }| Status | Когда |
|---|---|
401 | Неверный ключ или отсутствует models:read / models:* (или admin:*) |
403 | Контроль доступа к моделям недоступен для этой команды |
409 | Попытка прочитать или изменить провайдер или модель при значении state unrestricted или legacy |
400 | Неизвестный идентификатор провайдера, модели, параметра или значение параметра; некорректное тело запроса; пустой allowedValues; значение по умолчанию вне allowedValues; настройки, не дающие ни одного допустимого варианта модели; либо будет заблокирована обязательная модель Smart Auto |
Grok Bot
Включение Grok Bot и управление возможностями, принудительным включением Auto-Review, групповым доступом, сетевой политикой, правилами команды и скриптами настройки.
- Аутентификация: Team API key (базовая аутентификация). Для чтения требуется
read:*илиadmin:*. Для записи требуетсяadmin:*. Запись с ключомread:*возвращает401. - Ограничения частоты запросов: 20 запросов в минуту на команду для каждого endpoint. При превышении лимита API возвращает
429с заголовкомRetry-After: 60. См. ограничения частоты запросов. - Чтение на всех тарифах:
GET /grok-bot/access,/networkи/auto-reviewвозвращают действующую политику на любом тарифе. Запись возвращает403, если функция недоступна команде.
Включение Grok Bot
/grok-bot/enableВключает Grok Bot для команды. Первое включение в разрешённой Enterprise-команде запускает пробный период. При успехе возвращает 204 No Content.
curl -X POST https://api.cursor.com/grok-bot/enable \ -u YOUR_API_KEY:ответ:
204 No ContentОтключение Grok Bot
/grok-bot/disableОтключает Grok Bot для команды. Участники теряют доступ, при этом их computers не удаляются. На тарифах Teams возвращает 403.
curl -X POST https://api.cursor.com/grok-bot/disable \ -u YOUR_API_KEY:Response:
204 No ContentПолучение возможностей Grok Bot
/grok-bot/capabilitiesВозвращает возможности Grok Bot для команды.
Поля ответа
enabled boolean
cloudAgents boolean
templateSharing string | null
all, team_only, none или null — значение команды по умолчанию.actionRecording boolean
localExecution string | null
never, ask, always или null — без ограничения.localEgressAllowed boolean
curl -X GET https://api.cursor.com/grok-bot/capabilities \ -u YOUR_API_KEY:Ответ:
{ "enabled": true, "cloudAgents": true, "templateSharing": "team_only", "actionRecording": false, "localExecution": "ask", "localEgressAllowed": true}Обновление возможностей Grok Bot
/grok-bot/capabilitiesОбновляет возможности Grok Bot. Пропущенные поля остаются без изменений. Возвращает 403, если поле недоступно команде.
enabled доступно только для чтения. Используйте включение Grok Bot или отключение Grok Bot. Укажите хотя бы одно поле.
Параметры
cloudAgents boolean
templateSharing string | null
all, team_only, none или null, чтобы вернуть значение команды по умолчанию.actionRecording boolean
localExecution string | null
never, ask, always или null, чтобы снять ограничение на уровне команды.localEgressAllowed boolean
curl -X PATCH https://api.cursor.com/grok-bot/capabilities \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "cloudAgents": false, "localExecution": "never", "localEgressAllowed": false }'Ответ:
{ "enabled": true, "cloudAgents": false, "templateSharing": "team_only", "actionRecording": false, "localExecution": "never", "localEgressAllowed": false}Получение настройки принудительного включения Auto-review
/grok-bot/auto-reviewВозвращает политику принудительного включения Auto-review для команды.
Поля ответа
enforced boolean
true, каждый участник обязан оставлять принудительное включение Auto-review включённым.rules object
allow и block, на которые опирается Автоматическое ревью.curl -X GET https://api.cursor.com/grok-bot/auto-review \ -u YOUR_API_KEY:Ответ:
{ "enforced": true, "rules": { "allow": ["Read-only git commands"], "block": ["Publishing releases"] }}Замена принудительного включения Auto-review
/grok-bot/auto-reviewЗаменяет политику принудительного включения Auto-review для команды. Возвращает 403, если принудительное включение Auto-review недоступно команде.
Пустые списки allow и block сохраняют уже записанные инструкции, если ваша команда не может задавать правила Auto-review. Непустые списки в этом случае возвращают 403.
Параметры
enforced boolean Обязательный
true, каждый участник обязан держать принудительное включение Auto-review активным.rules object Обязательный
allowstring[]: до 20 инструкций по 1 000 символов каждая. Обрезаются, дубликаты удаляются.blockstring[]: до 20 инструкций по 1 000 символов каждая. Обрезаются, дубликаты удаляются.
curl -X PUT https://api.cursor.com/grok-bot/auto-review \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "enforced": true, "rules": { "allow": ["Read-only git commands"], "block": ["Publishing releases"] } }'Заблокировать принудительное включение Auto-review без изменения инструкций:
curl -X PUT https://api.cursor.com/grok-bot/auto-review \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "enforced": true, "rules": { "allow": [], "block": [] } }'Ответ:
{ "enforced": true, "rules": { "allow": ["Read-only git commands"], "block": ["Publishing releases"] }}Получение доступа к Grok Bot
/grok-bot/accessВозвращает, кто в команде может пользоваться Grok Bot.
Поля ответа
mode string
all или limited.groups array
mode равен limited. Каждый элемент содержит закодированный id и name. Пусто, если mode равен all.curl -X GET https://api.cursor.com/grok-bot/access \ -u YOUR_API_KEY:Ответ:
{ "mode": "limited", "groups": [ { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Platform Engineering" } ]}Обновление доступа к Grok Bot
/grok-bot/accessЗадайте, кто в команде может использовать Grok Bot. Возвращает 403, если групповой доступ для команды недоступен.
Параметры
mode string Обязательный
all — для всех участников, limited — для выбранных billing groups.groupIds array
mode равен limited (от 1 до 100, дубликаты считаются один раз). Опускается, если mode равен all.Неизвестные или некорректные ID, пустой список для limited либо ID групп вместе с all приводят к 400.
curl -X PUT https://api.cursor.com/grok-bot/access \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "mode": "limited", "groupIds": ["group_PDSPmvukpYgZEDXsoNirw3CFhy"] }'Ответ:
{ "mode": "limited", "groups": [ { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Platform Engineering" } ]}Получение сетевой политики Grok Bot
/grok-bot/networkВозвращает сетевую политику Grok Bot для команды.
Поля ответа
egressMode string
unset, allow_all, default_with_network_settings или network_settings_only.allowlist array
host-or-CIDR:port, например 54.85.223.0/24:3306.locked boolean
true, политики групп не могут переопределить политику команды.curl -X GET https://api.cursor.com/grok-bot/network \ -u YOUR_API_KEY:Ответ:
{ "egressMode": "network_settings_only", "allowlist": ["linkedin.com", "*.crunchbase.com", "10.0.0.0/8", "54.85.223.0/24:3306"], "locked": true}Замена сетевой политики Grok Bot
/grok-bot/networkЗаменяет сетевую политику Grok Bot для команды. На тарифах Teams возвращает 403.
Параметры
egressMode string Обязательный
unset: политика не применяетсяallow_all: разрешены все адреса назначенияdefault_with_network_settings: настройки Cursor по умолчанию и allowlistnetwork_settings_only: allowlist и адреса назначения, необходимые для работы Grok Bot
allowlist array Обязательный
host-or-CIDR:port, например 54.85.223.0/24:3306.locked boolean Обязательный
true политика групп не может переопределять политику команды.Неполные тела запроса, неизвестные режимы и некорректные записи allowlist приводят к ответу 400.
curl -X PUT https://api.cursor.com/grok-bot/network \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "egressMode": "network_settings_only", "allowlist": ["linkedin.com", "*.crunchbase.com", "10.0.0.0/8", "54.85.223.0/24:3306"], "locked": true }'Ответ:
{ "egressMode": "network_settings_only", "allowlist": ["linkedin.com", "*.crunchbase.com", "10.0.0.0/8", "54.85.223.0/24:3306"], "locked": true}Список правил команды Grok Bot
/grok-bot/team-rulesВозвращает список правил команды Grok Bot, начиная с самых новых.
Параметры
limit number
50. Максимум: 100.cursor string
nextCursor.curl -X GET "https://api.cursor.com/grok-bot/team-rules?limit=50" \ -u YOUR_API_KEY:Ответ:
{ "teamRules": [ { "id": "rule_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Ask before publishing", "content": "Never publish a release without an explicit go from the requester.", "enabled": true, "scope": "grokBot", "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-15T10:30:00.000Z" } ], "nextCursor": null}Создание правила команды Grok Bot
/grok-bot/team-rulesСоздаёт правило команды Grok Bot. Команда может хранить до 50 правил Grok Bot. Возвращает 201.
Параметры
name string Обязательный
content string Обязательный
enabled boolean Обязательный
curl -X POST https://api.cursor.com/grok-bot/team-rules \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "name": "Ask before publishing", "content": "Never publish a release without an explicit go from the requester.", "enabled": true }'Ответ:
{ "teamRule": { "id": "rule_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Ask before publishing", "content": "Never publish a release without an explicit go from the requester.", "enabled": true, "scope": "grokBot", "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-15T10:30:00.000Z" }}Обновление правила команды Grok Bot
/grok-bot/team-rules/:idОбновляет правило команды Grok Bot. Возвращает 404, если правило не существует.
Передайте хотя бы одно поле.
Параметры
id string Обязательный
name string
content string
enabled boolean
curl -X PATCH https://api.cursor.com/grok-bot/team-rules/rule_PDSPmvukpYgZEDXsoNirw3CFhy \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "enabled": false }'Ответ:
{ "teamRule": { "id": "rule_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Ask before publishing", "content": "Never publish a release without an explicit go from the requester.", "enabled": false, "scope": "grokBot", "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-15T10:30:00.000Z" }}Удаление правила команды Grok Bot
/grok-bot/team-rules/:idУдаляет правило команды Grok Bot. При успехе возвращает 204 No Content.
Параметры
id string Обязательный
curl -X DELETE https://api.cursor.com/grok-bot/team-rules/rule_PDSPmvukpYgZEDXsoNirw3CFhy \ -u YOUR_API_KEY:Ответ:
204 No ContentСписок манифестов настройки Grok Bot
/grok-bot/setup-manifestsВозвращает список манифестов настройки Grok Bot, упорядоченный по id.
Параметры
limit number
50. Максимум: 100.cursor string
nextCursor.curl -X GET "https://api.cursor.com/grok-bot/setup-manifests?limit=50" \ -u YOUR_API_KEY:Ответ:
{ "manifests": [ { "id": "toolchain", "scripts": [ { "id": "node", "setup": "mise install node@22", "check": "node --version" }, { "id": "pnpm", "setup": "npm i -g pnpm" } ] } ], "nextCursor": null}Создание или обновление манифеста настройки Grok Bot
/grok-bot/setup-manifests/:manifestIdСоздаёт или заменяет манифест настройки. Команда может хранить до 100 манифестов. Если манифест изменился во время запроса, возвращает 409.
Параметры
manifestId string Обязательный
., _ или -.scripts array Обязательный
idstring: тот же формат, что и уmanifestIdsetupstring: непустая команда установкиcheckstring: необязательная команда проверки
curl -X PUT https://api.cursor.com/grok-bot/setup-manifests/toolchain \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "scripts": [ { "id": "node", "setup": "mise install node@22", "check": "node --version" }, { "id": "pnpm", "setup": "npm i -g pnpm" } ] }'Ответ:
{ "manifest": { "id": "toolchain", "scripts": [ { "id": "node", "setup": "mise install node@22", "check": "node --version" }, { "id": "pnpm", "setup": "npm i -g pnpm" } ] }}Удаление манифеста настройки Grok Bot
/grok-bot/setup-manifests/:manifestIdУдаляет манифест настройки. При успешном выполнении возвращает 204 No Content.
Параметры
manifestId string Обязательный
curl -X DELETE https://api.cursor.com/grok-bot/setup-manifests/toolchain \ -u YOUR_API_KEY:Ответ:
204 No ContentОшибки
В ответах с ошибками используются:
{ "code": "error", "message": "…" }| Status | Когда |
|---|---|
401 | Неверный ключ, отсутствует read:* / admin:* либо Grok Bot Admin API не включён для команды |
403 | Запись недоступна для команды или её тарифа |
404 | Корректно сформированный идентификатор правила или манифеста в пути не существует |
409 | Манифест настройки изменился во время запроса |
400 | Некорректное тело запроса или идентификатор; пустой PATCH; enabled в возможностях; неизвестная группа; слишком много правил или манифестов; нет владельца для манифеста настройки |
429 | Превышен лимит частоты запросов к endpoint |