Integration guide · Coding agent
OpenCode on EU-hosted open models
Declare Frontière AI as a custom OpenAI-compatible provider in opencode.json and code with EU-hosted open models from the terminal. A provider entry in opencode.json (project root or ~/.config/opencode/) using the @ai-sdk/openai-compatible package.
Settings from the official documentation, checked on 12 October 2026. Not run end to end by us.
- API format
- OpenAI-compatible
- Base URL
- https://getfrontiereai.eu/api/v1
- Where it goes
- A provider entry in opencode.json (project root or ~/.config/opencode/) using the @ai-sdk/openai-compatible package.
- Your prompts
- Straight from your machine to us
Setup
1.Add the provider
Custom providers do not get model limits from OpenCode's catalogue, so declare the context and output limits yourself: OpenCode uses them to know how much room is left. Set small_model too, or title generation may fall back to your main model.
{
"$schema": "https://opencode.ai/config.json",
"share": "disabled",
"provider": {
"frontiere": {
"npm": "@ai-sdk/openai-compatible",
"name": "Frontière AI",
"options": {
"baseURL": "https://getfrontiereai.eu/api/v1",
"apiKey": "{env:FRONTIERE_API_KEY}"
},
"models": {
"glm-5.2": { "name": "GLM 5.2", "limit": { "context": 256000, "output": 32000 } },
"qwen3.6-35b": { "name": "Qwen 3.6 35B", "limit": { "context": 262144, "output": 16384 } }
}
}
},
"model": "frontiere/glm-5.2",
"small_model": "frontiere/qwen3.6-35b"
}2.Add the key and pick the model
Export FRONTIERE_API_KEY, or run /connect, choose Other and type the provider id exactly as in the file (frontiere). Then /models lists frontiere/glm-5.2 and the others you declared.
export FRONTIERE_API_KEY=sk-front-...
opencodeWhich model to pick
24 live models have tool calling measured by a real call through the gateway. Models labeled EU sovereign run at European providers; fast-access models are served through US-controlled infrastructure. Prices are per 100,000 tokens, margin and VAT included.
| Model id | Provider | Label | Context | Input | Output |
|---|---|---|---|---|---|
| pixtral-12b | Scaleway | EU sovereign | 131k | €0.0336 | €0.0336 |
| mistral-small-3.2-24b | Scaleway | EU sovereign | — | €0.0252 | €0.0588 |
| gemma-4-26b | AKI.IO | EU sovereign | 256k | €0.0168 | €0.084 |
| gpt-oss-120b | Scaleway | EU sovereign | — | €0.0252 | €0.1008 |
| mistral-small-4-119b | Mistral AI | EU sovereign | 262k | €0.0278 | €0.1109 |
| deepseek-v4-flash-0731 | Scaleway | EU sovereign | 256k | €0.0672 | €0.1344 |
| qwen3-coder-30b | Scaleway | EU sovereign | 262k | €0.0336 | €0.1344 |
| llama-3.3-70b | Scaleway | EU sovereign | — | €0.1512 | €0.1512 |
| qwen3.6-35b | Scaleway | EU sovereign | 262k | €0.042 | €0.252 |
| deepseek-v4.1-flash | AKI.IO | EU sovereign | 1M | €0.1008 | €0.3024 |
| qwen3-235b | Scaleway | EU sovereign | — | €0.126 | €0.378 |
| apertus-v1.5-70b | Infomaniak | EU sovereign | 100k | €0.1294 | €0.462 |
| qwen3.8-27b | Scaleway | EU sovereign | 262k | €0.1008 | €0.5544 |
| qwen3.5-397b | Scaleway | EU sovereign | — | €0.1008 | €0.6048 |
| mistral-large-4 | Mistral AI | EU sovereign | 524k | €0.2514 | €0.7725 |
| glm-5.2 | Scaleway | EU sovereign | 256k | €0.3024 | €0.924 |
| glm-5.3 | AKI.IO | EU sovereign | 524k | €0.3024 | €0.924 |
| gemma-3-27b | OpenRouter | Fast access (US) | 131k | €0.0135 | €0.074 |
| qwen3.8-flash | OpenRouter | Fast access (US) | — | €0.0252 | €0.0773 |
| glm-5.3-flash | Modal | Fast access (US) | 1M | €0.0689 | €0.2268 |
| deepseek-v4-pro | OpenRouter | Fast access (US) | — | €0.2453 | €0.5124 |
| muse-spark-1.1 | OpenRouter | Fast access (US) | — | €0.205 | €0.6956 |
| muse-spark-1.2 | OpenRouter | Fast access (US) | — | €0.205 | €0.6956 |
| kimi-k3 | Modal | Fast access (US) | 1M | €0.4536 | €2.268 |
Good to know
- OpenCode's editing and command workflow runs on tool calls: declare only models with measured tool calling.
- Reasoning models can be declared with "reasoning": true and "interleaved": { "field": "reasoning_content" }.
- Use @ai-sdk/openai-compatible, not @ai-sdk/openai: the latter is for providers that expose the Responses API, which Frontière AI does not.
Where your prompts go
Requests go from the local OpenCode process to the base URL. One documented exception: /share uploads the conversation to OpenCode's servers and publishes a link; the snippet sets "share": "disabled".
On our side, a model labeled EU sovereign runs at a European provider, and the gateway itself runs in Paris on Vercel, a US company — our privacy page says so. Billing keeps the model, the token counts and the amount, never the prompt or the reply.
Sources
Official documentation, checked on 12 October 2026:
FAQ
Does OpenCode work with Frontière AI?
Yes. A provider entry in opencode.json (project root or ~/.config/opencode/) using the @ai-sdk/openai-compatible package. The setting comes from OpenCode's official documentation, checked on 2026-10-12; we have not run it end to end.
Which Frontière AI model should I use with OpenCode?
One with measured tool calling, preferably labeled EU sovereign: pixtral-12b, mistral-small-3.2-24b, gemma-4-26b and gpt-oss-120b. The 24 candidates are listed on this page with their context window and price.
Do my prompts stay in Europe with OpenCode?
Requests go from the local OpenCode process to the base URL. One documented exception: /share uploads the conversation to OpenCode's servers and publishes a link; the snippet sets "share": "disabled". On our side, a model labeled EU sovereign runs at a European provider, and the gateway itself runs in Paris on Vercel, a US company — our privacy page says so. Billing keeps the model, the token counts and the amount, never the prompt or the reply.
Other guides
Get a key and try it
Prepaid credit from €10, no subscription. The key works with every guide on this site.
Create an API key