# API usage & costs
This doc lists features that can invoke API keys and where their costs show up. It focuses on OpenSoul features that can generate provider usage or paid API calls.
# Where costs show up (chat + CLI)
Per-session cost snapshot
/statusshows the current session model, context usage, and last response tokens.- If the model uses API-key auth,
/statusalso shows estimated cost for the last reply.
Per-message cost footer
/usage fullappends a usage footer to every reply, including estimated cost (API-key only)./usage tokensshows tokens only; OAuth flows hide dollar cost.
CLI usage windows (provider quotas)
opensoul status --usageandopensoul channels listshow provider usage windows (quota snapshots, not per-message costs).
See Token use & costs for details and examples.
# How keys are discovered
OpenSoul can pick up credentials from:
- 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)
Every reply or tool call uses the current model provider (OpenAI, Anthropic, etc). This is the primary source of usage and cost.
See Models for pricing config and Token use & costs for display.
# 2) Media understanding (audio/image/video)
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.
# 3) Memory embeddings + semantic search
Semantic memory search uses embedding APIs when configured for remote providers:
memorySearch.provider = "openai"→ OpenAI embeddingsmemorySearch.provider = "gemini"→ Gemini embeddingsmemorySearch.provider = "voyage"→ Voyage embeddings- Optional fallback to a remote provider if local embeddings fail
You can keep it local with memorySearch.provider = "local" (no API usage).
See Memory.
# 4) Web search tool (Brave / Perplexity via OpenRouter)
web_search uses API keys and may incur usage charges:
- Brave Search API:
BRAVE_API_KEYortools.web.search.apiKey - Perplexity (via OpenRouter):
PERPLEXITY_API_KEYorOPENROUTER_API_KEY
Brave free tier (generous):
- 2,000 requests/month
- 1 request/second
- Credit card required for verification (no charge unless you upgrade)
See Web tools.
# 5) Web fetch tool (Firecrawl)
web_fetch can call Firecrawl when an API key is present:
FIRECRAWL_API_KEYortools.web.fetch.firecrawl.apiKey
If Firecrawl isn’t configured, the tool falls back to direct fetch + readability (no paid API).
See Web tools.
# 6) Provider usage snapshots (status/health)
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:
opensoul status --usageopensoul models status --json
See Models CLI.
# 7) Compaction safeguard summarization
The compaction safeguard can summarize session history using the current model, which invokes provider APIs when it runs.
See Session management + compaction.
# 8) Model scan / probe
opensoul models scan can probe OpenRouter models and uses OPENROUTER_API_KEY when probing is enabled.
See Models CLI.
# 9) Talk (speech)
Talk mode can invoke ElevenLabs when configured:
ELEVENLABS_API_KEYortalk.apiKey
See Talk mode.
# 10) Skills (third-party APIs)
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 skill’s provider.
See Skills.