Skip to main content

Command Palette

Search for a command to run...

API

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

GET/teams/members

Recupere todos os membros da equipe e seus detalhes.

Response Fields

teamMembers array

Array de objetos de membros da equipe, cada um contendo:
  • id string - 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 recurso cursor.user.account_id.
  • email string - Endereço de e-mail do membro da equipe
  • name string - Nome de exibição do membro da equipe
  • role string - Função na equipe (por exemplo, member, owner)
  • isRemoved boolean - 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

GET/teams/audit-logs

Recupere 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

Horário inicial (o padrão é 7 dias atrás). Consulte Formatos de data

endTime string | number

Horário final (o padrão é agora). Consulte Formatos de data

eventTypes string

Tipos de evento separados por vírgula para filtrar. Valores possíveis: 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_link

search string

Termo de busca para filtrar eventos

page number

Número da página (indexado a partir de 1). Padrão: 1

pageSize number

Resultados por página (1-500). Padrão: 100

users string

Filtrar por usuários. Consulte Filtragem de usuários abaixo

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:00Z ou 2024-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) ou 1705315200000 (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:

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

POST/teams/daily-usage-data

Recupere 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

Data de início em milissegundos desde a época

endDate number Obrigatório

Data de término em milissegundos desde a época

page number

Número da página (indexada em 1). Quando fornecida junto com 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

Número de usuários por página. Quando fornecido juntamente com page, ativa a paginação e retorna dados de todos os membros da equipe com associação durante o intervalo de datas solicitado.

Campos da resposta

Cada objeto na matriz data contém:

  • userId number - Identificador único do usuário
  • day string - A data à qual este registro se refere (data ISO, por exemplo, 2024-03-18)
  • date number - Data em milissegundos desde a época
  • email string - Endereço de e-mail do usuário
  • isActive boolean - Indica se o usuário teve atividade neste dia (presente apenas com paginação)
  • totalLinesAdded number - Total de linhas de código adicionadas
  • totalLinesDeleted number - Total de linhas de código excluídas
  • acceptedLinesAdded number - Linhas sugeridas pela IA que foram adicionadas e aceitas
  • acceptedLinesDeleted number - Linhas sugeridas pela IA cuja exclusão foi aceita
  • totalApplies number - Total de ações de aplicação de código por AI
  • totalAccepts number - Total de sugestões de IA aceitas
  • totalRejects number - Total de sugestões de IA rejeitadas
  • totalTabsShown number - Total de conclusões de Tab exibidas ao usuário
  • totalTabsAccepted number - Total de sugestões do Tab aceitas pelo usuário
  • composerRequests number - Número de solicitações feitas ao Composer
  • chatRequests number - Número de solicitações de chat realizadas
  • agentRequests number - Número de solicitações realizadas no modo Agent
  • cmdkUsages number - Número de usos da edição inline com Cmd+K
  • subscriptionIncludedReqs number - Solicitações incluídas no plano de assinatura
  • apiKeyReqs number - Solicitações feitas com a chave de API
  • usageBasedReqs number - Solicitações por uso excedente
  • bugbotUsages number - Número de usos do Bugbot
  • mostUsedModel string | null - Modelo de IA mais usado no dia
  • applyMostUsedExtension string | null - Extensão de arquivo mais usada para ações de aplicação
  • tabMostUsedExtension string | null - Extensão de arquivo mais usada nas conclusões do Tab
  • clientVersion string | 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

POST/teams/spend

Recupere informações de gastos do ciclo de cobrança atual com busca, ordenação e paginação.

Parameters

searchTerm string

Buscar em nomes de usuários e e-mails

sortBy string

Ordenar por: amount, date, user. Padrão: date

sortDirection string

Direção da ordenação: asc, desc. Padrão: desc

page number

Número da página (baseado em 1). Padrão: 1

pageSize number

Resultados por página

Campos da resposta

Cada objeto em teamMemberSpend contém:

  • userId string - ID de usuário codificado (por exemplo, user_PDSPmvukpYgZEDXsoNirw3CFhy). Compartilha o mesmo namespace de identificadores que teamMembers[].id de /teams/members.
  • name string - Nome de exibição do usuário
  • email string - Endereço de e-mail do usuário
  • role string - Função na equipe (por exemplo, member, owner)
  • spendCents number - Gastos sob demanda em centavos no ciclo de cobrança atual (exclui o uso incluído)
  • overallSpendCents number - Gastos totais em centavos no ciclo de cobrança atual, incluindo uso sob demanda e uso incluído
  • fastPremiumRequests number - Número de solicitações premium baseadas em uso feitas durante o ciclo de cobrança
  • hardLimitOverrideDollars number - Substituição personalizada do limite rígido de gastos em dólares para este usuário (0 significa sem substituição)
  • monthlyLimitDollars number | null - Limite mensal de gastos em dólares definido para este usuário, ou null se nenhum limite estiver definido
  • effectivePerUserLimitDollars number - Limite de gastos por usuário atualmente aplicado em dólares, derivado de monthlyLimitDollars e hardLimitOverrideDollars
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

POST/teams/filtered-usage-events

Recupere 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.

Parâmetros

startDate number

Data de início em milissegundos desde a época (epoch). Este limite é inclusivo.

endDate number

Data de término em milissegundos desde a época. Este limite é inclusivo.

userId number

Filtrar por um ID de usuário específico

page number

Número da página (indexada a partir de 1). Padrão: 1

pageSize number

Número de resultados por página. Padrão: 100. Máximo: 1000.

email string

Filtrar pelo endereço de e-mail do usuário

serviceAccountId string

Filtrar por ID da conta de serviço

cloudAgentId string

Filtrar por um ID de execução de agente em nuvem específico. Passe * para retornar eventos de todas as execuções do agente em nuvem.

automationId string

Filtrar por um UUID específico de automação. Passe * para retornar eventos de todas as automações.

hostingType string

Filtre as execuções do agente em nuvem (agente em segundo plano) pelo local onde foram executadas. Use isto para isolar os gastos com inferência de agentes self-hosted das execuções hospedadas pelo Cherri Code. Valores aceitos:
  • CLOUD - execuções hospedadas pelo Cherri Code
  • SELF_HOSTED - qualquer execução self-hosted (um worker do Team Pool ou um worker do My Machines)
  • SELF_HOSTED_POOL - apenas workers do Team Pool
  • SELF_HOSTED_MACHINE - apenas workers pessoais "My Machine"

Campos de resposta

Cada objeto em usageEvents contém:

  • timestamp string - Carimbo de data/hora do evento em milissegundos desde a época Unix (epoch) (como string)
  • userEmail string - Endereço de e-mail do usuário que fez a solicitação
  • serviceAccountId string | undefined - ID da conta de serviço que fez a solicitação. Omitido em eventos de usuários humanos.
  • serviceAccountName string | undefined - Nome de exibição da conta de serviço que fez a solicitação. Omitido em eventos de usuários humanos.
  • cloudAgentId string | undefined - ID da execução do agente em nuvem associada a este evento. Omitido para eventos que não sejam de agentes em nuvem.
  • automationId string | undefined - UUID da automação atribuída a este evento. Omitido em eventos fora de automações.
  • conversationId string | 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.
  • model string - Modelo de IA usado na solicitação
  • kind string - Categoria de cobrança (por exemplo, Usage-based, Included in Business)
  • maxMode boolean - Se a solicitação usou o modo max
  • requestsCosts number - Custo em unidades de solicitação
  • isTokenBasedCall boolean - Se a solicitação foi cobrada pelo uso de tokens
  • isChargeable boolean - Se este evento gera cobrança
  • isHeadless boolean - Se esta solicitação foi feita sem um cliente conectado (por exemplo, agentes em segundo plano)
  • tokenUsage object | undefined - Detalhes do uso de tokens (presente quando isTokenBasedCall é true):
    • inputTokens number - Tokens de entrada consumidos
    • outputTokens number - Tokens de saída gerados
    • cacheWriteTokens number - Tokens gravados no cache
    • cacheReadTokens number - Tokens lidos do cache
    • totalCents number - Custo total do modelo em centavos
    • discountPercentOff number | undefined - Percentual de desconto aplicado, se houver
  • chargedCents number - 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.
  • cursorTokenFee number | 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

POST/teams/user-spend-limit

Defina 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

Endereço de e-mail do membro da equipe

spendLimitDollars number | null Obrigatório

Limite de gastos em dólares (apenas números inteiros, sem decimais). Defina como null para remover 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)

