
Grok Bot
Bulk set model access and parameters with the Organization API
Enable or disable one catalog model across many linked teams, optionally with the same per-model parameters map, with PUT https://api.cursor.com/organizations/teams/model-access/providers/{provider}/models/{model}. Official reference: Organization API → Model access. These routes are in preview and may change before general availability.
Authenticate with an Organization API key (Basic auth, key as username, empty password). Writes need models:* (or admin:*). Rate limit: 20 requests per minute. Writes appear in team audit logs as team_settings events. Enterprise organizations; target teams must have model access control available.
Seed a custom policy on each team first when needed: Set model access configuration with the Organization API. Discover catalog ids and supported parameters with List model access providers. For a single linked team, use Set model access and parameters.
Path and body
| Field | Rules |
|---|---|
provider |
Required catalog provider id (for example anthropic) |
model |
Required catalog model id (for example claude-opus-4-6) |
enabled |
Required boolean |
teamIds |
Required linked team IDs; maximum 100 per request |
parameters |
Optional. Same map as the single-team model PUT. allowedValues: null clears a restriction. defaultValue: null restores the catalog default |
HTTP 200 means the batch was processed, not that every row succeeded. Inspect errorCount and every results[].status. Successful rows are not rolled back. Operations are idempotent per team, so retry only failed teamIds. A 4xx or 5xx rejects the whole request and applies no changes. Response shape matches team-membership sync.
Disable Fast across linked teams
curl -X PUT https://api.cursor.com/organizations/teams/model-access/providers/anthropic/models/claude-opus-4-6 \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"teamIds": [7, 8, 9],
"enabled": true,
"parameters": {
"fast": { "allowedValues": ["false"] }
}
}'
Pin default reasoning effort across linked teams
curl -X PUT https://api.cursor.com/organizations/teams/model-access/providers/openai/models/gpt-5.4 \
-u YOUR_ORGANIZATION_API_KEY: \
-H "Content-Type: application/json" \
-d '{
"teamIds": [7, 8, 9],
"enabled": true,
"parameters": {
"reasoning": {
"allowedValues": ["low", "medium", "high"],
"defaultValue": "high"
}
}
}'
Example response:
{
"results": [
{ "teamId": 7, "status": "success" },
{ "teamId": 8, "status": "success" },
{
"teamId": 9,
"status": "error",
"errorMessage": "Team has no model access policy. Create one with PUT /teams/model-access/configuration, or enable model access in Team Settings → Models."
}
],
"successCount": 2,
"errorCount": 1
}
In that example HTTP status is still 200. Teams 7 and 8 keep the new model settings; retry team 9 only after creating its configuration.
Pitfalls
- Treating bulk HTTP 200 as all-success — always read
errorCountand per-rowstatus. - Sending more than 100
teamIds— split into additional requests. - Passing an empty
allowedValuesarray — that returns 400; usenullto clear a restriction. - Setting
defaultValueoutsideallowedValues— 400. - Using display names in the path — use catalog ids from the list GET.
- Calling with
members:*orusage:*alone — model-access writes needmodels:*oradmin:*.
Bulk provider toggles (without per-model parameters) use Enable or disable a model access provider. Preview paths can shift before GA — pin the official docs when you automate.