API reference
One OpenAI-compatible endpoint. Point an existing client at the base URL, send your key, and everything your SDK already does works: chat, completions, streaming, tool calling, structured output and usage accounting.
Base URL and authentication
https://api.creeksidecompute.ai/v1
Authorization: Bearer YOUR_KEY
Keys are issued by email ([email protected]) and billed monthly. One key per project. A key carries a rate limit (600 requests per minute by default; more on request) and a retention setting (off by default).
Endpoints
| Method | Path | What it does |
|---|---|---|
| GET | /v1/models | The catalogue: model ids with prices, context length and the fields marketplaces read. |
| POST | /v1/chat/completions | Chat, streaming or not. Tool calling and response_format JSON schema supported. |
| POST | /v1/completions | Plain completions, streaming or not. |
| POST | /v1/billing | {"requestIds": [...]} answers the cost of each request in nano-dollars, for marketplaces that reconcile. |
Models
| Model id | Context | Max output | Input | Output | Cached input |
|---|---|---|---|---|---|
qwen/qwen3.8-27b | 131,072 | 65,536 | $0.15 / M | $1.80 / M | $0.035 / M |
Prices are per million tokens on the default, zero-retention tier. The retained tier is 25% lower; see the privacy policy for what it means. GET /v1/models is authoritative.
A request
curl https://api.creeksidecompute.ai/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen/qwen3.8-27b",
"messages": [{"role": "user", "content": "Explain prefix caching in two sentences."}],
"max_tokens": 256,
"stream": true,
"stream_options": {"include_usage": true}
}'
Streaming uses server-sent events. With stream_options.include_usage the final chunk carries usage, including prompt_tokens_details.cached_tokens: the part of your prompt that was already in our cache and is billed at the cached price. Reuse a long system prompt or the earlier turns of a conversation and that number climbs.
Sampling and features
temperature, top_p, top_k, min_p, presence_penalty, frequency_penalty, repetition_penalty, stop, seed, logprobs and n behave as in the OpenAI API. Tool calling uses tools and tool_choice; structured output uses response_format with json_schema. Reasoning can be steered with chat_template_kwargs: {"enable_thinking": false} to skip the model's thinking phase.
Headers
| Header | Direction | Effect |
|---|---|---|
x-creekside-retention | request | none on any request means it is never stored, whatever the key's tier. store opts a single request in under a zero-retention key. The header always wins. |
Idempotency-Key | request | Retry a dropped request with the same key within ten minutes and you get the same answer, not a second bill. A replay carries x-idempotent-replayed: true. |
x-request-id | both | Send one and we adopt it; otherwise we generate one. It is on every response and every support conversation starts with it. |
Retry-After | response | On 429 and 503: seconds to wait before retrying. |
Limits
600 requests per minute per key by default. Prompts up to 131,072 tokens; outputs up to 65,536. Under load we answer early with a 429 and Retry-After rather than queueing you into a slow response, so retry with backoff; a request is never silently dropped. First-token time is what we optimise: on a 4K-token prompt expect about half a second from the United States.
Errors
Errors are OpenAI-shaped: {"error": {"message", "type": "gateway_error", "code"}}.
| Status | Code | Meaning |
|---|---|---|
| 401 | missing_api_key, invalid_api_key | No bearer header, or a key we do not know. |
| 400 | invalid_json, missing_model | The body did not parse, or has no model. |
| 400 | context_too_long | The prompt exceeds the model's window. |
| 404 | model_not_found | No such model id; check /v1/models. |
| 409 | idempotency_in_progress | A request with the same Idempotency-Key is still running. |
| 429 | rate_limited, capacity | Over your key's rate, or every worker busy after a short wait. Honour Retry-After. |
| 503 | no_capacity | No healthy worker for the model right now. |
| 502 | upstream_unavailable | Every attempt failed before the first byte. Safe to retry. |
Data
By default nothing you send or receive is written to disk. Every request leaves an accounting record (ids, timestamps, token counts, cost) and no content. The privacy policy has the whole of it; the content policy says what the API may be used for.
Clients
The home page has copy-paste setup for the OpenAI SDKs, Codex CLI, OpenCode, Cline, Kilo Code, Continue, Hermes Agent, OpenClaw and Claude Code. Anything that takes an OpenAI-compatible base URL works.