DeepSeek, Kimi and GLM are live — one endpoint, one bill.
Voyai

Errors & retries

Errors use the OpenAI error shape, so existing handling keeps working. Every response carries an X-Request-Id — quote it when contacting support.

Error shape

{
  "error": {
    "message": "Insufficient balance. Please top up your account.",
    "type": "insufficient_quota",
    "param": null,
    "code": "insufficient_quota"
  }
}

Retry guidance

CodeAction
400Do not retry. This came from the upstream — the message explains what is wrong with the request.
401Do not retry. Fix the key.
402Do not retry. Top up or raise the key limit.
404Do not retry. Fix the model ID.
429Retry with exponential backoff, honouring Retry-After.
503Retry after a few seconds. If it persists, all upstreams are down.

What to retry

We already retry across upstream accounts internally before returning a failure, so a 503 means every channel for that model was unavailable — not a transient blip. Back off rather than retrying immediately.

Errors mid-stream

If an upstream drops after streaming has started, we emit a final SSE event containing an error object and then close. You are billed only for what was actually generated.

data: {"error":{"message":"Upstream connection interrupted","type":"upstream_error"}}

data: [DONE]