Die Admin-API ermöglicht dir den programmgesteuerten Zugriff auf die Daten deines Teams, einschließlich Mitgliederinformationen, Nutzungsmetriken und Ausgabendetails. Bau eigene Dashboards, Monitoring-Tools oder integrier sie in bestehende Workflows.
Die API ist in ihrer ersten Version. Wir erweitern die Funktionen basierend auf Feedback – sag uns, welche Endpunkte du brauchst!

Authentifizierung

Alle API-Requests erfordern eine Authentifizierung mit einem API-Schlüssel. Nur Team-Admins können API-Schlüssel erstellen und verwalten. API-Schlüssel sind der Organisation zugeordnet, für alle Admins sichtbar und bleiben vom Kontostatus des ursprünglichen Erstellers unberührt.

API-Schlüssel erstellen

  1. Navigiere zu cursor.com/dashboardSettings-Tab → Cursor Admin API Keys
  2. Klicke auf Create New API Key
  3. Gib deinem Schlüssel einen aussagekräftigen Namen (z. B. „Usage Dashboard Integration“)
  4. Kopiere den generierten Schlüssel sofort – du wirst ihn später nicht mehr sehen
Format: key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Deinen API-Schlüssel verwenden

Verwende deinen API-Schlüssel als Benutzernamen bei der Basic-Authentifizierung: Mit curl und Basic Auth:
curl https://api.cursor.com/{route} -u API_KEY:
Oder setze den Authorization-Header direkt:
Authorization: Basic {base64_encode('API_KEY:')}

Basis-URL

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

Endpunkte

Teammitglieder abrufen

Ruft alle Teammitglieder und deren Details ab.
GET /teams/members

Antwort

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

Beispielantwort

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

Beispielanfrage

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

Tägliche Nutzungsdaten abrufen

Ruft detaillierte tägliche Nutzungsmetriken für dein Team innerhalb eines Datumsbereichs ab. Liefert Einblicke in Code-Änderungen, Nutzung der KI-Unterstützung und Annahmeraten.
POST /teams/daily-usage-data

Request Body

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

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

Antwortfelder

FeldBeschreibung
dateDatum in Epoch-Millisekunden
isActiveNutzer an diesem Tag aktiv
totalLinesAddedHinzugefügte Codezeilen
totalLinesDeletedGelöschte Codezeilen
acceptedLinesAddedAus akzeptierten KI-Vorschlägen hinzugefügte Zeilen
acceptedLinesDeletedAus akzeptierten KI-Vorschlägen gelöschte Zeilen
totalAppliesApply-Operationen
totalAcceptsAkzeptierte Vorschläge
totalRejectsAbgelehnte Vorschläge
totalTabsShownAngezeigte Tab-Completions
totalTabsAcceptedAkzeptierte Tab-Completions
composerRequestsComposer-Anfragen
chatRequestsChat-Anfragen
agentRequestsAgent-Anfragen
cmdkUsagesNutzungen der Befehlsleiste (Cmd+K)
subscriptionIncludedReqsIm Abo enthaltene Anfragen
apiKeyReqsAPI-Key-Anfragen
usageBasedReqsNutzungsbasierte Anfragen
bugbotUsagesNutzungen der Bug-Erkennung
mostUsedModelAm häufigsten verwendetes KI-Modell
applyMostUsedExtensionAm häufigsten verwendete Dateierweiterung für Applies
tabMostUsedExtensionAm häufigsten verwendete Dateierweiterung für Tabs
clientVersionCursor-Version
emailNutzer-E-Mail

Beispielantwort

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

Ausgaben abrufen

Rufe Ausgabeninformationen für den aktuellen Kalendermonat mit Suche, Sortierung und Paginierung 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-basiert). Standard: 1
pageSizenumberNeinErgebnisse pro Seite

Antwort

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

Antwortfelder

