One endpoint.
Three protocols.
SuhadaCosme serves China's frontier open-weight models through a single API that speaks OpenAI, Anthropic and Gemini natively. Point any existing client, SDK or agent harness at a new base URL — that's the whole migration. One key works for every model and every protocol.
01Get your key
Keys are provisioned personally during beta. Email hello@suhadacosme.com with a sentence about your workload — you're usually running within a day.
02Make your first call
curl https://api.suhadacosme.com/v1/chat/completions \ -H "Authorization: Bearer $SUHADA_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "glm-5.3", "messages": [ {"role": "user", "content": "Say hello in five languages."} ] }'
03Point your stack at it
Authentication
One key, three native header styles. Use whichever your client already sends — no adapter, no shim.
| Protocol | How to pass the key | Example |
|---|---|---|
| OpenAI | Bearer token | Authorization: Bearer sk-... |
| Anthropic | Header + version | x-api-key: sk-... |
| Gemini | Header or query | x-goog-api-key: sk-... |
Keep keys server-side. All traffic is HTTPS-only. Need a rotation or a second key for staging? Email us — keys are managed manually during beta.
Models
The same model ID string works across all three protocols. Prices are USD per 1M tokens, cache-miss input / output.
| Model ID | Context | Input | Output | Best for |
|---|---|---|---|---|
| deepseek-v4-flash | 128K | $0.14 | $0.28 | high-volume, latency-sensitive |
| deepseek-v4-pro | 128K | $0.435 | $0.87 | deep reasoning on a budget |
| minimax-m3 | 1M | $0.30 | $1.20 | long-context workhorse |
| glm-5.1 | 200K | tiered | tiered | lean agentic coding |
| glm-5.2 | 1M | $1.40 | $4.40 | long-horizon agents, 1M-ctx RAG |
| glm-5.3 | 1M | $1.40 | $4.40 | hardest agentic & terminal work |
| kimi-k3 | 1M | $3.00 | $15.00 | SWE — closing real tickets |
| qwen3.8-max | 1M | $2.00 | $6.00 | all-round flagship MoE |
List models over the API: GET /v1/models with your Bearer key.
OpenAI API protocol
Full Chat Completions compatibility. Any OpenAI SDK, in any language, works by changing base_url.
·Endpoints
| Method | Path | Description |
|---|---|---|
| POST | /v1/chat/completions | Chat completions (stream & non-stream) |
| GET | /v1/models | List available models |
·curl
curl https://api.suhadacosme.com/v1/chat/completions \ -H "Authorization: Bearer $SUHADA_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "deepseek-v4-pro", "messages": [{"role": "user", "content": "hello"}], "stream": false }'
·Python SDK
from openai import OpenAI client = OpenAI( base_url="https://api.suhadacosme.com/v1", api_key="sk-...", ) resp = client.chat.completions.create( model="glm-5.3", messages=[{"role": "user", "content": "hello"}], ) print(resp.choices[0].message.content)
·JavaScript / TypeScript SDK
import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://api.suhadacosme.com/v1", apiKey: process.env.SUHADA_KEY, }); const resp = await client.chat.completions.create({ model: "kimi-k3", messages: [{ role: "user", content: "hello" }], }); console.log(resp.choices[0].message.content);
Anthropic API protocol
Native Messages API — drop-in for Claude SDKs and Claude Code itself. Send x-api-key plus anthropic-version.
·Endpoints
| Method | Path | Description |
|---|---|---|
| POST | /v1/messages | Create a message (stream & non-stream) |
·curl
curl https://api.suhadacosme.com/v1/messages \ -H "x-api-key: $SUHADA_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "Content-Type: application/json" \ -d '{ "model": "glm-5.2", "max_tokens": 1024, "system": "You are a precise senior engineer.", "messages": [{"role": "user", "content": "hello"}] }'
·Python SDK
from anthropic import Anthropic client = Anthropic( base_url="https://api.suhadacosme.com", api_key="sk-...", ) msg = client.messages.create( model="glm-5.3", max_tokens=1024, messages=[{"role": "user", "content": "hello"}], ) print(msg.content[0].text)
Note — max_tokens is required by the Anthropic protocol. System prompts, tool use and streaming events follow the native Anthropic shapes.
Gemini API protocol
Native generateContent surface for Gemini / Vertex-shaped clients — no rewriting your pipeline.
·Endpoints
| Method | Path | Description |
|---|---|---|
| POST | /v1beta/models/{model}:generateContent | Single-turn / multi-turn generate |
| POST | /v1beta/models/{model}:streamGenerateContent?alt=sse | Server-sent events stream |
·curl
curl "https://api.suhadacosme.com/v1beta/models/kimi-k3:generateContent" \ -H "x-goog-api-key: $SUHADA_KEY" \ -H "Content-Type: application/json" \ -d '{ "contents": [{"parts": [{"text": "hello"}]}] }'
·JavaScript SDK (@google/genai)
import { GoogleGenAI } from "@google/genai"; const ai = new GoogleGenAI({ apiKey: process.env.SUHADA_KEY, httpOptions: { baseUrl: "https://api.suhadacosme.com" }, }); const resp = await ai.models.generateContent({ model: "glm-5.3", contents: "hello", }); console.log(resp.text);
The ?key= query parameter is accepted as an alternative to the x-goog-api-key header, matching Google's client conventions.
Streaming
All three protocols stream with server-sent events, in each protocol's native chunk shape.
- OpenAI —
"stream": true; delta chunks terminate withdata: [DONE] - Anthropic —
"stream": true; events frommessage_startthroughcontent_block_deltatomessage_stop - Gemini —
:streamGenerateContent?alt=sse; JSON chunks indata:frames
Client timeouts — set read/idle timeouts to 600 seconds for long generations, and disable response buffering in any proxy between you and us. First tokens typically arrive fast; thinking-heavy models may pause between reasoning and output.
Errors
Errors follow each protocol's native schema, so your existing error handling keeps working.
| Status | OpenAI type | Anthropic type | Meaning |
|---|---|---|---|
| 400 | invalid_request_error | invalid_request_error | Malformed request or unknown parameter |
| 401 | authentication_error | authentication_error | Missing, invalid or revoked key |
| 404 | invalid_request_error | not_found_error | Unknown model or path |
| 429 | rate_limit_error | rate_limit_error | Rate limit — back off and retry |
| 500 | api_error | api_error | Upstream failure — retry with backoff |
| 503 | api_error | overloaded_error | Model temporarily drained — retry or fail over |
{
"error": {
"message": "Model glm-9 does not exist",
"type": "invalid_request_error",
"code": "model_not_found"
}
}Default rate limits are generous and scale with your plan. If you're hitting 429s, tell us your target RPM and we'll size your key accordingly.
Plug into your harness.
Agent harnesses and coding tools already speak one of our three protocols. Each guide below is a complete, verified configuration.
Claude Code
Claude Code talks the native Anthropic protocol — point it at SuhadaCosme with two environment variables.
·Environment variables
export ANTHROPIC_BASE_URL="https://api.suhadacosme.com" export ANTHROPIC_AUTH_TOKEN="sk-..." # optional — pin the model (default follows your Claude Code settings) export ANTHROPIC_MODEL="glm-5.3"
·Or persist it in settings
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.suhadacosme.com",
"ANTHROPIC_AUTH_TOKEN": "sk-...",
"ANTHROPIC_MODEL": "glm-5.3"
}
}·Run
claude # inside the session, switch models any time: # /model kimi-k3 (SWE specialist) # /model deepseek-v4-pro (deep reasoning, thin bill)
Verify — run claude and ask "which model are you?". If it answers as a GLM/Kimi/DeepSeek model, you're on SuhadaCosme.
Codex CLI
Codex supports any OpenAI Chat-Completions-compatible provider via model_providers.
·~/.codex/config.toml
# ~/.codex/config.toml model = "suhada/glm-5.3" model_provider = "suhada" [model_providers.suhada] name = "SuhadaCosme" base_url = "https://api.suhadacosme.com/v1" env_key = "SUHADA_API_KEY" wire_api = "chat"
·Run
export SUHADA_API_KEY="sk-..." codex # uses suhada/glm-5.3 from config codex --model suhada/kimi-k3 # override per-run
Notes — base_url must end in /v1 with no trailing slash; wire_api = "chat" selects the Chat Completions wire format. If you only want the built-in OpenAI provider redirected, openai_base_url works too.
OpenClaw
Add SuhadaCosme as a custom provider in openclaw.json (legacy path ~/.clawdbot/clawdbot.json is symlinked automatically).
·~/.openclaw/openclaw.json
{
"models": {
"providers": {
"suhada": {
"baseUrl": "https://api.suhadacosme.com/v1",
"apiKey": "sk-...",
"api": "openai-completions",
"models": [
{ "id": "glm-5.3" },
{ "id": "glm-5.2" },
{ "id": "kimi-k3" },
{ "id": "deepseek-v4-pro" }
]
}
}
}
}·Select the model
openclaw models set suhada/glm-5.3 # or pick it interactively from the models list
Per-agent override — a specific agent can carry its own provider/model via ~/.openclaw/agents/<agent>/agent/models.json; empty fields fall back to the config above.
Cline / Roo Code
Both VS Code extensions have a built-in "OpenAI Compatible" provider — no config files needed.
- API Provider — choose
OpenAI Compatiblein the extension's settings panel - Base URL —
https://api.suhadacosme.com/v1 - API Key — your SuhadaCosme key
- Model ID — e.g.
glm-5.3orkimi-k3
Roo Code follows the same flow in its provider dropdown. Enable streaming in the panel for long generations.
aider
aider's OpenAI-compatible mode takes the base URL as a flag or environment variable.
export OPENAI_API_BASE="https://api.suhadacosme.com/v1" export OPENAI_API_KEY="sk-..." aider --model openai/glm-5.3 # strong SWE pair: aider --model openai/kimi-k3 --edit-format diff
Model prefix — aider needs the openai/ prefix to route through its OpenAI-compatible driver; the part after the slash is the SuhadaCosme model ID.
Hermes
Hermes speaks the OpenAI protocol for model backends. In your provider/model config, set:
- Endpoint / Base URL —
https://api.suhadacosme.com/v1 - API key — your SuhadaCosme key, passed as Bearer
- Model — any catalog ID, e.g.
glm-5.2for long-horizon agent loops
Anything else that speaks OpenAI, Anthropic or Gemini — LangChain, LlamaIndex, Continue, your own backend — works the same way: base URL + key + model ID.
FAQ
- One key for all protocols? — Yes. The same key authenticates OpenAI, Anthropic and Gemini surfaces.
- Same model across protocols? — Yes, identical model IDs and identical serving paths; pick the protocol your client already speaks.
- Tool calling / function calling? — Supported through each protocol's native tool-use shapes.
- Which model should I start with? —
glm-5.3for agentic coding,deepseek-v4-profor deep reasoning at minimum cost,deepseek-v4-flashfor volume. - Need a limit raised, a second key, or a model not listed? — hello@suhadacosme.com — we're fast.