Request Format
All requests use JSON and require these headers:Successful Responses
Response shapes vary by endpoint, each following its own API spec:- Chat Completions — OpenAI standard response format
- Claude Messages — Anthropic standard response format
- Gemini — Google standard response format
- Asynchronous Tasks — QWave API unified task response format
Billing Field (usage.cost)
Text and embedding endpoints return the actual charge of each call (quota, integer) in theusage object:
- Non-streaming →
usage.costin the response body - Streaming (SSE) → the last data frame carrying
usage(see Streaming) - Async tasks →
pre_consumed_coston submission (pre-deduction),costin the terminal state (settlement;0after refund on failure/cancellation)
Error Responses
Error structures differ slightly across endpoints: Synchronous endpoints (chat / messages / images, etc.) — OpenAI-compatible format with atype field:
/v1/tasks/...) — Simplified format with only message + code:
Status Codes
| Code | Meaning | How to Handle |
|---|---|---|
| 400 | Invalid request parameters | Check the request payload |
| 401 | Authentication failed | Verify your API key |
| 402 | Insufficient balance | Top up your account |
| 404 | Task or resource not found | Verify the task_id and that it belongs to your account |
| 429 | Rate limit exceeded / sliding-window quota exhausted (code: quota_window_exceeded, response includes window/used/cap/reset_at) | Reduce frequency or retry after reset_at |
| 500 | Internal server error | Retry later |