# Quickstart > A step-by-step walkthrough from creating an API key to your first API request. Source: https://kiln.bricksum.com/docs/en/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](https://kiln.bricksum.com/signup) 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](https://kiln.bricksum.com/app/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. Tip Keep your API key secret. Never commit it to source control or ship it in client-side code. Load it from an environment variable (e.g. `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: **Python** ```bash pip install openai ``` **JavaScript** ```bash npm install openai ``` Set 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** ```python 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** ```bash 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!"} ] }' ``` **Python** ```python 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) ``` **JavaScript** ```javascript 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** ```bash 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 }' ``` **Python** ```python 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="") ``` **JavaScript** ```javascript 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](https://kiln.bricksum.com/models) — 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](https://kiln.bricksum.com/docs/en/api-reference) — supported endpoints, request fields and known limitations - [Errors](https://kiln.bricksum.com/docs/en/errors) — what 401 (bad key), 402 (no credit) and 429 (rate limit) mean, and how to retry - [Rate limits](https://kiln.bricksum.com/docs/en/rate-limits) — rate limits (default 60 RPM) and retry guidance - [Console → Tools](https://kiln.bricksum.com/app/tools) — copy the setup snippet for Claude Code, Codex CLI, OpenCode or Cursor