Skip to main content

Command Palette

Search for a command to run...

API

Admin API

La Admin API te permite acceder de forma programática a los datos de tu equipo, incluida la información sobre los miembros, las métricas de consumo, los detalles de gasto, los grupos de directorio del equipo, el acceso a modelos y el Bot de Grok.

Para acciones en toda la organización en todos tus equipos, consulta Organizaciones y la API de organización.

Endpoints

Obtener miembros del equipo

GET/teams/members

Obtiene todos los miembros del equipo y sus detalles.

Campos de respuesta

teamMembers array

Array de objetos de miembros del equipo, cada uno con:
  • id string - ID de usuario codificado del miembro del equipo (p. ej., user_PDSPmvukpYgZEDXsoNirw3CFhy). La Exportación de OpenTelemetry incluye este mismo valor en el atributo de recurso opcional cursor.user.account_id.
  • email string - Dirección de correo electrónico del miembro del equipo
  • name string - Nombre para mostrar del miembro del equipo
  • role string - Rol en el equipo (p. ej., member, owner)
  • isRemoved boolean - Indica si el miembro fue eliminado del equipo
curl -X GET https://api.cursor.com/teams/members \  -u YOUR_API_KEY:

Respuesta:

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

Obtener registros de auditoría

GET/teams/audit-logs

Obtén eventos del registro de auditoría de tu equipo con filtros. Haz un seguimiento de la actividad del equipo, los eventos de seguridad y los cambios de configuración. Limitado a 20 solicitudes por minuto por equipo. Consulta límites de uso y buenas prácticas.

Parámetros

startTime string | number

Hora de inicio (por defecto, hace 7 días). Consulta Formatos de fecha

endTime string | number

Hora de fin (por defecto: ahora). Consulta Formatos de fecha

eventTypes string

Tipos de eventos separados por comas para filtrar. Valores posibles: 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

Término de búsqueda para filtrar eventos

page number

Número de página (indexado desde 1). Predeterminado: 1

pageSize number

Resultados por página (1-500). Predeterminado: 100

users string

Filtrar por usuarios. Consulta el apartado Filtrado de usuarios más abajo

Formatos de fecha

Los parámetros startTime y endTime admiten múltiples formatos:

  • Atajos relativos: now, today, yesterday, 7d (hace 7 días), 5h (hace 5 horas), 300s (hace 300 segundos)
  • Cadenas ISO 8601: 2024-01-15T12:00:00Z o 2024-01-15T10:00:00-05:00
  • Formato YYYY-MM-DD: 2024-01-15 (la hora por defecto es 00:00:00 UTC)
  • Marcas de tiempo Unix: 1705315200 (segundos) o 1705315200000 (milisegundos)

Ejemplos:

  • ?startTime=7d&endTime=now - Últimos 7 días
  • ?startTime=5h&endTime=now - Últimas 5 horas
  • ?startTime=2024-01-15&endTime=2024-01-20 - Rango de fechas específico
  • ?startTime=1705315200000&endTime=1705401600000 - Marcas de tiempo Unix

Filtrado de usuarios

El parámetro users acepta múltiples formatos, separados por comas:

Puedes mezclar formatos: [email protected],12345,user_PDSPmvukpYgZEDXsoNirw3CFhy

El número máximo de usuarios por solicitud es igual a pageSize.

curl -X GET "https://api.cursor.com/teams/[email protected],[email protected]&eventTypes=login,add_user" \  -u YOUR_API_KEY:

Respuesta:

Cada objeto de events incluye application_type: grok_bot para el Bot de Grok, cursor para otras superficies de Cherri Code, o una cadena vacía cuando no se puede determinar la aplicación (incluidas las filas escritas antes de que existiera este campo).

Las filas de rutinas identifican el Bot con 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  }}

Obtener datos de consumo diario

POST/teams/daily-usage-data

Obtén métricas de consumo diario de tu equipo. Los datos se agregan por hora, por lo que recomendamos consultar este endpoint como máximo una vez por hora. Límite de uso: 20 solicitudes por minuto por equipo. Consulta las buenas prácticas.

Parámetros

startDate number Obligatorio

Fecha de inicio en milisegundos desde epoch

endDate number Obligatorio

Fecha de fin en milisegundos desde epoch

page number

Número de página (empezando en 1). Cuando se indica junto con pageSize, activa la paginación y devuelve los datos de todos los miembros del equipo con una membresía activa durante el rango de fechas solicitado.

pageSize number

Número de usuarios por página. Si se indica junto con page, activa la paginación y devuelve los datos de todos los miembros del equipo con una membresía activa durante el rango de fechas solicitado.

Campos de respuesta

Cada object del array data contiene:

  • userId number - Identificador único del usuario
  • day string - La fecha correspondiente a este registro (fecha ISO; p. ej., 2024-03-18)
  • date number - Fecha en milisegundos desde la época
  • email string - Dirección de correo electrónico del usuario
  • isActive boolean - Indica si el usuario tuvo actividad ese día (solo se incluye con paginación)
  • totalLinesAdded number - Total de líneas de código añadidas
  • totalLinesDeleted number - Total de líneas de código eliminadas
  • acceptedLinesAdded number - Líneas sugeridas por IA que se añadieron y aceptaron
  • acceptedLinesDeleted number - Líneas eliminadas sugeridas por la IA que se aceptaron
  • totalApplies number - Número total de acciones de aplicación de código de IA
  • totalAccepts number - Número total de sugerencias de IA aceptadas
  • totalRejects number - Total de sugerencias de IA rechazadas
  • totalTabsShown number - Total de Tab completions mostradas al usuario
  • totalTabsAccepted number - Número total de finalizaciones de Tab aceptadas por el usuario
  • composerRequests number - Número de solicitudes a Composer realizadas
  • chatRequests number - Número de solicitudes de chat realizadas
  • agentRequests number - Número de solicitudes realizadas en el modo Agent
  • cmdkUsages number - Número de usos de edición en línea con Cmd+K
  • subscriptionIncludedReqs number - Solicitudes incluidas en el plan de suscripción
  • apiKeyReqs number - Solicitudes realizadas con una clave de API
  • usageBasedReqs number - Solicitudes por excedente de consumo
  • bugbotUsages number - Número de usos de Bugbot
  • mostUsedModel string | null - Modelo de IA más utilizado del día
  • applyMostUsedExtension string | null - Extensión de archivo más utilizada en las acciones de aplicación
  • tabMostUsedExtension string | null - Extensión de archivo más frecuente para las completaciones con Tab
  • clientVersion string | null - Versión utilizada del cliente de Cherri Code
