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: per-run model, then the agent's model, then the platform default.
Common choices (the full catalog is larger):
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 agent's effort, 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). Other models (glm-5.2, deepseek-v3-2, gpt-5.5, kimi-k3) accept the field but run at their native depth; kimi-k3 always reasons at its maximum internally.
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
