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 gasto. Crea dashboards personalizados, herramientas de monitoreo o intégrala en tus flujos de trabajo existentes.
La API está en su primera versión. Estamos ampliando sus capacidades según el feedback: ¡cuéntanos qué endpoints necesitas!

Autenticación

Todas las solicitudes a la API requieren autenticación con una clave de API. Solo los administradores del equipo pueden crear y administrar 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. Ve a cursor.com/dashboard → pestaña SettingsCursor Admin API Keys
  2. Haz clic en Create New API Key
  3. Asigna a tu clave un nombre descriptivo (p. ej., “Usage Dashboard Integration”)
  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: Usa curl con autenticación básica:
curl https://api.cursor.com/{route} -u API_KEY:
O configura 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

Obtiene 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 diarios

Obtén métricas detalladas de uso diario para tu equipo en un rango de fechas. Ofrece información sobre ediciones de código, uso de la 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 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

CampoDescripción
dateFecha en milisegundos desde la época
isActiveUsuario activo en este 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 de tab mostrados
totalTabsAcceptedAutocompletados de tab aceptados
composerRequestsSolicitudes de Composer
chatRequestsSolicitudes de chat
agentRequestsSolicitudes de agent
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 de detección de bugs
mostUsedModelModelo de IA más usado
applyMostUsedExtensionExtensión de archivo más usada para apply
tabMostUsedExtensionExtensión de archivo más usada para tab
clientVersionVersión de Cursor
emailCorreo electrónico del usuario

Respuesta de ejemplo

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

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 información de gastos del mes calendario actual con búsqueda, ordenación y paginación.
POST /teams/spend

Cuerpo de la solicitud

ParámetroTipoObligatorioDescripción
searchTermstringNoBusca en nombres de usuario y correos electrónicos
sortBystringNoOrdena por: amount, date, user. Predeterminado: date
sortDirectionstringNoDirección de ordenación: asc, desc. Predeterminado: desc
pagenumberNoNúmero de página (basado en 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 de modelos premium rápidos
nameNombre del miembro
emailEmail del miembro
roleRol del miembro en el equipo
hardLimitOverrideDollarsAnulación del límite de gasto personalizado (en dólares)
subscriptionCycleStartInicio del ciclo de suscripción (milisegundos desde la é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
}

Ejemplos de solicitudes

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 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 desde epoch
endDatenumberNoFecha de fin en milisegundos desde epoch
userIdnumberNoFiltrar por ID de usuario específico
pagenumberNoNúmero de página (base 1). Predeterminado: 1
pageSizenumberNoNúmero de resultados por página. Predeterminado: 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;
    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 explicados

FieldDescripció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 desde época (epoch)
modelModelo de IA usado para la solicitud
kindCategoría de uso (p. ej., “Usage-based”, “Included in Business”)
maxModeIndica si Max Mode 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)
isFreeBugbotIndica si 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",
      "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 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 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 individuales del equipo. Esto te permite controlar cuánto puede gastar cada usuario en el uso de IA dentro de tu equipo.
POST /teams/user-spend-limit
Límites de tasa: 60 solicitudes por minuto por equipo

Cuerpo de la solicitud

ParámetroTipoRequeridoDescripción
userEmailstringDirección de correo electrónico 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 establecerá el límite en $0

Respuesta

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

Respuestas de ejemplo

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

Ejemplos de solicitudes

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

API de listas de bloqueo de repositorios

Agrega repositorios y usa patrones para impedir que archivos o directorios se indexen o se utilicen como contexto para tu equipo. ---MDX_CONTENTEND---

Obtener las listas de bloqueo de repos del equipo

Obtén 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[];
  }[];
}
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 solicitud
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \
  -u YOUR_API_KEY:

Actualizar o insertar listas de bloqueo de repos

Reemplaza las listas de bloqueo de repos 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
reposarrayArreglo de objetos de lista de bloqueo de repositorios
Cada objeto de repositorio debe contener:
CampoTipoRequeridoDescripción
urlstringURL del repositorio a bloquear (en la lista de bloqueo)
patternsstring[]Arreglo 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 repos de la lista de bloqueo

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 cuando la eliminación se realiza correctamente.
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 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