Files
openclaw/docs/reference/api-usage-costs.md

143 lines
5.1 KiB
Markdown
Raw Normal View History

2026-01-18 14:49:19 +00:00
---
summary: "Audit what can spend money, which keys are used, and how to view usage"
read_when:
- You want to understand which features may call paid APIs
- You need to audit keys, costs, and usage visibility
- Youre explaining /status or /usage cost reporting
title: "API Usage and Costs"
2026-01-18 14:49:19 +00:00
---
2026-01-31 21:13:13 +09:00
2026-01-18 14:49:19 +00:00
# API usage & costs
This doc lists **features that can invoke API keys** and where their costs show up. It focuses on
2026-01-30 03:15:10 +01:00
OpenClaw features that can generate provider usage or paid API calls.
2026-01-18 14:49:19 +00:00
## Where costs show up (chat + CLI)
**Per-session cost snapshot**
2026-01-31 21:13:13 +09:00
2026-01-18 14:49:19 +00:00
- `/status` shows the current session model, context usage, and last response tokens.
- If the model uses **API-key auth**, `/status` also shows **estimated cost** for the last reply.
**Per-message cost footer**
2026-01-31 21:13:13 +09:00
2026-01-18 14:49:19 +00:00
- `/usage full` appends a usage footer to every reply, including **estimated cost** (API-key only).
- `/usage tokens` shows tokens only; OAuth flows hide dollar cost.
**CLI usage windows (provider quotas)**
2026-01-31 21:13:13 +09:00
2026-01-30 03:15:10 +01:00
- `openclaw status --usage` and `openclaw channels list` show provider **usage windows**
2026-01-18 14:49:19 +00:00
(quota snapshots, not per-message costs).
See [Token use & costs](/reference/token-use) for details and examples.
2026-01-18 14:49:19 +00:00
## How keys are discovered
2026-01-30 03:15:10 +01:00
OpenClaw can pick up credentials from:
2026-01-31 21:13:13 +09:00
2026-01-18 14:49:19 +00:00
- **Auth profiles** (per-agent, stored in `auth-profiles.json`).
- **Environment variables** (e.g. `OPENAI_API_KEY`, `BRAVE_API_KEY`, `FIRECRAWL_API_KEY`).
- **Config** (`models.providers.*.apiKey`, `tools.web.search.*`, `tools.web.fetch.firecrawl.*`,
`memorySearch.*`, `talk.apiKey`).
- **Skills** (`skills.entries.<name>.apiKey`) which may export keys to the skill process env.
## Features that can spend keys
### 1) Core model responses (chat + tools)
2026-01-31 21:13:13 +09:00
2026-01-18 14:49:19 +00:00
Every reply or tool call uses the **current model provider** (OpenAI, Anthropic, etc). This is the
primary source of usage and cost.
See [Models](/providers/models) for pricing config and [Token use & costs](/reference/token-use) for display.
2026-01-18 14:49:19 +00:00
### 2) Media understanding (audio/image/video)
2026-01-31 21:13:13 +09:00
2026-01-18 14:49:19 +00:00
Inbound media can be summarized/transcribed before the reply runs. This uses model/provider APIs.
- Audio: OpenAI / Groq / Deepgram (now **auto-enabled** when keys exist).
- Image: OpenAI / Anthropic / Google.
- Video: Google.
See [Media understanding](/nodes/media-understanding).
### 3) Memory embeddings + semantic search
2026-01-31 21:13:13 +09:00
2026-01-18 14:49:19 +00:00
Semantic memory search uses **embedding APIs** when configured for remote providers:
2026-01-31 21:13:13 +09:00
2026-01-18 14:49:19 +00:00
- `memorySearch.provider = "openai"` → OpenAI embeddings
- `memorySearch.provider = "gemini"` → Gemini embeddings
- `memorySearch.provider = "voyage"` → Voyage embeddings
- `memorySearch.provider = "mistral"` → Mistral embeddings
- `memorySearch.provider = "ollama"` → Ollama embeddings (local/self-hosted; typically no hosted API billing)
- Optional fallback to a remote provider if local embeddings fail
2026-01-18 14:49:19 +00:00
You can keep it local with `memorySearch.provider = "local"` (no API usage).
See [Memory](/concepts/memory).
feat(onboarding): add web search to onboarding flow (#34009) * add web search to onboarding flow * remove post onboarding step (now redundant) * post-onboarding nudge if no web search set up * address comments * fix test mocking * add enabled: false assertion to the no-key test * --skip-search cli flag * use provider that a user has a key for * add assertions, replace the duplicated switch blocks * test for quickstart fast-path with existing config key * address comments * cover quickstart falls through to key test * bring back key source * normalize secret inputs instead of direct string trimming * preserve enabled: false if it's already set * handle missing API keys in flow * doc updates * hasExistingKey to detect both plaintext strings and SecretRef objects * preserve enabled state only on the "keep current" paths * add test for preserving * better gate flows * guard against invalid provider values in config * Update src/commands/configure.wizard.ts Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * format fix * only mentions env var when it's actually available * search apiKey fields now typed as SecretInput * if no provider check if any search provider key is detectable * handle both kimi keys * remove .filter(Boolean) * do not disable web_search after user enables it * update resolveSearchProvider * fix(onboarding): skip search key prompt in ref mode * fix: add onboarding web search step (#34009) (thanks @kesku) --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> Co-authored-by: Shadow <hi@shadowing.dev>
2026-03-06 19:09:00 +00:00
### 4) Web search tool
2026-01-31 21:13:13 +09:00
feat(onboarding): add web search to onboarding flow (#34009) * add web search to onboarding flow * remove post onboarding step (now redundant) * post-onboarding nudge if no web search set up * address comments * fix test mocking * add enabled: false assertion to the no-key test * --skip-search cli flag * use provider that a user has a key for * add assertions, replace the duplicated switch blocks * test for quickstart fast-path with existing config key * address comments * cover quickstart falls through to key test * bring back key source * normalize secret inputs instead of direct string trimming * preserve enabled: false if it's already set * handle missing API keys in flow * doc updates * hasExistingKey to detect both plaintext strings and SecretRef objects * preserve enabled state only on the "keep current" paths * add test for preserving * better gate flows * guard against invalid provider values in config * Update src/commands/configure.wizard.ts Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * format fix * only mentions env var when it's actually available * search apiKey fields now typed as SecretInput * if no provider check if any search provider key is detectable * handle both kimi keys * remove .filter(Boolean) * do not disable web_search after user enables it * update resolveSearchProvider * fix(onboarding): skip search key prompt in ref mode * fix: add onboarding web search step (#34009) (thanks @kesku) --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> Co-authored-by: Shadow <hi@shadowing.dev>
2026-03-06 19:09:00 +00:00
`web_search` uses API keys and may incur usage charges depending on your provider:
2026-01-18 14:49:19 +00:00
- **Brave Search API**: `BRAVE_API_KEY` or `tools.web.search.apiKey`
- **Gemini (Google Search)**: `GEMINI_API_KEY` or `tools.web.search.gemini.apiKey`
- **Grok (xAI)**: `XAI_API_KEY` or `tools.web.search.grok.apiKey`
- **Kimi (Moonshot)**: `KIMI_API_KEY`, `MOONSHOT_API_KEY`, or `tools.web.search.kimi.apiKey`
- **Perplexity Search API**: `PERPLEXITY_API_KEY`, `OPENROUTER_API_KEY`, or `tools.web.search.perplexity.apiKey`
**Brave Search free credit:** Each Brave plan includes $5/month in renewing
free credit. The Search plan costs $5 per 1,000 requests, so the credit covers
1,000 requests/month at no charge. Set your usage limit in the Brave dashboard
to avoid unexpected charges.
2026-01-18 14:49:19 +00:00
See [Web tools](/tools/web).
### 5) Web fetch tool (Firecrawl)
2026-01-31 21:13:13 +09:00
2026-01-18 14:49:19 +00:00
`web_fetch` can call **Firecrawl** when an API key is present:
2026-01-31 21:13:13 +09:00
2026-01-18 14:49:19 +00:00
- `FIRECRAWL_API_KEY` or `tools.web.fetch.firecrawl.apiKey`
If Firecrawl isnt configured, the tool falls back to direct fetch + readability (no paid API).
See [Web tools](/tools/web).
### 6) Provider usage snapshots (status/health)
2026-01-31 21:13:13 +09:00
2026-01-18 14:49:19 +00:00
Some status commands call **provider usage endpoints** to display quota windows or auth health.
These are typically low-volume calls but still hit provider APIs:
2026-01-31 21:13:13 +09:00
2026-01-30 03:15:10 +01:00
- `openclaw status --usage`
- `openclaw models status --json`
2026-01-18 14:49:19 +00:00
See [Models CLI](/cli/models).
### 7) Compaction safeguard summarization
2026-01-31 21:13:13 +09:00
2026-01-18 14:49:19 +00:00
The compaction safeguard can summarize session history using the **current model**, which
invokes provider APIs when it runs.
See [Session management + compaction](/reference/session-management-compaction).
### 8) Model scan / probe
2026-01-31 21:13:13 +09:00
2026-01-30 03:15:10 +01:00
`openclaw models scan` can probe OpenRouter models and uses `OPENROUTER_API_KEY` when
2026-01-18 14:49:19 +00:00
probing is enabled.
See [Models CLI](/cli/models).
### 9) Talk (speech)
2026-01-31 21:13:13 +09:00
2026-01-18 14:49:19 +00:00
Talk mode can invoke **ElevenLabs** when configured:
2026-01-31 21:13:13 +09:00
2026-01-18 14:49:19 +00:00
- `ELEVENLABS_API_KEY` or `talk.apiKey`
See [Talk mode](/nodes/talk).
### 10) Skills (third-party APIs)
2026-01-31 21:13:13 +09:00
2026-01-18 14:49:19 +00:00
Skills can store `apiKey` in `skills.entries.<name>.apiKey`. If a skill uses that key for external
APIs, it can incur costs according to the skills provider.
See [Skills](/tools/skills).