IronClaw takes a custom API in one four-field block: a [llm.default] slot in ~/.ironclaw/reborn/config.toml carrying provider_id, base_url, model and api_key_env — or, when no slot exists, the LLM_BACKEND / LLM_BASE_URL / LLM_API_KEY environment variables it falls back to. Both forms are current and documented. What the configuration pages do not collect in one place is the list of things a custom endpoint then does not get — native streaming, model discovery, Anthropic cache_control breakpoints and accurate cost display among them — and that list is the part worth reading before you pick a provider.
One disambiguation first, because the search results are dominated by other products. This page is about github.com/nearai/ironclaw, described by its own repository metadata as "IronClaw is an Agent OS focused on privacy, security and extensibility": Rust, not archived and not a fork, 12,626 stars, created February 3, 2026 and last pushed on September 21, 2026 (GitHub API, same day). It is not the Corsair gaming mouse of that name, the Sanguine Productions tabletop RPG, the IRONCLAW crypto token, or the unrelated JoasASantos/ironclaw repository — none of whose prices or configuration belong anywhere near this page. Canonical documentation is docs.ironclaw.com and the repository's own docs/ tree; a third-party Mintlify mirror ranks for the same titles and can be stale.
Attribution is worth quoting rather than paraphrasing, because the vendor's own surfaces differ: ironclaw.com puts "Built by" beside a NEAR logo and the words "Near Foundation" in the body, and "— by NEAR AI" in the footer, while the GitHub organisation is nearai.
The minimal IronClaw custom provider configuration
The slot struct in ironclaw_config accepts exactly four optional fields, and its own doc comments describe them as overrides of the catalog entry: model overrides the provider's default_model, api_key_env overrides its api_key_env, and base_url overrides its default_base_url. The provider documentation adds that base_url "also works on any other provider when you need to route it through a proxy or a regional endpoint" — so this is not only a generic-adapter feature.
[llm.default]
provider_id = "openai_compatible"
base_url = "https://api.kunavo.com/v1"
model = "claude-sonnet-4-6"
api_key_env = "LLM_API_KEY"Three rules that bite. Omitting base_url is fatal, not defaulted: the docs say it "leaves the slot pointing nowhere and model resolution fails", and the openai_compatible catalog entry carries base_url_required: true. api_key_env takes a variable name, never a key — a pasted secret is "rejected at parse time, not silently accepted", and ironclaw config set <provider>.api_key prompts with input hidden instead. Nothing applies until a restart: config set "never restarts anything", it prints the ironclaw service restart step you still have to run. And do not expect config set to write the slot for you — the configuration page lists [llm.default] among the sections "edited in config.toml directly", and config set "rejects an unsupported key rather than silently doing nothing".
The environment form is the documented fallback when [llm.default] is absent, and the docs settle the choice plainly: "Both work … Prefer the TOML slot for a permanent install, and the environment form for one-off runs and containers."
export LLM_BACKEND=openai_compatible
export LLM_BASE_URL=https://api.kunavo.com/v1
export LLM_API_KEY=sk-kn-...
export LLM_MODEL=claude-sonnet-4-6
# optional: LLM_EXTRA_HEADERS is the openai_compatible entry's
# extra_headers_env; the timeout is a general .env.example setting
export LLM_EXTRA_HEADERS=X-Title:MyAgent
export LLM_REQUEST_TIMEOUT_SECS=120Resolution order is compiled defaults < config.toml < environment variables < CLI flags, so an exported variable quietly outranks the file you just edited. The CLI route avoids hand-editing altogether: ironclaw models list, then ironclaw models set-provider <id> --model <model>, then ironclaw models status. Confirm your paths with ironclaw config path rather than trusting either documented location — the quickstart page says everything lives under ~/.ironclaw while the configuration and onboarding pages say ~/.ironclaw/reborn. One operational trap for hosted users: the configuration page says ironclaw service commands "do not work on a NEAR AI hosted instance — there is no user service manager for them to talk to", so you SSH in for ironclaw config and restart from the Agent Dashboard instead. All quotations read from the main branch on September 21, 2026.
What a custom endpoint does not reach
These are IronClaw's own statements about its intended runtime behaviour, read from the source and contract files on main. They are not observed runs, and main was ahead of the 1.4.0 release tag — published August 28, 2026, per the GitHub releases API — when they were read.
| Capability | On a custom OpenAI-compatible slot | Where that is stated |
|---|---|---|
| Native SSE streaming | No — buffered. Enabled "only where IronClaw can observe an authoritative terminal event: NEAR AI, Anthropic OAuth, and Codex Responses". The Anthropic API-key transport and OpenRouter are buffered too | ironclaw_llm/CONTRACT.md |
| Model discovery | No — can_list_models is false for openai_compatible and openrouter, so ids are typed by hand, exactly | assets/providers.json |
| Base URL via environment | Yes for this one — openai_compatible declares LLM_BASE_URL. It is one of only 7 of the 26 catalog entries that declare a base-URL variable at all; openrouter, together, fireworks, groq, deepseek, mistral and the rest must use the config.toml field | assets/providers.json |
| Tool schemas as written | No — rewritten into OpenAI strict mode at the provider boundary: additionalProperties: false, all properties forced into required, optionals made nullable | ironclaw_llm/CONTRACT.md |
| Prompt caching | Mixed, not simply absent. Anthropic cache_control breakpoints are emitted only by the two Anthropic transports, so an OpenAI-compatible slot sends none. But OpenAI's prompt_cache_key does reach it: the flag is "set true by the generic OpenAI-compatible, DeepSeek, and OpenRouter factories", with the loop-host gateway as the one seam that supplies a value. Whether your endpoint then caches anything is its own behaviour, which IronClaw neither asks for nor sees | ironclaw_llm/CONTRACT.md |
| Cross-provider failover | No — the failover decorator swaps between NEAR AI models via NEARAI_FALLBACK_MODEL; anything across provider types "requires manual construction" | ironclaw_llm/CONTRACT.md |
| Tool-turn response cache | Never cached — complete_with_tools() is excluded because of side effects | ironclaw_llm/CONTRACT.md |
| Selectable by users on a multi-user install | Not automatically — "Provider configuration alone does not publish models to users"; an administrator adds each id under Settings → Inference → User model access | Provider documentation |
IronClaw's catalog is a chat catalog, and Kunavo serves no embedding, text-to-speech or speech-to-text model, so any part of your setup that needs one has to point somewhere else entirely.
IronClaw's cost display is not your bill
Two separate paths compute money inside IronClaw, they disagree, and neither one reads your provider. price_usage() in ironclaw_common prices from a hardcoded per-token table and falls back to default_cost() — 0.0000025 input and 0.00001 per token, a GPT-4o-shaped $2.50 / $10.00 per million — with the stated reasoning that "a new paid model never silently prices at zero". Meanwhile the loop host's StaticModelCostTable does the opposite for budget reservations: a profile missing from its table "falls back to None, which the accountant treats as zero-cost". And on the llm_costs path the cache-read discount is guessed from the model name by substring — claude divides by ten, gpt or an o1/o3/o4 prefix by two, everything else by one.
The practical consequence is that IronClaw's budget.user_daily_usd, budget.pause_at and the rest of the [budget] keys police an estimate, not a charge. They are still worth setting on an always-on agent — a runaway loop stopped early is the point — but reconcile against the usage your provider recorded, not against the number on screen.
A worked estimate for an agent day
This is token arithmetic, not a measured task cost and not a bill ceiling. Assume one day of agent activity totalling 1,000,000 uncached input tokens and 40,000 output tokens — an assumption for illustration, chosen because an always-on runtime accumulates input through heartbeat ticks and routines rather than through long replies. Rates are live Kunavo catalog prices per million tokens.
| Model | Input / output per 1M | Estimated agent day | Vision patterns match this id? |
|---|---|---|---|
| Claude Haiku 4.5 | $0.40 / $2.00 | $0.480 | Yes |
| Gemini 3.8 Flash | $0.525 / $2.625 | $0.630 | No |
| GPT-5.6 Terra | $0.70 / $4.20 | $0.868 | No |
| Claude Sonnet 4.6 | $1.20 / $6.00 | $1.440 | Yes |
| Claude Opus 5 | $2.00 / $10.00 | $2.400 | Yes |
The last column is the useful surprise, and it is a property of the id string rather than of the model. vision_models.rs substring-matches a fixed list that includes claude-opus-, claude-sonnet-, claude-haiku- and claude-fable-, so those ids route image attachments; the other ids in the table above match none of gpt-4o, gemini-1.5, gemini-2 or the rest of the list and would be classified text-only. On a miss the loop-host gateway sends the message text without the image parts and raises no error — the durable transcript keeps an <attachments> pointer, but the model never sees the image. Read the pattern list against the exact id you intend to type before assuming image input works. Scale the dollar figures by your own days before treating them as a budget. Kunavo's catalog amount is a billing floor rather than a cap: when the upstream reports its charge, the bill is the greater of catalog cost and upstream cost times the applicable markup. Cache charges and external tools sit outside this example, and the minimum top-up is $10 in prepaid credit — a funding minimum, not a task fee or a subscription. See billing details.
Which route wins, and what IronClaw itself costs
The software is free: the repository root carries both LICENSE-APACHE and LICENSE-MIT, and its README states MIT OR Apache 2.0. There is no paid edition of the binary and no licence fee. What you pay is tokens, plus hosting if you take the vendor's.
| Route | Published price | Wins when |
|---|---|---|
| Self-hosted IronClaw | $0 software, MIT OR Apache-2.0 | You already run a host and want full control of the endpoint |
| ironclaw.com Starter | Currently $0 with $5 listed struck through; "$5 credits included" | Trying the hosted path. Read it as promotional, not a permanent $0 plan |
| ironclaw.com Basic | $20/month, "$20 credits included" | "up to 2 agent instances", usage pooling across deployments |
| ironclaw.com Pro+ | $200/month, "$200 credits included" | "up to 5 agent instances", early access to advanced models, priority support |
| NEAR AI Cloud tokens | $0.15 / $0.50 per 1M (GLM 5.3 Flash) up to $3.30 / $16.50 (Kimi K3) | The vendor's recommended default, and the only backend the built-in failover swaps models on |
| An OpenAI-compatible gateway | Your gateway's per-token rates | You switch families per task and want one key — accepting buffered streaming and hand-typed ids |
| Local model via Ollama | No per-request charge | Small or private work; raise LLM_REQUEST_TIMEOUT_SECS as .env.example suggests |
Hosted plan prices read from ironclaw.com on September 21, 2026; there is no /pricing page, the plans live on the homepage, and the rendered markup shows the $5 inside a struck-through span with $0 as the live price. The homepage also claims "Spin up to 5 agents in a Trusted Execution Environment with up to 130M tokens per month" — that sentence sits above all three cards and names no plan, so do not attach it to one. Three things this guide could not establish and will not guess: whether the hosted plans permit a third-party key at all, what the included credits actually buy or what happens when they run out, and which plan the 130M figure belongs to. Token rates read from near.ai/pricing the same day, which states "There is no platform fee on top of the model rate" and covers its confidential text models only.
One privacy boundary to state plainly, because it is the reason people choose this runtime. The controls IronClaw's own README and security page describe — secrets "encrypted at rest" and injected at the host boundary, the WASM sandbox for untrusted tools, endpoint allowlisting, leak detection — are local controls over the machine running the agent. The hardware attestation is a separate, NEAR AI Cloud property: near.ai says inference there "executes in an Intel TDX + NVIDIA confidential-GPU enclave" and that "each response carries a verifiable hardware quote". Pointing IronClaw at a third-party endpoint sends prompt content to that endpoint under that endpoint's terms, and nothing in either list follows it there. The vendor-authored "OpenClaw vs IronClaw" table on ironclaw.com is marketing by one side, not a neutral comparison — and be careful with search results, because in a results-page sample taken on September 17, 2026, the four query forms best api for ironclaw, cheapest api for ironclaw, best model for ironclaw and ironclaw custom provider each returned eight or more OpenClaw results in the top ten, whose model rankings describe a different product.
Set it up, then check the first charge
Kunavo publishes an OpenAI-shaped endpoint at https://api.kunavo.com/v1 and an Anthropic-shaped one, which map onto the openai_compatible and anthropic provider ids. Kunavo has not runtime-tested IronClaw, so treat the block above as a documented-protocol starting point and not as a compatibility claim: keep a working route available, run one bounded task, and read the charge your account actually recorded. If you drive Goose from IronClaw over ACP — .env.example documents the Agent Client Protocol sandbox and the command ironclaw acp add goose — the Goose integration covers that side separately, and creating a Kunavo account funds a key when you are ready. For the surrounding choices, see the OpenAI-compatible API reference, OpenRouter alternatives and AI cost optimization.
FAQ
How do I set a custom provider in IronClaw?
Write a [llm.default] slot in ~/.ironclaw/reborn/config.toml with provider_id, base_url, model and api_key_env — those are the four optional fields the slot struct accepts, and base_url overrides the provider's default_base_url for any provider id, not just the generic one. Use provider_id = "openai_compatible" when your endpoint has no dedicated catalog entry; IronClaw's provider documentation names vLLM, LiteLLM, LM Studio and an internal gateway as the cases it is for. api_key_env must be an environment-variable NAME, because a literal key pasted there is rejected when the file is parsed rather than silently accepted. `ironclaw config set` is not the tool for this: the configuration documentation lists `[llm.default]` among the sections "edited in config.toml directly", and says `config set` accepts only keys with a routing destination and rejects an unsupported key. Edit the file, or use `ironclaw models set-provider`, which the provider documentation says writes the selection into config.toml as a model slot. Then restart — nothing applies until `ironclaw service restart`. Checked against the nearai/ironclaw main branch on September 21, 2026.
Does IronClaw work with OpenRouter?
Yes, and the two documented ways of doing it disagree with each other. The compiled-in provider catalog carries a dedicated openrouter entry on its own open_router protocol, keyed by OPENROUTER_API_KEY, and the provider documentation says OpenRouter, Together AI and Fireworks now have their own provider_id entries and should be used directly rather than through the generic adapter. The repository's .env.example still ships the older recipe, setting LLM_BACKEND=openai_compatible with LLM_BASE_URL pointed at OpenRouter's API. Both files were on the main branch on September 21, 2026. Prefer the dedicated id; note that the openrouter entry declares no base URL environment variable, so routing it through a proxy needs the config.toml base_url field instead. On price, OpenRouter's own FAQ (openrouter.ai/docs/faq, read September 21, 2026) states it passes through underlying provider pricing without markup, charges 5.5% with an $0.80 minimum on card credit purchases and 5% on crypto, and charges 5% of the equivalent OpenRouter cost on bring-your-own-key usage above a monthly allowance that the same page puts at $25,000 on pay-as-you-go.
What is the best API for IronClaw?
There is no single winner, and searching for one is unusually misleading here because the results page rewrites this brand: in a sample taken on September 17, 2026, "best api for ironclaw" and "cheapest api for ironclaw" each returned eight or more OpenClaw results in the top ten, so rankings you find under those phrases often describe a different product. Judged on what IronClaw's own code does, four routes separate cleanly. NEAR AI Cloud is the vendor's recommended default and the only backend the built-in failover actually swaps models on. A direct vendor API wins when you use one vendor all day and want its native caching — IronClaw emits Anthropic cache_control breakpoints only on its two Anthropic transports, though an OpenAI-compatible slot does still carry OpenAI's prompt_cache_key, so an endpoint with automatic prefix caching is not shut out. An OpenAI-compatible gateway wins when you want one key and one balance across families, at the cost of buffered rather than native streaming and hand-typed model ids. A local model through Ollama wins for private, small work with no per-request charge. Pick on which of those constraints you can absorb, not on a headline rate.
What is the cheapest API for IronClaw?
Cheapest listed price and lowest cost to finish the task are different claims, and an always-on agent widens the gap because heartbeat ticks, routines and background jobs bill whether or not you are typing. For a price anchor on the vendor's own recommended backend, near.ai/pricing listed GLM 5.3 Flash at $0.15 input and $0.50 output per million tokens as its least expensive confidential text model and Kimi K3 at $3.30 and $16.50 as its most expensive, with no platform fee on top of the model rate, on September 21, 2026. Whatever endpoint you pick, budget from the provider's own usage reporting rather than from IronClaw's displayed cost, which is computed from a hardcoded table and falls back to a GPT-4o-shaped rate for a model id it does not recognise.
What is the best model for IronClaw?
IronClaw imposes two mechanical constraints on that choice before capability enters into it, and both are decided by the literal text of the model id. Image attachments are routed by substring match against a fixed list of vision patterns in vision_models.rs — the source comment warns that a miss means image attachments are silently dropped — so an id renamed or aliased away from forms like claude-sonnet-, gpt-4o, gemini-2 or pixtral loses image input without an error. Thinking prompts are safer: the corresponding reasoning pattern list is currently empty, so unknown names, aliases and native-thinking models all fall through to the direct-answer format. Beyond that, prefer a model that holds up under tool calling, because tool definitions sent over the RigAdapter path are rewritten into OpenAI strict mode at the provider boundary. All three behaviours read from the main branch on September 21, 2026.
Can I point IronClaw at Kunavo?
Kunavo publishes an OpenAI-shaped endpoint at https://api.kunavo.com/v1 and an Anthropic-shaped one at https://api.kunavo.com/v1/messages, which map onto IronClaw's openai_compatible and anthropic provider ids respectively. That is a protocol match read from both sides' documentation, not a tested integration: Kunavo has run no IronClaw-to-Kunavo request and does not claim verified compatibility. Two specifics to check yourself before relying on it. The openai_compatible entry sets base_url_required, so the slot fails model resolution without a base URL. And the exact path suffix IronClaw appends under the anthropic protocol was not confirmed in this research — the documented default for ANTHROPIC_BASE_URL is the bare host https://api.anthropic.com, which implies the runtime adds the path, but confirm it with one request before committing a config. The minimum Kunavo top-up is $10 in prepaid credit.
Repository metadata, providers.json, CONTRACT.md, llm_costs.rs, vision_models.rs, the docs/ tree, ironclaw.com and near.ai/pricing all read on September 21, 2026, from the main branch rather than the 1.4.0 release tag. No IronClaw request has been sent to a Kunavo endpoint; every compatibility statement here is a reading of both sides' documentation. Kunavo token rates come from the live catalog, and every dollar example is illustrative token arithmetic.