Configure OpenCode
opencode.json — project root, or ~/.config/opencode/opencode.json
- Config fileopencode.json
- Environmentexport MINIROUTER_KEY=mr-live-…Use your full key. Placeholders will not authenticate.
- Pick a model/models → minirouter
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"minirouter": {
"npm": "@ai-sdk/openai-compatible",
"name": "minirouter",
"options": {
"baseURL": "https://api.minirouter.sh/v1",
"apiKey": "{env:MINIROUTER_KEY}"
},
"models": {
"zai/glm-5.3-flash": { "name": "GLM 5.3 Flash" },
"openai/gpt-5.6-sol": { "name": "GPT 5.6 Sol" },
"spacexai/grok-4.6": { "name": "Grok 4.6" },
"google/gemini-3.8-flash": { "name": "Gemini 3.8 Flash" }
}
}
}
}Check the connection
Run this after saving. A reply confirms the base URL, key, and model together.
# bash / zsh: enter the full key at the hidden prompt
printf 'MiniRouter API key: '
read -rs MINIROUTER_KEY
export MINIROUTER_KEY
printf '\n'
curl https://api.minirouter.sh/v1/chat/completions \
-H "Authorization: Bearer $MINIROUTER_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"meta/llama-3.3-70b","messages":[{"role":"user","content":"ping"}]}'SDK examples
Calling from code instead? The base URL stays the same.
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: process.env.MINIROUTER_KEY,
baseURL: "https://api.minirouter.sh",
});
const result = await client.messages.create({
model: "meta/llama-3.3-70b",
max_tokens: 256,
messages: [{ role: "user", content: "ping" }],
});
console.log(result.content);Models and errors
Model IDs are author/name from the model catalog. Failed requests are explained in the error reference.