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. Estamos expandindo as capacidades com base no feedback — diz pra gente quais endpoints tu precisa!

Autenticação

Todas as requisições à API exigem autenticação com uma chave de API. Só admins da equipe 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. Navega até cursor.com/dashboard → guia SettingsCursor Admin API Keys
  2. Clica em Create New API Key
  3. Dá um nome descritivo pra tua chave (ex.: “Usage Dashboard Integration”)
  4. Copia a chave gerada imediatamente — ela não vai aparecer de novo
Formato: key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Usando tua API key

Usa tua API key como o username na autenticação básica: Usando curl com autenticação básica:
curl https://api.cursor.com/{route} -u CHAVE_DE_API:
Ou define o cabeçalho Authorization diretamente:
Authorization: Basic {base64_encode('CHAVE_DA_API:')}

URL base

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

Endpoints

Get Team Members

Recupera todos os membros do time e seus detalhes.
GET /teams/members

Resposta

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

Exemplo de resposta

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

Exemplo de requisição

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

Obter dados de uso diário

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

Corpo da requisição

ParâmetroTipoObrigatórioDescrição
startDatenumberSimData de início em milissegundos desde a época (epoch)
endDatenumberSimData de término em milissegundos desde a época (epoch)
O intervalo de datas não pode exceder 90 dias. Faz várias requisições para períodos mais longos.

Resposta

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

FieldDescription
dateData em milissegundos de época (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 (pay-per-use)
bugbotUsagesUsos do detector de bugs
mostUsedModelModelo de IA mais usado
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

Exemplo de resposta

{
  "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,
      "modeloMaisUsado": "gpt-4",
      "applyMostUsedExtension": ".tsx",
      "tabMostUsedExtension": ".ts",
      "versaoDoCliente": "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,
      "modeloMaisUsado": "claude-3-opus",
      "applyMostUsedExtension": ".py",
      "tabMostUsedExtension": ".py",
      "versaoDoCliente": "0.25.1",
      "email": "developer@company.com"
    }
  ],
  "period": {
    "startDate": 1710720000000,
    "endDate": 1710892800000
  }
}

Exemplo de solicitação

curl -X POST https://api.cursor.com/teams/daily-usage-data \
  -u SUA_CHAVE_DE_API: \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": 1710720000000,
    "endDate": 1710892800000
  }'

Obter dados de gastos

Recupera os dados de gastos do mês corrente, com suporte a busca, ordenação e paginação.
POST /teams/spend

Corpo da requisição

ParâmetroTipoObrigatórioDescrição
searchTermstringNãoBusca em nomes de usuário e emails
sortBystringNãoOrdenar por: amount, date, user. Padrão: date
sortDirectionstringNãoDireção da 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 para o modelo premium rápido
nameNome do membro
emailE-mail do membro
roleFunção na equipe
hardLimitOverrideDollarsSubstituição do limite de gasto (personalizado)
subscriptionCycleStartInício do ciclo da 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 solicitações

Dados básicos de despesas:
curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
Buscar um 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 pro teu time, com opções completas de filtragem, busca e paginação. Este 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 de início em milissegundos desde a época (epoch)
endDatenumberNãoData de término em milissegundos desde a época (epoch)
userIdnumberNãoFiltrar por ID de usuário específico
pagenumberNãoNúmero da página (baseado em 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;
  };
}

Explicação dos Campos de Resposta

CampoDescrição
totalUsageEventsCountNúmero total de eventos de uso que atendem à consulta
paginationMetadados de paginação para navegar pelos resultados
timestampTimestamp do evento em milissegundos desde a época (epoch)
modelModelo de IA usado na requisição
kindCategoria de uso (ex.: “Usage-based”, “Included in Business”)
maxModeIndica se o modo máximo estava habilitado
requestsCostsCusto em unidades de requisição
isTokenBasedCallTrue quando o evento é cobrado como baseado em uso
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": "Cobrado por 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": "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": "Incluído no plano Business"
      "maxMode": true,
      "requestsCosts": 1.4,
      "isTokenBasedCall": false,
      "isFreeBugbot": false,
      "userEmail": "admin@company.com"
    }
  ],
  "period": {
    "startDate": 1748411762359,
    "endDate": 1751003762359
  }
}

Exemplos de solicitações

Obter todos os eventos de uso com 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 período e usuário específico:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u SUA_CHAVE_DA_API: \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": 1748411762359,
    "endDate": 1751003762359,
    "email": "developer@company.com",
    "page": 1,
    "pageSize": 25
  }'
Obtenha 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
  }'

Definir limite de gastos por usuário

Define limites de gastos para membros específicos da equipe. Isso permite controlar quanto cada usuário pode gastar com o uso de IA na tua equipe.
POST /teams/user-spend-limit
Limite de taxa: 60 requisições por minuto por equipe

Corpo da requisição

ParâmetroTipoObrigatórioDescrição
userEmailstringSimEndereço de e-mail do membro da equipe
spendLimitDollarsnumberSimLimite de gastos em dólares (apenas números inteiros, sem decimais).
  • o usuário já precisa ser membro da sua equipe
  • apenas valores inteiros são aceitos (sem valores decimais)
  • definir spendLimitDollars como 0 define o limite como US$ 0

Resposta

Retorna uma resposta padronizada indicando sucesso ou erro:
{
  resultado: 'sucesso' | 'erro';
  mensagem: string;
}

Exemplos de respostas

Limite definido com sucesso:
{
  "outcome": "success",
  "message": "Limite de gastos definido em US$ 100 para o usuário developer@company.com"
}
Resposta de erro:
{
  "outcome": "error",
  "message": "Formato de email inválido"
}

Exemplos de solicitações

Definir limite de gastos:
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 bloqueio de repositórios

Adiciona repositórios e usa padrões para impedir que arquivos ou diretórios sejam indexados ou usados como contexto pela tua equipe.

Obter listas de bloqueio de repositórios da equipe

Recupera todas as listas de bloqueio de repositórios configuradas para tua equipe.
GET /settings/repo-blocklists/repos
Resposta
Retorna um array de objetos de lista de bloqueio de repositório:
{
  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 solicitação
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \
  -u SUA_CHAVE_DE_API:

Fazer upsert de blocklists de repositório

Substitui as blocklists de repositório existentes para os repositórios fornecidos. Observação: este endpoint vai sobrescrever apenas os padrões dos repositórios fornecidos. Todos os outros repositórios não serão afetados.
POST /settings/repo-blocklists/repos/upsert
Corpo da requisição
ParâmetroTipoObrigatórioDescrição
reposarraySimArray de objetos de lista de bloqueio de repositório
Cada objeto de repositório deve conter:
CampoTipoObrigatórioDescrição
urlstringSimURL do repositório a ser bloqueado na lista
patternsstring[]SimArray de padrões de arquivo a bloquear (suporta padrões glob)
Resposta
Retorna a lista atualizada de bloqueios de repositório:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Exemplo de solicitação
curl -X POST https://api.cursor.com/settings/repo-blocklists/repos/upsert \
  -u SUA_CHAVE_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": ["*"]
      }
    ]
  }'

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 lista de bloqueio do repositório a ser excluída
Resposta
Retorna 204 No Content após a exclusão bem-sucedida.
Exemplo de solicitação
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \
  -u SUA_CHAVE_DA_API:

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 um arquivo específico