POST/teams/user-spend-limits

Define 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.

Parâmetros

updates array Obrigatório

De 1 a 100 atualizações de limite de gasto de usuários. Cada atualização contém:
  • userEmail string - Endereço de e-mail do membro da equipe
  • spendLimitDollars number | null - Limite de gasto em dólares, como número inteiro. Defina como null para remover o limite.

Response Fields

  • requestedCount number - Número de atualizações na solicitação
  • updatedCount number - Número de limites alterados
  • unchangedCount number - Número de limites que já estavam com o valor solicitado
  • failedCount number - Número de atualizações que o Cherri Code não conseguiu aplicar
  • results array - Resultados na ordem da solicitação. Cada resultado inclui userEmail e um status updated, unchanged ou failed. Resultados com falha também trazem uma mensagem de error.
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

POST/teams/remove-member

Remova 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

ID de usuário codificado (por exemplo, user_PDSPmvukpYgZEDXsoNirw3CFhy). Obrigatório se email não for fornecido.

email string

Endereço de e-mail do membro da equipe. Obrigatório se userId não for fornecido.
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

GET/settings/repo-blocklists/repos

Recupere 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 .env
  • config/* - Bloqueia todos os arquivos no diretório config
  • **/*.secret - Bloqueia todos os arquivos .secret em qualquer subdiretório
  • src/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

