Admin API를 쓰면 멤버 정보, 사용량 지표, 지출 내역을 포함한 팀 데이터를 코드로 직접 조회하고 다룰 수 있어. 커스텀 대시보드나 모니터링 도구를 만들거나 기존 워크플로우에 통합해봐.
이 API는 첫 릴리스야. 피드백을 바탕으로 기능을 확장 중이니까, 필요한 엔드포인트를 알려줘!

인증

모든 API 요청에는 API 키 기반 인증이 필요해. 팀 관리자만 API 키를 생성하고 관리할 수 있어. API 키는 조직에 귀속되고, 모든 관리자에게 보이며, 최초 생성자의 계정 상태와는 무관해.

API 키 생성하기

  1. cursor.com/dashboardSettings 탭 → Cursor Admin API Keys로 이동
  2. Create New API Key 클릭
  3. 키에 알아보기 쉬운 이름 지정 (예: “Usage Dashboard Integration”)
  4. 생성된 키를 바로 복사해 둬 — 다시는 확인할 수 없어
형식: key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

API 키 사용하기

기본 인증에서 API 키를 사용자 이름으로 사용해: 기본 인증으로 curl 사용:
curl https://api.cursor.com/{route} -u API_KEY:
혹은 Authorization 헤더를 직접 설정해:
Authorization: Basic {base64_encode('API_KEY:')}

기본 URL

모든 API 엔드포인트는 다음을 사용해:
https://api.cursor.com

엔드포인트

팀 멤버 가져오기

모든 팀 멤버와 상세 정보를 조회해.
GET /teams/members

Response

팀 멤버 객체 배열을 반환해:
{
  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:

일일 사용량 데이터 가져오기

지정한 날짜 범위에서 팀의 상세한 일일 사용량 지표를 조회해. 코드 편집, AI 도움 사용량, 수용률에 대한 인사이트를 제공해.
POST /teams/daily-usage-data

요청 본문

매개변수타입필수설명
startDatenumber에포크 밀리초 기준 시작 날짜
endDatenumber에포크 밀리초 기준 종료 날짜
날짜 범위는 최대 90일이야. 더 긴 기간이 필요하면 여러 번 나눠서 요청해.

응답

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

응답 필드

FieldDescription
date에포크 밀리초 단위의 날짜
isActive해당 날짜에 사용자 활동 여부
totalLinesAdded추가된 코드 줄 수
totalLinesDeleted삭제된 코드 줄 수
acceptedLinesAdded수락된 AI 제안으로 추가된 줄 수
acceptedLinesDeleted수락된 AI 제안으로 삭제된 줄 수
totalApplies적용(Apply) 작업 수
totalAccepts수락된 제안 수
totalRejects거절된 제안 수
totalTabsShown표시된 탭 자동완성 수
totalTabsAccepted수락된 탭 자동완성 수
composerRequestsComposer 요청 수
chatRequestsChat 요청 수
agentRequestsAgent 요청 수
cmdkUsages명령 팔레트(Cmd+K) 사용 횟수
subscriptionIncludedReqs구독 포함 요청 수
apiKeyReqsAPI 키 요청 수
usageBasedReqs사용량 기반 과금 요청 수
bugbotUsages버그 감지 사용 횟수
mostUsedModel가장 많이 사용된 AI 모델
applyMostUsedExtensionApply에서 가장 많이 사용된 파일 확장자
tabMostUsedExtension탭에서 가장 많이 사용된 파일 확장자
clientVersionCursor 버전
email사용자 이메일

예시 응답

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

지출 데이터 가져오기

검색, 정렬, 페이지네이션을 포함해서 이번 달 지출 정보를 조회해.
POST /teams/spend

요청 본문

매개변수타입필수설명
searchTermstring아니오사용자 이름과 이메일에서 검색
sortBystring아니오정렬 기준: amount, date, user. 기본값: date
sortDirectionstring아니오정렬 방향: asc, desc. 기본값: desc
pagenumber아니오페이지 번호(1부터 시작). 기본값: 1
pageSizenumber아니오페이지당 결과 개수

응답

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

응답 필드

FieldDescription
spendCents센트 단위 총 지출액
fastPremiumRequestsFast 프리미엄 모델 요청 수
name멤버 이름
email멤버 이메일
role팀 역할
hardLimitOverrideDollars사용자 지정 지출 한도 오버라이드(달러)
subscriptionCycleStart구독 주기 시작 시각(에포크 밀리초)
totalMembers팀 전체 멤버 수
totalPages총 페이지 수

예시 응답

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

예시 요청

기본 지출 데이터:
curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
페이지네이션으로 특정 사용자 검색:
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
  }'

사용량 이벤트 데이터 가져오기

