Docs
Copilot for Obsidian
Copilot's BYOK tab takes a custom OpenAI-compatible provider in three fields. Which surfaces the resulting models reach is the part the documentation is precise about, and this page keeps that precision rather than promising the whole plugin.
Settings → Copilot → BYOK → Add a custom provider: a Display name, your key and https://api.kunavo.com/v1 — Quick Chat always, Agent Chat under opencode when the provider is shown there.
Display name Kunavo
API key sk-kn-...
Base URL https://api.kunavo.com/v1
Enable CORS off — see the note below before turning it on
Model ID → Add claude-sonnet-5
claude-haiku-4-5
Search available models discovery reads GET /v1/models; typed ids also work
Save needs at least one model and a routable endpoint/v1 suffix here, and the documentation settles that by example rather than by sentence: it says only that "A custom OpenAI-compatible provider must have a Base URL", but both OpenAI-compatible templates it ships default to a URL ending in /v1 — http://localhost:11434/v1 for Ollama and http://localhost:1234/v1 for LM Studio — and it adds that "Model discovery uses the endpoint's /v1/models response". If discovery comes back empty, that pair is the first thing to re-read./docs/integrations/claude-code.Step by step
- Create a key at
/app/keysand copy it — it is shown once. - In Obsidian, open Settings → Copilot → BYOK and click Add a provider.
- Choose Add a custom provider rather than a named provider or a Self Host template.
- Fill in Display name, API key and Base URL as above. Leave Enable CORS off for now.
- Add at least one model — either type an id under Model ID → Add or pick from Search available models, which is filled from
GET /v1/models. Click Test, then Save; saving is blocked until a model and a routable endpoint are both present. - Curate where those models show up under Basic → Agents → Quick Chat and Basic → Agents → opencode, each with its own Default model. New chat models are enabled for both by default.
Checked against Copilot's Model Sources and BYOK page on September 21, 2026. Third-party settings move; if a field name here no longer matches what you see, that page is the authority, not this one.
Verify before you debug the client
One request settles whether a failure is the endpoint, the key, or the configuration file. If this returns JSON, the same base URL and key work in Copilot for Obsidian.
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."Which model id to put in the field
Every text model is reachable as a model id — the live list is GET /v1/models, and the catalog with prices is on the models page. Rates are USD per 1M tokens, input / output.
| Model id | Kunavo in / out | Where it fits in Copilot for Obsidian |
|---|---|---|
claude-haiku-4-5 | $0.40 / $2.00 | Quick Chat, where short asks against a note run all day |
claude-sonnet-5 | $2.00 / $10.00 | the opencode backend in Agent Chat — the default working model |
claude-opus-5 | $2.00 / $10.00 | long synthesis across many notes, where a wrong reading is expensive |
gpt-5-6-sol | $2.00 / $12.00 | a second opinion from another family, same key and same provider row |
FAQ
Where do I put an API key in Obsidian Copilot?
Settings → Copilot → BYOK → Add a provider, then "Add a custom provider" for an endpoint that is not in the built-in list. The dialog takes a Display name, the API key, a Base URL, an optional Enable CORS switch, and at least one model added by id or picked from the discovered list, then Save. Copilot's documentation says provider keys are stored in that device's Obsidian Keychain rather than the vault's data.json, so syncing a vault does not carry the credential to another computer.
Does the Obsidian Copilot base URL need /v1 at the end?
Use the /v1 form — https://api.kunavo.com/v1 for Kunavo. The documentation does not state the rule in a sentence; it states that a custom OpenAI-compatible provider must have a Base URL, that model discovery uses the endpoint's /v1/models response, and that the two OpenAI-compatible templates it ships default to http://localhost:11434/v1 and http://localhost:1234/v1. Both shipped defaults carry the suffix, which is the strongest thing the docs say on it. A wrong base URL usually shows up as an empty model list or a failed Test rather than as an authentication error.
Can Obsidian Copilot use a gateway like OpenRouter or Kunavo instead of a vendor key?
Yes for Quick Chat, and conditionally for Agent Chat. Copilot's own documentation describes BYOK as connecting "directly to an AI provider, a compatible gateway, or a model server on your computer", and "Add a custom provider" takes any OpenAI-compatible base URL plus a model id. Its model-source table then gives BYOK models to Quick Chat outright and to Agent Chat under the opencode backend only, "when the provider is shown there". The Claude and Codex backends never take a BYOK key at all — the documentation says adding a key does not change the models they supply.
Do I need an embedding model for Obsidian Copilot's vault search?
Not from your chat provider. Copilot 4.x no longer runs its own in-plugin index: the documentation says semantic search and Relevant Notes are supplied by Miyo, a separate local-or-remote service, and the BYOK dialog has no field for that kind of model. Kunavo serves no embedding model either, so nothing here should be read as offering one — a chat provider row in Copilot pays for chat and nothing else.
Does a Kunavo key replace a Copilot Lite or Plus licence?
No, and the two are separate lines on purpose. Copilot's documentation treats a licence and BYOK as different model sources: a licence supplies Copilot-hosted models billed by Brevilabs against your plan, while BYOK sends requests to your own endpoint with billing staying at that provider. A key here does not refill a licence allowance, does not unlock the locked Copilot-hosted rows, and does not change the licence-gated services; conversely you can run BYOK on the free tier with no licence at all.