GROK BOT / list-model-access-providers-via-admin-api

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 state is unrestricted or legacy — both GETs return 409 until configuration seeds a custom policy.
  • Putting display names in the path — use catalog ids from the response id fields.
  • Skipping this GET before a model PUT — write only parameter ids and values the catalog lists under supportedValues.
  • Treating preview response shapes as frozen — fields can shift before GA.