How to set up Codex CLI with the Tokenator API
Codex CLI declares providers in its own config.toml. Add a single [model_providers.tokenator] block and point it at the environment variable holding your key — after that the agent behaves as usual.
What you end up with
Once configured, Codex CLI 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 | Codex CLI |
| 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.
Installing via npm requires Node.js LTS. Codex CLI also ships standalone binaries, in which case Node is not required.
Installing Codex CLI
npm install -g @openai/codex
brew install --cask codex
Run codex once after installing so the ~/.codex directory is created.
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
model = "gpt-5.5" model_provider = "tokenator" [model_providers.tokenator] name = "Tokenator" base_url = "https://api.tokenator.top/v1" env_key = "TOKENATOR_API_KEY" wire_api = "responses"
$env:TOKENATOR_API_KEY = "sk-your-tokenator-key"
codexsetx TOKENATOR_API_KEY "sk-your-tokenator-key"
The provider id must not collide with the reserved ones (openai, ollama, lmstudio), hence tokenator in the example. The key never goes into the file: env_key names the environment variable to read it from.
Configuration on macOS and Linux
model = "gpt-5.5" model_provider = "tokenator" [model_providers.tokenator] name = "Tokenator" base_url = "https://api.tokenator.top/v1" env_key = "TOKENATOR_API_KEY" wire_api = "responses"
export TOKENATOR_API_KEY="sk-your-tokenator-key" codex
The provider id must not collide with the reserved ones (openai, ollama, lmstudio), hence tokenator in the example. The key never goes into the file: env_key names the environment variable to read it from.
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
codexA 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
Change the model with the model field in config.toml, or per run with codex -m <model-id>.
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
Codex CLI passes the reasoning effort in the request itself — in the config that is model_reasoning_effort. The value is forwarded upstream as-is; models that do not support it ignore it without erroring.
Reasoning is billed as output tokens, so a high level noticeably increases usage.
Common errors and how to fix them
| Symptom | Cause | Fix |
|---|---|---|
| Codex ignores the provider | model_provider is not set, or the provider id collides with a reserved one. | Make sure model_provider = "tokenator" sits at the top level of the file, before the [model_providers.*] tables. |
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 Codex CLI 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.