Admin API, üye bilgileri, kullanım metrikleri ve harcama detayları dahil olmak üzere takımının verilerine programatik olarak erişmeni sağlar. Özel panolar, izleme araçları oluşturabilir ya da mevcut iş akışlarınla entegre edebilirsin.
API ilk sürümünde. Geri bildirimlere göre kapsamını genişletiyoruz — hangi endpoint’lere ihtiyacın olduğunu bize bildir!
Tüm API istekleri, bir API anahtarı kullanılarak kimlik doğrulaması gerektirir. API anahtarlarını yalnızca ekip yöneticileri oluşturabilir ve yönetebilir.
API anahtarları kuruluşa bağlıdır, tüm yöneticiler tarafından görüntülenebilir ve ilk oluşturan kişinin hesap durumundan etkilenmez.
Bir API Anahtarı Oluşturma
- cursor.com/dashboard → Settings sekmesi → Cursor Admin API Keys bölümüne git
- Create New API Key düğmesine tıkla
- Anahtarına açıklayıcı bir ad ver (ör. “Usage Dashboard Integration”)
- Oluşturulan anahtarı hemen kopyala — tekrar görüntüleyemezsin
Biçim: key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
API anahtarını temel kimlik doğrulamada kullanıcı adı olarak kullan:
Temel kimlik doğrulamayla curl kullanma:
curl https://api.cursor.com/{route} -u API_KEY:
Ya da Authorization üstbilgisini doğrudan ayarla:
Authorization: Basic {base64_encode('API_KEY:')}
Tüm API uç noktaları şu adresi kullanır:
Tüm takım üyelerini ve ayrıntılarını getir.
Takım üyesi nesnelerinden oluşan bir dizi döndürür:
{
teamMembers: {
name: string;
email: string;
role: 'owner' | 'member' | 'free-owner';
}[];
}
{
"teamMembers": [
{
"name": "Alex",
"email": "developer@company.com",
"role": "member"
},
{
"name": "Sam",
"email": "admin@company.com",
"role": "owner"
}
]
}
curl -X GET https://api.cursor.com/teams/members \
-u YOUR_API_KEY:
Günlük Kullanım Verilerini Al
Bir tarih aralığı içinde ekibin için ayrıntılı günlük kullanım metriklerini getir. Kod düzenlemeleri, yapay zekâ yardımı kullanımı ve kabul oranları hakkında içgörüler sunar.
POST /teams/daily-usage-data
Parametre | Tür | Gerekli | Açıklama |
---|
startDate | number | Evet | Epoch milisaniye cinsinden başlangıç tarihi |
endDate | number | Evet | Epoch milisaniye cinsinden bitiş tarihi |
Tarih aralığı 90 günü aşamaz. Daha uzun dönemler için birden fazla istek gönder.
{
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;
};
}
Alan | Açıklama |
---|
date | Epoch milisaniye cinsinden tarih |
isActive | Kullanıcı bu gün aktif mi |
totalLinesAdded | Eklenen kod satırı |
totalLinesDeleted | Silinen kod satırı |
acceptedLinesAdded | Kabul edilen AI önerilerinden eklenen satır |
acceptedLinesDeleted | Kabul edilen AI önerilerinden silinen satır |
totalApplies | Uygulama işlemleri |
totalAccepts | Kabul edilen öneriler |
totalRejects | Reddedilen öneriler |
totalTabsShown | Gösterilen sekme tamamlama sayısı |
totalTabsAccepted | Kabul edilen sekme tamamlama sayısı |
composerRequests | Composer istekleri |
chatRequests | Chat istekleri |
agentRequests | Agent istekleri |
cmdkUsages | Komut paleti (Cmd+K) kullanımları |
subscriptionIncludedReqs | Abonelik kapsamında yapılan istekler |
apiKeyReqs | API anahtarı ile yapılan istekler |
usageBasedReqs | Kullanım başına ücretlendirilen istekler |
bugbotUsages | Hata tespiti kullanımları |
mostUsedModel | En sık kullanılan AI modeli |
applyMostUsedExtension | Uygulama işlemlerinde en çok kullanılan dosya uzantısı |
tabMostUsedExtension | Sekmelerde en çok kullanılan dosya uzantısı |
clientVersion | Cursor sürümü |
email | Kullanıcı e-postası |
{
"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
}
}
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
}'
Arama, sıralama ve sayfalama ile içinde bulunduğun takvim ayına ait harcama bilgilerini getir.
Parametre | Tür | Gerekli | Açıklama |
---|
searchTerm | string | Hayır | Kullanıcı adları ve e-postalarda ara |
sortBy | string | Hayır | Şuna göre sırala: amount , date , user . Varsayılan: date |
sortDirection | string | Hayır | Sıralama yönü: asc , desc . Varsayılan: desc |
page | number | Hayır | Sayfa numarası (1’den başlayarak). Varsayılan: 1 |
pageSize | number | Hayır | Sayfa başına sonuç sayısı |
{
teamMemberSpend: {
spendCents: number;
fastPremiumRequests: number;
name: string;
email: string;
role: 'owner' | 'member' | 'free-owner';
hardLimitOverrideDollars: number;
}[];
subscriptionCycleStart: number;
totalMembers: number;
totalPages: number;
}
Alan | Açıklama |
---|
spendCents | Toplam harcama (cent cinsinden) |
fastPremiumRequests | Hızlı premium model istekleri |
name | Üyenin adı |
email | Üyenin e-postası |
role | Ekip rolü |
hardLimitOverrideDollars | Özel harcama limiti geçersiz kılma (dolar) |
subscriptionCycleStart | Abonelik döngüsü başlangıcı (epoch milisaniye) |
totalMembers | Toplam ekip üyesi sayısı |
totalPages | Toplam sayfa sayısı |
{
"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
}
Temel harcama verileri:
curl -X POST https://api.cursor.com/teams/spend \
-u YOUR_API_KEY: \
-H "Content-Type: application/json" \
-d '{}'
Sayfalama ile belirli bir kullanıcıyı arama:
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
}'
Kullanım Olayları Verilerini Al
Kapsamlı filtreleme, arama ve sayfalama seçenekleriyle ekibin için ayrıntılı kullanım olaylarını getir. Bu uç nokta, tekil API çağrıları, model kullanımı, token tüketimi ve maliyetler hakkında ayrıntılı içgörüler sunar.
POST /teams/filtered-usage-events
Parametre | Tür | Gerekli | Açıklama |
---|
startDate | number | Hayır | Epoch milisaniye cinsinden başlangıç tarihi |
endDate | number | Hayır | Epoch milisaniye cinsinden bitiş tarihi |
userId | number | Hayır | Belirli kullanıcı kimliğine göre filtrele |
page | number | Hayır | Sayfa numarası (1’den başlayarak). Varsayılan: 1 |
pageSize | number | Hayır | Sayfa başına sonuç sayısı. Varsayılan: 10 |
email | string | Hayır | Kullanıcı e‑posta adresine göre filtrele |
{
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;
};
}
Yanıt Alanlarının Açıklaması
Alan | Açıklama |
---|
totalUsageEventsCount | Sorguyla eşleşen kullanım olaylarının toplam sayısı |
pagination | Sonuçlarda gezinmek için sayfalama üstverisi |
timestamp | Olay zaman damgası (epoch milisaniye) |
model | İstek için kullanılan yapay zekâ modeli |
kind | Kullanım kategorisi (örn. “Usage-based”, “Included in Business”) |
maxMode | Maks modun etkin olup olmadığı |
requestsCosts | İstek birimleri cinsinden maliyet |
isTokenBasedCall | Olay kullanım bazlı olarak ücretlendirildiğinde true |
tokenUsage | Ayrıntılı token kullanımı (isTokenBasedCall true olduğunda mevcut) |
isFreeBugbot | Bunun ücretsiz bugbot kullanımı olup olmadığı |
userEmail | İsteği yapan kullanıcının e-posta adresi |
period | Sorgulanan verinin tarih aralığı |
{
"totalUsageEventsCount": 113,
"pagination": {
"numPages": 12,
"currentPage": 1,
"pageSize": 10,
"hasNextPage": true,
"hasPreviousPage": false
},
"usageEvents": [
{
"timestamp": "1750979225854",
"model": "claude-4-opus",
"kind": "Kullanıma göre ücretlendirme",
"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": "Kullanıma göre ücretlendirme",
"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": "Business planına dahil",
"maxMode": true,
"requestsCosts": 1.4,
"isTokenBasedCall": false,
"isFreeBugbot": false,
"userEmail": "admin@company.com"
}
],
"period": {
"startDate": 1748411762359,
"endDate": 1751003762359
}
}
Varsayılan sayfalama ile tüm kullanım olaylarını getir:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
-u YOUR_API_KEY: \
-H "Content-Type: application/json" \
-d '{}'
Tarih aralığına ve belirli bir kullanıcıya göre filtrele:
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
}'
Belirli bir kullanıcı için özel sayfalama ile kullanım olaylarını getir:
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
}'
Kullanıcı Harcama Limitini Ayarla
Bireysel ekip üyeleri için harcama limitleri belirle. Bu sayede ekibindeki her kullanıcının AI kullanımı için ne kadar harcama yapabileceğini kontrol edebilirsin.
POST /teams/user-spend-limit
Oran sınırlaması: Ekip başına dakikada 60 istek
Parametre | Tür | Gerekli | Açıklama |
---|
userEmail | string | Evet | Ekip üyesinin e‑posta adresi |
spendLimitDollars | number | Evet | Dolar cinsinden harcama limiti (yalnızca tamsayı, ondalık kabul edilmez). |
- Kullanıcının zaten ekibinin bir üyesi olması gerekir
- Yalnızca tamsayı değerler kabul edilir (ondalık tutarlar kabul edilmez)
spendLimitDollars
değerini 0 olarak ayarlamak limiti $0 yapar
Başarı ya da hata durumunu belirten standart bir yanıt döndürür:
{
outcome: 'success' | 'error';
message: string;
}
Limit başarıyla ayarlandı:
{
"outcome": "success",
"message": "Kullanıcı developer@company.com için harcama limiti $100 olarak ayarlandı"
}
Hata yanıtı:
{
"outcome": "error",
"message": "Geçersiz e-posta formatı"
}
Harcama limiti ayarla:
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
}'
Takımının dosya veya dizinlerinin indekslenmesini ya da bağlam olarak kullanılmasını engellemek için depolar ve örüntüler ekle.
Takım Depo Engelleme Listelerini Getir
Takımın için yapılandırılmış tüm depo engelleme listelerini getir.
GET /settings/repo-blocklists/repos
Yanıt
Repository blocklist nesnelerinden oluşan bir dizi döndürür:
{
repos: {
id: string;
url: string;
patterns: string[];
}[];
}
Örnek Yanıt
{
"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": ["*"]
}
]
}
Örnek İstek
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \
-u YOUR_API_KEY:
Repo Blocklist’lerini Upsert Et
Sağlanan repolar için mevcut repo blocklist’lerini değiştirir.
Not: Bu endpoint yalnızca sağlanan repoların pattern’lerini (kalıplarını) günceller/üzerine yazar. Diğer repolar etkilenmez.
POST /settings/repo-blocklists/repos/upsert
İstek Gövdesi
Parametre | Tür | Gerekli | Açıklama |
---|
repos | array | Evet | Depo engel listesi nesnelerinden oluşan dizi |
Her depo nesnesi şunları içermelidir:
Alan | Tür | Gerekli | Açıklama |
---|
url | string | Evet | Engel listesine eklenecek depo URL’si |
patterns | string[] | Evet | Engellenecek dosya kalıplarının dizisi (glob kalıpları desteklenir) |
Yanıt
Güncellenmiş depo engelleme listelerini döndürür:
{
repos: {
id: string;
url: string;
patterns: string[];
}[];
}
Örnek istek
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 Engelleme Listesini Sil
Engelleme listesinden belirli bir depoyu kaldır.
DELETE /settings/repo-blocklists/repos/:repoId
Parametreler
Parametre | Tür | Gerekli | Açıklama |
---|
repoId | string | Evet | Silinecek depo engelleme listesinin kimliği |
Yanıt
Başarıyla silindiğinde 204 No Content döndürür.
Örnek İstek
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \
-u YOUR_API_KEY:
Yaygın blocklist desenleri:
*
- Tüm depoyu engelle
*.env
- Tüm .env dosyalarını engelle
config/*
- config dizinindeki tüm dosyaları engelle
**/*.secret
- Herhangi bir alt dizindeki tüm .secret dosyalarını engelle
src/api/keys.ts
- Belirli bir dosyayı engelle