model. Set it once for an organization or project, then change it without touching code.
A typical use: your app runs on openai/gpt-5-mini everywhere, then you move a single high-stakes project to anthropic/claude-opus-5 by editing one rule.
Set a default model
Default-model rules are managed through the Management API with a management key that has thecontrols:write scope. The Rules page in the platform does not edit them. Create a route rule whose config holds the model in default_model. Send default_model without a type field:
The most specific rule wins: a project default overrides the organization default. Setting
"default_model": null on a project rule records an explicit “no default” for that project.
To change the model later, send the new config with PATCH /management/v1/controls/rules/{uuid}. List existing rules with GET /management/v1/controls/rules. See the rules reference for every field.
Rules are a Control Plane feature. On the Gateway plan, creating the rule answers 402 with plan_required.
The default must be allowed at its scope
A default model has to pass model access at the same scope. If it doesn’t, the API refuses the rule with400:
400 until you change or remove that
default.
Callers can still pick a model
Passing an explicitmodel always takes precedence over the default, as long as model access allows it. Use this for per-call trade-offs: cheaper models for background jobs, higher-quality ones for user-facing replies.
If the requested model isn’t allowed, the call fails with 403 and says which condition failed; it doesn’t fall back to the default. See what a blocked call returns.
A call with no model and no default-model rule in its scope is refused; the Messages endpoint, for example, answers 400 with model is required. Opper does not pick a model for you.