Docs
TypingMind
TypingMind has no base-URL field for custom models: each one is a separate entry with the full endpoint route, the model id, its context length and the key as a header you type yourself. Here is that entry for Kunavo, and why it works from the browser now when it did not a month ago.
Models → Add custom model: the full Endpoint URL https://api.kunavo.com/v1/chat/completions, an Authorization header with Bearer and your key, the Model ID and its context length — one entry per model, called straight from your browser.
Models → Add custom model → Create Manually
Name Kunavo · Claude Sonnet 5
Model ID claude-sonnet-5
Context Length 1000000
Authentication tab
API Type OpenAI Chat Completions API
Endpoint URL https://api.kunavo.com/v1/chat/completions
Authentication Type API Key via HTTP Header
Header Key Authorization
Header Value Bearer sk-kn-...
Capabilities tab tick only what you have checked (see below)
Request Options tab leave "Route requests via TypingMind Cloud" off
→ Test & Savehttps://api.kunavo.com/v1/chat/completions. TypingMind does not append anything — its own worked examples paste full routes such as https://api.minimax.io/v1/chat/completions — so https://api.kunavo.com/v1 on its own sends the chat request to a path that does not exist.access-control-allow-origin: * and a readable response, from /v1/chat/completions, /v1/messages and /v1/models alike. You do not need the Route requests via TypingMind Cloud option for this endpoint.Step by step
- Create a key at
/app/keysand copy it — it is shown once. - In TypingMind, open Models in the left sidebar and click Add custom model. Stay on Create Manually; Import JSON and Import OpenRouter are for other sources.
- Fill Name (anything), Model ID (exactly as
GET /v1/modelslists it — for exampleclaude-sonnet-5) and Context Length. The form pre-fills 128000; set the model's real window from the models page, because TypingMind uses this number to decide how much history to send. - On the Authentication tab choose API Type = OpenAI Chat Completions API, paste the full Endpoint URL, set Authentication Type to API Key via HTTP Header, and enter Header Key
Authorizationwith Header ValueBearer sk-kn-...— the word Bearer, a space, then the key. - On Capabilities, either tick the features by hand or leave Auto check capabilities on save on — the form says it sends “a few test requests” when saving, which bills a handful of tokens. Optionally fill Pricing with the per-million rates from the table below so TypingMind's cost display matches your bill. Then click Test & Save.
- Repeat per model. There is no provider-level entry for a custom endpoint: Claude Sonnet, Claude Haiku and a GPT model are three separate custom models with the same Endpoint URL and header.
Checked against TypingMind's model documentation on October 1, 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 TypingMind.
# 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 TypingMind |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | The everyday model for long chats and documents — context length 1000000 |
claude-haiku-4-5 | $0.70 / $3.50 | A cheap second entry for quick questions and titles — context length 200000 |
claude-opus-5 | $3.50 / $17.50 | Hard reasoning in one chat, used deliberately — context length 1000000 |
The other three API types
The API Type dropdown on the live form offers OpenAI Chat Completions API, OpenAI Responses API, Claude Messages API and Gemini API. Kunavo answers the first three; each needs its own full route in Endpoint URL.
- Claude Messages API — Endpoint URL
https://api.kunavo.com/v1/messages. TypingMind's own Claude-format example uses anx-api-keyheader; Kunavo accepts either that orAuthorization: Beareron this route. Kunavo serves only Claude-family ids on this route. - OpenAI Responses API — Endpoint URL
https://api.kunavo.com/v1/responses, same Bearer header. TypingMind's documentation has no worked example for this type, so the full-route form is inferred from the other three, not quoted. - Gemini API — not for this endpoint. It expects Google's native request shape; reach Gemini models through the Chat Completions type instead.
This is not the TypingMind API
“TypingMind API” usually means the REST API of a TypingMind Teams instance (custom.typingmind.com), which manages that chat instance. It does not sell model tokens and has nothing to do with this setup. A custom model is simply TypingMind calling someone else's endpoint with a key you supply.
Two separate bills
The TypingMind licence pays for the app. Every message you send through a custom model is billed per token by whoever owns the key in the header — here, Kunavo, from a prepaid balance. The licence tiers and what a month of chat costs at these rates are worked through in TypingMind pricing and API cost.
When Test & Save fails
- 404 with an HTML page — the Endpoint URL is missing the route. It must end in
/v1/chat/completions(or/v1/messages,/v1/responsesfor those types). - 401 “Missing or invalid API key” — the header is wrong: Header Key must be
Authorizationand the value must start withBearer, or the key was revoked. - A model-not-available error — the Model ID is not spelled the way
GET /v1/modelslists it. Ids are lower-case and hyphenated. - A network or CORS error in the browser console — check the Endpoint URL is
https://api.kunavo.comand not the website domain; the API host is the one that sends CORS headers.
FAQ
How do I add a custom model with my own API key in TypingMind?
Open Models in the left sidebar and click Add custom model, then Create Manually. Give it a Name, the exact Model ID and its Context Length. On the Authentication tab pick the API Type, paste the full Endpoint URL — for an OpenAI-compatible provider that ends in /v1/chat/completions — and set Authentication Type to API Key via HTTP Header with Header Key Authorization and Header Value Bearer followed by your key. Click Test & Save. Those labels were read from the live app on October 1, 2026; TypingMind's older documentation describes the same flow with slightly different wording.
Does TypingMind want a base URL or the full endpoint?
The full endpoint. The field is called Endpoint URL, and every worked example in TypingMind's documentation pastes a complete route such as https://api.minimax.io/v1/chat/completions or an Azure URL ending in /anthropic/v1/messages. TypingMind does not append a path, so a base URL like https://api.kunavo.com/v1 on its own points the request at a route that does not exist and returns a 404.
Can TypingMind call Kunavo directly from the browser?
Yes, since September 29, 2026, when Kunavo's API started sending CORS headers. TypingMind makes model requests from the web page itself, so the endpoint must allow that page's origin. On October 1, 2026 requests sent from typingmind.com to Kunavo's /v1/chat/completions, /v1/messages and /v1/models returned access-control-allow-origin: * with a readable body. Those requests used an invalid key on purpose, so they prove the browser path is open, not that a full chat has been run.
Do I need TypingMind's proxy or TypingMind Cloud routing?
Not for Kunavo. The Request Options tab has a Route requests via TypingMind Cloud toggle, described in the form as a way to route requests through TypingMind's server to bypass browser CORS restrictions. Kunavo's API already allows browser calls, so leaving it off keeps the request going straight from your browser to the endpoint.
Has Kunavo tested TypingMind end to end?
Not with a working key. What was checked on October 1, 2026 is the live Add Custom Model form, and a browser request from the typingmind.com page to Kunavo with an invalid key, which came back readable with CORS headers. No completion, streaming reply or tool call has been run through TypingMind against Kunavo, and the Test & Save button was not pressed. Treat your own Test & Save and first message as the end-to-end check.