Skip to content

Documentation

Pick your tool, paste the config, get back to work.

The two things you need

  1. Get a key.

    Shown once only. If you lose it, revoke it and create another one.

    Create key
  2. Point your SDK at the right base URL.

    Base URL for each SDK
    SDKBase URL
    openaihttps://api.cerberusapp.cc/v1
    anthropichttps://api.cerberusapp.cc
    The Anthropic SDK appends /v1 on its own. Writing it twice gets you a silent 404.

Your tool

Claude Code3 steps
  1. Paste this into your settings file.

    ~/.claude/settings.json
    {
      "env": {
        "ANTHROPIC_BASE_URL": "https://api.cerberusapp.cc",
        "ANTHROPIC_API_KEY": "PASTE_YOUR_KEY",
        "ANTHROPIC_MODEL": "claude-sonnet-5"
      }
    }

    On Windows the file lives at %USERPROFILE%\.claude\settings.json.

  2. Or skip the file and export the variables.

    export ANTHROPIC_BASE_URL="https://api.cerberusapp.cc"
    export ANTHROPIC_API_KEY="PASTE_YOUR_KEY"
    export ANTHROPIC_MODEL="claude-sonnet-5"
  3. Start the tool.

    claude
Codex2 steps
  1. Add the provider to your config file.

    ~/.codex/config.toml
    model = "claude-sonnet-5"
    model_provider = "cerbero"
    
    [model_providers.cerbero]
    name = "Cerbero"
    base_url = "https://api.cerberusapp.cc/v1"
    env_key = "CERBERO_API_KEY"
    wire_api = "responses"
  2. Export the key under that same name.

    export CERBERO_API_KEY="PASTE_YOUR_KEY"
OpenCode2 steps
  1. Add the provider to your config file.

    ~/.config/opencode/opencode.json
    {
      "$schema": "https://opencode.ai/config.json",
      "provider": {
        "cerbero": {
          "npm": "@ai-sdk/openai-compatible",
          "name": "Cerbero",
          "options": {
            "baseURL": "https://api.cerberusapp.cc/v1",
            "apiKey": "PASTE_YOUR_KEY"
          },
          "models": {
            "claude-sonnet-5": {}
          }
        }
      }
    }
  2. Restart and pick the Cerbero model.

curl · Anthropic Messages1 step

Drop your key in and run it.

curl https://api.cerberusapp.cc/v1/messages \
  -H "x-api-key: PASTE_YOUR_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":1024,"messages":[{"role":"user","content":"Write a haiku about the sea"}]}'
Both x-api-key and Authorization: Bearer work; the version header goes in either one.
curl · OpenAI Chat Completions1 step

Drop your key in and run it.

curl https://api.cerberusapp.cc/v1/chat/completions \
  -H "Authorization: Bearer PASTE_YOUR_KEY" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","messages":[{"role":"user","content":"Write a haiku about the sea"}]}'
Python1 step

Install the SDK and copy the example.

pip install openai
cerbero.py
from openai import OpenAI

client = OpenAI(
    api_key="PASTE_YOUR_KEY",
    base_url="https://api.cerberusapp.cc/v1",
)

r = client.chat.completions.create(
    model="claude-sonnet-5",
    messages=[{"role": "user", "content": "Write a haiku about the sea"}],
)
print(r.choices[0].message.content)
Node1 step

Install the SDK and copy the example.

npm install openai
cerbero.mjs
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "PASTE_YOUR_KEY",
  baseURL: "https://api.cerberusapp.cc/v1",
});

const r = await client.chat.completions.create({
  model: "claude-sonnet-5",
  messages: [{ role: "user", content: "Write a haiku about the sea" }],
});
console.log(r.choices[0].message.content);
The .mjs extension matters: without it, Node rejects the import.

Models

8 models
Models and the plans each one belongs to
ModelPlans
claude-sonnet-5basicproenterprise
claude-sonnet-5-uncensoredbasicproenterprise
gemini-3.8-flashbasicproenterprise
gemini-3.7-flashbasicproenterprise
gemini-3.6-flashbasicproenterprise
gemini-imagenbasicproenterprisefree
gemini-3.6-flash-uncensoredbasicproenterprise
claude-opus-4-6-Freefree

Reference

Routes the proxy accepts
RouteHeaderFormat
POST /v1/messagesx-api-keyAuthorization: Beareranthropic-versionAnthropic Messages
POST /v1/chat/completionsAuthorization: BearerOpenAI Chat Completions
POST /v1/responsesAuthorization: BearerOpenAI Responses

/v1/complete does not exist: it returns 404. Use /v1/messages.

Errors the proxy raises
CodeWhat happenedWhat to do
429Quota used up.Wait for the window to free requests up, or move up a plan.
403The model is not in your plan.Pick another one from the table above, or move up a plan.

The quota is a rolling 24-hour window: every request frees up 24 hours after you made it, not at midnight.

Service status