# Obtener datos solo de los usuarios activos (sin paginación)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  }'# Obtener datos de TODOS los miembros del equipo (con paginación)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  }'

Respuesta (sin paginación: solo usuarios activos):

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

Respuesta (con paginación: todos los miembros del equipo):

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

Obtener datos de gasto

POST/teams/spend

Obtiene información de gasto del ciclo de facturación actual con búsqueda, ordenación y paginación.

Parámetros

searchTerm string

Buscar en nombres y correos electrónicos de usuarios

sortBy string

Ordenar por: amount, date, user. Predeterminado: date

sortDirection string

Dirección de ordenación: asc, desc. Predeterminado: desc

page number

Número de página (empezando en 1). Predeterminado: 1

pageSize number

Resultados por página

Campo de respuesta

Cada objeto en teamMemberSpend contiene:

  • userId string - ID de usuario codificado (por ejemplo, user_PDSPmvukpYgZEDXsoNirw3CFhy). Comparte el mismo espacio de nombres de identificadores que teamMembers[].id de /teams/members.
  • name string - Nombre para mostrar del usuario
  • email string - Dirección de correo electrónico del usuario
  • role string - Rol en el equipo (por ejemplo, member, owner)
  • spendCents number - Gasto bajo demanda en centavos para el ciclo de facturación actual (excluye el consumo incluido)
  • overallSpendCents number - Gasto total en centavos para el ciclo de facturación actual, incluyendo tanto el gasto bajo demanda como el consumo incluido
  • fastPremiumRequests number - Número de solicitudes premium basadas en consumo realizadas durante el ciclo de facturación
  • hardLimitOverrideDollars number - Anulación personalizada del límite estricto de gasto en dólares para este usuario (0 significa que no hay anulación)
  • monthlyLimitDollars number | null - Límite de gasto mensual en dólares configurado para este usuario, o null si no hay ningún límite configurado
  • effectivePerUserLimitDollars number - Límite de gasto por usuario actualmente aplicado en dólares, derivado de monthlyLimitDollars y 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  }'

Respuesta:

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

Obtener datos de eventos de uso

POST/teams/filtered-usage-events

Obtén eventos de uso detallados de tu equipo con opciones de filtrado, búsqueda y paginación. Este endpoint proporciona información granular sobre las llamadas a la API, el uso del modelo, el consumo de tokens y los costes. Los datos se agregan a nivel horario. Recomendamos consultar este endpoint como máximo una vez por hora. Limitado a 60 solicitudes por minuto por equipo. Consulta la guía de la API.

Parámetros

startDate number

Fecha de inicio en milisegundos desde la época. Este límite es inclusivo.

endDate number

Fecha de fin en milisegundos desde la época. Este límite es inclusivo.

userId number

Filtrar por un ID de usuario específico

page number

Número de página (indexado desde 1). Predeterminado: 1

pageSize number

Número de resultados por página. Valor predeterminado: 100. Máximo: 1000.

email string

Filtrar por la dirección de correo electrónico del usuario

serviceAccountId string

Filtrar por ID de cuenta de servicio

cloudAgentId string

Filtra por un ID de ejecución específico del agente en la nube. Usa * para devolver eventos de todas las ejecuciones del agente en la nube.

automationId string

Filtra por un UUID de automatización específico. Usa * para devolver eventos de todas las automatizaciones.

hostingType string

Filtra las ejecuciones del agente en la nube (agente en segundo plano) según dónde se ejecutaron. Usa esto para aislar el gasto de inferencia de los agentes autohospedados respecto a las ejecuciones alojadas por Cherri Code. Valores aceptados:
  • CLOUD - ejecuciones alojadas por Cherri Code
  • SELF_HOSTED - cualquier ejecución autohospedada (un worker de Team Pool o un worker de Mis máquinas)
  • SELF_HOSTED_POOL - solo los workers de Team Pool
  • SELF_HOSTED_MACHINE - solo los workers personales "My Machine"

Campos de respuesta

Cada objeto en usageEvents contiene:

  • timestamp string - Marca temporal del evento en milisegundos desde la época Unix (como cadena)
  • userEmail string - Dirección de correo electrónico del usuario que realizó la solicitud
  • serviceAccountId string | undefined - ID de la cuenta de servicio que hizo la solicitud. Se omite en eventos de usuarios humanos.
  • serviceAccountName string | undefined - Nombre para mostrar de la cuenta de servicio que realizó la solicitud. Se omite en eventos de usuarios humanos.
  • cloudAgentId string | undefined - ID de la ejecución del agente en la nube asociada a este evento. Se omite en eventos ajenos a los agentes en la nube.
  • automationId string | undefined - UUID de la automatización asociada a este evento. Se omite en eventos que no pertenecen a automatizaciones.
  • conversationId string | undefined - ID de la conversación (sesión del agente) que generó este evento. Úsalo para atribuir el gasto a una sesión o como clave de unión con otras fuentes que exponen ID de conversación, como la API de Seguimiento de Código con IA. Se omite en eventos sin una conversación asociada.
  • model string - Modelo de IA utilizado para la solicitud
  • kind string - Categoría de facturación (p. ej., Usage-based, Included in Business)
  • maxMode boolean - Indica si la solicitud utilizó el modo máximo
  • requestsCosts number - Costo en unidades de solicitud
  • isTokenBasedCall boolean - Indica si la solicitud se facturó según el uso de tokens
  • isChargeable boolean - Indica si este evento genera un cargo
  • isHeadless boolean - Indica si esta solicitud se realizó sin un cliente conectado (p. ej., agentes en segundo plano)
  • tokenUsage object | undefined - Detalles del uso de tokens (presente cuando isTokenBasedCall es true):
    • inputTokens number - Tokens de entrada consumidos
    • outputTokens number - Tokens de salida generados
    • cacheWriteTokens number - Tokens escritos en caché
    • cacheReadTokens number - Tokens leídos de la caché
    • totalCents number - Costo total del modelo en centavos
    • discountPercentOff number | undefined - Porcentaje de descuento aplicado, si lo hay
  • chargedCents number - Importe total cobrado en centavos por este evento. En las solicitudes a modelos de terceros sujetas a la tasa de tokens de Cherri Code, esto incluye el costo del modelo más la tasa de tokens de Cherri Code. Usa este campo para conciliar los costos a nivel de evento con los totales de /teams/spend. Funciona tanto para planes de facturación basados en tokens como en solicitudes.
  • cursorTokenFee number | undefined - Tasa de tokens de Cherri Code en centavos. Solo está presente cuando la tasa se aplica a una solicitud a un modelo de terceros (incluido cuando Auto dirige una solicitud a un modelo de terceros).
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  }'

