PLANS / set-user-spend-limits-via-admin-api

Plans

Set user spend limits with the Admin API

Enterprise admins can cap how much each member spends on AI usage with POST https://api.cursor.com/teams/user-spend-limit, or update up to 100 members at once with the preview bulk route POST https://api.cursor.com/teams/user-spend-limits. Official reference: Admin API → Set User Spend Limit / Set User Spend Limits in Bulk.

Authenticate with a team Admin API key (Basic auth, key as username, empty password). Single-user route rate limit: 250 requests per minute per team. Bulk route: 20 requests per minute per team.

Set one member's limit

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
  }'
Field Rules
userEmail Required. Member must already be on the team
spendLimitDollars Required. Integer dollars only (no decimals). 0 means a $0 cap. null clears the limit

Success:

{
  "outcome": "success",
  "message": "Spend limit set to $100 for user developer@company.com"
}

Clear a limit

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": null
  }'

Bulk update (preview)

The bulk route is in preview and may change. Teams not yet enabled receive 403.

curl -X POST https://api.cursor.com/teams/user-spend-limits \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "updates": [
      { "userEmail": "developer@company.com", "spendLimitDollars": 100 },
      { "userEmail": "contractor@company.com", "spendLimitDollars": null },
      { "userEmail": "former-employee@company.com", "spendLimitDollars": 50 }
    ]
  }'

Response fields: requestedCount, updatedCount, unchangedCount, failedCount, plus results in request order (updated, unchanged, or failed with an error).

Behavior Detail
Missing member That row failed; other updates still apply
Invalid body / duplicate emails / >100 updates 400 and nothing applies
Repeat of an identical limit unchanged — no extra audit event

Read current spend and effective limits

curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{ "page": 1, "pageSize": 25 }'

Each teamMemberSpend row includes monthlyLimitDollars, hardLimitOverrideDollars, and effectivePerUserLimitDollars. Audit events for limit changes use user_spend_limit.

Pitfalls

  • Passing decimal dollar amounts — only integers are accepted.
  • Assuming bulk is GA — it is preview; expect schema drift and possible 403 until your team is enabled.
  • Setting a limit for someone who is not a team member — single route errors; bulk marks that row failed.
  • Confusing spendCents on /teams/spend (current-cycle usage) with the limit you just set.