API documentation
The API is OpenAI-compatible. Any OpenAI SDK works — set the base URL and your key.
Basics
| Base URL | https://ai.dev-fastcoo.com/v1 |
|---|---|
| Auth | Authorization: Bearer YOUR_KEY |
| Rate limit | 20 requests/min, 40000 tokens/min per key |
Sign in to generate a key.
Generating a key programmatically
Keys are normally created from the dashboard, but you can also mint one with your account credentials — useful in provisioning scripts. Your account must already be approved, and you can hold at most 5 keys.
curl https://ai.dev-fastcoo.com/api/tokens \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com","password":"YOUR_PASSWORD"}'
201 {"key":"sk-...","alias":"...","rpm":20,"tpm":40000,"base_url":"https://ai.dev-fastcoo.com/v1"}
The key is returned once and cannot be retrieved again — store it when you get it.
Errors come back as JSON with an error field: 401 bad credentials,
403 account pending approval, 429 key limit reached or too many failed
attempts from your IP.
Available models
Pick one per request via the "model" field. Every key works for all models below; the list is fetched live from the backend.
| Model id |
|---|
qwen3-4b |
qwen2.5-7b-instruct |
qwen2.5-3b-instruct |
These ids all currently resolve to the same backend model — the
server holds one model in GPU memory at a time. The older qwen2.5-* ids are kept
as aliases so keys issued against them keep working; prefer the first id above for new code.
Or query GET https://ai.dev-fastcoo.com/v1/models from your client.
Endpoints
| GET | /v1/models | List models |
|---|---|---|
| POST | /v1/chat/completions | Chat completions (supports stream:true) |
| POST | /v1/completions | Text completions |
Tool calling
Standard OpenAI-style function calling is supported. Pass tools and
optionally tool_choice; a tool call comes back with
finish_reason: "tool_calls" and a populated tool_calls array
(content will be null).
curl https://ai.dev-fastcoo.com/v1/chat/completions \
-H "Authorization: Bearer $YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"qwen3-4b",
"messages":[{"role":"user","content":"Weather in Paris?"}],
"tools":[{"type":"function","function":{
"name":"get_weather",
"parameters":{"type":"object","properties":{"city":{"type":"string"}},"required":["city"]}}}],
"tool_choice":"auto"}'
Reasoning (thinking)
The backend is a hybrid reasoning model, but thinking is off by default — on a shared GPU it would spend most of the context window and most of the response time on internal reasoning. Opt in per request:
{"model":"qwen3-4b",
"messages":[{"role":"user","content":"..."}],
"chat_template_kwargs":{"enable_thinking":true},
"max_tokens":1024}
When enabled, the reasoning trace is returned in a separate
reasoning field on the message rather than mixed into content.
Raise max_tokens when you turn it on — reasoning is counted against the same
budget, and a low limit can consume it all and leave an empty answer.
Data handling
Requests are served entirely on our own hardware — the model runs locally and prompts are never forwarded to a third-party provider. Prompt and response text is not stored. The gateway records usage metadata only: timestamp, model, token counts, cost and which key was used, which is what the usage page is built from.
Nothing sent to this API is used to train or fine-tune any model.
cURL
curl https://ai.dev-fastcoo.com/v1/chat/completions \
-H "Authorization: Bearer $YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"qwen3-4b","messages":[{"role":"user","content":"Write a haiku about GPUs."}],"max_tokens":128}'
Python (openai SDK)
from openai import OpenAI
client = OpenAI(base_url="https://ai.dev-fastcoo.com/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="qwen3-4b",
messages=[{"role": "user", "content": "Hello!"}],
)
print(resp.choices[0].message.content)
Node (openai SDK)
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://ai.dev-fastcoo.com/v1", apiKey: process.env.YOUR_KEY });
const r = await client.chat.completions.create({
model: "qwen3-4b", messages: [{ role: "user", content: "Hello!" }],
});
console.log(r.choices[0].message.content);
Streaming (SSE)
curl https://ai.dev-fastcoo.com/v1/chat/completions \
-H "Authorization: Bearer $YOUR_KEY" -H "Content-Type: application/json" \
-d '{"model":"qwen3-4b","messages":[{"role":"user","content":"Count to 5"}],"stream":true}'