Respuesta:

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

Ejemplo de uso de cuenta de servicio:

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

Respuesta de la cuenta de servicio:

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

Ejemplo de uso de automatización:

Usa un UUID de automatización para recuperar sus eventos de uso. La atribución de automatización funciona para automatizaciones que se ejecutan como usuario o como cuenta de servicio.

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 coincidente incluye su automationId y cloudAgentId. Suma chargedCents de todos los eventos para calcular el coste total de la automatización.

Ejemplo de gasto de agente autohospedado:

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

Establecer límite de gasto por usuario

POST/teams/user-spend-limit

Establece límites de gasto para miembros individuales del equipo. Esto te permite controlar cuánto puede gastar cada usuario en consumo de IA dentro de tu equipo. Limitado a 250 solicitudes por minuto por equipo. Consulta los límites de uso.

Para actualizar hasta 100 miembros por solicitud, usa Establecer límites de gasto de usuarios de forma masiva (versión preliminar).

Parámetros

userEmail string Obligatorio

Dirección de correo electrónico del miembro del equipo

spendLimitDollars number | null Obligatorio

Límite de gasto en dólares (solo enteros, sin decimales). Establécelo en null para eliminar el límite.
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  }'

Respuesta exitosa:

{  "outcome": "success",  "message": "Spend limit set to $100 for user [email protected]"}

Respuesta de error:

{  "outcome": "error",  "message": "Invalid email format"}

Establecer límites de gasto de usuarios de forma masiva (versión preliminar)

POST/teams/user-spend-limits

Establece límites de gasto para hasta 100 miembros del equipo en una sola solicitud. Limitado a 20 solicitudes por minuto por equipo. Consulta límites de uso.

Parámetros

updates array Obligatorio

De una a 100 actualizaciones de límites de gasto de usuarios. Cada actualización contiene:
  • userEmail string - Dirección de correo electrónico del miembro del equipo
  • spendLimitDollars number | null - Límite de gasto en dólares, como entero. Establece null para eliminar el límite.

Campos de la respuesta

  • requestedCount number - Número de actualizaciones incluidas en la solicitud
  • updatedCount number - Número de límites que cambiaron
  • unchangedCount number - Número de límites que ya tenían el valor solicitado
  • failedCount number - Número de actualizaciones que Cherri Code no pudo aplicar
  • results array - Resultados en el orden de la solicitud. Cada resultado incluye userEmail y un estado updated, unchanged o failed. Los resultados fallidos incluyen además un mensaje 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      }    ]  }'

Respuesta:

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

Eliminar miembro del equipo

POST/teams/remove-member

Elimina un miembro de tu equipo de forma programática. Esto es útil para automatizar flujos de baja o integrarse con sistemas de RR. HH. limitado a 50 solicitudes por minuto por equipo. Consulta los límites de uso.

Parámetros

userId string

ID de usuario codificado (por ejemplo, user_PDSPmvukpYgZEDXsoNirw3CFhy). Obligatorio si no se proporciona email.

email string

Dirección de correo electrónico del miembro del equipo. Obligatorio si no se proporciona userId.
curl -X POST https://api.cursor.com/teams/remove-member \  -u YOUR_API_KEY: \  -H "Content-Type: application/json" \  -d '{    "email": "[email protected]"  }'

Respuesta:

{  "success": true,  "userId": "user_PDSPmvukpYgZEDXsoNirw3CFhy",  "hasBillingCycleUsage": true}

Eliminar por ID de usuario:

curl -X POST https://api.cursor.com/teams/remove-member \  -u YOUR_API_KEY: \  -H "Content-Type: application/json" \  -d '{    "userId": "user_PDSPmvukpYgZEDXsoNirw3CFhy"  }'

Respuestas de error:

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

Obtener listas de bloqueo de repositorios del equipo

GET/settings/repo-blocklists/repos

Obtén todas las listas de bloqueo de repositorios configuradas para tu equipo. Añade repositorios y usa patrones para evitar que los archivos o directorios se indexen o se usen como contexto.

Ejemplos de patrones

Patrones comunes de listas de bloqueo:

  • * - Bloquea todo el repositorio
  • *.env - Bloquea todos los archivos .env
  • config/* - Bloquea todos los archivos del directorio config
  • **/*.secret - Bloquea todos los archivos .secret en cualquier subdirectorio
  • src/api/keys.ts - Bloquea un archivo específico
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \  -u YOUR_API_KEY:

Respuesta:

{  "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": ["*"]    }  ]}

Insertar o actualizar listas de bloqueo de repositorios

POST/settings/repo-blocklists/repos/upsert

Reemplaza las listas de bloqueo de repositorios existentes para los repositorios proporcionados. Este endpoint solo sobrescribirá los patrones de los repositorios proporcionados. Todos los demás repositorios no se verán afectados.

Parámetros

repos array Obligatorio

Array de objetos de listas de bloqueo de repositorios. Cada objeto de repositorio debe contener:

  • url string - URL del repositorio que se añadirá a la lista de bloqueo
  • patterns string[] - Array de patrones de archivo que se bloquearán (se admiten patrones glob)
curl -X POST https://api.cursor.com/settings/repo-blocklists/repos/upsert \  -u YOUR_API_KEY: \  -H "Content-Type: application/json" \  -d '{    "repos": [      {        "url": "https://github.com/company/sensitive-repo",        "patterns": ["*.env", "config/*", "secrets/**"]      },      {        "url": "https://github.com/company/internal-tools",        "patterns": ["*"]      }    ]  }'

Respuesta:

{  "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": ["*"]    }  ]}

Eliminar lista de bloqueo de repositorios

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

Elimina un repositorio específico de la lista de bloqueo. Devuelve 204 Sin contenido si la eliminación se realiza correctamente.

Parámetros

repoId string Obligatorio

ID de la lista de bloqueo del repositorio que se eliminará
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \  -u YOUR_API_KEY:

Respuesta:

204 No Content

Grupos de directorio a nivel de equipo

