PLANS / get-daily-usage-data-via-org-api

Plans

Get daily usage data with the Organization API

Retrieve daily usage metrics for every member across teams linked to your organization with POST https://api.cursor.com/organizations/daily-usage-data. Each row matches the team daily-usage shape and adds an owning teamId. Official reference: Organization API → Get Daily Usage Data.

Authenticate with an Organization API key (Basic auth, key as username, empty password). Usage routes need usage:* (or admin:*). Enterprise only. For one team, use the team Admin API (Get daily usage data).

Usage aggregates at the hourly level. Poll at most once per hour. Org usage routes share the 20 requests per minute rate limit. The date range cannot exceed 30 days — split longer windows into multiple requests.

Request

curl -X POST https://api.cursor.com/organizations/daily-usage-data \
  -u YOUR_ORGANIZATION_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "organizationId": "org_abc123",
    "startDate": 1710720000000,
    "endDate": 1710892800000,
    "page": 1,
    "pageSize": 1000
  }'
Field Rules
organizationId Required. Public org id. Must match the key’s organization
startDate Optional. Epoch ms. Defaults to 7 days ago
endDate Optional. Epoch ms. Defaults to now
teamIds Optional. Org-linked teams to include. Max 100 teams per request. Omitted = all teams in the pool
page Optional. 1-indexed. Default 1
pageSize Optional. Users per page (1–1000). Default 1000
userEmail Optional. One email or a comma-separated list. userEmails is accepted as an alias

Results are paginated by user and cover every member with a membership during the requested range.

Response fields (each data row)

Field Meaning
userId Encoded user id with the user_ prefix
teamId Org-linked team this row belongs to
day ISO date for the record (e.g. 2024-03-18)
date Date as epoch milliseconds
email User email
isActive Whether the user had activity that day
totalLinesAdded / totalLinesDeleted Lines of code added / deleted
acceptedLinesAdded / acceptedLinesDeleted AI-suggested lines accepted
totalApplies / totalAccepts / totalRejects Apply / accept / reject counts
totalTabsShown / totalTabsAccepted Tab completion shown / accepted
composerRequests / chatRequests / agentRequests / cmdkUsages Surface request counts
subscriptionIncludedReqs / apiKeyReqs / usageBasedReqs Raw usage-event counters (not billable request units under older request-based pricing)
bugbotUsages Bugbot usages that day
mostUsedModel Most-used model id, or null
applyMostUsedExtension / tabMostUsedExtension Common extensions, or null
clientVersion Cursor client version, or null

Response also includes period (startDate, endDate) and pagination (page, pageSize, totalUsers, totalPages, hasNextPage, hasPreviousPage).

Pitfalls

  • Body organizationId must match the Organization API key or the call is rejected.
  • Ranges longer than 30 days are rejected — page the calendar instead of widening one request.
  • At most 100 teamIds per call.
  • Prefer summing chargedCents from filtered usage events (or requestsCosts under older request-based pricing) when you need billable cost; the *Reqs counters here are raw event counts.
  • Mint a key with usage:* or admin:* for reporting.