POST/settings/repo-blocklists/repos/upsert

Substitua 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:

  • url string - URL do repositório a ser incluído na blocklist
  • patterns string[] - 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

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

Remova um repositório específico da blocklist. Retorna 204 No Content após a exclusão.

Parameters

repoId string Obrigatório

ID da blocklist de repositório a ser excluída
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \  -u YOUR_API_KEY:

Resposta:

204 No Content

Grupos 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:

GruposCaminhoID
Grupos da organização/organizations/groupsO 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-groupsO public id usa o prefixo team_group_…, como team_group_01k2ja2000e0080000000000n2.
Grupos de faturamento/teams/groupsgroup_…

: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.

As rotas de grupo compartilham estas respostas de erro:

StatusQuando
400Group ID, valor de paginação ou corpo da solicitação malformado
401Chave de API inválida ou chave sem o escopo read:* (leituras) ou admin:* (gravações)
404O grupo não existe nesta equipe
429Limite de taxa excedido. A resposta inclui um cabeçalho Retry-After: 60

Listar grupos de diretório da equipe

GET/teams/directory-groups

Recupere os grupos de diretório da equipe vinculada à sua chave de API.

Parâmetros de consulta

page number

Número da página. Valor padrão: 1.

pageSize number

Número de grupos por página. Valor padrão: 50. Limitado a 200; valores acima de 200 são reduzidos para 200.

Campos de resposta

Cada objeto em groups contém:

  • id string - Public id do grupo com o prefixo team_group_…. Use esse valor como :groupId nas demais rotas.
  • name string - Nome do grupo
  • memberCount number - Número de membros no grupo
  • monthlySpendingLimitDollars number | null - Limite de gasto mensal em dólares inteiros para cada membro do grupo. null significa que o grupo não tem limite.
  • createdAt string - Data de criação no formato ISO 8601
  • updatedAt string - Data da última atualização no formato ISO 8601

pagination object

Metadados de paginação: 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

GET/teams/directory-groups/:groupId

Recupera um grupo de diretório da equipe.

Parâmetros

groupId string Obrigatório

O public id do grupo com o prefixo 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

POST/teams/directory-groups

Cria 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

Nome do grupo. Deve ser único entre os grupos de diretório ativos da equipe. O Cherri Code remove os espaços em branco do início e do fim.

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

PATCH/teams/directory-groups/:groupId

Atualize 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

O public id do grupo com o prefixo team_group_…, como team_group_01k2ja2000e0080000000000n2.

Corpo da solicitação

name string

Novo nome do grupo. Deve ser único entre os grupos de diretório ativos da equipe. O Cherri Code remove os espaços em branco no início e no fim.