Las rutas de la Team Admin API en /teams/directory-groups gestionan los grupos de directorio a nivel de equipo. Esos grupos establecen el gasto y las políticas dentro de un solo equipo. Consulta Grupos de la organización para ver en qué se diferencian de las cohortes a nivel de organización y Grupos de facturación.

Asocia un grupo a un equipo cuando un grupo de la organización deba determinar la membresía de ese equipo. Crea, lista y añade o elimina miembros de un grupo de directorio a nivel de equipo con una clave de API del equipo. Para la configuración desde el panel de control y SCIM, consulta grupos de directorio.

Estas rutas pertenecen a una API distinta de la de los grupos de facturación. Usa esta tabla para elegir el path y el id correctos:

GruposPathID
Grupos de la organización/organizations/groupsid usa el prefijo g_. Las respuestas también devuelven publicId con el prefijo grp_. Consulta Grupos de la organización.
Grupos de directorio a nivel de equipo/teams/directory-groupsEl public id usa el prefijo team_group_…, como team_group_01k2ja2000e0080000000000n2.
Grupos de facturación/teams/groupsgroup_…

:groupId es el public id del grupo de directorio a nivel de equipo. Usa el prefijo team_group_…. No pases ids g_ o grp_ de grupos de la organización, ni ids group_… de grupos de facturación.

Las rutas de grupos comparten estas respuestas de error:

EstadoCuándo
400ID de grupo, valor de paginación o cuerpo de solicitud con formato incorrecto
401Clave de API inválida, o la clave carece del ámbito read:* (lecturas) o admin:* (escrituras)
404El grupo no existe en este equipo
429Límite de uso superado. La respuesta incluye una cabecera Retry-After: 60

Listar grupos de directorio de equipo

GET/teams/directory-groups

Recupera los grupos de directorio de equipo asociado a tu clave de API.

Parámetros de consulta

page number

Número de página. El valor predeterminado es 1.

pageSize number

Número de grupos por página. El valor predeterminado es 50. El máximo es 200; los valores superiores a 200 se ajustan a 200.

Campos de respuesta

Cada objeto de groups contiene:

  • id cadena - public id del grupo con el prefijo team_group_…. Usa este valor como :groupId en las demás rutas.
  • name cadena - Nombre del grupo
  • memberCount number - Número de miembros del grupo
  • monthlySpendingLimitDollars number | null - Límite de gasto mensual en dólares enteros para cada miembro del grupo. null significa que el grupo no tiene límite.
  • createdAt cadena - Hora de creación en formato ISO 8601
  • updatedAt cadena - Hora de la última actualización en formato ISO 8601

pagination objeto

Metadatos de paginación: page, pageSize, totalCount, totalPages, hasNextPage y hasPreviousPage.
curl -X GET "https://api.cursor.com/teams/directory-groups?page=1&pageSize=50" \  -u YOUR_API_KEY:

Respuesta:

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

Obtener grupo de directorio de equipo

GET/teams/directory-groups/:groupId

Recupera un grupo de directorio de equipo.

Parámetros

groupId cadena obligatorio

El public id del grupo con el prefijo team_group_…, como team_group_01k2ja2000e0080000000000n2. Los ID g_ o grp_ de grupo de la organización y los ID group_… de grupo de facturación devuelven 400 o 404.

Campos de respuesta

El objeto group contiene id, name, memberCount, monthlySpendingLimitDollars, createdAt y updatedAt. Estos campos coinciden con la respuesta de Listar grupos de directorio de equipo.

curl -X GET https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2 \  -u YOUR_API_KEY:

Respuesta:

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

Crear grupo de directorio de equipo

POST/teams/directory-groups

Crea un grupo de directorio de equipo con una membresía gestionada manualmente. Para crear un grupo sincronizado por SCIM, sincronízalo desde tu proveedor de identidad. Consulta SCIM.

Cuerpo de solicitud

name cadena obligatorio

Nombre del grupo. Debe ser único entre los grupos de directorio activos del equipo. Cherri Code elimina los espacios en blanco al inicio y al final.

Campos de respuesta

Devuelve 201 Created con el nuevo objeto group, que contiene id, name, memberCount, monthlySpendingLimitDollars, createdAt y updatedAt. El id es el public id del grupo con el prefijo team_group_….

Errores

  • 400 - Falta el nombre del grupo, está vacío o ya lo usa otro grupo activo.
curl -X POST https://api.cursor.com/teams/directory-groups \  -u YOUR_API_KEY: \  -H "Content-Type: application/json" \  -d '{    "name": "Engineering"  }'

Respuesta:

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

Actualizar grupo de directorio de equipo

PATCH/teams/directory-groups/:groupId

Actualiza el nombre o el límite de gasto mensual de un grupo. Las actualizaciones son parciales: incluye al menos un campo; los campos que omitas conservan su valor actual.

Parámetros

groupId cadena Obligatorio

El public id del grupo con el prefijo team_group_…, como team_group_01k2ja2000e0080000000000n2.

Cuerpo de solicitud

name cadena

Nuevo nombre del grupo. Debe ser único entre los grupos de directorio activos del equipo. Cherri Code elimina los espacios en blanco iniciales y finales.

monthlySpendingLimitDollars number

Límite de gasto mensual en dólares enteros para cada miembro del grupo, entre 0 y 2147483647.

clearMonthlySpendingLimitDollars boolean

Establece en true para eliminar el límite de gasto del grupo. No incluyas monthlySpendingLimitDollars en la misma solicitud.

Campos de respuesta

Devuelve el objeto group actualizado con id, name, memberCount, monthlySpendingLimitDollars, createdAt y updatedAt.

Errores

  • 400 - La solicitud no incluye campos para actualizar, contiene un valor no válido, usa el nombre de otro grupo activo, o establece y borra el límite de gasto en la misma solicitud.
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  }'

Respuesta:

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

Eliminar grupo de directorio de equipo

DELETE/teams/directory-groups/:groupId

Elimina un grupo de directorio de equipo. El grupo debe estar vacío: elimina a todos los miembros antes de borrarlo.

Parámetros

groupId cadena Obligatorio

El public id del grupo con el prefijo team_group_…, como team_group_01k2ja2000e0080000000000n2.

Respuesta

Devuelve 204 No Content tras eliminar el grupo.

Errores

  • 400 - El grupo todavía tiene miembros o tiene un mapping de SCIM activo.
curl -X DELETE https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2 \  -u YOUR_API_KEY:

Respuesta: 204 No Content

Listar miembros de un grupo de directorio de equipo

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

Recupera los miembros de un grupo de directorio de equipo.

