Die Admin-API gibt dir programmgesteuerten Zugriff auf die Daten deines Teams, darunter Mitgliederinfos, Nutzungsmetriken und Ausgabendetails. Bau eigene Dashboards und 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-Key. Nur Team-Admins können API-Keys erstellen und verwalten. API-Keys sind an die Organisation gebunden, für alle Admins sichtbar und bleiben unabhängig vom Kontostatus der ursprünglichen Erstellerperson.

Erstellen eines API-Schlüssels

  1. Navigier zu cursor.com/dashboard → Tab SettingsCursor Admin API Keys
  2. Klick auf Create New API Key
  3. Gib deinem Schlüssel einen aussagekräftigen Namen (z. B. „Usage Dashboard Integration“)
  4. Kopier den generierten Schlüssel sofort – du wirst ihn nicht wieder sehen
Format: key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Verwende deinen API‑Schlüssel

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 setz den Authorization-Header direkt:
Authorization: Basic {base64_encode('API_KEY:')}

Basis-URL

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

Endpoints

Teammitglieder abrufen

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

Antwort

Gibt ein Array von Teammitgliedern (Objekten) 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 DEIN_API_KEY:

Tägliche Nutzungsdaten abrufen

Hol dir detaillierte tägliche Nutzungsmetriken für dein Team für einen bestimmten Zeitraum. Liefert Einblicke in Code-Änderungen, die Nutzung von KI-Unterstützung 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. Für längere Zeiträume bitte 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
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
cmdkUsagesNutzungen der Befehlspalette (Cmd+K)
subscriptionIncludedReqsInklusive Abo-Anfragen
apiKeyReqsAPI-Schlüssel-Anfragen
usageBasedReqsNutzungsbasierte (Pay-per-Use) Anfragen
bugbotUsagesNutzungen der Bug-Erkennung
mostUsedModelAm häufigsten verwendetes KI-Modell
applyMostUsedExtensionAm häufigsten verwendete Dateierweiterung bei Applies
tabMostUsedExtensionAm häufigsten verwendete Dateierweiterung bei 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 DEIN_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": 1710720000000,
    "endDate": 1710892800000
  }'

Ausgabendaten abrufen

Ruf Ausgabendaten 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. Standardmäßig: date
sortDirectionstringNeinSortierrichtung: asc, desc. Standardmäßig: desc
pagenumberNeinSeitennummer (1-indiziert). Standardmäßig: 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
fastPremiumRequestsSchnell-Premium-Modellanfragen
nameName des Mitglieds
emailE-Mail des Mitglieds
roleTeamrolle
hardLimitOverrideDollarsBenutzerdefinierte Überschreibung des Ausgabenlimits
subscriptionCycleStartBeginn des Abrechnungszyklus (Epoch-Millisekunden)
totalMembersGesamtzahl der Teammitglieder
totalPagesGesamtzahl der Seiten

Beispiel-Antwort

{
  "teamMemberSpend": [
    {
      "spendCents": 2450,
      "fastPremiumRequests": 1250,
      "name": "Alex",
      "email": "developer@company.com",
      "role": "member",
      "hardLimitOverrideUSDR": 100
    },
    {
      "spendCents": 1875,
      "fastPremiumRequests": 980,
      "name": "Sam",
      "email": "admin@company.com",
      "role": "owner",
      "hardLimitOverrideUSDR": 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 User 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
  }'

Nutzungsereignisse abrufen

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

Request-Body

ParameterTypErforderlichBeschreibung
startDatenumberNeinStartdatum in Unix-Epoche (Millisekunden)
endDatenumberNeinEnddatum in Unix-Epoche (Millisekunden)
userIdnumberNeinNach bestimmter User-ID filtern
pagenumberNeinSeitennummer (1-basiert). Standard: 1
pageSizenumberNeinAnzahl der Ergebnisse pro Seite. Standard: 10
emailstringNeinNach der E-Mail-Adresse des Users 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
paginationPaginierungsmetadaten zur Navigation durch die Ergebnisse
timestampEreigniszeitstempel in Millisekunden seit Epoch
modelFür die Anfrage verwendetes KI-Modell
kindNutzungskategorie (z. B. „Usage-based“, „Included in Business“)
maxModeOb der Max‑Modus aktiviert war
requestsCostsKosten in Request‑Einheiten
isTokenBasedCallTrue, wenn das Ereignis nutzungsbasiert abgerechnet wird
tokenUsageDetaillierter Token‑Verbrauch (verfügbar, wenn isTokenBasedCall true ist)
isFreeBugbotOb dies eine kostenlose Bugbot‑Nutzung war
userEmailE‑Mail des Users, der die Anfrage gestellt hat
periodDatumsbereich der abgefragten Daten

Beispiel-Antwort

{
  "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": "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": "In Business enthalten"
      "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 User mit individueller Pagination 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 pro Nutzer festlegen

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

Request-Body

ParameterTypeRequiredDescription
userEmailstringYesE-Mail-Adresse des Teammitglieds
spendLimitDollarsnumberYesAusgabenlimit in US-Dollar (nur ganze Zahlen, keine Dezimalstellen).
  • Der Nutzer muss bereits Mitglied deines Teams sein
  • Es werden nur ganze Zahlen akzeptiert (keine Dezimalbeträge)
  • Wenn spendLimitDollars auf 0 gesetzt wird, ist das Limit $0

Response

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

Beispielantworten

Limit erfolgreich gesetzt:
{
  "outcome": "success",
  "message": "Ausgabenlimit von $100 für den User developer@company.com festgelegt"
}
Fehlermeldung:
{
  "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 Repos hinzu und nutze Muster, 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
Antwort
Gibt ein Array von Blocklist-Objekten für Repositories 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 DEIN_API_KEY:

Repo-Blocklisten updaten/erstellen

Ersetze bestehende Repository-Blocklisten für die angegebenen Repos. Hinweis: Dieser Endpunkt überschreibt nur die Muster für die angegebenen Repositories. Alle anderen Repos bleiben unverändert.
POST /settings/repo-blocklists/repos/upsert
Request Body
ParameterTypErforderlichBeschreibung
reposarrayJaArray von Blocklist-Objekten für Repositories
Jedes Repository-Objekt muss Folgendes enthalten:
FeldTypErforderlichBeschreibung
urlstringJaRepository-URL, die blocklistet werden soll
patternsstring[]JaArray von zu blockierenden Dateimustern (Glob-Muster werden unterstützt)
Response
Gibt die aktualisierte Liste der Repository-Blocklists 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 zu löschenden Blocklist des Repositories
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 DEIN_API_SCHLÜSSEL:

Beispielmuster

Häufige Muster für die Blockliste:
  • * - gesamtes Repository blocken
  • *.env - alle .env-Dateien blocken
  • config/* - alle Dateien im Verzeichnis config blocken
  • **/*.secret - alle .secret-Dateien in beliebigen Unterverzeichnissen blocken
  • src/api/keys.ts - eine bestimmte Datei blocken