OpenCode exposes two hosted catalogs in Apus:
| Catalog | Prefix | Runtime provider |
|---|---|---|
| Zen | opencode/... |
opencode |
| Go | opencode-go/... |
opencode-go |
Both catalogs use the same OpenCode API key infrastructure (OPENCODE_API_KEY,
alias OPENCODE_ZEN_API_KEY). Go still requires its own paid subscription;
having a Zen key does not by itself grant Go access. Apus keeps the runtime
provider ids split so upstream per-model routing stays correct.
Apus sends a stable x-opencode-session conversation header on requests to
https://opencode.ai across the Anthropic, Gemini, OpenAI Chat Completions, and
OpenAI Responses transports. This header remains enabled when prompt caching is
disabled. Low-level SDK stream callers should supply sessionId in their stream
options.
Standalone apus infer model run --local calls and the
prepared completion helper
generate a fresh routing header per invocation when no explicit routing header
or session identifier is supplied. This generated value stays in the header and
does not create a conversation or enable session-based caching. Explicit model
or caller routing headers are preserved regardless of header name casing.
Getting started
Zen catalog
**Best for:** the curated OpenCode multi-model proxy (Claude, GPT, Gemini, GLM,
DeepSeek, Kimi, MiniMax, Qwen).
Run onboarding
```bash
apus onboard --auth-choice opencode-zen
```
Or pass the key directly:
```bash
apus onboard --opencode-zen-api-key "$OPENCODE_API_KEY"
```
Set a Zen model as the default
```bash
apus config set agents.defaults.model.primary "opencode/gpt-5.6-sol"
```
Verify models are available
```bash
apus models list --provider opencode
```
Go catalog
**Best for:** the separately subscribed Go lineup across DeepSeek, GLM, GPT,
Grok, Hy3, Kimi, MiMo, MiniMax, and Qwen.
Use the bundled Go catalog
OpenCode Go is included with Apus, so no separate
plugin installation or Gateway restart is required.
Run onboarding
```bash
apus onboard --auth-choice opencode-go
```
Or pass the key directly:
```bash
apus onboard --opencode-go-api-key "$OPENCODE_API_KEY"
```
Set a Go model as the default
```bash
apus config set agents.defaults.model.primary "opencode-go/kimi-k3"
```
Verify models are available
```bash
apus models list --provider opencode-go
```
Config example
{
env: { vars: { OPENCODE_API_KEY: "sk-..." } },
agents: { defaults: { model: { primary: "opencode/gpt-5.6-sol" } } },
}
Provider catalogs
Zen
| Property | Value |
|---|---|
| Runtime provider | opencode |
| Example models | opencode/gpt-5.6-sol, opencode/kimi-k3, opencode/deepseek-v4-flash |
Run apus models list --provider opencode for the current active list.
Model availability and promotional routes can change independently of Apus.
Live discovery combines the models available to your OpenCode account with
authoritative model metadata from https://models.opencode.ai/api.json.
Apus fetches and caches that catalog only when OpenCode Zen or Go is
configured or explicitly selected with OpenCode credentials; startup and
unrelated providers never download it. New upstream models become available
without an Apus update when their metadata describes a supported transport
on the trusted OpenCode endpoint. A key-scoped response can omit models
unavailable to that workspace. Metadata and lifecycle status refresh together;
deprecated models are excluded from active discovery and its offline fallback.
Deprecated explicit refs remain resolvable for existing configurations but are
not shown as current recommendations.
Account-list failures produce a failed catalog outcome, not a successful seed list. A successful empty or fully filtered account response stays empty. The separate public metadata feed can still use trusted offline metadata when it is unavailable; that does not replace or retry the account-list request.
Price estimates also refresh through the hosted model catalog,
using the same public OpenCode pricing feed as live discovery. Hosted updates
activate after the next Gateway restart; the bundled snapshot remains available
offline. Explicit model prices in your configuration or agent-local models.json
keep precedence. These are advertised-price estimates, not verified invoice totals.
Go
| Property | Value |
|---|---|
| Runtime provider | opencode-go |
| Example models | opencode-go/kimi-k3, opencode-go/deepseek-v4-flash, opencode-go/qwen3.8-max |
See OpenCode Go for discovery, routing, and access requirements. Go's model-list endpoint advertises its general lineup; listing a model does not prove your account can run it.
Advanced configuration
API key aliases
`OPENCODE_ZEN_API_KEY` is also accepted as an alias for `OPENCODE_API_KEY`.
Shared credentials
Entering one OpenCode key during setup can store credentials for both
runtime providers. It does not create a Go subscription or grant Go
entitlement; subscribe to Go in the OpenCode console before using it.
Getting an API key
Create an OpenCode account and generate an API key at
[opencode.ai/auth](https://opencode.ai/auth). Billing and catalog
availability are managed from the OpenCode dashboard.
Gemini replay behavior
Gemini-backed OpenCode refs stay on the proxy-Gemini path, so Apus keeps
Gemini thought-signature sanitation there without enabling native Gemini
replay validation or bootstrap rewrites.
Non-Gemini replay behavior
Non-Gemini OpenCode refs keep the minimal OpenAI-compatible replay policy.
Pricing and privacy
Billing, retention, and training policies are model-specific. Check the
current [OpenCode Zen pricing and policy](https://opencode.ai/docs/zen/)
before selecting a route. Free models may be temporary feedback programs.
Related
OpenCode Go
Go catalog discovery and access requirements.
Model selection
Choosing providers, model refs, and failover behavior.
Configuration reference
Full config reference for agents, models, and providers.
OpenCode plugin reference
Native sessions, the session catalog toggle, and plugin config keys.