API de administração
A API de administração permite acessar programaticamente os dados da sua equipe, incluindo informações sobre membros, métricas de uso, detalhes de gastos, grupos de diretório de equipe, acesso a modelos e Grok Bot.
- A API de administração usa Autenticação Básica com sua chave de API como nome de usuário.
- Para obter detalhes sobre criação de chaves de API, métodos de autenticação, limite de taxa e boas práticas, consulte a Visão geral da API.
Para ações em toda a organização nas suas equipes, consulte Organizações e a API da organização.
Endpoints
Obter membros da equipe
/teams/membersRecupere todos os membros da equipe e seus detalhes.
Response Fields
teamMembers array
idstring - ID de usuário codificado do membro da equipe (por exemplo,user_PDSPmvukpYgZEDXsoNirw3CFhy). A Exportação do OpenTelemetry transmite o mesmo valor no atributo opcional do recursocursor.user.account_id.emailstring - Endereço de e-mail do membro da equipenamestring - Nome de exibição do membro da equiperolestring - Função na equipe (por exemplo,member,owner)isRemovedboolean - Se o membro foi removido da equipe
curl -X GET https://api.cursor.com/teams/members \ -u YOUR_API_KEY:Resposta:
{ "teamMembers": [ { "id": "user_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Alex", "email": "[email protected]", "role": "member", "isRemoved": false }, { "id": "user_kljUvI0ASZORvSEXf9hV0ydcso", "name": "Sam", "email": "[email protected]", "role": "owner", "isRemoved": false } ]}Obter logs de auditoria
/teams/audit-logsRecupere eventos de log de auditoria da sua equipe com filtragem. Acompanhe a atividade da equipe, eventos de segurança e alterações de configuração. Limitado a 20 solicitações por minuto por equipe. Consulte limites de taxa e boas práticas.
Parâmetros
startTime string | number
endTime string | number
eventTypes string
login, logout, add_user, remove_user, update_user_role, team_settings, mcp_server_config, team_api_key, user_api_key, privacy_mode, user_spend_limit, team_rule, team_repo, team_hook, team_command, create_directory_group, delete_directory_group, update_directory_group, update_directory_group_permissions, add_user_to_directory_group, remove_user_from_directory_group, bugbot_installation, bugbot_installation_settings, bugbot_repo_settings, bugbot_team_rule, bugbot_team_settings, bugbot_bulk_repo_update, grok_bot_created, grok_bot_lifecycle, sand_onboarding, grok_bot_access_changed, grok_bot_team_setup_manifest, grok_bot_group_settings, grok_bot_group_resource, grok_bot_resource, grok_bot_machine, grok_bot_vm, grok_bot_vm_bulk, grok_bot_routine, mcp_authentication, slack_account_linksearch string
page number
1pageSize number
100users string
O intervalo de datas não pode exceder 30 dias. Faça várias solicitações para períodos maiores.
Formatos de data
Os parâmetros startTime e endTime aceitam vários formatos:
- Atalhos relativos:
now,today,yesterday,7d(7 dias atrás),5h(5 horas atrás),300s(300 segundos atrás) - Strings ISO 8601:
2024-01-15T12:00:00Zou2024-01-15T10:00:00-05:00 - Formato YYYY-MM-DD:
2024-01-15(o horário padrão é 00:00:00 UTC) - Timestamps Unix:
1705315200(segundos) ou1705315200000(milissegundos)
Exemplos:
?startTime=7d&endTime=now- Últimos 7 dias?startTime=5h&endTime=now- Últimas 5 horas?startTime=2024-01-15&endTime=2024-01-20- Intervalo de datas específico?startTime=1705315200000&endTime=1705401600000- Timestamps Unix
Filtragem de usuários
O parâmetro users aceita vários formatos, separados por vírgula:
- Endereços de e-mail:
[email protected],[email protected] - IDs de usuário codificados:
user_PDSPmvukpYgZEDXsoNirw3CFhy,user_kljUvI0ASZORvSEXf9hV0ydcso
Você pode misturar formatos: [email protected],12345,user_PDSPmvukpYgZEDXsoNirw3CFhy
O número máximo de usuários por solicitação é igual a pageSize.
curl -X GET "https://api.cursor.com/teams/[email protected],[email protected]&eventTypes=login,add_user" \ -u YOUR_API_KEY:Resposta:
Cada objeto em events inclui application_type: grok_bot para o Grok Bot, cursor para outras surfaces do Cherri Code, ou uma string vazia quando não é possível determinar a aplicação (incluindo registros gravados antes de esse campo existir).
As linhas de rotina identificam o Bot com event_data.sand_agent_id.
{ "events": [ { "event_id": "evt_abc123", "timestamp": "2024-01-15T12:30:00.000Z", "ip_address": "203.0.113.42", "user_email": "[email protected]", "event_type": "add_user", "application_type": "cursor", "event_data": { "email": "[email protected]", "method": "manual" } }, { "event_id": "evt_def456", "timestamp": "2024-01-15T10:15:00.000Z", "ip_address": "192.168.1.1", "user_email": "[email protected]", "event_type": "login", "application_type": "grok_bot", "event_data": { "ip_address": "192.168.1.1", "user_agent": "Cherri Code/0.42.0" } } ], "pagination": { "page": 1, "pageSize": 100, "totalCount": 2, "totalPages": 1, "hasNextPage": false, "hasPreviousPage": false }, "params": { "teamId": 12345, "startDate": 1704729600000, "endDate": 1705334400000 }}Obter dados de uso diário
/teams/daily-usage-dataRecupere as métricas diárias de uso da sua equipe. Os dados são agregados por hora — recomendamos fazer polling deste endpoint no máximo uma vez por hora. Limitado a 20 solicitações por minuto por equipe. Consulte as boas práticas.
Parâmetros
startDate number Obrigatório
endDate number Obrigatório
page number
pageSize, ativa a paginação e retorna dados de todos os membros da equipe com uma associação durante o intervalo de datas solicitado.pageSize number
page, ativa a paginação e retorna dados de todos os membros da equipe com associação durante o intervalo de datas solicitado.Sem os parâmetros de paginação, este endpoint retorna apenas usuários ativos (aqueles que tiveram atividade no intervalo de datas). Para obter todos os membros da equipe, inclua os parâmetros page e pageSize.
Ao usar paginação, a resposta inclui um campo isActive para cada usuário, indicando se teve atividade naquele dia. Membros que ingressaram após o período solicitado são excluídos.
O intervalo de datas não pode exceder 30 dias. Para períodos mais longos, faça várias solicitações.
Os campos subscriptionIncludedReqs, usageBasedReqs e apiKeyReqs contabilizam eventos de uso brutos, não unidades de solicitação faturáveis do antigo modelo de precificação por solicitação. Para obter contagens precisas de solicitações faturáveis, use o endpoint /teams/filtered-usage-events e some o campo requestsCosts.
Campos da resposta
Cada objeto na matriz data contém:
userIdnumber - Identificador único do usuáriodaystring - A data à qual este registro se refere (data ISO, por exemplo,2024-03-18)datenumber - Data em milissegundos desde a épocaemailstring - Endereço de e-mail do usuárioisActiveboolean - Indica se o usuário teve atividade neste dia (presente apenas com paginação)totalLinesAddednumber - Total de linhas de código adicionadastotalLinesDeletednumber - Total de linhas de código excluídasacceptedLinesAddednumber - Linhas sugeridas pela IA que foram adicionadas e aceitasacceptedLinesDeletednumber - Linhas sugeridas pela IA cuja exclusão foi aceitatotalAppliesnumber - Total de ações de aplicação de código por AItotalAcceptsnumber - Total de sugestões de IA aceitastotalRejectsnumber - Total de sugestões de IA rejeitadastotalTabsShownnumber - Total de conclusões de Tab exibidas ao usuáriototalTabsAcceptednumber - Total de sugestões do Tab aceitas pelo usuáriocomposerRequestsnumber - Número de solicitações feitas ao ComposerchatRequestsnumber - Número de solicitações de chat realizadasagentRequestsnumber - Número de solicitações realizadas no modo AgentcmdkUsagesnumber - Número de usos da edição inline com Cmd+KsubscriptionIncludedReqsnumber - Solicitações incluídas no plano de assinaturaapiKeyReqsnumber - Solicitações feitas com a chave de APIusageBasedReqsnumber - Solicitações por uso excedentebugbotUsagesnumber - Número de usos do BugbotmostUsedModelstring | null - Modelo de IA mais usado no diaapplyMostUsedExtensionstring | null - Extensão de arquivo mais usada para ações de aplicaçãotabMostUsedExtensionstring | null - Extensão de arquivo mais usada nas conclusões do TabclientVersionstring | null - Versão do cliente Cherri Code utilizada
# Obter dados apenas dos usuários ativos (sem paginação)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 }'# Obter dados de TODOS os membros da equipe (com paginação)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 }'Resposta (sem paginação — apenas usuários ativos):
{ "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": "[email protected]" } ], "period": { "startDate": 1710720000000, "endDate": 1710892800000 }}Resposta (com paginação — todos os membros da equipe):
{ "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": "[email protected]" }, { "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": "[email protected]" } ], "period": { "startDate": 1710720000000, "endDate": 1710892800000 }, "pagination": { "page": 1, "pageSize": 1000, "totalUsers": 150, "totalPages": 1, "hasNextPage": false, "hasPreviousPage": false }}Obter dados de gastos
/teams/spendRecupere informações de gastos do ciclo de cobrança atual com busca, ordenação e paginação.
Parameters
searchTerm string
sortBy string
amount, date, user. Padrão: datesortDirection string
asc, desc. Padrão: descpage number
1pageSize number
Campos da resposta
Cada objeto em teamMemberSpend contém:
userIdstring - ID de usuário codificado (por exemplo,user_PDSPmvukpYgZEDXsoNirw3CFhy). Compartilha o mesmo namespace de identificadores queteamMembers[].idde/teams/members.namestring - Nome de exibição do usuárioemailstring - Endereço de e-mail do usuáriorolestring - Função na equipe (por exemplo,member,owner)spendCentsnumber - Gastos sob demanda em centavos no ciclo de cobrança atual (exclui o uso incluído)overallSpendCentsnumber - Gastos totais em centavos no ciclo de cobrança atual, incluindo uso sob demanda e uso incluídofastPremiumRequestsnumber - Número de solicitações premium baseadas em uso feitas durante o ciclo de cobrançahardLimitOverrideDollarsnumber - Substituição personalizada do limite rígido de gastos em dólares para este usuário (0 significa sem substituição)monthlyLimitDollarsnumber | null - Limite mensal de gastos em dólares definido para este usuário, ounullse nenhum limite estiver definidoeffectivePerUserLimitDollarsnumber - Limite de gastos por usuário atualmente aplicado em dólares, derivado demonthlyLimitDollarsehardLimitOverrideDollars
Em 4 de junho de 2026, adicionamos precisão extra aos campos spendCents e overallSpendCents para evitar erros de arredondamento ao comparar resultados com valores de fatura.
curl -X POST https://api.cursor.com/teams/spend \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "searchTerm": "[email protected]", "page": 2, "pageSize": 25 }'Resposta:
{ "teamMemberSpend": [ { "userId": "user_PDSPmvukpYgZEDXsoNirw3CFhy", "spendCents": 2450.125487, "overallSpendCents": 2450.125487, "fastPremiumRequests": 1250, "name": "Alex", "email": "[email protected]", "role": "member", "hardLimitOverrideDollars": 100, "monthlyLimitDollars": 200, "effectivePerUserLimitDollars": 100 }, { "userId": "user_kljUvI0ASZORvSEXf9hV0ydcso", "spendCents": 1875.500123, "overallSpendCents": 3200.750456, "fastPremiumRequests": 980, "name": "Sam", "email": "[email protected]", "role": "owner", "hardLimitOverrideDollars": 0, "monthlyLimitDollars": null, "effectivePerUserLimitDollars": 50 } ], "subscriptionCycleStart": 1708992000000, "totalMembers": 15, "totalPages": 1}Obter dados de eventos de uso
/teams/filtered-usage-eventsRecupere eventos de uso detalhados da sua equipe com opções de filtragem, busca e paginação. Este endpoint fornece insights granulares sobre chamadas de API, uso de modelos, consumo de tokens e custos. Os dados são agregados por hora. Recomendamos consultar este endpoint no máximo uma vez por hora. Limitado a 60 solicitações por minuto por equipe. Veja as orientações da API.
Cálculo de custos: Para reconciliar os custos no nível do evento com os totais de /teams/spend, some o campo chargedCents de todos os eventos. Esse campo inclui tanto o custo do modelo quanto a Taxa de Tokens do Cherri Code quando uma solicitação é elegível para a taxa, correspondendo aos totais do dashboard. Isso funciona tanto para planos de faturamento baseados em tokens quanto em solicitações.
O campo cursorTokenFee representa a Taxa de Tokens do Cherri Code e está presente apenas quando a taxa se aplica a uma solicitação de modelo de terceiros. Isso inclui casos em que o Auto roteia para um modelo de terceiros. Modelos próprios do Cherri Code como Grok e Composer e contas corporativas com cobrança baseada em solicitações não incluem essa taxa. Veja a Taxa de Tokens do Cherri Code.
Parâmetros
startDate number
endDate number
startDate e endDate são instantes com precisão de milissegundos, e
ambos os limites são inclusivos. Um evento exatamente em 2026-05-08T00:00:00.000Z é
incluído quando endDate é 1778198400000. Para janelas diárias de
ingestão sem sobreposição, defina o endDate da janela anterior como o
último milissegundo do dia, como 2026-05-07T23:59:59.999Z.
userId number
page number
1pageSize number
100. Máximo: 1000.email string
serviceAccountId string
cloudAgentId string
* para retornar eventos de todas as execuções do agente em nuvem.automationId string
* para retornar eventos de todas as automações.hostingType string
CLOUD- execuções hospedadas pelo Cherri CodeSELF_HOSTED- qualquer execução self-hosted (um worker do Team Pool ou um worker do My Machines)SELF_HOSTED_POOL- apenas workers do Team PoolSELF_HOSTED_MACHINE- apenas workers pessoais "My Machine"
Um valor de hostingType não reconhecido retorna um erro 400 em vez de um resultado vazio, para que um erro de digitação não seja confundido com um gasto self-hosted realmente zero. Esse filtro cobre apenas gastos com inference; execuções de computação self-hosted rodam nas suas próprias máquinas e nunca são medidas pelo Cherri Code.
Quando você envia vários filtros, o endpoint os combina com AND. Por exemplo, automationId e serviceAccountId retornam eventos que correspondem aos dois valores.
Campos de resposta
Cada objeto em usageEvents contém:
timestampstring - Carimbo de data/hora do evento em milissegundos desde a época Unix (epoch) (como string)userEmailstring - Endereço de e-mail do usuário que fez a solicitaçãoserviceAccountIdstring | undefined - ID da conta de serviço que fez a solicitação. Omitido em eventos de usuários humanos.serviceAccountNamestring | undefined - Nome de exibição da conta de serviço que fez a solicitação. Omitido em eventos de usuários humanos.cloudAgentIdstring | undefined - ID da execução do agente em nuvem associada a este evento. Omitido para eventos que não sejam de agentes em nuvem.automationIdstring | undefined - UUID da automação atribuída a este evento. Omitido em eventos fora de automações.conversationIdstring | undefined - ID da conversa (sessão do agente) que gerou este evento. Use-o para atribuir gastos a uma sessão ou como chave de junção com outras fontes que expõem IDs de conversa, como a API de Rastreamento de Código com IA. Omitido para eventos sem conversa associada.modelstring - Modelo de IA usado na solicitaçãokindstring - Categoria de cobrança (por exemplo,Usage-based,Included in Business)maxModeboolean - Se a solicitação usou o modo maxrequestsCostsnumber - Custo em unidades de solicitaçãoisTokenBasedCallboolean - Se a solicitação foi cobrada pelo uso de tokensisChargeableboolean - Se este evento gera cobrançaisHeadlessboolean - Se esta solicitação foi feita sem um cliente conectado (por exemplo, agentes em segundo plano)tokenUsageobject | undefined - Detalhes do uso de tokens (presente quandoisTokenBasedCallétrue):inputTokensnumber - Tokens de entrada consumidosoutputTokensnumber - Tokens de saída geradoscacheWriteTokensnumber - Tokens gravados no cachecacheReadTokensnumber - Tokens lidos do cachetotalCentsnumber - Custo total do modelo em centavosdiscountPercentOffnumber | undefined - Percentual de desconto aplicado, se houver
chargedCentsnumber - Valor total cobrado em centavos por este evento. Para solicitações de modelos de terceiros sujeitas à Taxa de Tokens do Cherri Code, isso inclui o custo do modelo mais a Taxa de Tokens do Cherri Code. Use este campo para reconciliar os custos no nível do evento com os totais de/teams/spend. Funciona tanto para planos de faturamento baseados em tokens quanto em solicitações.cursorTokenFeenumber | undefined - Taxa de Tokens do Cherri Code em centavos. Presente apenas quando a taxa se aplica a uma solicitação de modelo de terceiros (inclusive quando o Auto roteia para um modelo de terceiros).
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": "[email protected]", "page": 1, "pageSize": 25 }'Resposta:
{ "totalUsageEventsCount": 113, "pagination": { "numPages": 5, "currentPage": 1, "pageSize": 25, "hasNextPage": true, "hasPreviousPage": false }, "usageEvents": [ { "timestamp": "1750979225854", "userEmail": "[email protected]", "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": "[email protected]", "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": "[email protected]", "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 }}Exemplo de uso de conta de serviço:
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 }'Resposta da conta de serviço:
{ "totalUsageEventsCount": 1, "pagination": { "numPages": 1, "currentPage": 1, "pageSize": 10, "hasNextPage": false, "hasPreviousPage": false }, "usageEvents": [ { "timestamp": "1750979225854", "userEmail": "[email protected]", "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 }}Exemplo de uso de automação:
Use um UUID de automação para recuperar seus eventos de uso. A atribuição de automação funciona para automações executadas como um usuário ou como uma conta de serviço.
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 }'Cada evento correspondente inclui seu automationId e cloudAgentId. Some o campo chargedCents de todos os eventos para calcular o custo total da automação.
Exemplo de gastos de agente 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 }'Definir limite de gasto do usuário
/teams/user-spend-limitDefina limites de gasto para membros individuais da equipe. Isso permite controlar quanto cada usuário pode gastar com uso de IA dentro da sua equipe. Limitado a 250 solicitações por minuto por equipe. Veja limite de taxa.
Para atualizar até 100 membros por solicitação, use Definir limites de gasto de usuários em massa (prévia).
Parâmetros
userEmail string Obrigatório
spendLimitDollars number | null Obrigatório
null para remover o limite.- Disponibilidade: somente para Enterprise
- O usuário já deve ser membro da sua equipe
- Apenas valores inteiros são aceitos (sem valores decimais)
- Definir
spendLimitDollarscomo 0 definirá o limite como $0 - Definir
spendLimitDollarscomonulllimpará/removerá totalmente o limite
curl -X POST https://api.cursor.com/teams/user-spend-limit \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "userEmail": "[email protected]", "spendLimitDollars": 100 }'Resposta bem-sucedida:
{ "outcome": "success", "message": "Spend limit set to $100 for user [email protected]"}Resposta de erro:
{ "outcome": "error", "message": "Invalid email format"}Definir limites de gasto de usuários em massa (Prévia)
/teams/user-spend-limitsDefine limites de gasto para até 100 membros da equipe em uma única solicitação. Limitado a 20 solicitações por minuto por equipe. Veja limites de taxa.
Esta rota em massa está em prévia e pode mudar. O formato da solicitação, os campos de resposta e o comportamento de erros podem sofrer alterações antes da disponibilidade geral.
Parâmetros
updates array Obrigatório
userEmailstring - Endereço de e-mail do membro da equipespendLimitDollarsnumber | null - Limite de gasto em dólares, como número inteiro. Defina comonullpara remover o limite.
Response Fields
requestedCountnumber - Número de atualizações na solicitaçãoupdatedCountnumber - Número de limites alteradosunchangedCountnumber - Número de limites que já estavam com o valor solicitadofailedCountnumber - Número de atualizações que o Cherri Code não conseguiu aplicarresultsarray - Resultados na ordem da solicitação. Cada resultado incluiuserEmaile um statusupdated,unchangedoufailed. Resultados com falha também trazem uma mensagem deerror.
- Disponibilidade: somente para Enterprise. O endpoint em massa está em lançamento gradual; equipes que ainda não foram habilitadas recebem uma resposta
403 - Um membro da equipe inexistente gera um resultado
failedsem bloquear as demais atualizações - Campos inválidos na solicitação, e-mails duplicados ou mais de 100 atualizações retornam uma resposta
400sem aplicar nenhuma atualização - Repetir uma atualização bem-sucedida retorna
unchangede não cria outro evento de auditoria
curl -X POST https://api.cursor.com/teams/user-spend-limits \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "updates": [ { "userEmail": "[email protected]", "spendLimitDollars": 100 }, { "userEmail": "[email protected]", "spendLimitDollars": null }, { "userEmail": "[email protected]", "spendLimitDollars": 50 } ] }'Resposta:
{ "requestedCount": 3, "updatedCount": 1, "unchangedCount": 1, "failedCount": 1, "results": [ { "userEmail": "[email protected]", "status": "updated" }, { "userEmail": "[email protected]", "status": "unchanged" }, { "userEmail": "[email protected]", "status": "failed", "error": "User not found in team" } ]}Remover membro da equipe
/teams/remove-memberRemova um membro da sua equipe programaticamente. Isso é útil para automatizar fluxos de desligamento ou integrar com sistemas de RH. limitado a 50 solicitações por minuto por equipe. Veja limite de requisição.
Parâmetros
userId string
user_PDSPmvukpYgZEDXsoNirw3CFhy). Obrigatório se email não for fornecido.email string
userId não for fornecido.- Disponibilidade: somente para Enterprise
- Forneça
userIdouemail, mas não ambos - Pelo menos um membro pago deve permanecer na equipe após a remoção
- Pelo menos um administrador (owner ou free-owner) deve permanecer na equipe após a remoção
curl -X POST https://api.cursor.com/teams/remove-member \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "email": "[email protected]" }'Resposta:
{ "success": true, "userId": "user_PDSPmvukpYgZEDXsoNirw3CFhy", "hasBillingCycleUsage": true}Remover por ID de usuário:
curl -X POST https://api.cursor.com/teams/remove-member \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "userId": "user_PDSPmvukpYgZEDXsoNirw3CFhy" }'Respostas de erro:
{ "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"}Obter blocklists de repositório da equipe
/settings/repo-blocklists/reposRecupere todas as blocklists de repositório configuradas para sua equipe. Adicione repositórios e use padrões para impedir que arquivos ou diretórios sejam usados como contexto.
Exemplos de padrões
Padrões comuns de lista de bloqueio:
*- Bloqueia todo o repositório*.env- Bloqueia todos os arquivos .envconfig/*- Bloqueia todos os arquivos no diretório config**/*.secret- Bloqueia todos os arquivos .secret em qualquer subdiretóriosrc/api/keys.ts- Bloqueia um arquivo específico
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \ -u YOUR_API_KEY:Resposta:
{ "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": ["*"] } ]}Fazer upsert em blocklists de repositório
/settings/repo-blocklists/repos/upsertSubstitua as blocklists de repositório existentes para os repositórios fornecidos. Este endpoint substituirá apenas os padrões dos repositórios fornecidos. Todos os outros repositórios permanecerão inalterados.
Parameters
repos array Obrigatório
Array de objetos de blocklist de repositório. Cada objeto de repositório deve conter:
urlstring - URL do repositório a ser incluído na blocklistpatternsstring[] - Array de padrões de arquivo a serem bloqueados (padrões glob são compatíveis)
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": ["*"] } ] }'Resposta:
{ "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": ["*"] } ]}Excluir blocklist de repositório
/settings/repo-blocklists/repos/:repoIdRemova um repositório específico da blocklist. Retorna 204 No Content após a exclusão.
Parameters
repoId string Obrigatório
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \ -u YOUR_API_KEY:Resposta:
204 No ContentGrupos de diretório da equipe
As rotas da API de administração da Team em /teams/directory-groups gerenciam grupos de diretório da equipe. Esses grupos definem gastos e políticas dentro de uma única equipe. Consulte Grupos da organização para entender como eles diferem dos grupos em nível de organização e Grupos de faturamento.
Mapeie um grupo para uma equipe quando um Grupo da organização deve determinar a associação daquela equipe. Crie, liste e adicione ou remova membros de um grupo de diretório da equipe com uma Team chave de API. Para configuração pelo dashboard e SCIM, consulte grupos de diretório.
Essas rotas pertencem a uma API diferente da dos grupos de faturamento. Use esta tabela para escolher o caminho e o id corretos:
| Grupos | Caminho | ID |
|---|---|---|
| Grupos da organização | /organizations/groups | O id usa o prefixo g_. As respostas também retornam publicId com o prefixo grp_. Consulte Grupos da organização. |
| Grupos de diretório da equipe | /teams/directory-groups | O public id usa o prefixo team_group_…, como team_group_01k2ja2000e0080000000000n2. |
| Grupos de faturamento | /teams/groups | group_… |
:groupId é o public id do grupo de diretório da equipe. Ele usa o prefixo team_group_…. Não passe ids g_ ou grp_ de Grupo da organização, nem ids group_… de Grupo de faturamento.
- Autenticação: Team chave de API (Basic auth). Leituras exigem
read:*. Gravações exigemadmin:*. Chaves comadmin:*funcionam para ambos os casos. Uma gravação com uma chaveread:*retorna401. - Group IDs: Todo
:groupIdé o public id do grupo com o prefixoteam_group_…, comoteam_group_01k2ja2000e0080000000000n2. Os Grupos da organização usamg_egrp_. Os Grupos de faturamento usamgroup_…. - Paginação: As rotas de listagem aceitam
pageepageSize. Ambos os valores devem ser inteiros positivos. - Limite de taxa: Cada rota permite 20 solicitações por minuto por equipe. Consulte limites de taxa e boas práticas.
- Grupos sincronizados por SCIM: Gerencie a associação no seu provedor de identidade. Solicitações de adição e remoção de membros retornam
400para grupos sincronizados por SCIM.
As rotas de grupo compartilham estas respostas de erro:
| Status | Quando |
|---|---|
400 | Group ID, valor de paginação ou corpo da solicitação malformado |
401 | Chave de API inválida ou chave sem o escopo read:* (leituras) ou admin:* (gravações) |
404 | O grupo não existe nesta equipe |
429 | Limite de taxa excedido. A resposta inclui um cabeçalho Retry-After: 60 |
Listar grupos de diretório da equipe
/teams/directory-groupsRecupere os grupos de diretório da equipe vinculada à sua chave de API.
Parâmetros de consulta
page number
1.pageSize number
50. Limitado a 200; valores acima de 200 são reduzidos para 200.Campos de resposta
Cada objeto em groups contém:
idstring - Public id do grupo com o prefixoteam_group_…. Use esse valor como:groupIdnas demais rotas.namestring - Nome do grupomemberCountnumber - Número de membros no grupomonthlySpendingLimitDollarsnumber | null - Limite de gasto mensal em dólares inteiros para cada membro do grupo.nullsignifica que o grupo não tem limite.createdAtstring - Data de criação no formato ISO 8601updatedAtstring - Data da última atualização no formato ISO 8601
pagination object
page, pageSize, totalCount, totalPages, hasNextPage e hasPreviousPage.curl -X GET "https://api.cursor.com/teams/directory-groups?page=1&pageSize=50" \ -u YOUR_API_KEY:Resposta:
{ "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 }}Obter grupo de diretório da equipe
/teams/directory-groups/:groupIdRecupera um grupo de diretório da equipe.
Parâmetros
groupId string Obrigatório
team_group_…, como team_group_01k2ja2000e0080000000000n2. IDs de Grupo de organização g_ ou grp_ e IDs de Grupo de faturamento group_… retornam 400 ou 404.Campos de resposta
O objeto group contém id, name, memberCount, monthlySpendingLimitDollars, createdAt e updatedAt. Esses campos são os mesmos da resposta de Listar grupos de diretório da equipe.
curl -X GET https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2 \ -u YOUR_API_KEY:Resposta:
{ "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" }}Criar grupo de diretório da equipe
/teams/directory-groupsCria um grupo de diretório da equipe, com associação gerenciada manualmente. Para criar um grupo sincronizado por SCIM, sincronize-o a partir do seu provedor de identidade. Consulte SCIM.
Corpo da solicitação
name string Obrigatório
Campos de resposta
Retorna 201 Created com o novo objeto group. O objeto contém id, name, memberCount, monthlySpendingLimitDollars, createdAt e updatedAt. O id é o public id do grupo com o prefixo team_group_….
Erros
400- O nome do grupo está ausente, vazio ou já está em uso por outro grupo ativo.
curl -X POST https://api.cursor.com/teams/directory-groups \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "name": "Engineering" }'Resposta:
{ "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" }}Atualizar grupo de diretório da equipe
/teams/directory-groups/:groupIdAtualize o nome ou o limite de gasto mensal de um grupo. As atualizações são parciais: inclua pelo menos um campo; qualquer campo omitido mantém o valor atual.
Parâmetros
groupId string Obrigatório
team_group_…, como team_group_01k2ja2000e0080000000000n2.Corpo da solicitação
name string
monthlySpendingLimitDollars number
0 e 2147483647.clearMonthlySpendingLimitDollars boolean
true para remover o limite de gasto do grupo. Não inclua monthlySpendingLimitDollars na mesma solicitação.Campos de resposta
Retorna o objeto group atualizado com id, name, memberCount, monthlySpendingLimitDollars, createdAt e updatedAt.
Erros
400- A solicitação não contém campos de atualização, contém um valor inválido, usa o nome de outro grupo ativo ou define e remove o limite de gasto na mesma solicitação.
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 }'Resposta:
{ "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" }}Excluir grupo de diretório da equipe
/teams/directory-groups/:groupIdExclui um grupo de diretório da equipe. O grupo precisa estar vazio: remova todos os membros antes de excluí-lo.
Parâmetros
groupId string Obrigatório
team_group_…, como team_group_01k2ja2000e0080000000000n2.Resposta
Retorna 204 No Content após excluir o grupo.
Erros
400- O grupo ainda tem membros ou possui um mapeamento SCIM ativo.
Não é possível excluir um grupo com um mapeamento SCIM ativo por este endpoint. Remova o mapeamento no dashboard, remova todos os membros e só então exclua o grupo.
curl -X DELETE https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2 \ -u YOUR_API_KEY:Resposta: 204 No Content
List de membros de grupo de diretório da equipe
/teams/directory-groups/:groupId/membersRecupera os membros de um grupo de diretório da equipe.
Parâmetros
groupId string Obrigatório
team_group_…, como team_group_01k2ja2000e0080000000000n2.Parâmetros de consulta
page number
1.pageSize number
50. O limite é 200; valores acima de 200 são reduzidos para 200.Campos de resposta
Cada objeto em members contém:
userIdstring - ID público do usuário com o prefixouser_namestring - Nome de exibição do membroemailstring - Endereço de email do membrojoinedAtstring - Momento em que o membro foi adicionado ao grupo, no formato ISO 8601
pagination object
page, pageSize, totalCount, totalPages, hasNextPage e hasPreviousPage.curl -X GET "https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2/members?page=1&pageSize=50" \ -u YOUR_API_KEY:Resposta:
{ "members": [ { "userId": "user_abc123", "name": "Alex Developer", "email": "[email protected]", "joinedAt": "2026-01-15T10:30:00.000Z" }, { "userId": "user_def456", "name": "Sam Engineer", "email": "[email protected]", "joinedAt": "2026-01-16T09:15:00.000Z" } ], "pagination": { "page": 1, "pageSize": 50, "totalCount": 2, "totalPages": 1, "hasNextPage": false, "hasPreviousPage": false }}Adicionar membros a um grupo de diretório da equipe
/teams/directory-groups/:groupId/members/bulk-addAdicione membros a um grupo de diretório manual da equipe.
Parâmetros
groupId string Obrigatório
team_group_…, como team_group_01k2ja2000e0080000000000n2.Corpo da solicitação
userIds string[] Obrigatório
user_. Uma única solicitação pode incluir até 100 usuários.Campos de resposta
addedCount number
Grupos sincronizados por SCIM rejeitam alterações manuais de associação com uma resposta 400.
Gerencie a associação deles no seu provedor de identidade.
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"] }'Resposta:
{ "addedCount": 2}Remover membros de um grupo de diretório da equipe
/teams/directory-groups/:groupId/members/bulk-removeRemova membros de um grupo de diretório manual da equipe.
Parâmetros
groupId string Obrigatório
team_group_…, como team_group_01k2ja2000e0080000000000n2.Corpo da solicitação
userIds string[] Obrigatório
user_. Uma única solicitação pode incluir até 100 usuários.Campos de resposta
removedCount number
Grupos sincronizados por SCIM rejeitam alterações manuais de associação com uma resposta 400.
Gerencie a associação deles no seu provedor de identidade.
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"] }'Resposta:
{ "removedCount": 1}Grupos de faturamento
Grupos de faturamento permitem que administradores Enterprise entendam e gerenciem os gastos entre grupos de usuários. Essa funcionalidade é útil para relatórios, rateios internos e orçamento.
Os membros só podem estar em um grupo de faturamento por vez. Membros não atribuídos a nenhum grupo são colocados em um grupo reservado Unassigned.
Os grupos de faturamento ficam em /teams/groups e usam ids group_…. Os grupos de diretório da equipe ficam em /teams/directory-groups e usam ids team_group_…. As duas APIs não aceitam os ids uma da outra.
list grupos
/teams/groupsRecupere todos os grupos de faturamento da sua equipe com dados de gastos do ciclo de cobrança atual.
parâmetro
billingCycle string
2025-01-15) para especificar qual ciclo de cobrança consultar. O padrão é o ciclo atual.curl -X GET "https://api.cursor.com/teams/groups?billingCycle=2025-01-15" \ -u YOUR_API_KEY:Resposta:
{ "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": "[email protected]", "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" }}Obter grupo
/teams/groups/:groupIdObtém um único grupo de cobrança com seus membros e dados de gasto para o ciclo de cobrança atual.
Parâmetros
groupId string Obrigatório
group_PDSPmvukpYgZEDXsoNirw3CFhy)billingCycle string
2025-01-15) para especificar qual ciclo de cobrança consultar. O padrão é o ciclo atual.curl -X GET "https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy?billingCycle=2025-01-15" \ -u YOUR_API_KEY:Resposta:
{ "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": "[email protected]", "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": "[email protected]", "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": "[email protected]", "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" }}Criar grupo
/teams/groupsCrie um novo grupo de cobrança. Limitado a 20 solicitações por minuto por equipe.
Parâmetros
name string Obrigatório
type string
BILLING é suportado. Padrão: BILLINGcurl -X POST https://api.cursor.com/teams/groups \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "name": "Engineering" }'Resposta:
{ "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": [] }}Atualizar grupo
/teams/groups/:groupIdAtualize o nome de um grupo de cobrança ou o vínculo com o grupo de diretório. limitado a 20 solicitações por minuto por equipe.
Apenas um campo pode ser atualizado por solicitação. Para atualizar tanto o nome quanto o vínculo de diretório, faça solicitações separadas.
Parâmetros
groupId string Obrigatório
name string
directoryGroupId string | null
null para desvincular da sincronização de diretóriocurl -X PATCH https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "name": "Platform Engineering" }'Resposta:
{ "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": "[email protected]", "joinedAt": "2024-01-15T10:30:00.000Z" } ] }}Excluir grupo
/teams/groups/:groupIdExclua um grupo de cobrança. Retorna 204 No Content em caso de sucesso. limitado a 20 solicitações por minuto por equipe.
Excluir um grupo de cobrança é uma operação destrutiva; os dados não podem ser recuperados. Todo o uso histórico de grupos excluídos é reatribuído retroativamente ao grupo Unassigned.
Parâmetros
groupId string Obrigatório
curl -X DELETE https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy \ -u YOUR_API_KEY:Resposta:
204 No ContentAdicionar membros a um grupo
/teams/groups/:groupId/membersAdicione membros da equipe a um grupo de cobrança. Os usuários já devem ser membros da sua equipe e não podem já estar atribuídos a outro grupo. Limitado a 20 solicitações por minuto, por equipe.
Grupos de cobrança sincronizados com SCIM não podem ser modificados via API. Toda atribuição de membros para grupos sincronizados com SCIM deve ser feita via SCIM.
Parâmetros
groupId string Obrigatório
userIds string[] Obrigatório
["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"] }'Resposta:
{ "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": "[email protected]", "joinedAt": "2024-01-25T16:50:00.000Z" }, { "userId": "user_def456", "name": "Sam Engineer", "email": "[email protected]", "joinedAt": "2024-01-25T16:50:00.000Z" } ] }}Remover membros do grupo
/teams/groups/:groupId/membersRemova membros da equipe de um grupo de cobrança. Os membros removidos são movidos para o grupo Unassigned. limitado a 20 solicitações por minuto por equipe.
Grupos de cobrança sincronizados com SCIM não podem ser modificados via API. Todas as alterações de membros para grupos sincronizados com SCIM devem ser feitas via SCIM.
Parâmetros
groupId string Obrigatório
userIds string[] Obrigatório
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"] }'Resposta:
{ "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": "[email protected]", "joinedAt": "2024-01-25T16:50:00.000Z" } ] }}Acesso a modelos
As rotas de acesso a modelos estão em prévia e podem mudar. Caminhos, campos de resposta e comportamento de erros podem mudar antes da disponibilidade geral.
Leia e atualize a política de acesso a modelos da equipe: se uma política personalizada está ativa, os valores padrão para novos provedores e modelos, os toggles por provedor / por modelo e configurações por modelo, como Fast e esforço de raciocínio.
Habilitar um modelo sem configurações de parâmetros mantém os valores padrão do catálogo. Use configurações por modelo quando esses valores padrão, como Fast, não corresponderem à política da sua equipe.
Estas rotas retornam a configuração base da equipe. Os grupos da organização ainda podem ampliar o acesso de alguns membros; as listas de permissão de grupos não fazem parte desta API. Os controles de chave de API pessoal (BYOK) permanecem no dashboard.
Para consultas em toda a organização e toggles em massa entre equipes vinculadas, consulte as rotas de acesso a modelos da API da organização.
- Disponibilidade: Equipes com controle de acesso a modelos habilitado
- Autenticação: Chave de API da equipe (autenticação Basic). Consultas exigem
models:read. Gravações exigemmodels:*. Chaves comadmin:*funcionam para ambos. Chaves genéricasread:*não podem chamar estas rotas. - IDs de provedor e modelo: Os segmentos do caminho são IDs do catálogo, como
anthropiceclaude-opus-4-6, e não nomes de exibição. As respostas GET incluem os nomes de exibição. - Configure primeiro: Consultas e gravações de provedores e modelos retornam 409 enquanto
stateforunrestricted(oulegacy). O primeiroPUT /teams/model-access/configurationcom valores padrão em uma equipe unrestricted ativa a política e inicializa o catálogo atual (assim como ocorre ao salvar pela primeira vez na página Modelos). PUTs de configuração posteriores com valores padrão atualizam apenas os valores padrão e mantêm os toggles existentes. - Retornar ao estado unrestricted:
PUT /teams/model-access/configurationcom{ "state": "unrestricted" }remove a política personalizada para questatese torneunrestrictednovamente. - Limites de taxa: 20 solicitações por minuto. Gravações aparecem nos logs de auditoria da equipe como eventos
team_settings. Consulte limites de taxa e boas práticas.
Obter configuração de acesso a modelos
/teams/model-access/configurationRetorna se a equipe tem uma política personalizada de acesso a modelos e os valores padrão para novos provedores e modelos.
Campos da resposta
teamId number
state string
unrestricted, custom ou legacy.newProviderDefault string | null
enabled ou disabled quando state é custom. Caso contrário, null.newModelDefault string | null
enabled ou disabled quando state é custom. Caso contrário, null.curl -X GET https://api.cursor.com/teams/model-access/configuration \ -u YOUR_API_KEY:Resposta:
{ "teamId": 7, "state": "unrestricted", "newProviderDefault": null, "newModelDefault": null}Atualizar a configuração de acesso a modelos
/teams/model-access/configurationCrie uma política personalizada, atualize os valores padrão ou restaure o acesso irrestrito da equipe.
Envie uma das opções a seguir:
{ "state": "unrestricted" }para remover a política personalizada (e as listas legadas de permitidos/bloqueados), definindostatecomounrestricted{ "newProviderDefault", "newModelDefault" }para criar ou atualizar uma política personalizada (forma abreviada compatível com versões anteriores destate: "custom")
O primeiro PUT de valores padrão em uma equipe irrestrita cria uma política personalizada e adiciona entradas ao catálogo. Os PUTs de valores padrão subsequentes atualizam apenas os valores padrão e mantêm os toggles existentes.
Corpo da solicitação
state string
unrestricted para remover a política. Omita ao enviar valores padrão.newProviderDefault string
enabled ou disabled. Obrigatório ao criar ou atualizar uma política personalizada; omita quando state for unrestricted.newModelDefault string
enabled ou disabled. Obrigatório ao criar ou atualizar uma política personalizada; omita quando state for 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" }'Resposta:
{ "teamId": 7, "state": "custom", "newProviderDefault": "disabled", "newModelDefault": "enabled"}Restaure o acesso irrestrito da equipe:
curl -X PUT https://api.cursor.com/teams/model-access/configuration \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "state": "unrestricted" }'Resposta:
{ "teamId": 7, "state": "unrestricted", "newProviderDefault": null, "newModelDefault": null}Listar provedores de acesso a modelos
/teams/model-access/providersLista os provedores e modelos do catálogo com flags de habilitação resolvidas e parameters por modelo. Retorna 409 quando a equipe não tiver uma política personalizada.
Cada modelo inclui uma matriz parameters definida pelo catálogo. Os IDs dos parâmetros e os valores compatíveis vêm do catálogo de modelos (por exemplo, fast, reasoning, effort, context). Use este GET para descobrir quais parâmetros um modelo oferece suporte antes de fazer configurações.
Campos de parameters do modelo
id string
fast ou reasoning).displayName string
supportedValues string[]
allowedValues string[]
configuredDefaultValue string | null
null quando não definido.catalogDefaultValue string | null
curl -X GET https://api.cursor.com/teams/model-access/providers \ -u YOUR_API_KEY:Resposta:
{ "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" } ] } ] } ]}Atualizar provedor de acesso a modelos
/teams/model-access/providers/:providerHabilita ou desabilita um provedor. Retorna 409 quando a equipe ainda está com a política unrestricted ou legacy.
Parâmetros
provider string Obrigatório
openai ou anthropic).Corpo da solicitação
enabled boolean Obrigatório
curl -X PUT https://api.cursor.com/teams/model-access/providers/openai \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{"enabled": false}'Listar modelos de um provedor
/teams/model-access/providers/:provider/modelsLista os modelos de um provedor com as flags de habilitação resolvidas e parameters por modelo. Os campos de parâmetro correspondem à resposta de provedores. Retorna 409 quando a equipe não tem uma política personalizada.
Parâmetros
provider string Obrigatório
anthropic).curl -X GET https://api.cursor.com/teams/model-access/providers/anthropic/models \ -u YOUR_API_KEY:Atualizar modelo no acesso a modelos
/teams/model-access/providers/:provider/models/:modelHabilite ou desabilite um modelo e, opcionalmente, defina restrições e valores padrão para parâmetros específicos do modelo. Retorna 409 se a equipe ainda estiver como unrestricted ou legacy.
Parâmetros
provider string Obrigatório
anthropic).model string Obrigatório
claude-opus-4-6).Corpo da solicitação
enabled boolean Obrigatório
parameters object
allowedValuesstring[] | null: Restrinja os valores que os membros podem selecionar. Passenullpara remover a restrição.defaultValuestring | null: Valor padrão da equipe. Deve estar emallowedValuesquando houver uma restrição definida. Passenullpara restaurar o valor padrão do catálogo.
IDs ou valores de parâmetros desconhecidos, matrizes allowedValues vazias, valores padrão fora de allowedValues e configurações que não resultam em nenhuma variante de modelo válida retornam 400.
Desabilite o Fast em um modelo:
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"] } } }'Defina os níveis de raciocínio permitidos e um valor padrão:
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" } } }'Remova uma restrição e restaure o valor padrão do catálogo:
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 } } }'Resposta:
{ "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" } ]}Erros
Os corpos das respostas de erro usam:
{ "code": "error", "message": "…" }| Status | Quando |
|---|---|
401 | Chave inválida ou ausência de models:read / models:* (ou admin:*) |
403 | O controle de acesso a modelos não está disponível para essa equipe |
409 | Leitura ou gravação de provedor ou modelo quando state é unrestricted ou legacy |
400 | ID de provedor, modelo ou parâmetro desconhecido, ou valor de parâmetro desconhecido; corpo inválido; allowedValues vazio; padrão fora de allowedValues; configurações que não resultam em nenhuma variante de modelo válida; ou bloqueio de um modelo obrigatório do Smart Auto |
Grok Bot
Ative o Grok Bot e gerencie recursos, Forçar Auto-review, acesso de grupos, política de rede, regras da equipe e setup scripts.
- Autenticação: chave de API da equipe (Basic auth). Leituras exigem
read:*ouadmin:*. Gravações exigemadmin:*. Uma gravação com uma chaveread:*retorna401. - Limites de taxa: 20 solicitações por minuto, por equipe e por endpoint. Ao exceder o limite, a API retorna
429comRetry-After: 60. Veja limites de taxa. - Leituras em todos os planos:
GET /grok-bot/access,/networke/auto-reviewretornam a política efetiva em todos os planos. Gravações retornam403quando a funcionalidade não está disponível para a equipe.
Ativar o Grok Bot
/grok-bot/enableAtiva o Grok Bot para a equipe. A primeira ativação em uma equipe Enterprise elegível inicia o período de teste. Retorna 204 No Content em caso de sucesso.
curl -X POST https://api.cursor.com/grok-bot/enable \ -u YOUR_API_KEY:resposta:
204 No ContentDesativar o Grok Bot
/grok-bot/disableDesativa o Grok Bot para a equipe. Os membros perdem o acesso, mas seus computadores não são excluídos. Retorna 403 em planos Teams.
curl -X POST https://api.cursor.com/grok-bot/disable \ -u YOUR_API_KEY:resposta:
204 No ContentObter recursos do Grok Bot
/grok-bot/capabilitiesRetorna os recursos do Grok Bot da equipe.
Campos da resposta
enabled boolean
cloudAgents boolean
templateSharing string | null
all, team_only, none ou null para o padrão da equipe.actionRecording boolean
localExecution string | null
never, ask, always ou null para nenhum limite.localEgressAllowed boolean
curl -X GET https://api.cursor.com/grok-bot/capabilities \ -u YOUR_API_KEY:Resposta:
{ "enabled": true, "cloudAgents": true, "templateSharing": "team_only", "actionRecording": false, "localExecution": "ask", "localEgressAllowed": true}Atualizar recursos do Grok Bot
/grok-bot/capabilitiesAtualize os recursos do Grok Bot. Campos omitidos permanecem inalterados. Retorna 403 quando um campo não está disponível para a equipe.
enabled é somente leitura. Use Ativar o Grok Bot ou Desativar o Grok Bot. Envie pelo menos um campo.
Parâmetros
cloudAgents boolean
templateSharing string | null
all, team_only, none ou null para restaurar o padrão da equipe.actionRecording boolean
localExecution string | null
never, ask, always ou null para remover o limite da equipe.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 }'resposta:
{ "enabled": true, "cloudAgents": false, "templateSharing": "team_only", "actionRecording": false, "localExecution": "never", "localEgressAllowed": false}Obter Forçar Auto-review
/grok-bot/auto-reviewRetorna a política de Forçar Auto-review da equipe.
Campos da resposta
enforced boolean
true, todos os membros devem manter Forçar Auto-review ativado.rules object
allow e block da equipe que alimentam o Auto-review.curl -X GET https://api.cursor.com/grok-bot/auto-review \ -u YOUR_API_KEY:resposta:
{ "enforced": true, "rules": { "allow": ["Read-only git commands"], "block": ["Publishing releases"] }}Substituir Forçar Auto-review
/grok-bot/auto-reviewSubstitui a política de Forçar Auto-review da equipe. Retorna 403 quando Forçar Auto-review não está disponível para a equipe.
Listas allow e block vazias mantêm as instruções armazenadas se sua equipe não puder definir regras de Auto-review. Listas não vazias retornam 403 nesse caso.
Parâmetros
enforced boolean Obrigatório
true, todos os membros devem manter Forçar Auto-review ativado.rules object Obrigatório
allowstring[]: Até 20 instruções, 1.000 caracteres cada. Espaços em excesso removidos e duplicadas descartadas.blockstring[]: Até 20 instruções, 1.000 caracteres cada. Espaços em excesso removidos e duplicadas descartadas.
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"] } }'Bloquear Forçar Auto-review sem alterar as instruções:
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": [] } }'Resposta:
{ "enforced": true, "rules": { "allow": ["Read-only git commands"], "block": ["Publishing releases"] }}Obter acesso ao Grok Bot
/grok-bot/accessRetorna quem na equipe pode usar o Grok Bot.
campo da resposta
mode string
all ou limited.groups array
mode é limited. Cada item tem um id codificado e um name. Vazio quando mode é all.curl -X GET https://api.cursor.com/grok-bot/access \ -u YOUR_API_KEY:Resposta:
{ "mode": "limited", "groups": [ { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Platform Engineering" } ]}Atualizar acesso ao Grok Bot
/grok-bot/accessDefine quem na equipe pode usar o Grok Bot. Retorna 403 quando o acesso de grupos não está disponível para a equipe.
Parâmetros
mode string Obrigatório
all para todos os membros ou limited para grupos de faturamento selecionados.groupIds array
mode é limited (1-100, duplicatas contam uma única vez). Omita quando mode é all.IDs desconhecidos ou malformados, uma lista limited vazia ou IDs de grupo junto com all retornam 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"] }'Resposta:
{ "mode": "limited", "groups": [ { "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy", "name": "Platform Engineering" } ]}Obter a política de rede do Grok Bot
/grok-bot/networkRetorna a política de rede do Grok Bot da equipe.
Campos da resposta
egressMode string
unset, allow_all, default_with_network_settings ou network_settings_only.allowlist array
host-or-CIDR:port, como 54.85.223.0/24:3306.locked boolean
true, as políticas de grupo não podem sobrepor a política da equipe.curl -X GET https://api.cursor.com/grok-bot/network \ -u YOUR_API_KEY:Resposta:
{ "egressMode": "network_settings_only", "allowlist": ["linkedin.com", "*.crunchbase.com", "10.0.0.0/8", "54.85.223.0/24:3306"], "locked": true}Substituir a política de rede do Grok Bot
/grok-bot/networkSubstitui a política de rede do Grok Bot da equipe. Retorna 403 em planos Teams.
Parâmetros
egressMode string Obrigatório
unset: não aplica nenhuma políticaallow_all: permite todos os destinosdefault_with_network_settings: valores padrão do Cherri Code mais a lista de permissãonetwork_settings_only: a lista de permissão e os destinos necessários para executar o Grok Bot
allowlist array Obrigatório
host-or-CIDR:port, como 54.85.223.0/24:3306.locked boolean Obrigatório
true, as políticas de grupo não podem sobrepor a política da equipe.Corpos parciais, modos desconhecidos e entradas inválidas na lista de permissão retornam 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 }'Resposta:
{ "egressMode": "network_settings_only", "allowlist": ["linkedin.com", "*.crunchbase.com", "10.0.0.0/8", "54.85.223.0/24:3306"], "locked": true}Listar regras de equipe do Grok Bot
/grok-bot/team-rulesLista as regras de equipe do Grok Bot, das mais recentes para as mais antigas.
Parâmetros
limit number
50. Máximo: 100.cursor string
nextCursor anterior.curl -X GET "https://api.cursor.com/grok-bot/team-rules?limit=50" \ -u YOUR_API_KEY:Resposta:
{ "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}Criar regra de equipe do Grok Bot
/grok-bot/team-rulesCria uma regra de equipe do Grok Bot. Cada equipe pode armazenar até 50 regras do Grok Bot. Retorna 201.
Parâmetros
name string Obrigatório
content string Obrigatório
enabled boolean Obrigatório
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 }'Resposta:
{ "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" }}Atualizar regra de equipe do Grok Bot
/grok-bot/team-rules/:idAtualiza uma regra de equipe do Grok Bot. Retorna 404 quando a regra não existe.
Envie pelo menos um campo.
Parâmetros
id string Obrigatório
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 }'Resposta:
{ "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" }}Excluir regra de equipe do Grok Bot
/grok-bot/team-rules/:idExclui uma regra de equipe do Grok Bot. Retorna 204 No Content em caso de sucesso.
Parâmetros
id string Obrigatório
curl -X DELETE https://api.cursor.com/grok-bot/team-rules/rule_PDSPmvukpYgZEDXsoNirw3CFhy \ -u YOUR_API_KEY:Resposta:
204 No ContentListar manifestos de configuração do Grok Bot
/grok-bot/setup-manifestsLista os manifestos de configuração do Grok Bot, ordenados por id.
Parâmetros
limit number
50. Máximo: 100.cursor string
nextCursor anterior.curl -X GET "https://api.cursor.com/grok-bot/setup-manifests?limit=50" \ -u YOUR_API_KEY:Resposta:
{ "manifests": [ { "id": "toolchain", "scripts": [ { "id": "node", "setup": "mise install node@22", "check": "node --version" }, { "id": "pnpm", "setup": "npm i -g pnpm" } ] } ], "nextCursor": null}Criar ou atualizar manifesto de configuração do Grok Bot
/grok-bot/setup-manifests/:manifestIdCria ou substitui um manifesto de configuração. Uma equipe pode armazenar até 100 manifestos. Retorna 409 quando o manifesto é alterado durante a solicitação.
Parâmetros
manifestId string Obrigatório
., _ ou -.scripts array Obrigatório
idstring: mesmo formato demanifestIdsetupstring: comando de instalação não vaziocheckstring: comando de verificação opcional
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" } ] }'Resposta:
{ "manifest": { "id": "toolchain", "scripts": [ { "id": "node", "setup": "mise install node@22", "check": "node --version" }, { "id": "pnpm", "setup": "npm i -g pnpm" } ] }}Excluir manifesto de configuração do Grok Bot
/grok-bot/setup-manifests/:manifestIdExclui um manifesto de configuração. Retorna 204 No Content em caso de sucesso.
Parâmetros
manifestId string Obrigatório
curl -X DELETE https://api.cursor.com/grok-bot/setup-manifests/toolchain \ -u YOUR_API_KEY:Resposta:
204 No ContentErros
Os corpos das respostas de erro usam:
{ "code": "error", "message": "…" }| Status | Quando |
|---|---|
401 | Chave inválida, ausência de read:* / admin:*, ou API de administração do Grok Bot não habilitada para a equipe |
403 | A gravação não está disponível para a equipe ou para seu plano |
404 | Um ID de regra ou de manifesto bem formado no path não existe |
409 | Um manifesto de configuração foi alterado durante a solicitação |
400 | Corpo ou ID inválido; PATCH vazio; enabled em recursos; grupo desconhecido; regras ou manifestos em excesso; nenhum owner para atribuir a um manifesto de configuração |
429 | O rate limit do endpoint foi excedido |