Skip to content

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 KeysCreate key. Copy the sk-keln-… key; it's shown once and stored hashed.

2 · Add credit

Workspaces are prepaid. Open BillingAdd 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 a 400, reasoning

Next: migrate an existing app · keys & budgets · API reference