Parámetros

groupId cadena Obligatorio

public id del grupo con el prefijo team_group_…, como team_group_01k2ja2000e0080000000000n2.

Parámetros de consulta

page number

Número de página. El valor predeterminado es 1.

pageSize number

Número de miembros por página. El valor predeterminado es 50. El máximo es 200; los valores superiores a 200 se ajustan a 200.

Campos de respuesta

Cada objeto de members contiene:

  • userId cadena: ID público del usuario con el prefijo user_
  • name cadena: nombre visible del miembro
  • email cadena: dirección de correo electrónico del miembro
  • joinedAt cadena: fecha en que se añadió al miembro al grupo, en formato ISO 8601

pagination objeto

Metadatos de paginación: page, pageSize, totalCount, totalPages, hasNextPage y hasPreviousPage.
curl -X GET "https://api.cursor.com/teams/directory-groups/team_group_01k2ja2000e0080000000000n2/members?page=1&pageSize=50" \  -u YOUR_API_KEY:

Respuesta:

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

Añadir miembros a un grupo de directorio de equipo

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

Añade miembros a un grupo de directorio de equipo manual.

Parámetros

groupId cadena Obligatorio

El public id del grupo con el prefijo team_group_…, como team_group_01k2ja2000e0080000000000n2.

Cuerpo de solicitud

userIds cadena[] Obligatorio

Array de IDs públicos de usuario con el prefijo user_. Una sola solicitud puede incluir hasta 100 usuarios.

Campos de respuesta

addedCount number

Número de membresías creadas por esta solicitud. Cherri Code ignora a los usuarios ajenos al equipo y a los que ya pertenecen al grupo, por lo que no se contabilizan en este 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"]  }'

Respuesta:

{  "addedCount": 2}

Eliminar miembros de un grupo de directorio de equipo

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

Elimina miembros de un grupo de directorio de equipo manual.

Parámetros

groupId cadena Obligatorio

El public id del grupo con el prefijo team_group_…, como team_group_01k2ja2000e0080000000000n2.

Cuerpo de solicitud

userIds cadena[] Obligatorio

Array de IDs públicos de usuario con el prefijo user_. Una sola solicitud puede incluir hasta 100 usuarios.

Campos de respuesta

removedCount number

Número de membresías eliminadas por esta solicitud. Cherri Code ignora a los usuarios que no pertenecen al grupo, por lo que no se contabilizan en este 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"]  }'

Respuesta:

{  "removedCount": 1}

Grupos de facturación

Los grupos de facturación permiten a los administradores de Enterprise comprender y gestionar el gasto entre grupos de usuarios. Esta funcionalidad es útil para informes, cargos internos y planificación presupuestaria.

Los miembros solo pueden estar en un grupo de facturación al mismo tiempo. Los miembros que no están asignados a ningún grupo se asignan a un grupo reservado Unassigned.

Listar grupos

GET/teams/groups

Obtén todos los grupos de facturación de tu equipo con los datos de gasto del ciclo de facturación actual.

Parámetros

billingCycle cadena

Cadena de fecha ISO (por ejemplo, 2025-01-15) para especificar qué ciclo de facturación consultar. De forma predeterminada, consulta el ciclo actual.
curl -X GET "https://api.cursor.com/teams/groups?billingCycle=2025-01-15" \  -u YOUR_API_KEY:

Respuesta:

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

Obtener grupo

GET/teams/groups/:groupId

Obtiene un único grupo de facturación con sus miembros y datos de gasto para el ciclo de facturación actual.

Parámetros

groupId string Obligatorio

El ID de grupo codificado (p. ej., group_PDSPmvukpYgZEDXsoNirw3CFhy)

billingCycle string

Cadena de fecha ISO (p. ej., 2025-01-15) para especificar qué ciclo de facturación consultar. De forma predeterminada, consulta el ciclo actual.
curl -X GET "https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy?billingCycle=2025-01-15" \  -u YOUR_API_KEY:

Respuesta:

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

Crear grupo

POST/teams/groups

Crea un nuevo grupo de facturación. limitado a 20 solicitudes por minuto por equipo.

Parámetros

name string Obligatorio

Nombre del grupo

type string

Tipo de grupo. Actualmente solo se admite BILLING. Valor predeterminado: BILLING
curl -X POST https://api.cursor.com/teams/groups \  -u YOUR_API_KEY: \  -H "Content-Type: application/json" \  -d '{    "name": "Engineering"  }'

Respuesta:

{  "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": []  }}

Actualizar grupo

PATCH/teams/groups/:groupId

Actualiza el nombre de un grupo de facturación o su vinculación a un grupo de directorio. limitado a 20 solicitudes por minuto por equipo.

Parámetros

groupId string Obligatorio

El ID de grupo codificado

name string

Nuevo nombre para el grupo

directoryGroupId string | null

ID del grupo de directorio con el que sincronizar, o null para desvincularlo de la sincronización con el directorio
curl -X PATCH https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy \  -u YOUR_API_KEY: \  -H "Content-Type: application/json" \  -d '{    "name": "Platform Engineering"  }'

Respuesta:

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

Eliminar grupo

DELETE/teams/groups/:groupId

Elimina un grupo de facturación. Devuelve 204 No Content en caso de éxito. limitado a 20 solicitudes por minuto por equipo.

Parámetros

groupId string Obligatorio

El ID de grupo codificado que se va a eliminar
curl -X DELETE https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy \  -u YOUR_API_KEY:

Respuesta:

204 No Content

Agregar miembros al grupo

POST/teams/groups/:groupId/members

Agrega miembros del equipo a un grupo de facturación. Los usuarios ya deben ser miembros de tu equipo y no estar asignados actualmente a otro grupo. limitado a 20 solicitudes por minuto por equipo.

Parámetros

groupId string Obligatorio

El ID de grupo codificado

userIds string[] Obligatorio

Array de IDs de usuario codificados que se van a agregar (p. ej., ["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"]  }'

Respuesta:

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

Eliminar miembros del grupo

DELETE/teams/groups/:groupId/members

Elimina miembros del equipo de un grupo de facturación. Los miembros eliminados se mueven al grupo Unassigned. limitado a 20 solicitudes por minuto por equipo.

Parámetros

groupId string Obligatorio

ID de grupo codificado

userIds string[] Obligatorio

Array de IDs de usuario codificados para eliminar
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"]  }'

Respuesta:

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

Acceso a modelos

