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.
- La Admin API usa Basic Authentication con tu clave de API como nombre de usuario.
- Para obtener detalles sobre cómo crear claves de API, métodos de autenticación, límites de uso y buenas prácticas, consulta la descripción general de la API.
Para acciones en toda la organización en todos tus equipos, consulta Organizaciones y la API de organización.
Endpoints
Obtener miembros del equipo
/teams/membersObtiene todos los miembros del equipo y sus detalles.
Campos de respuesta
teamMembers array
idstring - 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 opcionalcursor.user.account_id.emailstring - Dirección de correo electrónico del miembro del equiponamestring - Nombre para mostrar del miembro del equiporolestring - Rol en el equipo (p. ej.,member,owner)isRemovedboolean - 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
/teams/audit-logsObté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
endTime string | number
eventTypes string
login, logout, add_user, remove_user, update_user_role, team_settings, mcp_server_config, team_api_key, user_api_key, privacy_mode, user_spend_limit, team_rule, team_repo, team_hook, team_command, create_directory_group, delete_directory_group, update_directory_group, update_directory_group_permissions, add_user_to_directory_group, remove_user_from_directory_group, bugbot_installation, bugbot_installation_settings, bugbot_repo_settings, bugbot_team_rule, bugbot_team_settings, bugbot_bulk_repo_update, grok_bot_created, grok_bot_lifecycle, sand_onboarding, grok_bot_access_changed, grok_bot_team_setup_manifest, grok_bot_group_settings, grok_bot_group_resource, grok_bot_resource, grok_bot_machine, grok_bot_vm, grok_bot_vm_bulk, grok_bot_routine, mcp_authentication, slack_account_linksearch string
page number
1pageSize number
100users string
El rango de fechas no puede exceder los 30 días. Realiza varias solicitudes para periodos más largos.
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:00Zo2024-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) o1705315200000(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:
- Direcciones de correo electrónico:
[email protected],[email protected] - IDs de usuario codificados:
user_PDSPmvukpYgZEDXsoNirw3CFhy,user_kljUvI0ASZORvSEXf9hV0ydcso
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
/teams/daily-usage-dataObté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
endDate number Obligatorio
page number
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
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.Sin parámetros de paginación, este endpoint solo devuelve usuarios activos (con actividad durante el intervalo de fechas). Para obtener todos los miembros del equipo, incluye los parámetros page y pageSize.
Al usar la paginación, la respuesta incluye un campo isActive para cada usuario que indica si tuvo actividad ese día. Se excluye a los miembros que se unieron después del período solicitado.
El intervalo de fechas no puede superar los 30 días. Para períodos más largos, realiza varias solicitudes.
Los campos subscriptionIncludedReqs, usageBasedReqs y apiKeyReqs cuentan eventos de consumo sin procesar, no unidades de solicitud facturables del antiguo modelo de precios basado en solicitudes. Para obtener recuentos precisos de solicitudes facturables, usa el endpoint /teams/filtered-usage-events y suma el campo requestsCosts.
Campos de respuesta
Cada object del array data contiene:
userIdnumber - Identificador único del usuariodaystring - La fecha correspondiente a este registro (fecha ISO; p. ej.,2024-03-18)datenumber - Fecha en milisegundos desde la épocaemailstring - Dirección de correo electrónico del usuarioisActiveboolean - Indica si el usuario tuvo actividad ese día (solo se incluye con paginación)totalLinesAddednumber - Total de líneas de código añadidastotalLinesDeletednumber - Total de líneas de código eliminadasacceptedLinesAddednumber - Líneas sugeridas por IA que se añadieron y aceptaronacceptedLinesDeletednumber - Líneas eliminadas sugeridas por la IA que se aceptarontotalAppliesnumber - Número total de acciones de aplicación de código de IAtotalAcceptsnumber - Número total de sugerencias de IA aceptadastotalRejectsnumber - Total de sugerencias de IA rechazadastotalTabsShownnumber - Total de Tab completions mostradas al usuariototalTabsAcceptednumber - Número total de finalizaciones de Tab aceptadas por el usuariocomposerRequestsnumber - Número de solicitudes a Composer realizadaschatRequestsnumber - Número de solicitudes de chat realizadasagentRequestsnumber - Número de solicitudes realizadas en el modo AgentcmdkUsagesnumber - Número de usos de edición en línea con Cmd+KsubscriptionIncludedReqsnumber - Solicitudes incluidas en el plan de suscripciónapiKeyReqsnumber - Solicitudes realizadas con una clave de APIusageBasedReqsnumber - Solicitudes por excedente de consumobugbotUsagesnumber - Número de usos de BugbotmostUsedModelstring | null - Modelo de IA más utilizado del díaapplyMostUsedExtensionstring | null - Extensión de archivo más utilizada en las acciones de aplicacióntabMostUsedExtensionstring | null - Extensión de archivo más frecuente para las completaciones con TabclientVersionstring | 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
/teams/spendObtiene información de gasto del ciclo de facturación actual con búsqueda, ordenación y paginación.
Parámetros
searchTerm string
sortBy string
amount, date, user. Predeterminado: datesortDirection string
asc, desc. Predeterminado: descpage number
1pageSize number
Campo de respuesta
Cada objeto en teamMemberSpend contiene:
userIdstring - ID de usuario codificado (por ejemplo,user_PDSPmvukpYgZEDXsoNirw3CFhy). Comparte el mismo espacio de nombres de identificadores queteamMembers[].idde/teams/members.namestring - Nombre para mostrar del usuarioemailstring - Dirección de correo electrónico del usuariorolestring - Rol en el equipo (por ejemplo,member,owner)spendCentsnumber - Gasto bajo demanda en centavos para el ciclo de facturación actual (excluye el consumo incluido)overallSpendCentsnumber - Gasto total en centavos para el ciclo de facturación actual, incluyendo tanto el gasto bajo demanda como el consumo incluidofastPremiumRequestsnumber - Número de solicitudes premium basadas en consumo realizadas durante el ciclo de facturaciónhardLimitOverrideDollarsnumber - Anulación personalizada del límite estricto de gasto en dólares para este usuario (0 significa que no hay anulación)monthlyLimitDollarsnumber | null - Límite de gasto mensual en dólares configurado para este usuario, onullsi no hay ningún límite configuradoeffectivePerUserLimitDollarsnumber - Límite de gasto por usuario actualmente aplicado en dólares, derivado demonthlyLimitDollarsyhardLimitOverrideDollars
El 4 de junio de 2026 añadimos precisión adicional a los campos spendCents y overallSpendCents para evitar errores de redondeo al comparar resultados con los importes de las facturas.
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
/teams/filtered-usage-eventsObté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.
Cálculo de costos: Para conciliar los costos a nivel de evento con los totales de /teams/spend, suma el campo chargedCents de todos los eventos. Este campo incluye tanto el costo del modelo como la tasa de tokens de Cherri Code cuando una solicitud puede acogerse a esa tasa, por lo que coincide con los totales del panel de control. Funciona tanto para los planes de facturación basados en tokens como para los basados en solicitudes.
El campo cursorTokenFee representa la tasa de tokens de Cherri Code y solo está presente cuando la tasa se aplica a una solicitud a un modelo de terceros. Esto incluye cuando Auto dirige una solicitud a un modelo de terceros. Los modelos propios de Cherri Code como Grok y Composer y las cuentas Enterprise basadas en solicitudes no incluyen esta tarifa. Consulta la tasa de tokens de Cherri Code.
Parámetros
startDate number
endDate number
startDate y endDate son instantes con precisión de milisegundos, y
ambos límites son inclusivos. Un evento exactamente en 2026-05-08T00:00:00.000Z se
incluye cuando endDate es 1778198400000. Para ventanas diarias de
ingesta que no se superpongan, establece el endDate de la ventana anterior en el último
milisegundo del día, como 2026-05-07T23:59:59.999Z.
userId number
page number
1pageSize number
100. Máximo: 1000.email string
serviceAccountId string
cloudAgentId string
* para devolver eventos de todas las ejecuciones del agente en la nube.automationId string
* para devolver eventos de todas las automatizaciones.hostingType string
CLOUD- ejecuciones alojadas por Cherri CodeSELF_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 PoolSELF_HOSTED_MACHINE- solo los workers personales "My Machine"
Un valor de hostingType no reconocido devuelve un error 400 en lugar de un resultado vacío, por lo que un error tipográfico no puede confundirse con un gasto autohospedado que sea realmente cero. Este filtro solo cubre el gasto de inferencia; el cómputo autohospedado se ejecuta en tus propias máquinas y Cherri Code nunca lo mide.
Cuando pasas varios filtros, el endpoint los combina con AND. Por ejemplo, automationId y serviceAccountId devuelven eventos que coinciden con los dos valores.
Campos de respuesta
Cada objeto en usageEvents contiene:
timestampstring - Marca temporal del evento en milisegundos desde la época Unix (como cadena)userEmailstring - Dirección de correo electrónico del usuario que realizó la solicitudserviceAccountIdstring | undefined - ID de la cuenta de servicio que hizo la solicitud. Se omite en eventos de usuarios humanos.serviceAccountNamestring | undefined - Nombre para mostrar de la cuenta de servicio que realizó la solicitud. Se omite en eventos de usuarios humanos.cloudAgentIdstring | 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.automationIdstring | undefined - UUID de la automatización asociada a este evento. Se omite en eventos que no pertenecen a automatizaciones.conversationIdstring | 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.modelstring - Modelo de IA utilizado para la solicitudkindstring - Categoría de facturación (p. ej.,Usage-based,Included in Business)maxModeboolean - Indica si la solicitud utilizó el modo máximorequestsCostsnumber - Costo en unidades de solicitudisTokenBasedCallboolean - Indica si la solicitud se facturó según el uso de tokensisChargeableboolean - Indica si este evento genera un cargoisHeadlessboolean - Indica si esta solicitud se realizó sin un cliente conectado (p. ej., agentes en segundo plano)tokenUsageobject | undefined - Detalles del uso de tokens (presente cuandoisTokenBasedCallestrue):inputTokensnumber - Tokens de entrada consumidosoutputTokensnumber - Tokens de salida generadoscacheWriteTokensnumber - Tokens escritos en cachécacheReadTokensnumber - Tokens leídos de la cachétotalCentsnumber - Costo total del modelo en centavosdiscountPercentOffnumber | undefined - Porcentaje de descuento aplicado, si lo hay
chargedCentsnumber - 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.cursorTokenFeenumber | 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
/teams/user-spend-limitEstablece 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
spendLimitDollars number | null Obligatorio
null para eliminar el límite.- Disponibilidad: solo Enterprise
- El usuario ya debe ser miembro de tu equipo
- Solo se aceptan valores enteros (sin cantidades decimales)
- Establecer
spendLimitDollarsen 0 fijará el límite en $0 - Establecer
spendLimitDollarsennulleliminará el límite por completo
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)
/teams/user-spend-limitsEstablece 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.
Esta ruta masiva está en versión preliminar y puede cambiar. La estructura de la solicitud, los campos de la respuesta y el comportamiento ante errores pueden variar antes de su disponibilidad general.
Parámetros
updates array Obligatorio
userEmailstring - Dirección de correo electrónico del miembro del equipospendLimitDollarsnumber | null - Límite de gasto en dólares, como entero. Establecenullpara eliminar el límite.
Campos de la respuesta
requestedCountnumber - Número de actualizaciones incluidas en la solicitudupdatedCountnumber - Número de límites que cambiaronunchangedCountnumber - Número de límites que ya tenían el valor solicitadofailedCountnumber - Número de actualizaciones que Cherri Code no pudo aplicarresultsarray - Resultados en el orden de la solicitud. Cada resultado incluyeuserEmaily un estadoupdated,unchangedofailed. Los resultados fallidos incluyen además un mensajeerror.
- Disponibilidad: solo Enterprise. El endpoint masivo se está implementando gradualmente; los equipos que aún no lo tengan activado reciben una respuesta
403 - Un miembro del equipo inexistente produce un resultado
failedsin bloquear las demás actualizaciones - Los campos de solicitud no válidos, los correos duplicados o más de 100 actualizaciones devuelven una respuesta
400sin aplicar ninguna actualización - Repetir una actualización correcta devuelve
unchangedy no genera otro evento de auditoría
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
/teams/remove-memberElimina 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
user_PDSPmvukpYgZEDXsoNirw3CFhy). Obligatorio si no se proporciona email.email string
userId.- Disponibilidad: solo Enterprise
- Proporciona
userIdoemail, pero no ambos - Debe quedar al menos un miembro de pago en el equipo después de la eliminación
- Debe quedar al menos un administrador (owner o free-owner) en el equipo después de la eliminación
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
/settings/repo-blocklists/reposObté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 .envconfig/*- Bloquea todos los archivos del directorio config**/*.secret- Bloquea todos los archivos .secret en cualquier subdirectoriosrc/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
/settings/repo-blocklists/repos/upsertReemplaza 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:
urlstring - URL del repositorio que se añadirá a la lista de bloqueopatternsstring[] - 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
/settings/repo-blocklists/repos/:repoIdElimina 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
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \ -u YOUR_API_KEY:Respuesta:
204 No ContentGrupos 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:
| Grupos | Path | ID |
|---|---|---|
| Grupos de la organización | /organizations/groups | id 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-groups | El public id usa el prefijo team_group_…, como team_group_01k2ja2000e0080000000000n2. |
| Grupos de facturación | /teams/groups | group_… |
: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.
- Autenticación: clave de API del equipo (Basic auth). Las lecturas requieren
read:*. Las escrituras requierenadmin:*. Las claves conadmin:*sirven para ambas. Una escritura con una claveread:*devuelve401. - IDs de grupo: Cada
:groupIdes el public id del grupo con el prefijoteam_group_…, comoteam_group_01k2ja2000e0080000000000n2. Los grupos de la organización usang_ygrp_. Los grupos de facturación usangroup_…. - Paginación: Las rutas de listado aceptan
pageypageSize. Ambos valores deben ser enteros positivos. - Límite de uso: Cada ruta permite 20 solicitudes por minuto y por equipo. Consulta límites de uso y buenas prácticas.
- Grupos sincronizados por SCIM: Gestiona la membresía desde tu proveedor de identidad. Las solicitudes para añadir o eliminar miembros devuelven
400en los grupos sincronizados por SCIM.
Las rutas de grupos comparten estas respuestas de error:
| Estado | Cuándo |
|---|---|
400 | ID de grupo, valor de paginación o cuerpo de solicitud con formato incorrecto |
401 | Clave de API inválida, o la clave carece del ámbito read:* (lecturas) o admin:* (escrituras) |
404 | El grupo no existe en este equipo |
429 | Límite de uso superado. La respuesta incluye una cabecera Retry-After: 60 |
Listar grupos de directorio de equipo
/teams/directory-groupsRecupera los grupos de directorio de equipo asociado a tu clave de API.
Parámetros de consulta
page number
1.pageSize number
50. El máximo es 200; los valores superiores a 200 se ajustan a 200.Campos de respuesta
Cada objeto de groups contiene:
idcadena - public id del grupo con el prefijoteam_group_…. Usa este valor como:groupIden las demás rutas.namecadena - Nombre del grupomemberCountnumber - Número de miembros del grupomonthlySpendingLimitDollarsnumber | null - Límite de gasto mensual en dólares enteros para cada miembro del grupo.nullsignifica que el grupo no tiene límite.createdAtcadena - Hora de creación en formato ISO 8601updatedAtcadena - Hora de la última actualización en formato ISO 8601
pagination objeto
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
/teams/directory-groups/:groupIdRecupera un grupo de directorio de equipo.
Parámetros
groupId cadena obligatorio
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
/teams/directory-groupsCrea 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
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
/teams/directory-groups/:groupIdActualiza 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
team_group_…, como team_group_01k2ja2000e0080000000000n2.Cuerpo de solicitud
name cadena
monthlySpendingLimitDollars number
0 y 2147483647.clearMonthlySpendingLimitDollars boolean
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
/teams/directory-groups/:groupIdElimina 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
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.
No puedes eliminar un grupo con un mapping de SCIM activo desde este endpoint. Elimina el mapping en el dashboard, elimina a todos los miembros y, después, borra el grupo.
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
/teams/directory-groups/:groupId/membersRecupera los miembros de un grupo de directorio de equipo.
Parámetros
groupId cadena Obligatorio
team_group_…, como team_group_01k2ja2000e0080000000000n2.Parámetros de consulta
page number
1.pageSize number
50. El máximo es 200; los valores superiores a 200 se ajustan a 200.Campos de respuesta
Cada objeto de members contiene:
userIdcadena: ID público del usuario con el prefijouser_namecadena: nombre visible del miembroemailcadena: dirección de correo electrónico del miembrojoinedAtcadena: fecha en que se añadió al miembro al grupo, en formato ISO 8601
pagination objeto
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
/teams/directory-groups/:groupId/members/bulk-addAñade miembros a un grupo de directorio de equipo manual.
Parámetros
groupId cadena Obligatorio
team_group_…, como team_group_01k2ja2000e0080000000000n2.Cuerpo de solicitud
userIds cadena[] Obligatorio
user_. Una sola solicitud puede incluir hasta 100 usuarios.Campos de respuesta
addedCount number
Los grupos sincronizados por SCIM rechazan los cambios manuales de membresía con una respuesta 400.
Gestiona su membresía en tu proveedor de identidad.
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
/teams/directory-groups/:groupId/members/bulk-removeElimina miembros de un grupo de directorio de equipo manual.
Parámetros
groupId cadena Obligatorio
team_group_…, como team_group_01k2ja2000e0080000000000n2.Cuerpo de solicitud
userIds cadena[] Obligatorio
user_. Una sola solicitud puede incluir hasta 100 usuarios.Campos de respuesta
removedCount number
Los grupos sincronizados por SCIM rechazan los cambios manuales de membresía con una respuesta 400.
Gestiona su membresía en tu proveedor de identidad.
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.
Los grupos de facturación residen en /teams/groups y usan ids group_…. Los grupos de directorio de equipo residen en /teams/directory-groups y usan ids team_group_…. Ninguna de las dos APIs acepta los ids de la otra.
Listar grupos
/teams/groupsObté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
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
/teams/groups/:groupIdObtiene 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
group_PDSPmvukpYgZEDXsoNirw3CFhy)billingCycle string
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
/teams/groupsCrea un nuevo grupo de facturación. limitado a 20 solicitudes por minuto por equipo.
Parámetros
name string Obligatorio
type string
BILLING. Valor predeterminado: BILLINGcurl -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
/teams/groups/:groupIdActualiza 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.
Solo se puede actualizar un campo por solicitud. Para actualizar tanto el nombre como la vinculación al directorio, realiza solicitudes por separado.
Parámetros
groupId string Obligatorio
name string
directoryGroupId string | null
null para desvincularlo de la sincronización con el directoriocurl -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
/teams/groups/:groupIdElimina un grupo de facturación. Devuelve 204 No Content en caso de éxito. limitado a 20 solicitudes por minuto por equipo.
Eliminar un grupo de facturación es una operación destructiva; los datos no se pueden recuperar. Todo el historial de uso de los grupos eliminados se reasigna retroactivamente al grupo Unassigned.
Parámetros
groupId string Obligatorio
curl -X DELETE https://api.cursor.com/teams/groups/group_PDSPmvukpYgZEDXsoNirw3CFhy \ -u YOUR_API_KEY:Respuesta:
204 No ContentAgregar miembros al grupo
/teams/groups/:groupId/membersAgrega 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.
Los grupos de facturación sincronizados con SCIM no se pueden modificar mediante la API. Toda la asignación de miembros para los grupos sincronizados con SCIM debe gestionarse mediante SCIM.
Parámetros
groupId string Obligatorio
userIds string[] Obligatorio
["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
/teams/groups/:groupId/membersElimina 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.
Los grupos de facturación sincronizados con SCIM no se pueden modificar mediante la API. Todos los cambios de miembros para los grupos sincronizados con SCIM deben gestionarse mediante SCIM.
Parámetros
groupId string Obligatorio
userIds string[] Obligatorio
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
Las rutas de acceso a modelos están en vista previa y pueden cambiar. Las rutas, los campos de respuesta y el comportamiento de los errores pueden modificarse antes de la disponibilidad general.
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.
- Disponibilidad: Equipos con el control de acceso a modelos activado
- Autenticación: Clave de API del equipo (autenticación Basic). Las consultas requieren
models:read. Las escrituras requierenmodels:*. Las claves conadmin:*funcionan para ambas. Las claves genéricasread:*no pueden llamar a estas rutas. - ID de proveedor y modelo: Los segmentos de ruta son ID del catálogo, como
anthropicyclaude-opus-4-6, no nombres para mostrar. Las respuestas GET incluyen nombres para mostrar. - Primero, la configuración: Las consultas y escrituras de proveedores y modelos devuelven 409 mientras
stateseaunrestricted(olegacy). El primerPUT /teams/model-access/configurationcon valores predeterminados en un equipo sin restricciones activa la política e inicializa el catálogo actual (igual que al guardar por primera vez en la página Modelos). Los PUT posteriores de configuración con valores predeterminados solo actualizan los valores predeterminados y mantienen los controles existentes. - Volver al estado sin restricciones:
PUT /teams/model-access/configurationcon{ "state": "unrestricted" }elimina la política personalizada para questatevuelva a serunrestricted. - Límites de uso: 20 solicitudes por minuto. Las escrituras aparecen en los registros de auditoría del equipo como eventos
team_settings. Consulta los límites de uso y las buenas prácticas.
Obtener la configuración de acceso a modelos
/teams/model-access/configurationIndica 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
state string
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
/teams/model-access/configurationCrea 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 questatepase a serunrestricted{ "newProviderDefault", "newModelDefault" }para crear o actualizar una política personalizada (abreviatura retrocompatible destate: "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
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
/teams/model-access/providersLista 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
fast o reasoning).displayName string
supportedValues string[]
allowedValues string[]
configuredDefaultValue string | null
null si no se ha establecido.catalogDefaultValue string | null
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
/teams/model-access/providers/:providerActiva o desactiva un proveedor. Devuelve 409 si el equipo sigue teniendo la política unrestricted o legacy.
Parámetros
provider string Obligatorio
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
/teams/model-access/providers/:provider/modelsLista 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
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
/teams/model-access/providers/:provider/models/:modelActiva 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
anthropic).model string Obligatorio
claude-opus-4-6).Cuerpo de la solicitud
enabled boolean Obligatorio
parameters object
allowedValuesstring[] | null: Restringe los valores que pueden elegir los miembros. Pasanullpara eliminar la restricción.defaultValuestring | null: Valor predeterminado para el equipo. Debe estar incluido enallowedValuescuando se establezca una restricción. Pasanullpara 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": "…" }| Estado | Cuándo |
|---|---|
401 | Clave incorrecta o falta models:read / models:* (o admin:*) |
403 | El control de acceso a modelos no está disponible para ese equipo |
409 | Lectura o escritura en un proveedor o modelo mientras state es unrestricted o legacy |
400 | ID 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.
- Autenticación: Team API key (Basic auth). Las lecturas requieren
read:*oadmin:*. Las escrituras requierenadmin:*. Una escritura con una claveread:*devuelve401. - Límites de uso: 20 solicitudes por minuto, por equipo y por endpoint. Si superas el límite, la API devuelve
429conRetry-After: 60. Consulta límites de uso. - Lecturas en todos los planes:
GET /grok-bot/access,/networky/auto-reviewdevuelven la política efectiva en todos los planes. Las escrituras devuelven403cuando la funcionalidad no está disponible para el equipo.
Activar el Bot de Grok
/grok-bot/enableActiva 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 ContentDesactivar el Bot de Grok
/grok-bot/disableDesactiva 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 ContentObtener las capacidades del Bot de Grok
/grok-bot/capabilitiesDevuelve las capacidades del Bot de Grok del equipo.
Campos de respuesta
enabled boolean
cloudAgents boolean
templateSharing string | null
all, team_only, none o null para el valor predeterminado del equipo.actionRecording boolean
localExecution string | null
never, ask, always o null si no hay límite.localEgressAllowed boolean
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
/grok-bot/capabilitiesActualiza las capacidades del Bot de Grok. Los campos omitidos no se modifican. Devuelve 403 cuando un campo no está disponible para el equipo.
enabled es de solo lectura. Usa Activar el Bot de Grok o Desactivar el Bot de Grok. Envía al menos un campo.
Parámetros
cloudAgents boolean
templateSharing string | null
all, team_only, none o null para restaurar el valor predeterminado del equipo.actionRecording boolean
localExecution string | null
never, ask, always o null para quitar el límite máximo del equipo.localEgressAllowed boolean
curl -X PATCH https://api.cursor.com/grok-bot/capabilities \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "cloudAgents": false, "localExecution": "never", "localEgressAllowed": false }'Respuesta:
{ "enabled": true, "cloudAgents": false, "templateSharing": "team_only", "actionRecording": false, "localExecution": "never", "localEgressAllowed": false}Consultar forzar Auto-review
/grok-bot/auto-reviewDevuelve la política de forzar Auto-review del equipo.
Campos de respuesta
enforced boolean
true, todos los miembros deben mantener activado forzar Auto-review.rules object
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
/grok-bot/auto-reviewReemplaza la política de forzar Auto-review del equipo. Devuelve 403 cuando forzar Auto-review no está disponible para el equipo.
Las listas allow y block vacías conservan las instrucciones almacenadas si tu equipo no puede establecer reglas de Auto-review. Las listas no vacías devuelven 403 en ese caso.
Parámetros
enforced boolean Obligatorio
true, todos los miembros deben mantener activado forzar Auto-review.rules object Obligatorio
allowstring[]: Hasta 20 instrucciones, de 1.000 caracteres cada una. Se recortan y se deduplican.blockstring[]: 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
/grok-bot/accessDevuelve qué miembros del equipo pueden usar el Bot de Grok.
Campos de la respuesta
mode string
all o limited.groups array
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
/grok-bot/accessDefine 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
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
/grok-bot/networkDevuelve 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
host-or-CIDR:port, como 54.85.223.0/24:3306.locked boolean
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
/grok-bot/networkReemplaza la network policy del Bot de Grok del equipo. Devuelve 403 en los planes Teams.
Parámetros
egressMode string Obligatorio
unset: no aplica ninguna policyallow_all: permite todos los destinosdefault_with_network_settings: los valores predeterminados de Cherri Code más la lista de permitidosnetwork_settings_only: la lista de permitidos y los destinos necesarios para ejecutar el Bot de Grok
allowlist array Obligatorio
host-or-CIDR:port como 54.85.223.0/24:3306.locked boolean Obligatorio
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
/grok-bot/team-rulesLista las reglas del equipo del Bot de Grok, de más recientes a más antiguas.
Parámetros
limit number
50. Máximo: 100.cursor string
nextCursor anterior.curl -X GET "https://api.cursor.com/grok-bot/team-rules?limit=50" \ -u YOUR_API_KEY: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
/grok-bot/team-rulesCrea 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
content string Obligatorio
enabled boolean Obligatorio
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
/grok-bot/team-rules/:idActualiza una regla del equipo del Bot de Grok. Devuelve 404 cuando la regla no existe.
Envía al menos un campo.
Parámetros
id string Obligatorio
name string
content string
enabled boolean
curl -X PATCH https://api.cursor.com/grok-bot/team-rules/rule_PDSPmvukpYgZEDXsoNirw3CFhy \ -u YOUR_API_KEY: \ -H "Content-Type: application/json" \ -d '{ "enabled": false }'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
/grok-bot/team-rules/:idElimina una regla del equipo del Bot de Grok. Devuelve 204 No Content si la operación es correcta.
Parámetros
id string Obligatorio
curl -X DELETE https://api.cursor.com/grok-bot/team-rules/rule_PDSPmvukpYgZEDXsoNirw3CFhy \ -u YOUR_API_KEY:Respuesta:
204 No ContentListar manifiestos de configuración del Bot de Grok
/grok-bot/setup-manifestsLista los manifiestos de configuración del Bot de Grok, ordenados por id.
Parámetros
limit number
50. Máximo: 100.cursor string
nextCursor anterior.curl -X GET "https://api.cursor.com/grok-bot/setup-manifests?limit=50" \ -u YOUR_API_KEY: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
/grok-bot/setup-manifests/:manifestIdCrea 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
., _ o -.scripts array Obligatorio
idstring: mismo formato quemanifestIdsetupstring: comando de instalación no vacíocheckstring: 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
/grok-bot/setup-manifests/:manifestIdElimina un manifiesto de configuración. Devuelve 204 No Content si la operación se realiza correctamente.
Parámetros
manifestId string Obligatorio
curl -X DELETE https://api.cursor.com/grok-bot/setup-manifests/toolchain \ -u YOUR_API_KEY:Respuesta:
204 No ContentErrores
Los cuerpos de las respuestas de error usan:
{ "code": "error", "message": "…" }| Estado | Cuándo |
|---|---|
401 | Clave incorrecta, falta read:* / admin:*, o la Grok Bot Admin API no está activada para el equipo |
403 | La escritura no está disponible para el equipo o su plan |
404 | No existe un ID de regla o de manifiesto bien formado en la ruta |
409 | Un manifiesto de configuración cambió durante la solicitud |
400 | Cuerpo 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 |
429 | Se superó el límite de uso del endpoint |