Set it upLink to this section
Two variables. Create a Sylphx API key with the ai:inference scope in the Sylphx console at sylphx.com.
export ANTHROPIC_BASE_URL=https://api.sylphx.ai
export ANTHROPIC_AUTH_TOKEN=sylphx_sk_... # or ANTHROPIC_API_KEY
claude
Claude Code adds /v1/messages itself, so the base URL has no path. Both ANTHROPIC_AUTH_TOKEN (sent as a bearer token) and ANTHROPIC_API_KEY (sent as x-api-key) are accepted.
Pick a modelLink to this section
Use any catalog model id, for the main model and for subagents. You are not limited to Claude models.
claude --model openai/gpt-5.5
# or in your shell profile
export ANTHROPIC_MODEL=openai/gpt-5.5
export ANTHROPIC_SMALL_FAST_MODEL=openai/gpt-5.5
Browse ids and live prices in the model catalog. Claude Code's own model names work as they are: claude-opus-5-5 reaches anthropic/claude-opus-5-5, and a [1m] suffix names the same model. Switching the model never changes what Claude Code sends.
What Claude Code sends, and what it becomesLink to this section
Every field Claude Code uses is honoured, and each one is mapped onto the chosen model's own controls. The request is checked field by field, so nothing is quietly rewritten.
| Field | Type | What it does |
|---|---|---|
thinking.type = adaptive | object | Reasoning is on and the model's own reasoning control decides how hard to think. The depth comes from output_config.effort (medium when absent). |
thinking.type = enabled | object | Reasoning on. Effort is output_config.effort when set, otherwise high. budget_tokens is accepted; depth rides the effort ladder. |
thinking.type = disabled | object | No reasoning is requested. |
thinking.display | "omitted" | "summarized" | summarized asks the model for a reasoning summary and returns it as thinking blocks. omitted asks for none; you get empty thinking blocks (or none) and a normal answer. |
output_config.effort | low | medium | high | xhigh | max | Becomes the model's reasoning effort. A level the chosen model does not offer is handled as on Responses: clamped where the model has a nearest level, refused with a typed error otherwise. |
messages[i].output_config.effort | low | medium | high | xhigh | max | Per-turn effort. Claude Code puts it on individual turns; the last one in the conversation wins and overrides the top-level output_config.effort. Only effort is allowed there. |
messages[i].role: "system" | message | A system (or developer) message in the middle of the conversation stays exactly where you put it, as a developer-level instruction. Text blocks only, with cache_control kept. |
output_config.format | { type: "json_schema", schema } | Structured output, delivered as the model’s JSON-schema output. |
context_management.edits | clear_thinking_* | keep: "all" keeps every earlier thinking block (the default behaviour). keep: { type: "thinking_turns", value: N } keeps thinking only in the last N assistant turns. |
tools, tool_choice | array | Custom tools and tool results work as on any Messages request, in parallel or one at a time. |
stream | boolean | Anthropic server-sent events, including thinking, text, and tool-use blocks. |
cache_control | object | Accepted on system blocks, tools, and content blocks. Models that cache automatically need nothing from you. |
?beta=true, anthropic-beta | query, header | Accepted. Beta flags are advisory and unknown flags are ignored; the request body decides what is used. |
Accepted and not forwardedLink to this section
Three things are accepted on purpose and never sent to the model. They are documented no-ops, not silent losses.
- safeguards: advisory client-side data (Claude Code sends a list of permission-classifier entries). Any JSON shape is accepted; it is not forwarded to the model.
- cache_control.scope:
globalororgis accepted and dropped; the cache breakpoint itself is kept. - clear_thinking edits with keep: "all": already satisfied, because earlier thinking is replayed only to the model that produced it.
What returns a 400Link to this section
Anything Sylphx cannot honour is refused before any model runs, with a typed error that names the field, for example $.output_config.verbosity.
- A field Sylphx does not support: an unknown top-level field, an unknown key inside
thinking,output_config, orcontext_management. thinking.displayother thanomittedorsummarized, or anoutput_config.effortoutside the list above, including the per-turn one. A per-turnoutput_configkey other thaneffort, and a system message with anything but text blocks, are refused too.context_managementedits other thanclear_thinking_*(for exampleclear_tool_uses_*), and athinking_turnsvalue that is not a positive integer.output_config.formatother thanjson_schema, and non-emptystop_sequences.- An unsupported
anthropic-version.
POST /v1/messages, not only Claude Code.