A Admin API permite acessar programaticamente os dados da tua equipe, incluindo informações de membros, métricas de uso e detalhes de gastos. Cria dashboards personalizados, ferramentas de monitoramento ou integra com fluxos de trabalho existentes.
A API está na sua primeira versão. A gente está ampliando as capacidades com base no feedback — conta pra gente quais endpoints tu precisas!

Autenticação

Todas as solicitações à API exigem autenticação com uma chave de API. Só admins do time podem criar e gerenciar chaves de API. As chaves de API são vinculadas à organização, visíveis para todos os admins e não são afetadas pelo status da conta do criador original.

Criando uma chave de API

  1. Acessa cursor.com/dashboard → aba SettingsCursor Admin API Keys
  2. Clica em Create New API Key
  3. Dá um nome descritivo pra tua chave (ex.: “Integração com o Usage Dashboard”)
  4. Copia a chave gerada na hora — tu não vai ver ela de novo
Formato: key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Usando tua chave de API

Usa tua chave de API como o username na autenticação básica: Usando curl com basic auth:
curl https://api.cursor.com/{route} -u API_KEY:
Ou define o header Authorization diretamente:
Authorization: Basic {base64_encode('API_KEY:')}

URL base

Todos os endpoints da API utilizam:
https://api.cursor.com

Endpoints

Get Team Members

Recupera todos os membros da equipe e seus detalhes.
GET /teams/members

Response

Retorna um array de objetos de membros da equipe:
{
  teamMembers: {
    name: string;
    email: string;
    role: 'owner' | 'member' | 'free-owner';
  }[];
}

Example Response

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

Example Request

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

Get Daily Usage Data

Recupera métricas detalhadas de uso diário da tua equipe em um intervalo de datas. Traz insights sobre edições de código, uso de assistência de IA e taxas de aceitação.
POST /teams/daily-usage-data

Request Body

ParameterTypeRequiredDescription
startDatenumberYesData de início em milissegundos de epoch
endDatenumberYesData de término em milissegundos de epoch
O intervalo de datas não pode exceder 90 dias. Faz várias solicitações para períodos maiores.

Response

{
  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;
  };
}

Response Fields

FieldDescription
dateData em milissegundos de epoch
isActiveUsuário ativo nesse dia
totalLinesAddedLinhas de código adicionadas
totalLinesDeletedLinhas de código removidas
acceptedLinesAddedLinhas adicionadas a partir de sugestões de IA aceitas
acceptedLinesDeletedLinhas removidas a partir de sugestões de IA aceitas
totalAppliesOperações de apply
totalAcceptsSugestões aceitas
totalRejectsSugestões rejeitadas
totalTabsShownCompletações de tab exibidas
totalTabsAcceptedCompletações de tab aceitas
composerRequestsSolicitações do Composer
chatRequestsSolicitações de chat
agentRequestsSolicitações do agent
cmdkUsagesUsos da paleta de comandos (Cmd+K)
subscriptionIncludedReqsSolicitações incluídas na assinatura
apiKeyReqsSolicitações com chave de API
usageBasedReqsSolicitações por uso
bugbotUsagesUsos do bug detection
mostUsedModelModelo de IA mais utilizado
applyMostUsedExtensionExtensão de arquivo mais usada para applies
tabMostUsedExtensionExtensão de arquivo mais usada para tabs
clientVersionVersão do Cursor
emailE-mail do usuário

Example Response

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

Exemplo de requisição

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
  }'

Obter dados de gastos

Recupera informações de gastos do mês corrente, com busca, ordenação e paginação.
POST /teams/spend

Corpo da requisição

ParâmetroTipoObrigatórioDescrição
searchTermstringNãoBusca em nomes de usuários e e-mails
sortBystringNãoOrdenar por: amount, date, user. Padrão: date
sortDirectionstringNãoDireção de ordenação: asc, desc. Padrão: desc
pagenumberNãoNúmero da página (indexado a partir de 1). Padrão: 1
pageSizenumberNãoResultados por página

Resposta

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

Campos da resposta

CampoDescrição
spendCentsGasto total em centavos
fastPremiumRequestsSolicitações ao modelo premium rápido
nameNome do membro
emailE-mail do membro
roleFunção na equipe
hardLimitOverrideDollarsSubstituição de limite de gasto personalizado
subscriptionCycleStartInício do ciclo de assinatura (epoch em milissegundos)
totalMembersTotal de membros da equipe
totalPagesTotal de páginas

