Documentation Index
Fetch the complete documentation index at: https://docs.wednesdayai.dev/llms.txt
Use this file to discover all available pages before exploring further.
Authentication
WednesdayAI supports API keys and OAuth tokens for AI providers, plus delegated authentication through a trusted reverse proxy for multi-user deployments.Quick start — API key
For a long-lived gateway, an API key is the most reliable option. OAuth/subscription tokens can expire and require interactive renewal; API keys do not.- Create a key in your provider console (Anthropic, OpenAI, Google, etc.)
-
Add it to the gateway host:
-
Persist it for the daemon — put the key in
~/.openclaw/.envso the gateway service can read it at startup:Then restart the gateway:- Linux (systemd)
- macOS / manual
-
Verify:
Supported providers
Anthropic (Claude)
API key or subscription setup-token
OpenAI / GPT
API key
Google (Gemini)
API key or OAuth via
GOOGLE_API_KEYOllama (local)
No auth — runs on localhost
OpenRouter
API key
LiteLLM / Bifrost
Proxy key
docs/providers/.
Environment variable lookup order
WednesdayAI resolves provider credentials in this order (first match wins):| Priority | Variable | Notes |
|---|---|---|
| 1 | OPENCLAW_LIVE_<PROVIDER>_KEY | Single override, useful in CI |
| 2 | <PROVIDER>_API_KEYS | Comma-separated list for rotation |
| 3 | <PROVIDER>_API_KEY | Standard single key |
| 4 | <PROVIDER>_API_KEY_* | Numbered variants (_KEY_1, _KEY_2, …) |
<PROVIDER> with the uppercase provider name: ANTHROPIC, OPENAI, GOOGLE, OPENROUTER, etc. Google providers also fall back to the bare GOOGLE_API_KEY.
The gateway deduplicates entries before use.
Key rotation
When a provider returns a rate-limit error (HTTP 429 orrate_limit/quota/resource exhausted in the error body), the gateway automatically retries with the next key from the rotation list. Non-rate-limit errors are not retried with alternate keys.
To rotate across multiple keys, populate <PROVIDER>_API_KEYS:
Anthropic subscription (setup-token)
If you have a Claude subscription rather than an API key, the setup-token flow is supported. Run this on the gateway host (requires an interactive TTY):Auth profiles
Auth profiles let you maintain multiple sets of credentials for the same provider and switch between them per-session or per-agent. Check current profiles:--agent <id> to target a specific agent; omit it for the default agent.
Per-session override (in a running chat session):
/model claude-3-5-sonnet@anthropic:work
Automated auth monitoring
To detect expiring tokens and alert via the gateway (useful in unattended deployments):Trusted-proxy auth (multi-user)
For deployments behind an identity-aware reverse proxy (Pomerium, Caddy + OAuth, nginx + oauth2-proxy), you can delegate authentication entirely to the proxy. When to use:- You’re behind Pomerium, Caddy with OAuth, or a similar identity-aware proxy
- You want SSO or corporate IdP login (OIDC, SAML)
- You’re hitting WebSocket
1008 Unauthorizederrors because browsers can’t pass tokens in WebSocket payloads
- Your proxy is a TLS terminator only (not authenticating users)
- There is any path to the gateway that bypasses the proxy
- You only need single-user personal access (use Tailscale Serve + loopback instead)
~/.openclaw/openclaw.json):
allowUsers become the effective access control.
Checking status
Troubleshooting
"No credentials found"
"No credentials found"
The gateway cannot find a key or token for the configured provider.
- Check that the env var is set on the gateway host:
echo $ANTHROPIC_API_KEY - If running as a daemon, the env var must be in
~/.openclaw/.env— shell environment is not inherited by systemd/launchd services. - Restart the daemon after adding the key:
systemctl --user restart openclaw-gateway - Verify:
openclaw models status
Token expired
Token expired
For setup-token (subscription) auth, tokens expire. Re-run the token flow:For long-lived deployments, switch to an API key — tokens require interactive renewal.
"This credential is only authorized for use with Claude Code"
"This credential is only authorized for use with Claude Code"
WebSocket 1008 Unauthorized behind a reverse proxy
WebSocket 1008 Unauthorized behind a reverse proxy