Die Admin API ermöglicht es Ihnen, programmatisch auf die Daten Ihres Teams zuzugreifen, einschließlich Mitgliederinformationen, Nutzungsmetriken und Ausgabendetails. Erstellen Sie benutzerdefinierte Dashboards, Überwachungstools oder integrieren Sie sie in bestehende Arbeitsabläufe.
Die API befindet sich in ihrer ersten Version. Wir erweitern die Funktionen basierend auf Feedback - lassen Sie uns wissen, welche Endpunkte Sie benötigen!

Authentifizierung

Alle API-Anfragen erfordern eine Authentifizierung mit einem API-Schlüssel. Nur Team-Administratoren können API-Schlüssel erstellen und verwalten. API-Schlüssel sind an die Organisation gebunden, für alle Administratoren einsehbar und werden nicht vom Kontostatus des ursprünglichen Erstellers beeinflusst.

Erstellen eines API-Schlüssels

  1. Navigieren Sie zu cursor.com/dashboardSettings Tab → Cursor Admin API Keys
  2. Klicken Sie auf Create New API Key
  3. Geben Sie Ihrem Schlüssel einen aussagekräftigen Namen (z.B. “Usage Dashboard Integration”)
  4. Kopieren Sie den generierten Schlüssel sofort - Sie werden ihn nicht wieder sehen
Format: key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Verwendung Ihres API-Schlüssels

Verwenden Sie Ihren API-Schlüssel als Benutzername in der Basic-Authentifizierung: Verwendung von curl mit Basic Auth:
curl https://api.cursor.com/{route} -u API_KEY:
Oder setzen Sie den Authorization-Header direkt:
Authorization: Basic {base64_encode('API_KEY:')}

Basis-URL

Alle API-Endpunkte verwenden:
https://api.cursor.com

Endpunkte

Team-Mitglieder abrufen

Alle Team-Mitglieder und ihre Details abrufen.
GET /teams/members

Antwort

Gibt ein Array von Team-Mitglieder-Objekten zurück:
{
  teamMembers: {
    name: string;
    email: string;
    role: 'owner' | 'member' | 'free-owner';
  }[];
}

Beispiel-Antwort

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

Beispiel-Anfrage

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

Tägliche Nutzungsdaten abrufen

Detaillierte tägliche Nutzungsmetriken für Ihr Team innerhalb eines Datumsbereichs abrufen. Bietet Einblicke in Code-Bearbeitungen, KI-Assistenz-Nutzung und Akzeptanzraten.
POST /teams/daily-usage-data

Request Body

ParameterTypErforderlichBeschreibung
startDatenumberJaStartdatum in Epoch-Millisekunden
endDatenumberJaEnddatum in Epoch-Millisekunden
Der Datumsbereich darf 90 Tage nicht überschreiten. Stellen Sie mehrere Anfragen für längere Zeiträume.

Antwort

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

Antwort-Felder

FeldBeschreibung
dateDatum in Epoch-Millisekunden
isActiveBenutzer an diesem Tag aktiv
totalLinesAddedHinzugefügte Code-Zeilen
totalLinesDeletedGelöschte Code-Zeilen
acceptedLinesAddedHinzugefügte Zeilen aus akzeptierten KI-Vorschlägen
acceptedLinesDeletedGelöschte Zeilen aus akzeptierten KI-Vorschlägen
totalAppliesApply-Operationen
totalAcceptsAkzeptierte Vorschläge
totalRejectsAbgelehnte Vorschläge
totalTabsShownAngezeigte Tab-Vervollständigungen
totalTabsAcceptedAkzeptierte Tab-Vervollständigungen
composerRequestsComposer-Anfragen
chatRequestsChat-Anfragen
agentRequestsAgent-Anfragen
cmdkUsagesBefehlspalette (Cmd+K) Verwendungen
subscriptionIncludedReqsAbonnement-Anfragen
apiKeyReqsAPI-Schlüssel-Anfragen
usageBasedReqsPay-per-Use-Anfragen
bugbotUsagesBug-Erkennungs-Verwendungen
mostUsedModelHäufigstes KI-Modell
applyMostUsedExtensionMeist verwendete Dateierweiterung für Applies
tabMostUsedExtensionMeist verwendete Dateierweiterung für Tabs
clientVersionCursor-Version
emailBenutzer-E-Mail

Beispiel-Antwort

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

Beispielanfrage

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

Ausgabendaten abrufen

Ruft Ausgabeninformationen für den aktuellen Kalendermonat mit Such-, Sortier- und Paginierungsfunktionen ab.
POST /teams/spend

Request Body

ParameterTypErforderlichBeschreibung
searchTermstringNeinSuche in Benutzernamen und E-Mails
sortBystringNeinSortieren nach: amount, date, user. Standard: date
sortDirectionstringNeinSortierrichtung: asc, desc. Standard: desc
pagenumberNeinSeitennummer (1-indiziert). Standard: 1
pageSizenumberNeinErgebnisse pro Seite

Response

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

Response-Felder

