La API de Administración te permite acceder programáticamente a los datos de tu equipo, incluyendo información de miembros, métricas de uso y detalles de gastos. Construye paneles personalizados, herramientas de monitoreo o integra con flujos de trabajo existentes.
La API está en su primera versión. Estamos expandiendo las capacidades basándonos en comentarios - ¡déjanos saber qué endpoints necesitas!

Autenticación

Todas las solicitudes de API requieren autenticación usando 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 del creador original.

Crear una Clave de API

  1. Navega 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 (ej., “Integración del Panel de Uso”)
  4. Copia la clave generada inmediatamente - no la verás de nuevo
Formato: key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Usar tu Clave de API

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

URL Base

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

Endpoints

Obtener Miembros del Equipo

Recupera 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';
  }[];
}

Ejemplo de Respuesta

{
  "teamMembers": [
    {
      "name": "Alex",
      "email": "developer@company.com",
      "role": "member"
    },
    {
      "name": "Sam",
      "email": "admin@company.com",
      "role": "owner"
    }
  ]
}

Ejemplo de Solicitud

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

Obtener Datos de Uso Diario

Recupera métricas detalladas de uso diario para tu equipo dentro de un rango de fechas. Proporciona información sobre ediciones de código, uso de asistencia de IA y tasas de aceptación.
POST /teams/daily-usage-data

Cuerpo de la Solicitud

ParámetroTipoRequeridoDescripción
startDatenumberFecha de inicio en milisegundos epoch
endDatenumberFecha de fin en milisegundos epoch
El rango de fechas no puede exceder 90 días. Realiza múltiples solicitudes para períodos 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

CampoDescripción
dateFecha en milisegundos epoch
isActiveUsuario activo en este día
totalLinesAddedLíneas de código agregadas
totalLinesDeletedLíneas de código eliminadas
acceptedLinesAddedLíneas agregadas de sugerencias de IA aceptadas
acceptedLinesDeletedLíneas eliminadas de sugerencias de IA aceptadas
totalAppliesOperaciones de aplicación
totalAcceptsSugerencias aceptadas
totalRejectsSugerencias rechazadas
totalTabsShownCompletaciones de tab mostradas
totalTabsAcceptedCompletaciones de tab aceptadas
composerRequestsSolicitudes de Composer
chatRequestsSolicitudes de chat
agentRequestsSolicitudes de agente
cmdkUsagesUsos de la paleta de comandos (Cmd+K)
subscriptionIncludedReqsSolicitudes de suscripción
apiKeyReqsSolicitudes de clave API
usageBasedReqsSolicitudes de pago por uso
bugbotUsagesUsos de detección de errores
mostUsedModelModelo de IA más frecuente
applyMostUsedExtensionExtensión de archivo más usada para aplicaciones
tabMostUsedExtensionExtensión de archivo más usada para tabs
clientVersionVersión de Cursor
emailEmail 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
  }
}

Solicitud de Ejemplo

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

Recupera información de gastos para el mes calendario actual con búsqueda, ordenamiento y paginación.
POST /teams/spend

Cuerpo de la Solicitud

ParámetroTipoRequeridoDescripción
searchTermstringNoBuscar en nombres de usuario y correos electrónicos
sortBystringNoOrdenar por: amount, date, user. Por defecto: date
sortDirectionstringNoDirección de ordenamiento: asc, desc. Por defecto: desc
pagenumberNoNúmero de página (indexado desde 1). Por defecto: 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 la Respuesta

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

Respuesta de Ejemplo

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

Solicitudes de Ejemplo

Datos básicos de gasto:
curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
Buscar 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

Recupera eventos de uso detallados para tu equipo con opciones completas de filtrado, búsqueda y paginación. Este endpoint proporciona 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 epoch
endDatenumberNoFecha de fin en milisegundos epoch
userIdnumberNoFiltrar por ID de usuario específico
pagenumberNoNúmero de página (indexado desde 1). Por defecto: 1
pageSizenumberNoNúmero de resultados por página. Por defecto: 10
emailstringNoFiltrar por dirección de correo electrónico del usuario

Respuesta

{
  totalUsageEventsCount: number;
  pagination: {
    numPages: number;
    currentPage: number;
    pageSize: number;
    hasNextPage: boolean;
    hasPreviousPage: boolean;
  };
  usageEvents: {
    timestamp: string;
    model: string;
    kindLabel: 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 Explicados

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

Respuesta de Ejemplo

{
  "totalUsageEventsCount": 113,
  "pagination": {
    "numPages": 12,
    "currentPage": 1,
    "pageSize": 10,
    "hasNextPage": true,
    "hasPreviousPage": false
  },
  "usageEvents": [
    {
      "timestamp": "1750979225854",
      "model": "claude-4-opus",
      "kindLabel": "Usage-based",
      "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",
      "kindLabel": "Usage-based",
      "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",
      "kindLabel": "Included in Business",
      "maxMode": true,
      "requestsCosts": 1.4,
      "isTokenBasedCall": false,
      "isFreeBugbot": false,
      "userEmail": "admin@company.com"
    }
  ],
  "period": {
    "startDate": 1748411762359,
    "endDate": 1751003762359
  }
}

Solicitudes de Ejemplo

Obtener todos los eventos de uso con paginación predeterminada:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
Filtrar por rango 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
  }'
Obtener eventos de uso para 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
  }'

API de Listas de Bloqueo de Repositorios

Agrega repositorios y usa patrones para evitar que archivos o directorios sean indexados o utilizados como contexto para tu equipo.

Obtener Listas de Bloqueo de Repositorios del Equipo

Recupera todas las listas de bloqueo de repositorios configuradas para tu equipo.
GET /settings/repo-blocklists/repos
Respuesta
Devuelve un array de objetos de lista de bloqueo de repositorios:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Respuesta de Ejemplo
{
  "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": ["*"]
    }
  ]
}
Solicitud de Ejemplo
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \
  -u YOUR_API_KEY:

Insertar o Actualizar Listas de Bloqueo de Repositorios

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

Eliminar Lista de Bloqueo de Repositorio

Eliminar un repositorio específico de la lista de bloqueo.
DELETE /settings/repo-blocklists/repos/:repoId
Parámetros
ParámetroTipoRequeridoDescripción
repoIdstringID de la lista de bloqueo de repositorio a eliminar
Respuesta
Devuelve 204 No Content al eliminar exitosamente.
Ejemplo de Solicitud
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \
  -u YOUR_API_KEY:

Ejemplos de Patrones

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