monthlySpendingLimitDollars number

Limite de gasto mensal, em dólares inteiros, para cada membro do grupo, entre 0 e 2147483647.

clearMonthlySpendingLimitDollars boolean

Defina como 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

DELETE/teams/directory-groups/:groupId

Exclui 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

O public id do grupo com o prefixo 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.
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

GET/teams/directory-groups/:groupId/members

Recupera os membros de um grupo de diretório da equipe.

Parâmetros

groupId string Obrigatório

O public id do grupo com o prefixo team_group_…, como team_group_01k2ja2000e0080000000000n2.

Parâmetros de consulta

page number

Número da página. O valor padrão é 1.

pageSize number

Número de membros por página. O valor padrão é 50. O limite é 200; valores acima de 200 são reduzidos para 200.

Campos de resposta

Cada objeto em members contém:

  • userId string - ID público do usuário com o prefixo user_
  • name string - Nome de exibição do membro
  • email string - Endereço de email do membro
  • joinedAt string - Momento em que o membro foi adicionado ao grupo, no formato ISO 8601

pagination object

Metadados de paginação: 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

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

Adicione membros a um grupo de diretório manual da equipe.

Parâmetros

groupId string Obrigatório

O public id do grupo com o prefixo team_group_…, como team_group_01k2ja2000e0080000000000n2.

Corpo da solicitação

userIds string[] Obrigatório

Matriz de IDs públicos de usuários com o prefixo user_. Uma única solicitação pode incluir até 100 usuários.

Campos de resposta

addedCount number

Número de associações criadas por esta solicitação. O Cherri Code ignora usuários que não fazem parte da equipe e usuários que já pertencem ao grupo, portanto eles não entram nesse total.
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

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

Remova membros de um grupo de diretório manual da equipe.

Parâmetros

groupId string Obrigatório

O public id do grupo com o prefixo team_group_…, como team_group_01k2ja2000e0080000000000n2.

Corpo da solicitação

userIds string[] Obrigatório

Matriz de IDs públicos de usuários com o prefixo user_. Uma única solicitação pode incluir até 100 usuários.

Campos de resposta

removedCount number

Número de associações removidas por esta solicitação. O Cherri Code ignora usuários que não pertencem ao grupo, portanto eles não entram nesse total.
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.

list grupos

GET/teams/groups

Recupere todos os grupos de faturamento da sua equipe com dados de gastos do ciclo de cobrança atual.

parâmetro

billingCycle string

