La Admin API te permite acceder de forma programática a los datos de tu equipo, incluyendo información de miembros, métricas de uso y detalles de gastos. Creá dashboards personalizados, herramientas de monitoreo o integrá con tus workflows existentes.
La API está en su primera versión. Estamos ampliando capacidades según el feedback: ¡contanos qué endpoints necesitás!

Autenticación

Todas las solicitudes a la API requieren autenticación con una clave de API. Solo los administradores del equipo pueden crear y gestionar claves de API. Las claves de API están vinculadas a la organización, son visibles para todos los administradores y no se ven afectadas por el estado de la cuenta de quien las creó originalmente.

Crear una clave de API

  1. Ve a cursor.com/dashboard → pestaña SettingsCursor Admin API Keys
  2. Haz clic en Create New API Key
  3. Dale a tu clave un nombre descriptivo (p. ej., “Integración del panel de uso”)
  4. Copia la clave generada de inmediato: no la volverás a ver
Formato: key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Usar tu clave de API

Usa tu clave de API como nombre de usuario en la autenticación básica: Usar curl con autenticación básica:
curl https://api.cursor.com/{route} -u API_KEY:
O bien establece directamente el encabezado Authorization:
Authorization: Basic {base64_encode('API_KEY:')}

URL base

Todos los endpoints de la API utilizan:
https://api.cursor.com

Endpoints

Obtener miembros del equipo

Obtén todos los miembros del equipo y sus detalles.
GET /teams/members

Respuesta

Devuelve un array de objetos de miembros del equipo:
{
  teamMembers: {
    name: string;
    email: string;
    role: 'owner' | 'member' | 'free-owner';
  }[];
}

Respuesta de ejemplo

{
  "teamMembers": [
    {
      "name": "Alex",
      "email": "developer@company.com",
      "role": "miembro"
    },
    {
      "name": "Sam",
      "email": "admin@company.com",
      "role": "dueño"
    }
  ]
}

Ejemplo de solicitud

curl -X GET https://api.cursor.com/teams/members \
  -u TU_CLAVE_API:

Obtener datos de uso diario

Obtén métricas diarias detalladas para tu equipo en un rango de fechas. Ofrece información sobre ediciones de código, uso de la IA de asistencia y tasas de aceptación.
POST /teams/uso-diario

Cuerpo de la solicitud

ParámetroTipoRequeridoDescripción
startDatenumberFecha de inicio en milisegundos de época
endDatenumberFecha de fin en milisegundos de época
El rango de fechas no puede superar los 90 días. Haz varias solicitudes para periodos más largos.

Respuesta

{
  data: {
    date: number;
    isActive: boolean;
    totalLinesAdded: number;
    totalLinesDeleted: number;
    acceptedLinesAdded: number;
    acceptedLinesDeleted: number;
    totalApplies: number;
    totalAccepts: number;
    totalRejects: number;
    totalTabsShown: number;
    totalTabsAccepted: number;
    composerRequests: number;
    chatRequests: number;
    agentRequests: number;
    cmdkUsages: number;
    subscriptionIncludedReqs: number;
    apiKeyReqs: number;
    usageBasedReqs: number;
    bugbotUsages: number;
    mostUsedModel: string;
    applyMostUsedExtension?: string;
    tabMostUsedExtension?: string;
    clientVersion?: string;
    email?: string;
  }[];
  period: {
    startDate: number;
    endDate: number;
  };
}

Campos de respuesta

FieldDescription
dateFecha en milisegundos desde la época (epoch)
isActiveUsuario activo ese día
totalLinesAddedLíneas de código añadidas
totalLinesDeletedLíneas de código eliminadas
acceptedLinesAddedLíneas añadidas de sugerencias de IA aceptadas
acceptedLinesDeletedLíneas eliminadas de sugerencias de IA aceptadas
totalAppliesOperaciones de apply
totalAcceptsSugerencias aceptadas
totalRejectsSugerencias rechazadas
totalTabsShownAutocompletados por tab mostrados
totalTabsAcceptedAutocompletados por tab aceptados
composerRequestsSolicitudes del Composer
chatRequestsSolicitudes de chat
agentRequestsSolicitudes del agente
cmdkUsagesUsos de la paleta de comandos (Cmd+K)
subscriptionIncludedReqsSolicitudes incluidas en la suscripción
apiKeyReqsSolicitudes con clave de API
usageBasedReqsSolicitudes de pago por uso
bugbotUsagesUsos del detector de bugs
mostUsedModelModelo de IA más usado
applyMostUsedExtensionExtensión de archivo más usada en applies
tabMostUsedExtensionExtensión de archivo más usada en tabs
clientVersionVersión de Cursor
emailCorreo electrónico del usuario

