
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
spendCentson/teams/spend(current-cycle usage) with the limit you just set.