FeldBeschreibung
spendCentsGesamtausgaben in Cent
fastPremiumRequestsAnfragen an schnelle Premium-Modelle
nameName des Mitglieds
emailE-Mail des Mitglieds
roleTeamrolle
hardLimitOverrideDollarsBenutzerdefinierte Überschreibung des Ausgabenlimits
subscriptionCycleStartBeginn des Abrechnungszyklus (Epoch-Millisekunden)
totalMembersGesamtzahl der Teammitglieder
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 Ausgabedaten:
curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
Bestimmten Benutzer mit Pagination 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

Hol dir detaillierte Nutzungsereignisse für dein Team mit umfassenden Filter-, Such- und Paginierungsoptionen. Dieser Endpoint liefert granulare Einblicke in einzelne API-Calls, Modellnutzung, Tokenverbrauch und Kosten.
POST /teams/filtered-usage-events

Request Body

ParameterTypeRequiredDescription
startDatenumberNoStartdatum in Epoch-Millisekunden
endDatenumberNoEnddatum in Epoch-Millisekunden
userIdnumberNoNach bestimmter Benutzer-ID filtern
pagenumberNoSeitennummer (1-basiert). Standard: 1
pageSizenumberNoAnzahl Ergebnisse pro Seite. Standard: 10
emailstringNoNach Benutzer-E-Mail-Adresse filtern

Response

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

Erläuterung der Response-Felder

FieldDescription
totalUsageEventsCountGesamtzahl der zur Abfrage passenden Nutzungsereignisse
paginationPaginierungsmetadaten zur Navigation der Ergebnisse
timestampEreigniszeitstempel in Epoch-Millisekunden
modelFür die Anfrage verwendetes KI-Modell
kindNutzungskategorie (z. B. „Usage-based“, „Included in Business“)
maxModeOb Max Mode aktiviert war
requestsCostsKosten in Request-Einheiten
isTokenBasedCallTrue, wenn das Ereignis nutzungsbasiert abgerechnet wird
tokenUsageDetaillierter Tokenverbrauch (verfügbar, wenn isTokenBasedCall true ist)
isFreeBugbotOb dies eine kostenlose Bugbot-Nutzung war
userEmailE-Mail der Benutzerin/des Benutzers, die/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",
      "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
  }
}

Beispielanfragen

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 bestimmtem Nutzer 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 bestimmten Nutzer mit eigener 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

Repos und Muster hinzufügen, um zu verhindern, dass Dateien oder Verzeichnisse für dein Team indexiert oder als Kontext verwendet werden.

Team-Repo-Blocklists abrufen

Alle für dein Team konfigurierten Repository-Blocklists abrufen.
GET /settings/repo-blocklists/repos
Response
Gibt ein Array von Repository-Blocklist-Objekten zurück:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Beispiel-Response
{
  "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-Request
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \
  -u YOUR_API_KEY:

Repo-Blocklists upsert

Bestehende Repository-Blocklists für die angegebenen Repos ersetzen. Hinweis: Dieser Endpoint überschreibt nur die Patterns für die angegebenen Repositories. Alle anderen Repos bleiben unverändert.
POST /settings/repo-blocklists/repos/upsert
Request Body
ParameterTypeRequiredDescription
reposarrayYesArray von Repository-Blocklist-Objekten
Jedes Repository-Objekt muss Folgendes enthalten:
FieldTypeRequiredDescription
urlstringYesRepository-URL zum Blocklisten
patternsstring[]YesArray von Dateimustern, die blockiert werden sollen (Glob-Muster werden unterstützt)
Response
Gibt die aktualisierte Liste der Repository-Blocklisten zurück:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Example 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": ["*"]
      }
    ]
  }'

Delete Repo Blocklist

Ein bestimmtes Repository aus der Blocklist entfernen.
DELETE /settings/repo-blocklists/repos/:repoId
Parameters
ParameterTypeRequiredDescription
repoIdstringYesID der zu löschenden Repository-Blocklist
Response
Gibt bei erfolgreichem Löschen 204 No Content zurück.
Example Request
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \
  -u YOUR_API_KEY:

Pattern Examples

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 - Konkrete Datei blockieren