Cursor 提供多個 API,可讓您以編程方式訪問團隊的數據、AI 驅動的編碼 agent 和使用分析數據。
可用 API¶
| API | 說明 | 可用性 |
|---|---|---|
| Admin API | 管理團隊成員、設置、用量數據、支出和模型訪問權限。構建自定義儀表板和監控工具。 | 企業版團隊 |
| Analytics API | 全面瞭解團隊的 Cursor 用量、AI 指標、活躍用戶和模型用量。 | 企業版團隊 |
| AI Code Tracking API | 在提交和變更層面跟蹤 AI 生成的代碼貢獻,用於歸因和使用分析。 | 企業版團隊 |
| Bugbot API | 觸發 Bugbot 評審並獲取每次評審的使用分析數據。 | 企業版團隊 |
| Cloud Agents API | 以編程方式創建和管理 AI 驅動的編碼 agent,用於自動化工作流和代碼生成。 | Beta (所有套餐) |
| Origin API | 操作 Origin 倉庫、提交、檢查、PR 和應用安裝。 | Alpha |
| TypeScript SDK | 通過統一接口從 TypeScript 運行 Cursor agents,支持本地和雲端運行時。 | 所有用戶 |
| Python SDK | 通過支持本地和雲端運行時的同步和異步客戶端,從 Python 運行 Cursor agents。 | 所有用戶 |
| SDK Bridge | 基於開放橋接協議和獨立二進制文件,使用其他語言構建 agent SDK。 | 所有用戶 |
Cloud Agents API 和 SDK 會運行 Cursor agent 工作流 (包括工作區上下文、工具、命令和編輯) 。它們並非獨立的模型推理或聊天補全 API。使用 Auto / auto-smart 時,Cursor Router 會爲這些 agent 運行選擇模型;請參閱 TypeScript SDK 中的 Router 或 Python SDK。
身份驗證¶
所有 Cursor API 均支持 Basic 認證。Cloud Agents API 還支持 Bearer token——請選擇最方便您的 HTTP 客戶端使用的方式。
Basic 認證¶
使用 Basic 認證時,請將您的 API 密鑰作爲用戶名 (密碼留空) :
curl https://api.cursor.com/teams/members \
-u YOUR_API_KEY:
或者直接設置 Authorization 請求頭:
Authorization: Basic {base64_encode('YOUR_API_KEY:')}
Bearer 身份驗證 (Cloud Agents API)¶
Cloud Agents API 也支持 Authorization: Bearer <key> 請求頭。兩種方式的行爲完全相同——使用 HTTP 客戶端中更方便的一種即可:
curl https://api.cursor.com/v1/me \
-H "Authorization: Bearer YOUR_API_KEY"
創建 API 密鑰¶
團隊管理員可在儀表盤的“API 密鑰”頁面創建和管理 API 密鑰。
Admin API 和 AI Code Tracking API¶
- 前往 cursor.com/dashboard → API Keys
- 點擊 New API Key
- 爲密鑰設置一個便於識別的名稱 (例如,“用量儀表盤集成”)
- 立即複製生成的密鑰,之後將無法再次查看
密鑰格式:crsr_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
所需權限範圍:admin:*
Analytics API¶
在 Cursor 儀表盤 → API Keys 中生成 API 密鑰。
Cloud Agents API¶
在 Cursor 儀表盤 → API 密鑰中創建用戶 API 密鑰,或使用團隊設置中的服務賬戶 API 密鑰。
API 密鑰歸組織所有,所有管理員均可查看。創建者的賬戶狀態不會影響密鑰。
速率限制¶
所有 API 均實施速率限制,以確保使用公平及系統穩定。速率限制按團隊執行,每分鐘重置。
按 API 劃分的速率限制¶
| API | 端點類型 | 速率限制 |
|---|---|---|
| Admin API | 大多數端點 | 20 次請求/分鐘 |
| Admin API | /teams/filtered-usage-events 和 /organizations/filtered-usage-events |
60 次請求/分鐘 |
| Admin API | /teams/user-spend-limit |
250 次請求/分鐘 |
| Analytics API | 大多數團隊級端點 | 100 次請求/分鐘 |
| Analytics API | /analytics/team/conversation-insights |
20 次請求/分鐘 |
| Analytics API | 按用戶劃分的端點 | 50 次請求/分鐘 |
| AI Code Tracking API | 所有端點 | 每個端點 20 次請求/分鐘 |
| Bugbot API | /bugbot/review |
30 次請求/分鐘 |
| Bugbot API | dryRun: true 時的 /bugbot/review |
10 次請求/分鐘 (另加觸發限制) |
| Cloud Agents API | 所有端點 | 標準速率限制 |
速率限制響應¶
當請求超過速率限制時,你將收到 429 Too Many Requests 響應:
{
"error": "Too Many Requests",
"message": "Rate limit exceeded. Please try again later."
}
緩存¶
多個 API 支持通過 ETag 實現 HTTP 緩存,以減少帶寬用量並提升性能。
支持的 API¶
- Analytics API:所有端點 (團隊級和按用戶劃分的) 均支持 HTTP 緩存
- AI Code Tracking API:端點支持 HTTP 緩存
緩存工作原理¶
- 初始請求:向任意受支持的端點發起請求
- 響應包含 ETag:API 會在響應中返回
ETag請求頭 - 後續請求:在
If-None-Match請求頭中附上ETag值 - 304 未修改:如果數據未發生變化,將收到不含響應體的
304 Not Modified響應
示例¶
# 初始請求
curl -X GET "https://api.cursor.com/analytics/team/dau" \
-H "Authorization: Bearer YOUR_API_KEY" \
-D headers.txt
# 響應中包含:ETag: "abc123xyz"
# 攜帶 ETag 的後續請求
curl -X GET "https://api.cursor.com/analytics/team/dau" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "If-None-Match: \"abc123xyz\""
# 如果數據未變化,則返回 304 Not Modified
緩存時長¶
- 緩存時長:15 分鐘 (
Cache-Control: public, max-age=900) - 響應包含
ETag請求頭 - 在後續請求中添加
If-None-Match請求頭,數據未變更時將收到304 Not Modified
優勢¶
- 減少帶寬用量:304 響應不包含響應體
- 響應更快:無需處理未變更的數據
- 更節省速率限制:304 響應不計入速率限制
- 性能更佳:尤其適合頻繁輪詢的端點
最佳實踐¶
1. 實施指數退避¶
收到 429 響應後,請在重試前等待,並逐次延長等待時間:
import time
import requests
def make_request_with_backoff(url, headers, max_retries=5):
for attempt in range(max_retries):
response = requests.get(url, headers=headers)
if response.status_code == 429:
# 指數退避:1 秒、2 秒、4 秒、8 秒、16 秒
wait_time = 2 ** attempt
print(f"Rate limited. Waiting {wait_time}s before retry...")
time.sleep(wait_time)
continue
return response
raise Exception("Max retries exceeded")
2. 將請求分散到不同時間段¶
將 API 調用分散到不同時間段,避免突發請求:
- 將批處理作業安排在不同時間運行
- 處理大型數據集時,在請求之間加入延遲
- 使用隊列系統平滑流量高峯
3. 善用緩存¶
適用於 Analytics API 和 AI Code Tracking API:
這些 API 支持基於 ETag 的 HTTP 緩存。有關如何使用 ETag 減少帶寬用量並避免不必要的請求,請參閱上方的 緩存 部分。
主要優勢:
- 減少帶寬用量
- 數據未變更時響應更快
- 不佔用速率限制 (針對 304 響應)
在 Analytics API 中,使用日期快捷方式 (7d、30d) 代替時間戳,可獲得更好的緩存效果。
4. 監控用量¶
跟蹤請求模式,確保不超出限額:
- 記錄 API 調用的時間戳和響應代碼
- 爲 429 響應設置提醒
- 監控每日/每週用量趨勢
- 根據實際需求調整輪詢間隔
5. 合理進行批量處理¶
對於支持分頁的端點:
- 使用合適的頁面大小,以便單次請求獲取更多數據
- 對於 Analytics API 的按用戶端點:使用
users參數篩選特定用戶 - 對於大規模數據提取:如可用,請使用 CSV 端點 (可高效地流式傳輸數據)
6. 按合適的間隔輪詢¶
不要過度輪詢更新不頻繁的端點:
- Admin API
/teams/daily-usage-data:最多每小時輪詢一次 (數據按小時聚合) - Admin API
/teams/filtered-usage-events:最多每小時輪詢一次 (數據按小時聚合) - Admin API
/organizations/pooled-usage:最多每小時輪詢一次 (數據按小時聚合) - Admin API
/organizations/filtered-usage-events:最多每小時輪詢一次 (數據按小時聚合) - Analytics API:使用日期快捷方式 (
7d、30d) 以獲得更好的緩存效果 - AI Code Tracking API:數據近乎即時採集,但每隔幾分鐘輪詢一次即可
7. 妥善處理錯誤¶
爲所有 API 調用做好適當的錯誤處理:
async function fetchAnalytics(endpoint) {
try {
const response = await fetch(`https://api.cursor.com${endpoint}`, {
headers: {
'Authorization': `Basic ${btoa(API_KEY + ':')}`
}
});
if (response.status === 429) {
// 已觸發速率限制——實施退避策略
throw new Error('Rate limit exceeded');
}
if (response.status === 401) {
// API 密鑰無效
throw new Error('Authentication failed');
}
if (response.status === 403) {
// 權限不足
throw new Error('Enterprise access required');
}
if (!response.ok) {
throw new Error(`API error: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('API request failed:', error);
throw error;
}
}
常見錯誤響應¶
所有 API 均使用標準 HTTP 狀態碼:
400 錯誤請求¶
請求參數無效或缺少必填字段。
{
"error": "Bad Request",
"message": "Some users are not in the team"
}
401 未授權¶
API 密鑰無效或未提供。
{
"error": "Unauthorized",
"message": "Invalid API key"
}
403 禁止訪問¶
API 密鑰有效,但權限不足 (例如,在非企業版方案中使用企業版功能) 。
{
"error": "Forbidden",
"message": "Enterprise access required"
}
404 未找到¶
請求的資源不存在。
{
"error": "Not Found",
"message": "Resource not found"
}
429 請求過多¶
已超出速率限制。請採用指數退避策略。
{
"error": "Too Many Requests",
"message": "Rate limit exceeded. Please try again later."
}
500 內部服務器錯誤¶
服務器端錯誤。如果問題持續存在,請聯繫支持團隊。
{
"error": "Internal Server Error",
"message": "An unexpected error occurred"
}