Consulta y actualiza la política de acceso a modelos del equipo: si hay una política personalizada activada, los valores predeterminados para nuevos proveedores y modelos, los controles para cada proveedor o modelo y los ajustes por modelo, como Fast y el esfuerzo de razonamiento.

Activar un modelo sin ajustes de parámetros lo deja con los valores predeterminados del catálogo. Usa los ajustes por modelo cuando esos valores predeterminados, como Fast, no coincidan con la política de tu equipo.

Estas rutas devuelven la configuración base del equipo. Los grupos de la organización aún pueden ampliar el acceso para algunos miembros; las listas de permitidos de grupo no forman parte de esta API. Los controles de clave de API personal (BYOK) se mantienen en el Panel de control.

Para consultas en toda la organización y cambios masivos en equipos vinculados, consulta las rutas de acceso a modelos de la API de organización.

Obtener la configuración de acceso a modelos

GET/teams/model-access/configuration

Indica si el equipo tiene una política personalizada de acceso a modelos y los valores predeterminados para proveedores y modelos recién detectados.

Campos de respuesta

teamId number

ID entero del equipo asociado a la clave de API.

state string

Uno de estos valores: unrestricted, custom o legacy.

newProviderDefault string | null

enabled o disabled cuando state es custom. De lo contrario, null.

newModelDefault string | null

enabled o disabled cuando state es custom. De lo contrario, null.
curl -X GET https://api.cursor.com/teams/model-access/configuration \  -u YOUR_API_KEY:

Respuesta:

{  "teamId": 7,  "state": "unrestricted",  "newProviderDefault": null,  "newModelDefault": null}

Actualizar la configuración de acceso a modelos

PUT/teams/model-access/configuration

Crea una política personalizada, actualiza los valores predeterminados o restablece el acceso sin restricciones del equipo.

Envía una de las siguientes opciones:

  • { "state": "unrestricted" } para eliminar la política personalizada (y las listas heredadas de permitidos/bloqueados), de modo que state pase a ser unrestricted
  • { "newProviderDefault", "newModelDefault" } para crear o actualizar una política personalizada (abreviatura retrocompatible de state: "custom")

El primer PUT de valores predeterminados en un equipo sin restricciones crea una política personalizada y añade entradas del catálogo. Los PUT posteriores de valores predeterminados solo actualizan estos valores y conservan los controles existentes.

Cuerpo de la solicitud

state string

Opcional. Usa unrestricted para eliminar la política. Omítelo al enviar valores predeterminados.

newProviderDefault string

enabled o disabled. Obligatorio al crear o actualizar una política personalizada; omítelo cuando state sea unrestricted.

newModelDefault string

enabled o disabled. Obligatorio al crear o actualizar una política personalizada; omítelo cuando state sea 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"  }'

Respuesta:

{  "teamId": 7,  "state": "custom",  "newProviderDefault": "disabled",  "newModelDefault": "enabled"}

Restablece el acceso sin restricciones del equipo:

curl -X PUT https://api.cursor.com/teams/model-access/configuration \  -u YOUR_API_KEY: \  -H "Content-Type: application/json" \  -d '{ "state": "unrestricted" }'

Respuesta:

{  "teamId": 7,  "state": "unrestricted",  "newProviderDefault": null,  "newModelDefault": null}

Listar proveedores de acceso a modelos

GET/teams/model-access/providers

Lista los proveedores y modelos del catálogo con los indicadores de activación resueltos y los parameters por modelo. Devuelve 409 si el equipo no tiene una política personalizada.

Cada modelo incluye un array parameters basado en el catálogo. Los ID de los parámetros y los valores compatibles provienen del catálogo de modelos (por ejemplo, fast, reasoning, effort, context). Usa este GET para descubrir qué parámetros admite un modelo antes de escribir.

Campos de parameters del modelo

id string

ID del parámetro (por ejemplo, fast o reasoning).

displayName string

Etiqueta legible.

supportedValues string[]

Todos los valores que permite el catálogo para este parámetro en este modelo.

allowedValues string[]

Valores permitidos actualmente por la política del equipo.

configuredDefaultValue string | null

Valor predeterminado fijado por el administrador, o null si no se ha establecido.

catalogDefaultValue string | null

Valor predeterminado del catálogo para este parámetro en este modelo.
curl -X GET https://api.cursor.com/teams/model-access/providers \  -u YOUR_API_KEY:

Respuesta:

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

Actualizar proveedor de acceso a modelos

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

Activa o desactiva un proveedor. Devuelve 409 si el equipo sigue teniendo la política unrestricted o legacy.

Parámetros

provider string Obligatorio

ID del proveedor en el catálogo (por ejemplo, openai o anthropic).

Cuerpo de la solicitud

enabled boolean Obligatorio

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 un proveedor

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

Lista los modelos de un proveedor con los indicadores de activación ya resueltos y parameters por modelo. Los campos de parámetros coinciden con la respuesta de proveedores. Devuelve 409 si el equipo no tiene una política personalizada.

Parámetros

provider string Obligatorio

ID del proveedor en el catálogo (por ejemplo, anthropic).
curl -X GET https://api.cursor.com/teams/model-access/providers/anthropic/models \  -u YOUR_API_KEY:

Actualizar un modelo de acceso a modelos

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

Activa o desactiva un modelo individual y, opcionalmente, establece restricciones y valores predeterminados para los parámetros de cada modelo. Devuelve 409 si el equipo aún tiene el estado unrestricted o legacy.

Parámetros

provider string Obligatorio

ID del proveedor en el catálogo (por ejemplo, anthropic).

model string Obligatorio

ID del modelo en el catálogo (por ejemplo, claude-opus-4-6).

Cuerpo de la solicitud

enabled boolean Obligatorio

parameters object

Mapa opcional de ID de parámetros a ajustes. Los parámetros y campos omitidos no se modifican.
  • allowedValues string[] | null: Restringe los valores que pueden elegir los miembros. Pasa null para eliminar la restricción.
  • defaultValue string | null: Valor predeterminado para el equipo. Debe estar incluido en allowedValues cuando se establezca una restricción. Pasa null para restaurar el valor predeterminado del catálogo.

Los ID de parámetros o valores desconocidos, los arrays allowedValues vacíos, los valores predeterminados que no estén en allowedValues y los ajustes que no se resuelvan en ninguna variante de modelo válida devuelven 400.

Desactiva Fast en un 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"] }    }  }'

Establece los niveles de razonamiento permitidos y un valor predeterminado:

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

