# Vimox Router 对接信息

## 基础信息

- Base URL：`https://router.vimox.cn`
- API Key：`<your-api-key>`
- 鉴权：`Authorization: Bearer <API Key>` 或 `x-api-key: <API Key>`

## 可用模型

| 模型 | 类型 | 可用协议 | 价格 | 说明 |
| --- | --- | --- | --- | --- |
| vimox-decision | 决策 | OpenAI 兼容（openai-compat） | 按输入 token 计费（费率以管理端/模型目录为准） | 独立决策模型；使用 System One 的 state/questions，可选 images；仅按 usage.input_tokens 计费。 |
| vimox-audio | 文本 | OpenAI Chat | 输入/输出 token 费率待配置 | 音频理解；使用 Chat Completions 的 audio_url，Router 记录 prompt/completion/total tokens。 |
| jev-latest | 其他 | OpenAI 兼容（openai-compat） | 保持现有价格配置 | TypeSafe System One 稳定别名；提交 state 与 typed questions，返回结构化 answers。 |
| jev-preview | 其他 | OpenAI 兼容（openai-compat） | 按次计费（以模型目录为准） | TypeSafe Jev preview 别名。 |
| jev-1.13.0 | 其他 | OpenAI 兼容（openai-compat） | 按次计费（以模型目录为准） | TypeSafe Jev 固定版本。 |
| vimox-image | 图片 | OpenAI Images | 8 ViMoney/次 | 独立公开别名；当前 Key 可见性及价格以 GET /v1/models 为准。 |
| vimox-image-2k | 图片 | OpenAI Images | 16 ViMoney/次 | 独立公开别名；当前 Key 可见性及价格以 GET /v1/models 为准。 |
| vimox-image-4k | 图片 | OpenAI Images | 60 ViMoney/次 | 独立公开别名；当前 Key 可见性及价格以 GET /v1/models 为准。 |
| vimox-image-depth | 其他 | OpenAI 兼容（openai-compat） | 按次计费（以模型目录为准） | 同步输入图片并返回保持原宽高的相对深度图，默认 JPEG，可选 PNG。 |
| cc-omni-fast-no-water | 视频 | OpenAI Videos | 200 ViMoney/次 | cc 提供的 omni-fast-no-water 视频生成能力。只支持0-5张参考图 |
| cc-omni-fast-v2v-no-water | 视频 | OpenAI Videos | 200 ViMoney/次 | cc 提供的 omni-fast-v2v-no-water 视频生成能力。只支持2个参考视频 |
| claude-fable-5 | 文本 | Anthropic Messages / OpenAI Responses | 输入 2200 / 缓存 220 / 输出 11000 ViMoney/百万 tokens | Anthropic 提供的 claude-fable-5 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| claude-opus-4-7 | 文本 | Anthropic Messages / OpenAI Responses | 输入 1100 / 缓存 110 / 输出 5500 ViMoney/百万 tokens | Anthropic 提供的 claude-opus-4-7 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| claude-opus-4-8 | 文本 | Anthropic Messages / OpenAI Responses | 输入 1100 / 缓存 110 / 输出 5500 ViMoney/百万 tokens | Anthropic 提供的 claude-opus-4-8 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| claude-opus-5 | 文本 | OpenAI Chat / OpenAI Responses / Anthropic Messages | 输入 2816 / 缓存 280 / 输出 14076 ViMoney/百万 tokens | TeamoRouter 提供的 claude-opus-5 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| claude-sonnet-4-6 | 文本 | Anthropic Messages / OpenAI Responses | 输入 660 / 缓存 66 / 输出 3300 ViMoney/百万 tokens | Anthropic 提供的 claude-sonnet-4-6 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| codex-auto-review | 文本 | OpenAI Chat / OpenAI Responses | 输入 480 / 缓存 48 / 输出 2862 ViMoney/百万 tokens | OpenAI 提供的 codex-auto-review 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| deepseek-v4-flash | 文本 | OpenAI Chat / OpenAI Responses / Anthropic Messages | 输入 400 / 缓存 8 / 输出 800 ViMoney/百万 tokens | DeepSeek 提供的 deepseek-v4-flash 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| deepseek-v4-pro | 文本 | OpenAI Chat / OpenAI Responses / Anthropic Messages | 输入 1200 / 缓存 24 / 输出 2400 ViMoney/百万 tokens | DeepSeek 提供的 deepseek-v4-pro 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| gemini-2.5-flash | 文本 | Gemini / OpenAI Chat / OpenAI Responses | 输入 240 / 缓存 24 / 输出 1600 ViMoney/百万 tokens | Gemini 提供的 gemini-2.5-flash 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| gemini-2.5-pro | 文本 | Gemini / OpenAI Chat / OpenAI Responses | 输入 1000 / 缓存 100 / 输出 5000 ViMoney/百万 tokens | Gemini 提供的 gemini-2.5-pro 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| gemini-3-flash | 文本 | Gemini / OpenAI Chat / OpenAI Responses | 输入 320 / 缓存 32 / 输出 2400 ViMoney/百万 tokens | Gemini 提供的 gemini-3-flash 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| gemini-3-pro | 文本 | Gemini / OpenAI Chat / OpenAI Responses | 输入 1200 / 缓存 120 / 输出 5600 ViMoney/百万 tokens | Gemini 提供的 gemini-3-pro 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| gemini-3.1-flash-lite | 文本 | Gemini / OpenAI Chat / OpenAI Responses | 输入 200 / 缓存 20 / 输出 1200 ViMoney/百万 tokens | Gemini 提供的 gemini-3.1-flash-lite 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| gemini-3.1-pro | 文本 | OpenAI Chat / OpenAI Responses / Gemini | 输入 1200 / 缓存 120 / 输出 5600 ViMoney/百万 tokens | Google 提供的 gemini-3.1-pro 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| gemini-3.5-flash | 文本 | Gemini / OpenAI Chat / OpenAI Responses | 输入 960 / 缓存 96 / 输出 8000 ViMoney/百万 tokens | Gemini 提供的 gemini-3.5-flash 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| gemini-3.5-flash-lite | 文本 | OpenAI Chat / OpenAI Responses / Anthropic Messages | 输入 388 / 缓存 40 / 输出 3248 ViMoney/百万 tokens | TeamoRouter 提供的 gemini-3.5-flash-lite 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| gemini-3.6-flash | 文本 | OpenAI Chat / OpenAI Responses / Anthropic Messages | 输入 816 / 缓存 80 / 输出 4076 ViMoney/百万 tokens | TeamoRouter 提供的 gemini-3.6-flash 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| glm-embedding-3 | 向量 | OpenAI Embeddings | 输入 50 / 输出 0 ViMoney/百万 tokens | GLM 提供的 embedding-3 向量生成能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| glm-embedding-3-pro | 向量 | OpenAI Embeddings | 输入 50 / 输出 0 ViMoney/百万 tokens | GLM 提供的 embedding-3-pro 向量生成能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| gpt-5.4 | 文本 | OpenAI Chat / OpenAI Responses | 输入 480 / 缓存 48 / 输出 2862 ViMoney/百万 tokens | OpenAI 提供的 gpt-5.4 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| gpt-5.4-mini | 文本 | OpenAI Chat / OpenAI Responses | 输入 480 / 缓存 48 / 输出 2862 ViMoney/百万 tokens | OpenAI 提供的 gpt-5.4-mini 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| gpt-5.5 | 文本 | OpenAI Chat / OpenAI Responses | 输入 636 / 缓存 64 / 输出 3816 ViMoney/百万 tokens | OpenAI 提供的 gpt-5.5 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| gpt-5.6-luna | 文本 | OpenAI Chat / OpenAI Responses | 输入 192 / 缓存 24 / 输出 1146 ViMoney/百万 tokens | OpenAI 提供的 gpt-5.6-luna 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| gpt-5.6-sol | 文本 | OpenAI Chat / OpenAI Responses | 输入 954 / 缓存 96 / 输出 5724 ViMoney/百万 tokens | OpenAI 提供的 gpt-5.6-sol 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| gpt-5.6-terra | 文本 | OpenAI Chat / OpenAI Responses | 输入 576 / 缓存 58 / 输出 3434 ViMoney/百万 tokens | OpenAI 提供的 gpt-5.6-terra 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| gpt-image-2 | 图片 | OpenAI Images | 30 ViMoney/次 | GPT IMAGE 2 生图，精准控制，逻辑力强，平均2分钟1张图 |
| gpt-image-2-2k | 图片 | OpenAI Images | 60 ViMoney/次 | GPT IMAGE 2 2k 生图，精准控制，逻辑力强，平均3分钟1张图 |
| gpt-image-2-4k | 图片 | OpenAI Images | 90 ViMoney/次 | GPT IMAGE 2 4k 生图，精准控制，逻辑力强，平均4分钟1张图 |
| gpt-text-embedding-3-large | 向量 | OpenAI Embeddings | 输入 94 / 输出 0 ViMoney/百万 tokens | OpenAI 提供的 text-embedding-3-large 模型调用能力。 |
| gpt-text-embedding-3-small | 向量 | OpenAI Embeddings | 输入 14 / 输出 0 ViMoney/百万 tokens | OpenAI 提供的 text-embedding-3-small 模型调用能力。 |
| hn-minimax-h3-93-2k | 视频 | OpenAI Videos | 450 ViMoney/次 | HN 提供的 minimax-h3 视频生成能力。9参考图3音频，不卡人脸。 |
| hn-sd2.0-fast-413-720p | 视频 | OpenAI Videos | 480 ViMoney/次 | HN 渠道 seedance-2.0-fast-720P 视频生成能力，4参考图1参考音频3参考视频，不卡人脸。适合做动漫。 |
| hn-sd2.0-mini-413-480p | 视频 | OpenAI Videos | 300 ViMoney/次 | HN 渠道 seedance-2.0-mini-480P 视频生成能力，4参考图1参考音频3参考视频，不卡人脸。 |
| kimi-k3 | 文本 | OpenAI Chat / OpenAI Responses / Anthropic Messages | 输入 2702 / 缓存 270 / 输出 13524 ViMoney/百万 tokens | Kimi 提供的 kimi-k3 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| metaso-detail | 搜索 | OpenAI Chat / OpenAI Responses / Anthropic Messages | 输入 318 / 缓存 32 / 输出 1908 ViMoney/百万 tokens | Metaso（秘塔搜索） 提供的 detail 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| metaso-fast | 搜索 | OpenAI Chat / OpenAI Responses / Anthropic Messages | 输入 318 / 缓存 32 / 输出 1908 ViMoney/百万 tokens | Metaso（秘塔搜索） 提供的 fast 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| metaso-pro | 搜索 | OpenAI Chat / OpenAI Responses / Anthropic Messages | 输入 318 / 缓存 32 / 输出 1908 ViMoney/百万 tokens | Metaso（秘塔搜索） 提供的 pro 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| metaso-research | 搜索 | OpenAI Chat / OpenAI Responses / Anthropic Messages | 输入 318 / 缓存 32 / 输出 1908 ViMoney/百万 tokens | Metaso（秘塔搜索） 提供的 research 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |
| midjourney | 图片 | OpenAI Images | 60 ViMoney/次 | Midjourney  2k 生图，设计感强，平均1分钟4张图 |
| minimax-h3-9-700p | 视频 | OpenAI Videos | 12 ViMoney/秒 | Minimax 提供的 minimax-h3 视频生成能力。9参考图3音频，不卡人脸。15秒时长平均8~10分钟1条 |
| minimax-h3-93-2k | 视频 | OpenAI Videos | 30 ViMoney/秒 | Minimax 提供的 minimax-h3 视频生成能力。9参考图3音频，不卡人脸。 |
| minimax-h3-93-768p | 视频 | OpenAI Videos | 18 ViMoney/秒 | Minimax 提供的 minimax-h3 视频生成能力。9参考图3音频3视频，不卡人脸。 |
| nano-banana-2 | 图片 | OpenAI Images | 60 ViMoney/次 | nano banana 2 生图，精准控制，平均2分钟1张图 |
| nano-banana-2-lite | 图片 | OpenAI Images | 30 ViMoney/次 | nano banana 2 lite 生图，精准控制，平均15秒1张图 |
| nano-banana-pro | 图片 | OpenAI Images | 90 ViMoney/次 | nano banana pro 生图，精准控制，平均2分钟1张图 |
| seedream-4.0 | 图片 | OpenAI Images | 20 ViMoney/次 | seedream-4.0 图片生成能力 |
| seedream-4.1 | 图片 | OpenAI Images | 20 ViMoney/次 | seedream-4.1 图片生成能力 |
| seedream-4.5 | 图片 | OpenAI Images | 20 ViMoney/次 | seedream-4.5 图片生成能力 |
| seedream-4.6 | 图片 | OpenAI Images | 20 ViMoney/次 | seedream-4.6 图片生成能力 |
| seedream-5.0 | 图片 | OpenAI Images | 20 ViMoney/次 | seedream 5.0 图片生成能力，适合人设场景，平均30秒1张图 |
| video-super-resolve-2k | 视频 | OpenAI Videos | 100 ViMoney/次 | video-super-resolve-2k 视频超分辨率能力。 |
| index-tts-2.5 | 音频 | OpenAI Audio | 按实际输出时长计费（ViMoney/秒，以模型目录价格为准） | IndexTTS-2.5 参考音频上传与 WAV 语音合成；不足 1 秒按 1 秒计。 |
| vimox-fast | 文本 | OpenAI Chat / OpenAI Responses | 输入 192 / 缓存 24 / 输出 1146 ViMoney/百万 tokens | OpenAI 提供的 gpt-5.3-codex-spark 模型调用能力，按 Vimox Router 当前分组价格执行并自动交付结果。 |

