Sitelet https://cursor.com/ru/docs/account/teams/admin-api#team-directory-groups
Skip to main content

Command Palette

Search for a command to run...

API

Admin API

Admin API позволяет программно получать доступ к данным вашей команды, включая сведения об участниках, метрики использования, информацию о расходах, группы каталога команды, доступ к моделям и Grok Bot.

  • Admin API использует базовая аутентификация, при которой в качестве имени пользователя используется ваш API‑ключ.
  • Подробные сведения о создании API‑ключей, методах аутентификации, ограничении частоты запросов и рекомендациях по лучшим практикам см. в разделе Обзор API.

Для действий на уровне всей организации во всех ваших командах см. Организации и API организации.

Эндпоинты

Получить участников команды

GET/teams/members

Получение списка всех участников команды и их данных.

Поля ответа

teamMembers array

Массив объектов участников команды, каждый из которых содержит:
  • id string - Закодированный идентификатор пользователя участника команды (например, user_PDSPmvukpYgZEDXsoNirw3CFhy). Экспорт OpenTelemetry передаёт то же значение в необязательном атрибуте ресурса cursor.user.account_id.
  • email string - Адрес электронной почты участника команды
  • name string - Отображаемое имя участника команды
  • role string - Роль в команде (например, member, owner)
  • isRemoved boolean - Был ли участник удалён из команды
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    }  ]}

Получить журналы аудита

GET/teams/audit-logs

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

Параметры

startTime string | number

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

endTime string | number

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

eventTypes string

Значения event_type через запятую, например login,add_user. Полный список значений и соответствующих им полей event_data см. в таблицах типов событий

search string

Поиск подстроки без учёта регистра по полям user_email, event_type и event_id. Поле event_data в поиске не участвует

page number

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

pageSize number

Количество результатов на странице (1–500). По умолчанию: 100

users string

Фильтрация по пользователям. См. раздел Фильтрация по пользователям ниже

Форматы дат

Параметры 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  }}

Получение ежедневных данных об использовании

POST/teams/daily-usage-data

Получение ежедневных метрик использования вашей команды. Данные агрегируются почасово — рекомендуем опрашивать этот эндпоинт не чаще одного раза в час. Ограничение: не более 20 запросов в минуту на команду. См. рекомендации.

Параметры

startDate число Обязательно

Дата начала в миллисекундах с начала эпохи

endDate number Обязательное

Дата окончания в миллисекундах с начала эпохи

page число

Номер страницы (нумерация с 1). При указании вместе с pageSize включает постраничную навигацию и возвращает данные о всех участниках команды, у которых было членство в запрошенном диапазоне дат.

pageSize число

Количество пользователей на странице. При указании вместе с page включает пагинацию и возвращает данные обо всех участниках команды, имевших членство в запрошенном диапазоне дат.

Поля ответа

Каждый object в массиве data содержит:

  • userId number — уникальный идентификатор пользователя
  • day string — Дата, к которой относится эта запись (в формате ISO, например 2024-03-18)
  • date number — Дата в миллисекундах с начала эпохи
  • email string — адрес электронной почты пользователя
  • isActive boolean — Была ли активность у пользователя в этот день (доступно только при пагинации)
  • totalLinesAdded number — Общее количество добавленных строк кода
  • totalLinesDeleted number — Общее количество удалённых строк кода
  • acceptedLinesAdded number — количество добавленных строк, предложенных и принятых ИИ
  • acceptedLinesDeleted number — количество удалённых строк, предложенных ИИ и принятых пользователем
  • totalApplies number — Общее количество применений кода, написанного ИИ
  • totalAccepts number — Общее число принятых предложений ИИ
  • totalRejects number — Общее количество отклонённых предложений ИИ
  • totalTabsShown number — Общее количество автодополнений Tab, показанных пользователю
  • totalTabsAccepted number — Общее число Tab Completions, принятых пользователем
  • composerRequests number — Количество запросов к Composer
  • chatRequests number — Количество отправленных запросов в чате
  • agentRequests number — Количество запросов, выполненных в режиме Agent
  • cmdkUsages number — Количество использований встроенного редактирования с помощью Cmd+K
  • subscriptionIncludedReqs number — Количество запросов, включённых в тариф подписки
  • apiKeyReqs number — Запросы через API-ключ
  • usageBasedReqs number — Запросы с оплатой по мере использования (сверх лимита)
  • bugbotUsages number — Количество использований Bugbot
  • mostUsedModel string | null - Наиболее часто используемая за день модель ИИ
  • applyMostUsedExtension string | null — Наиболее распространённое расширение файлов для операций применения
  • tabMostUsedExtension string | null — Наиболее распространённое расширение файлов для Tab Completions
  • clientVersion string | 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  }}

