Docs
One key for Claude, GPT and leading Chinese models
Compatible with the official OpenAI and Anthropic protocols — change only the base URL and the key. Start by picking how you'll use WaytoCC:
- Sign up and top up
- Create a key in the Auto group
- Paste the base URL and key into your tool
- Sign and fund by bank transfer
- Change two settings: base URL and key
- Reconcile monthly or weekly
Start · Personal
Three steps
Sign up, top up, create a key — then use it in your tools.
- 1Sign up with email, Google or GitHub; new accounts get trial credit.
- 2Top up: Console → Wallet, scan to pay in CNY; your first top-up includes a bonus.
- 3Create a key: Console → API Keys → New, choose the Auto group — one key calls every model.
Next → Use it in your tools
Start · Business
Onboarding
Decide between direct integration and reselling, then four steps.
| Direct | Reseller | |
|---|---|---|
| Who calls the models | Your own product or internal systems | Your end customers (you are the platform) |
| You get | A dedicated group, your contract price, API keys | Plus the Partner API: issue keys per customer, cap spend, reconcile per customer |
| Read next | Connect → Billing → Go-live checklist | Same, plus Reseller |
- 1Contact sales and sign the service agreement
- 2Prepay by bank transfer in CNY, USD or HKD; invoices available
- 3We open your business account and deliver keys (resellers also get a management credential and the API contract)
- 4Change two settings to integrate; reconcile monthly or weekly
Connect
Base URL & auth
OpenAI-compatible takes /v1; Anthropic-compatible takes the bare root.
| Protocol | For | Base URL | Auth header |
|---|---|---|---|
| OpenAI-compatible | GPT, Gemini, Chinese text models, images | https://api.waytocc.com/v1 | Authorization: Bearer <key> |
| Anthropic-compatible | Claude, Claude Code | https://api.waytocc.com | x-api-key: <key> |
/v1 itself; the OpenAI SDK expects it already in the base URL. Call Claude over the Anthropic protocol (/v1/messages): the OpenAI-compatible /v1/chat/completions also works, but it cannot carry cache markers, so prompt caching never hits and every input is billed at full price. If a tool only offers an OpenAI-compatible option, enter the base URL up to /v1; the tool appends /chat/completions itself, so /v1/messages becomes /v1/messages/chat/completions and returns 404.Connect
In your tools
First pick desktop app, CLI or extension, then follow that path.
Claude Code · Codex
Claude Code and Codex now both live inside their vendors' desktop apps (Claude desktop, ChatGPT desktop); the CLIs remain separate. Pick yours and follow only that path.
Each one reads its settings from a different place — pick the wrong one and it keeps asking you to sign in.
- 1
Turn on Developer Mode
In the Claude desktop app choose Help → Troubleshooting → Enable Developer Mode. The app restarts.
- 2
Enter the gateway
After the restart choose Developer → Configure Third-Party Inference, fill it in as below and save. The desktop app only reads this form — not environment variables, not
settings.json.Configure Third-Party InferenceInference provider : Gateway Base URL : https://api.waytocc.com API key : YOUR_API_KEY Credential kind : Static API key Auth scheme : Bearer - 3
Restart and use it
Quit the Claude desktop app completely, reopen it and send a message in Code. Cloud environments and Remote Control are unavailable while a gateway is configured.
›If it does not connect
- It still asks you to sign in
- The settings were not read. The desktop app, the CLI and the VS Code extension each read a different place — check you edited the one you are using.
- 404
- Use
https://api.waytocc.comwith no/v1. - 401
- The key was not copied in full; in the desktop app the auth scheme must be Bearer.
- 400
- Update Claude Code first — some fields sent by older versions are rejected.
Cherry Studio · Cline
Cherry Studio, Cline and similar clients: add a provider. For type OpenAI use https://api.waytocc.com/v1; for Anthropic use https://api.waytocc.com. Paste your key and copy model names from the model plaza. Sign in to see them on the model plaza
Connect
In your code
Keep the official SDKs; change only api_key and base_url. Replace YOUR_API_KEY with your key.
# pip install openai
from openai import OpenAI
client = OpenAI(
base_url="https://api.waytocc.com/v1", # point at WaytoCC (with /v1)
api_key="YOUR_API_KEY",
)
stream = client.chat.completions.create(
model="gpt-5.6-sol",
messages=[{"role": "user", "content": "Introduce yourself in one sentence"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="", flush=True)Responses match the official ones: OpenAI text is in choices[0].message.content (delta.content when streaming); Anthropic text is in content[0].text.
Capabilities
Text
Claude, GPT, Gemini and leading Chinese models, with official behaviour. Stream long answers.
Models
| Family | Models | Protocol |
|---|---|---|
| Claude | Fable, Opus, Sonnet, Haiku | Anthropic-compatible |
| GPT | GPT-6.1, GPT-6, GPT-5.6 | OpenAI-compatible |
| Gemini | Gemini 3.8 Flash, Gemini 4 Argon | OpenAI-compatible; native google-genai SDK also works |
| Chinese | DeepSeek V4 / V4.1, Kimi K3, GLM 5.3 / 5.2, Qwen3.8 Max | OpenAI-compatible |
Full model list and your prices: sign in to the model plaza. Programs can call GET /v1/models. Sign in to see them on the model plaza
Calling
- Chat: see In your code.
- Streaming: set
stream: true; with OpenAI also passstream_options: {"include_usage": true}to get usage in the last event. Long non-streamed answers can hit a ~100-second gateway timeout (524). - Tool use, multimodal input, prompt caching: same as the official APIs.
# pip install openai
from openai import OpenAI
client = OpenAI(
base_url="https://api.waytocc.com/v1", # point at WaytoCC (with /v1)
api_key="YOUR_API_KEY",
)
resp = client.chat.completions.create(
model="deepseek-v4-pro", # kimi-k3 / glm-5.3 / qwen3.8-max / gemini-3.8-flash …
messages=[{"role": "user", "content": "Introduce yourself in one sentence"}],
)
print(resp.choices[0].message.content)POST https://api.waytocc.com/v1/chat/completions
Authorization: Bearer YOUR_API_KEY
Request example
curl -sS -X POST https://api.waytocc.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-sol",
"messages": [
{
"role": "user",
"content": "Introduce yourself in three sentences."
}
],
"stream": true
}'Read choices[0].message.content for JSON; choices[].delta.content for streaming.
Parameter reference
Conversation
- ModelRequired
model gpt-5.6-solUse the complete ID from the catalogue; confirm the selected endpoint is supported when switching models.
- User inputRequired
messages Send an array, e.g. [{"role":"user","content":"Hello"}]. For conversations include user / assistant messages in order.
- System instructionOptional
messages[].role Optional: use a system message for response rules. Some reasoning models use developer; follow the model's requirements.
Output
- StreamingOptional
stream truefalseDefault: false
true sends incremental events for long answers; false returns JSON after completion.
Streaming uses SSE events; do not parse the whole response as a single JSON object.
- Output token limitOptional
max_completion_tokens Positive integer, e.g. 1024Measured in tokens, not characters. Stay within the model's output limit; reasoning models may include reasoning tokens in this budget.
The three protocols use different limit fields; use the field shown here.
- Streaming usageOptional
stream_options.include_usage trueWith stream=true, request usage in the final event. Use only when supported by the model.
Model-specific advanced parameters
- SamplingOptional
temperature / top_p Optional: temperature controls randomness; top_p controls candidate selection. Usually adjust one, with ranges specific to the model.
Some reasoning models reject these fields or only accept defaults. Omit unless support is confirmed.
- Reasoning effortOptional
reasoning_effort lowmediumhighOnly for models supporting reasoning controls. Higher effort may increase reasoning usage and latency; allowed levels vary by model.
- Tool callingOptional
tools / tool_choice Optional: define and select tools on models supporting tool calls. Execute tools in your client and send results back.
Chat function tools use {"type":"function","function":{"name":...,"parameters":...}}; tool_choice can be auto.
- Structured outputOptional
response_format For supporting models only. JSON Schema can constrain output structure: Responses uses text.format, Chat uses response_format.
Example: "response_format":{"type":"json_schema","json_schema":{"name":"result","schema":{...},"strict":true}}.
- Service tierOptional
service_tier / speed Usually unnecessary. Some models reject these fields with 400; omit unless support is confirmed.
For GPT models, priority or fast (Codex Fast mode) responds faster and is billed at the Fast price: 2x Standard.
Capabilities
Images
Synchronous for single images; async (submit, then poll) for batches or long jobs.
gpt-image-2, the gpt-image-2.5 series (flare / sunburst), Seedream 5.0 Pro. Use the full model ID — note gpt-image-2 (with -2).
| Mode | Endpoint | Notes |
|---|---|---|
| Generate | POST /v1/images/generations | GPT Image and Seedream Pro; synchronous JSON |
| Edit image | POST /v1/images/edits | GPT Image only; multipart image file |
| Async | POST /v1/images/async → GET /v1/images/async/{id} | GPT Image text-to-image only; save the id and poll |
POST https://api.waytocc.com/v1/images/generations
Authorization: Bearer YOUR_API_KEY
Use an Auto-group key for all examples. The fixed image group's synchronous endpoint only supports basic gpt-image-2 without size, quality or similar controls; use Auto for controlled synchronous generation, synchronous 2.5 models or edits.
Request example
curl -sS -m 660 -X POST https://api.waytocc.com/v1/images/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "A ceramic cup product photo on a white background, natural light, crisp detail.",
"n": 1,
"size": "1024x1024",
"response_format": "b64_json"
}'Set a 660-second client timeout; use async for long text-to-image jobs. Check Usage history after a timeout before resubmitting to avoid duplicate charges. Decode data[].b64_json to save the image; for edits, replace input.png with your file.
Parameter reference
Your image
- ModelRequired
model gpt-image-2Copy the complete model ID. Parameters and prices can differ between models.
- PromptRequired
prompt Describe the subject, scene, style and details to preserve or change; Chinese is supported.
Output
- SizeOptional
size 1024x10241024x15361536x10242048x2048auto1024x1024 square; 1024x1536 portrait; 1536x1024 landscape; auto lets the model choose. Actual output dimensions may differ.
Custom dimensions must be multiples of 16, each from 256 to 4096 pixels. 1920x1080 is invalid; use e.g. 1824x1024. Do not send 1K or 2K.
- Image countOptional
n 1 to 4, integerDefault: 1
For example, n=2 generates two images; more images increase the cost.
- QualityOptional
quality lowmediumhighautoDefault: Chosen by the service when omitted
low prioritizes speed; medium balances quality; high adds detail; auto selects automatically. Quality affects cost.
The default pricing label means quality was omitted; do not send "default".
- Result deliveryOptional
response_format b64_jsonDefault: b64_json
Decode data[].b64_json and write the image file. Availability of sync url delivery depends on the route; use b64_json.
Advanced parameters and limits
- Image file formatOptional
output_format pngjpegThis controls the image file encoding, separately from response_format delivery. WebP output is unsupported.
- BackgroundOptional
background transparentopaqueautotransparent, opaque or auto. Use PNG for transparent backgrounds.
- Compression qualityOptional
output_compression 0 to 100, integerControls compression quality, typically with JPEG output.
GPT Image · SDK examples
curl -sS -m 660 https://api.waytocc.com/v1/images/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "a red panda eating bamboo, studio lighting",
"n": 1,
"response_format": "b64_json"
}' \
| python3 -c "import sys,json,base64; d=json.load(sys.stdin); open('out.png','wb').write(base64.b64decode(d['data'][0]['b64_json'])); print('saved out.png')"The synchronous examples use a 660-second client timeout. Slow requests can exceed three minutes; use async for long text-to-image jobs. Check Usage history after a synchronous timeout before resubmitting to avoid duplicate charges.
GPT Image · Edit image
curl -sS -m 660 https://api.waytocc.com/v1/images/edits \
-H "Authorization: Bearer YOUR_API_KEY" \
-F model=gpt-image-2 \
-F [email protected] \
-F prompt="put the subject in a snowy forest at night" \
-F response_format=b64_json \
| python3 -c "import sys,json,base64; d=json.load(sys.stdin); open('out.png','wb').write(base64.b64decode(d['data'][0]['b64_json'])); print('saved out.png')"GPT Image only. Replace input.png with your file. Seedream Pro references go in the image field on generations.
Async generation
Use async for slow GPT Image generation (1 to 4 minutes); Seedream Pro does not support this endpoint. Submit the original model ID without adding -async.
# 1. submit; returns a task id immediately
curl -sS -X POST https://api.waytocc.com/v1/images/async \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "a red panda eating bamboo, studio lighting",
"n": 1,
"size": "1024x1024",
"quality": "high"
}'
# → {"id":"TASK_ID","object":"image.task","status":"queued","model":"gpt-image-2","created_at":1781184210}
# 2. poll every 5 s; on succeeded read data[].url
curl -sS https://api.waytocc.com/v1/images/async/TASK_ID \
-H "Authorization: Bearer YOUR_API_KEY"
# 3. download (URL valid for 24 hours)
curl -sS -o out.png "IMAGE_URL"status goes queued → running → succeeded / failed; poll every 5 seconds. On success you get data: [{url}] and usage; on failure, error.
Async is text-to-image only: no edits, no response_format=b64_json — results are always URLs. Billing matches sync: an estimate is held at submit and settled on completion; failures are fully refunded.
›Parameters and responses
GPT Image sync examples return data[].b64_json: decode and save it. Async results and Seedream Pro examples use data[].url downloads. Actual dimensions may differ; billing follows the actual output.
{
"created": 1781184210,
"data": [
{ "b64_json": "iVBORw0KGgoAAAANSUhEUg..." }
],
"usage": {
"input_tokens": 8,
"output_tokens": 0,
"total_tokens": 8
}
}Capabilities
Video
Submit, then poll; budget 15 minutes; download links expire after ~24 hours, so copy them right away.
Models
| Model | Resolutions | Duration |
|---|---|---|
| doubao-seedance-2.0 | 480p / 720p / 1080p / 4K | 4–15 s |
| doubao-seedance-2.5 | 480p / 720p / 1080p | 4–15 s |
| doubao-seedance-2.0-fast / -mini | 480p / 720p | 4–15 s |
| kling/kling-v3-video-generation / kling-v3-omni-video-generation | 720p / 1080p / 4k (default 720p) | 3–15 s, default 5 |
| kling/kling-v3-turbo-video-generation | 720p / 1080p (default 720p) | 3–15 s, default 5 |
| happyhorse-1.1-t2v / -i2v / -r2v | 720P / 1080P (default 1080P) | 3–15 s, default 5 |
| MiniMax-H3 | 480p / 720p / 1080p / 2K (default 720p) | 4–15 s, default 5 |
Invalid values fail with the list of values the model accepts. Legacy seedance-cn-* names still work and map to the new models.
Calling
Choose the matching sample below. Seedance uses its dedicated endpoint: poll until succeeded, then download from result.data[0].url. The other samples use POST /v1/videos: poll until completed, then download from /content.
curl -sS -X POST https://api.waytocc.com/video-domestic/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2.0-mini",
"input": {
"prompt": "An orange cat stretching on a windowsill"
},
"parameters": {
"resolution": "480p",
"duration": 4,
"ratio": "16:9",
"generate_audio": false
}
}'
curl -sS https://api.waytocc.com/video-domestic/v1/video/generations/TASK_ID \
-H "Authorization: Bearer YOUR_API_KEY"
# result.data[0].url
curl -sSL "$VIDEO_RESULT_URL" -o video.mp4doubao-seedance-2.0 and parameters.resolution: 4k. Fast, Mini and 2.5 do not offer 4K. Kling sets aspect ratio through settings.aspect_ratio; all Turbo audio options use the audio tariff. HappyHorse always generates audio; use input_reference for image-to-video and an images array for multi-image references. Resolution names select a tier; actual video dimensions may differ slightly. MiniMax-H3 at 480p / 720p / 1080p accepts media: input_reference is the first frame, and an images array carries the first then the last frame; reference images go in metadata.reference_images, reference audio in metadata.reference_audios and reference video in metadata.reference_videos, all arrays, nine items in total at most. Media must be public https URLs; frames cannot be combined with reference media; reference video may total about 10 seconds, and a longer one fails and is refunded in full. Images and audio cost the same as text-to-video; each reference image beyond five is charged separately; reference video is charged per input second at the per-second rate of the same tier — 15 seconds are reserved at submission and the difference to the actual length is returned on completion. Rates are shown in the model catalogue.A 4-second 480p clip takes about 3–4 minutes; higher resolution and longer clips take longer. Budget 15 minutes and poll every 10 seconds.
Cost is held at submit, fully refunded if the job fails, and settled on the actual output if it succeeds.
Kling V3: parameters and price tiers
Names such as 720p-silent are price tiers, not request fields. Silent uses settings.audio: off, audio uses native, and 4K uses settings.resolution: 4k. Motion control requires action: motion_control, a subject image and a motion video. Omni reference video uses contents with audio set to off. The examples below follow the selected model and tier.
settings.resolution = "720p" · settings.audio = "off"
Request example
curl -sS -X POST https://api.waytocc.com/v1/videos \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling/kling-v3-video-generation",
"prompt": "A ceramic cup on a table, slow camera push-in, natural light.",
"settings": {
"resolution": "720p",
"duration": 5,
"audio": "off",
"aspect_ratio": "16:9"
}
}'Parameter reference
Your video
- ModelRequired
model kling/kling-v3-video-generationUse the complete model ID. Standard, Turbo and Omni are separate models.
- PromptRequired
prompt / contents[].text Describe the subject, action, camera and style in 1 to 2500 characters.
Text-to-video uses top-level prompt. With contents, include one {"type":"prompt","text":"Your description"} item and omit top-level prompt.
- ModeOptional
action text_to_videoimage_to_videomotion_controlDefault: Inferred from assets
Without assets: text-to-video. With a first frame: image-to-video.
Motion control requires action=motion_control, one image and one motion video.
Output
- ResolutionOptional
settings.resolution 720p1080p4kDefault: 720p
Higher resolutions generally cost more; check the current pricing tiers.
Use lowercase 4k. Motion control only supports 720p and 1080p.
- DurationOptional
settings.duration 3 to 15 seconds, integerDefault: 5 seconds
For example, 8 means 8 seconds. Top-level seconds is an alternative; both must agree if supplied together.
- Aspect ratioOptional
settings.aspect_ratio 16:99:161:1Default: 16:9
16:9 landscape, 9:16 portrait, 1:1 square.
- AudioOptional
settings.audio offnativeoriginalDefault: off
off: silent; native: generated audio; original: original audio.
Motion control defaults to original. Audio and silent tiers differ in price; 4K uses its unified tier.
Reference assets
- Asset roles and URLsRequired by mode
contents[].type / url first_framelast_frameimagevideoImage-to-video needs first_frame and optionally last_frame. Motion control needs image (subject) and video (motion). Last frames require first frames.
Use publicly accessible HTTPS URLs, not local files or Base64. Each role except refer_image can appear once; at most 10 entries including prompt.
- Single-image shortcutOptional
input_reference HTTPS URLFor a single first frame, use prompt + input_reference instead of contents.
Do not combine input_reference and contents.
Advanced parameters and alternatives
- Pixel sizeOptional
size 1280x720720x12801920x10801080x19203840x21602160x3840Alternative way to set resolution and ratio. Usually the settings fields above are enough.
Must agree with settings.resolution / aspect_ratio if both are supplied. Motion control does not support 4K.
- Multiple shotsOptional
settings.multi_shot truefalseOptional switch for multiple shots.
- Character orientationOptional
settings.character_orientation imagevideoMotion control only: follow character orientation from the reference image or video.
- Random seedOptional
settings.seed 0 to 2147483647, integerOptional control for generation randomness.
- WatermarkOptional
options.watermark_info.enabled truefalseOptional watermark switch. Query using the returned id; custom external_task_id is unsupported.
Poll and download
Replace VIDEO_ID with the returned id. Poll every 10–15 seconds and download when status is completed. Use the same API key for polling and downloading.
curl -sS https://api.waytocc.com/v1/videos/VIDEO_ID \
-H "Authorization: Bearer YOUR_API_KEY"curl -sSL https://api.waytocc.com/v1/videos/VIDEO_ID/content \
-H "Authorization: Bearer YOUR_API_KEY" \
-o video.mp4Cost is estimated from requested duration, then settled on actual output seconds; a 3-second request may produce 3.041 seconds. All Turbo audio options use the audio tariff. 4K shares one tariff and is unavailable for Turbo or motion control. See the model catalogue for your price.
GET /v1/videos/{id} until completed, then use the same API key to download /v1/videos/{id}/content. Check error on failed; confirmed generation failures are refunded. Do not immediately resubmit after a creation timeout or temporary polling failure; check the original task first. Callbacks, cancellation, subject/voice libraries and custom external_task_id are unsupported.›Seedance advanced: reference-to-video
Seedance also has a dedicated endpoint https://api.waytocc.com/video-domestic/v1/video/generations with first-frame, first-and-last-frame, multi-image and full multimodal references. No mode switch needed — what you send decides the mode. Reference images can be public https URLs or inline data: base64; reference videos must be public https URLs, and reference audio should use public https URLs too.
| You send | Mode | Result |
|---|---|---|
| nothing | t2v | Text to video |
| input.image_url | i2v_first_frame | Image becomes the first frame |
| image_url + end_image_url | i2v_first_last_frame | Transition from first to last frame |
| input.reference_images[] | multi_ref | Multi-image reference, consistent subject |
| plus reference_videos[] / reference_audios[] | multi_ref_vid | Full multimodal reference |
Asset URLs must be directly reachable without login or cookies. Only images may be sent as inline base64; a base64 reference video is rejected with HTTP 400 and is not charged.
# 1. 提交任务,立刻返回 task_id
curl -sS -X POST https://api.waytocc.com/video-domestic/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2.0-mini",
"input": { "prompt": "一只橘猫在窗台上伸懒腰" },
"parameters": { "resolution": "480p", "duration": 4, "ratio": "16:9" }
}'
# → {"id":"task_xxx","object":"video.job","status":"queued"}
# 2. 轮询,succeeded 后取 result.data[0].url
curl -sS https://api.waytocc.com/video-domestic/v1/video/generations/task_xxx \
-H "Authorization: Bearer YOUR_API_KEY"
# 3. 下载(地址自带签名,不要再带 Authorization)
curl -sS -o out.mp4 "$VIDEO_RESULT_URL"| Parameter | Required | Notes |
|---|---|---|
| model | yes | See the model table |
| input.prompt | yes | Required in every mode |
| input.image_url | no | First frame; a reference image in multi-ref mode |
| input.end_image_url | no | Last frame; requires image_url |
| input.reference_images / videos / audios | no | Asset arrays: images accept https URLs or data: base64; videos must be public https URLs; use public https URLs for audios |
| parameters.duration | no | Whole seconds, 4–15, default 5 |
| parameters.resolution | no | Per model, defaults to the lowest tier; fast and mini have no 1080p |
| parameters.ratio | no | 16:9 / 4:3 / 3:4 / 9:16 / 1:1 / 21:9 / adaptive, default 16:9 |
| parameters.generate_audio | no | Default true; false only drops the audio track, not the price |
| parameters.seed | no | Integer ≥ -1 for reproducible output |
Billing
How billing works
Pay for what you use; failed requests are free. Prices are on the model plaza after sign-in.
charge = usage × list price × discount| Usage | Text by token (input, output and cache priced separately); images by token or per image; video by duration and resolution |
| List price | The official current price, converted to CNY |
| Discount | Shown on the model plaza after sign-in — that is your actual price; business customers follow their contract |
Billing
Usage & reconciliation
Every charge is visible in the console; businesses reconcile monthly or weekly.
- Usage history: every call with model, usage and charge.
- Spend per key: the API Keys page shows each key's spend — create separate keys per team or project.
- Business statements: monthly or weekly, matching the console.
- Checking yourself: trust the charge records, not
usage× a unit price — some models price by time of day or actual output.
Billing
Top-up, invoices, refunds
Personal: scan to pay. Business: bank transfer, invoices available. Unused balance is refundable.
| Personal | Console → Wallet, scan to pay; first top-up includes a bonus |
| Business | Bank transfer in CNY, USD or HKD; invoices available, type agreed at signing |
| Refunds | Unused prepaid balance is refundable — contact us |
Business
Go-live checklist
Get these four right and production rarely surprises you.
| Keys stay server-side | Never in frontend code, public repos or screenshots; separate keys per team, project and environment so you can disable one |
| Bounded retries | Don't retry 401/403; back off on 429/5xx, at most 2–3 times. Model calls aren't idempotent — check charges before retrying |
| Balance alerts | An empty balance makes every call return 403; alert ahead based on daily spend |
| Concurrency limits | Rate limits apply per account by default; contact sales for more |
Business
Data & security
Your data is used only to serve your requests and never to train any model.
| Use | Processed only to provide the service; never sold, transferred, used for training or advertising |
| Retention | Call logs kept 90 days by default, then deleted or anonymised; deletion or return on request when the contract ends |
| Transport & access | TLS end to end; least-privilege internal access with full audit trail |
| Agreements | NDA and data-processing agreements available, with retention and audit terms to match your compliance needs |
Business
Verify the models
Don't take our word for it — check these five before you integrate.
| Check | How | Expect |
|---|---|---|
| Model identity | Send the same hard prompts to us and the official API; compare outputs and reasoning | Highly consistent |
| Injection | Ask the model to repeat its full system prompt | Nothing you didn't set |
| Long context | Send 100K+ tokens with markers at the start, middle and end | All recalled |
| Token accounting | Compare returned usage with the official API for the same request | Identical |
| Downgrades | Check the model field in the response | Matches the model you requested |
Business
Reseller (Partner API)
One management credential to issue keys, cap spend and reconcile per customer.
Your server ──credential──> Partner API: issue · cap · disable · usage
Your customers ──their key──> Model APIs (official protocols)
└─ all spend draws on your business account- Issue, disable and rotate customer keys
- Per-key spend cap, allowed models, source IPs and expiry
- Usage detail and totals per customer or key, in CNY
- Separate read-only and management credentials
- You set your own customer pricing
The full API contract and examples are delivered with the management credential. Contact us to enable →
Help
Error codes
First decide which kind it is: fix the request, check the account, or retry later.
Fix the request (don't retry)
| Status | Common cause | What to do |
|---|---|---|
| 400 | Invalid parameters: image size not divisible by 16, an unsupported option (such as service_tier), context too long | Adjust per the error message; trim long context |
| 404 | Wrong base URL, or the model doesn't support this endpoint | Check Base URL & auth; use an endpoint the model supports |
| 422 | This request combination isn't supported | Adjust per the message; use a key in the Auto group |
Check the account (don't retry)
| Status | Common cause | What to do |
|---|---|---|
| 401 | Invalid, truncated or deleted key | Copy it again or create a new key |
| 403 | No balance, or the key can't call this model | Top up, or check the key's group and model limits |
Retry later
| Status | Common cause | What to do |
|---|---|---|
| 429 | Too many requests, or the model is busy | Honour Retry-After, lower concurrency, retry |
| 500 / 502 / 503 / 504 | Temporary upstream failure or timeout | Exponential backoff, at most 2–3 times; see Service status if it persists |
Help
Service status
Live status is on the status page; business customers can sign a formal SLA.
- Status page: live availability per model family.
- SLA: formal service-level agreements, with targets agreed at signing.
- Incident notices: we proactively tell business customers the impact and expected recovery.
Help
FAQ
›Images are slow or time out.
Set a 660-second client timeout; use async for batches or long text-to-image jobs. After a synchronous timeout, check Usage history. After a polling error, keep polling the same id instead of resubmitting.
›The image size differs from what I asked for.
size is a preference, not a guarantee; billing follows the actual output. Trust the charge in Usage history.
›Do I strip a prefix from b64_json?
No. It's raw base64 — decode and write it; there's no data:image/png;base64, prefix.
›model not found?
Use the full model ID; the image model is gpt-image-2 (note the -2). See the model plaza for all IDs.
›A Claude tool returns 404.
The Anthropic base URL is the bare root https://api.waytocc.com, without /v1.
›Long answers break off (524).
Enable streaming (stream: true); long non-streamed answers time out at ~100 seconds at the edge.
›Does one key call every model?
Yes. Create the key in the Auto group to reach every model on sale, billed per call by the model actually used.
Help
Contact
Technical questions, business accounts and quotes — reach us directly.
| [email protected] | |
| Luka_122 |