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

Authentifizierung

Alle API-Anfragen erfordern eine Authentifizierung mit einem API-Schlüssel. Nur Team-Admins können API-Schlüssel erstellen und verwalten. API-Schlüssel sind an die Organisation gebunden, für alle Admins sichtbar und bleiben vom Kontostatus der ursprünglichen Ersteller:in unberührt.

Erstellen eines API-Schlüssels

  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

Verwendung deines API-Schlüssels

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

Basis-URL

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

Endpoints

Teammitglieder abrufen

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

Response

Gibt ein Array von Teammitgliedern 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"
    }
  ]
}

Beispielanfrage

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

Tägliche Nutzungsdaten abrufen

Hol dir detaillierte tägliche Nutzungsmetriken für dein Team in einem Datumsbereich. Liefert Einblicke in Code-Änderungen, die Nutzung der KI-Unterstützung und Akzeptanzraten.
POST /teams/daily-usage-data

Request-Body

ParameterTypErforderlichBeschreibung
startDatenumberJaStartdatum in Millisekunden seit der Unix-Epoche
endDatenumberJaEnddatum in Millisekunden seit der Unix-Epoche
Der Datumsbereich darf 90 Tage nicht überschreiten. Für längere Zeiträume mehrere Requests senden.

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-Vervollständigungen
totalTabsAcceptedAkzeptierte Tab-Vervollständigungen
composerRequestsComposer-Anfragen
chatRequestsChat-Anfragen
agentRequestsAgent-Anfragen
cmdkUsagesNutzungen der Befehlspalette (Cmd+K)
subscriptionIncludedReqsIm Abo enthaltene Anfragen
apiKeyReqsAPI-Schlüssel-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

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

Ruf Ausgaben für den aktuellen Kalendermonat mit Suche, Sortierung und Paginierung ab.
POST /teams/spend

Request-Body

ParameterTypErforderlichBeschreibung
searchTermstringNeinSuche in Benutzernamen und E-Mail-Adressen
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 das schnelle Premiummodell
nameName des Mitglieds
emailE‑Mail des Mitglieds
roleTeamrolle
hardLimitOverrideDollarsBenutzerdefinierte Überschreibung des Ausgabenlimits
subscriptionCycleStartBeginn des Abrechnungszyklus (Epoch-Millisekunden)
totalMembersAnzahl der Teammitglieder insgesamt
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

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

Ruf detaillierte Nutzungsereignisse für dein Team mit umfassenden Optionen für Filter, Suche und Paginierung ab. Dieser Endpoint liefert granulare Einblicke in einzelne API-Aufrufe, Modellauslastung, Token-Verbrauch und Kosten.
POST /teams/filtered-usage-events

Request Body

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

Antwort

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

Erklärung der Response-Felder

FieldDescription
totalUsageEventsCountGesamtzahl der Nutzungsereignisse, die der Abfrage entsprechen
paginationPaginierungs-Metadaten zur Navigation in den Ergebnissen
timestampEreigniszeitstempel in Unix-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 als nutzungsbasiertes Ereignis abgerechnet wird
tokenUsageDetaillierte Token-Nutzung (verfügbar, wenn isTokenBasedCall true ist)
isFreeBugbotOb dies eine kostenlose Bugbot-Nutzung war
userEmailE-Mail der Person, die die Anfrage gestellt hat
periodDatumsbereich der abgefragten Daten

Beispielantwort

{
  "totalUsageEventsCount": 113,
  "pagination": {
    "numPages": 12,
    "currentPage": 1,
    "pageSize": 10,
    "hasNextPage": true,
    "hasPreviousPage": false
  },
  "usageEvents": [
    {
      "timestamp": "1750979225854",
      "model": "claude-4-opus",
      "kind": "Nutzungsbasiert",
      "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": "Nutzungsbasiert",
      "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": "In Business enthalten",
      "maxMode": true,
      "requestsCosts": 1.4,
      "isTokenBasedCall": false,
      "isFreeBugbot": false,
      "userEmail": "admin@company.com"
    }
  ],
  "period": {
    "startDate": 1748411762359,
    "endDate": 1751003762359
  }
}

Beispielanfragen

Alle Nutzungsevents 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 User 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
  }'
Nutzungsevents für einen bestimmten User 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
  }'

Ausgabenlimit für Nutzer festlegen

Lege Ausgabenlimits für einzelne Teammitglieder fest. So kannst du steuern, wie viel jede:r Nutzer:in für die AI-Nutzung in deinem Team ausgeben kann.
POST /teams/user-spend-limit
Rate Limit: 60 Anfragen pro Minute und Team

Request Body

ParameterTypErforderlichBeschreibung
userEmailstringJaE-Mail-Adresse des Teammitglieds
spendLimitDollarsnumberJaAusgabenlimit in US-Dollar (nur ganze Zahlen, keine Dezimalstellen).
  • Der User muss bereits Mitglied deines Teams sein
  • Es werden nur ganze Zahlen akzeptiert (keine Dezimalbeträge)
  • Das Setzen von spendLimitDollars auf 0 setzt das Limit auf $0

Antwort

Gibt eine standardisierte Antwort zurück, die Erfolg oder Fehler signalisiert:
{
  outcome: 'success' | 'error';
  message: string;
}

Beispielantworten

Limit erfolgreich festgelegt:
{
  "outcome": "success",
  "message": "Ausgabenlimit von $100 für Benutzer developer@company.com festgelegt"
}
Fehlerantwort:
{
  "outcome": "error",
  "message": "Ungültiges E-Mail-Format"
}

Beispielanfragen

Ausgabenlimit festlegen:
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
  }'

Repo-Blocklists-API

Füge Repositories und Muster hinzu, um zu verhindern, dass Dateien oder Verzeichnisse für dein Team indexiert oder als Kontext verwendet werden.

Team-Repo-Blocklists abrufen

Ruf alle Repository-Blocklists ab, die für dein Team konfiguriert sind.
GET /settings/repo-blocklists/repos
Antwort
Gibt ein Array von Repository-Blocklist-Objekten zurück:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Beispielantwort
{
  "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": ["*"]
    }
  ]
}
Beispielanfrage
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \
  -u YOUR_API_KEY:

Repo-Blocklists upserten

Ersetze bestehende Repository-Blocklists für die angegebenen Repos. 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
ParameterTypErforderlichBeschreibung
reposarrayJaArray von Repository-Blocklist-Objekten
Jedes Repository-Objekt muss Folgendes enthalten:
FeldTypErforderlichBeschreibung
urlstringJaRepository-URL, die blocklistet werden soll
patternsstring[]JaArray von Dateimustern, die blockiert werden sollen (Glob-Patterns werden unterstützt)
Antwort
Gibt die aktualisierte Liste der Repository-Blocklisten zurück:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Beispielanfrage
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": ["*"]
      }
    ]
  }'

Repo-Blocklist löschen

Entferne ein bestimmtes Repository aus der Blocklist.
DELETE /settings/repo-blocklists/repos/:repoId
Parameter
ParameterTypErforderlichBeschreibung
repoIdstringJaID der Repository-Blockliste, die gelöscht werden soll
Antwort
Gibt bei erfolgreichem Löschen 204 No Content zurück.
Beispielanfrage
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \
  -u YOUR_API_KEY:

Musterbeispiele

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