Получить данные о расходах

POST/teams/spend

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

Параметры

searchTerm string

Поиск по именам пользователей и адресам электронной почты

sortBy string

Сортировка по: amount, date, user. По умолчанию: date

sortDirection string

Направление сортировки: asc, desc. По умолчанию: desc

page number

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

pageSize number

Количество результатов на странице

Поля ответа

Каждый объект в teamMemberSpend содержит:

  • userId string - Закодированный идентификатор пользователя (например, user_PDSPmvukpYgZEDXsoNirw3CFhy). Использует то же пространство имён идентификаторов, что и teamMembers[].id из /teams/members.
  • name string - Отображаемое имя пользователя
  • email string - Адрес электронной почты пользователя
  • role string - Роль в команде (например, member, owner)
  • spendCents number - Расходы по запросу в центах за текущий расчетный период и не включает включенное использование
  • overallSpendCents number - Общая сумма расходов в центах за текущий расчетный период, включая как расходы по запросу, так и включенное использование
  • fastPremiumRequests number - Количество премиальных запросов с оплатой за использование за расчетный период
  • hardLimitOverrideDollars number - Индивидуальное переопределение жесткого лимита расходов в долларах для этого пользователя (0 означает отсутствие переопределения)
  • monthlyLimitDollars number | null - Ежемесячный лимит расходов в долларах, установленный для этого пользователя, или null, если лимит не установлен
  • effectivePerUserLimitDollars number - Текущий применяемый лимит расходов в долларах для пользователя, вычисляемый на основе monthlyLimitDollars и hardLimitOverrideDollars
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}

Получить данные о событиях использования

POST/teams/filtered-usage-events

Получите подробные события использования для вашей команды с возможностями фильтрации, поиска и пагинации. Этот эндпоинт предоставляет детальную информацию о вызовах API, использовании моделей, потреблении токенов и расходах. Данные агрегируются почасово. Рекомендуем опрашивать этот эндпоинт не чаще одного раза в час. Ограничение — 60 запросов в минуту на команду. См. руководство по API.

Параметры

startDate number

Дата начала в миллисекундах с момента эпохи. Эта граница включена.

endDate number

Дата окончания в миллисекундах с момента эпохи. Эта граница включается.

userId number

Фильтр по конкретному идентификатору пользователя

page number

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

pageSize number

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

email string

Фильтровать по адресу электронной почты пользователя

serviceAccountId string

Фильтр по идентификатору сервисного аккаунта

cloudAgentId string

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

automationId string

Фильтровать по UUID конкретной автоматизации. Передайте *, чтобы вернуть события из всех автоматизаций.

hostingType string

Фильтруйте запуски облачного агента (фонового агента) по месту их выполнения. Используйте это, чтобы отделить расходы на инференс для self-hosted агентов от запусков, размещённых в Cursor. Допустимые значения:
  • CLOUD - запуски под управлением Cursor
  • SELF_HOSTED - любой запуск в собственной инфраструктуре (воркер Team Pool или воркер My Machines)
  • SELF_HOSTED_POOL - только воркеры Team Pool
  • SELF_HOSTED_MACHINE - только персональные воркеры "My Machine"

Поля ответа