## 协议对接

### OpenAI 兼容

- Base URL：`https://router.vimox.cn/v1`
- 鉴权：`Authorization: Bearer 或 x-api-key`
- 端点：`/v1/chat/completions`、`/v1/responses`、`/v1/embeddings`、`/v1/images/generations`、`/v1/videos`、`/v1/systemone`、`/v1/vimox-image-depth/depth`
- 可用模型：`cc-omni-fast-no-water`、`cc-omni-fast-v2v-no-water`、`claude-fable-5`、`claude-opus-4-7`、`claude-opus-4-8`、`claude-opus-5`、`claude-sonnet-4-6`、`codex-auto-review`、`deepseek-v4-flash`、`deepseek-v4-pro`、`gemini-2.5-flash`、`gemini-2.5-pro`、`gemini-3-flash`、`gemini-3-pro`、`gemini-3.1-flash-lite`、`gemini-3.1-pro`、`gemini-3.5-flash`、`gemini-3.5-flash-lite`、`gemini-3.6-flash`、`jev-1.13.0`、`jev-latest`、`jev-preview`、`glm-embedding-3`、`glm-embedding-3-pro`、`gpt-5.4`、`gpt-5.4-mini`、`gpt-5.5`、`gpt-5.6-luna`、`gpt-5.6-sol`、`gpt-5.6-terra`、`gpt-image-2`、`gpt-image-2-2k`、`gpt-image-2-4k`、`gpt-text-embedding-3-large`、`gpt-text-embedding-3-small`、`hn-minimax-h3-93-2k`、`hn-sd2.0-fast-413-720p`、`hn-sd2.0-mini-413-480p`、`kimi-k3`、`metaso-detail`、`metaso-fast`、`metaso-pro`、`metaso-research`、`midjourney`、`minimax-h3-9-700p`、`minimax-h3-93-2k`、`minimax-h3-93-768p`、`nano-banana-2`、`nano-banana-2-lite`、`nano-banana-pro`、`seedream-4.0`、`seedream-4.1`、`seedream-4.5`、`seedream-4.6`、`seedream-5.0`、`video-super-resolve-2k`、`vimox-fast`

