Quickstart
Kiln serves an OpenAI-compatible API. Get a response from qwen3-32b in three steps: create an account, create an API key, and point an OpenAI client at the Kiln endpoint.
1. Sign up
Create an account on the sign-up page with an email address or with GitHub, Google or Naver. A personal organization is created for you; keys, usage and credits belong to it.
- Verify your email address. Trial credit is granted once, after verification, and expires 30 days later. The credits page in the console shows the amount and the remaining balance.
- During the open beta an operator may need to approve your account before the console opens. The pending page shows both checks and refreshes on its own.
2. Create an API key
In the console → API keys, an organization admin creates a key for a project. Keys start with sk-bk- and the full value is shown only once, at creation, so copy it then. Key creation is refused until you verify your email and your account is approved.
KILN_API_KEY) and rotate it if it leaks.3. Send your first request
Use an OpenAI-compatible client. The official OpenAI SDKs are the quickest way to start:
pip install openainpm install openaiSet your client's base_url to https://api.bricksum.com/v1. Request and response shapes follow the OpenAI API. Some parameters are not supported yet; see Known limitations in the API reference.
base_url = "https://api.bricksum.com/v1"Send a chat/completions request. The response shape matches the OpenAI API, including the usage field used for billing.
curl https://api.bricksum.com/v1/chat/completions \
-H "Authorization: Bearer sk-bk-..." \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-32b",
"messages": [
{"role": "user", "content": "Hello!"}
]
}'from openai import OpenAI
client = OpenAI(
base_url="https://api.bricksum.com/v1",
api_key="sk-bk-...", # your Kiln API key
)
resp = client.chat.completions.create(
model="qwen3-32b",
messages=[{"role": "user", "content": "Hello!"}],
)
print(resp.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.bricksum.com/v1",
apiKey: process.env.KILN_API_KEY, // sk-bk-...
});
const resp = await client.chat.completions.create({
model: "qwen3-32b",
messages: [{ role: "user", content: "Hello!" }],
});
console.log(resp.choices[0].message.content);Streaming
Set stream to true to receive tokens as server-sent events (SSE) as they are generated.
curl https://api.bricksum.com/v1/chat/completions \
-H "Authorization: Bearer sk-bk-..." \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-32b",
"messages": [{"role": "user", "content": "Hello!"}],
"stream": true
}'from openai import OpenAI
client = OpenAI(
base_url="https://api.bricksum.com/v1",
api_key="sk-bk-...",
)
stream = client.chat.completions.create(
model="qwen3-32b",
messages=[{"role": "user", "content": "Hello!"}],
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.bricksum.com/v1",
apiKey: process.env.KILN_API_KEY,
});
const stream = await client.chat.completions.create({
model: "qwen3-32b",
messages: [{ role: "user", content: "Hello!" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0].delta.content ?? "");
}Next steps
- Model catalog — compare current pricing, measured throughput over the last 24 hours and 90-day uptime for each model, then put the model ID in the model field
- API Reference — supported endpoints, request fields and known limitations
- Errors — what 401 (bad key), 402 (no credit) and 429 (rate limit) mean, and how to retry
- Rate limits — rate limits (default 60 RPM) and retry guidance
- Console → Tools — copy the setup snippet for Claude Code, Codex CLI, OpenCode or Cursor