Elimina una restricción y restaura el valor predeterminado del 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      }    }  }'

Respuesta:

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

Errores

Los cuerpos de las respuestas de error usan:

{ "code": "error", "message": "…" }
EstadoCuándo
401Clave incorrecta o falta models:read / models:* (o admin:*)
403El control de acceso a modelos no está disponible para ese equipo
409Lectura o escritura en un proveedor o modelo mientras state es unrestricted o legacy
400ID de proveedor, modelo o parámetro, o valor de parámetro desconocido; cuerpo no válido; allowedValues vacío; valor predeterminado fuera de allowedValues; ajustes que no se resuelven en ninguna variante de modelo válida; o se bloquearía un modelo obligatorio de Smart Auto

Bot de Grok

Activa el Bot de Grok y gestiona capacidades, forzar Auto-Review, acceso por grupo, política de red, reglas del equipo y scripts de instalación.

Activar el Bot de Grok

POST/grok-bot/enable

Activa el Bot de Grok para el equipo. La primera activación en un equipo Enterprise elegible inicia la prueba. Devuelve 204 No Content si se realiza correctamente.

curl -X POST https://api.cursor.com/grok-bot/enable \  -u YOUR_API_KEY:

Respuesta:

204 No Content

Desactivar el Bot de Grok

POST/grok-bot/disable

Desactiva el Bot de Grok para el equipo. Los miembros pierden el acceso; sus computadoras no se eliminan. Devuelve 403 en los planes Teams.

curl -X POST https://api.cursor.com/grok-bot/disable \  -u YOUR_API_KEY:

Respuesta:

204 No Content

Obtener las capacidades del Bot de Grok

GET/grok-bot/capabilities

Devuelve las capacidades del Bot de Grok del equipo.

Campos de respuesta

enabled boolean

Indica si el Bot de Grok está activado. Es de solo lectura.

cloudAgents boolean

Indica si los miembros pueden delegar trabajo a los agentes en la nube.

templateSharing string | null

all, team_only, none o null para el valor predeterminado del equipo.

actionRecording boolean

Indica si la grabación de acciones está activada.

localExecution string | null

Límite máximo del equipo para los Bots en la máquina de un miembro: never, ask, always o null si no hay límite.

localEgressAllowed boolean

Indica si los miembros pueden enrutar el tráfico web del Bot de Grok a través de su propia computadora (Allow Local Egress Routing; solo Enterprise).
curl -X GET https://api.cursor.com/grok-bot/capabilities \  -u YOUR_API_KEY:

Respuesta:

{  "enabled": true,  "cloudAgents": true,  "templateSharing": "team_only",  "actionRecording": false,  "localExecution": "ask",  "localEgressAllowed": true}

Actualizar las capacidades del Bot de Grok

PATCH/grok-bot/capabilities

Actualiza las capacidades del Bot de Grok. Los campos omitidos no se modifican. Devuelve 403 cuando un campo no está disponible para el equipo.

Parámetros

cloudAgents boolean

Si los miembros pueden delegar trabajo a los agentes en la nube.

templateSharing string | null

all, team_only, none o null para restaurar el valor predeterminado del equipo.

actionRecording boolean

Si la grabación de acciones está activada.

localExecution string | null

never, ask, always o null para quitar el límite máximo del equipo.

localEgressAllowed boolean

Si los miembros pueden enrutar el tráfico web del Bot de Grok a través de su propia computadora (Allow Local Egress Routing; solo Enterprise). Devuelve 403 cuando los controles de enrutamiento de egress local no están activados para el equipo.
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  }'

Respuesta:

{  "enabled": true,  "cloudAgents": false,  "templateSharing": "team_only",  "actionRecording": false,  "localExecution": "never",  "localEgressAllowed": false}

Consultar forzar Auto-review

GET/grok-bot/auto-review

Devuelve la política de forzar Auto-review del equipo.

Campos de respuesta

enforced boolean

Cuando es true, todos los miembros deben mantener activado forzar Auto-review.

rules object

Listas de instrucciones allow y block del equipo que alimentan Auto Review.
curl -X GET https://api.cursor.com/grok-bot/auto-review \  -u YOUR_API_KEY:

Respuesta:

{  "enforced": true,  "rules": {    "allow": ["Read-only git commands"],    "block": ["Publishing releases"]  }}

Reemplazar forzar Auto-review

PUT/grok-bot/auto-review

Reemplaza la política de forzar Auto-review del equipo. Devuelve 403 cuando forzar Auto-review no está disponible para el equipo.

Parámetros

enforced boolean Obligatorio

Cuando es true, todos los miembros deben mantener activado forzar Auto-review.

rules object Obligatorio

Listas de instrucciones de permitir y bloquear.
  • allow string[]: Hasta 20 instrucciones, de 1.000 caracteres cada una. Se recortan y se deduplican.
  • block string[]: Hasta 20 instrucciones, de 1.000 caracteres cada una. Se recortan y se deduplican.
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 forzar Auto-review sin cambiar las instrucciones:

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": [] }  }'

Respuesta:

{  "enforced": true,  "rules": {    "allow": ["Read-only git commands"],    "block": ["Publishing releases"]  }}

Obtener acceso al Bot de Grok

GET/grok-bot/access

Devuelve qué miembros del equipo pueden usar el Bot de Grok.

Campos de la respuesta

mode string

all o limited.

groups array

Grupos seleccionados cuando mode es limited. Cada elemento tiene un id codificado y un name. Vacío cuando mode es all.
curl -X GET https://api.cursor.com/grok-bot/access \  -u YOUR_API_KEY:

Respuesta:

{  "mode": "limited",  "groups": [    {      "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy",      "name": "Platform Engineering"    }  ]}

Actualizar el acceso al Bot de Grok

PUT/grok-bot/access

Define quién puede usar el Bot de Grok dentro del equipo. Devuelve 403 cuando el acceso por grupo no está disponible para el equipo.

Parámetros

mode string Obligatorio

all para todos los miembros, o limited para grupos de facturación seleccionados.

groupIds array

ID codificados de grupo de Listar grupos. Obligatorio cuando mode es limited (1-100, los duplicados cuentan una sola vez). Omítelo cuando mode es all.

Los ID desconocidos o con formato incorrecto, una lista limitada vacía o los ID de grupo junto con all devuelven 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"]  }'

Respuesta:

{  "mode": "limited",  "groups": [    {      "id": "group_PDSPmvukpYgZEDXsoNirw3CFhy",      "name": "Platform Engineering"    }  ]}