### OpenAI Audio（IndexTTS）

- Base URL：`https://router.vimox.cn/v1`
- 鉴权：`Authorization: Bearer 或 x-api-key`
- 模型：`index-tts-2.5`
- 端点：`/v1/index-tts/upload`、`/v1/audio/speech`
- 流程：先上传 wav、mp3、flac、m4a、ogg 或 aac 参考音频，取得 24 位十六进制 `voice id`；再将该 id 放入语音合成请求的 `voice` 字段。
- 语言：`ZH`、`EN`、`JA`、`ES`、`AR`；标准入口返回 WAV，参考音频单文件默认上限 50 MiB。

~~~bash
curl https://router.vimox.cn/v1/index-tts/upload \
  -H "Authorization: Bearer <your-api-key>" \
  -F "file=@reference.wav;type=audio/wav"
~~~

~~~bash
curl https://router.vimox.cn/v1/audio/speech \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{"model":"index-tts-2.5","input":"我真的很想你。","voice":"<voice-id>","response_format":"wav","language":"ZH","emo_text":"悲伤克制，带轻微哽咽，吐字清楚","use_emo_text":true,"emo_alpha":0.5,"use_random":false,"duration_factor":1.0}' \
  --output speech.wav
~~~

### Anthropic Messages

- Base URL：`https://router.vimox.cn`
- 鉴权：`Authorization: Bearer 或 x-api-key`
- 端点：`/v1/messages`
- 可用模型：`claude-fable-5`、`claude-opus-4-7`、`claude-opus-4-8`、`claude-opus-5`、`claude-sonnet-4-6`、`deepseek-v4-flash`、`deepseek-v4-pro`、`gemini-3.5-flash-lite`、`gemini-3.6-flash`、`kimi-k3`、`metaso-detail`、`metaso-fast`、`metaso-pro`、`metaso-research`

### Gemini 原生