Каждый объект в usageEvents содержит:

  • timestamp string - Метка времени события в миллисекундах Unix-эпохи (в виде строки)
  • userEmail string - Адрес электронной почты пользователя, отправившего запрос
  • serviceAccountId string | undefined - ID сервисного аккаунта, выполнившего запрос. Отсутствует для событий, инициированных пользователями.
  • serviceAccountName string | undefined - Отображаемое имя сервисного аккаунта, который отправил запрос. Отсутствует для событий, инициированных пользователями.
  • cloudAgentId string | undefined - ID запуска облачного агента, к которому относится это событие. Отсутствует для событий, не связанных с облачными агентами.
  • automationId string | undefined - UUID автоматизации, к которой относится это событие. Отсутствует для событий вне автоматизаций.
  • conversationId string | undefined - ID диалога (сессии агента), в котором было сгенерировано это событие. Используйте его, чтобы отнести расходы к сессии или в качестве ключа для объединения с другими источниками, содержащими ID диалогов, например API отслеживания ИИ-кода. Отсутствует для событий без связанного диалога.
  • model string - Модель ИИ, использованная для запроса
  • kind string - Категория тарификации (например, Usage-based, Included in Business)
  • maxMode boolean - Был ли запрос выполнен в максимальном режиме
  • requestsCosts number - Стоимость в единицах запросов
  • isTokenBasedCall boolean - Тарифицировался ли запрос по числу токенов
  • isChargeable boolean - Приводит ли это событие к списанию средств
  • isHeadless boolean - Выполнен ли этот запрос без подключённого клиента (например, фоновыми агентами)
  • tokenUsage object | undefined - Сведения об использовании токенов (присутствуют, когда isTokenBasedCall равно true):
    • inputTokens number - Количество потреблённых входных токенов
    • outputTokens number - Количество сгенерированных выходных токенов
    • cacheWriteTokens number - Количество токенов, записанных в кэш
    • cacheReadTokens number - Количество токенов, прочитанных из кэша
    • totalCents number - Общая стоимость модели в центах
    • discountPercentOff number | undefined - Размер применённой скидки в процентах, если есть
  • chargedCents number - Общая сумма, списанная в центах за это событие. Для запросов к сторонним моделям, на которые распространяется ставка токенов Cursor, это поле включает стоимость модели и ставку токенов Cursor. Используйте это поле, чтобы сверить расходы на уровне отдельных событий с итоговыми значениями /teams/spend. Работает как для тарифов с оплатой по токенам, так и для тарифов с оплатой по запросам.
  • cursorTokenFee number | 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  }'

Задать лимит расходов пользователя

POST/teams/user-spend-limit

Устанавливает лимиты расходов для отдельных участников команды. Это позволяет контролировать, сколько каждый пользователь может потратить на использование ИИ внутри вашей команды. Ограничение частоты запросов — 250 запросов в минуту на команду. См. ограничения частоты запросов.

Чтобы обновить до 100 участников за один запрос, используйте Массовую установку лимитов расходов пользователей (предварительная версия).

Параметры

userEmail string Обязательный

Адрес электронной почты участника команды

spendLimitDollars number | null Обязательный

Лимит расходов в долларах (только целое число, без дробной части). Установите значение null, чтобы убрать лимит.
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"}

Массовая установка лимитов расходов пользователей (предварительная версия)

POST/teams/user-spend-limits

Задайте лимиты расходов сразу для 100 участников команды одним запросом. Ограничение частоты запросов: 20 запросов в минуту на команду. См. ограничения частоты запросов.

Параметры

updates array Обязательный

От 1 до 100 обновлений лимитов расходов пользователей. Каждое обновление содержит:
  • userEmail string — адрес электронной почты участника команды
  • spendLimitDollars number | null — целочисленный лимит расходов в долларах. Укажите null, чтобы снять лимит.

Поля ответа

  • requestedCount number — количество обновлений в запросе
  • updatedCount number — количество изменённых лимитов
  • unchangedCount number — количество лимитов, для которых запрошенное значение уже было задано
  • failedCount number — количество обновлений, которые Cursor не смог применить
  • results array — результаты в порядке следования запроса. Каждый результат включает userEmail и статус updated, unchanged или failed. Неудачные результаты также включают сообщение error.
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"    }  ]}

Удалить участника команды

POST/teams/remove-member

Программно удалите участника из вашей команды. Полезно для автоматизации процессов офбординга или интеграции с HR-системами. Ограничение частоты запросов — 50 запросов в минуту на команду. См. лимит запросов.

Параметры

userId string

Закодированный идентификатор пользователя (например, user_PDSPmvukpYgZEDXsoNirw3CFhy). Обязателен, если email не указан.

email string

Адрес электронной почты участника команды. Обязателен, если userId не указан.
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"}

Получить списки блокировки репозиториев команды

GET/settings/repo-blocklists/repos

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

Примеры шаблонов

