Founding keys are opena year free at 6,000 req/hour, for the first 1,000 developersClaim yours
Documentation 29

Cursor team APIs quickstart · 3 min read

Team analytics with git-true numbers. No Teams seat required.

Cursor's admin, analytics, AI-code-tracking, and cloud-agent read surfaces for a simulated team — where every AI-attributed commit hash is a real, fetchable commit on the git hosts.

01Auth with -u KEY:
02POST the usage reads
03Pin a snapshot for CI

01 / Base URL + auth

Cursor's grammar, mirrored.

Point requests at https://cursor.sandboxapis.dev. Cursor's conventions are mirrored exactly: the API key rides HTTP Basic as the USERNAME with an empty password (curl -u KEY:), the usage endpoints are POSTs that only read (a JSON date-range body), daily-usage-data enforces the documented 30-day maximum, and unknown routes answer the same route-echo 404 the real service sends.

request.sh
curl -u any-key: "https://cursor.sandboxapis.dev/teams/members"

Using a key? Keys & rate limits → — a SandboxAPIs key rides the same -u KEY: slot and lifts the anonymous limit.

02 / The reads that matter

Usage, spend, AI code tracking.

report.sh
# Per-member daily usage (epoch-ms body, 30-day max)
curl -u any-key: -X POST "https://cursor-2026-08.snap.sandboxapis.dev/teams/daily-usage-data" \
  -H 'content-type: application/json' \
  -d '{"startDate":1782345600000,"endDate":1784851200000}'

# Spend for the cycle — events x pin-scoped pricing, to the cent
curl -u any-key: -X POST "https://cursor-2026-08.snap.sandboxapis.dev/teams/spend"

# AI-attributed commits with REAL git SHAs
curl -u any-key: "https://cursor-2026-08.snap.sandboxapis.dev/analytics/ai-code/commits?startDate=30d&endDate=0d"

03 / A real response

Live from the universe.

200 · application/json
{
  "items": [
    {
      "commitHash": "e166cc40c73c83ca1025107df0709928a79d50f6",
      "userEmail": "calliope@olympus-labs.dev",
      "repoName": "olympus-labs/parthenon",
      "branchName": "support-request-id-middleware-core",
      "isPrimaryBranch": false,
      "createdAt": "2026-07-23T16:06:21.000Z",
      "tabLinesAdded": 3,
      "composerLinesAdded": 7,
      "nonAiLinesAdded": 0,
      "totalLinesAdded": 10,
      "totalLinesDeleted": 0,
      "primaryModel": "claude-sonnet-4-6",
      "source": "ide"
    },
    {
      "commitHash": "7bffc80f0155c038c07d113ef3e73044c81a9f0d",
      "userEmail": "euterpe@olympus-labs.dev",
      "repoName": "olympus-labs/parthenon",
      "branchName": "main",
      "isPrimaryBranch": true,
      "createdAt": "2026-07-19T04:05:42.000Z",
      "tabLinesAdded": 6,
      "composerLinesAdded": 16,
      "nonAiLinesAdded": 0,
      "totalLinesAdded": 22,
      "totalLinesDeleted": 1,
      "primaryModel": "claude-sonnet-4-6",
      "source": "ide"
    }
  ],
  "pagination": {
    "numPages": 11,
    "currentPage": 1,
    "pageSize": 2,
    "hasNextPage": true,
    "hasPreviousPage": false
  }
}

04 / Pin a snapshot

Deterministic CI.

The *.snap. base URL is the whole of it — byte-identical on every request. Relative date shortcuts (startDate=7d) resolve against the snapshot's anchor, so scheduled reports are reproducible too.

.env
# reproducible in CI
export CURSOR_API_URL=https://cursor-2026-08.snap.sandboxapis.dev

Tour the universe → · Coverage manifest → · Versioning & pinning →