model field says where the model runs and who pays:
A model name always says who pays. A name with no provider part (
gpt-5) is refused, and Orca never translates a name from one catalog into another’s: anthropic/claude-sonnet-4.5 is OpenRouter’s name for that model, not Anthropic’s, so it does not run on your Anthropic key.
Provider keys are separate from your Orca API key and from tool credentials in vaults.
Discover Orca credit models
With the client configured as in the quickstart:GET /v1/models lists OpenRouter’s catalog as Orca credit models. A listed model is not a promise that every agent setting or tool works with it.
GET /api/models (an Orca extension, outside /v1) lists every model you can pick, grouped by who pays: an Orca credit group with OpenRouter’s input and output price per million tokens, then one group per provider you have a key for, billed by that provider. It also returns the OpenRouter credit fee in effect:
null where OpenRouter has no fixed price. They are shown for choosing a model; the charge is always what OpenRouter reports for the call. Orca reads each list at most every 10 minutes and keeps the last good copy; a group whose list cannot be read has available: false and no models.
What Orca credit costs
Each call on Orca credit is charged what OpenRouter reports it cost, including its cache and reasoning tokens, plus OpenRouter’s credit fee (5.5% today). Orca adds no markup and keeps no price list: the price is OpenRouter’s at the time of the call. Your usage shows each call’s cost, the provider’s cost and the fee.web_search runs on your agent’s own model, through the same route and key as its calls, and whoever pays for that model pays for the search. On an Orca credit model the search is charged like a call: what OpenRouter reports for it, plus the fee. On your own OpenRouter, OpenAI or Anthropic key it uses that provider’s web search on your key, the provider bills it, and Orca charges nothing. A search never falls back to Orca credit or to another model. The answer and its cited links come back to your agent’s model.
Connect a provider
Provider management is an Orca extension under/api/providers, outside the OpenAI /v1 surface. Use ordinary authenticated HTTP requests, not client.beta.agents methods, at https://api.orcapods.ai without /v1. Setting and removing a key needs the admin role; in the dashboard it is BYOK under Settings, a page titled Providers.
unsupported_agent_fields. It never returns the stored key.
Supported IDs are
openai, anthropic, openrouter, vercel, and cheaperinference. Catalogs marked public_catalog can be read without a provider key; other catalogs require one. Provider catalog requests still require Orca authentication.
Submit keys from trusted backend code or your secret-management workflow. Do not paste a real provider key into documentation examples, browser code, command history, or logs. The service validates a new key before accepting it; an invalid key returns HTTP 400.
Select the model explicitly
Useorca/openrouter/<OpenRouter id> for Orca credit, or <provider>/<id> for your own key. An OpenRouter id already contains a namespace, so it becomes orca/openrouter/<vendor>/<model-name> or openrouter/<vendor>/<model-name>. Get the actual id from the catalog rather than copying a stale example.
model), creating a session with an inline agent (on agent.model), and publishing or copying a kit. A save is refused when:
- the name has no provider part, or uses
orca/with any provider but OpenRouter; - it names your own key for a provider where you have none: “Add your Anthropic key in Settings, Providers, or choose an Orca credit model”. When OpenRouter offers the same name, the message gives its Orca credit name instead: “Add your Anthropic key in Settings, Providers, or use orca/openrouter/anthropic/claude-sonnet-4.5 for Orca credit”;
- the provider does not list the model: “Anthropic does not offer the model …”;
- with your key saved, it is OpenRouter’s name for a model the provider lists under another id, such as
anthropic/claude-sonnet-4.5: the message namesorca/openrouter/anthropic/claude-sonnet-4.5for Orca credit,openrouter/anthropic/claude-sonnet-4.5with your OpenRouter key, or the provider’s own id with its key.
Orca-Warning header saying so. Nothing else changes in the response.
A turn checks your key again when it starts. Nothing ever falls back from your key to Orca credit, or from Orca credit to your key.
Check capability limits
- Inspect
unsupported_agent_fieldsbefore sending provider-specific settings. - Anthropic does not accept JSON-schema
text.format, non-defaulttext.verbosity, or non-autoservice_tierin this integration. - On your own OpenAI key, some reasoning models refuse tools at their default reasoning effort: OpenAI refuses
gpt-5.6-lunawith any tool unlessreasoning.effortisnone, and the turn fails with “the provider rejected the request (HTTP 400)”. Setreasoning.effort: noneon such agents. Orca never sets it for you. web_searchacceptsallowed_domains,location,context_sizeandmodeliveordisabled;mode: cachedis not available. On an Anthropic model,context_sizemust staymedium, the default.- Vercel AI Gateway and CheaperInference keys have no web search. Saving an agent with
web_searchon their models is refused with HTTP 400 onagent.tools; usemode: disabled, or a model on Orca credit or on an OpenRouter, OpenAI or Anthropic key. - If a provider refuses a search for its model, the tool returns an error naming the model, and the turn goes on.
reasoning.summaryis not available on any route; reasoning summaries are not exposed. Saved agents that set it are rejected on create or update.- A catalog entry is not a promise of tool support or availability on your provider account.
Rotate and remove keys carefully
Who pays is fixed when a turn starts: Orca reads your keys then, and every call of that turn, its subagents’ included, runs on them. Saving, replacing or removing a key applies from the next turn. Removing a key makes the next turn of sessions using it fail with HTTP 400 onagent.model; it never moves them to Orca credit. Restore a valid key before continuing affected sessions.
When credit runs out on either side, the turn ends with usage_limit_exceeded and a param that says whose: orca_credit for your Orca credit, provider_quota for your own key’s provider account. See errors.
Switch who pays for one session
Orca never switches on its own. When one side runs out, top it up, or switch that session to a model on the other side:- The model is checked as a save is, and must run the agent’s settings on its provider.
- It applies from the session’s next turn. While a turn runs, including one waiting for your function results, the switch is refused with HTTP 409.
- It is for that session only. The agent, the session’s
/v1object and the agent’s other sessions keep the agent’s model.GET /api/sessions/{session_id}/modelshows the model the next turn uses, the agent’s own, andpayer(orca_creditorown_key). - Switching back to the agent’s own model removes the switch.
openrouter/<id> and orca/openrouter/<id>.