Get Started
Connect your editor, agent, or CLI to the live Kourier.sh model through OpenAI-compatible APIs.
kourier.sh serves DeepSeek V4 Flash behind OpenAI-compatible and Anthropic-compatible endpoints. If a tool lets you set a custom base URL and API key, it talks to kourier.sh with no new SDK to learn.
kourier.sh is currently in alpha. API access is controlled through the Omega early-access entitlement.
Get an API key
- Sign up at app.kourier.sh/signup. New accounts start on Free with dashboard access.
- Redeem an Omega activation code on the Dashboard, or ask an administrator to assign Omega.
- Open Dashboard → API Keys and generate a key. It's shown once — copy it immediately.
Quick start
Point any OpenAI-compatible client at kourier.sh with two environment variables:
export OPENAI_API_KEY="sk-bf-..."
export OPENAI_BASE_URL="https://api.kourier.sh/v1"That's enough for any tool that reads the standard OPENAI_API_KEY / OPENAI_BASE_URL (or an equivalent "custom OpenAI-compatible provider") setting.
Compatible clients
These tools accept a custom OpenAI-compatible base URL and key — some read the env vars above directly (Aider, raw SDK/curl), others take the same base URL and key through their own settings UI or config file:
| Tool | Where to set it |
|---|---|
| Cursor | Settings → Models → add an OpenAI API key, override the base URL |
| Zed | settings.json → language_models.openai.api_url |
| OpenCode | Provider config → add an OpenAI-compatible provider |
| Cline (VS Code) | Provider dropdown → "OpenAI Compatible" |
| Continue (VS Code / JetBrains) | config.json → provider "openai" with a custom apiBase |
| Aider | --openai-api-base flag, or the env vars above |
| Any OpenAI SDK (Python, Node, curl, etc.) | base_url / OPENAI_BASE_URL constructor option |
Codex CLI
Codex removed the legacy chat wire format, so it must be pinned to wire_api = "responses" — which kourier.sh serves natively (streaming and tool calls included). Add a custom provider to ~/.codex/config.toml:
[model_providers.kourier]
name = "Kourier"
base_url = "https://api.kourier.sh/v1"
env_key = "KOURIER_API_KEY"
wire_api = "responses"
[profiles.kourier]
model_provider = "kourier"
model = "DSV4-Flash-0731"Export your key and run Codex against the profile:
export KOURIER_API_KEY="sk-bf-..."
codex --profile kouriermodel must be one your key is granted, or the first request is rejected. The dashboard's Connect your tools panel shows the exact model string for your account.
Claude Code
Claude Code speaks Anthropic's Messages API. Point it at the endpoint's Anthropic surface (https://api.kourier.sh/anthropic — Claude Code appends /v1/messages itself) and pin both model variables to your granted model:
export ANTHROPIC_BASE_URL="https://api.kourier.sh/anthropic"
export ANTHROPIC_AUTH_TOKEN="sk-bf-..."
export ANTHROPIC_MODEL="DSV4-Flash-0731"
export ANTHROPIC_SMALL_FAST_MODEL="DSV4-Flash-0731"ANTHROPIC_SMALL_FAST_MODEL is required: left unset, Claude Code routes background tasks to a Haiku model your key isn't granted, and those calls fail. Use ANTHROPIC_AUTH_TOKEN (not ANTHROPIC_API_KEY) so the key is sent as Authorization: Bearer — though the endpoint accepts either header. Set both models to whatever your key is granted (shown in the dashboard's Connect your tools panel).
Manual configuration
| Setting | Value |
|---|---|
| Base URL | https://api.kourier.sh/v1 |
| Chat completions endpoint | https://api.kourier.sh/v1/chat/completions |
| Auth header | Authorization: Bearer <your API key> |
| Live model string | DSV4-Flash-0731 |
| Supported input context | Up to 262,144 tokens |
| Maximum context length | 278,528 tokens (272K) |
API reference
kourier.sh implements the OpenAI Chat Completions API, including streaming.
curl https://api.kourier.sh/v1/chat/completions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "DSV4-Flash-0731",
"messages": [
{"role": "user", "content": "Refactor this function to async/await."}
],
"stream": true
}'import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.kourier.sh/v1",
api_key=os.environ["OPENAI_API_KEY"],
)
stream = client.chat.completions.create(
model="DSV4-Flash-0731",
messages=[{"role": "user", "content": "Explain this stack trace."}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")See Models for the current model identifier and routing details.