- Base URL：`https://router.vimox.cn`
- 鉴权：`x-goog-api-key、x-api-key 或 Authorization: Bearer`
- 端点：`/v1beta/models/{model}:generateContent`、`/v1beta/models/{model}:streamGenerateContent?alt=sse`
- 可用模型：`gemini-2.5-flash`、`gemini-2.5-pro`、`gemini-3-flash`、`gemini-3-pro`、`gemini-3.1-flash-lite`、`gemini-3.1-pro`、`gemini-3.5-flash`

## 模型接入与参数

### 文本

- 协议：Anthropic Messages / OpenAI Responses / OpenAI Chat / Gemini
- 模型：`claude-fable-5`、`claude-opus-4-7`、`claude-opus-4-8`、`claude-opus-5`、`claude-sonnet-4-6`、`codex-auto-review`、`deepseek-v4-flash`、`deepseek-v4-pro`、`gemini-2.5-flash`、`gemini-2.5-pro`、`gemini-3-flash`、`gemini-3-pro`、`gemini-3.1-flash-lite`、`gemini-3.1-pro`、`gemini-3.5-flash`、`gemini-3.5-flash-lite`、`gemini-3.6-flash`、`gpt-5.4`、`gpt-5.4-mini`、`gpt-5.5`、`gpt-5.6-luna`、`gpt-5.6-sol`、`gpt-5.6-terra`、`kimi-k3`、`vimox-fast`

参数示例（模型 `claude-fable-5`）：

| 参数 | 位置 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| model | body | string | 是 | 模型 id。 | gpt-5.5 |
| messages | body | array | 是 | Chat Completions 消息数组。 | [{"role":"user","content":"你好"}] |
| stream | body | boolean | 否 | 是否启用 SSE 流式返回。 | true |
| temperature | body | number | 否 | 采样温度，透传给上游。 | 0.7 |
| max_tokens | body | integer | 否 | 最大输出 token，兼容上游支持情况。 | 1024 |

Vimox Qwen 的 `vimox-multimodel` Chat 请求支持 `content[]` 多模态项：图片使用
`image_url`（也兼容 `input_image`/`image`），视频使用 `input_video`，音频使用
`audio_url`（也兼容 `input_audio`），文本使用 `text`。本机绝对图片或音频路径可作为
媒体地址传入，Router 会在出站前读取并转为 data URL；单个本地媒体最多 20 MB。

### 搜索

- 协议：OpenAI Chat / OpenAI Responses / Anthropic Messages
- 模型：`metaso-detail`、`metaso-fast`、`metaso-pro`、`metaso-research`

参数示例（模型 `metaso-detail`）：

| 参数 | 位置 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| model | body | string | 是 | 模型 id。 | gpt-5.5 |
| messages | body | array | 是 | Chat Completions 消息数组。 | [{"role":"user","content":"你好"}] |
| stream | body | boolean | 否 | 是否启用 SSE 流式返回。 | true |
| temperature | body | number | 否 | 采样温度，透传给上游。 | 0.7 |
| max_tokens | body | integer | 否 | 最大输出 token，兼容上游支持情况。 | 1024 |

### 图片

- 协议：OpenAI Images
- 模型：`gpt-image-2`、`gpt-image-2-2k`、`gpt-image-2-4k`、`midjourney`、`nano-banana-2`、`nano-banana-2-lite`、`nano-banana-pro`、`seedream-4.0`、`seedream-4.1`、`seedream-4.5`、`seedream-4.6`、`seedream-5.0`

参数示例（模型 `gpt-image-2`）：

| 参数 | 位置 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| model | body/multipart | string | 是 | 图片模型 id。 | gpt-image-2 |
| prompt | body/multipart | string | 是 | 生成或编辑提示词。 | a cinematic cat |
| size | body/multipart | string | 否 | OpenAI 尺寸串，透传或由方言换算。 | 1024x1024 |
| aspect_ratio | body/multipart | string | 否 | 宽高比，部分方言支持。 | 16:9 |
| image_size | body/multipart | string | 否 | 部分图片上游的分辨率字段。 | 2K |
| n | body/multipart | integer | 否 | 生成张数，取决于上游支持情况。 | 1 |
| image | body/multipart | string\|file\|array | 否 | 编辑/参考图。JSON 建议传 data URI/base64；multipart 传文件。 | data:image/png;base64,... |
| mask | body/multipart | string\|file | 否 | 编辑遮罩图，支持的方言会作为参考输入处理。 | - |
| timeout_ms | body | integer | 否 | 众包/任务型图片同步等待上限。 | 180000 |

同步与异步是两种调用方式，不是两种图片协议。模型目录中 `protocols` 含 `openai-images` 即表示图片模型。同步调用等待完成后直接返回 `data[]` 图片结果（`url` 或 `b64_json`），没有任务 ID，也无需轮询。`gpt-image-2.5` 默认同步：

~~~bash
curl 'https://router.vimox.cn/v1/images/generations' \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-image-2.5","prompt":"电影感城市夜景","size":"1024x1024","aspect_ratio":"1:1","n":1,"response_format":"url"}'
~~~

同步编辑使用 `POST /v1/images/edits` multipart 上传参考图，响应同样直接包含最终图片，不需要轮询：

~~~bash
curl 'https://router.vimox.cn/v1/images/edits' \
  -H "Authorization: Bearer <your-api-key>" \
  -F "model=gpt-image-2.5" \
  -F "prompt=把照片处理成电影感夜景" \
  -F "image=@input.png;type=image/png"
~~~

异步图片提交仍使用图片端点；如 `gpt-image-2-2k`：

~~~bash
curl 'https://router.vimox.cn/v1/images/generations' \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-image-2-2k","prompt":"电影感城市夜景","image_size":"2K","n":1}'
~~~

提交响应只表示任务已创建，包含 `object: "image.task"`、`id`、`status`、`polling_url`，此时还没有最终图片。保存任务 ID 和 `polling_url`，用相同凭证轮询；处理中按间隔重试，成功后读取终态图片结果，失败/取消后停止重试。若缺少 `polling_url`，调用 `GET /v1/videos/{id}?model={model}` 并传原模型 ID（URL 编码）。例如已取得 `polling_url` 后：

