Clients

OpenAI-compatible clients: base https://kasva.dev/v1. Anthropic clients: base https://kasva.dev. Key is your Kasva kv_… key. Model kasva/auto.

OpenAI-compatible clients send the Kasva key to https://kasva.dev/v1. Anthropic clients send it to https://kasva.dev. Model kasva/auto unless you pin another id from GET /v1/models.

Cursor

Setting Value
OpenAI API Key Kasva key only
Override OpenAI Base URL https://kasva.dev/v1
Custom model kasva/auto or kasva/code

Gemini via Kasva: add custom model byok/gemini/2.5-flash (not Cursor’s built-in Gemini).

OpenAI via Kasva: byok/openai/gpt-6.1-sol (or another byok/openai/… chat id). Do not put image models in Cursor chat — use POST /v1/images.

Avoid: Cursor’s built-in Auto and built-in Gemini — those talk to Cursor/Google directly, not Kasva.

Claude Code

Setting Value
Base URL https://kasva.dev
API key Kasva kv_…
Model kasva/auto

Set ANTHROPIC_BASE_URL=https://kasva.dev and ANTHROPIC_API_KEY to the Kasva key. Do not paste a provider sk-ant-… key into Claude Code if you want the request to go through Kasva.

Codex

Setting Value
API OpenAI-compatible
Base URL https://kasva.dev/v1
API key Kasva kv_…
Model kasva/auto

Codex talks OpenAI Chat Completions. Same three fields as Cursor.

Cline

Setting Value
API Provider OpenAI Compatible
Base URL https://kasva.dev/v1
API Key Kasva key
Model kasva/auto or byok/gemini/2.5-flash

Register provider keys once via POST /v1/byok/keys (no per-request provider headers).

Windsurf

Setting Value
API OpenAI compatible / custom base
Base URL https://kasva.dev/v1
API key Kasva kv_…
Model kasva/auto

Continue

Setting Value
Provider openai
apiBase https://kasva.dev/v1
apiKey Kasva kv_…
model kasva/auto

Aider

export OPENAI_API_BASE=https://kasva.dev/v1
export OPENAI_API_KEY=YOUR_KASVA_KEY
aider --model openai/kasva/auto

Roo Code

Same as Cline: OpenAI Compatible, base https://kasva.dev/v1, Kasva key, model kasva/auto.

OpenCode

OpenAI-compatible endpoint. Base https://kasva.dev/v1, Kasva key, model kasva/auto.

Grok Build

xAI’s CLI. OpenAI-compatible config (~/.grok/config.toml): base https://kasva.dev/v1, Kasva key, model kasva/auto. This is the Grok client, not a Grok model picker inside Cursor.

curl

curl https://kasva.dev/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KASVA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"kasva/auto","messages":[{"role":"user","content":"ping"}]}'

Anthropic shape:

curl https://kasva.dev/v1/messages \
  -H "x-api-key: YOUR_KASVA_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{"model":"kasva/auto","max_tokens":1024,"messages":[{"role":"user","content":"ping"}]}'

Verify

Look at the chat response:

"kasva": {
  "provider": "gemini",
  "routed_model": "byok/gemini/2.5-flash"
}

If a free tier is exhausted, free-route hops: Groq → Gemini → DeepSeek → Kasva hosted (route_reason shows the hop).

Models cheat sheet

ID Use
kasva/auto Smart routing
kasva/code Always code-focused routing
byok/gemini/2.5-flash Gemini Flash via your BYOK key
byok/gemini/3.6-flash Higher-quality Gemini Flash
byok/groq/gpt-oss-20b Groq (needs Groq BYOK)
byok/openai/gpt-6.1-sol OpenAI chat (needs OpenAI BYOK)
byok/anthropic/claude-haiku Anthropic (needs Anthropic BYOK)
byok/openai/gpt-image-2 Images only — POST /v1/images