API docs.
Everything you need to call Zouk and Helios from your own code.
Overview
The Bleepless API is OpenAI-compatible: any OpenAI SDK or tool works if you point it at our base URL and use a Bleepless key.
Base URL https://bleepless.com/api/v1
Endpoints POST /chat/completions
GET /modelsAuthentication
Create a key on the platform. Keys start with bl_live_ and are shown once, so store yours safely. Send it as a bearer token:
Authorization: Bearer bl_live_...Never put a key in client-side code anyone can read. If one leaks, revoke it on the platform and make a new one.
Your first request
curl https://bleepless.com/api/v1/chat/completions \
-H "Authorization: Bearer $BLEEPLESS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "helios-1",
"messages": [{"role": "user", "content": "Give me a brutally honest review of my startup idea: Uber for socks."}]
}'Parameters
| Parameter | Type | Notes |
|---|---|---|
model | string | Required. zouk-2 or helios-1. |
messages | array | Required. Roles system, developer, user, assistant; content is a string or text parts. |
stream | boolean | Stream tokens as Server-Sent Events. Default false. |
stream_options.include_usage | boolean | Send a final chunk with token usage when streaming. |
max_tokens / max_completion_tokens | integer | Upper limit on output tokens, reasoning included. Defaults to the model's default. |
temperature | number | 0 to 2. Default 0.8. |
top_p | number | 0 to 1. |
stop | string | string[] | Up to 4 stop sequences. |
tools, functions | Not supported yet (returns 400). |
Response
{
"id": "chatcmpl-…",
"object": "chat.completion",
"model": "helios-1",
"choices": [{
"index": 0,
"message": { "role": "assistant", "content": "…", "reasoning_content": "…" },
"finish_reason": "stop"
}],
"usage": { "prompt_tokens": 42, "completion_tokens": 615, "total_tokens": 657 }
}finish_reason is stop when the model finished, or length when it hit max_tokens.
Streaming
With stream: true you get standard chat.completion.chunk events, then data: [DONE]. While a cold GPU starts, the stream sends : keep-alive comments every 15 seconds. They're ignored by SDKs and keep proxies from closing the connection.
data: {"choices":[{"delta":{"reasoning_content":"The user wants…"}}]}
data: {"choices":[{"delta":{"content":"Here's"}}]}
data: {"choices":[{"delta":{},"finish_reason":"stop"}]}
data: [DONE]Reasoning
Both models think before they answer. The thinking comes back separately as reasoning_content (in message, or in delta when streaming), so content holds only the answer. Reasoning tokens count as output tokens.
Models
| Model | Context | Max output | Input / 1M | Output / 1M |
|---|---|---|---|---|
zouk-2Fast 24B model, fine-tuned to answer instead of refuse. Visible reasoning. | 24,576 | 4,096 | $0.20 | $0.90 |
helios-1Our frontier 27B model, abliterated. Thinks before it answers. | 32,768 | 8,192 | $0.40 | $2.80 |
The models present themselves as Zouk or Helios by Bleepless AI. If your system message gives them a different name or persona, they use yours.
Errors
Errors use OpenAI's format: { "error": { "message", "type", "code" } }.
| Status | Code | What to do |
|---|---|---|
| 400 | invalid_request_error | Fix the request body. |
| 400 | context_length_exceeded | Shorten the messages or lower max_tokens. |
| 400 | content_policy_violation | The request breaks a hard limit. Change it. |
| 401 | invalid_api_key | Check the key, or create a new one. |
| 402 | insufficient_quota | Top up credits on the platform. |
| 404 | model_not_found | Use zouk-2 or helios-1. |
| 429 | rate_limit_exceeded | Too many requests per minute or at once. Retry after a short wait. |
| 502 | server_error | The model didn't finish. You're only charged for tokens it produced. |
Rate limits
| Tier | Unlocks at | Requests / minute | At once |
|---|---|---|---|
| Tier 1 | Default | 20 | 2 |
| Tier 2 | $50 spent | 60 | 5 |
| Tier 3 | $250 spent | 200 | 15 |
Pricing and billing
- Prepaid credits, bought on the platform in $10, $25 or $100 top-ups. Credits don't expire.
- Each request first holds the most it could cost (its input plus
max_tokens), then is charged only for the tokens actually used. - A request that fails on our side before writing anything is free.
- When your balance can't cover a request, you get a 402 instead of a bill.
- Usage, cost per request and your credit history are on the platform.
Cold starts and timeouts
Our GPUs sleep when nobody is using them. The first request after a quiet spell has to wake one up, which can take a few minutes; after that, replies start in seconds. Set your client timeout to 15 minutes and prefer streaming. Requests are cut off after 13 minutes in total.
Content rules
The API follows our usage rules and the API terms. In short: no sexual content, nothing sexual involving minors, no instructions for self-harm. Requests that break a hard limit are rejected before they reach the model, and we may revoke keys that keep trying. We don't store prompts or replies.