~~~bash
curl 'https://router.vimox.cn/v1/videos/<task-id>?model=gpt-image-2-2k' \
  -H "Authorization: Bearer <your-api-key>"
~~~

重复查询同一地址直至 `status` 为终态；成功后从响应读取图片结果。异步图片在成功交付前会先持久化到 COS，返回稳定 URL。

`gpt-image-2.5` 默认仍是同步图片型号；调用方也可显式 POST `/v1/videos` 创建异步任务。`gpt-image-2` 和 `gpt-image-2-1k` 同样支持该显式异步方式。此操作选择任务生命周期，不会改变模型的 `openai-images` 身份。同步/异步图片都应读取响应顶层 `vimox_usage` 计费回执。`billing_status` 为 `charge_pending` 或 `refund_pending` 时表示账务已持久入队、等待后台确认；请求回执的 `remaining_vimoney` 为 `null`，客户端应保留 `trace_id` 并将余额显示为待确认。

### Vimoney 计费回执

使用 Vimox API Key 或 OAuth token 的真实计费请求会返回 `vimox_usage`。扣费与退款先写入 Router 本地加密队列，后台再完成官网结算；`charge_pending` / `refund_pending` 表示已持久入队、尚未确认，不会让模型响应等待远端 HTTP。回执不刷新钱包余额，所以 `remaining_vimoney` 为 `null`；客户端保留 `trace_id` 用于对账。只有 `settled` / `refunded` 表示后台确认完成。

```json
{
  "vimox_usage": {
    "consumed_vimoney": "2",
    "consumed_vimoney_micros": 2000000,
    "refunded_vimoney": null,
    "refunded_vimoney_micros": null,
    "remaining_vimoney": null,
    "billing_status": "charge_pending",
    "unit": "ViMoney",
    "trace_id": "01J..."
  }
}
```

Node 和 Python SDK 保留完整 JSON 扩展字段；Go `ChatCompletionResponse` 通过 `VimoxUsage` 暴露上述计费字段。流式响应按协议终止帧读取回执；具体字段定义见 Router `docs/14-用户门户使用文档.md`。

### 视频

- 协议：OpenAI Videos
- 模型：`cc-omni-fast-no-water`、`cc-omni-fast-v2v-no-water`、`hn-minimax-h3-93-2k`、`hn-sd2.0-fast-413-720p`、`hn-sd2.0-mini-413-480p`、`minimax-h3-9-700p`、`minimax-h3-93-2k`、`minimax-h3-93-768p`、`video-super-resolve-2k`

参数示例（模型 `cc-omni-fast-no-water`）：

| 参数 | 位置 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| model | body | string | 是 | 视频模型 id。查询任务时也必须放在 query：?model=... | doubao-seedance-2-0-260128 |
| prompt | body | string | 是 | 文本提示词；也可使用 content[] Ark 风格多模态输入。 | a cat walking in neon rain |
| content | body | array | 否 | Ark 风格多模态输入，支持 text、image_url、video_url、audio_url 等项。 | [{"type":"text","text":"..."},{"type":"image_url","image_url":{"url":"https://..."}}] |
| duration | body | integer | 否 | 视频时长秒数，常见 5/10/15，取决于上游。 | 5\|10\|15 |
| resolution | body | string | 否 | 视频分辨率，常见 480p/720p/1080p/2k/4k，取决于上游。 | 480p\|720p\|1080p |
| ratio | body | string | 否 | 视频画幅比例。 | 16:9\|9:16 |
| aspect_ratio | body | string | 否 | OpenRouter 等方言使用的画幅字段；ratio 会尽量换算。 | 16:9\|9:16 |
| generate_audio | body | boolean | 否 | 是否生成音频，取决于上游。 | false |
| id | path | string | 是 | POST 返回的视频任务 id，用于 GET /v1/videos/{id} 轮询。 | vt-... |
| model | query | string | 是 | 轮询和下载时用于路由回正确模型，含 / 的模型需 URL 编码。 | bytedance%2Fseedance-2.0 |

### 向量

- 协议：OpenAI Embeddings
- 模型：`glm-embedding-3`、`glm-embedding-3-pro`、`gpt-text-embedding-3-large`、`gpt-text-embedding-3-small`

参数示例（模型 `glm-embedding-3`）：

| 参数 | 位置 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- | --- |
| model | body | string | 是 | 模型 id。 | text-embedding-3-large |
| input | body | string\|array | 是 | 待向量化文本。 | hello |
| dimensions | body | integer | 否 | 可选向量维度，取决于上游模型是否支持。 | 1024 |

## 客户端接入示例

### curl（Chat Completions）

~~~bash
curl https://router.vimox.cn/v1/chat/completions \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{"model":"claude-fable-5","stream":true,"messages":[{"role":"user","content":"你好"}]}'
~~~

### OpenAI SDK（Python）

~~~python
from openai import OpenAI

client = OpenAI(base_url="https://router.vimox.cn/v1", api_key="<your-api-key>")
resp = client.chat.completions.create(
    model="claude-fable-5",
    messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)
~~~

### OpenAI Responses

~~~bash
curl https://router.vimox.cn/v1/responses \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{"model":"claude-fable-5","stream":true,"input":"你好"}'
~~~

### Anthropic Messages

~~~bash
curl https://router.vimox.cn/v1/messages \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{"model":"claude-fable-5","max_tokens":1024,"stream":true,"messages":[{"role":"user","content":"你好"}]}'
~~~

### Anthropic SDK（Python）

~~~python
from anthropic import Anthropic

client = Anthropic(base_url="https://router.vimox.cn", api_key="<your-api-key>")
msg = client.messages.create(
    model="claude-fable-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "你好"}],
)
print(msg.content[0].text)
~~~

### 图片生成（JSON）

~~~bash
curl https://router.vimox.cn/v1/images/generations \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "一张电影感的城市夜景",
    "size": "1024x1024",
    "aspect_ratio": "1:1",
    "n": 1
  }'
~~~

### 图片编辑（multipart）

