L’API d’administration vous permet d’accéder par programmation aux données de votre équipe, y compris les informations sur les membres, les métriques d’utilisation et les détails des dépenses. Créez des tableaux de bord personnalisés, des outils de surveillance ou intégrez-vous aux flux de travail existants.
L’API en est à sa première version. Nous étendons les capacités en fonction des retours - faites-nous savoir quels endpoints vous avez besoin !

Authentification

Toutes les requêtes API nécessitent une authentification à l’aide d’une clé API. Seuls les administrateurs d’équipe peuvent créer et gérer les clés API. Les clés API sont liées à l’organisation, visibles par tous les administrateurs, et ne sont pas affectées par le statut du compte du créateur original.

Création d’une clé API

  1. Naviguez vers cursor.com/dashboard → onglet SettingsCursor Admin API Keys
  2. Cliquez sur Create New API Key
  3. Donnez un nom descriptif à votre clé (par exemple, “Usage Dashboard Integration”)
  4. Copiez immédiatement la clé générée - vous ne la reverrez plus
Format : key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Utilisation de votre clé API

Utilisez votre clé API comme nom d’utilisateur dans l’authentification de base : Utilisation de curl avec l’authentification de base :
curl https://api.cursor.com/{route} -u API_KEY:
Ou définissez directement l’en-tête Authorization :
Authorization: Basic {base64_encode('API_KEY:')}

URL de base

Tous les endpoints de l’API utilisent :
https://api.cursor.com

Points de terminaison

Obtenir les membres de l’équipe

Récupérer tous les membres de l’équipe et leurs détails.
GET /teams/members

Réponse

Retourne un tableau d’objets membres de l’équipe :
{
  teamMembers: {
    name: string;
    email: string;
    role: 'owner' | 'member' | 'free-owner';
  }[];
}

Exemple de réponse

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

Exemple de requête

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

Obtenir les données d’utilisation quotidienne

Récupérer des métriques d’utilisation quotidienne détaillées pour votre équipe dans une plage de dates. Fournit des informations sur les modifications de code, l’utilisation de l’assistance IA et les taux d’acceptation.
POST /teams/daily-usage-data

Corps de la requête

ParamètreTypeRequisDescription
startDatenumberOuiDate de début en millisecondes epoch
endDatenumberOuiDate de fin en millisecondes epoch
La plage de dates ne peut pas dépasser 90 jours. Effectuez plusieurs requêtes pour des périodes plus longues.

Réponse

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

Champs de réponse

ChampDescription
dateDate en millisecondes epoch
isActiveUtilisateur actif ce jour
totalLinesAddedLignes de code ajoutées
totalLinesDeletedLignes de code supprimées
acceptedLinesAddedLignes ajoutées à partir de suggestions IA acceptées
acceptedLinesDeletedLignes supprimées à partir de suggestions IA acceptées
totalAppliesOpérations d’application
totalAcceptsSuggestions acceptées
totalRejectsSuggestions rejetées
totalTabsShownComplétions par tabulation affichées
totalTabsAcceptedComplétions par tabulation acceptées
composerRequestsRequêtes Composer
chatRequestsRequêtes de chat
agentRequestsRequêtes d’agent
cmdkUsagesUtilisations de la palette de commandes (Cmd+K)
subscriptionIncludedReqsRequêtes d’abonnement
apiKeyReqsRequêtes de clé API
usageBasedReqsRequêtes à l’usage
bugbotUsagesUtilisations de détection de bugs
mostUsedModelModèle IA le plus fréquent
applyMostUsedExtensionExtension de fichier la plus utilisée pour les applications
tabMostUsedExtensionExtension de fichier la plus utilisée pour les tabulations
clientVersionVersion de Cursor
emailEmail de l’utilisateur

Exemple de réponse

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

Exemple de requête

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

Obtenir les données de dépenses

Récupérer les informations de dépenses pour le mois calendaire actuel avec recherche, tri et pagination.
POST /teams/spend

Corps de la requête

ParamètreTypeRequisDescription
searchTermstringNonRechercher dans les noms d’utilisateur et les emails
sortBystringNonTrier par : amount, date, user. Par défaut : date
sortDirectionstringNonDirection du tri : asc, desc. Par défaut : desc
pagenumberNonNuméro de page (indexé à partir de 1). Par défaut : 1
pageSizenumberNonRésultats par page

Réponse

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

Champs de la réponse

ChampDescription
spendCentsDépense totale en centimes
fastPremiumRequestsRequêtes de modèle premium rapide
nameNom du membre
emailEmail du membre
roleRôle dans l’équipe
hardLimitOverrideDollarsRemplacement de la limite de dépense personnalisée
subscriptionCycleStartDébut du cycle d’abonnement (millisecondes epoch)
totalMembersTotal des membres de l’équipe
totalPagesTotal des pages

