
Grok Bot
List model access providers with the Admin API
With a custom model-access policy on, list catalog providers and models (enabled flags plus per-model parameters) over GET https://api.cursor.com/teams/model-access/providers and GET https://api.cursor.com/teams/model-access/providers/:provider/models. Official reference: Admin API → Model access. These routes are in preview and may change before general availability.
Authenticate with a team Admin API key (Basic auth, key as username, empty password). Reads require models:read or admin:*. Generic read:* keys cannot call these routes. Rate limit: 20 requests per minute.
Both GETs return 409 when the team does not have a custom policy (state is unrestricted or legacy). Seed policy first: Set model access configuration with the Admin API.
Path segments use catalog ids such as anthropic and claude-opus-4-6. GET responses also include display names.
List every provider
curl -X GET https://api.cursor.com/teams/model-access/providers \
-u YOUR_API_KEY:
Example response:
{
"teamId": 7,
"state": "custom",
"providers": [
{
"id": "anthropic",
"displayName": "Anthropic",
"enabled": true,
"models": [
{
"id": "claude-opus-4-6",
"displayName": "Opus 4.6",
"enabled": true,
"parameters": [
{
"id": "fast",
"displayName": "Fast",
"supportedValues": ["false", "true"],
"allowedValues": ["false", "true"],
"configuredDefaultValue": null,
"catalogDefaultValue": "true"
}
]
}
]
},
{
"id": "openai",
"displayName": "OpenAI",
"enabled": true,
"models": [
{
"id": "gpt-5.4",
"displayName": "GPT-5.4",
"enabled": true,
"parameters": [
{
"id": "reasoning",
"displayName": "Reasoning",
"supportedValues": ["low", "medium", "high", "xhigh", "max"],
"allowedValues": ["low", "medium", "high"],
"configuredDefaultValue": "high",
"catalogDefaultValue": "medium"
}
]
}
]
}
]
}
| Top-level field | Meaning |
|---|---|
teamId |
Integer team ID |
state |
Policy state (custom when this GET succeeds) |
providers |
Catalog providers with nested models |
| Provider field | Meaning |
|---|---|
id |
Catalog provider id (use this in path segments) |
displayName |
Human-readable label |
enabled |
Whether the provider is allowed for the team |
models |
Nested model objects |
Model parameters fields
Each model includes a catalog-driven parameters array. Parameter ids and supported values come from the model catalog (for example fast, reasoning, effort, context). Use this GET to discover which parameters a model supports before writing.
| Field | Meaning |
|---|---|
id |
Parameter id (for example fast or reasoning) |
displayName |
Human-readable label |
supportedValues |
All values the catalog allows for this parameter on this model |
allowedValues |
Values currently allowed by the team policy |
configuredDefaultValue |
Admin-pinned default, or null when unset |
catalogDefaultValue |
Catalog default for the parameter on this model |
List models for one provider
curl -X GET https://api.cursor.com/teams/model-access/providers/anthropic/models \
-u YOUR_API_KEY:
| Path param | Rules |
|---|---|
provider |
Catalog provider id (for example anthropic) |
Parameter fields on each model match the providers response.
Pitfalls
- Calling while
stateisunrestrictedorlegacy— both GETs return 409 until configuration seeds a custom policy. - Putting display names in the path — use catalog ids from the response
idfields. - Skipping this GET before a model
PUT— write only parameter ids and values the catalog lists undersupportedValues. - Treating preview response shapes as frozen — fields can shift before GA.