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. Crea dashboards personalizados, herramientas de monitoreo o intégrala con tus flujos de trabajo existentes.
La API está en su primera versión. Estamos ampliando 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 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. Ve a cursor.com/dashboard → pestaña SettingsCursor Admin API Keys
  2. Haz clic en Create New API Key
  3. Ponle 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: Usando curl con autenticación básica:
curl https://api.cursor.com/{route} -u API_KEY:
O configura el encabezado Authorization directamente:
Authorization: Basic {base64_encode('API_KEY:')}

URL base

Todos los endpoints de la API usan:
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 arreglo 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

Obtén métricas de uso diario detalladas para tu equipo dentro de un rango de fechas. Ofrece 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

ParameterTypeRequiredDescription
startDatenumberYesFecha de inicio en milisegundos de época
endDatenumberYesFecha de fin en milisegundos de época
El rango de fechas no puede exceder 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 la respuesta

FieldDescription
dateFecha en milisegundos de época
isActiveUsuario activo en este día
totalLinesAddedLíneas de código añadidas
totalLinesDeletedLíneas de código eliminadas
acceptedLinesAddedLíneas añadidas a partir de sugerencias de IA aceptadas
acceptedLinesDeletedLíneas eliminadas a partir 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 applies
tabMostUsedExtensionExtensión de archivo más usada para 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 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 gasto

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

Cuerpo de la solicitud

ParameterTypeRequiredDescription
searchTermstringNoBuscar en nombres de usuario y correos electrónicos
sortBystringNoOrdenar por: amount, date, user. Predeterminado: date
sortDirectionstringNoDirección de ordenación: asc, desc. Predeterminado: desc
pagenumberNoNúmero de página (comienza 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 la respuesta

FieldDescription
spendCentsGasto total en centavos
fastPremiumRequestsSolicitudes al modelo premium rápido
nameNombre del miembro
emailCorreo del miembro
roleRol en el equipo
hardLimitOverrideDollarsAnulación personalizada del límite de gasto
subscriptionCycleStartInicio del ciclo de suscripción (milisegundos desde epoch)
totalMembersTotal de miembros del equipo
totalPagesTotal de páginas

Ejemplo de respuesta

{
  "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 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 el epoch
endDatenumberNoFecha de fin en milisegundos desde el epoch
userIdnumberNoFiltrar por ID de usuario específico
pagenumberNoNúmero de página (comienza en 1). Predeterminado: 1
pageSizenumberNoResultados 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 la respuesta explicados

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 en la solicitud
kindCategoría de uso (p. ej., “Usage-based”, “Included in Business”)
maxModeIndica si Max Mode estaba habilitado
requestsCostsCosto en unidades de solicitud
isTokenBasedCallVerdadero cuando el evento se cobra como uso basado en consumo
tokenUsageConsumo detallado de tokens (disponible cuando isTokenBasedCall es true)
isFreeBugbotIndica si fue un uso gratuito de Bugbot
userEmailCorreo del usuario que realizó 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": "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",
      "kind": "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",
      "kind": "Included in 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 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 repos

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

Obtener listas de bloqueo de repos del equipo

Recupera todas las listas de bloqueo de repositorios configuradas para tu equipo.
GET /settings/repo-blocklists/repos
Respuesta
Devuelve un arreglo de objetos de listas 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:

Upsert de 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. Los demás repos no se verán afectados.
POST /settings/repo-blocklists/repos/upsert
Cuerpo de la solicitud
ParámetroTipoObligatorioDescripción
reposarrayMatriz de objetos de listas de bloqueo de repositorios
Cada objeto de repositorio debe contener:
CampoTipoObligatorioDescripción
urlstringURL del repositorio para añadir a la lista de bloqueo
patternsstring[]Matriz 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

Elimina 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 solicitud
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \
  -u YOUR_API_KEY:

Ejemplos de patrones

Patrones comunes de listas 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 un archivo específico