~~~bash
curl https://router.vimox.cn/v1/images/edits \
  -H "Authorization: Bearer <your-api-key>" \
  -F "model=gpt-image-2" \
  -F "prompt=把背景改成雨夜霓虹街道" \
  -F "image=@input.png" \
  -F "size=1024x1024"
~~~

### 视频生成（提交任务 + 轮询）

~~~bash
API_KEY="<your-api-key>"
BASE="https://router.vimox.cn"
MODEL="cc-omni-fast-no-water"

TASK=$(curl "$BASE/v1/videos" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"model\": \"$MODEL\",
    \"prompt\": \"一只猫在雨夜霓虹街道行走，电影感镜头\"
  }")

ID=$(printf '%s' "$TASK" | node -pe "JSON.parse(require('fs').readFileSync(0,'utf8')).id")
POLLING_URL=$(printf '%s' "$TASK" | node -pe "JSON.parse(require('fs').readFileSync(0,'utf8')).polling_url || ''")
[ -z "$POLLING_URL" ] && POLLING_URL="/v1/videos/$ID?model=$(node -e "process.stdout.write(encodeURIComponent(process.argv[1]))" "$MODEL")"

while true; do
  STATUS=$(curl "$BASE$POLLING_URL" -H "Authorization: Bearer $API_KEY")
  echo "$STATUS"
  STATE=$(printf '%s' "$STATUS" | node -pe "const v=JSON.parse(require('fs').readFileSync(0,'utf8')); v.status || v.state || ''")
  [ "$STATE" = "succeeded" ] || [ "$STATE" = "completed" ] && break
  [ "$STATE" = "failed" ] && exit 1
  sleep 5
done

curl "$BASE/v1/videos/$ID/content?model=$(node -e "process.stdout.write(encodeURIComponent(process.argv[1]))" "$MODEL")" \
  -H "Authorization: Bearer $API_KEY" \
  --output result.mp4
~~~

### 向量化

~~~bash
curl https://router.vimox.cn/v1/embeddings \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{"model":"glm-embedding-3","input":"需要向量化的文本"}'
~~~

### Claude Code

~~~bash
export ANTHROPIC_BASE_URL="https://router.vimox.cn"
export ANTHROPIC_AUTH_TOKEN="<your-api-key>"
claude
~~~

### Codex CLI（~/.codex/config.toml）

~~~toml
[model_providers.vimox]
name = "vimox-router"
base_url = "https://router.vimox.cn/v1"
env_key = "VIMOX_API_KEY"
wire_api = "responses"

# 然后：export VIMOX_API_KEY="<your-api-key>"
~~~

### Gemini（原生协议）

~~~bash
curl "https://router.vimox.cn/v1beta/models/gemini-2.5-flash:generateContent" \
  -H "x-api-key: <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{"contents":[{"parts":[{"text":"你好"}]}]}'
~~~

### Gemini 流式（SSE）

~~~bash
curl "https://router.vimox.cn/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse" \
  -H "x-api-key: <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{"contents":[{"parts":[{"text":"写一个三点总结"}]}]}'
~~~
# System One 决策与 Jev 兼容对接

## System One（决策模型与 Jev 兼容）

- 端点：`POST /v1/systemone`
- 上游：`vimox-decision` 转发到独立决策服务；`jev-*` 转发至 TypeSafe `https://api.typesafe.ai/v1/systemone`
- 鉴权：`Authorization: Bearer <your-api-key>`
- 请求：`{"state":"文本或结构化状态","model":"vimox-decision","images":["data:image/jpeg;base64,..."],"questions":{"id":{"type":"noul|choice|score","instructions":"..."}}}`。`images` 可省略。
- 返回：System One `model`、`answers`、`usage` 结构；Choice/Score answer 含概率分布与 confidence。
- 模型：`vimox-decision`（决策方法默认）；Jev `jev-latest`（兼容方法默认）、`jev-preview`、`jev-1.13.0`。
- 计费：`vimox-decision` 只按上游返回的 `usage.input_tokens` 和管理端输入 token 费率计费；不计缓存拆分和输出 token。Jev 继续使用现有计费配置。
- SDK：Python `decision` / `system_one`、Node `decision` / `systemOne`、Go `Decision` / `SystemOne`。
- 计费：决策模型只按输入 token 费率与 `usage.input_tokens` 计费；Jev 继续遵循现有模型目录和分组价格。

# XLF 其他分类对接

## 视频解析

- 端点：`POST /v1/xlf/parse`
- 兼容端点：`POST /v1/parseVideoUrl`
- 鉴权：`Authorization: Bearer <your-api-key>`
- 请求：`{"model":"xlf","input":"文本或平台分享网址"}`
- 返回：`url` / `video_url` 视频 URL
- 计费：按次收费；这是同步接口，不创建视频任务，也不需要轮询。
- 视频号分享页（例如 `https://weixin.qq.com/sph/...`）必须先调用该接口，再下载返回的视频 URL。


# Vimox ASR

`POST /v1/audio/transcriptions`，Bearer 鉴权，`multipart/form-data`，同步返回 JSON。
默认按分钟计费，不足 1 分钟按 1 分钟；若模型目录明确配置 `per_second`，则按实际秒数计费。
对外模型名 `vimox-asr`；Whisper large-v3 FP16 转录、WhisperX 中英文词级对齐、CAM++ 说话人分离。

| 字段 | 说明 |
| --- | --- |
| model | 必填，`vimox-asr` |
| file | 必填，音频或含音轨的视频，最大 20 MiB、3600 秒；支持 FFmpeg 可解码的 WAV/MP3/FLAC/M4A/MP4 等 |
| language | 可选，Whisper 小写语言代码；省略自动检测 |
| align | `true`（默认）或 `false`；已部署 `zh`/`en` 对齐，其他语言须关闭 |
| diarize | `true`（默认）或 `false`；有效语音必须超过 5 秒，短音频须关闭 |
| num_speakers | 可选整数 1–10；省略自动估计 |
| response_format | `verbose_json`（默认）或 `json`，两者均返回下述完整结构 |