Ejemplo de respuesta

{
  "data": [
    {
      "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-4",
      "applyMostUsedExtension": ".tsx",
      "tabMostUsedExtension": ".ts",
      "clientVersion": "0.25.1",
      "email": "developer@company.com"
    },
    {
      "date": 1710806400000,
      "isActive": true,
      "totalLinesAdded": 2104,
      "totalLinesDeleted": 1203,
      "acceptedLinesAdded": 1876,
      "acceptedLinesDeleted": 987,
      "totalApplies": 102,
      "totalAccepts": 91,
      "totalRejects": 11,
      "totalTabsShown": 456,
      "totalTabsAccepted": 398,
      "composerRequests": 67,
      "chatRequests": 156,
      "agentRequests": 23,
      "cmdkUsages": 89,
      "subscriptionIncludedReqs": 320,
      "apiKeyReqs": 15,
      "usageBasedReqs": 0,
      "bugbotUsages": 5,
      "mostUsedModel": "claude-3-opus",
      "applyMostUsedExtension": ".py",
      "tabMostUsedExtension": ".py",
      "clientVersion": "0.25.1",
      "email": "developer@company.com"
    }
  ],
  "period": {
    "startDate": 1710720000000,
    "endDate": 1710892800000
  }
}

Ejemplo de petició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 gastos

Obtén la información de gastos del mes calendario actual con búsqueda, ordenación y paginación.
POST /teams/spend

Cuerpo de la solicitud

ParámetroTipoRequeridoDescripción
searchTermstringNoBusca en nombres de usuario y direcciones de correo
sortBystringNoOrdena por: amount, date, user. Predeterminado: date
sortDirectionstringNoDirección de orden: asc, desc. Predeterminado: desc
pagenumberNoNúmero de página (indexado desde 1). Predeterminado: 1
pageSizenumberNoResultados por página

Respuesta

{
  teamMemberSpend: {
    spendCents: number;
    fastPremiumRequests: number;
    name: string;
    email: string;
    role: 'owner' | 'member' | 'free-owner';
    hardLimitOverrideDollars: number;
  }[];
  subscriptionCycleStart: number;
  totalMembers: number;
  totalPages: number;
}

Campos de respuesta

CampoDescripción
spendCentsGasto total en centavos
fastPremiumRequestsSolicitudes al modelo premium rápido
nameNombre del miembro
emailCorreo electrónico del miembro
roleRol en el equipo
hardLimitOverrideDollarsAnulación del límite de gasto personalizado
subscriptionCycleStartInicio del ciclo de suscripción (milisegundos desde la época)
totalMembersTotal de miembros del equipo
totalPagesTotal de páginas

Ejemplo de respuesta

{
  "teamMemberSpend": [
    {
      "spendCents": 2450,
      "fastPremiumRequests": 1250,
      "name": "Alex",
      "email": "developer@company.com",
      "role": "miembro",
      "hardLimitOverrideDollars": 100
    },
    {
      "spendCents": 1875,
      "fastPremiumRequests": 980,
      "name": "Sam",
      "email": "admin@company.com",
      "role": "propietario",
      "hardLimitOverrideDollars": 0
    },
  ],
  "subscriptionCycleStart": 1708992000000,
  "totalMembers": 15,
  "totalPages": 1
}

Solicitudes de ejemplo

Datos básicos de gastos:
curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
Buscar a un usuario específico con paginación:
curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "searchTerm": "alex@company.com",
    "page": 2,
    "pageSize": 25
  }'

