A API de Administração permite que você acesse programaticamente os dados da sua equipe, incluindo informações de membros, métricas de uso e detalhes de gastos. Construa dashboards personalizados, ferramentas de monitoramento ou integre com fluxos de trabalho existentes.
A API está em sua primeira versão. Estamos expandindo as capacidades com base no feedback - nos informe quais endpoints você precisa!

Autenticação

Todas as requisições da API requerem autenticação usando uma chave de API. Apenas administradores da equipe podem criar e gerenciar chaves de API. As chaves de API estão vinculadas à organização, são visíveis por todos os administradores e não são afetadas pelo status da conta do criador original.

Criando uma Chave de API

  1. Navegue para cursor.com/dashboard → aba SettingsCursor Admin API Keys
  2. Clique em Create New API Key
  3. Dê um nome descritivo para sua chave (ex: “Integração do Dashboard de Uso”)
  4. Copie a chave gerada imediatamente - você não a verá novamente
Formato: key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Usando Sua Chave de API

Use sua chave de API como nome de usuário na autenticação básica: Usando curl com autenticação básica:
curl https://api.cursor.com/{route} -u API_KEY:
Ou defina o cabeçalho Authorization diretamente:
Authorization: Basic {base64_encode('API_KEY:')}

URL Base

Todos os endpoints da API usam:
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ário

Recupera métricas detalhadas de uso diário para sua equipe dentro de 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 epoch
endDatenumberSimData de fim em milissegundos epoch
O intervalo de datas não pode exceder 90 dias. Faça múltiplas 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 da Resposta

CampoDescrição
dateData em milissegundos epoch
isActiveUsuário ativo neste dia
totalLinesAddedLinhas de código adicionadas
totalLinesDeletedLinhas de código deletadas
acceptedLinesAddedLinhas adicionadas de sugestões de IA aceitas
acceptedLinesDeletedLinhas deletadas de sugestões de IA aceitas
totalAppliesOperações de aplicação
totalAcceptsSugestões aceitas
totalRejectsSugestões rejeitadas
totalTabsShownCompletações de tab mostradas
totalTabsAcceptedCompletações de tab aceitas
composerRequestsRequisições do Composer
chatRequestsRequisições de chat
agentRequestsRequisições de agente
cmdkUsagesUsos da paleta de comandos (Cmd+K)
subscriptionIncludedReqsRequisições da assinatura
apiKeyReqsRequisições de chave API
usageBasedReqsRequisições de pagamento por uso
bugbotUsagesUsos de detecção de bugs
mostUsedModelModelo de IA mais frequente
applyMostUsedExtensionExtensão de arquivo mais usada para aplicações
tabMostUsedExtensionExtensão de arquivo mais usada para tabs
clientVersionVersão do Cursor
emailEmail 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

Recupere informações de gastos para o mês calendário atual com busca, ordenação e paginação.
POST /teams/spend

Corpo da Requisição

ParâmetroTipoObrigatórioDescrição
searchTermstringNãoBuscar em nomes de usuários 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 (indexada 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
fastPremiumRequestsRequisições de modelo premium rápido
nameNome do membro
emailEmail do membro
roleFunção na equipe
hardLimitOverrideDollarsSubstituição de limite de gastos personalizado
subscriptionCycleStartInício do ciclo de assinatura (milissegundos epoch)
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

Recupere eventos de uso detalhados para sua equipe com opções abrangentes de filtragem, busca 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 epoch
endDatenumberNãoData de fim em milissegundos epoch
userIdnumberNãoFiltrar por ID de usuário específico
pagenumberNãoNúmero da página (indexada em 1). Padrão: 1
pageSizenumberNãoNúmero de resultados por página. Padrão: 10
emailstringNãoFiltrar por endereço de email do usuário

Resposta

{
  totalUsageEventsCount: number;
  pagination: {
    numPages: number;
    currentPage: number;
    pageSize: number;
    hasNextPage: boolean;
    hasPreviousPage: boolean;
  };
  usageEvents: {
    timestamp: string;
    model: string;
    kindLabel: 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 navegar pelos resultados
timestampTimestamp do evento em milissegundos epoch
modelModelo de IA usado para a requisição
kindLabelCategoria de uso (ex: “Usage-based”, “Included in Business”)
maxModeSe o modo máximo estava habilitado
requestsCostsCusto em unidades de requisição
isTokenBasedCallVerdadeiro quando o evento é cobrado como um evento baseado em uso
tokenUsageConsumo detalhado de tokens (disponível quando isTokenBasedCall é verdadeiro)
isFreeBugbotSe este foi um uso gratuito do bugbot
userEmailEmail 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",
      "kindLabel": "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",
      "kindLabel": "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",
      "kindLabel": "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

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 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
  }'
Obter eventos de uso para 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 Listas de Bloqueio de Repositórios

Adicione repositórios e use padrões para impedir que arquivos ou diretórios sejam indexados ou usados como contexto para sua equipe.

Obter Listas de Bloqueio de Repositórios da Equipe

Recupere todas as listas de bloqueio de repositórios configuradas para sua equipe.
GET /settings/repo-blocklists/repos
Resposta
Retorna um array de objetos de lista 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:

Inserir ou Atualizar Listas de Bloqueio de Repositórios

Substitua as listas de bloqueio de repositórios existentes para os repositórios fornecidos. Nota: Este endpoint apenas sobrescreverá os padrões para os 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 para adicionar à lista de bloqueio
patternsstring[]SimArray de padrões de arquivo para bloquear (padrões glob suportados)
Resposta
Retorna a lista atualizada de listas de bloqueio de repositórios:
{
  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 Lista de 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 de repositório para 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 lista de bloqueio:
  • * - Bloquear 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