Models
Every run executes on a model. Set model on an agent (the default for all its runs) or on a single run. Omit it for the platform default: gpt-5.6-sol at high reasoning effort.
List models
client.models.list() returns every selectable model with USD prices per million tokens. It is the live source of truth: an id outside the list returns a 422 naming the valid choices, and new models become selectable with no SDK change (model is a plain string).
Each entry:
Advanced: filters, aliases, and SDK field coverage
GET /api/v2/models accepts query filters:
?zdr=truefilters byzdr_supported?author=openaifilters by provider slug?curated=truereturns the short Platform list instead of the full catalog (100+ models)
zdr in the response is a deprecated alias of zdr_supported (same value). The Python SDK's Model object exposes id, name, description, provider, default, max_effort, and pricing; read the ZDR fields from the raw API response.
Set the model
A per-run choice wins for that run only:
Resolution precedence, most specific first: per-run model, then the task's model, then the agent's, then the platform default.
A task can override its agent's model, which is the tool for a mixed workload — one high-stakes recurring task on a stronger model while the agent's routine work stays on the default:
effort follows the same cascade and the same null-clears-the-pin rule.
Common choices (the full catalog is larger):
Two of these have no ZDR-capable host at all: qwen3.8-max (Alibaba is the only
provider) and grok-4.5 (xAI is the only provider). We serve them because they are
worth having, not because the retention story is good — the provider may retain what you
send. They report zdr_supported: false with a retention_note on
GET /api/v2/models, they are excluded from ?zdr=true, and they are not offered in
the web app's model picker. Do not send customer data to them.
Reasoning effort
effort controls how hard the model reasons before acting: low | medium | high | xhigh | max. Higher effort means deeper reasoning and more tokens per run; lower is faster and cheaper. Omit it for the platform default: max on Claude models, high on all others.
Same shape as model: set it on the agent, override it per run, explicit null resets.
Precedence mirrors model: per-run effort, then the task's effort, then the agent's, then the platform default. Resumes and replies inherit the run's effort, so a conversation keeps the depth it started with.
Ceilings, not errors. xhigh and max are Claude-only tiers. Other models clamp a higher request down to high, never reject it, so an agent set to max stays valid when a run overrides the model. Each model's ceiling is max_effort in the catalog. An invalid tier returns a 422 naming the valid choices.
Advanced: where effort takes effect
Effort changes reasoning depth on Claude models and the GPT-5.6 family (gpt-5.6-sol / terra / luna). The remaining models — gpt-5.5, gemini-3.6-flash, glm-5.2, minimax-m3, the DeepSeek models, kimi-k2-7-code, kimi-k3, qwen3.8-max and grok-4.5 — accept the field but currently run at their native depth.
Zero data retention (ZDR)
zdr_supported=true means at least one provider for that model supports zero data retention. It does not mean every route is ZDR, and it does not mean ZDR is enabled for your account. Retention protection applies only when routing lands on a ZDR-capable host and ZDR is enabled on the key. zdr_providers names the capable hosts.
zdr_supported=false means we have no confirmed zero-data-retention host for that model — either none exists, or the model is not in the synced provider catalog. Either way treat it as may-retain: those models stay selectable on the API, so check the flag before sending customer data, or filter with GET /api/v2/models?zdr=true.
See Data Retention for the account-level picture.
Next: Agents · Data Retention