Exemple de réponse

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

Exemples de Requêtes

Données de dépenses de base :
curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
Rechercher un utilisateur spécifique avec pagination :
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
  }'

Obtenir les Données d’Événements d’Usage

Récupérez des événements d’usage détaillés pour votre équipe avec des options complètes de filtrage, recherche et pagination. Ce point de terminaison fournit des informations granulaires sur les appels API individuels, l’utilisation des modèles, la consommation de jetons et les coûts.
POST /teams/filtered-usage-events

Corps de la Requête

ParamètreTypeRequisDescription
startDatenumberNonDate de début en millisecondes epoch
endDatenumberNonDate de fin en millisecondes epoch
userIdnumberNonFiltrer par ID d’utilisateur spécifique
pagenumberNonNuméro de page (indexé à partir de 1). Par défaut : 1
pageSizenumberNonNombre de résultats par page. Par défaut : 10
emailstringNonFiltrer par adresse email d’utilisateur

Réponse

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

Explication des Champs de Réponse

ChampDescription
totalUsageEventsCountNombre total d’événements d’usage correspondant à la requête
paginationMétadonnées de pagination pour naviguer dans les résultats
timestampHorodatage de l’événement en millisecondes epoch
modelModèle IA utilisé pour la requête
kindLabelCatégorie d’usage (ex. “Usage-based”, “Included in Business”)
maxModeSi le mode max était activé
requestsCostsCoût en unités de requête
isTokenBasedCallVrai lorsque l’événement est facturé comme un événement basé sur l’usage
tokenUsageConsommation détaillée de jetons (disponible quand isTokenBasedCall est vrai)
isFreeBugbotSi c’était un usage gratuit de bugbot
userEmailEmail de l’utilisateur qui a fait la requête
periodPlage de dates des données interrogées

Exemple de Réponse

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

Exemples de Requêtes

Obtenir tous les événements d’utilisation avec la pagination par défaut :
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
Filtrer par plage de dates et utilisateur spécifique :
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
  }'
Obtenir les événements d’utilisation pour un utilisateur spécifique avec une pagination personnalisée :
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 des Listes de Blocage de Dépôts

Ajoutez des dépôts et utilisez des motifs pour empêcher que des fichiers ou des répertoires soient indexés ou utilisés comme contexte pour votre équipe.

Obtenir les Listes de Blocage de Dépôts de l’Équipe

Récupérez toutes les listes de blocage de dépôts configurées pour votre équipe.
GET /settings/repo-blocklists/repos
Réponse
Retourne un tableau d’objets de liste de blocage de dépôts :
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Exemple de Réponse
{
  "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": ["*"]
    }
  ]
}
Exemple de Requête
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \
  -u YOUR_API_KEY:

Insérer ou Mettre à Jour les Listes de Blocage de Dépôts

Remplacez les listes de blocage de dépôts existantes pour les dépôts fournis. Note : Ce point de terminaison ne remplacera que les motifs pour les dépôts fournis. Tous les autres dépôts ne seront pas affectés.
POST /settings/repo-blocklists/repos/upsert
Corps de la Requête
ParamètreTypeRequisDescription
reposarrayOuiTableau d’objets de liste de blocage de dépôts
Chaque objet de dépôt doit contenir :
ChampTypeRequisDescription
urlstringOuiURL du dépôt à bloquer
patternsstring[]OuiTableau de motifs de fichiers à bloquer (motifs glob supportés)
Réponse
Retourne la liste mise à jour des listes de blocage de dépôts :
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Exemple de Requête
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": ["*"]
      }
    ]
  }'

Supprimer une Liste de Blocage de Dépôt

Supprimer un dépôt spécifique de la liste de blocage.
DELETE /settings/repo-blocklists/repos/:repoId
Paramètres
ParamètreTypeRequisDescription
repoIdstringOuiID de la liste de blocage de dépôt à supprimer
Réponse
Retourne 204 No Content en cas de suppression réussie.
Exemple de Requête
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \
  -u YOUR_API_KEY:

Exemples de Motifs

Motifs de liste de blocage courants :
  • * - Bloquer l’ensemble du dépôt
  • *.env - Bloquer tous les fichiers .env
  • config/* - Bloquer tous les fichiers dans le répertoire config
  • **/*.secret - Bloquer tous les fichiers .secret dans n’importe quel sous-répertoire
  • src/api/keys.ts - Bloquer un fichier spécifique