Build with vipcloud
An OpenAI-compatible gateway for every Chinese frontier model. If you've used the OpenAI Python or Node SDK, you already know the API — just change the base URL.
Quickstart
Three lines. Same OpenAI SDK, new base URL, new key.
Python
from openai import OpenAI client = OpenAI( base_url="https://api.vipcloud.ai/v1", api_key="vc-sk-...", ) resp = client.chat.completions.create( model="deepseek-v4-pro", messages=[{"role": "user", "content": "Hello!"}], ) print(resp.choices[0].message.content)
Node / TypeScript
import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://api.vipcloud.ai/v1", apiKey: "vc-sk-...", }); const resp = await client.chat.completions.create({ model: "deepseek-v4-pro", messages: [{ role: "user", content: "Hello!" }], }); console.log(resp.choices[0].message.content);
curl
curl https://api.vipcloud.ai/v1/chat/completions \ -H "Authorization: Bearer vc-sk-..." \ -H "Content-Type: application/json" \ -d '{ "model": "deepseek-v4-pro", "messages": [{"role":"user","content":"Hello!"}] }'
Authentication
All authenticated endpoints accept a Bearer token in the Authorization header. Generate keys from your account page.
Authorization: Bearer vc-sk-XXXXXXXXXXXXXXXXXXXXXXXX
Keys are scoped per project. Revoke at any time. We never log full keys — only the first 8 characters appear in usage logs.
Base URL
https://api.vipcloud.ai/v1
The gateway is OpenAI-compatible — the path layout, request/response shapes, and streaming format match api.openai.com/v1 wherever possible. If your code already targets OpenAI, swap the URL and key, and you're live.
Chat completions
POST /v1/chat/completions
Identical to OpenAI's chat completions API. messages, temperature, max_tokens, tools, response_format, stream all behave the same.
| Param | Type | Notes |
|---|---|---|
model | string | Required. See model reference. |
messages | array | Required. {role, content} objects. |
temperature | number | 0–2, default 1. |
max_tokens | integer | Output cap. Provider default if omitted. |
stream | boolean | Server-sent events streaming. |
tools | array | Function calling — passed through to providers that support it. |
response_format | object | {"type":"json_object"} for JSON mode. |
Response
{
"id": "chatcmpl-...",
"object": "chat.completion",
"model": "deepseek-v4-pro",
"choices": [{
"index": 0,
"message": { "role": "assistant", "content": "Hello!" },
"finish_reason": "stop"
}],
"usage": { "prompt_tokens": 8, "completion_tokens": 2, "total_tokens": 10 }
}
Streaming
Set "stream": true. The response is text/event-stream with data: chunks containing partial deltas, terminated by data: [DONE].
data: {"choices":[{"delta":{"content":"Hel"}}]}
data: {"choices":[{"delta":{"content":"lo"}}]}
data: {"choices":[{"delta":{"content":"!"}}]}
data: [DONE]
List models
GET /v1/models — authenticated. Mirrors OpenAI shape.
GET /v1/models?detail=1 — adds display metadata (label, org, ctx, pricing, tags).
Public catalog
GET /v1/catalog — no auth required. Useful for showing your users a model picker. CORS-permissive, cached for 60s.
curl https://api.vipcloud.ai/v1/catalog
Image generation
POST /v1/images/generations — OpenAI-compatible image API.
Currently in private preview. Email [email protected] with your account ID for access.
Models: wan-2.7, seedream-4.5 (legacy alias seedream-3 still resolves), hunyuan-image.
client.images.generate( model="wan-2.7", prompt="a snow leopard in a Tang dynasty courtyard, 4K", size="1024x1024", n=1, )
Video generation
POST /v1/videos/generations
Asynchronous job model — request returns a job_id, poll /v1/videos/jobs/{id} for status. Currently in private preview.
Models: seedance-2, hailuo-02, kling-3, vidu-q3, hunyuan-video-1.5 (soon).
client.videos.generate( model="seedance-2", prompt="a samurai cat surfing a giant wave, cinematic", duration=10, resolution="1080p", ) # returns: { id, status: "queued", poll_url }
Voice / TTS
POST /v1/audio/speech
Models: minimax-speech-02 (HD, 35 langs, voice clone), doubao-tts (CN/EN, 100+ presets), glm-4-voice (soon).
client.audio.speech.create( model="minimax-speech-02", voice="warm-female-en", input="Welcome to vipcloud.", response_format="mp3", )
Music generation
POST /v1/music/generations
Mureka O1 — China's frontier-grade music model with vocals + lyrics in 30+ languages. Asynchronous job model.
client.music.generate( model="mureka-o1", prompt="upbeat synthwave with female vocals", lyrics="on the edge of the cloud...", duration=90, )
Errors
OpenAI-compatible error envelope:
{
"error": {
"message": "Unknown model 'gpt-4'.",
"type": "model_not_found",
"code": "unknown_model"
}
}
| Status | Type | When |
|---|---|---|
| 400 | invalid_request_error | Missing fields, malformed body |
| 401 | invalid_api_key | Missing or invalid API key |
| 402 | insufficient_credit | Balance below threshold (returned once per-key billing ships) |
| 404 | model_not_found | Unknown model alias |
| 429 | rate_limited | Free demo limit, or upstream throttle |
| 503 | model_unavailable | Preview / soon model — request access |
| 504 | upstream_timeout | Upstream did not respond within 60s |
Rate limits
- Free demo (no auth, GLM-4-Flash only): 5 calls / minute / IP, plus a 2 000 / day global cap.
- Authenticated keys: throttling is currently delegated to each upstream provider's own limits (typical 60–600 RPM depending on provider). Per-key vipcloud-side rate caps land in v2.1.
- Higher limits or a dedicated rate-tier — email [email protected].
SDKs
Use any OpenAI-compatible SDK by changing the base URL.
- openai-python — set
base_url - openai-node — set
baseURL - go-openai — set
cfg.BaseURL - Vercel AI SDK, LangChain, LlamaIndex — pass
baseURLto the OpenAI provider
Model reference
Live data — pulled from the /v1/catalog endpoint. Updated whenever the registry changes.
Need something not covered here? Email [email protected] — we read everything.