팀의 상세 사용량 이벤트를 강력한 필터링, 검색, 페이지네이션 옵션과 함께 조회해. 이 엔드포인트는 개별 API 호출, 모델 사용, 토큰 사용량, 비용에 대한 세밀한 인사이트를 제공해.
POST /teams/filtered-usage-events

요청 본문

매개변수타입필수설명
startDatenumber아니오에포크 밀리초 기준 시작 날짜
endDatenumber아니오에포크 밀리초 기준 종료 날짜
userIdnumber아니오특정 사용자 ID로 필터링
pagenumber아니오페이지 번호(1부터 시작). 기본값: 1
pageSizenumber아니오페이지당 결과 수. 기본값: 10
emailstring아니오사용자 이메일 주소로 필터링

응답

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

응답 필드 설명

FieldDescription
totalUsageEventsCount쿼리와 일치하는 사용 이벤트의 총 개수
pagination결과 탐색을 위한 페이지네이션 메타데이터
timestamp에포크 밀리초 단위의 이벤트 타임스탬프
model요청에 사용된 AI 모델
kind사용 유형(예: “Usage-based”, “Included in Business”)
maxModeMax 모드가 활성화되었는지 여부
requestsCosts요청 단위 기준 비용
isTokenBasedCall이벤트가 사용량 기반으로 과금될 때 true
tokenUsage토큰 사용량 상세(이 값은 isTokenBasedCall이 true일 때 제공)
isFreeBugbot무료 Bugbot 사용인지 여부
userEmail요청을 보낸 사용자의 이메일
period쿼리한 데이터의 날짜 범위

예시 응답

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

예시 요청

기본 페이지네이션으로 모든 사용 이벤트 조회:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
날짜 범위와 특정 사용자로 필터링:
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
  }'
특정 사용자의 사용 이벤트를 사용자 지정 페이지네이션으로 조회:
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
  }'

사용자 지출 한도 설정

팀의 각 구성원별로 지출 한도를 설정해. 이렇게 하면 팀에서 각 사용자가 AI 사용에 얼마까지 쓸 수 있는지 관리할 수 있어.
POST /teams/user-spend-limit
요청 제한: 팀별 분당 60회

요청 본문

매개변수타입필수설명
userEmailstringYes팀 구성원의 이메일 주소
spendLimitDollarsnumberYes달러 기준 지출 한도(정수만, 소수점 없음).
  • 사용자는 이미 네 팀의 구성원이어야 해
  • 정수값만 허용돼(소수 단위는 불가)
  • spendLimitDollars를 0으로 설정하면 한도가 $0으로 지정돼

Response

성공 또는 실패를 나타내는 표준화된 응답을 반환해:
{
  outcome: 'success' | 'error';
  message: string;
}

예시 응답

한도 설정 성공:
{
  "outcome": "success",
  "message": "사용자 developer@company.com의 지출 한도를 $100로 설정했습니다"
}
오류 응답:
{
  "outcome": "error",
  "message": "잘못된 이메일 형식입니다"
}

예시 요청

지출 한도 설정하기:
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

리포지토리를 추가하고 패턴을 사용해, 특정 파일이나 디렉터리가 팀에서 인덱싱되거나 컨텍스트로 쓰이지 않도록 막아줘.

팀 리포지토리 차단목록 가져오기

팀에 설정된 모든 리포지토리 차단목록을 조회해.
GET /settings/repo-blocklists/repos
응답
리포지토리 블록리스트 객체 배열을 반환해:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
예시 응답
{
  "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": ["*"]
    }
  ]
}
예시 요청
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \
  -u YOUR_API_KEY:

Repo Blocklists 업서트

제공된 repo의 기존 repository blocklist를 교체해. 참고: 이 엔드포인트는 제공된 repository에 대한 패턴만 덮어써. 다른 repo에는 영향을 주지 않아.
POST /settings/repo-blocklists/repos/upsert
요청 본문
매개변수타입필수설명
reposarray저장소 블록리스트 객체 배열
각 저장소 객체에는 다음이 포함되어야 해:
필드타입필수설명
urlstring블록리스트에 추가할 저장소 URL
patternsstring[]차단할 파일 패턴 배열(글롭 패턴 지원)
Response
업데이트된 저장소 블록리스트 목록을 반환해:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
예시 요청
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 삭제

blocklist에서 특정 repository를 제거해.
DELETE /settings/repo-blocklists/repos/:repoId
매개변수
매개변수타입필수설명
repoIdstring삭제할 리포지토리 블록리스트의 ID
응답
성공적으로 삭제되면 204 No Content를 반환해.
예시 요청
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \
  -u YOUR_API_KEY:

패턴 예시

일반적인 블록리스트 패턴:
  • * - 저장소 전체 차단
  • *.env - 모든 .env 파일 차단
  • config/* - config 디렉터리의 모든 파일 차단
  • **/*.secret - 모든 하위 디렉터리의 .secret 파일 차단
  • src/api/keys.ts - 특정 파일 차단