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 primeira versão. Estamos expandindo as funcionalidades com base no feedback — conta pra gente quais endpoints tu precisa!

Autenticação

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

Criando uma chave de API

  1. Vai em cursor.com/dashboard → aba 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 na hora — tu não vai ver ela de novo
Formato: key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Usando tua API key

Usa tua API key como nome de usuário 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

Obter membros da equipe

Recupera todos os membros da equipe 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": "member"
    },
    {
      "name": "Sam",
      "email": "admin@company.com",
      "role": "owner"
    }
  ]
}

Exemplo de requisição

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

Obter dados de uso diários

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

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

CampoDescrição
dateData em milissegundos desde a é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
composerRequestsRequisições do Composer
chatRequestsRequisições de Chat
agentRequestsRequisições do Agent
cmdkUsagesUsos da paleta de comandos (Cmd+K)
subscriptionIncludedReqsRequisições incluídas na assinatura
apiKeyReqsRequisições com chave de API
usageBasedReqsRequisições pagas por uso
bugbotUsagesUsos do detector de bugs
mostUsedModelModelo de IA mais usado
applyMostUsedExtensionExtensão de arquivo mais usada em applies
tabMostUsedExtensionExtensão de arquivo mais usada em 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,
      "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 as informações de gastos do mês atual, com suporte a busca, ordenação e paginação.
POST /teams/spend

Corpo da requisição

ParâmetroTipoObrigatórioDescrição
searchTermstringNãoPesquisa em nomes de usuário e e-mails
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 (baseado em 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 do modelo premium rápido
nameNome do membro
emailE-mail do membro
rolePapel na equipe
hardLimitOverrideDollarsSubstituição personalizada do limite de gastos
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 uso/gastos:
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 da tua equipe, com opções abrangentes de filtragem, pesquisa e paginação. Este endpoint fornece insights granulares sobre chamadas individuais da 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ãoFiltra por ID específico de usuário
pagenumberNãoNúmero da página (baseado em 1). Padrão: 1
pageSizenumberNãoNúmero de resultados por página. Padrão: 10
emailstringNãoFiltra 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 da Resposta

FieldDescription
totalUsageEventsCountNúmero total de eventos de uso que correspondem à consulta
paginationMetadados de paginação para navegar pelos resultados
timestampTimestamp do evento em milissegundos desde a epoch
modelModelo de IA usado na requisição
kindCategoria de uso (ex.: “Usage-based”, “Included in Business”)
maxModeIndica se o modo máximo estava ativado
requestsCostsCusto em unidades de requisição
isTokenBasedCallTrue quando o evento é cobrado como uso baseado em tokens
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

Buscar 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 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
  }'
Buscar 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 gasto por usuário

Define limites de gasto para membros individuais da equipe. Isso permite controlar quanto cada usuário pode gastar com uso de IA na tua equipe.
POST /teams/user-spend-limit
Limite de taxa: 60 solicitaçõ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:
{
  outcome: 'success' | 'error';
  message: string;
}

Exemplos de respostas

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

Exemplos de solicitações

Definir um 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 define padrões para impedir que arquivos ou diretórios sejam indexados ou usados como contexto pela tua equipe.

Obter blocklists de repositórios da equipe

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

Fazer upsert de blocklists de repositório

Substitui as blocklists de repositório existentes para os repositórios fornecidos. Observação: este endpoint só vai sobrescrever 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órios
Cada objeto de repositório deve conter:
CampoTipoObrigatórioDescrição
urlstringSimURL do repositório a ser bloqueado (na lista de bloqueio)
patternsstring[]SimArray de padrões de arquivos a bloquear (suporta padrões glob)
Resposta
Retorna a lista atualizada de listas de bloqueio 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 bloqueio de repositório

Remove um repositório específico da lista de bloqueio.
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 quando a 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 um arquivo específico