Langsung ke konten utama
Admin API bikin lo bisa ngeakses data tim lo secara terprogram, termasuk info member, metrik penggunaan, dan detail pengeluaran. Bangun dashboard kustom, alat monitoring, atau integrasiin ke workflow yang udah ada.
API ini baru rilis pertama. Kita lagi nambahin kapabilitas berdasarkan feedback — kasih tahu kita endpoint apa yang lo butuhin!

Autentikasi

Semua permintaan API memerlukan autentikasi menggunakan kunci API. Hanya admin tim yang bisa membuat dan mengelola kunci API. Kunci API terikat ke organisasi, dapat dilihat oleh semua admin, dan tidak terpengaruh oleh status akun pembuatnya.

Membuat API Key

  1. Buka cursor.com/dashboard → tab SettingsCursor Admin API Keys
  2. Klik Create New API Key
  3. Kasih nama yang deskriptif buat key lo (misalnya, “Usage Dashboard Integration”)
  4. Segera salin key yang dihasilkan — lo nggak bakal bisa lihat itu lagi
Format: key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Pakai API key lo

Pakai API key lo sebagai username di basic authentication: Pakai curl dengan basic auth:
curl https://api.cursor.com/{route} -u API_KEY:
Atau atur header Authorization secara langsung:
Authorization: Basic {base64_encode('API_KEY:')}

URL Dasar

Semua endpoint API menggunakan:
https://api.cursor.com

Endpoint

Ambil Anggota Tim

Mengambil semua anggota tim beserta detailnya.
GET /teams/members

Respons

Mengembalikan array objek anggota tim:
{
  teamMembers: {
    name: string;
    email: string;
    role: 'owner' | 'member' | 'free-owner';
  }[];
}

Contoh Tanggapan

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

Contoh Permintaan

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

Dapatkan Data Penggunaan Harian

Ambil metrik penggunaan harian yang detail buat tim lo dalam rentang tanggal tertentu. Ngasih insight tentang pengeditan kode, penggunaan bantuan AI, dan tingkat penerimaan.
POST /teams/daily-usage-data

Body Request

ParameterTypeRequiredDescription
startDatenumberYesTanggal mulai dalam milidetik epoch
endDatenumberYesTanggal akhir dalam milidetik epoch
Rentang tanggal nggak boleh lebih dari 90 hari. Buat beberapa request untuk periode yang lebih panjang.

Respons

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

Kolom Respons

FieldDescription
dateTanggal dalam milidetik epoch
isActivePengguna aktif pada hari tersebut
totalLinesAddedJumlah baris kode yang ditambahkan
totalLinesDeletedJumlah baris kode yang dihapus
acceptedLinesAddedJumlah baris dari saran AI yang diterima dan ditambahkan
acceptedLinesDeletedJumlah baris dari saran AI yang diterima dan dihapus
totalAppliesOperasi apply
totalAcceptsSaran yang diterima
totalRejectsSaran yang ditolak
totalTabsShownTab completion yang ditampilkan
totalTabsAcceptedTab completion yang diterima
composerRequestsPermintaan Composer
chatRequestsPermintaan Chat
agentRequestsPermintaan Agent
cmdkUsagesPenggunaan Command Palette (Cmd+K)
subscriptionIncludedReqsPermintaan yang termasuk dalam langganan
apiKeyReqsPermintaan API key
usageBasedReqsPermintaan bayar per penggunaan
bugbotUsagesPenggunaan deteksi bug
mostUsedModelModel AI yang paling sering digunakan
applyMostUsedExtensionEkstensi file yang paling sering digunakan untuk apply
tabMostUsedExtensionEkstensi file yang paling sering digunakan untuk tab
clientVersionVersi Cursor
emailEmail pengguna

Contoh Tanggapan

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

Contoh Permintaan

curl -X POST https://api.cursor.com/teams/daily-usage-data \
  -u API_KEY_KAMU: \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": 1710720000000,
    "endDate": 1710892800000
  }'

Dapatkan Data Pengeluaran

Ambil data pengeluaran untuk bulan kalender berjalan, lengkap dengan pencarian, penyortiran, dan pagination.
POST /teams/spend

Request Body

ParameterTypeRequiredDescription
searchTermstringNoCari di nama dan email pengguna
sortBystringNoUrutkan menurut: amount, date, user. Default: date
sortDirectionstringNoArah pengurutan: asc, desc. Default: desc
pagenumberNoNomor halaman (indeks mulai 1). Default: 1
pageSizenumberNoJumlah hasil per halaman

Respons

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

Field Respons

FieldDescription
spendCentsTotal pengeluaran dalam sen
fastPremiumRequestsPermintaan model premium cepat
nameNama anggota
emailEmail anggota
rolePeran dalam tim
hardLimitOverrideDollarsPenggantian batas pengeluaran kustom
subscriptionCycleStartMulai siklus langganan (milidetik epoch)
totalMembersTotal anggota tim
totalPagesTotal halaman

Contoh Tanggapan

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

Contoh Permintaan

Data pengeluaran dasar:
curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
Cari pengguna tertentu dengan paginasi:
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
  }'

Dapatkan Data Event Penggunaan

Ambil data event penggunaan yang detail untuk tim lo, dengan opsi filter, pencarian, dan paginasi yang lengkap. Endpoint ini ngasih insight granular tentang panggilan API per request, penggunaan model, konsumsi token, dan biaya.
POST /teams/filtered-usage-events