String de data ISO (por exemplo, 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

GET/teams/groups/:groupId

Obté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

O ID do grupo codificado (por exemplo, group_PDSPmvukpYgZEDXsoNirw3CFhy)

billingCycle string

String de data ISO (por exemplo, 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

POST/teams/groups

Crie um novo grupo de cobrança. Limitado a 20 solicitações por minuto por equipe.

Parâmetros

name string Obrigatório

Nome do grupo

type string

Tipo de grupo. Atualmente, apenas BILLING é suportado. Padrão: BILLING
curl -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

PATCH/teams/groups/:groupId

Atualize 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.

Parâmetros

groupId string Obrigatório

O ID do grupo codificado

name string

Novo nome para o grupo

directoryGroupId string | null

ID do grupo de diretório com o qual sincronizar ou null para desvincular da sincronização de diretório
curl -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

DELETE/teams/groups/:groupId

Exclua um grupo de cobrança. Retorna 204 No Content em caso de sucesso. limitado a 20 solicitações por minuto por equipe.

Parâmetros

groupId string Obrigatório

O ID do grupo codificado a ser excluído
curl -X DELETE https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy \  -u YOUR_API_KEY:

Resposta:

204 No Content

Adicionar membros a um grupo

POST/teams/groups/:groupId/members

Adicione 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.

Parâmetros

groupId string Obrigatório

O ID do grupo codificado

userIds string[] Obrigatório

Array de IDs de usuários codificados a serem adicionados (por exemplo, ["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

DELETE/teams/groups/:groupId/members

Remova 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.

Parâmetros

groupId string Obrigatório

O ID do grupo codificado

userIds string[] Obrigatório

array de IDs de usuário codificados a serem removidos
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

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.

Obter configuração de acesso a modelos

GET/teams/model-access/configuration

Retorna 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

ID inteiro da equipe associado à chave de API.

state string

Um destes valores: 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

PUT/teams/model-access/configuration

Crie 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), definindo state como unrestricted
  • { "newProviderDefault", "newModelDefault" } para criar ou atualizar uma política personalizada (forma abreviada compatível com versões anteriores de state: "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

Opcional. Use 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

GET/teams/model-access/providers

Lista 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

ID do parâmetro (por exemplo, fast ou reasoning).

displayName string

Rótulo legível.

supportedValues string[]

Todos os valores permitidos pelo catálogo para este parâmetro neste modelo.

allowedValues string[]

Valores atualmente permitidos pela política da equipe.

configuredDefaultValue string | null

Valor padrão fixado pelo administrador ou null quando não definido.

catalogDefaultValue string | null

Valor padrão do catálogo para o parâmetro neste modelo.
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

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

Habilita ou desabilita um provedor. Retorna 409 quando a equipe ainda está com a política unrestricted ou legacy.

Parâmetros

provider string Obrigatório

ID do provedor no catálogo (por exemplo, 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

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

Lista 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

ID do provedor no catálogo (por exemplo, anthropic).
curl -X GET https://api.cursor.com/teams/model-access/providers/anthropic/models \  -u YOUR_API_KEY:

Atualizar modelo no acesso a modelos

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

Habilite 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

ID do provedor no catálogo (por exemplo, anthropic).

model string Obrigatório

ID do modelo no catálogo (por exemplo, claude-opus-4-6).

Corpo da solicitação

enabled boolean Obrigatório

parameters object

Mapa opcional de ID de parâmetro para configurações. Parâmetros e campos omitidos permanecem inalterados.
  • allowedValues string[] | null: Restrinja os valores que os membros podem selecionar. Passe null para remover a restrição.
  • defaultValue string | null: Valor padrão da equipe. Deve estar em allowedValues quando houver uma restrição definida. Passe null para 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": "…" }
StatusQuando
401Chave inválida ou ausência de models:read / models:* (ou admin:*)
403O controle de acesso a modelos não está disponível para essa equipe
409Leitura ou gravação de provedor ou modelo quando state é unrestricted ou legacy
400ID 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.

Ativar o Grok Bot

POST/grok-bot/enable

Ativa 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 Content

Desativar o Grok Bot

POST/grok-bot/disable

Desativa 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 Content

Obter recursos do Grok Bot

GET/grok-bot/capabilities

Retorna os recursos do Grok Bot da equipe.

Campos da resposta

enabled boolean

Indica se o Grok Bot está habilitado. Somente leitura.

cloudAgents boolean

Indica se os membros podem delegar trabalho a Cloud Agents.

templateSharing string | null

all, team_only, none ou null para o padrão da equipe.

actionRecording boolean

Indica se o Action Recording está habilitado.

localExecution string | null

Limite da equipe para Bots na máquina de um membro: never, ask, always ou null para nenhum limite.

localEgressAllowed boolean

Indica se os membros podem rotear o tráfego web do Grok Bot pelo próprio computador (Allow Local Egress Routing; somente para Enterprise).
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

PATCH/grok-bot/capabilities

Atualize os recursos do Grok Bot. Campos omitidos permanecem inalterados. Retorna 403 quando um campo não está disponível para a equipe.

Parâmetros

cloudAgents boolean

Se os membros podem delegar trabalho a Cloud Agents.

templateSharing string | null

all, team_only, none ou null para restaurar o padrão da equipe.

actionRecording boolean

Se o Action Recording está habilitado.

localExecution string | null

never, ask, always ou null para remover o limite da equipe.

localEgressAllowed boolean

Se os membros podem rotear o tráfego web do Grok Bot pelo próprio computador (Allow Local Egress Routing; somente para Enterprise). Retorna 403 quando os controles de roteamento de saída local não estão habilitados para a equipe.
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

GET/grok-bot/auto-review

Retorna a política de Forçar Auto-review da equipe.

Campos da resposta

enforced boolean

Quando true, todos os membros devem manter Forçar Auto-review ativado.

rules object

Listas de instruções 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

PUT/grok-bot/auto-review

Substitui 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.

Parâmetros

enforced boolean Obrigatório

Quando true, todos os membros devem manter Forçar Auto-review ativado.

rules object Obrigatório

Listas de instruções de permissão e bloqueio.
  • allow string[]: Até 20 instruções, 1.000 caracteres cada. Espaços em excesso removidos e duplicadas descartadas.
  • block string[]: 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

GET/grok-bot/access

Retorna quem na equipe pode usar o Grok Bot.

campo da resposta

mode string

all ou limited.

groups array

Grupos selecionados quando 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

PUT/grok-bot/access

Define 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

IDs de grupo encoded obtidos em Listar grupos. Obrigatório quando 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

GET/grok-bot/network

Retorna 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

Destinos permitidos: domínios, domínios com wildcard, endereços IP, faixas CIDR ou host-or-CIDR:port, como 54.85.223.0/24:3306.

locked boolean

Quando 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

PUT/grok-bot/network

Substitui a política de rede do Grok Bot da equipe. Retorna 403 em planos Teams.

Parâmetros

egressMode string Obrigatório

Um destes:
  • unset: não aplica nenhuma política
  • allow_all: permite todos os destinos
  • default_with_network_settings: valores padrão do Cherri Code mais a lista de permissão
  • network_settings_only: a lista de permissão e os destinos necessários para executar o Grok Bot

allowlist array Obrigatório

Até 500 destinos, de 1 a 253 caracteres cada. Domínios, domínios com wildcard, endereços IP, faixas CIDR ou host-or-CIDR:port, como 54.85.223.0/24:3306.

locked boolean Obrigatório

Quando 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

GET/grok-bot/team-rules

Lista as regras de equipe do Grok Bot, das mais recentes para as mais antigas.

Parâmetros

limit number

Resultados por página. Padrão: 50. Máximo: 100.

cursor string

Cherri Code opaco do 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

POST/grok-bot/team-rules

Cria 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

De 1 a 255 caracteres.

content string Obrigatório

De 1 a 30.000 caracteres.

enabled boolean Obrigatório

Se a regra está ativa.
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

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

Atualiza uma regra de equipe do Grok Bot. Retorna 404 quando a regra não existe.

Parâmetros

id string Obrigatório

ID codificado da regra, obtido na resposta de listagem ou de criação.

name string

De 1 a 255 caracteres.

content string

De 1 a 30.000 caracteres.

enabled boolean

Se a regra está ativa.
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

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

Exclui uma regra de equipe do Grok Bot. Retorna 204 No Content em caso de sucesso.

Parâmetros

id string Obrigatório

ID codificado da regra a ser excluída.
curl -X DELETE https://api.cursor.com/grok-bot/team-rules/rule_PDSPmvukpYgZEDXsoNirw3CFhy \  -u YOUR_API_KEY:

Resposta:

204 No Content

Listar manifestos de configuração do Grok Bot

GET/grok-bot/setup-manifests

Lista os manifestos de configuração do Grok Bot, ordenados por id.

Parâmetros

limit number

Resultados por página. Padrão: 50. Máximo: 100.

cursor string

Cherri Code opaco do 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

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

Cria 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

De 1 a 128 caracteres, começando com uma letra ou número, seguido por letras, números, ., _ ou -.

scripts array Obrigatório

Scripts de configuração.
  • id string: mesmo formato de manifestId
  • setup string: comando de instalação não vazio
  • check string: 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

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

Exclui um manifesto de configuração. Retorna 204 No Content em caso de sucesso.

Parâmetros

manifestId string Obrigatório

Chave do manifesto a ser excluído.
curl -X DELETE https://api.cursor.com/grok-bot/setup-manifests/toolchain \  -u YOUR_API_KEY:

Resposta:

204 No Content

Erros

Os corpos das respostas de erro usam:

{ "code": "error", "message": "…" }
StatusQuando
401Chave inválida, ausência de read:* / admin:*, ou API de administração do Grok Bot não habilitada para a equipe
403A gravação não está disponível para a equipe ou para seu plano
404Um ID de regra ou de manifesto bem formado no path não existe
409Um manifesto de configuração foi alterado durante a solicitação
400Corpo 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
429O rate limit do endpoint foi excedido