API preview — not yet available.
The API will be OpenAI-compatible. Point any OpenAI SDK or tool at the API host below (available at launch) with your API key. Qwen models served by Alibaba Cloud Model Studio — one key, one balance.
Base URL: https://app.solver-one.ai/v1 (available at launch)
Header: Authorization: Bearer YOUR_API_KEY
All keys of an account will share one prepaid balance (USD); a new account starts with a zero balance and is topped up before calling.
curl https://app.solver-one.ai/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"qwen-plus","messages":[{"role":"user","content":"Say hello in Cantonese."}]}'
pip install openai)from openai import OpenAI
client = OpenAI(base_url="https://app.solver-one.ai/v1", api_key="YOUR_API_KEY")
r = client.chat.completions.create(
model="qwen-plus",
messages=[{"role": "user", "content": "Say hello in Cantonese."}],
)
print(r.choices[0].message.content)
print(r.usage) # prompt_tokens / completion_tokens — what you are billed for
npm install openai)import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://app.solver-one.ai/v1", apiKey: "YOUR_API_KEY" });
const r = await client.chat.completions.create({
model: "qwen-plus",
messages: [{ role: "user", content: "Say hello in Cantonese." }],
});
console.log(r.choices[0].message.content);
Settings → Model provider: OpenAI API compatible (or "Custom") → API host = https://app.solver-one.ai
(some apps want the /v1 suffix, some add it themselves) → API key = your key → model name = qwen-plus (or turbo / max).
Pass "stream": true (or stream=True in the SDK) to receive server-sent events (text/event-stream) token by token, ending with data: [DONE].
for chunk in client.chat.completions.create(model="qwen-turbo", messages=[...], stream=True):
print(chunk.choices[0].delta.content or "", end="", flush=True)
| model | best for |
|---|---|
qwen-turbo | Fastest, lowest cost of the three. Suited to high volume. |
qwen-plus | Balanced quality and cost. |
qwen-max | Highest quality for hard tasks. |
GET /v1/models (with your key) returns the same list in OpenAI format. Thinking / reasoning mode is off by default on every model (no hidden reasoning tokens on your bill); ask us if you need it.
| HTTP | error.code | message you receive | what to do |
|---|---|---|---|
| 400 | 400 | The request was not accepted — check the model name, messages and parameters. | fix the request (model id, messages, parameter values) |
| 401 | 401 | Invalid API key, or the key cannot access that model. | missing / invalid / revoked key → check the Authorization header; create a new key in your account |
| 403 | 403 | Invalid API key, or the key cannot access that model. | the key cannot use that model → use one of the models listed above |
| 402 | 402 | Insufficient balance — top up to continue. | top up your balance |
| 404 | 404 | The requested model or resource was not found — see GET /v1/models. | use a model id from GET /v1/models |
| 422 | 422 | The request body could not be processed — send valid JSON in the chat completions format. | send a valid chat completions JSON body |
| 429 | insufficient_quota | Insufficient balance — top up to continue. | balance is zero → top up your balance (retrying will not help) |
| 429 | rate_limit_exceeded | Rate limit exceeded — slow down and retry shortly. | requests / tokens per minute exceeded → back off and retry; honour the Retry-After header when present |
| 502 | 502 | The request could not be completed. | retry with backoff; if it persists, contact support |
| stream | 502 | data: {"error": {"message": "The stream could not be completed.", …}} | the stream ends early; retry the request |
Errors are returned as {"error": {"message": "...", "type": "...", "code": ...}} — the shape OpenAI SDKs expect, so they raise the usual exceptions. code is the HTTP status, except on 429, where it tells an empty balance (insufficient_quota) from a rate limit (rate_limit_exceeded) — as OpenAI does.
| limit | value |
|---|---|
| requests per minute (per key) | 120 |
| tokens per minute (per key) | 200,000 |
| max output tokens per request | 2,048 | (larger
| balance | prepaid, shared by all keys of the account; calls are refused at a zero balance |
Need higher limits? support@solver-one.ai.