Model access

Decide which models your organization, each team, each person and each service key may use, with allow and deny lists that only ever narrow.

2 min read Updated View as Markdown Report a problem

Your connections decide which models exist for your organization. Model access decides who may use them.

How rules stack

A rule can be set at four levels:

LevelApplies to
OrganizationEvery request
TeamRequests attributed to members of the team
PersonRequests made with that person’s keys
Service keyRequests made with that one service key

The organization sets the ceiling, a team can only narrow it, a person narrows it further, and a single service key can be pinned tighter still. If any level blocks a model, the request is blocked: a narrower level can never re-allow what a broader one denied.

Each rule is one of:

ModeEffect
Allow only these modelsEvery model not listed is refused at this level
Deny these modelsListed models are refused at this level

Setting rules

Model access lists are on Admin → Providers. Viewing them is open to provider admins; changing them requires the Set spend budgets, rate limits, model access, and guardrails permission (admin:budgets). Changes apply from the next request.

What a refused request gets

{
  "error": {
    "type": "model_not_allowed",
    "message": "…",
    "scope": "team"
  }
}

The status is 403. scope names the level that refused (org, team, user or service-key), and the message names the model; the allowed list itself is not disclosed to the caller. Refusals appear on the Activity page and can be delivered as the governance.model_access_denied webhook event.

On a native route, if a rule restricts models and ACOG cannot tell which model the request is for (an opaque or multipart body), the request is refused with 403 model_unverifiable rather than let through.

With auto mode and fallbacks

Model access applies to the model that will actually answer, including the model auto mode resolves auto to. The policy-block fallback is not used when its model is not allowed.

GET /v1/models lists every declared model and does not apply model access, so it can list models a rule would refuse for that key.