caft/docs
Dashboard

Chat apps

Add caft as a custom OpenAI-compatible provider.

Base URL https://api.caft.dev/v1, your caft key, model glm-5.3-flash. Two things apply to every app:

  • Reasoning counts toward the response token limit. With a low limit the answer can come back empty, so raise it.
  • Title, tag and suggestion requests use credits too.

Open WebUI

Admin Panel → Settings → Connections, then + under OpenAI API:

FieldValue
URLhttps://api.caft.dev/v1
KeyYour caft API key
API TypeChat Completions (not Responses)
Model IDsEmpty, or glm-5.3-flash

Or set it on first start (Open WebUI reads these only once):

Shell
docker run -d -p 3000:8080 \
  -e OPENAI_API_BASE_URLS="https://api.caft.dev/v1" \
  -e OPENAI_API_KEYS="$CAFT_API_KEY" \
  -e ENABLE_OLLAMA_API=False \
  -v open-webui:/app/backend/data --name open-webui \
  ghcr.io/open-webui/open-webui:v0.11.4

To cut background requests, turn off tag and follow-up generation in Settings → Interface.

NextChat

The key lives on the NextChat server:

Shell
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.1

BASE_URL has no /v1. CUSTOM_MODELS adds the model because NextChat doesn't read the model list. Don't use the browser's Custom Endpoint setting: the browser would call caft directly and fail.

Anyone who can open your NextChat page spends your credits. Protect it before sharing.

AnythingLLM

Shell
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.2

Keep GENERIC_OPEN_AI_MAX_TOKENS at 8192 or more (default 1024). Keep AnythingLLM's default embedder.

Cherry Studio

Settings → Model Provider → Add Provider:

FieldValue
Provider Namecaft
API KeyYour caft API key
OpenAI endpoint URLhttps://api.caft.dev

Leave the Responses and Anthropic fields empty, enable the provider, Sync models, and add glm-5.3-flash. Cherry adds /v1; don't end the URL with #.

In Settings → Default Model, set the Quick Model to caft too. Otherwise Cherry sends your conversation to its own service to write titles.

LibreChat

Add CAFT_API_KEY to .env and this endpoint to librechat.yaml:

YAML
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"]

On Docker, bind-mount librechat.yaml to /app/librechat.yaml in docker-compose.override.yml. Restart, then pick caft → glm-5.3-flash.

Chatbox

Settings → Model Provider → Add → Add Custom Provider, name it caft, mode OpenAI API Compatible (not Responses):

FieldValue
API KeyYour caft API key
API Hosthttps://api.caft.dev/v1
API PathEmpty

The preview should read https://api.caft.dev/v1/chat/completions. Fetch models and add glm-5.3-flash.

SillyTavern

API Connections:

FieldValue
APIChat Completion
Chat Completion SourceCustom (OpenAI-compatible)
Custom Endpointhttps://api.caft.dev/v1
Custom API KeyYour caft API key
Model IDglm-5.3-flash

Connect and check for Valid. In AI Response Configuration, set Max Response Length to 2048 or more (default 300), keep Context Size above it, and keep Multiple swipes per generation at 1. Skip Logit Bias presets; logit_bias can be rejected.

Check the connection

Send a short message in a new chat. On errors, see Troubleshooting.