Celon

Integrations

Tool integrations

Celon accepts both the OpenAI and the Anthropic Messages formats, so an existing client works by changing a base URL and a key. Both formats run the same gateway, so routing, savings, guardrails and the audit trail apply identically.

Which endpoint

Most tools use the OpenAI format. Claude Code supports only the Anthropic Messages format, so it gets a dedicated endpoint and connects without a proxy.

FormatEndpointAuth headerTools
OpenAIhttps://api.celon.ai/v1Authorization: BearerCursor, OpenClaw, Hermes, AI SDK, OpenAI SDK
Anthropic Messageshttps://api.celon.aix-api-keyClaude Code, Anthropic SDK

Setup via agent

Most of the tools below are agents. Rather than editing config by hand, paste the following prompt — the agent works out its own format and config location.

agent prompt
Set up Celon as this tool's model provider.

- OpenAI-compatible endpoint: https://api.celon.ai/v1
- Anthropic Messages endpoint: https://api.celon.ai  (for tools that only speak
  the Anthropic format, like Claude Code)
- API key: sk-celon-...  ← replace with my key
- Model: celon/code for a coding tool, celon/auto for a general one
- If the tool takes a separate background/summary model: celon/floor

Work out whether this tool speaks the OpenAI or the Anthropic format, then edit
the right config file or env vars. When you're done, send one short request to
confirm it works.

Claude Code

Claude Code pins claude-* model names internally, so set ANTHROPIC_MODEL to route through Celon. Without it the model you named is served as-is, bypassing the router.

~/.zshrc
export ANTHROPIC_BASE_URL="https://api.celon.ai"
export ANTHROPIC_API_KEY="sk-celon-..."

# Coding work — hard code to the frontier, lighter code to strong cheap coders
export ANTHROPIC_MODEL="celon/code"
# Background work (summaries, titles) — cheapest quality-vetted model
export ANTHROPIC_SMALL_FAST_MODEL="celon/floor"

ANTHROPIC_SMALL_FAST_MODEL is the model Claude Code uses for background work like summaries and titles. Pointing it at celon/floor serves that work from the cheapest quality-vetted model.

terminal
claude
> /status

Cursor

Settings → Models: add an OpenAI-compatible provider with an override base URL.

Cursor · Models
Base URL:  https://api.celon.ai/v1
API Key:   sk-celon-...
Model:     celon/code

OpenClaw

Add a provider with api: "openai-completions". The model must also be allowlisted under agents.defaults.models as provider-name/model-id. Celon model ids already contain a slash, so the entry reads celon/celon/auto.

openclaw.json
{
  "models": {
    "providers": {
      "celon": {
        "baseUrl": "https://api.celon.ai/v1",
        "apiKey": "sk-celon-...",
        "api": "openai-completions",
        "models": [
          { "id": "celon/auto", "name": "Celon Auto", "contextWindow": 1000000, "maxTokens": 8192 }
        ]
      }
    }
  },
  "agents": { "defaults": { "models": ["celon/celon/auto"] } }
}

Hermes

Hermes supports any OpenAI-compatible endpoint. After connecting, select the model with hermes model.

terminal
export OPENAI_BASE_URL="https://api.celon.ai/v1"
export OPENAI_API_KEY="sk-celon-..."

hermes model  # pick celon/auto

Vercel AI SDK

Use createOpenAI with a baseURL. Streaming and tool calling work unchanged.

app/api/chat/route.ts
import { createOpenAI } from "@ai-sdk/openai";
import { generateText } from "ai";

const celon = createOpenAI({
  baseURL: "https://api.celon.ai/v1",
  apiKey: process.env.CELON_API_KEY,
});

const { text } = await generateText({
  model: celon("celon/auto"),
  prompt: "Summarize this quarter's metrics",
});

OpenAI SDK

The same two-line change covered in the quick start.

client.ts
 const client = new OpenAI({
-  baseURL: "https://api.openai.com/v1",
-  apiKey: process.env.OPENAI_API_KEY,
+  baseURL: "https://api.celon.ai/v1", // ← Celon gateway
+  apiKey: process.env.CELON_API_KEY,  // ← sk-celon-…
 });

Anthropic Messages directly

For clients implemented directly against the Messages format. Routing options are identical to the OpenAI endpoint — see Smart routing.

terminal
curl https://api.celon.ai/v1/messages \
  -H "x-api-key: $CELON_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "celon/auto",
    "max_tokens": 1024,
    "messages": [{ "role": "user", "content": "Hello" }]
  }'

Unsupported fields

These three fields are ignored when present. Accepting a value that is never applied would misrepresent what the endpoint does, so it is stated here instead.

FieldWhy
thinkingThe gateway's internal response shape has no field for reasoning content, so an upstream trace cannot be carried back even when the model produces one. Thinking blocks in your history are accepted and ignored.
cache_controlThere is no path to carry prompt-cache markers upstream, and a request may route to a model that is not Anthropic's.
top_kNo counterpart in the OpenAI-shaped pipeline the request runs through.

POST /v1/messages/count_tokens returns an estimate. It is computed before the request resolves to a model, so there is no single tokenizer to be exact against.