Fast, cheap inference.
One OpenAI-compatible endpoint. Prepaid credits by card or USDC, or a monthly plan.
+75% discounts on official list prices, +50% discount from OpenRouter's cheapest prices →
- Input / 1M
- $0.0375
- Output / 1M
- $0.125
- Cached / 1M
- $0.00375
Monthly plans
A monthly number of credits for a fixed price, used in 5-hour, weekly and monthly windows. Any OpenAI-compatible tool, any number of keys.
- Credits a month
- 1,000
- Per 5 hours
- 200
- Per week
- 500
- Credits a month
- 2,750
- Per 5 hours
- 550
- Per week
- 1,375
- Credits a month
- 5,500
- Per 5 hours
- 1,100
- Per week
- 2,750
Plans cover GLM-5.3, GLM-5.3-Flash and DeepSeek V4.1 Flash. Other models bill your balance.
Setup
Works with your setup.
Connect your coding agent or chat app, bring caft to a router, or use our API directly. These are a few ways to get started.
Install the OpenAI Python SDK and set CAFT_API_KEY in your environment.
import os
from openai import OpenAI
client = OpenAI(base_url="https://api.caft.dev/v1", api_key=os.environ["CAFT_API_KEY"])
stream = client.chat.completions.create(
model="glm-5.3-flash",
messages=[{"role": "user", "content": "Hello"}],
max_tokens=64,
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")Install the OpenAI SDK and set CAFT_API_KEY in your server environment.
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.caft.dev/v1", apiKey: process.env.CAFT_API_KEY });
const stream = await client.chat.completions.create({
model: "glm-5.3-flash",
messages: [{ role: "user", content: "Hello" }],
max_tokens: 64,
stream: true,
});
for await (const chunk of stream) process.stdout.write(chunk.choices[0]?.delta?.content ?? "");Set CAFT_API_KEY in your shell and send a request.
curl https://api.caft.dev/v1/chat/completions \
--header "Authorization: Bearer $CAFT_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "glm-5.3-flash",
"messages": [{ "role": "user", "content": "Hello" }],
"max_tokens": 64,
"stream": true
}'Set CAFT_API_KEY for OpenClaw and merge this into ~/.openclaw/openclaw.json. Start a new session.
{
"agents": {
"defaults": {
"model": {
"primary": "caft/glm-5.3-flash"
}
}
},
"models": {
"mode": "merge",
"providers": {
"caft": {
"baseUrl": "https://api.caft.dev/v1",
"apiKey": "${CAFT_API_KEY}",
"api": "openai-completions",
"models": [
{
"id": "glm-5.3-flash",
"name": "GLM 5.3 Flash (caft)"
}
]
}
}
}
}Run hermes model outside an active chat. Choose Custom endpoint, then enter these values.
- Command
hermes model- Endpoint
- Custom endpoint (self-hosted / VLLM / etc.)
- API compatibility
- Chat Completions or Auto-detect
- Base URL
https://api.caft.dev/v1- API key
- Your caft API key
- Model
glm-5.3-flash
Set CAFT_API_KEY and merge this into ~/.config/opencode/opencode.json. Keep your existing providers and settings, then start OpenCode.
{
"$schema": "https://opencode.ai/config.json",
"model": "caft/glm-5.3-flash",
"small_model": "caft/glm-5.3-flash",
"provider": {
"caft": {
"npm": "@ai-sdk/openai-compatible",
"name": "caft",
"options": {
"baseURL": "https://api.caft.dev/v1",
"apiKey": "{env:CAFT_API_KEY}"
},
"models": {
"glm-5.3-flash": {
"name": "GLM 5.3 Flash"
}
}
}
}
}Uses Claude Code Router. Back up ~/.claude/settings.json, save this as ~/.claude-code-router/config.json, and run ccr start. Set ANTHROPIC_MODEL and ANTHROPIC_DEFAULT_HAIKU_MODEL to caft/glm-5.3-flash.
{
"HOST": "127.0.0.1",
"PORT": 3456,
"APIKEY": "your-local-ccr-key",
"Providers": [
{
"name": "caft",
"api_base_url": "https://api.caft.dev/v1/chat/completions",
"api_key": "$CAFT_API_KEY",
"models": [
"glm-5.3-flash"
]
}
]
}Uses LiteLLM. Run LiteLLM with this model, then add a Codex provider for http://127.0.0.1:4000/v1 with wire_api = "responses" and model caft-flash.
model_list:
- model_name: caft-flash
litellm_params:
model: openai/glm-5.3-flash
api_base: https://api.caft.dev/v1
api_key: os.environ/CAFT_API_KEY
use_chat_completions_api: true
additional_drop_params: ["web_search_options"]Set CAFT_API_KEY and merge this provider into ~/.pi/agent/models.json. Select it with /model.
{
"providers": {
"caft": {
"baseUrl": "https://api.caft.dev/v1",
"api": "openai-completions",
"apiKey": "$CAFT_API_KEY",
"models": [
{
"id": "glm-5.3-flash",
"name": "GLM 5.3 Flash (caft)"
}
]
}
}
}Open Cline settings, select OpenAI Compatible, and save these connection values.
- API type
- OpenAI Compatible
- Base URL
https://api.caft.dev/v1- API key
- Your caft API key
- Model
glm-5.3-flash
Set CAFT_API_KEY and save this as ~/.config/goose/custom_providers/caft.json. Set GOOSE_PROVIDER=caft and GOOSE_MODEL, then run Goose with the developer extension.
{
"name": "caft",
"engine": "openai",
"display_name": "caft",
"api_key_env": "CAFT_API_KEY",
"base_url": "https://api.caft.dev/v1/chat/completions",
"models": [
{
"name": "glm-5.3-flash"
}
],
"requires_auth": true,
"supports_streaming": true
}Set CAFT_API_KEY, then start Aider in your repository. Keep the openai/ prefix and ignore the model names Aider suggests.
export OPENAI_API_BASE=https://api.caft.dev/v1
export OPENAI_API_KEY="$CAFT_API_KEY"
aider --model openai/glm-5.3-flash --no-show-model-warningsPut CAFT_API_KEY in ~/.continue/.env and merge this into ~/.continue/config.yaml. The editor extension does not read shell variables.
name: caft
version: 1.0.0
schema: v1
models:
- name: GLM 5.3 Flash (caft)
provider: openai
model: glm-5.3-flash
apiBase: https://api.caft.dev/v1
apiKey: ${{ secrets.CAFT_API_KEY }}
roles:
- chat
- edit
- apply
capabilities:
- tool_useSet CAFT_API_KEY and merge this into ~/.omp/agent/models.yml. Start Oh My Pi with omp --model caft/glm-5.3-flash.
providers:
caft:
baseUrl: https://api.caft.dev/v1
api: openai-completions
apiKey: CAFT_API_KEY
authHeader: true
models:
- id: glm-5.3-flash
name: GLM 5.3 Flash (caft)Set CAFT_API_KEY and add this to ~/.config/crush/crushrc. Select caft/glm-5.3-flash in Crush. Use openai-compat, not openai.
provider add caft --type openai-compat \
--name "caft" \
--base-url "https://api.caft.dev/v1" \
--api-key "$CAFT_API_KEY"
model add caft/glm-5.3-flash --name "GLM 5.3 Flash"Set CAFT_API_KEY, then start Qwen Code. Use --auth-type openai, not openai-responses.
export OPENAI_API_KEY="$CAFT_API_KEY"
export OPENAI_BASE_URL=https://api.caft.dev/v1
export OPENAI_MODEL=glm-5.3-flash
qwen --auth-type openaiOpen Settings → Providers → Custom provider. Save caft and select the model. Kilo needs accurate context and output limits for automatic context compaction; the model's limits are on the Models page.
- Provider ID
caft- Name
- caft
- API type
- OpenAI Compatible
- Base URL
https://api.caft.dev/v1- API key
- Your caft API key
- Model
glm-5.3-flash
Settings → Model settings → Add provider → Create custom provider. Use Chat completions, the caft base URL, and model glm-5.3-flash. Clear Image, Video and PDF, and paste this into the model's Reasoning parameter mapping. The default mapping sends fields the API rejects.
{
"reasoning_effort": reasoningLevel == "disabled" ? "none" : reasoningLevel == "enabled" ? "high" : reasoningLevel
}Add a custom OpenAI-compatible provider, then save a connection with your caft key.
- Name
- caft
- Prefix
caft- API type
- Chat Completions
- Base URL
https://api.caft.dev/v1- Model
glm-5.3-flash
Add this model to your existing config. Keep your proxy access settings.
model_list:
- model_name: caft-flash
litellm_params:
model: openai/glm-5.3-flash
api_base: https://api.caft.dev/v1
api_key: os.environ/CAFT_API_KEYAdd this entry to config.yaml and restart CLIProxyAPI. The base URL keeps /v1. Apps use a key from api-keys, not your caft key.
openai-compatibility:
- name: "caft"
base-url: "https://api.caft.dev/v1"
api-key-entries:
- api-key: "YOUR_CAFT_API_KEY"
models:
- name: "glm-5.3-flash"Open Channels → Add channel, save these values, and select Test. The base URL has no /v1. Apps use a new-api token, not your caft key.
- Type
- OpenAI
- Name
- caft
- Base URL
https://api.caft.dev- Key
- Your caft API key
- Models
glm-5.3-flash
Open Channels (渠道) → Add channel, save these values, and select Test. The base URL has no /v1. Apps use a One API token, not your caft key.
- Type
- OpenAI
- Name
caft- Base URL
https://api.caft.dev- Key
- Your caft API key
- Models
glm-5.3-flash
Add a custom OpenAI-compatible provider, then save a connection with your caft key.
- Name
- caft
- Prefix
caft- API type
- Chat Completions
- Base URL
https://api.caft.dev/v1- Model
glm-5.3-flash
Run the gateway from the Docker image; the npx build breaks streaming. Apps send your caft key and both x-portkey headers.
docker run -d -p 127.0.0.1:8787:8787 portkeyai/gateway:latest
curl http://localhost:8787/v1/chat/completions \
-H "Authorization: Bearer $CAFT_API_KEY" \
-H "Content-Type: application/json" \
-H "x-portkey-provider: openai" \
-H "x-portkey-custom-host: https://api.caft.dev/v1" \
-d '{"model": "glm-5.3-flash", "messages": [{"role": "user", "content": "Say hello."}], "stream": true}'Set CAFT_API_KEY and save this as config.json in the Bifrost app directory. The base URL has no /v1. Apps use the model caft/glm-5.3-flash.
{
"providers": {
"caft": {
"keys": [
{
"name": "caft",
"value": "env.CAFT_API_KEY",
"models": [
"*"
],
"weight": 1
}
],
"network_config": {
"base_url": "https://api.caft.dev",
"default_request_timeout_in_seconds": 300
},
"custom_provider_config": {
"base_provider_type": "openai",
"allowed_requests": {
"chat_completion": true,
"chat_completion_stream": true,
"list_models": true
}
}
}
}
}Open Groups → Add group, save these values, then create an access key for your apps. The upstream URL keeps /v1.
- Channel
- OpenAI Compatible
- Upstream URL
https://api.caft.dev/v1- API keys
- Your caft API key
- Models
glm-5.3-flash
Open Channels → Add Channel and save these values. New channels start disabled, so enable the channel. Apps use an AxonHub API key.
- Provider
- OpenAI
- Name
caft- Base URL
https://api.caft.dev/v1- API key
- Your caft API key
- Models
glm-5.3-flash
Open Admin Panel → Settings → Connections and add an OpenAI API connection. Keep API Type on Chat Completions.
- URL
https://api.caft.dev/v1- Key
- Your caft API key
- API type
- Chat Completions
- Model
glm-5.3-flash
Run NextChat with your key on the server. BASE_URL has no /v1, and CUSTOM_MODELS adds the caft model.
docker run -d -p 3000:3000 \
-e OPENAI_API_KEY="$CAFT_API_KEY" \
-e BASE_URL="https://api.caft.dev" \
-e CUSTOM_MODELS="-all,+glm-5.3-flash@OpenAI" \
-e DEFAULT_MODEL="glm-5.3-flash@OpenAI" \
yidadaa/chatgpt-next-web:v2.16.1Run AnythingLLM with the Generic OpenAI provider. Keep Max Tokens at 8192 or more; reasoning counts toward it.
docker run -d -p 3001:3001 --cap-add SYS_ADMIN \
-v anythingllm_storage:/app/server/storage \
-e STORAGE_DIR=/app/server/storage \
-e LLM_PROVIDER=generic-openai \
-e GENERIC_OPEN_AI_BASE_PATH=https://api.caft.dev/v1 \
-e GENERIC_OPEN_AI_API_KEY="$CAFT_API_KEY" \
-e GENERIC_OPEN_AI_MODEL_PREF=glm-5.3-flash \
-e GENERIC_OPEN_AI_MAX_TOKENS=8192 \
mintplexlabs/anythingllm:1.16.2Open Settings → Model Provider → Add Provider, then Sync models. Also set the Quick Model to caft, or titles go to Cherry's own service.
- Name
- caft
- API key
- Your caft API key
- OpenAI URL
https://api.caft.dev- Model
glm-5.3-flash
Add this endpoint to librechat.yaml, set CAFT_API_KEY in .env, and restart. Keep dropParams so the user field is not sent upstream.
endpoints:
custom:
- name: "caft"
apiKey: ${CAFT_API_KEY}
baseURL: "https://api.caft.dev/v1"
models:
default: ["glm-5.3-flash"]
fetch: true
titleConvo: true
titleModel: "current_model"
dropParams: ["user"]Open Settings → Model Provider → Add → Add Custom Provider, then Fetch models. Keep API Path empty.
- API mode
- OpenAI API Compatible
- API key
- Your caft API key
- API host
https://api.caft.dev/v1- Model
glm-5.3-flash
Open API Connections, enter these values, and select Connect. Raise Max Response Length from 300, or reasoning uses up the answer.
- Source
- Custom (OpenAI-compatible)
- Endpoint
https://api.caft.dev/v1- API key
- Your caft API key
- Model
glm-5.3-flash- Response
- Max Response Length 2048 or more