How to connect OpenCode to the Tokenator API
OpenCode lets you declare your own provider in its config. We describe Tokenator as an OpenAI-compatible provider and list the models we want in the picker.
What you end up with
Once configured, OpenCode stops talking to its default provider and sends every request to Tokenator. Billing comes out of your key's token limit, and the list of available models is defined by the key rather than by the tool.
| Tool | OpenCode |
| Protocol | OpenAI-compatible |
| Base URL | https://api.tokenator.top/v1 |
| Key | sk-your-tokenator-key |
Requirements and supported operating systems
- Windows 10/11, macOS 12+, or a modern 64-bit Linux.
- Outbound HTTPS access to the Tokenator domain.
- A Tokenator API key that looks like
sk-your-tokenator-key.
OpenCode runs in a terminal; its config is a plain JSON file you can edit in any editor.
Installing OpenCode
npm install -g opencode-ai
Check the install with opencode --version.
Setting up Tokenator
- Register in your account and buy a token bundle.
- The key appears in the account right after the payment is confirmed — copy it whole, including the prefix.
- The examples below use the placeholder
sk-your-tokenator-key. Never publish a real key in repositories or screenshots.
Configuration on Windows
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"tokenator": {
"npm": "@ai-sdk/openai-compatible",
"name": "Tokenator",
"options": {
"baseURL": "https://api.tokenator.top/v1",
"apiKey": "{env:TOKENATOR_API_KEY}"
},
"models": {
"gpt-5.5": { "name": "gpt-5.5" }
}
}
}
}$env:TOKENATOR_API_KEY = "sk-your-tokenator-key"
opencodeThe @ai-sdk/openai-compatible package targets the /v1/chat/completions endpoint. Prefer keeping the key out of the file and injecting it from the environment with the {env:…} syntax. Every model you want in the picker is listed under models.
Configuration on macOS and Linux
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"tokenator": {
"npm": "@ai-sdk/openai-compatible",
"name": "Tokenator",
"options": {
"baseURL": "https://api.tokenator.top/v1",
"apiKey": "{env:TOKENATOR_API_KEY}"
},
"models": {
"gpt-5.5": { "name": "gpt-5.5" }
}
}
}
}export TOKENATOR_API_KEY="sk-your-tokenator-key" opencode
The @ai-sdk/openai-compatible package targets the /v1/chat/completions endpoint. Prefer keeping the key out of the file and injecting it from the environment with the {env:…} syntax. Every model you want in the picker is listed under models.
Your first request
Before starting the tool it helps to confirm that the key and the model both work. A single curl request answers both questions.
curl https://api.tokenator.top/v1/chat/completions \ -H "Authorization: Bearer sk-your-tokenator-key" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-5.5", "messages": [{"role": "user", "content": "ping"}] }'
cd /path/to/project
opencodeA successful response means the key is valid, the model is allowed for it and the upstream is reachable. Usage appears in your account right after the request.
Switching models
Every model that should be selectable is listed in the config's models block. After editing the file, the agent's model picker shows the new list.
Examples of model IDs available right now:
claude-haiku-4-5claude-opus-4-6claude-opus-4-7claude-sonnet-4-6gpt-5.5deepseek-v4-flash
Current IDs and specs live in the AI model catalog, which also shows which models are available right now. The model comparison helps choose between close options.
Configuring reasoning
If the tool can send a reasoning_effort field, Tokenator forwards it upstream unchanged. On top of that the key itself has a reasoning switch in your account, which works independently of the tool.
Common errors and how to fix them
| Symptom | Cause | Fix |
|---|---|---|
| The model is missing from the list | The model is not listed in the models block, or the JSON has a syntax error. | Validate the file with a JSON linter and add the model ID to models. |
401 or an invalid-key message | The key was copied with stray spaces, was revoked, has expired, or landed in the wrong environment variable. | Check the key in your account and make sure the environment variable actually reached the process running the tool. |
403 | The model is not in the key's allowed-model list. | Check the key's model list in your account and pick an ID from the model catalog. |
429 | The per-minute or per-hour request limit, or the concurrent-stream limit for the key, was exceeded. | Lower the agent's concurrency and retry with exponential backoff. Key limits are visible in your account. |
| Model not found / not supported | The request used an ID that is not in the catalog, or an alias unavailable to this key. | Copy the exact API ID from the model page — case and dots matter. |
| The request hangs or breaks on a long answer | The client closed the connection on its own timeout before the model finished generating. | Turn on streaming (stream: true) and raise the client timeout: with long reasoning answers the first token can take a while. |
| A bare "Request error" with no details | The upstream provider returned an error. Its text is not passed through to the client. | Retry: Tokenator fails over to the next provider for the model on its own. If it persists, contact support. |
FAQ
Do I need a OpenCode subscription or a separate provider account?
No. The tool talks to Tokenator, and billing comes from your Tokenator key's tokens.
Where do I see usage after connecting?
In your account: it shows requests, spent tokens and the key's remaining limit.
Can one key be used in several tools?
Yes. The limits are the key's own: requests per minute and hour, plus the number of concurrent streams.
What happens if tokens run out mid-session?
Requests start returning an error. Topping up the same key restores the limit — no need to reinstall the tool.
How do I switch back to the previous provider?
Remove the settings you added — the environment variables or the provider block in the config. The tool reverts to its default behaviour.
Where can I read about the API format itself?
In the Tokenator API documentation and on the OpenAI-compatible API page.