```bash
curl https://router.vimox.cn/v1/audio/transcriptions --max-time 600 \
  -H "Authorization: Bearer $VIMOX_API_KEY" \
  -F model=vimox-asr -F file=@input.mp3 \
  -F language=zh -F align=true -F diarize=true
```

响应包含 `model`、`task=transcribe`、`text`、`language`、`duration`（秒）、`segments[]`、
`words[]`、`speakers[]`、`diarization[]` 和 `processing`。`segments` 包含 start/end/text 和
可选 words/speaker；`words` 包含 word 和可选 start/end/score/speaker。无法可靠对齐的词可能
缺少时间；不得自行假定每个词都有时间。`diarization` 为 start/end/speaker 区间，时间均为秒。
`SPEAKER_00` 等标签只在当前文件内有效，不识别真实身份，也不跨文件保持一致。

`processing` 包含总秒数、各阶段耗时、音频处理倍速、batch size 和实际使用的推理/分离引擎。
转录可识别多语言，中英混合采用检测到的主要语言对齐，混合术语的词级精度需业务样本验证。
CAM++ 不保证区分同时重叠讲话；小于 30 秒或超过 10 人的录音质量可能下降。

错误：400 参数/解码/语音过短或对齐语种不支持；401 鉴权失败；413 文件过大；
422 解码超时；429 队列满（含 `Retry-After`）；500 推理失败；503 后端不可用。
单 GPU 部署 2 个实例，每实例一次执行一个任务、最多 4 个在途请求（含上传、执行及等待），
合计最多 2 个执行任务和 8 个在途请求；这不是 8 路实时转录承诺。
建议客户端超时至少 600 秒；长任务及排队时可配置更长，不应自动无限重试。

Python：`VimoxClient(key, timeout=600).transcribe_audio("input.mp3", language="zh")`。
Node：`client.audio.transcriptions(blob, {language: "zh"})`，也可用 `transcribeAudio`。
Go：`client.TranscribeAudio(ctx, file, vimox.TranscriptionOptions{Language: "zh"}, &result)`，
返回类型可使用 `TranscriptionResult`，并设置适合长任务的 HTTP/context 超时。

# Vimox MuseTalk 口型 API

`vimox-talk` 使用 OpenAI Videos 异步协议。上传 `video` 和 `audio` 两个 multipart 文件到 `/v1/videos`；返回任务 ID 后轮询 `/v1/videos/{id}?model=vimox-talk`，完成后从 `/content` 下载 MP4。单 GPU 默认批大小 8，队列满返回 429。

# 用户并发与离线模型目录

用户有两个独立并发池：文本模型默认 10；图片、视频、音频、向量、决策、解析及其他非文本模型共享默认 10。按 Vimox 用户 ID 合并全部 API Key 和 OAuth；本地 Key 使用 `key:<key-id>`。单模型 `maxConcurrency` 继续叠加生效。

后台“访问控制 → 用户并发”（`/admin/access/concurrency/`）可修改默认值和指定用户额度。用户留空的池继承默认值，0 表示不限；删除用户覆盖恢复默认。保存后对新请求生效，不取消已运行请求。

同步和流式调用到响应结束或断开时释放用户名额。异步图片、视频等任务提交后，排队及生成中持续占用，成功、失败、取消等终态释放。任务查询和下载不重复占用。异步任务占位存储在 SQLite 中，重启后仍可查询和释放；用户停止轮询时，额度满后的后台复查会更新任务状态，客户端可遵循 Retry-After 重试。单模型限制保持请求并发口径，异步提交响应结束即释放模型名额。

Router 并发超限返回 HTTP 429、`Retry-After: 5` 和 `X-Trace-Id`。客户端必须显示 `error.message`，保留 reason 与 trace 用于诊断：

```json
{"error":{"code":"rate_limited","reason":"user_concurrency_limited","message":"您的其他模型并发额度已满：当前占用 10，上限 10。图片、视频、音频及其他非文本模型共享此额度，排队和生成中的异步任务也占用名额；请等待请求或任务完成，或联系管理员提高您的其他模型并发额度。","scope":"user","bucket":"other","model":"minimax-h3-93-700p","current":10,"limit":10,"retryable":true}}
```

文本池 `bucket=text`；非文本池 `bucket=other`。单模型限制为 `reason=model_concurrency_limited`、`scope=model`、`bucket=null`。不要只凭 HTTP 429 推断是哪层限制，上游也可能返回 429。Node `VimoxError.details`、Python `VimoxError.details`、Go `Error.Details()` 保留这些字段。

## 门户与轻量用量查询

`/users/pricing`（模型列表与价格）、`/users/connect` 和 `/users/apidocs` 可免登录查看。公开模型页展示目录快照；登录后按当前账号权限展示可用模型与价格。`/users/models` 为个人模型用量统计，仍需登录。账户用量、账单和密钥管理仍需鉴权。最近请求、每日用量、账单、邀请码、创作工具、价格、模型统计分别使用 `/users/recent`、`/users/daily`、`/users/billing`、`/users/invitations`、`/users/tools`、`/users/pricing`、`/users/models`，支持刷新与浏览器历史。

门户默认查询当地当天（`days=1`），每页 20 条；可选择 7/30/90 天。先显示账户与近期记录，历史汇总独立加载，完整 API 文档在打开文档页时渲染。OAuth Key 范围缓存按主站和账号隔离，同账号请求合并，不同账号不共用网络锁。首次 OAuth 查询仍依赖主站完整 Key 清单。

```http
GET /v1/usage?days=1&tzOffsetMinutes=480&view=recent&recentLimit=20
Authorization: Bearer <API Key or OAuth token>
```

`days` 为 1–90，API 未传时仍默认 7；按客户端时区的今日零点往前计算。`view=recent` 不做历史用量汇总；`view=summary` 不读近期列表；省略 view 返回完整信息。近期列表及 recentTotal 均按 days 过滤；usage.total 仍是累计总用量。普通 Key 仅查询自身；OAuth 默认汇总当前用户全部有效 Key，keyId 仅可选择本人 Key。

