The AIWave API gives you one OpenAI-compatible endpoint for
DeepSeek, GLM, Kimi, Qwen and ERNIE. If your code already talks to OpenAI, you change
two lines — the base_url and the API key — and every Chinese AI model below becomes
available. Zero Data Retention, no separate accounts per provider, one balance in USD.
Every endpoint lives under a single base URL. Authentication uses a bearer token, exactly as the OpenAI API does, so existing SDKs and HTTP clients work without modification.
Base URL: https://aiwave.live/v1
Header: Authorization: Bearer sk-YOUR_KEY
Create a key in the console. Keys are scoped to your account balance; there is no per-provider signup.
The official openai-python SDK works unchanged. Point it at AIWave and pick any model ID from the table below.
from openai import OpenAI
client = OpenAI(
api_key="sk-YOUR_KEY",
base_url="https://aiwave.live/v1", # ← only change
)
response = client.chat.completions.create(
model="deepseek-v4-pro",
messages=[{"role": "user", "content": "Explain MoE routing in two sentences."}],
)
print(response.choices[0].message.content)
Node.js is the same idea with the openai-node SDK:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.AIWAVE_API_KEY,
baseURL: "https://aiwave.live/v1",
});
const res = await client.chat.completions.create({
model: "glm-5",
messages: [{ role: "user", content: "Hello!" }],
});
| Endpoint | Method | Reference |
|---|---|---|
/v1/chat/completions | POST | Chat Completions API → |
/v1/embeddings | POST | Embeddings API → |
/v1/models | GET | List Models API → |
These are the model IDs currently served by the gateway, grouped by provider. Pass the ID verbatim
as the model field. For per-model context windows, capabilities and price, browse the
model directory; live rates are on the pricing page.
| Provider | Models | Model IDs |
|---|---|---|
| DeepSeek | 10 | deepseek-chat deepseek-r1 deepseek-r1-distill-qwen-14b deepseek-r1-distill-qwen-32b deepseek-reasoner deepseek-v3 deepseek-v3.2 deepseek-v3.2-think deepseek-v4-flash deepseek-v4-pro |
| GLM (Zhipu AI) | 9 | glm-4.5 glm-4.5-air glm-4.6 glm-4.7 glm-4.7-flash glm-4.7-flashx glm-5 glm-5-turbo glm-5.1 |
| Kimi (Moonshot AI) | 6 | kimi-k2.5 kimi-k3 moonshot-v1-32k moonshot-v1-32k-vision-preview moonshot-v1-8k moonshot-v1-8k-vision-preview |
| Qwen (Alibaba) | 8 | qwen3-235b-a22b-instruct-2507 qwen3-235b-a22b-thinking-2507 qwen3-32b qwen3-8b qwen3-coder-480b-a35b-instruct qwen3.5-122b-a10b qwen3.5-27b qwen3.5-397b-a17b |
| ERNIE (Baidu) | 27 | ERNIE 4.5 Turbo ERNIE 5.0 ernie-3.5-128k ernie-3.5-8k ernie-3.5-8k-preview ernie-4.0-8k ernie-4.0-8k-latest ernie-4.0-8k-preview ernie-4.0-turbo-128k ernie-4.0-turbo-8k ernie-4.0-turbo-8k-latest ernie-4.0-turbo-8k-preview ernie-4.5-8k ernie-4.5-turbo ernie-5.0 ernie-5.0-thinking-preview ernie-5.1 ernie-char-8k ernie-char-fiction-8k ernie-lite-8k ernie-lite-pro-128k ernie-novel-8k ernie-speed-128k ernie-speed-8k ernie-speed-pro-128k ernie-tiny-8k ernie-x1.1 |
| MiniMax | 1 | minimax-m2.5 |
Model availability changes as providers ship new versions. Call
GET /v1/models at runtime rather than hard-coding a list; see the
changelog for additions and deprecations.
Set stream: true to receive server-sent events. The chunk format matches the OpenAI
specification, so streaming parsers written for OpenAI work unchanged.
stream = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": "Write a haiku about latency."}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
The stream terminates with a data: [DONE] sentinel. Full parameter reference is in the
Chat Completions documentation.
Errors use standard HTTP status codes with a JSON body describing the failure.
| Status | Meaning | What to do |
|---|---|---|
400 | Bad Request | Malformed JSON, missing messages, or an unknown parameter. |
401 | Unauthorized | Missing or invalid Authorization: Bearer header. |
403 | Forbidden | The key is valid but not permitted to use the requested model. |
404 | Not Found | Unknown model ID. Call GET /v1/models for the current list. |
429 | Too Many Requests | Rate limit or quota exhausted. Back off exponentially and retry. |
500 | Internal Server Error | Unexpected gateway error. Safe to retry with backoff. |
503 | Service Unavailable | Upstream model provider is overloaded. Retry, or fall back to another model. |
{
"error": {
"message": "Model not found",
"type": "invalid_request_error",
"code": "model_not_found"
}
}
For 429 and 503, retry with exponential backoff and consider falling back
to a second model — the same request body works across every provider, which makes fallback a
one-line change.
usage object on non-streaming responses.base_url — LangChain, LlamaIndex,
the Vercel AI SDK, Cursor, Cline and similar tools — work without a dedicated provider plugin.One endpoint covers 25+ Chinese AI models; verify the live catalog before production.