Quickstart¶
Keln is OpenAI-compatible: change the base URL, keep everything else. First request in about two minutes.
1 · Create an account and key¶
Sign up at app.keln.ai, Google, GitHub, or email. Then Keys →
Create key. Copy the sk-keln-… key; it's shown once and stored hashed.
2 · Add credit¶
Workspaces are prepaid. Open Billing → Add credit, card checkout takes under a minute. Your card is saved for one-click top-ups and auto-recharge later.
3 · Make a request¶
from openai import OpenAI
client = OpenAI(base_url="https://api.keln.ai/v1", api_key="sk-keln-…")
stream = client.chat.completions.create(
model="deepseek-ai/deepseek-v4-flash",
messages=[{"role": "user", "content": "Hello Keln"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.keln.ai/v1", apiKey: "sk-keln-…" });
const stream = await client.chat.completions.create({
model: "deepseek-ai/deepseek-v4-flash",
messages: [{ role: "user", content: "Hello Keln" }],
stream: true,
});
for await (const chunk of stream) process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
curl https://api.keln.ai/v1/chat/completions \
-H "Authorization: Bearer sk-keln-…" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-ai/deepseek-v4-flash",
"messages": [{"role": "user", "content": "Hello Keln"}],
"stream": true
}'
Prefer to try without code? The portal Playground runs any catalog model against the same live API, with per-response latency and token metrics.
4 · See what happened¶
Open Usage in the portal: the request appears with its tokens, cost, and
delivered latency, scrollable by day. The response carries that figure too, usage.cost, what
the request cost in USD, so your code can read it without waiting for the dashboard. That
metadata view is everything Keln stores about your request
(zero data retention).
Active by default¶
- Routing, the best healthy capacity for the model, with predictive hedging and mid-stream failover, how
- Cache discount, repeat a long prompt prefix and the cached portion bills at the per-model
cached rate, visible as
cached_tokens, caching - Reasoning control, reasoning models think before answering by default; add
"reasoning_effort": "none"for a direct answer at lower latency and cost, one field, every model. A few models reason always-on (openai/gpt-oss-120b,openai/gpt-oss-20b,stepfun-ai/step-3.7-flash): there,"none"returns a400, reasoning
Next: migrate an existing app · keys & budgets · API reference