cursor-docs/latest/content · Jun 26, 20:20 UTC
pages/account/teams/admin-api.txt
TXT26 KB185 lines
route: /docs/account/teams/admin-api
title: Admin API
description: Manage team members and settings programmatically with the Admin API.
Admin API
The Admin API lets you programmatically access your team's data, including member information, usage metrics, and spending details.
The Admin API uses Basic Authentication with your API key as the username.
For details on creating API keys, authentication methods, rate limits, and best practices, see the API Overview.
For org-wide actions across your teams, see Organizations and the Organization API.
Endpoints
Get Team Members
GET/teams/members
Retrieve all team members and their details.
Response Fields
teamMembers array
Array of team member objects, each containing:
id number - Unique identifier for the team member
email string - Email address of the team member
name string - Display name of the team member
role string - Role in the team (e.g., member, owner)
isRemoved boolean - Whether the member has been removed from the team
curl -X GET https://api.cursor.com/teams/members \
-u YOUR_API_KEY:
Response:
{
"teamMembers": [
{
"id": 12345,
"name": "Alex",
"email": "[email protected]",
"role": "member",
"isRemoved": false
},
{
"id": 12346,
"name": "Sam",
"email": "[email protected]",
"role": "owner",
"isRemoved": false
}
]
}
Get Audit Logs
GET/teams/audit-logs
Retrieve audit log events for your team with filtering. Track team activity, security events, and configuration changes. Rate limited to 20 requests per minute per team. See rate limits and best practices.
Parameters
startTime string | number
Start time (defaults to 7 days ago). See Date Formats
endTime string | number
End time (defaults to now). See Date Formats
eventTypes string
Comma-separated event types to filter by. Possible values: login, logout, add_user, remove_user, update_user_role, team_settings, mcp_server_config, team_api_key, user_api_key, privacy_mode, user_spend_limit, team_rule, team_repo, team_hook, team_command, create_directory_group, delete_directory_group, update_directory_group, update_directory_group_permissions, add_user_to_directory_group, remove_user_from_directory_group, bugbot_installation, bugbot_installation_settings, bugbot_repo_settings, bugbot_team_rule, bugbot_team_settings, bugbot_bulk_repo_update
search string
Search term to filter events
page number
Page number (1-indexed). Default: 1
pageSize number
Results per page (1-500). Default: 100
users string
Filter by users. See User Filtering below
Date range cannot exceed 30 days. Make multiple requests for longer periods.
Date Formats
The startTime and endTime parameters support multiple formats:
Relative shortcuts: now, today, yesterday, 7d (7 days ago), 5h (5 hours ago), 300s (300 seconds ago)
ISO 8601 strings: 2024-01-15T12:00:00Z or 2024-01-15T10:00:00-05:00
YYYY-MM-DD format: 2024-01-15 (time defaults to 00:00:00 UTC)
Unix timestamps: 1705315200 (seconds) or 1705315200000 (milliseconds)
Examples:
?startTime=7d&endTime=now - Last 7 days
?startTime=5h&endTime=now - Last 5 hours
?startTime=2024-01-15&endTime=2024-01-20 - Specific date range
?startTime=1705315200000&endTime=1705401600000 - Unix timestamps
User Filtering
The users parameter accepts multiple formats, comma-separated:
Email addresses: [email protected],[email protected]
Encoded user IDs: user_PDSPmvukpYgZEDXsoNirw3CFhy,user_kljUvI0ASZORvSEXf9hV0ydcso
You can mix formats: [email protected],12345,user_PDSPmvukpYgZEDXsoNirw3CFhy
Maximum number of users per request equals pageSize.
curl -X GET "https://api.cursor.com/teams/[email protected],[email protected]&eventTypes=login,add_user" \
-u YOUR_API_KEY:
Response:
{
"events": [
{
"event_id": "evt_abc123",
"timestamp": "2024-01-15T12:30:00.000Z",
"ip_address": "203.0.113.42",
"user_email": "[email protected]",
"event_type": "add_user",
"event_data": {
"email": "[email protected]",
"method": "manual"
}
},
{
"event_id": "evt_def456",
"timestamp": "2024-01-15T10:15:00.000Z",
"ip_address": "192.168.1.1",
"user_email": "[email protected]",
"event_type": "login",
"event_data": {
"ip_address": "192.168.1.1",
"user_agent": "Cursor/0.42.0"
}
],
"pagination": {
"page": 1,
"pageSize": 100,
"totalCount": 2,
"totalPages": 1,
"hasNextPage": false,
"hasPreviousPage": false
},
"params": {
"teamId": 12345,
"startDate": 1704729600000,
"endDate": 1705334400000
}
Get Daily Usage Data
POST/teams/daily-usage-data
Retrieve daily usage metrics for your team. Data is aggregated at the hourly level - we recommend polling this endpoint at most once per hour. Rate limited to 20 requests per minute per team. See best practices.
Parameters
startDate number Required
Start date in epoch milliseconds
endDate number Required
End date in epoch milliseconds
page number
Page number (1-indexed). When provided along with pageSize, enables pagination and returns data for all team members with a membership during the requested date range.
pageSize number
Number of users per page. When provided along with page, enables pagination and returns data for all team members with a membership during the requested date range.
Without pagination parameters, this endpoint only returns active users (those with activity during the date range). To get all team members, include both page and pageSize parameters.
When using pagination, the response includes an isActive field for each user indicating whether they had activity on that day. Members who joined after the requested period are excluded.
Date range cannot exceed 30 days. Make multiple requests for longer periods.
The fields subscriptionIncludedReqs, usageBasedReqs, and apiKeyReqs count raw usage events, not billable request units in older request-based pricing. To get accurate billable request counts, use the /teams/filtered-usage-events endpoint and sum the requestsCosts field.
Response Fields
Each object in the data array contains:
userId number - Unique identifier for the user
day string - The date this record covers (ISO date, e.g., 2024-03-18)
date number - Date as epoch milliseconds
email string - User's email address
isActive boolean - Whether the user had activity on this day (only present with pagination)
totalLinesAdded number - Total lines of code added
totalLinesDeleted number - Total lines of code deleted
acceptedLinesAdded number - AI-suggested lines added that were accepted
acceptedLinesDeleted number - AI-suggested lines deleted that were accepted
totalApplies number - Total AI code apply actions
totalAccepts number - Total accepted AI suggestions
totalRejects number - Total rejected AI suggestions
totalTabsShown number - Total Tab completions shown to the user
totalTabsAccepted number - Total Tab completions accepted by the user
composerRequests number - Number of Composer requests made
chatRequests number - Number of chat requests made
agentRequests number - Number of Agent mode requests made
cmdkUsages number - Number of Cmd+K inline edit usages
subscriptionIncludedReqs number - Requests included in the subscription plan
apiKeyReqs number - Requests made via API key
usageBasedReqs number - Usage-based (overage) requests
bugbotUsages number - Number of Bugbot usages
mostUsedModel string | null - Most frequently used AI model for the day
applyMostUsedExtension string | null - Most common file extension for apply actions
tabMostUsedExtension string | null - Most common file extension for Tab completions
clientVersion string | null - Cursor client version used
# Get data for active users only (no pagination)
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
}'
# Get data for ALL team members (with pagination)
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,
"page": 1,
"pageSize": 1000
}'
Response (without pagination - active users only):
{
"data": [
{
…