Exemplo de resposta

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

Exemplos de requisições

Dados básicos de gastos:
curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
Buscar usuário específico com paginação:
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
  }'

Obter dados de eventos de uso

Recupera eventos de uso detalhados da tua equipe com opções abrangentes de filtro, busca e paginação. Esse endpoint fornece insights granulares sobre chamadas individuais de API, uso de modelos, consumo de tokens e custos.
POST /teams/filtered-usage-events

Corpo da requisição

ParâmetroTipoObrigatórioDescrição
startDatenumberNãoData inicial em milissegundos desde a época (epoch)
endDatenumberNãoData final em milissegundos desde a época (epoch)
userIdnumberNãoFiltrar por ID específico de usuário
pagenumberNãoNúmero da página (indexado a partir de 1). Padrão: 1
pageSizenumberNãoNúmero de resultados por página. Padrão: 10
emailstringNãoFiltrar por e-mail do usuário

Resposta

{
  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 da resposta explicados

CampoDescrição
totalUsageEventsCountNúmero total de eventos de uso que correspondem à consulta
paginationMetadados de paginação para navegação nos resultados
timestampCarimbo de data/hora do evento em milissegundos desde a época (epoch)
modelModelo de IA usado na requisição
kindCategoria de uso (por exemplo, “Usage-based”, “Included in Business”)
maxModeIndica se o max mode estava ativado
requestsCostsCusto em unidades de requisição
isTokenBasedCallVerdadeiro quando o evento é cobrado como uso baseado em consumo
tokenUsageConsumo detalhado de tokens (disponível quando isTokenBasedCall é true)
isFreeBugbotIndica se foi um uso gratuito do bugbot
userEmailE-mail do usuário que fez a requisição
periodIntervalo de datas dos dados consultados

Exemplo de resposta

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

Exemplos de requisições

Listar todos os eventos de uso com a paginação padrão:
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 datas e usuário 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
  }'
Listar eventos de uso de um usuário específico com paginação 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 bloqueios de repositórios

Adiciona repositórios e padrões para impedir que arquivos ou diretórios sejam indexados ou usados como contexto para o teu time.

Obter bloqueios de repositórios do time

Recupera todos os bloqueios de repositórios configurados para o teu time.
GET /settings/repo-blocklists/repos
Resposta
Retorna um array de objetos de bloqueio de repositórios:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Exemplo de resposta
{
  "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": ["*"]
    }
  ]
}
Exemplo de requisição
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \
  -u YOUR_API_KEY:

Upsert de bloqueios de repositórios

Substitui os bloqueios existentes para os repositórios fornecidos. Observação: este endpoint só sobrescreve os padrões dos repositórios informados. Todos os outros repositórios permanecem inalterados.
POST /settings/repo-blocklists/repos/upsert
Corpo da requisição
ParâmetroTipoObrigatórioDescrição
reposarraySimArray de objetos de blocklist de repositórios
Cada objeto de repositório deve conter:
CampoTipoObrigatórioDescrição
urlstringSimURL do repositório a incluir na blocklist
patternsstring[]SimArray de padrões de arquivos a bloquear (suporte a glob patterns)
Resposta
Retorna a lista atualizada de blocklists de repositório:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Exemplo de requisição
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": ["*"]
      }
    ]
  }'

Excluir blocklist de repositório

Remove um repositório específico da blocklist.
DELETE /settings/repo-blocklists/repos/:repoId
Parâmetros
ParâmetroTipoObrigatórioDescrição
repoIdstringSimID da blocklist do repositório a excluir
Resposta
Retorna 204 No Content em caso de exclusão bem-sucedida.
Exemplo de requisição
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \
  -u YOUR_API_KEY:

Exemplos de padrões

Padrões comuns de blocklist:
  • * - Bloquear o repositório inteiro
  • *.env - Bloquear todos os arquivos .env
  • config/* - Bloquear todos os arquivos no diretório config
  • **/*.secret - Bloquear todos os arquivos .secret em qualquer subdiretório
  • src/api/keys.ts - Bloquear arquivo específico