`recentLimit` 为 1–100；后续页推荐同时传最后一行的 `createdAt` 与 `traceId`，分别作为 `recentBefore` 和 URL 编码的 `recentBeforeTrace`。游标是严格之前，避免相同时间戳重复；修改 days 或 keyId 后重置游标。兼容 `recentPage`。

Node：`client.usage({days: 1, tzOffsetMinutes: 480, view: "recent", recentLimit: 20})`。Python：`client.usage(days=1, tz_offset_minutes=480, view="recent", recent_limit=20)`。Go：`client.UsageWithOptions(ctx, vimox.UsageOptions{Days: 1, View: "recent", RecentLimit: 20}, &result)`；原 Usage 方法保持兼容。

## 离线目录

在 Router 仓库根执行 `npm run sync:model`。脚本读取根 `.env` 的 `ROUTER_API_KEY`（或环境变量 VIMOX_API_KEY / ROUTER_API_KEY），从 HTTPS `/v1/models` 获取该 Key 当前可见的全部公开信息，保留价格、能力、参数、协议和扩展字段，验证后写入 `vimox-sdk/docs/model-catalog.json` 及三种语言资源。不会输出密钥，网络或响应校验失败保留已有目录。私有渠道标识不得进入公开目录。

Node：`import { getModelCatalog } from "@vimox/router-sdk/catalog"; const catalog = getModelCatalog();`，亦可从主入口导入；JSON 子路径为 `@vimox/router-sdk/model-catalog.json`。Python：`from vimox import get_model_catalog; catalog = get_model_catalog()`。Go：`catalog, err := vimox.ModelCatalog()`。这些函数无需凭证或网络，每次返回独立对象。

目录是同步时的快照，不会在其他项目运行时自动追踪线上变化；维护者同步后，消费项目需要更新所引用的 SDK。实时可用性和用户权限始终以服务端为准。打包和发布须由授权发布流程完成。

## vimox-decision URL 图片能力

POST /v1/systemone；images 可混用公网 HTTP(S) URL、Data URI、base64，最多 16 张；URL 单张 10 MiB、合计 32 MiB，只用默认端口，不跟随重定向，禁止内网地址。COS 私有图使用有效签名 URL。SDK 原样转发、服务端下载；return_details=true 返回 timing_ms.image_fetch 和 image_input（url_count/download_bytes）。图像 token 仍计入 usage.input_tokens；Jev 能力不变。详细示例与错误说明见 api.txt。


## Thinking 响应与纯文本输入（2026-10-25）

`vimox-audio` 的模型 ID 和 `/v1/chat/completions` 不变，支持纯文本消息，也支持用户消息中的 `text` + `audio_url`（最多 4 段）。无需为纯文本请求提供空音频。

最终答案读取 `choices[0].message.content`，思考过程读取可选的 `choices[0].message.reasoning_content`。流式时分别读取 `choices[0].delta.content` 和 `choices[0].delta.reasoning_content`，按 SSE 空行分帧；保留结束帧、usage 和 `[DONE]`。仅有思考内容不代表已有最终答案，不要把思考内容自动当作答案。

`max_tokens` 包括思考与答案。音频 Worker 会在总输出预算内预留答案额度，必要时结束未闭合思考并续写；仍无答案时返回 HTTP 502 `empty_model_response`，而非成功空文本。`usage` 为真实两阶段 token 用量之和（包含续写输入）。当前音频 SSE 在推理完成后依次发送字段，不提供逐 token 实时输出。

Python `chat_completions(model="vimox-audio", stream=False, messages=[{"role":"user","content":"你好"}])` 返回字典，保留 `message.reasoning_content`；Node `chatCompletions` 保留同字段，SSE 可用 `{responseType:"response"}` 取得原始 Response；Go `ChatCompletions` 可解码到 `ChatCompletionResponse` 或 `map[string]any`，原始 SSE 可接收到 `[]byte`。Python/Go 当前同步辅助方法不提供增量 SSE 迭代器。

新增公开类型 `ChatCompletionMessage`、`ChatCompletionChoice`、`ChatCompletionResponse`，Node 另含 `ChatCompletionChunk`，Python 可从 `vimox.chat_types` 导入。模型目录中的文本分类、音频输入能力、端点和鉴权保持现行配置。本次只更新源码与文档，未构建、打包或发布 SDK 下载产物；线上门户未同步。


## 画布视频积分授权（2026-10-26）

视频继续使用 `POST /v1/videos`、`GET /v1/videos/{id}?model=...` 和 `/content`，平台 Bearer 鉴权不变。模型来自账号同步后的 `/v1/models`，只选择 video/openai-videos；不在 SDK 离线目录编造 canonical ID 或上游积分价格。

`credit_ceiling` 是调用方明确批准的上游积分上限，与 Router 的 ViMoney 账单独立。需要确认或超限时返回 HTTP 400，错误码 `generation_confirmation_required`，包含原 id、polling_url、required_action=confirm 和 credit_confirmation；先展示报价并获得批准，再用原 model、resume_task_id=id、credit_ceiling POST /v1/videos。不要重新提交提示词或创建节点；已受理任务只轮询，不重复运行。GET 查询不触发生成，成功视频仅返回持久 COS URL。

Python：`client.video_resume(task_id, model, approved_ceiling)`。
Node：`client.videos.resume(taskId, model, approvedCeiling)`。
Go：`client.VideoResume(ctx, taskID, model, approvedCeiling, &output)`。
初次 400 的 task 信息在 SDK 错误体中；三个客户端的等待方法在遇到 required_action=confirm 时停止，保留任务信息给调用方。调用方仍使用原平台身份，原模型和原任务绑定账号。

本次同步仓库内 SDK 源码、类型、文档及回归用例。线上未同步；未构建 SDK ZIP 或发布包，离线模型快照待获得真实账号目录并由授权发布流程刷新。完整管理员配置与恢复约束见 Router 文档 docs/api/channels/video-dreamina-canvas.md。