Obtener la network policy del Bot de Grok

GET/grok-bot/network

Devuelve la network policy del Bot de Grok del equipo.

Campos de respuesta

egressMode string

unset, allow_all, default_with_network_settings o network_settings_only.

allowlist array

Destinos permitidos: dominios, dominios con wildcard, direcciones IP, rangos CIDR o host-or-CIDR:port, como 54.85.223.0/24:3306.

locked boolean

Cuando es true, las políticas de grupo no pueden anular la política del equipo.
curl -X GET https://api.cursor.com/grok-bot/network \  -u YOUR_API_KEY:

Respuesta:

{  "egressMode": "network_settings_only",  "allowlist": ["linkedin.com", "*.crunchbase.com", "10.0.0.0/8", "54.85.223.0/24:3306"],  "locked": true}

Reemplazar la network policy del Bot de Grok

PUT/grok-bot/network

Reemplaza la network policy del Bot de Grok del equipo. Devuelve 403 en los planes Teams.

Parámetros

egressMode string Obligatorio

Uno de:
  • unset: no aplica ninguna policy
  • allow_all: permite todos los destinos
  • default_with_network_settings: los valores predeterminados de Cherri Code más la lista de permitidos
  • network_settings_only: la lista de permitidos y los destinos necesarios para ejecutar el Bot de Grok

allowlist array Obligatorio

Hasta 500 destinos, de 1 a 253 caracteres cada uno. Dominios, dominios con wildcard, direcciones IP, rangos CIDR o host-or-CIDR:port como 54.85.223.0/24:3306.

locked boolean Obligatorio

Cuando es true, las políticas de grupo no pueden hacer override de la política del equipo.

Los cuerpos parciales, los modes desconocidos y las entradas no válidas en la lista de permitidos devuelven 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  }'

respuesta:

{  "egressMode": "network_settings_only",  "allowlist": ["linkedin.com", "*.crunchbase.com", "10.0.0.0/8", "54.85.223.0/24:3306"],  "locked": true}

Listar reglas del equipo del Bot de Grok

GET/grok-bot/team-rules

Lista las reglas del equipo del Bot de Grok, de más recientes a más antiguas.

Parámetros

limit number

Resultados por página. Valor predeterminado: 50. Máximo: 100.

cursor string

Cherri Code opaco del nextCursor anterior.
curl -X GET "https://api.cursor.com/grok-bot/team-rules?limit=50" \  -u YOUR_API_KEY:

Respuesta:

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

Crear regla del equipo del Bot de Grok

POST/grok-bot/team-rules

Crea una regla del equipo del Bot de Grok. Un equipo puede almacenar hasta 50 reglas del Bot de Grok. Devuelve 201.

Parámetros

name string Obligatorio

De 1 a 255 caracteres.

content string Obligatorio

De 1 a 30.000 caracteres.

enabled boolean Obligatorio

Indica si la regla está activa.
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  }'

Respuesta:

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

Actualizar regla del equipo del Bot de Grok

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

Actualiza una regla del equipo del Bot de Grok. Devuelve 404 cuando la regla no existe.

Parámetros

id string Obligatorio

ID codificado de la regla obtenido de la respuesta de listado o de creación.

name string

De 1 a 255 caracteres.

content string

De 1 a 30.000 caracteres.

enabled boolean

Indica si la regla está activa.
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  }'

Respuesta:

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

Eliminar regla del equipo del Bot de Grok

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

Elimina una regla del equipo del Bot de Grok. Devuelve 204 No Content si la operación es correcta.

Parámetros

id string Obligatorio

ID codificado de la regla que se va a eliminar.
curl -X DELETE https://api.cursor.com/grok-bot/team-rules/rule_PDSPmvukpYgZEDXsoNirw3CFhy \  -u YOUR_API_KEY:

Respuesta:

204 No Content

Listar manifiestos de configuración del Bot de Grok

GET/grok-bot/setup-manifests

Lista los manifiestos de configuración del Bot de Grok, ordenados por id.

Parámetros

limit number

Resultados por página. Valor predeterminado: 50. Máximo: 100.

cursor string

Cherri Code opaco del nextCursor anterior.
curl -X GET "https://api.cursor.com/grok-bot/setup-manifests?limit=50" \  -u YOUR_API_KEY:

Respuesta:

{  "manifests": [    {      "id": "toolchain",      "scripts": [        { "id": "node", "setup": "mise install node@22", "check": "node --version" },        { "id": "pnpm", "setup": "npm i -g pnpm" }      ]    }  ],  "nextCursor": null}

Crear o actualizar un manifiesto de configuración del Bot de Grok

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

Crea o reemplaza un manifiesto de configuración. Un equipo puede almacenar hasta 100 manifiestos. Devuelve 409 si el manifiesto cambió durante la solicitud.

Parámetros

manifestId string Obligatorio

De 1 a 128 caracteres; debe empezar por una letra o un número, seguido de letras, números, ., _ o -.

scripts array Obligatorio

Scripts de instalación.
  • id string: mismo formato que manifestId
  • setup string: comando de instalación no vacío
  • check string: comando de verificación 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" }    ]  }'

Respuesta:

{  "manifest": {    "id": "toolchain",    "scripts": [      { "id": "node", "setup": "mise install node@22", "check": "node --version" },      { "id": "pnpm", "setup": "npm i -g pnpm" }    ]  }}

Eliminar el manifiesto de configuración del Bot de Grok

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

Elimina un manifiesto de configuración. Devuelve 204 No Content si la operación se realiza correctamente.

Parámetros

manifestId string Obligatorio

Clave del manifiesto que se va a eliminar.
curl -X DELETE https://api.cursor.com/grok-bot/setup-manifests/toolchain \  -u YOUR_API_KEY:

Respuesta:

204 No Content

Errores

Los cuerpos de las respuestas de error usan:

{ "code": "error", "message": "…" }
EstadoCuándo
401Clave incorrecta, falta read:* / admin:*, o la Grok Bot Admin API no está activada para el equipo
403La escritura no está disponible para el equipo o su plan
404No existe un ID de regla o de manifiesto bien formado en la ruta
409Un manifiesto de configuración cambió durante la solicitud
400Cuerpo o ID no válido; PATCH vacío; enabled en capacidades; grupo desconocido; demasiadas reglas o manifiestos; ningún propietario al que atribuir un manifiesto de configuración
429Se superó el límite de uso del endpoint