Solver-one is not open for sign-up yet. To talk to us, email biz@solver-one.ai.

API preview — not yet available.

Base URL & auth

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

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."}]}'

Python (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

Node (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);

Chatbox / any OpenAI-compatible app

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).

Streaming

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)

Models

modelbest for
qwen-turboFastest, lowest cost of the three. Suited to high volume.
qwen-plusBalanced quality and cost.
qwen-maxHighest 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.

Error codes

HTTPerror.codemessage you receivewhat to do
400400The request was not accepted — check the model name, messages and parameters.fix the request (model id, messages, parameter values)
401401Invalid API key, or the key cannot access that model.missing / invalid / revoked key → check the Authorization header; create a new key in your account
403403Invalid API key, or the key cannot access that model.the key cannot use that model → use one of the models listed above
402402Insufficient balance — top up to continue.top up your balance
404404The requested model or resource was not found — see GET /v1/models.use a model id from GET /v1/models
422422The request body could not be processed — send valid JSON in the chat completions format.send a valid chat completions JSON body
429insufficient_quotaInsufficient balance — top up to continue.balance is zero → top up your balance (retrying will not help)
429rate_limit_exceededRate limit exceeded — slow down and retry shortly.requests / tokens per minute exceeded → back off and retry; honour the Retry-After header when present
502502The request could not be completed.retry with backoff; if it persists, contact support
stream502data: {"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.

Limits (preview values; may change at launch)

(larger max_tokens / max_completion_tokens are clamped; n is always 1)
limitvalue
requests per minute (per key)120
tokens per minute (per key)200,000
max output tokens per request2,048
balanceprepaid, shared by all keys of the account; calls are refused at a zero balance

Need higher limits? support@solver-one.ai.