One key, two API shapes, three models, no client changes.
One file, works the same on Windows, macOS and Linux. This is the recommended way — it survives closing the terminal.
~/.claude/settings.json — add or merge:
{
"env": {
"ANTHROPIC_BASE_URL": "https://abliterateme.com",
"ANTHROPIC_AUTH_TOKEN": "sk-your-key",
"ANTHROPIC_MODEL": "glm-5.3"
}
}
Or as environment variables, for this terminal only:
# bash / zsh export ANTHROPIC_BASE_URL="https://abliterateme.com" export ANTHROPIC_AUTH_TOKEN="sk-your-key" export ANTHROPIC_MODEL="glm-5.3"
# PowerShell $env:ANTHROPIC_BASE_URL = "https://abliterateme.com" $env:ANTHROPIC_AUTH_TOKEN = "sk-your-key" $env:ANTHROPIC_MODEL = "glm-5.3"
The model is chosen per request, in the model field.
Clients that send one name everywhere — Claude Code, Cursor, Cline — take it from
ANTHROPIC_MODEL, or from the picker in your
dashboard, which is used whenever a request comes in with a
name we do not recognise.
curl https://abliterateme.com/v1/models -H "x-api-key: sk-..."
{"data": [
{"id": "glm-5.3", "context": 1000000, "price_per_month": 4},
{"id": "deepseek-v4-pro", "context": 1000000, "price_per_month": 5},
{"id": "kimi-k3.1-pro", "context": 1000000, "price_per_month": 6}
]}
Any name is accepted. If your client pins claude-*
names, or sets ANTHROPIC_DEFAULT_SONNET_MODEL and friends, leave them
exactly as they are — the request still works and gets your dashboard default.
from openai import OpenAI client = OpenAI(base_url="https://abliterateme.com/v1", api_key="sk-your-key") client.chat.completions.create(model="deepseek-v4-pro", messages=[...])
Same key for both shapes. Endpoints: POST /v1/messages
and POST /v1/chat/completions.
| Method | Path |
|---|---|
| POST | /v1/messages |
| POST | /v1/chat/completions |
| GET | /v1/models |
| GET | /health |
curl https://abliterateme.com/v1/messages \
-H "x-api-key: sk-..." -H "content-type: application/json" \
-d '{"model":"glm-5.3","max_tokens":128,
"messages":[{"role":"user","content":"hello"}]}'
All three models take a 1M token context. A session that
runs past the working window is trimmed from the oldest turns and the request
still runs — you get a normal completion, not an error, and the model simply
remembers less. Setting max_tokens larger than what is left is fine
too; we clamp it.
Reported usage.input_tokens counts what the model
actually saw, so your context meter reflects the window, not your history.
Trial keys are rate limited and share a concurrency pool. When the
pool is full you get 429 rate_limit_error; retry shortly. This is
normal on the free plan and is not an error in your client.
The trial plan is intended for interactive agent tooling — clients
that send their tool definitions with every request. Scripted, batch or benchmark
use is rate limited more aggressively and may be held at 429 for the
remainder of the trial.