Admin API memungkinkan Anda mengakses data tim secara programatis, termasuk informasi anggota, metrik penggunaan, dan detail pengeluaran. Bangun dashboard kustom, alat monitoring, atau integrasikan dengan alur kerja yang sudah ada.
API ini masih dalam rilis pertama. Kami sedang memperluas kemampuan berdasarkan masukan - beri tahu kami endpoint apa yang Anda butuhkan!

Autentikasi

Semua permintaan API memerlukan autentikasi menggunakan API key. Hanya administrator tim yang dapat membuat dan mengelola API key. API key terikat pada organisasi, dapat dilihat oleh semua admin, dan tidak terpengaruh oleh status akun pembuat aslinya.

Membuat API Key

  1. Navigasi ke cursor.com/dashboard → tab SettingsCursor Admin API Keys
  2. Klik Create New API Key
  3. Berikan nama deskriptif untuk key Anda (misalnya, “Usage Dashboard Integration”)
  4. Salin key yang dihasilkan segera - Anda tidak akan melihatnya lagi
Format: key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Menggunakan API Key Anda

Gunakan API key Anda sebagai username dalam autentikasi dasar: Menggunakan 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:')}

Base URL

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

Endpoints

Dapatkan Anggota Tim

Ambil semua anggota tim dan detail mereka.
GET /teams/members

Response

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

Contoh Response

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

Contoh Request

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

Dapatkan Data Penggunaan Harian

Ambil metrik penggunaan harian yang detail untuk tim Anda dalam rentang tanggal. Memberikan wawasan tentang pengeditan kode, penggunaan bantuan AI, dan tingkat penerimaan.
POST /teams/daily-usage-data

Request Body

ParameterTypeRequiredDescription
startDatenumberYaTanggal mulai dalam epoch milliseconds
endDatenumberYaTanggal akhir dalam epoch milliseconds
Rentang tanggal tidak boleh melebihi 90 hari. Buat beberapa request untuk periode yang lebih panjang.

Response

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

Field Response

FieldDescription
dateTanggal dalam epoch milliseconds
isActivePengguna aktif pada hari ini
totalLinesAddedBaris kode yang ditambahkan
totalLinesDeletedBaris kode yang dihapus
acceptedLinesAddedBaris yang ditambahkan dari saran AI yang diterima
acceptedLinesDeletedBaris yang dihapus dari saran AI yang diterima
totalAppliesOperasi apply
totalAcceptsSaran yang diterima
totalRejectsSaran yang ditolak
totalTabsShownTab completion yang ditampilkan
totalTabsAcceptedTab completion yang diterima
composerRequestsRequest composer
chatRequestsRequest chat
agentRequestsRequest agent
cmdkUsagesPenggunaan command palette (Cmd+K)
subscriptionIncludedReqsRequest subscription
apiKeyReqsRequest API key
usageBasedReqsRequest 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 Response

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

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

Mendapatkan Data Pengeluaran

Mengambil informasi pengeluaran untuk bulan kalender saat ini dengan pencarian, pengurutan, dan paginasi.
POST /teams/spend

Request Body

ParameterTypeRequiredDescription
searchTermstringNoPencarian dalam nama pengguna dan email
sortBystringNoUrutkan berdasarkan: amount, date, user. Default: date
sortDirectionstringNoArah pengurutan: asc, desc. Default: desc
pagenumberNoNomor halaman (dimulai dari 1). Default: 1
pageSizenumberNoHasil per halaman

Response

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

Field Response

FieldDescription
spendCentsTotal pengeluaran dalam sen
fastPremiumRequestsRequest model premium cepat
nameNama anggota
emailEmail anggota
rolePeran dalam tim
hardLimitOverrideDollarsOverride batas pengeluaran khusus
subscriptionCycleStartMulai siklus berlangganan (epoch milidetik)
totalMembersTotal anggota tim
totalPagesTotal halaman

Contoh Response

{
  "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 event penggunaan terperinci untuk tim Anda dengan opsi filtering, pencarian, dan paginasi yang komprehensif. Endpoint ini menyediakan wawasan granular tentang panggilan API individual, penggunaan model, konsumsi token, dan biaya.
POST /teams/filtered-usage-events

Request Body

ParameterTypeRequiredDescription
startDatenumberNoTanggal mulai dalam epoch milliseconds
endDatenumberNoTanggal akhir dalam epoch milliseconds
userIdnumberNoFilter berdasarkan ID pengguna tertentu
pagenumberNoNomor halaman (1-indexed). Default: 1
pageSizenumberNoJumlah hasil per halaman. Default: 10
emailstringNoFilter berdasarkan alamat email pengguna

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

Penjelasan Field Response

FieldDescription
totalUsageEventsCountTotal jumlah event penggunaan yang cocok dengan query
paginationMetadata paginasi untuk navigasi hasil
timestampTimestamp event dalam epoch milliseconds
modelModel AI yang digunakan untuk permintaan
kindLabelKategori penggunaan (misalnya, “Usage-based”, “Included in Business”)
maxModeApakah max mode diaktifkan
requestsCostsBiaya dalam unit permintaan
isTokenBasedCallTrue ketika event dikenakan biaya sebagai event berbasis penggunaan
tokenUsageKonsumsi token terperinci (tersedia ketika isTokenBasedCall adalah true)
isFreeBugbotApakah ini adalah penggunaan bugbot gratis
userEmailEmail pengguna yang membuat permintaan
periodRentang tanggal dari data yang di-query

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

Contoh Request

Dapatkan semua event 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 YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": 1748411762359,
    "endDate": 1751003762359,
    "email": "developer@company.com",
    "page": 1,
    "pageSize": 25
  }'
Dapatkan event penggunaan untuk pengguna 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
  }'

Repo Blocklists API

Tambahkan repositori dan gunakan pola untuk mencegah file atau direktori diindeks atau digunakan sebagai konteks untuk tim Anda.

Dapatkan Team Repo Blocklists

Ambil semua blocklist repositori yang dikonfigurasi untuk tim Anda.
GET /settings/repo-blocklists/repos
Response
Mengembalikan array objek blocklist repositori:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Contoh 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": ["*"]
    }
  ]
}
Contoh Request
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \
  -u YOUR_API_KEY:

Upsert Repo Blocklists

Ganti blocklist repositori yang ada untuk repo yang disediakan. Catatan: Endpoint ini hanya akan menimpa pola untuk repositori yang disediakan. Semua repo lainnya tidak akan terpengaruh.
POST /settings/repo-blocklists/repos/upsert
Request Body
ParameterTypeRequiredDescription
reposarrayYesArray dari objek blocklist repositori
Setiap objek repositori harus berisi:
FieldTypeRequiredDescription
urlstringYesURL repositori untuk dimasukkan ke blocklist
patternsstring[]YesArray dari pola file yang akan diblokir (mendukung pola glob)
Response
Mengembalikan daftar terbaru dari blocklist repositori:
{
  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

Menghapus repositori tertentu dari blocklist.
DELETE /settings/repo-blocklists/repos/:repoId
Parameters
ParameterTypeRequiredDescription
repoIdstringYesID dari blocklist repositori yang akan dihapus
Response
Mengembalikan 204 No Content ketika penghapusan berhasil.
Example Request
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \
  -u YOUR_API_KEY:

Pattern Examples

Pola blocklist yang umum:
  • * - Blokir seluruh repositori
  • *.env - Blokir semua file .env
  • config/* - Blokir semua file dalam direktori config
  • **/*.secret - Blokir semua file .secret dalam subdirektori manapun
  • src/api/keys.ts - Blokir file tertentu