Obtener datos de eventos de uso

Obtén eventos de uso detallados para tu equipo con opciones completas de filtrado, búsqueda y paginación. Este endpoint ofrece información granular sobre llamadas individuales a la API, uso de modelos, consumo de tokens y costos.
POST /teams/filtered-usage-events

Cuerpo de la solicitud

ParámetroTipoRequeridoDescripción
startDatenumberNoFecha de inicio en milisegundos de época (epoch)
endDatenumberNoFecha de fin en milisegundos de época (epoch)
userIdnumberNoFiltrar por ID de usuario específico
pagenumberNoNúmero de página (con índice desde 1). Predeterminado: 1
pageSizenumberNoCantidad de resultados por página. Predeterminado: 10
emailstringNoFiltrar por correo electrónico del usuario

Respuesta

{
  totalUsageEventsCount: number;
  pagination: {
    numPages: number;
    currentPage: number;
    pageSize: number;
    hasNextPage: boolean;
    hasPreviousPage: boolean;
  };
  usageEvents: {
    timestamp: string;
    model: string;
    kind: string;
    maxMode: boolean;
    requestsCosts: number;
    isTokenBasedCall: boolean;
    tokenUsage?: {
      inputTokens: number;
      outputTokens: number;
      cacheWriteTokens: number;
      cacheReadTokens: number;
      totalCents: number;
    };
    isFreeBugbot: boolean;
    userEmail: string;
  }[];
  period: {
    startDate: number;
    endDate: number;
  };
}

Campos de respuesta

CampoDescripción
totalUsageEventsCountNúmero total de eventos de uso que coinciden con la consulta
paginationMetadatos de paginación para navegar los resultados
timestampMarca de tiempo del evento en milisegundos desde el epoch
modelModelo de IA usado para la solicitud
kindCategoría de uso (p. ej., “Usage-based”, “Included in Business”)
maxModeSi el modo máximo estaba habilitado
requestsCostsCosto en unidades de solicitud
isTokenBasedCallTrue cuando el evento se cobra como evento basado en uso
tokenUsageConsumo detallado de tokens (disponible cuando isTokenBasedCall es true)
isFreeBugbotSi fue un uso gratuito de bugbot
userEmailCorreo del usuario que hizo la solicitud
periodRango de fechas de los datos consultados

Ejemplo de respuesta

{
  "totalUsageEventsCount": 113,
  "pagination": {
    "numPages": 12,
    "currentPage": 1,
    "pageSize": 10,
    "hasNextPage": true,
    "hasPreviousPage": false
  },
  "usageEvents": [
    {
      "timestamp": "1750979225854",
      "model": "claude-4-opus",
      "kind": "Según uso",
      "maxMode": true,
      "requestsCosts": 5,
      "isTokenBasedCall": true,
      "tokenUsage": {
        "inputTokens": 126,
        "outputTokens": 450,
        "cacheWriteTokens": 6112,
        "cacheReadTokens": 11964,
        "totalCents": 20.18232
      },
      "isFreeBugbot": false,
      "userEmail": "developer@company.com"
    },
    {
      "timestamp": "1750979173824",
      "model": "claude-4-opus",
      "kind": "Según uso",
      "maxMode": true,
      "requestsCosts": 10,
      "isTokenBasedCall": true,
      "tokenUsage": {
        "inputTokens": 5805,
        "outputTokens": 311,
        "cacheWriteTokens": 11964,
        "cacheReadTokens": 0,
        "totalCents": 40.16699999999999
      },
      "isFreeBugbot": false,
      "userEmail": "developer@company.com"
    },
    {
      "timestamp": "1750978339901",
      "model": "claude-4-sonnet-thinking",
      "kind": "Incluido en Business"
      "maxMode": true,
      "requestsCosts": 1.4,
      "isTokenBasedCall": false,
      "isFreeBugbot": false,
      "userEmail": "admin@company.com"
    }
  ],
  "period": {
    "startDate": 1748411762359,
    "endDate": 1751003762359
  }
}

Ejemplos de solicitudes

