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  /models

Authentication

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

ParameterTypeNotes
modelstringRequired. zouk-2 or helios-1.
messagesarrayRequired. Roles system, developer, user, assistant; content is a string or text parts.
streambooleanStream tokens as Server-Sent Events. Default false.
stream_options.include_usagebooleanSend a final chunk with token usage when streaming.
max_tokens / max_completion_tokensintegerUpper limit on output tokens, reasoning included. Defaults to the model's default.
temperaturenumber0 to 2. Default 0.8.
top_pnumber0 to 1.
stopstring | string[]Up to 4 stop sequences.
tools, functionsNot 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

ModelContextMax outputInput / 1MOutput / 1M
zouk-2Fast 24B model, fine-tuned to answer instead of refuse. Visible reasoning.24,5764,096$0.20$0.90
helios-1Our frontier 27B model, abliterated. Thinks before it answers.32,7688,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" } }.

StatusCodeWhat to do
400invalid_request_errorFix the request body.
400context_length_exceededShorten the messages or lower max_tokens.
400content_policy_violationThe request breaks a hard limit. Change it.
401invalid_api_keyCheck the key, or create a new one.
402insufficient_quotaTop up credits on the platform.
404model_not_foundUse zouk-2 or helios-1.
429rate_limit_exceededToo many requests per minute or at once. Retry after a short wait.
502server_errorThe model didn't finish. You're only charged for tokens it produced.

Rate limits

TierUnlocks atRequests / minuteAt once
Tier 1Default202
Tier 2$50 spent605
Tier 3$250 spent20015

Pricing and billing

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.