Body Permintaan

ParameterTipeWajibDeskripsi
startDatenumberTidakTanggal mulai dalam milidetik epoch
endDatenumberTidakTanggal akhir dalam milidetik epoch
userIdnumberTidakFilter berdasarkan ID pengguna tertentu
pagenumberTidakNomor halaman (diindeks dari 1). Default: 1
pageSizenumberTidakJumlah hasil per halaman. Default: 10
emailstringTidakFilter berdasarkan alamat email pengguna

Respons

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

Penjelasan Field Respons

FieldDescription
totalUsageEventsCountJumlah total event penggunaan yang sesuai dengan query
paginationMetadata paginasi untuk menavigasi hasil
timestampStempel waktu event dalam epoch millisecond
modelModel AI yang dipakai untuk request
kindKategori penggunaan (mis., “Usage-based”, “Included in Business”)
maxModeApakah max mode diaktifkan
requestsCostsBiaya dalam unit request
isTokenBasedCallTrue saat event ditagihkan sebagai event berbasis penggunaan
tokenUsageRincian konsumsi token (tersedia saat isTokenBasedCall bernilai true)
isFreeBugbotApakah ini penggunaan bugbot gratis
userEmailEmail user yang membuat request
periodRentang tanggal dari data yang di-query

Contoh Tanggapan

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

Contoh Permintaan

Ambil semua peristiwa penggunaan dengan paginasi default:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
Filter berdasarkan rentang tanggal dan pengguna tertentu:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u API_KEY_KAMU: \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": 1748411762359,
    "endDate": 1751003762359,
    "email": "developer@company.com",
    "page": 1,
    "pageSize": 25
  }'
Ambil event penggunaan untuk user tertentu dengan paginasi kustom:
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
  }'

Set Batas Pengeluaran Pengguna

Atur batas pengeluaran buat tiap anggota tim. Ini bikin lo bisa ngatur seberapa banyak tiap user boleh ngehabisin buat penggunaan AI di tim lo.
POST /teams/batas-pengeluaran-user
Batas laju: 60 permintaan per menit per tim

Request Body

ParameterTypeRequiredDescription
userEmailstringYesAlamat email anggota tim
spendLimitDollarsnumberYesBatas pengeluaran dalam dolar (hanya bilangan bulat, tanpa desimal).
  • Pengguna harus sudah menjadi anggota tim kamu
  • Hanya nilai bilangan bulat yang diterima (tanpa angka desimal)
  • Mengatur spendLimitDollars ke 0 akan menetapkan batas menjadi $0

Respons

Mengembalikan respons standar yang menunjukkan apakah operasi berhasil atau gagal:
{
  outcome: 'sukses' | 'error';
  message: string;
}

Contoh Respons

Berhasil mengatur batas:
{
  "outcome": "sukses",
  "message": "Batas pengeluaran ditetapkan menjadi $100 untuk pengguna developer@company.com"
}
Respons kesalahan:
{
  "outcome": "error",
  "message": "Format email tidak valid"
}

Contoh Permintaan

Atur batas pengeluaran:
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

Tambahkan repositori dan terapkan pola untuk mencegah file atau direktori diindeks atau digunakan sebagai konteks buat tim.

Dapatkan Blocklist Repo Tim

Ambil semua blocklist repository yang dikonfigurasi untuk tim lo.
GET /settings/repo-blocklists/repos
Respons
Mengembalikan array objek daftar blokir repositori:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Contoh Tanggapan
{
  "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": ["*"]
    }
  ]
}
Contoh Permintaan
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \
  -u API_KEY_KAMU:

Upsert Repo Blocklists

Ganti blocklist repo yang sudah ada untuk repo yang diberikan. Catatan: Endpoint ini cuma bakal menimpa pola untuk repo yang diberikan. Repo lainnya nggak akan terpengaruh.
POST /settings/repo-blocklists/repos/upsert
Request Body
ParameterTypeRequiredDescription
reposarrayYesArray objek blocklist repository
Setiap objek repository harus berisi:
FieldTypeRequiredDescription
urlstringYesURL repository untuk dimasukkan ke blocklist
patternsstring[]YesArray pola file yang akan diblokir (mendukung pola glob)
Respons
Mengembalikan daftar blocklist repositori yang diperbarui:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Contoh Permintaan
curl -X POST https://api.cursor.com/settings/repo-blocklists/repos/upsert \
  -u API_KEY_KAMU: \
  -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": ["*"]
      }
    ]
  }'

Hapus Daftar Blokir Repo

Hapus repositori tertentu dari daftar blokir.
DELETE /settings/repo-blocklists/repos/:repoId
Parameter
ParameterTipeWajibDeskripsi
repoIdstringYaID blocklist repositori yang akan dihapus
Respons
Mengembalikan 204 No Content ketika penghapusan berhasil.
Contoh Permintaan
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \
  -u KUNCI_API_LO:

Contoh Pola

Pola blocklist yang umum:
  • * - Blokir seluruh repository
  • *.env - Blokir semua file .env
  • config/* - Blokir semua file di direktori config
  • **/*.secret - Blokir semua file .secret di subdirektori mana pun
  • src/api/keys.ts - Blokir file tertentu