FeldBeschreibung
spendCentsGesamtausgaben in Cent
fastPremiumRequestsSchnelle Premium-Modell-Anfragen
nameName des Mitglieds
emailE-Mail des Mitglieds
roleTeam-Rolle
hardLimitOverrideDollarsBenutzerdefinierte Ausgabenlimit-Überschreibung
subscriptionCycleStartStart des Abonnementzyklus (Epoch-Millisekunden)
totalMembersGesamtzahl der Team-Mitglieder
totalPagesGesamtzahl der Seiten

Beispielantwort

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

Beispielanfragen

Grundlegende Ausgabendaten:
curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
Bestimmten Benutzer mit Paginierung suchen:
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
  }'

Nutzungsereignisdaten abrufen

Rufen Sie detaillierte Nutzungsereignisse für Ihr Team mit umfassenden Filter-, Such- und Paginierungsoptionen ab. Dieser Endpunkt bietet granulare Einblicke in einzelne API-Aufrufe, Modellnutzung, Token-Verbrauch und Kosten.
POST /teams/filtered-usage-events

Request Body

ParameterTypErforderlichBeschreibung
startDatenumberNeinStartdatum in Epoch-Millisekunden
endDatenumberNeinEnddatum in Epoch-Millisekunden
userIdnumberNeinNach bestimmter Benutzer-ID filtern
pagenumberNeinSeitennummer (1-indiziert). Standard: 1
pageSizenumberNeinAnzahl der Ergebnisse pro Seite. Standard: 10
emailstringNeinNach Benutzer-E-Mail-Adresse filtern

Response

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

Response-Felder erklärt

FeldBeschreibung
totalUsageEventsCountGesamtanzahl der Nutzungsereignisse, die der Abfrage entsprechen
paginationPaginierungs-Metadaten zur Navigation durch die Ergebnisse
timestampEreignis-Zeitstempel in Epoch-Millisekunden
modelFür die Anfrage verwendetes KI-Modell
kindLabelNutzungskategorie (z.B. “Usage-based”, “Included in Business”)
maxModeOb der Max-Modus aktiviert war
requestsCostsKosten in Anfrage-Einheiten
isTokenBasedCallTrue, wenn das Ereignis als nutzungsbasiertes Ereignis abgerechnet wird
tokenUsageDetaillierter Token-Verbrauch (verfügbar wenn isTokenBasedCall true ist)
isFreeBugbotOb dies eine kostenlose Bugbot-Nutzung war
userEmailE-Mail des Benutzers, der die Anfrage gestellt hat
periodDatumsbereich der abgefragten Daten

Beispiel-Response

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

Beispiel-Anfragen

Alle Nutzungsereignisse mit Standard-Paginierung abrufen:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
Nach Datumsbereich und spezifischem Benutzer filtern:
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
  }'
Nutzungsereignisse für einen spezifischen Benutzer mit benutzerdefinierter Paginierung abrufen:
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
  }'

Repo Blocklists API

Fügen Sie Repositories und Nutzungsmuster hinzu, um zu verhindern, dass Dateien oder Verzeichnisse indiziert oder als Kontext für Ihr Team verwendet werden.

Team Repo Blocklists abrufen

Rufen Sie alle für Ihr Team konfigurierten Repository-Blocklists ab.
GET /settings/repo-blocklists/repos
Antwort
Gibt ein Array von Repository-Blocklist-Objekten zurück:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Beispiel-Antwort
{
  "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": ["*"]
    }
  ]
}
Beispiel-Anfrage
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \
  -u YOUR_API_KEY:

Repo Blocklists einfügen/aktualisieren

Ersetzen Sie bestehende Repository-Blocklists für die bereitgestellten Repos. Hinweis: Dieser Endpunkt überschreibt nur die Muster für die bereitgestellten Repositories. Alle anderen Repos bleiben unverändert.
POST /settings/repo-blocklists/repos/upsert
Request Body
ParameterTypErforderlichBeschreibung
reposarrayJaArray von Repository-Blocklist-Objekten
Jedes Repository-Objekt muss enthalten:
FeldTypErforderlichBeschreibung
urlstringJaRepository-URL für die Blocklist
patternsstring[]JaArray von Dateimustern zum Blockieren (Glob-Muster werden unterstützt)
Response
Gibt die aktualisierte Liste der Repository-Blocklists zurück:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Beispiel-Request
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": ["*"]
      }
    ]
  }'

Repository-Blocklist löschen

Entfernt ein spezifisches Repository aus der Blocklist.
DELETE /settings/repo-blocklists/repos/:repoId
Parameter
ParameterTypErforderlichBeschreibung
repoIdstringJaID der zu löschenden Repository-Blocklist
Response
Gibt 204 No Content bei erfolgreichem Löschen zurück.
Beispiel-Request
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \
  -u YOUR_API_KEY:

Muster-Beispiele

Häufige Blocklist-Muster:
  • * - Gesamtes Repository blockieren
  • *.env - Alle .env-Dateien blockieren
  • config/* - Alle Dateien im config-Verzeichnis blockieren
  • **/*.secret - Alle .secret-Dateien in beliebigen Unterverzeichnissen blockieren
  • src/api/keys.ts - Spezifische Datei blockieren