Распространённые шаблоны списка блокировки:

  • * — заблокировать весь репозиторий
  • *.env — заблокировать все файлы .env
  • config/* — заблокировать все файлы в каталоге 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": ["*"]    }  ]}

Добавить или обновить списки блокировки репозиториев

POST/settings/repo-blocklists/repos/upsert

Заменяет существующие списки блокировки репозиториев для указанных репозиториев. Этот эндпоинт перезаписывает шаблоны только для переданных репозиториев. Все остальные репозитории не затрагиваются.

Параметры

repos array обязательный

Массив объектов списка блокировки репозиториев. Каждый объект репозитория должен содержать:

  • url string - URL репозитория для добавления в список блокировки
  • patterns string[] - массив шаблонов файлов для блокировки (поддерживаются шаблоны в формате 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": ["*"]    }  ]}

Удалить список блокировки репозитория

DELETE/settings/repo-blocklists/repos/:repoId

Удаляет указанный репозиторий из списка блокировки. При успешном удалении возвращает 204 No Content.

Параметры

repoId string обязательный

ID списка блокировки репозитория для удаления
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/groupsid использует префикс g_. В ответах также возвращается publicId с префиксом grp_. См. Organization Groups.
Группы каталога команды/teams/directory-groupsПубличный идентификатор использует префикс team_group_…, например team_group_01k2ja2000e0080000000000n2.
Группы выставления счетов/teams/groupsgroup_…

:groupId — это публичный идентификатор группы каталога команды. Он использует префикс team_group_…. Не передавайте идентификаторы Organization Group g_ или grp_, а также идентификаторы группы выставления счетов group_….

Для маршрутов групп действуют общие ответы об ошибках:

СтатусКогда
400Некорректный ID группы, значение пагинации или тело запроса
401Недействительный API-ключ либо у ключа отсутствует область read:* (чтение) или admin:* (запись)
404Группа не существует в этой команде
429Превышено ограничение частоты запросов. Ответ содержит заголовок Retry-After: 60

Список групп каталога команды

GET/teams/directory-groups

Получить группы каталога команды для команды, к которой привязан ваш API-ключ.

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

page number

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

pageSize number

Количество групп на странице. По умолчанию 50. Максимум — 200; значения больше 200 усекаются до 200.

Поля ответа

Каждый object в groups содержит:

  • id строка — публичный идентификатор группы с префиксом team_group_…. Используйте это значение как :groupId в остальных маршрутах.
  • name строка — название группы
  • memberCount number — количество участников в группе
  • monthlySpendingLimitDollars number | null — месячный лимит расходов в целых долларах для каждого участника группы. null означает, что у группы нет лимита.
  • createdAt строка — время создания в формате ISO 8601
  • updatedAt строка — время последнего обновления в формате 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  }}

Получить группу каталога команды

GET/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"  }}

Создать группу каталога команды

POST/teams/directory-groups

Создание группы каталога команды с ручным управлением составом участников. Чтобы создать группу, синхронизированную через SCIM, синхронизируйте её из вашего провайдера идентификации. См. SCIM.

Тело запроса

name строка Обязательный

Имя группы. Должно быть уникальным среди активных групп каталога команды. Cursor удаляет пробелы в начале и в конце.

Поля ответа

Возвращает 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"  }}

Обновление группы каталога команды

PATCH/teams/directory-groups/:groupId

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

Параметры

groupId строка Обязательный

Публичный идентификатор группы с префиксом team_group_…, например team_group_01k2ja2000e0080000000000n2.

Тело запроса

name строка

Новое название группы. Должно быть уникальным среди активных групп каталога команды. Cursor удаляет пробелы в начале и в конце строки.

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"  }}

Удаление группы каталога команды

DELETE/teams/directory-groups/:groupId

Удаляет группу каталога команды. Группа должна быть пустой: перед удалением исключите из неё всех участников.

Параметры

groupId строка Обязательный

Публичный идентификатор группы с префиксом team_group_…, например team_group_01k2ja2000e0080000000000n2.

Ответ

После удаления группы возвращает 204 No Content.

Ошибки

  • 400 — в группе ещё есть участники либо у группы есть активное сопоставление SCIM.
curl -X DELETE https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2 \  -u YOUR_API_KEY:

Ответ: 204 No Content

Список участников группы каталога команды

GET/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  }}

Добавление участников в группу каталога команды

POST/teams/directory-groups/:groupId/members/bulk-add

Добавляет участников в группу каталога команды, управляемую вручную.

Параметры

groupId строка обязательный

Публичный идентификатор группы с префиксом team_group_…, например team_group_01k2ja2000e0080000000000n2.

Тело запроса

userIds строка[] обязательный

Массив публичных идентификаторов пользователей с префиксом user_. Один запрос может включать до 100 пользователей.

Поля ответа

addedCount number

Количество участий, созданных этим запросом. Cursor пропускает пользователей вне команды и тех, кто уже состоит в группе, поэтому они в это число не входят.
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}

Удаление участников из группы каталога команды

POST/teams/directory-groups/:groupId/members/bulk-remove

Удаляет участников из группы каталога команды, управляемой вручную.

Параметры

groupId строка обязательный

Публичный идентификатор группы с префиксом team_group_…, например team_group_01k2ja2000e0080000000000n2.

Тело запроса

userIds строка[] обязательный

Массив публичных идентификаторов пользователей с префиксом user_. Один запрос может включать до 100 пользователей.

Поля ответа

removedCount number

Количество участий, удалённых этим запросом. Cursor пропускает пользователей, которые не состоят в группе, поэтому они в это число не входят.
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.

Список групп

GET/teams/groups

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

Параметры

billingCycle строка

Строка даты в формате ISO (например, 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"  }}

Получить группу

GET/teams/groups/:groupId

Получить одну биллинговую группу с её участниками и данными о расходах за текущий биллинговый цикл.

Параметры

groupId string Обязательный

Закодированный идентификатор группы (например, group_PDSPmvukpYgZEDXsoNirw3CFhy)

billingCycle string

Строка даты в формате ISO (например, 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"  }}

Создать группу

POST/teams/groups

Создаёт новую биллинговую группу. Ограничение частоты запросов — 20 запросов в минуту на команду.

Параметры

name string Обязательный

Название группы

type string

Тип группы. В данный момент поддерживается только BILLING. Значение по умолчанию: BILLING
curl -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": []  }}

Обновить группу

PATCH/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"      }    ]  }}

Удалить группу

DELETE/teams/groups/:groupId

Удалить биллинговую группу. При успехе возвращает 204 No Content. Ограничение частоты запросов — 20 запросов в минуту на команду.

Параметры

groupId string обязательный

Закодированный идентификатор группы для удаления
curl -X DELETE https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy \  -u YOUR_API_KEY:

Ответ:

204 No Content

Добавить участников в группу

POST/teams/groups/:groupId/members

Добавьте участников команды в биллинговую группу. Пользователи уже должны быть участниками вашей команды и при этом не состоять ни в какой другой группе. Ограничение частоты запросов — 20 запросов в минуту на команду.

Параметры

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"      }    ]  }}

Удалить участников из группы

DELETE/teams/groups/:groupId/members

Удалите участников команды из биллинговой группы. Удалённые участники перемещаются в группу Unassigned. Ограничение частоты запросов — 20 запросов в минуту на команду.

Параметры

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 команды: включена ли пользовательская политика, значения по умолчанию для новых провайдеров и моделей, переключатели для каждого провайдера и модели, а также параметры для каждой модели, например Fast и усилие рассуждений.

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

Эти маршруты возвращают базовую политику команды. Группы организации по-прежнему могут расширять доступ для некоторых участников; списки разрешённых моделей для групп не входят в этот API. Настройки личного API-ключа (BYOK) остаются в дашборде.

Для чтения на уровне организации и массового переключения настроек во всех связанных командах см. маршруты Model Access API организации.

Получить конфигурацию Model Access

GET/teams/model-access/configuration

Возвращает информацию о том, задана ли для команды пользовательская политика Model Access, а также значения по умолчанию для новых провайдеров и моделей.

Поля ответа

teamId number

Целочисленный ID команды, определяемый API-ключом.

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

PUT/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

GET/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

PUT/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}'

Список моделей провайдера

GET/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

PUT/teams/model-access/providers/:provider/models/:model

Включает или отключает отдельную модель, а также позволяет при необходимости задать для неё ограничения параметров и значения по умолчанию. Возвращает 409, если для команды по-прежнему установлен режим unrestricted или legacy.

Параметры

provider string Обязательный

Идентификатор провайдера в каталоге (например, anthropic).

model string Обязательный

Идентификатор модели в каталоге (например, claude-opus-4-6).

Тело запроса

enabled boolean Обязательный

parameters object

Необязательное сопоставление идентификаторов параметров с настройками. Пропущенные параметры и поля остаются без изменений.
  • allowedValues string[] | null: Ограничивает значения, которые могут выбирать участники. Передайте null, чтобы снять ограничение.
  • defaultValue string | 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, групповым доступом, сетевой политикой, правилами команды и скриптами настройки.

Включение Grok Bot

POST/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

POST/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

GET/grok-bot/capabilities

Возвращает возможности Grok Bot для команды.

Поля ответа

enabled boolean

Включён ли Grok Bot. Только для чтения.

cloudAgents boolean

Могут ли участники делегировать работу Cloud Agents.

templateSharing string | null

all, team_only, none или null — значение команды по умолчанию.

actionRecording boolean

Включена ли функция Action Recording.

localExecution string | null

Ограничение на уровне команды для Bots на машине участника: never, ask, always или null — без ограничения.

localEgressAllowed boolean

Могут ли участники направлять веб-трафик Grok Bot через свой компьютер (Разрешить локальный исходящий трафик; только для Enterprise).
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

PATCH/grok-bot/capabilities

Обновляет возможности Grok Bot. Пропущенные поля остаются без изменений. Возвращает 403, если поле недоступно команде.

Параметры

cloudAgents boolean

Могут ли участники делегировать работу Cloud Agents.

templateSharing string | null

all, team_only, none или null, чтобы вернуть значение команды по умолчанию.

actionRecording boolean

Включена ли функция Action Recording.

localExecution string | null

never, ask, always или null, чтобы снять ограничение на уровне команды.

localEgressAllowed boolean

Могут ли участники направлять веб-трафик Grok Bot через собственный компьютер (Разрешить локальный исходящий трафик; только для Enterprise). Возвращает 403, если для команды не включено управление маршрутизацией локального исходящего трафика.
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

GET/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

PUT/grok-bot/auto-review

Заменяет политику принудительного включения Auto-review для команды. Возвращает 403, если принудительное включение Auto-review недоступно команде.

Параметры

enforced boolean Обязательный

Если true, каждый участник обязан держать принудительное включение Auto-review активным.

rules object Обязательный

Списки разрешающих и блокирующих инструкций.
  • allow string[]: до 20 инструкций по 1 000 символов каждая. Обрезаются, дубликаты удаляются.
  • block string[]: до 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

GET/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

PUT/grok-bot/access

Задайте, кто в команде может использовать Grok Bot. Возвращает 403, если групповой доступ для команды недоступен.

Параметры

mode string Обязательный

all — для всех участников, limited — для выбранных billing groups.

groupIds array

Encoded ID групп из List Groups. Обязателен, если 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

GET/grok-bot/network

Возвращает сетевую политику Grok Bot для команды.

Поля ответа

egressMode string

unset, allow_all, default_with_network_settings или network_settings_only.

allowlist array

Разрешённые назначения: домены, домены с wildcard, IP-адреса, диапазоны CIDR или 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

PUT/grok-bot/network

Заменяет сетевую политику Grok Bot для команды. На тарифах Teams возвращает 403.

Параметры

egressMode string Обязательный

Одно из значений:
  • unset: политика не применяется
  • allow_all: разрешены все адреса назначения
  • default_with_network_settings: настройки Cursor по умолчанию и allowlist
  • network_settings_only: allowlist и адреса назначения, необходимые для работы Grok Bot

allowlist array Обязательный

До 500 адресов назначения, длина каждого — от 1 до 253 символов. Домены, домены с wildcard, IP-адреса, диапазоны CIDR или 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

GET/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

POST/grok-bot/team-rules

Создаёт правило команды Grok Bot. Команда может хранить до 50 правил Grok Bot. Возвращает 201.

Параметры

name string Обязательный

От 1 до 255 символов.

content string Обязательный

От 1 до 30 000 символов.

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

PATCH/grok-bot/team-rules/:id

Обновляет правило команды Grok Bot. Возвращает 404, если правило не существует.

Параметры

id string Обязательный

Закодированный ID правила из ответа на запрос списка или создания.

name string

От 1 до 255 символов.

content string

От 1 до 30 000 символов.

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

DELETE/grok-bot/team-rules/:id

Удаляет правило команды Grok Bot. При успехе возвращает 204 No Content.

Параметры

id string Обязательный

Закодированный ID удаляемого правила.
curl -X DELETE https://api.cursor.com/grok-bot/team-rules/rule_PDSPmvukpYgZEDXsoNirw3CFhy \  -u YOUR_API_KEY:

Ответ:

204 No Content

Список манифестов настройки Grok Bot

GET/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

PUT/grok-bot/setup-manifests/:manifestId

Создаёт или заменяет манифест настройки. Команда может хранить до 100 манифестов. Если манифест изменился во время запроса, возвращает 409.

Параметры

manifestId string Обязательный

От 1 до 128 символов; начинается с буквы или цифры, далее — буквы, цифры, ., _ или -.

scripts array Обязательный

Скрипты настройки.
  • id string: тот же формат, что и у manifestId
  • setup string: непустая команда установки
  • check string: необязательная команда проверки
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

DELETE/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