Obtener todos los eventos de uso con la paginación por defecto:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
Filtrar por intervalo de fechas y usuario específico:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": 1748411762359,
    "endDate": 1751003762359,
    "email": "developer@company.com",
    "page": 1,
    "pageSize": 25
  }'
Obtén eventos de uso de un usuario específico con paginación personalizada:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "userId": 12345,
    "page": 2,
    "pageSize": 50
  }'

Establecer límite de gasto por usuario

Establece límites de gasto para miembros específicos del equipo. Esto te permite controlar cuánto puede gastar cada usuario en uso de IA dentro de tu equipo.
POST /teams/user-spend-limit
Limitación de frecuencia: 60 solicitudes por minuto por equipo

Cuerpo de la solicitud

ParámetroTipoObligatorioDescripción
userEmailstringDirección de correo del miembro del equipo
spendLimitDollarsnumberLímite de gasto en dólares (solo números enteros, sin decimales).
  • El usuario ya debe ser miembro de tu equipo
  • Solo se aceptan valores enteros (sin decimales)
  • Establecer spendLimitDollars en 0 fija el límite en $0

Respuesta

Devuelve una respuesta estandarizada que indica si hubo éxito o error:
{
  outcome: 'success' | 'error';
  message: string;
}

Respuestas de ejemplo

Límite establecido correctamente:
{
  "outcome": "success",
  "message": "Límite de gasto configurado en $100 para el usuario developer@company.com"
}
Respuesta de error:
{
  "outcome": "error",
  "message": "Formato de correo electrónico inválido"
}

Ejemplos de solicitudes

Configurar un límite de gasto:
curl -X POST https://api.cursor.com/teams/user-spend-limit \
  -u TU_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "userEmail": "developer@company.com",
    "spendLimitDollars": 100
  }'

API de listas de bloqueo de repos

Agrega repos y usa patrones para evitar que archivos o directorios se indexen o se usen como contexto para tu equipo.

Obtener las blocklists de repos del equipo

Obtén todas las blocklists de repos configuradas para tu equipo.
GET /settings/repo-blocklists/repos
Respuesta
Devuelve un array de objetos de lista de bloqueo del repositorio:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Ejemplo de 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": ["*"]
    }
  ]
}
Ejemplo de petición
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \
  -u TU_CLAVE_API:

Upsert de listas de bloqueo de repos

Reemplaza las listas de bloqueo de repositorios existentes para los repos proporcionados. Nota: Este endpoint solo sobrescribirá los patrones de los repositorios proporcionados. Todos los demás repos no se verán afectados.
POST /settings/repo-blocklists/repos/upsert
Cuerpo de la solicitud
ParámetroTipoRequeridoDescripción
reposarrayLista de objetos de bloqueo de repositorios
Cada objeto de repositorio debe contener:
CampoTipoRequeridoDescripción
urlstringURL del repositorio a bloquear
patternsstring[]Lista de patrones de archivos a bloquear (se admiten patrones glob)
Respuesta
Devuelve la lista actualizada de listas de bloqueo del repositorio:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Ejemplo de solicitud
curl -X POST https://api.cursor.com/settings/repo-blocklists/repos/upsert \
  -u TU_CLAVE_DE_API: \
  -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": ["*"]
      }
    ]
  }'

Eliminar la lista de bloqueo de repositorios

Quita un repositorio específico de la lista de bloqueo.
DELETE /settings/repo-blocklists/repos/:repoId
Parámetros
ParámetroTipoObligatorioDescripción
repoIdstringID de la lista de bloqueo del repositorio que se va a eliminar
Respuesta
Devuelve 204 No Content si la eliminación se realiza correctamente.
Ejemplo de petición
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \
  -u TU_API_KEY:

Ejemplos de patrones

Patrones comunes de la blocklist:
  • * - Bloquear todo el repositorio
  • *.env - Bloquear todos los archivos .env
  • config/* - Bloquear todos los archivos del directorio config
  • **/*.secret - Bloquear todos los archivos .secret en cualquier subdirectorio
  • src/api/keys.ts - Bloquear un archivo específico