> ## Agent Instructions > Public hosts only: console https://omnimux.ai/dashboard · API https://api.omnimux.ai · docs https://docs.omnimux.ai. > Gateway auth is Authorization: Bearer sk-… on https://api.omnimux.ai/v1 (OpenAI-compatible Chat Completions and related paths). > Discover pages from /llms.txt; full site dump /llms-full.txt; product skill /skill.md; docs search MCP /mcp. Prefer .md page URLs for Markdown. > Default docs locale is en; zh mirrors the same relative paths. Do not invent model ids not present on live pricing or the complete API pages. # Get Balance Source: https://docs.omnimux.ai/en/api-reference/account/balance GET https://omnimux.ai/api/user/self Get balance * Account management user API * Usually access token + `New-Api-User` (see device-login for bootstrap) ## Identity | Field | Value | | ---------- | ------------------- | | Series | Account | | Capability | Balance and profile | ## Endpoint | Method | Path | | ------ | ---- | | `Path` | \`\` | Base URL: `https://omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ----------------------- | | `Authorization` | header | string | yes | `Bearer ` | | `New-Api-User` | header | string | yes | Current user id | ## Body / parameters Follow the right-rail cURL. ## Response ### 200 Account fields such as `quota` / `used_quota` when applicable. Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash cURL theme={null} curl --request GET \ --url https://api.omnimux.ai/v1/video/generations/$TASK_ID \ --header 'Authorization: Bearer ' ``` ```json 200 theme={null} { "ok": true } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Device Code Login Source: https://docs.omnimux.ai/en/api-reference/account/device-login POST https://omnimux.ai/api/user/device/code RFC 8628-style device login: request device_code → browser approve → poll for access_token * Account management user API (CLI / headless login) * **Code request and token poll need no auth**; approve/deny need a logged-in browser session * The returned `access_token` is for `https://omnimux.ai` user APIs (with `New-Api-User`) ## Identity | Field | Value | | ---------- | ------------ | | Series | Account | | Capability | Device login | ## Endpoints | Step | Method | Path | Auth | | --------------------------------------- | ----------------------- | ---------------------------------------------------- | --------------- | | 1. Request device code | `POST` | `/api/user/device/code` | None | | 2. Browser approval | Open `verification_uri` | Console / CLI login page | Browser session | | 3. Poll for token | `POST` | `/api/user/device/token` | None | | 4. Approve / deny (optional, logged-in) | `POST` | `/api/user/device/approve` · `/api/user/device/deny` | User session | Base URL: `https://omnimux.ai` ## Authorization | Step | Requirement | | -------------------------------- | ----------------------------------------------------------------------------------- | | `device/code` · `device/token` | **No** `Authorization` / `New-Api-User` | | `device/approve` · `device/deny` | Logged-in user (console session); body includes `user_code` | | After token issued | Other user APIs: `Authorization: Bearer ` + `New-Api-User: ` | AI gateway and social-data APIs still use `sk-` tokens on `https://api.omnimux.ai` — a different credential surface. See [Connection & usage](/en/faqs/connection-usage). ## Body / parameters ### `POST /api/user/device/code` | Field | Type | Required | Description | | ------------- | ------ | -------- | ---------------------------- | | `client_name` | string | no | Client label (e.g. `my-cli`) | ### `POST /api/user/device/token` | Field | Type | Required | Description | | ------------- | ------ | -------- | -------------------------------------------------------------- | | `device_code` | string | yes | `device_code` from step 1 | | `grant_type` | string | no | If set, must be `urn:ietf:params:oauth:grant-type:device_code` | Poll at the response `interval` (default \~5s); polling faster returns `slow_down`. ## Response ### Step 1 · 200 (code issued) | Field | Description | | -------------------------------- | ---------------------------------------- | | `data.device_code` | Secret for the device (poll with this) | | `data.user_code` | Short code the user types in the browser | | `data.verification_uri` | Approval page URL | | `data.verification_uri_complete` | URL with prefilled `user_code` | | `data.expires_in` | Lifetime in seconds (default 900) | | `data.interval` | Recommended poll interval (seconds) | ### Step 3 · success (approved) | Field | Description | | ------------------- | ------------------------------- | | `data.access_token` | System access token (PAT) | | `data.token_type` | `Bearer` | | `data.user_id` | User id (use as `New-Api-User`) | | `data.username` | Username | ### Step 3 · pending / errors (often HTTP 200 with `success: false`) | `code` | Meaning | | --------------------------------- | ------------------------- | | `authorization_pending` | User has not approved yet | | `slow_down` | Polling too fast | | `access_denied` | User denied | | `expired_token` / `invalid_grant` | Expired or invalid | More error semantics: [Connection & usage](/en/faqs/connection-usage). ```bash 1. Request device code theme={null} curl --request POST \ --url https://omnimux.ai/api/user/device/code \ --header 'Content-Type: application/json' \ --data '{"client_name":"my-cli"}' ``` ```bash 2. Poll for token theme={null} curl --request POST \ --url https://omnimux.ai/api/user/device/token \ --header 'Content-Type: application/json' \ --data '{"device_code":"","grant_type":"urn:ietf:params:oauth:grant-type:device_code"}' ``` ```json 200 code issued theme={null} { "success": true, "data": { "device_code": "...", "user_code": "ABCD-EFGH", "verification_uri": "https://omnimux.ai/cli/login", "verification_uri_complete": "https://omnimux.ai/cli/login?user_code=ABCD-EFGH", "expires_in": 900, "interval": 5 } } ``` ```json pending theme={null} { "success": false, "code": "authorization_pending", "message": "authorization pending", "interval": 5 } ``` ```json 200 approved theme={null} { "success": true, "data": { "access_token": "...", "token_type": "Bearer", "user_id": 1, "username": "alice" } } ``` ```json denied theme={null} { "success": false, "code": "access_denied", "message": "authorization denied" } ``` # Get Pricing Source: https://docs.omnimux.ai/en/api-reference/account/pricing GET https://omnimux.ai/api/pricing Get pricing * Account management user API * Usually access token + `New-Api-User` (see device-login for bootstrap) ## Identity | Field | Value | | ---------- | -------------- | | Series | Account | | Capability | Public pricing | ## Endpoint | Method | Path | | ------ | ---- | | `Path` | \`\` | Base URL: `https://omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ----------------------- | | `Authorization` | header | string | yes | `Bearer ` | | `New-Api-User` | header | string | yes | Current user id | ## Body / parameters Follow the right-rail cURL. ## Response ### 200 Account fields such as `quota` / `used_quota` when applicable. Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash cURL theme={null} curl --request GET \ --url https://api.omnimux.ai/v1/video/generations/$TASK_ID \ --header 'Authorization: Bearer ' ``` ```json 200 theme={null} { "ok": true } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Doubao Speech Recognition Source: https://docs.omnimux.ai/en/api-reference/audio-series/models/doubao-asr POST https://api.omnimux.ai/v1/audio/transcriptions VolcEngine / Doubao speech recognition · model `doubao-asr-bigmodel`, `seedasr-auc`, `bigasr-auc` * Endpoint: `POST /v1/audio/transcriptions` * Protocol: OpenAI-compatible Audio Transcriptions endpoint * Supports recorded audio file speech-to-text transcription ## Identity | Field | Value | | ------ | -------------------------------------------------- | | Series | Audio series | | Brand | VolcEngine / Doubao | | model | `doubao-asr-bigmodel`, `seedasr-auc`, `bigasr-auc` | ## Endpoint | Method | Path | | ------ | -------------------------- | | `POST` | `/v1/audio/transcriptions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body (multipart/form-data) | Field | Type | Required | Description | | ----------------- | ------ | -------- | ----------------------------------------------------------------------- | | `file` | file | yes | The audio file object to transcribe (supports wav, mp3, ogg, m4a, etc.) | | `model` | string | yes | One of `doubao-asr-bigmodel`, `seedasr-auc`, `bigasr-auc` | | `language` | string | no | The language of the input audio in ISO-639-1 format (e.g. `en`, `zh`) | | `response_format` | string | no | Format of output (`json`, `text`). Default `json` | ## Response ### 200 ```json theme={null} { "text": "Transcribed text output from Doubao ASR speech recognition model." } ``` ```bash curl theme={null} curl --request POST \ --url https://api.omnimux.ai/v1/audio/transcriptions \ --header 'Authorization: Bearer sk-...' \ --header 'Content-Type: multipart/form-data' \ --form 'file=@audio.mp3' \ --form 'model=doubao-asr-bigmodel' ``` ```json 200 OK theme={null} { "text": "Transcribed text output from Doubao ASR speech recognition model." } ``` # GPT-4o mini TTS Source: https://docs.omnimux.ai/en/api-reference/audio-series/models/gpt-4o-mini-tts POST https://api.omnimux.ai/v1/audio/speech GPT-4o mini TTS · model `gpt-4o-mini-tts` * Call `POST /v1/audio/speech` with `model` `gpt-4o-mini-tts` * Body requires `model`, `input`, and `voice` * Returns binary audio stream (`audio/mpeg` by default) ## Identity | Field | Value | | ------ | ----------------- | | Series | Audio series | | Brand | GPT Audio | | model | `gpt-4o-mini-tts` | ## Endpoint | Method | Path | | ------ | ------------------ | | `POST` | `/v1/audio/speech` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ----------------- | ------ | -------- | ------------------------------------------------------------------------ | | `model` | string | yes | Must be `gpt-4o-mini-tts` | | `input` | string | yes | Text to synthesize (up to 4096 characters) | | `voice` | string | yes | Voice persona (e.g. `alloy`, `echo`, `fable`, `onyx`, `nova`, `shimmer`) | | `response_format` | string | no | `mp3` (default), `opus`, `aac`, `flac`, `wav`, `pcm` | | `speed` | number | no | Speaking speed multiplier (`0.25` to `4.0`, default `1.0`) | ## Response ### 200 Returns binary audio data with `Content-Type: audio/mpeg`. Errors: see right-rail examples. ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/audio/speech \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "gpt-4o-mini-tts", "input": "Hello! Welcome to OmniMux text-to-speech API.", "voice": "alloy" }' \ --output speech.mp3 ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Index TTS voice clone Source: https://docs.omnimux.ai/en/api-reference/audio-series/models/index-tts POST https://api.omnimux.ai/v1/tasks/autodl AutoDL Index-TTS voice clone · model `indextts-2` * Create: `POST /v1/tasks/autodl` with `model` `indextts-2` * Poll: `GET /v1/tasks/{task_id}` (fetch output audio through `GET /v1/tasks/{task_id}/artifacts`) * Dedicated workflow channel supporting reference voice clone and emotional nuance control * Recommended: For 3-second instant generation, prefer official mainstream `seed-audio-1.0` voice clone mode ## Identity | Field | Value | | ------ | ------------------ | | Series | Audio | | Brand | Index TTS / AutoDL | | model | `indextts-2` | ## Endpoint | Method | Path | | ------ | ------------------------------- | | `POST` | `/v1/tasks/autodl` | | `GET` | `/v1/tasks/{task_id}` | | `GET` | `/v1/tasks/{task_id}/artifacts` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | -------------------- | ------ | -------- | --------------------------------------- | | `model` | string | yes | Must be `indextts-2` | | `prompt_text` | string | yes | Text script to read and synthesize | | `prompt_simple` | string | yes | Voice timbre reference audio URL | | `emo_control_method` | string | yes | Emotion mode, recommended `"与音色参考音频相同"` | | `emo_happy` | number | no | Happiness intensity \[0, 1], e.g. `0.5` | | `emo_sad` | number | no | Sadness intensity \[0, 1] | | `emo_angry` | number | no | Anger intensity \[0, 1] | ## Response ### 200 (Create) | Field | Type | Description | | ---------------- | ------ | --------------- | | `id` / `task_id` | string | Task identifier | | `status` | string | `queued` | ### Poll & Artifacts After completion, fetch the synthesized WAV audio through `GET /v1/tasks/{task_id}/artifacts`. ```bash cURL theme={null} curl --request POST \ --url https://api.omnimux.ai/v1/tasks/autodl \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "indextts-2", "prompt_text": "Hello, this is a voice clone test.", "prompt_simple": "https://example.com/voice.wav", "emo_control_method": "与音色参考音频相同" }' ``` ```json 200 theme={null} { "id": "task_sl8rnyewmb1O2ygKljRFnSIFnnmUSdeu", "task_id": "task_sl8rnyewmb1O2ygKljRFnSIFnnmUSdeu", "model": "indextts-2", "status": "queued", "created_at": 1789704195 } ``` # Seed Audio Generation Source: https://docs.omnimux.ai/en/api-reference/audio-series/models/seed-audio POST https://api.omnimux.ai/v1/audio/speech VolcEngine / BytePlus Seed Audio speech and sound effects · model `seed-audio-1.0` * Endpoint: `POST /v1/audio/speech` with `model` `seed-audio-1.0` * Protocol: OpenAI-compatible Audio Speech (TTS) endpoint * Supports text-to-speech synthesis, timbre reference, and scene sound design up to 120 seconds per generation ## Identity | Field | Value | | ------ | --------------------- | | Series | Audio series | | Brand | VolcEngine / BytePlus | | model | `seed-audio-1.0` | ## Endpoint | Method | Path | | ------ | ------------------ | | `POST` | `/v1/audio/speech` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ----------------- | ------ | -------- | ------------------------------------------------------------- | | `model` | string | yes | Must be `seed-audio-1.0` | | `input` | string | yes | The text to synthesize into audio, up to 3000 characters | | `voice` | string | no | Voice identifier (preset timbre ID or cloned voice ID) | | `response_format` | string | no | Audio format (`wav`, `mp3`, `pcm`, `ogg_opus`). Default `wav` | | `speed` | number | no | Playback speed multiplier \[0.25, 4.0]. Default `1.0` | ## Response ### 200 Returns binary audio data stream (with `Content-Type: audio/wav` etc.). ```bash curl theme={null} curl --request POST \ --url https://api.omnimux.ai/v1/audio/speech \ --header 'Authorization: Bearer sk-...' \ --header 'Content-Type: application/json' \ --data '{ "model": "seed-audio-1.0", "input": "Welcome to VolcEngine Seed Audio synthesis.", "voice": "zh_female_cancan", "response_format": "mp3" }' \ --output output.mp3 ``` ```http 200 OK theme={null} Content-Type: audio/mpeg Content-Length: 48291 ``` # Suno Music Generation Source: https://docs.omnimux.ai/en/api-reference/audio-series/models/suno POST https://api.omnimux.ai/v1/video/generations Suno Music Generation · model `suno` * Create: `POST /v1/video/generations` with `model` `suno` (music generation) or `suno-sounds` (sound effects generation) * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Music and sound effect generations share the unified media task endpoint and task polling contract ## Identity | Field | Value | | ------ | --------------------- | | Series | Audio series | | Brand | Suno | | model | `suno`, `suno-sounds` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------- | ------- | -------- | ------------------------------------------------------------ | | `model` | string | yes | Must be `suno` | | `prompt` | string | yes | Song lyrics, genre description, or musical style | | `title` | string | no | Song title | | `tags` / `style` | string | no | Musical style tags (e.g. `acoustic pop`, `electronic synth`) | | `instrumental` | boolean | no | Set `true` to generate instrumental music without vocals | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | `queued` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "suno", "prompt": "An upbeat acoustic folk song about mountain travel at sunrise", "tags": "folk acoustic positive" }' ``` ```json 200 theme={null} { "task_id": "task_suno_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Whisper Audio Transcription Source: https://docs.omnimux.ai/en/api-reference/audio-series/models/whisper-1 POST https://api.omnimux.ai/v1/audio/transcriptions Whisper Audio Transcription · model `whisper-1` * Call `POST /v1/audio/transcriptions` with `model` `whisper-1` * Request is `multipart/form-data` with `file` and `model` * Returns transcribed text in JSON, text, or subtitle format ## Identity | Field | Value | | ------ | ------------ | | Series | Audio series | | Brand | Whisper | | model | `whisper-1` | ## Endpoint | Method | Path | | ------ | -------------------------- | | `POST` | `/v1/audio/transcriptions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body (multipart/form-data) | Field | Type | Required | Description | | ----------------- | ------ | -------- | -------------------------------------------------------------------------------------------- | | `file` | binary | yes | Audio file to transcribe (`flac`, `mp3`, `mp4`, `mpeg`, `mpga`, `m4a`, `ogg`, `wav`, `webm`) | | `model` | string | yes | Must be `whisper-1` | | `language` | string | no | ISO-639-1 language code (e.g. `en`, `zh`) | | `prompt` | string | no | Optional text guide for spelling / context | | `response_format` | string | no | `json` (default), `text`, `srt`, `verbose_json`, `vtt` | | `temperature` | number | no | Sampling temperature between 0 and 1 | ## Response ### 200 | Field | Type | Description | | ------ | ------ | ------------------------ | | `text` | string | Transcribed text content | Errors: see right-rail examples. ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/audio/transcriptions \ --header 'Authorization: Bearer ' \ --form file=@audio.mp3 \ --form model="whisper-1" ``` ```json 200 theme={null} { "text": "Welcome to the podcast. Today we discuss AI agent infrastructure..." } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Download and Access File Source: https://docs.omnimux.ai/en/api-reference/file-series/download GET https://api.omnimux.ai/api/v1/files/download/{file_id} GET /api/v1/files/download/{file_id} · Retrieve uploaded file or redirect to CDN URL > * Public access by unique `file_id` (no login required) > * Automatically responds with **302 Redirect** to Cloudflare R2 CDN URL when public domain is configured > * Streams file directly with correct `Content-Type` and `Content-Disposition` in local storage mode > * Returns `404 Not Found` when file has expired past **72 hours** ## Path Parameters | Field | Type | Required | Description | | --------- | ------ | -------- | -------------------------------------------------------------------------- | | `file_id` | string | Yes | Unique file identifier returned upon upload (e.g. `file_8e6d425c0e564bde`) | ## Response * **Active File (200 OK / 302 Found)**: Binary stream of file or 302 redirect to R2 CDN URL. * **Expired or Deleted File (404 Not Found)**: ```json theme={null} { "success": false, "code": 404, "msg": "文件已过期" } ``` # Get File Quota Source: https://docs.omnimux.ai/en/api-reference/file-series/quota GET https://api.omnimux.ai/api/v1/files/quota GET /api/v1/files/quota · Query current user file quota and remaining slots > * Users can store up to **2,000** active files > * Returns current active file count (`used_files`) and available capacity (`remain_files`) > * Auth: `Authorization: Bearer sk-...` ## Response Fields | Field | Type | Description | | -------------- | ------- | --------------------------------------------------- | | `user_group` | string | Current token group (e.g. `default`, `auto`) | | `used_files` | integer | Number of active (unexpired) files currently stored | | `max_files` | integer | Maximum allowed files (default 2,000) | | `remain_files` | integer | Remaining available upload slots | | `is_custom` | boolean | Whether user has custom quota override | | `quota_reason` | string | Optional description for custom quota | ## Response Example ```json theme={null} { "success": true, "code": 200, "data": { "user_group": "default", "used_files": 2, "max_files": 2000, "remain_files": 1998, "is_custom": false, "quota_reason": "" } } ``` # Upload Base64 File Source: https://docs.omnimux.ai/en/api-reference/file-series/upload-base64 POST https://api.omnimux.ai/api/v1/files/upload/base64 POST /api/v1/files/upload/base64 · Upload file encoded in Base64 or Data URL to R2 > * Supports Data URL format (e.g. `data:image/png;base64,...`) and raw Base64 strings > * Automatically detects MIME types for images, audio, video, or documents > * Files automatically expire and are purged after **72 hours** > * Limit of **2,000** active files per user; returns 429 when quota is exhausted > * Auth: `Authorization: Bearer sk-...` ## Request Body | Field | Type | Required | Description | | ------------- | ------ | -------- | ---------------------------------------------------------------------------------- | | `base64_data` | string | Yes | Base64-encoded file data or Data URL string | | `upload_path` | string | No | Custom folder path (e.g. `avatars`, `covers`), auto-categorized by MIME if omitted | | `file_name` | string | No | Custom file name (e.g. `avatar.png`), auto-generated if omitted | ## Response Example ```json theme={null} { "success": true, "code": 200, "msg": "文件上传成功", "data": { "file_id": "file_8e6d425c0e564bde", "file_name": "avatar.png", "original_name": "avatar.png", "file_size": 2048, "mime_type": "image/png", "upload_path": "avatars", "file_url": "https://api.omnimux.ai/api/v1/files/download/file_8e6d425c0e564bde", "download_url": "https://api.omnimux.ai/api/v1/files/download/file_8e6d425c0e564bde", "upload_time": "2026-09-10T23:49:40+08:00", "expires_at": "2026-09-13T23:49:40+08:00" } } ``` # Upload File Stream Source: https://docs.omnimux.ai/en/api-reference/file-series/upload-stream POST https://api.omnimux.ai/api/v1/files/upload/stream POST /api/v1/files/upload/stream · Upload local files via multipart/form-data to R2 > * Upload local files or raw binary data via `multipart/form-data` > * Optimized for large file streams (supports up to **100MB**) > * Files automatically expire and are purged after **72 hours** > * Limit of **2,000** active files per user; returns 429 when quota is exhausted > * Auth: `Authorization: Bearer sk-...` ## Form Fields (multipart/form-data) | Field | Type | Required | Description | | ------------- | ------ | -------- | ---------------------------------------------------- | | `file` | binary | Yes | File binary data stream | | `upload_path` | string | No | Custom folder path (supports camelCase `uploadPath`) | | `file_name` | string | No | Custom file name (supports camelCase `fileName`) | ## Response Example ```json theme={null} { "success": true, "code": 200, "msg": "文件上传成功", "data": { "file_id": "file_349a227eaa054bab", "file_name": "photo.png", "original_name": "photo.png", "file_size": 2048, "mime_type": "image/png", "upload_path": "photos", "file_url": "https://api.omnimux.ai/api/v1/files/download/file_349a227eaa054bab", "download_url": "https://api.omnimux.ai/api/v1/files/download/file_349a227eaa054bab", "upload_time": "2026-09-10T23:49:59+08:00", "expires_at": "2026-09-13T23:49:59+08:00" } } ``` # Upload File via URL Source: https://docs.omnimux.ai/en/api-reference/file-series/upload-url POST https://api.omnimux.ai/api/v1/files/upload/url POST /api/v1/files/upload/url · Upload remote file from public URL to R2 > * Ingests public remote files via HTTP/HTTPS URLs and stores directly into R2 > * Built-in private IP protection and SSRF security defense > * Files automatically expire and are purged after **72 hours** > * Limit of **2,000** active files per user; returns 429 when quota is exhausted > * Auth: `Authorization: Bearer sk-...` ## Request Body | Field | Type | Required | Description | | ------------- | ------ | -------- | ------------------------------------------------------------------- | | `file_url` | string | Yes | Publicly accessible HTTP/HTTPS URL of the remote file | | `upload_path` | string | No | Custom folder path, auto-categorized by MIME if omitted | | `file_name` | string | No | Custom file name, parsed from URL path or auto-generated if omitted | ## Response Example ```json theme={null} { "success": true, "code": 200, "msg": "文件上传成功", "data": { "file_id": "file_c92cffd62415447d", "file_name": "image.jpg", "original_name": "image.jpg", "file_size": 17129, "mime_type": "image/jpeg", "upload_path": "downloads", "file_url": "https://api.omnimux.ai/api/v1/files/download/file_c92cffd62415447d", "download_url": "https://api.omnimux.ai/api/v1/files/download/file_c92cffd62415447d", "upload_time": "2026-09-10T23:50:07+08:00", "expires_at": "2026-09-13T23:50:07+08:00" } } ``` # GPT Image · Image generation Source: https://docs.omnimux.ai/en/api-reference/image-series/gpt-image/generate openapi/ops/image/en/gpt-image.json POST /v1/images/generations Generate images with the GPT Image 2.5 per-call models. Since September 10, 2026, `gpt-image-2` and `gpt-image-2-hd` have been renamed to `gpt-image-2.5` and `gpt-image-2.5-hd`. The old model IDs are no longer accepted. Update the `model` in your requests; these are not compatibility aliases. The base prices for these per-call models are USD 0.0441/call and USD 0.005479/call, respectively; group multipliers may affect the final charge. This rename does not change prices. Read image results when `data` is returned. An `image.generation.task` response means an asynchronous task was submitted, not that an image is ready. The response shape depends on the route; do not treat task acceptance as the final result. Flare and Sunburst are separate token-billed models. They are not part of this per-call contract and are not yet available. ## Reference image limits The reference-image field is `images` (an array of image URLs or base64 strings); `image`, `image_urls` and `input_reference` are accepted aliases and are normalized to `images`. * `gpt-image-2.5`: up to 16 images per request; no minimum (omit `images` for text-to-image); the vendor publishes no accepted-format list or per-file size limit for reference images. * `gpt-image-2.5-hd`: no model spec exists yet, so its reference-image limits are **unverified** and no image count, format or per-file size limit is stated here. * `gpt-image-2.5-flare`: discounted tier image model route; reference image specifications follow baseline. * `gpt-image-2.5-sunburst`: economy tier image model route; reference image specifications follow baseline. The 50 MB figure in the vendor's image guide is scoped to the image being edited together with its mask, not to a single reference image; no per-file ceiling is stated here. ```bash curl theme={null} curl --request POST \ --url https://api.omnimux.ai/v1/images/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model": "gpt-image-2.5", "prompt": "A product photo on a white background", "n": 1}' ``` ```json 200 — illustrative async task theme={null} {"id":"task_example","object":"image.generation.task","model":"gpt-image-2.5-hd","status":"pending","created":0} ``` ```json 402 theme={null} {"error":{"message":"Insufficient quota","type":"insufficient_quota"}} ``` # Grok Imagine Image Generation Source: https://docs.omnimux.ai/en/api-reference/image-series/models/grok-imagine-image POST https://api.omnimux.ai/v1/images/generations Grok Imagine Image Generation · model `grok-imagine-image` * Call `POST /v1/images/generations` with `model` `grok-imagine-image` * Body requires at least `model` and `prompt` * If async, follow `task_id` in the create response and console usage logs ## Identity | Field | Value | | ------ | -------------------- | | Series | Image series | | Brand | Grok Imagine | | model | `grok-imagine-image` | ## Endpoint | Method | Path | | ------ | ------------------------ | | `POST` | `/v1/images/generations` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | --------- | --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `model` | string | yes | Must be `grok-imagine-image` | | `prompt` | string | yes | Image description / edit instruction | | `n` | integer | no | Number of images (gateway-capped) | | `size` | string | no | Size or aspect ratio (model-specific) | | `quality` | string | no | Quality tier (model-specific) | | `images` | string\[] | no | Reference images: image URL or base64. `image`, `image_urls` and `input_reference` are accepted aliases and are normalized to `images` before the upstream call. | ### Reference image limits No model spec exists for this model yet, so its reference-image capability and limits are **unverified**: no image count, accepted formats or per-file size ceiling is stated here. ## Response ### 200 | Field | Type | Description | | ---------------- | ------- | ------------------------------- | | `created` | integer | Creation timestamp when present | | `data` | array | Results (`url` or `b64_json`) | | `task_id` / `id` | string | Async task id when present | Errors: see right-rail examples. Async: use `task_id` from create response / console logs (no separate public image-query page). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/images/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"grok-imagine-image","prompt":"a product photo on white background","n":1}' ``` ```json 200 theme={null} { "id": "chatcmpl-example", "object": "chat.completion", "model": "grok-imagine-image", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "…" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Grok Imagine Image 2.0 Image Generation Source: https://docs.omnimux.ai/en/api-reference/image-series/models/grok-imagine-image-2-0 POST https://api.omnimux.ai/v1/images/generations Grok Imagine Image 2.0 Image Generation · model `grok-imagine-image-2-0` * Call `POST /v1/images/generations` with `model` `grok-imagine-image-2-0` * Body requires at least `model` and `prompt` * If async, follow `task_id` in the create response and console usage logs ## Identity | Field | Value | | ------ | ------------------------ | | Series | Image series | | Brand | Grok Imagine | | model | `grok-imagine-image-2-0` | ## Endpoint | Method | Path | | ------ | ------------------------ | | `POST` | `/v1/images/generations` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | --------- | --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `model` | string | yes | Must be `grok-imagine-image-2-0` | | `prompt` | string | yes | Image description / edit instruction | | `n` | integer | no | Number of images (gateway-capped) | | `size` | string | no | Size or aspect ratio (model-specific) | | `quality` | string | no | Quality tier (model-specific) | | `images` | string\[] | no | Reference images: image URL or base64. `image`, `image_urls` and `input_reference` are accepted aliases and are normalized to `images` before the upstream call. | ### Reference image limits No model spec exists for this model yet, so its reference-image capability and limits are **unverified**: no image count, accepted formats or per-file size ceiling is stated here. ## Response ### 200 | Field | Type | Description | | ---------------- | ------- | ------------------------------- | | `created` | integer | Creation timestamp when present | | `data` | array | Results (`url` or `b64_json`) | | `task_id` / `id` | string | Async task id when present | Errors: see right-rail examples. Async: use `task_id` from create response / console logs (no separate public image-query page). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/images/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"grok-imagine-image-2-0","prompt":"a product photo on white background","n":1}' ``` ```json 200 theme={null} { "id": "chatcmpl-example", "object": "chat.completion", "model": "grok-imagine-image-2-0", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "…" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Grok Imagine Image Quality Generation Source: https://docs.omnimux.ai/en/api-reference/image-series/models/grok-imagine-image-quality POST https://api.omnimux.ai/v1/images/generations Grok Imagine Image Quality Generation · model `grok-imagine-image-quality` * Call `POST /v1/images/generations` with `model` `grok-imagine-image-quality` * Body requires at least `model` and `prompt` * If async, follow `task_id` in the create response and console usage logs ## Identity | Field | Value | | ------ | ---------------------------- | | Series | Image series | | Brand | Grok Imagine | | model | `grok-imagine-image-quality` | ## Endpoint | Method | Path | | ------ | ------------------------ | | `POST` | `/v1/images/generations` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | --------- | --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `model` | string | yes | Must be `grok-imagine-image-quality` | | `prompt` | string | yes | Image description / edit instruction | | `n` | integer | no | Number of images (gateway-capped) | | `size` | string | no | Size or aspect ratio (model-specific) | | `quality` | string | no | Quality tier (model-specific) | | `images` | string\[] | no | Reference images: image URL or base64. `image`, `image_urls` and `input_reference` are accepted aliases and are normalized to `images` before the upstream call. | ### Reference image limits No model spec exists for this model yet, so its reference-image capability and limits are **unverified**: no image count, accepted formats or per-file size ceiling is stated here. ## Response ### 200 | Field | Type | Description | | ---------------- | ------- | ------------------------------- | | `created` | integer | Creation timestamp when present | | `data` | array | Results (`url` or `b64_json`) | | `task_id` / `id` | string | Async task id when present | Errors: see right-rail examples. Async: use `task_id` from create response / console logs (no separate public image-query page). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/images/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"grok-imagine-image-quality","prompt":"a product photo on white background","n":1}' ``` ```json 200 theme={null} { "id": "chatcmpl-example", "object": "chat.completion", "model": "grok-imagine-image-quality", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "…" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Midjourney Image Generation Source: https://docs.omnimux.ai/en/api-reference/image-series/models/midjourney POST https://api.omnimux.ai/v1/images/generations Midjourney Image Generation · model `midjourney` * Call `POST /v1/images/generations` with `model` `midjourney` * Body requires at least `model` and `prompt` * If async, follow `task_id` in the create response and console usage logs ## Identity | Field | Value | | ------ | ------------ | | Series | Image series | | Brand | Midjourney | | model | `midjourney` | ## Endpoint | Method | Path | | ------ | ------------------------ | | `POST` | `/v1/images/generations` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | --------- | --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `model` | string | yes | Must be `midjourney` | | `prompt` | string | yes | Image description / edit instruction | | `n` | integer | no | Number of images (gateway-capped) | | `size` | string | no | Size or aspect ratio (model-specific) | | `quality` | string | no | Quality tier (model-specific) | | `images` | string\[] | no | Reference images: image URL or base64. `image`, `image_urls` and `input_reference` are accepted aliases and are normalized to `images` before the upstream call. | ### Reference image limits | Limit | Value | | ---------------------- | --------------------------------------------------------------------------------------- | | Max images per request | not published by the vendor — the official docs only describe using more than one image | | Min images per request | none | | Accepted formats | `.png`, `.gif`, `.webp`, `.jpg`, `.jpeg` | | Max size per file | not published by the vendor | The Midjourney version is selected inside the prompt (`--v`); the two documented versions `mj-v7` and `mj-v8-1` publish the same reference-image format list. ## Response ### 200 | Field | Type | Description | | ---------------- | ------- | ------------------------------- | | `created` | integer | Creation timestamp when present | | `data` | array | Results (`url` or `b64_json`) | | `task_id` / `id` | string | Async task id when present | Errors: see right-rail examples. Async: use `task_id` from create response / console logs (no separate public image-query page). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/images/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"midjourney","prompt":"a product photo on white background","n":1}' ``` ```json 200 theme={null} { "id": "chatcmpl-example", "object": "chat.completion", "model": "midjourney", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "…" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Nano Banana 2 Image Generation Source: https://docs.omnimux.ai/en/api-reference/image-series/models/nano-banana-2 POST https://api.omnimux.ai/v1/images/generations Nano Banana 2 Image Generation · model `nano-banana-2` * Call `POST /v1/images/generations` with `model` `nano-banana-2` * Body requires at least `model` and `prompt` * If async, follow `task_id` in the create response and console usage logs ## Identity | Field | Value | | ------ | --------------- | | Series | Image series | | Brand | Nano Banana | | model | `nano-banana-2` | ## Endpoint | Method | Path | | ------ | ------------------------ | | `POST` | `/v1/images/generations` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | --------- | --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `model` | string | yes | Must be `nano-banana-2` | | `prompt` | string | yes | Image description / edit instruction | | `n` | integer | no | Number of images (gateway-capped) | | `size` | string | no | Size or aspect ratio (model-specific) | | `quality` | string | no | Quality tier (model-specific) | | `images` | string\[] | no | Reference images: image URL or base64. `image`, `image_urls` and `input_reference` are accepted aliases and are normalized to `images` before the upstream call. | ### Reference image limits | Limit | Value | | ---------------------- | ------------------------------------------------------------------------------ | | Max images per request | 14 | | Min images per request | none — omit `images` for text-to-image | | Accepted formats | `image/png`, `image/jpeg`, `image/webp`, `image/heic`, `image/heif` | | Max size per file | 7 MB for inline (base64) upload; 30 MB when imported from Google Cloud Storage | ## Response ### 200 | Field | Type | Description | | ---------------- | ------- | ------------------------------- | | `created` | integer | Creation timestamp when present | | `data` | array | Results (`url` or `b64_json`) | | `task_id` / `id` | string | Async task id when present | Errors: see right-rail examples. Async: use `task_id` from create response / console logs (no separate public image-query page). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/images/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"nano-banana-2","prompt":"a product photo on white background","n":1}' ``` ```json 200 theme={null} { "id": "chatcmpl-example", "object": "chat.completion", "model": "nano-banana-2", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "…" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Nano Banana Pro Image Generation Source: https://docs.omnimux.ai/en/api-reference/image-series/models/nano-banana-pro POST https://api.omnimux.ai/v1/images/generations Nano Banana Pro Image Generation · model `nano-banana-pro` * Call `POST /v1/images/generations` with `model` `nano-banana-pro` * Body requires at least `model` and `prompt` * If async, follow `task_id` in the create response and console usage logs ## Identity | Field | Value | | ------ | ----------------- | | Series | Image series | | Brand | Nano Banana | | model | `nano-banana-pro` | ## Endpoint | Method | Path | | ------ | ------------------------ | | `POST` | `/v1/images/generations` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | --------- | --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `model` | string | yes | Must be `nano-banana-pro` | | `prompt` | string | yes | Image description / edit instruction | | `n` | integer | no | Number of images (gateway-capped) | | `size` | string | no | Size or aspect ratio (model-specific) | | `quality` | string | no | Quality tier (model-specific) | | `images` | string\[] | no | Reference images: image URL or base64. `image`, `image_urls` and `input_reference` are accepted aliases and are normalized to `images` before the upstream call. | ### Reference image limits | Limit | Value | | ---------------------- | ------------------------------------------------------------------------------ | | Max images per request | 14 | | Min images per request | none — omit `images` for text-to-image | | Accepted formats | `image/png`, `image/jpeg`, `image/webp`, `image/heic`, `image/heif` | | Max size per file | 7 MB for inline (base64) upload; 30 MB when imported from Google Cloud Storage | ## Response ### 200 | Field | Type | Description | | ---------------- | ------- | ------------------------------- | | `created` | integer | Creation timestamp when present | | `data` | array | Results (`url` or `b64_json`) | | `task_id` / `id` | string | Async task id when present | Errors: see right-rail examples. Async: use `task_id` from create response / console logs (no separate public image-query page). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/images/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"nano-banana-pro","prompt":"a product photo on white background","n":1}' ``` ```json 200 theme={null} { "id": "chatcmpl-example", "object": "chat.completion", "model": "nano-banana-pro", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "…" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Qwen Image 3.0 Image Generation Source: https://docs.omnimux.ai/en/api-reference/image-series/models/qwen-image-3-0 POST https://api.omnimux.ai/v1/images/generations Qwen Image 3.0 Image Generation · model `qwen-image-3-0` * Call `POST /v1/images/generations` with `model` `qwen-image-3-0` * Body requires at least `model` and `prompt` * If async, follow `task_id` in the create response and console usage logs ## Identity | Field | Value | | ------ | ---------------- | | Series | Image series | | Brand | Qwen Image | | model | `qwen-image-3-0` | ## Endpoint | Method | Path | | ------ | ------------------------ | | `POST` | `/v1/images/generations` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | --------- | --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `model` | string | yes | Must be `qwen-image-3-0` | | `prompt` | string | yes | Image description / edit instruction | | `n` | integer | no | Number of images (gateway-capped) | | `size` | string | no | Size or aspect ratio (model-specific) | | `quality` | string | no | Quality tier (model-specific) | | `images` | string\[] | no | Reference images: image URL or base64. `image`, `image_urls` and `input_reference` are accepted aliases and are normalized to `images` before the upstream call. | ### Reference image limits | Limit | Value | | ---------------------- | -------------------------------------------------------- | | Max images per request | 3 | | Min images per request | 1 when `images` is sent; omit `images` for text-to-image | | Accepted formats | JPG, JPEG, PNG, BMP, TIFF, WEBP, GIF | | Max size per file | 10 MB | ## Response ### 200 | Field | Type | Description | | ---------------- | ------- | ------------------------------- | | `created` | integer | Creation timestamp when present | | `data` | array | Results (`url` or `b64_json`) | | `task_id` / `id` | string | Async task id when present | Errors: see right-rail examples. Async: use `task_id` from create response / console logs (no separate public image-query page). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/images/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"qwen-image-3-0","prompt":"a product photo on white background","n":1}' ``` ```json 200 theme={null} { "id": "chatcmpl-example", "object": "chat.completion", "model": "qwen-image-3-0", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "…" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Seedream 5.0 Pro Image Generation Source: https://docs.omnimux.ai/en/api-reference/image-series/models/seedream-5-0-pro POST https://api.omnimux.ai/v1/images/generations Seedream 5.0 Pro Image Generation · model `seedream-5-0-pro` * Call `POST /v1/images/generations` with `model` `seedream-5-0-pro` * Body requires at least `model` and `prompt` * If async, follow `task_id` in the create response and console usage logs ## Identity | Field | Value | | ------ | ------------------ | | Series | Image series | | Brand | Seedream | | model | `seedream-5-0-pro` | ## Endpoint | Method | Path | | ------ | ------------------------ | | `POST` | `/v1/images/generations` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | --------- | --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `model` | string | yes | Must be `seedream-5-0-pro` | | `prompt` | string | yes | Image description / edit instruction | | `n` | integer | no | Number of images (gateway-capped) | | `size` | string | no | Size or aspect ratio (model-specific) | | `quality` | string | no | Quality tier (model-specific) | | `images` | string\[] | no | Reference images: image URL or base64. `image`, `image_urls` and `input_reference` are accepted aliases and are normalized to `images` before the upstream call. | ### Reference image limits | Limit | Value | | ---------------------- | ---------------------------------------------------------------------------------- | | Max images per request | 10 | | Min images per request | 2 for multi-image input, 1 for single-image input; omit `images` for text-to-image | | Accepted formats | not published by the vendor | | Max size per file | not published by the vendor | ## Response ### 200 | Field | Type | Description | | ---------------- | ------- | ------------------------------- | | `created` | integer | Creation timestamp when present | | `data` | array | Results (`url` or `b64_json`) | | `task_id` / `id` | string | Async task id when present | Errors: see right-rail examples. Async: use `task_id` from create response / console logs (no separate public image-query page). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/images/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"seedream-5-0-pro","prompt":"a product photo on white background","n":1}' ``` ```json 200 theme={null} { "id": "chatcmpl-example", "object": "chat.completion", "model": "seedream-5-0-pro", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "…" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Z Image Generation Source: https://docs.omnimux.ai/en/api-reference/image-series/models/zimage-makeup POST https://api.omnimux.ai/v1/video/generations Z Image generation · model `zimage-makeup` (GxgenAI task) * Create: `POST /v1/video/generations` with `model` `zimage-makeup` * Poll: `GET /v1/video/generations/{task_id}` (do **not** use `*-async` / `*-query` model names) * Media tasks are async by default; public model IDs do **not** use an `-async` suffix ## Identity | Field | Value | | ------ | ----------------- | | Series | Image | | Brand | Z Image / GxgenAI | | model | `zimage-makeup` | ## API | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Auth | Name | In | Type | Required | Notes | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Request body | Field | Type | Required | Notes | | ----------------------- | --------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | `model` | string | yes | Must be `zimage-makeup` | | `prompt` | string | yes | Image description | | `metadata.nodeInfoList` | array | no | Custom nodes when needed; prompt-only works for defaults | | `images` | string\[] | no | **Not used by this surface.** Reference images are not taken from a top-level field: the App route only accepts nodes inside `metadata.nodeInfoList`. | ### Reference image limits No model spec exists for this model yet, so its reference-image capability and limits are **unverified**: no image count, accepted formats or per-file size ceiling is stated here. ## Response ### 200 (create) | Field | Type | Notes | | ---------------- | ------ | ----------------------------- | | `id` / `task_id` | string | Task id | | `status` | string | e.g. `queued` / `in_progress` | Poll until complete, then download result URLs promptly (upstream links may expire). ```bash cURL theme={null} curl --request POST \ --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "zimage-makeup", "prompt": "a classical portrait photo, realistic makeup look" }' ``` ```json 200 theme={null} { "id": "task_xxx", "status": "in_progress", "model": "zimage-makeup" } ``` ```json 402 theme={null} { "error": { "message": "insufficient quota", "type": "new_api_error" } } ``` # Create Post Source: https://docs.omnimux.ai/en/api-reference/publishing/create-post openapi/ops/publishing/create-post.json POST /api/social/v1/posts Create Post — explicit account source All target accounts must match the requested source. Idempotency replay also validates the stored source and account set; source or set conflicts return 409. Media presign still depends on Zernio and is not an official-only upload path. `provider` is required: `tiktok_direct` or `zernio`. It constrains the operation and never rewrites the stored source. Missing or unknown values return 400 `invalid-provider`. Use an OmniMux user access token and `New-Api-User`, not an `sk-` key. Inspect `success` as well as HTTP status; some upstream failures return HTTP 200 with `success:false`. # Disconnect Account Source: https://docs.omnimux.ai/en/api-reference/publishing/disconnect openapi/ops/publishing/disconnect.json DELETE /api/social/v1/accounts/{id} Disconnect Account — explicit account source Ownership and stored provider are checked before upstream deletion. Cross-source requests return 409 without deleting the account. Existing seat, official token-revocation and Zernio failure policies remain unchanged; do not treat an upstream 402 message as a successful disconnect. `provider` is required: `tiktok_direct` or `zernio`. It constrains the operation and never rewrites the stored source. Missing or unknown values return 400 `invalid-provider`. Use an OmniMux user access token and `New-Api-User`, not an `sk-` key. Inspect `success` as well as HTTP status; some upstream failures return HTTP 200 with `success:false`. # Get Post Source: https://docs.omnimux.ai/en/api-reference/publishing/get-post openapi/ops/publishing/get-post.json GET /api/social/v1/posts/{id} Get Post — explicit account source Checks the stored post provider even when refresh=0. Cross-source tasks return 409 and are not returned or refreshed. Status is the gateway's stored or refreshed value, not a guarantee of publication. `provider` is required: `tiktok_direct` or `zernio`. It constrains the operation and never rewrites the stored source. Missing or unknown values return 400 `invalid-provider`. Use an OmniMux user access token and `New-Api-User`, not an `sk-` key. Inspect `success` as well as HTTP status; some upstream failures return HTTP 200 with `success:false`. # List Accounts Source: https://docs.omnimux.ai/en/api-reference/publishing/list-accounts openapi/ops/publishing/list-accounts.json GET /api/social/v1/accounts List Accounts — explicit account source Only returns the selected source. The official list does not create a Zernio tenant or run a Zernio sync. An empty array means success with no accounts; failed responses are not empty lists. `provider` is required: `tiktok_direct` or `zernio`. It constrains the operation and never rewrites the stored source. Missing or unknown values return 400 `invalid-provider`. Use an OmniMux user access token and `New-Api-User`, not an `sk-` key. Inspect `success` as well as HTTP status; some upstream failures return HTTP 200 with `success:false`. CLI 0.4.0: run `omnimux update` (binary) or `npm install -g @omnimux/cli@0.4.0` (npm), then use `omnimux social accounts --provider zernio` or `--provider tiktok_direct`. Update saved scripts as well. See [API Updates](/en/updates#2026-09-07-social-provider-required). # Media Presign Source: https://docs.omnimux.ai/en/api-reference/publishing/presign POST https://omnimux.ai/api/social/v1/media/presign Media presign * Social **publishing** user API (not `sk-` social-data read) * Base: `https://omnimux.ai`; auth access token + `New-Api-User` * Connecting Accounts naming matches Zernio ## Identity | Field | Value | | ---------- | ---------- | | Series | Publishing | | Capability | Presign | ## Endpoint | Method | Path | | ------ | ------------------------------ | | `POST` | `/api/social/v1/media/presign` | Base URL: `https://omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ----------------------- | | `Authorization` | header | string | yes | `Bearer ` | | `New-Api-User` | header | string | yes | Current user id | ## Body / parameters Follow the right-rail cURL. Fields differ by resource (connect / posts / media). ## Response ### 200 | Field | Type | Description | | --------- | ------- | ------------ | | `success` | boolean | Success flag | | `data` | object | Payload | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash cURL theme={null} curl --request POST \ --url https://omnimux.ai/api/social/v1/media/presign \ --header 'Authorization: Bearer ' \ --header 'New-Api-User: ' \ --header 'Content-Type: application/json' \ --data '{"filename":"a.png","contentType":"image/png"}' ``` ```json 200 theme={null} {"success":true,"data":{"upload_url":"https://...","public_url":"https://..."}} ``` ```json 401 theme={null} { "success": false, "message": "Unauthorized" } ``` ```json 402 theme={null} { "success": false, "message": "Insufficient quota. Please top up your account." } ``` ```json 403 theme={null} { "success": false, "message": "Forbidden" } ``` ```json 404 theme={null} { "success": false, "message": "Not found" } ``` ```json 429 theme={null} { "success": false, "message": "Rate limit exceeded" } ``` ```json 500 theme={null} { "success": false, "message": "Internal server error" } ``` # Start Connection Source: https://docs.omnimux.ai/en/api-reference/publishing/start-connect openapi/ops/publishing/start-connect.json POST /api/social/v1/connect Start Connection — explicit account source Choose the source explicitly. tiktok\_direct only authorizes TikTok and fails when official configuration is unavailable; it never falls back. zernio remains Zernio even when official TikTok is enabled. Calling this endpoint starts an authorization flow. `provider` is required: `tiktok_direct` or `zernio`. It constrains the operation and never rewrites the stored source. Missing or unknown values return 400 `invalid-provider`. Use an OmniMux user access token and `New-Api-User`, not an `sk-` key. Inspect `success` as well as HTTP status; some upstream failures return HTTP 200 with `success:false`. # Upload Media Source: https://docs.omnimux.ai/en/api-reference/publishing/upload PUT https://omnimux.ai/api/social/v1/media/upload Upload media | Field | Value | | ---------- | ----------------- | | Capability | Upload file | | Method | `PUT` | | Path | `{presigned_url}` | Base: `https://omnimux.ai` · Auth: access token + `New-Api-User`. # Jina Reader Web Extractor Source: https://docs.omnimux.ai/en/api-reference/reader-series/models/jina-reader-v1 POST https://api.omnimux.ai/v1/reader Jina Reader URL to LLM-friendly Markdown/JSON · model `jina-reader-v1` * Dedicated endpoint: `POST /v1/reader` with `model` `jina-reader-v1` * Auth: Gateway Bearer (`Authorization: Bearer sk-...`) * Transforms any public URL into clean Markdown or JSON for LLM prompts * Output-token billing: charged based on actual rendered markdown/JSON tokens ## Identity | Field | Value | | ------ | ---------------- | | Series | Reader series | | Brand | Jina Reader | | model | `jina-reader-v1` | ## Endpoint | Method | Path | | ------ | ------------ | | `POST` | `/v1/reader` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ----------------------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (OmniMux Gateway API key) | ## Body | Field | Type | Required | Description | | --------------------- | ------- | -------- | ---------------------------------------------------------------- | | `model` | string | **yes** | Must be `jina-reader-v1` | | `url` | string | **yes** | Target webpage URL (http\:// or https\://) | | `return_format` | string | no | Response format: `markdown` (default) or `json` | | `remove_selector` | string | no | CSS selectors to remove (e.g. `header, footer, .ads`) | | `target_selector` | string | no | CSS selector to focus extraction on (e.g. `article`, `#content`) | | `wait_for_selector` | string | no | Wait for dynamic DOM element before reading | | `timeout` | string | no | Upstream page load timeout in seconds | | `retain_images` | string | no | Set to `none` to strip all image elements | | `with_links_summary` | boolean | no | Append a structured summary of all page links | | `with_images_summary` | boolean | no | Append a structured summary of all page images | | `with_generated_alt` | boolean | no | Automatically generate alt text descriptions for images | | `no_cache` | boolean | no | Bypass upstream cache and force fresh scrape | | `respond_with` | string | no | Alternative engine (e.g. `readerlm-v2`) | ## Response ### 200 (Markdown default) Returns clean text markdown content of the webpage directly. ### 200 (JSON format) | Field | Type | Description | | ------------------- | ------- | ------------------------------- | | `code` | integer | Status code (200) | | `status` | integer | HTTP status | | `data` | object | Extracted content object | | `data.title` | string | Extracted page title | | `data.description` | string | Page meta description | | `data.url` | string | Final canonical page URL | | `data.content` | string | Page content in markdown format | | `data.usage.tokens` | integer | Total output tokens generated | Errors: [Error codes](/en/faqs/connection-usage). ```bash cURL (Markdown) theme={null} curl --request POST \ --url https://api.omnimux.ai/v1/reader \ --header 'Authorization: Bearer sk-your-key' \ --header 'Content-Type: application/json' \ --data '{ "model": "jina-reader-v1", "url": "https://example.com/article", "return_format": "markdown" }' ``` ```bash cURL (JSON with selectors) theme={null} curl --request POST \ --url https://api.omnimux.ai/v1/reader \ --header 'Authorization: Bearer sk-your-key' \ --header 'Content-Type: application/json' \ --data '{ "model": "jina-reader-v1", "url": "https://example.com/article", "return_format": "json", "target_selector": "article.main-content", "remove_selector": ".ad-banner, .comments", "with_links_summary": true }' ``` ```markdown 200 (Markdown) theme={null} Title: Example Article Title URL Source: https://example.com/article Published Time: 2026-08-20T10:00:00Z Markdown Content: # Example Article Title Here is the clean extracted text content of the target webpage... ``` ```json 200 (JSON) theme={null} { "code": 200, "status": 20000, "data": { "title": "Example Article Title", "description": "Article summary meta description", "url": "https://example.com/article", "content": "# Example Article Title\n\nExtracted content...", "usage": { "tokens": 850 } } } ``` ```json 400 theme={null} { "error": { "message": "url is required", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid API key", "type": "authentication_error", "code": "invalid_api_key" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` # Post Detail Source: https://docs.omnimux.ai/en/api-reference/social-data/instagram/post-detail POST https://api.omnimux.ai/v1/chat/completions Social data · `instagram-post` * Social **data read** via OpenAI Chat Completions shape; auth `sk-` * `model` is `instagram-post`; `messages` may be a dummy (e.g. `"."`) * Business params are **top-level** body fields (e.g. `url`) * Not publishing (see Connecting Accounts / Posts) ## Identity | Field | Value | | ---------- | ---------------- | | Series | Social data | | Platform | Instagram | | Capability | Post detail | | model | `instagram-post` | ## Endpoint | Method | Path | | ------ | ---------------------- | | `POST` | `/v1/chat/completions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------- | ------ | -------- | ----------------------------------------------------------------- | | `model` | string | yes | Must be `instagram-post` | | `messages` | array | yes | Dummy user message allowed | | `url` | string | yes | Required business field for this capability (see request example) | ## Response ### 200 | Field | Type | Description | | --------------------------- | ------ | ---------------------------------------------------------- | | `id` | string | Completion id | | `object` | string | `chat.completion` | | `model` | string | `instagram-post` | | `choices[].message.content` | string | Upstream platform JSON string (shape varies by capability) | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/chat/completions \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "instagram-post", "messages": [{ "role": "user", "content": "." }], "url": "https://www.instagram.com/p/EXAMPLE/" }' ``` ```json 200 theme={null} { "id": "chatcmpl-social-data-example", "object": "chat.completion", "model": "instagram-post", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{ /* upstream platform JSON; shape varies by capability */ }" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request: missing required business field or invalid parameter", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token or authentication failed", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Model not allowed for this token", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` ```json 502 theme={null} { "error": { "message": "Upstream provider error", "type": "server_error", "code": "bad_gateway" } } ``` # Search Source: https://docs.omnimux.ai/en/api-reference/social-data/instagram/search POST https://api.omnimux.ai/v1/chat/completions Social data · `instagram-search` * Social **data read** via OpenAI Chat Completions shape; auth `sk-` * `model` is `instagram-search`; `messages` may be a dummy (e.g. `"."`) * Business params are **top-level** body fields (e.g. `query`) * Not publishing (see Connecting Accounts / Posts) ## Identity | Field | Value | | ---------- | ------------------ | | Series | Social data | | Platform | Instagram | | Capability | Search | | model | `instagram-search` | ## Endpoint | Method | Path | | ------ | ---------------------- | | `POST` | `/v1/chat/completions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------- | ------ | -------- | ----------------------------------------------------------------- | | `model` | string | yes | Must be `instagram-search` | | `messages` | array | yes | Dummy user message allowed | | `query` | string | yes | Required business field for this capability (see request example) | ## Response ### 200 | Field | Type | Description | | --------------------------- | ------ | ---------------------------------------------------------- | | `id` | string | Completion id | | `object` | string | `chat.completion` | | `model` | string | `instagram-search` | | `choices[].message.content` | string | Upstream platform JSON string (shape varies by capability) | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/chat/completions \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "instagram-search", "messages": [{ "role": "user", "content": "." }], "query": "openai" }' ``` ```json 200 theme={null} { "id": "chatcmpl-social-data-example", "object": "chat.completion", "model": "instagram-search", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{ /* upstream platform JSON; shape varies by capability */ }" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request: missing required business field or invalid parameter", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token or authentication failed", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Model not allowed for this token", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` ```json 502 theme={null} { "error": { "message": "Upstream provider error", "type": "server_error", "code": "bad_gateway" } } ``` # User Posts Source: https://docs.omnimux.ai/en/api-reference/social-data/instagram/user-posts POST https://api.omnimux.ai/v1/chat/completions Social data · `instagram-posts` * Social **data read** via OpenAI Chat Completions shape; auth `sk-` * `model` is `instagram-posts`; `messages` may be a dummy (e.g. `"."`) * Business params are **top-level** body fields (e.g. `username`) * Not publishing (see Connecting Accounts / Posts) ## Identity | Field | Value | | ---------- | ----------------- | | Series | Social data | | Platform | Instagram | | Capability | User posts | | model | `instagram-posts` | ## Endpoint | Method | Path | | ------ | ---------------------- | | `POST` | `/v1/chat/completions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------- | ------ | -------- | ----------------------------------------------------------------- | | `model` | string | yes | Must be `instagram-posts` | | `messages` | array | yes | Dummy user message allowed | | `username` | string | yes | Required business field for this capability (see request example) | ## Response ### 200 | Field | Type | Description | | --------------------------- | ------ | ---------------------------------------------------------- | | `id` | string | Completion id | | `object` | string | `chat.completion` | | `model` | string | `instagram-posts` | | `choices[].message.content` | string | Upstream platform JSON string (shape varies by capability) | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/chat/completions \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "instagram-posts", "messages": [{ "role": "user", "content": "." }], "username": "instagram" }' ``` ```json 200 theme={null} { "id": "chatcmpl-social-data-example", "object": "chat.completion", "model": "instagram-posts", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{ /* upstream platform JSON; shape varies by capability */ }" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request: missing required business field or invalid parameter", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token or authentication failed", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Model not allowed for this token", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` ```json 502 theme={null} { "error": { "message": "Upstream provider error", "type": "server_error", "code": "bad_gateway" } } ``` # User Profile Source: https://docs.omnimux.ai/en/api-reference/social-data/instagram/user-profile POST https://api.omnimux.ai/v1/chat/completions Social data · `instagram-user` * Social **data read** via OpenAI Chat Completions shape; auth `sk-` * `model` is `instagram-user`; `messages` may be a dummy (e.g. `"."`) * Business params are **top-level** body fields (e.g. `username`) * Not publishing (see Connecting Accounts / Posts) ## Identity | Field | Value | | ---------- | ---------------- | | Series | Social data | | Platform | Instagram | | Capability | User profile | | model | `instagram-user` | ## Endpoint | Method | Path | | ------ | ---------------------- | | `POST` | `/v1/chat/completions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------- | ------ | -------- | ----------------------------------------------------------------- | | `model` | string | yes | Must be `instagram-user` | | `messages` | array | yes | Dummy user message allowed | | `username` | string | yes | Required business field for this capability (see request example) | ## Response ### 200 | Field | Type | Description | | --------------------------- | ------ | ---------------------------------------------------------- | | `id` | string | Completion id | | `object` | string | `chat.completion` | | `model` | string | `instagram-user` | | `choices[].message.content` | string | Upstream platform JSON string (shape varies by capability) | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/chat/completions \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "instagram-user", "messages": [{ "role": "user", "content": "." }], "username": "instagram" }' ``` ```json 200 theme={null} { "id": "chatcmpl-social-data-example", "object": "chat.completion", "model": "instagram-user", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{ /* upstream platform JSON; shape varies by capability */ }" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request: missing required business field or invalid parameter", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token or authentication failed", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Model not allowed for this token", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` ```json 502 theme={null} { "error": { "message": "Upstream provider error", "type": "server_error", "code": "bad_gateway" } } ``` # Video Detail Source: https://docs.omnimux.ai/en/api-reference/social-data/tiktok/post-detail POST https://api.omnimux.ai/v1/chat/completions Social data · `tiktok-video` * Social **data read** via OpenAI Chat Completions shape; auth `sk-` * `model` is `tiktok-video`; `messages` may be a dummy (e.g. `"."`) * Business params are **top-level** body fields (e.g. `aweme_id`) * Not publishing (see Connecting Accounts / Posts) ## Identity | Field | Value | | ---------- | -------------- | | Series | Social data | | Platform | TikTok | | Capability | Video detail | | model | `tiktok-video` | ## Endpoint | Method | Path | | ------ | ---------------------- | | `POST` | `/v1/chat/completions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------- | ------ | -------- | ----------------------------------------------------------------- | | `model` | string | yes | Must be `tiktok-video` | | `messages` | array | yes | Dummy user message allowed | | `aweme_id` | string | yes | Required business field for this capability (see request example) | ## Response ### 200 | Field | Type | Description | | --------------------------- | ------ | ---------------------------------------------------------- | | `id` | string | Completion id | | `object` | string | `chat.completion` | | `model` | string | `tiktok-video` | | `choices[].message.content` | string | Upstream platform JSON string (shape varies by capability) | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/chat/completions \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "tiktok-video", "messages": [{ "role": "user", "content": "." }], "aweme_id": "7123456789012345678" }' ``` ```json 200 theme={null} { "id": "chatcmpl-social-data-example", "object": "chat.completion", "model": "tiktok-video", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{ /* upstream platform JSON; shape varies by capability */ }" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request: missing required business field or invalid parameter", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token or authentication failed", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Model not allowed for this token", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` ```json 502 theme={null} { "error": { "message": "Upstream provider error", "type": "server_error", "code": "bad_gateway" } } ``` # User Posts Source: https://docs.omnimux.ai/en/api-reference/social-data/tiktok/user-posts POST https://api.omnimux.ai/v1/chat/completions Social data · `tiktok-posts` * Social **data read** via OpenAI Chat Completions shape; auth `sk-` * `model` is `tiktok-posts`; `messages` may be a dummy (e.g. `"."`) * Business params are **top-level** body fields (e.g. `unique_id`) * Not publishing (see Connecting Accounts / Posts) ## Identity | Field | Value | | ---------- | -------------- | | Series | Social data | | Platform | TikTok | | Capability | User posts | | model | `tiktok-posts` | ## Endpoint | Method | Path | | ------ | ---------------------- | | `POST` | `/v1/chat/completions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ----------- | ------ | -------- | ----------------------------------------------------------------- | | `model` | string | yes | Must be `tiktok-posts` | | `messages` | array | yes | Dummy user message allowed | | `unique_id` | string | yes | Required business field for this capability (see request example) | ## Response ### 200 | Field | Type | Description | | --------------------------- | ------ | ---------------------------------------------------------- | | `id` | string | Completion id | | `object` | string | `chat.completion` | | `model` | string | `tiktok-posts` | | `choices[].message.content` | string | Upstream platform JSON string (shape varies by capability) | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/chat/completions \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "tiktok-posts", "messages": [{ "role": "user", "content": "." }], "unique_id": "tiktok" }' ``` ```json 200 theme={null} { "id": "chatcmpl-social-data-example", "object": "chat.completion", "model": "tiktok-posts", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{ /* upstream platform JSON; shape varies by capability */ }" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request: missing required business field or invalid parameter", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token or authentication failed", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Model not allowed for this token", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` ```json 502 theme={null} { "error": { "message": "Upstream provider error", "type": "server_error", "code": "bad_gateway" } } ``` # User Profile Source: https://docs.omnimux.ai/en/api-reference/social-data/tiktok/user-profile POST https://api.omnimux.ai/v1/chat/completions Social data · `tiktok-user` * Social **data read** via OpenAI Chat Completions shape; auth `sk-` * `model` is `tiktok-user`; `messages` may be a dummy (e.g. `"."`) * Business params are **top-level** body fields (e.g. `uniqueId`) * Not publishing (see Connecting Accounts / Posts) ## Identity | Field | Value | | ---------- | ------------- | | Series | Social data | | Platform | TikTok | | Capability | User profile | | model | `tiktok-user` | ## Endpoint | Method | Path | | ------ | ---------------------- | | `POST` | `/v1/chat/completions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------- | ------ | -------- | ----------------------------------------------------------------- | | `model` | string | yes | Must be `tiktok-user` | | `messages` | array | yes | Dummy user message allowed | | `uniqueId` | string | yes | Required business field for this capability (see request example) | ## Response ### 200 | Field | Type | Description | | --------------------------- | ------ | ---------------------------------------------------------- | | `id` | string | Completion id | | `object` | string | `chat.completion` | | `model` | string | `tiktok-user` | | `choices[].message.content` | string | Upstream platform JSON string (shape varies by capability) | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/chat/completions \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "tiktok-user", "messages": [{ "role": "user", "content": "." }], "uniqueId": "tiktok" }' ``` ```json 200 theme={null} { "id": "chatcmpl-social-data-example", "object": "chat.completion", "model": "tiktok-user", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{ /* upstream platform JSON; shape varies by capability */ }" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request: missing required business field or invalid parameter", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token or authentication failed", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Model not allowed for this token", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` ```json 502 theme={null} { "error": { "message": "Upstream provider error", "type": "server_error", "code": "bad_gateway" } } ``` # Video Search Source: https://docs.omnimux.ai/en/api-reference/social-data/tiktok/video-search POST https://api.omnimux.ai/v1/chat/completions Social data · `tiktok-search` * Social **data read** via OpenAI Chat Completions shape; auth `sk-` * `model` is `tiktok-search`; `messages` may be a dummy (e.g. `"."`) * Business params are **top-level** body fields (e.g. `keyword`) * Not publishing (see Connecting Accounts / Posts) ## Identity | Field | Value | | ---------- | --------------- | | Series | Social data | | Platform | TikTok | | Capability | Video search | | model | `tiktok-search` | ## Endpoint | Method | Path | | ------ | ---------------------- | | `POST` | `/v1/chat/completions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------- | ------ | -------- | ----------------------------------------------------------------- | | `model` | string | yes | Must be `tiktok-search` | | `messages` | array | yes | Dummy user message allowed | | `keyword` | string | yes | Required business field for this capability (see request example) | ## Response ### 200 | Field | Type | Description | | --------------------------- | ------ | ---------------------------------------------------------- | | `id` | string | Completion id | | `object` | string | `chat.completion` | | `model` | string | `tiktok-search` | | `choices[].message.content` | string | Upstream platform JSON string (shape varies by capability) | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/chat/completions \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "tiktok-search", "messages": [{ "role": "user", "content": "." }], "keyword": "openai" }' ``` ```json 200 theme={null} { "id": "chatcmpl-social-data-example", "object": "chat.completion", "model": "tiktok-search", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{ /* upstream platform JSON; shape varies by capability */ }" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request: missing required business field or invalid parameter", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token or authentication failed", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Model not allowed for this token", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` ```json 502 theme={null} { "error": { "message": "Upstream provider error", "type": "server_error", "code": "bad_gateway" } } ``` # Timeline Search Source: https://docs.omnimux.ai/en/api-reference/social-data/x/timeline-search POST https://api.omnimux.ai/v1/chat/completions Social data · `x-search` * Social **data read** via OpenAI Chat Completions shape; auth `sk-` * `model` is `x-search`; `messages` may be a dummy (e.g. `"."`) * Business params are **top-level** body fields (e.g. `keyword`) * Not publishing (see Connecting Accounts / Posts) ## Identity | Field | Value | | ---------- | --------------- | | Series | Social data | | Platform | X | | Capability | Timeline search | | model | `x-search` | ## Endpoint | Method | Path | | ------ | ---------------------- | | `POST` | `/v1/chat/completions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------- | ------ | -------- | ----------------------------------------------------------------- | | `model` | string | yes | Must be `x-search` | | `messages` | array | yes | Dummy user message allowed | | `keyword` | string | yes | Required business field for this capability (see request example) | ## Response ### 200 | Field | Type | Description | | --------------------------- | ------ | ---------------------------------------------------------- | | `id` | string | Completion id | | `object` | string | `chat.completion` | | `model` | string | `x-search` | | `choices[].message.content` | string | Upstream platform JSON string (shape varies by capability) | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/chat/completions \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "x-search", "messages": [{ "role": "user", "content": "." }], "keyword": "openai" }' ``` ```json 200 theme={null} { "id": "chatcmpl-social-data-example", "object": "chat.completion", "model": "x-search", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{ /* upstream platform JSON; shape varies by capability */ }" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request: missing required business field or invalid parameter", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token or authentication failed", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Model not allowed for this token", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` ```json 502 theme={null} { "error": { "message": "Upstream provider error", "type": "server_error", "code": "bad_gateway" } } ``` # Tweet Detail Source: https://docs.omnimux.ai/en/api-reference/social-data/x/tweet-detail POST https://api.omnimux.ai/v1/chat/completions Social data · `x-tweet` * Social **data read** via OpenAI Chat Completions shape; auth `sk-` * `model` is `x-tweet`; `messages` may be a dummy (e.g. `"."`) * Business params are **top-level** body fields (e.g. `tweet_id`) * Not publishing (see Connecting Accounts / Posts) ## Identity | Field | Value | | ---------- | ------------ | | Series | Social data | | Platform | X | | Capability | Tweet detail | | model | `x-tweet` | ## Endpoint | Method | Path | | ------ | ---------------------- | | `POST` | `/v1/chat/completions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------- | ------ | -------- | ----------------------------------------------------------------- | | `model` | string | yes | Must be `x-tweet` | | `messages` | array | yes | Dummy user message allowed | | `tweet_id` | string | yes | Required business field for this capability (see request example) | ## Response ### 200 | Field | Type | Description | | --------------------------- | ------ | ---------------------------------------------------------- | | `id` | string | Completion id | | `object` | string | `chat.completion` | | `model` | string | `x-tweet` | | `choices[].message.content` | string | Upstream platform JSON string (shape varies by capability) | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/chat/completions \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "x-tweet", "messages": [{ "role": "user", "content": "." }], "tweet_id": "2081809802515136887" }' ``` ```json 200 theme={null} { "id": "chatcmpl-social-data-example", "object": "chat.completion", "model": "x-tweet", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{ /* upstream platform JSON; shape varies by capability */ }" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request: missing required business field or invalid parameter", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token or authentication failed", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Model not allowed for this token", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` ```json 502 theme={null} { "error": { "message": "Upstream provider error", "type": "server_error", "code": "bad_gateway" } } ``` # User Profile Source: https://docs.omnimux.ai/en/api-reference/social-data/x/user-profile POST https://api.omnimux.ai/v1/chat/completions Social data · `x-user` * Social **data read** via OpenAI Chat Completions shape; auth `sk-` * `model` is `x-user`; `messages` may be a dummy (e.g. `"."`) * Business params are **top-level** body fields (e.g. `screen_name`) * Not publishing (see Connecting Accounts / Posts) ## Identity | Field | Value | | ---------- | ------------ | | Series | Social data | | Platform | X | | Capability | User profile | | model | `x-user` | ## Endpoint | Method | Path | | ------ | ---------------------- | | `POST` | `/v1/chat/completions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ------------- | ------ | -------- | ----------------------------------------------------------------- | | `model` | string | yes | Must be `x-user` | | `messages` | array | yes | Dummy user message allowed | | `screen_name` | string | yes | Required business field for this capability (see request example) | ## Response ### 200 | Field | Type | Description | | --------------------------- | ------ | ---------------------------------------------------------- | | `id` | string | Completion id | | `object` | string | `chat.completion` | | `model` | string | `x-user` | | `choices[].message.content` | string | Upstream platform JSON string (shape varies by capability) | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/chat/completions \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "x-user", "messages": [{ "role": "user", "content": "." }], "screen_name": "x" }' ``` ```json 200 theme={null} { "id": "chatcmpl-social-data-example", "object": "chat.completion", "model": "x-user", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{ /* upstream platform JSON; shape varies by capability */ }" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request: missing required business field or invalid parameter", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token or authentication failed", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Model not allowed for this token", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` ```json 502 theme={null} { "error": { "message": "Upstream provider error", "type": "server_error", "code": "bad_gateway" } } ``` # User Posts Source: https://docs.omnimux.ai/en/api-reference/social-data/x/user-tweets POST https://api.omnimux.ai/v1/chat/completions Social data · `x-posts` * Social **data read** via OpenAI Chat Completions shape; auth `sk-` * `model` is `x-posts`; `messages` may be a dummy (e.g. `"."`) * Business params are **top-level** body fields (e.g. `screen_name`) * Not publishing (see Connecting Accounts / Posts) ## Identity | Field | Value | | ---------- | ----------- | | Series | Social data | | Platform | X | | Capability | User posts | | model | `x-posts` | ## Endpoint | Method | Path | | ------ | ---------------------- | | `POST` | `/v1/chat/completions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ------------- | ------ | -------- | ----------------------------------------------------------------- | | `model` | string | yes | Must be `x-posts` | | `messages` | array | yes | Dummy user message allowed | | `screen_name` | string | yes | Required business field for this capability (see request example) | ## Response ### 200 | Field | Type | Description | | --------------------------- | ------ | ---------------------------------------------------------- | | `id` | string | Completion id | | `object` | string | `chat.completion` | | `model` | string | `x-posts` | | `choices[].message.content` | string | Upstream platform JSON string (shape varies by capability) | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/chat/completions \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "x-posts", "messages": [{ "role": "user", "content": "." }], "screen_name": "x" }' ``` ```json 200 theme={null} { "id": "chatcmpl-social-data-example", "object": "chat.completion", "model": "x-posts", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{ /* upstream platform JSON; shape varies by capability */ }" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request: missing required business field or invalid parameter", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token or authentication failed", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Model not allowed for this token", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` ```json 502 theme={null} { "error": { "message": "Upstream provider error", "type": "server_error", "code": "bad_gateway" } } ``` # Channel Info Source: https://docs.omnimux.ai/en/api-reference/social-data/youtube/channel-info POST https://api.omnimux.ai/v1/chat/completions Social data · `youtube-user` * Social **data read** via OpenAI Chat Completions shape; auth `sk-` * `model` is `youtube-user`; `messages` may be a dummy (e.g. `"."`) * Business params are **top-level** body fields (e.g. `channel_id`) * Not publishing (see Connecting Accounts / Posts) ## Identity | Field | Value | | ---------- | -------------- | | Series | Social data | | Platform | YouTube | | Capability | Channel info | | model | `youtube-user` | ## Endpoint | Method | Path | | ------ | ---------------------- | | `POST` | `/v1/chat/completions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ------------ | ------ | -------- | ----------------------------------------------------------------- | | `model` | string | yes | Must be `youtube-user` | | `messages` | array | yes | Dummy user message allowed | | `channel_id` | string | yes | Required business field for this capability (see request example) | ## Response ### 200 | Field | Type | Description | | --------------------------- | ------ | ---------------------------------------------------------- | | `id` | string | Completion id | | `object` | string | `chat.completion` | | `model` | string | `youtube-user` | | `choices[].message.content` | string | Upstream platform JSON string (shape varies by capability) | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/chat/completions \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "youtube-user", "messages": [{ "role": "user", "content": "." }], "channel_id": "UC_x5XG1OV2P6uZZ5FSM9Ttw" }' ``` ```json 200 theme={null} { "id": "chatcmpl-social-data-example", "object": "chat.completion", "model": "youtube-user", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{ /* upstream platform JSON; shape varies by capability */ }" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request: missing required business field or invalid parameter", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token or authentication failed", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Model not allowed for this token", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` ```json 502 theme={null} { "error": { "message": "Upstream provider error", "type": "server_error", "code": "bad_gateway" } } ``` # Channel Videos Source: https://docs.omnimux.ai/en/api-reference/social-data/youtube/channel-videos POST https://api.omnimux.ai/v1/chat/completions Social data · `youtube-posts` * Social **data read** via OpenAI Chat Completions shape; auth `sk-` * `model` is `youtube-posts`; `messages` may be a dummy (e.g. `"."`) * Business params are **top-level** body fields (e.g. `channel_id`) * Not publishing (see Connecting Accounts / Posts) ## Identity | Field | Value | | ---------- | --------------- | | Series | Social data | | Platform | YouTube | | Capability | Channel videos | | model | `youtube-posts` | ## Endpoint | Method | Path | | ------ | ---------------------- | | `POST` | `/v1/chat/completions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ------------ | ------ | -------- | ----------------------------------------------------------------- | | `model` | string | yes | Must be `youtube-posts` | | `messages` | array | yes | Dummy user message allowed | | `channel_id` | string | yes | Required business field for this capability (see request example) | ## Response ### 200 | Field | Type | Description | | --------------------------- | ------ | ---------------------------------------------------------- | | `id` | string | Completion id | | `object` | string | `chat.completion` | | `model` | string | `youtube-posts` | | `choices[].message.content` | string | Upstream platform JSON string (shape varies by capability) | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/chat/completions \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "youtube-posts", "messages": [{ "role": "user", "content": "." }], "channel_id": "UC_x5XG1OV2P6uZZ5FSM9Ttw" }' ``` ```json 200 theme={null} { "id": "chatcmpl-social-data-example", "object": "chat.completion", "model": "youtube-posts", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{ /* upstream platform JSON; shape varies by capability */ }" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request: missing required business field or invalid parameter", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token or authentication failed", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Model not allowed for this token", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` ```json 502 theme={null} { "error": { "message": "Upstream provider error", "type": "server_error", "code": "bad_gateway" } } ``` # Video Detail Source: https://docs.omnimux.ai/en/api-reference/social-data/youtube/video-detail POST https://api.omnimux.ai/v1/chat/completions Social data · `youtube-video` * Social **data read** via OpenAI Chat Completions shape; auth `sk-` * `model` is `youtube-video`; `messages` may be a dummy (e.g. `"."`) * Business params are **top-level** body fields (e.g. `video_id`) * Not publishing (see Connecting Accounts / Posts) ## Identity | Field | Value | | ---------- | --------------- | | Series | Social data | | Platform | YouTube | | Capability | Video detail | | model | `youtube-video` | ## Endpoint | Method | Path | | ------ | ---------------------- | | `POST` | `/v1/chat/completions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------- | ------ | -------- | ----------------------------------------------------------------- | | `model` | string | yes | Must be `youtube-video` | | `messages` | array | yes | Dummy user message allowed | | `video_id` | string | yes | Required business field for this capability (see request example) | ## Response ### 200 | Field | Type | Description | | --------------------------- | ------ | ---------------------------------------------------------- | | `id` | string | Completion id | | `object` | string | `chat.completion` | | `model` | string | `youtube-video` | | `choices[].message.content` | string | Upstream platform JSON string (shape varies by capability) | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/chat/completions \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "youtube-video", "messages": [{ "role": "user", "content": "." }], "video_id": "dQw4w9WgXcQ" }' ``` ```json 200 theme={null} { "id": "chatcmpl-social-data-example", "object": "chat.completion", "model": "youtube-video", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{ /* upstream platform JSON; shape varies by capability */ }" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request: missing required business field or invalid parameter", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token or authentication failed", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Model not allowed for this token", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` ```json 502 theme={null} { "error": { "message": "Upstream provider error", "type": "server_error", "code": "bad_gateway" } } ``` # Video Search Source: https://docs.omnimux.ai/en/api-reference/social-data/youtube/video-search POST https://api.omnimux.ai/v1/chat/completions Social data · `youtube-search` * Social **data read** via OpenAI Chat Completions shape; auth `sk-` * `model` is `youtube-search`; `messages` may be a dummy (e.g. `"."`) * Business params are **top-level** body fields (e.g. `search_query`) * Not publishing (see Connecting Accounts / Posts) ## Identity | Field | Value | | ---------- | ---------------- | | Series | Social data | | Platform | YouTube | | Capability | Video search | | model | `youtube-search` | ## Endpoint | Method | Path | | ------ | ---------------------- | | `POST` | `/v1/chat/completions` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | -------------- | ------ | -------- | ----------------------------------------------------------------- | | `model` | string | yes | Must be `youtube-search` | | `messages` | array | yes | Dummy user message allowed | | `search_query` | string | yes | Required business field for this capability (see request example) | ## Response ### 200 | Field | Type | Description | | --------------------------- | ------ | ---------------------------------------------------------- | | `id` | string | Completion id | | `object` | string | `chat.completion` | | `model` | string | `youtube-search` | | `choices[].message.content` | string | Upstream platform JSON string (shape varies by capability) | Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/chat/completions \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "youtube-search", "messages": [{ "role": "user", "content": "." }], "search_query": "openai" }' ``` ```json 200 theme={null} { "id": "chatcmpl-social-data-example", "object": "chat.completion", "model": "youtube-search", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{ /* upstream platform JSON; shape varies by capability */ }" }, "finish_reason": "stop" } ] } ``` ```json 400 theme={null} { "error": { "message": "Invalid request: missing required business field or invalid parameter", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token or authentication failed", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Model not allowed for this token", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` ```json 502 theme={null} { "error": { "message": "Upstream provider error", "type": "server_error", "code": "bad_gateway" } } ``` # Query Video Task Source: https://docs.omnimux.ai/en/api-reference/tasks/video-task GET https://api.omnimux.ai/v1/video/generations/{task_id} GET /v1/video/generations/{task_id} · poll video generation > * Only for `task_id` from **video series** `POST /v1/video/generations` > * **Not** OpenAI Videos `/v1/videos/{id}` or `/content` download > * Auth: `Authorization: Bearer sk-...` ## Path parameters | Field | Type | Required | Description | | --------- | ------ | -------- | --------------------------- | | `task_id` | string | yes | Id from the create response | ## Response (summary) | Field | Notes | | ---------------- | ------------------------------------------------------------- | | `status` | e.g. `queued` / `in_progress` / `completed` / `failed` (live) | | `task_id` / `id` | Task id | | Result fields | May include output URLs when completed; shape varies by model | Base URL: `https://api.omnimux.ai` See [Connection and usage](/en/faqs/connection-usage) and [Cost optimization](/en/faqs/cost-optimization) (402). # Claude · Complete API Reference Source: https://docs.omnimux.ai/en/api-reference/text-series/claude/complete openapi/ops/chat/claude.json POST /v1/chat/completions Claude · Chat Completions complete API reference (shared contract, model enum) > * Protocol: OpenAI Chat Completions (`POST /v1/chat/completions`) > * **Shared contract** for all Claude ids below; only body `model` changes > * Synchronous by default; `stream: true` for SSE ## Available models | model id | | ------------------- | | `claude-fable-5` | | `claude-haiku-4-5` | | `claude-opus-4-6` | | `claude-opus-4-7` | | `claude-opus-4-8` | | `claude-opus-5` | | `claude-sonnet-4-6` | | `claude-sonnet-5` | Base URL: `https://api.omnimux.ai` # DeepSeek · Complete API Reference Source: https://docs.omnimux.ai/en/api-reference/text-series/deepseek/complete openapi/ops/chat/deepseek.json POST /v1/chat/completions DeepSeek · Chat Completions complete API reference (shared contract, model enum) > * Protocol: OpenAI Chat Completions (`POST /v1/chat/completions`) > * **Shared contract** for all DeepSeek ids below; only body `model` changes > * Synchronous by default; `stream: true` for SSE ## Available models | model id | | ------------------------------ | | `deepseek-v4-flash` | | `deepseek-v4-flash-vision-exp` | | `deepseek-v4-pro` | Base URL: `https://api.omnimux.ai` # Doubao · Complete API Reference Source: https://docs.omnimux.ai/en/api-reference/text-series/doubao/complete openapi/ops/chat/doubao.json POST /v1/chat/completions Doubao · Chat Completions complete API reference (shared contract, model enum) > * Protocol: OpenAI Chat Completions (`POST /v1/chat/completions`) > * **Shared contract** for all Doubao ids below; only body `model` changes > * Synchronous by default; `stream: true` for SSE > * Key specs: 1024K context window, 256K max answer tokens, supports multimodal inputs (text / image / video) & deep reasoning ## Available models | model id | Description | | --------------- | ------------------------------------------------------------------------------- | | `seed-evolving` | ByteDance Doubao official direct multimodal reasoning model (1M context window) | Base URL: `https://api.omnimux.ai` ## Local OmniMux CLI Verification You can verify and invoke the model securely using the local `omnimux` CLI: ```bash theme={null} # 1. Check model availability omnimux models # 2. Query public pricing and billing expression omnimux pricing # 3. Execute chat completion with secure token injection (no cleartext API keys) omnimux tokens exec --yes -- curl -sS https://api.omnimux.ai/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer __OMNIMUX_TOKEN___" \ -H "X-Omnimux-Group: default" \ -d '{ "model": "seed-evolving", "messages": [ {"role": "user", "content": "Hello, please confirm status and introduce capabilities briefly."} ], "max_tokens": 100 }' ``` # Gemini · Complete API Reference Source: https://docs.omnimux.ai/en/api-reference/text-series/gemini/complete openapi/ops/chat/gemini.json POST /v1/chat/completions Gemini · Chat Completions complete API reference (shared contract, model enum) > * Protocol: OpenAI Chat Completions (`POST /v1/chat/completions`) > * **Shared contract** for all Gemini ids below; only body `model` changes > * Synchronous by default; `stream: true` for SSE ## Available models | model id | | ------------------------------- | | `gemini-2.5-flash-lite` | | `gemini-2.5-flash` | | `gemini-2.5-pro` | | `gemini-3-flash-preview` | | `gemini-3-flash` | | `gemini-3-pro-preview` | | `gemini-3-pro` | | `gemini-3.1-flash-lite-preview` | | `gemini-3.1-flash-lite` | | `gemini-3.1-pro-preview` | | `gemini-3.1-pro` | | `gemini-3.5-flash` | | `gemini-3.6-flash` | | `gemini-3.7-flash` | | `gemini-3.8-flash` | Base URL: `https://api.omnimux.ai` # GLM · Complete API Reference Source: https://docs.omnimux.ai/en/api-reference/text-series/glm/complete openapi/ops/chat/glm.json POST /v1/chat/completions GLM · Chat Completions complete API reference (shared contract, model enum) > * Protocol: OpenAI Chat Completions (`POST /v1/chat/completions`) > * **Shared contract** for all GLM ids below; only body `model` changes > * Synchronous by default; `stream: true` for SSE ## Available models | model id | | --------- | | `glm-5.1` | | `glm-5.2` | | `glm-5.3` | Base URL: `https://api.omnimux.ai` # GPT · Complete API Reference Source: https://docs.omnimux.ai/en/api-reference/text-series/gpt/complete openapi/ops/chat/gpt.json POST /v1/chat/completions GPT · Chat Completions complete API reference (shared contract, model enum) > * Protocol: OpenAI Chat Completions (`POST /v1/chat/completions`) > * **Shared contract** for all GPT ids below; only body `model` changes > * Synchronous by default; `stream: true` for SSE ## Available models | model id | | --------------- | | `gpt-5.4-mini` | | `gpt-5.4` | | `gpt-5.5` | | `gpt-5.6-luna` | | `gpt-5.6-sol` | | `gpt-5.6-terra` | Base URL: `https://api.omnimux.ai` # Grok · Complete API Reference Source: https://docs.omnimux.ai/en/api-reference/text-series/grok/complete openapi/ops/chat/grok.json POST /v1/chat/completions Grok · Chat Completions complete API reference (shared contract, model enum) > * Protocol: OpenAI Chat Completions (`POST /v1/chat/completions`) > * **Shared contract** for all Grok ids below; only body `model` changes > * Synchronous by default; `stream: true` for SSE ## Available models | model id | | ------------------------------ | | `grok-4.20-0309-non-reasoning` | | `grok-4.20-0309-reasoning` | | `grok-4.20-multi-agent-0309` | | `grok-4.3` | | `grok-4.5` | | `grok-4.6` | | `grok-build-0.1` | | `grok-composer-2.5-fast` | Base URL: `https://api.omnimux.ai` # Kimi · Complete API Reference Source: https://docs.omnimux.ai/en/api-reference/text-series/kimi/complete openapi/ops/chat/kimi.json POST /v1/chat/completions Kimi · Chat Completions complete API reference (shared contract, model enum) > * Protocol: OpenAI Chat Completions (`POST /v1/chat/completions`) > * **Shared contract** for all Kimi ids below; only body `model` changes > * Synchronous by default; `stream: true` for SSE ## Available models | model id | | ---------------- | | `kimi-k2.6` | | `kimi-k2.7-code` | | `kimi-k3` | Base URL: `https://api.omnimux.ai` # MiniMax · Complete API Reference Source: https://docs.omnimux.ai/en/api-reference/text-series/minimax/complete openapi/ops/chat/minimax.json POST /v1/chat/completions MiniMax · Chat Completions complete API reference (shared contract, model enum) > * Protocol: OpenAI Chat Completions (`POST /v1/chat/completions`) > * **Shared contract** for all MiniMax ids below; only body `model` changes > * Synchronous by default; `stream: true` for SSE ## Available models | model id | | -------------- | | `minimax-m2.5` | | `minimax-m2.7` | | `minimax-m3` | Base URL: `https://api.omnimux.ai` # Depth Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/depth-video POST https://api.omnimux.ai/v1/video/generations Depth Video Generation · model `depth-video` * Create: `POST /v1/video/generations` with `model` `depth-video` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ------------- | | Series | Video series | | Brand | Depth Video | | model | `depth-video` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `depth-video` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"depth-video","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Omni 1.1 Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/gemini-omni-1.1 POST https://api.omnimux.ai/v1/video/generations Omni 1.1 Video Generation · model `gemini-omni-1.1` * Create: `POST /v1/video/generations` with `model` `gemini-omni-1.1` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ----------------- | | Series | Video series | | Brand | Omni Flash | | model | `gemini-omni-1.1` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `gemini-omni-1.1` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"gemini-omni-1.1","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Omni Flash Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/gemini-omni-flash POST https://api.omnimux.ai/v1/video/generations Omni Flash Video Generation · model `gemini-omni-flash` * Create: `POST /v1/video/generations` with `model` `gemini-omni-flash` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ------------------- | | Series | Video series | | Brand | Omni Flash | | model | `gemini-omni-flash` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `gemini-omni-flash` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"gemini-omni-flash","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Grok Imagine Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/grok-imagine-video POST https://api.omnimux.ai/v1/video/generations Grok Imagine Video Generation · model `grok-imagine-video` * Create: `POST /v1/video/generations` with `model` `grok-imagine-video` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | -------------------- | | Series | Video series | | Brand | Grok Imagine | | model | `grok-imagine-video` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `grok-imagine-video` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"grok-imagine-video","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Grok Imagine Video 1.5 Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/grok-imagine-video-1-5 POST https://api.omnimux.ai/v1/video/generations Grok Imagine Video 1.5 Video Generation · model `grok-imagine-video-1-5` * Create: `POST /v1/video/generations` with `model` `grok-imagine-video-1-5` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ------------------------ | | Series | Video series | | Brand | Grok Imagine | | model | `grok-imagine-video-1-5` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | -------------------------------- | | `model` | string | yes | Must be `grok-imagine-video-1-5` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"grok-imagine-video-1-5","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Kling Avatar Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/kling-avatar POST https://api.omnimux.ai/v1/video/generations Kling Avatar Video Generation · model `kling-avatar` * Create: `POST /v1/video/generations` with `model` `kling-avatar` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | -------------- | | Series | Video series | | Brand | Kling | | model | `kling-avatar` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `kling-avatar` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"kling-avatar","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Kling O3 Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/kling-o3 POST https://api.omnimux.ai/v1/video/generations Kling O3 Video Generation · model `kling-o3` * Create: `POST /v1/video/generations` with `model` `kling-o3` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ------------ | | Series | Video series | | Brand | Kling | | model | `kling-o3` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `kling-o3` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"kling-o3","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Kling V2.6 Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/kling-v2-6 POST https://api.omnimux.ai/v1/video/generations Kling V2.6 Video Generation · model `kling-v2-6` * Create: `POST /v1/video/generations` with `model` `kling-v2-6` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ------------ | | Series | Video series | | Brand | Kling | | model | `kling-v2-6` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `kling-v2-6` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"kling-v2-6","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Kling V3 Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/kling-v3 POST https://api.omnimux.ai/v1/video/generations Kling V3 Video Generation · model `kling-v3` * Create: `POST /v1/video/generations` with `model` `kling-v3` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ------------ | | Series | Video series | | Brand | Kling | | model | `kling-v3` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `kling-v3` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"kling-v3","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Kling V3 Motion Control Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/kling-v3-motion-control POST https://api.omnimux.ai/v1/video/generations Kling V3 Motion Control Video Generation · model `kling-v3-motion-control` * Create: `POST /v1/video/generations` with `model` `kling-v3-motion-control` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ------------------------- | | Series | Video series | | Brand | Kling | | model | `kling-v3-motion-control` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | --------------------------------- | | `model` | string | yes | Must be `kling-v3-motion-control` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"kling-v3-motion-control","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # LTX digital human Source: https://docs.omnimux.ai/en/api-reference/video-series/models/ltx-2-3-kj POST https://api.omnimux.ai/v1/video/generations GxgenAI LTX 2.3 photo lip-sync · model `ltx-2-3-kj` * Create: `POST /v1/video/generations` with `model` `ltx-2-3-kj` * Poll: `GET /v1/video/generations/{task_id}` (do **not** use `*-async` / `*-query` names) * This is **photo + audio lip-sync**, not text-to-video. `metadata.nodeInfoList` is required * Upload image/audio to a public URL or an upstream file name first. Raw `data:` URIs fail * Persist result URLs promptly (upstream links expire) ## Identity | Field | Value | | ------ | ------------- | | Series | Video | | Brand | LTX / GxgenAI | | model | `ltx-2-3-kj` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ----------------------- | ------ | -------- | ---------------------------------- | | `model` | string | yes | Must be `ltx-2-3-kj` | | `prompt` | string | no | Action hint; also send node `1624` | | `metadata.nodeInfoList` | array | **yes** | Image + audio + duration nodes | Required nodes: | nodeId | fieldName | Meaning | | ------ | --------- | --------------------------------------------- | | `444` | `image` | Portrait still (9:16 or 16:9) | | `1755` | `audio` | Speech or song | | `1583` | `value` | Duration seconds (`0` = full audio; keep ≤35) | | `1776` | `value` | Audio start second | | `1624` | `value` | Motion prompt | | `1606` | `value` | Max resolution (`<1600`) | | `1586` | `value` | FPS | ## Response ### 200 (create) | Field | Type | Description | | ---------------- | ------ | -------------------------------------- | | `id` / `task_id` | string | Task id | | `status` | string | `queued` / `in_progress` / `completed` | Poll [Video task](/en/api-reference/tasks/video-task). Errors: [Error codes](/en/faqs/connection-usage). ```bash cURL theme={null} curl --request POST \ --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "model": "ltx-2-3-kj", "prompt": "Look at camera and speak naturally. Locked shot.", "metadata": { "nodeInfoList": [ { "nodeId": "444", "fieldName": "image", "fieldValue": "https://example.com/face.jpg" }, { "nodeId": "1755", "fieldName": "audio", "fieldValue": "https://example.com/speech.mp3" }, { "nodeId": "1583", "fieldName": "value", "fieldValue": "10" }, { "nodeId": "1776", "fieldName": "value", "fieldValue": "0" }, { "nodeId": "1624", "fieldName": "value", "fieldValue": "Look at camera and speak naturally. Locked shot." }, { "nodeId": "1606", "fieldName": "value", "fieldValue": "1280" }, { "nodeId": "1586", "fieldName": "value", "fieldValue": "25" } ] } }' ``` ```json 200 theme={null} { "id": "task_xxx", "status": "in_progress", "model": "ltx-2-3-kj" } ``` ```json 400 theme={null} { "error": { "message": "metadata.nodeInfoList is required for model ltx-2-3-kj", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # MiniMax H3 Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/minimax-h3 POST https://api.omnimux.ai/v1/video/generations MiniMax H3 Video Generation · model `minimax-h3` * Create: `POST /v1/video/generations` with `model` `minimax-h3` (standard), `minimax-h3-task` (fixed per-call task path), `minimax-h3-turbo` (turbo), or `minimax-h3-video` (dedicated video path) * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ----------------------------------------------------------------------- | | Series | Video series | | Brand | MiniMax | | model | `minimax-h3`, `minimax-h3-task`, `minimax-h3-turbo`, `minimax-h3-video` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `minimax-h3` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"minimax-h3","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # MiniMax End Frame Source: https://docs.omnimux.ai/en/api-reference/video-series/models/minimax-h3-endframe POST https://api.omnimux.ai/v1/video/generations MiniMax End Frame · model `minimax-h3-endframe` * Create: `POST /v1/video/generations` with `model` `minimax-h3-endframe` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | --------------------- | | Series | Video series | | Brand | MiniMax | | model | `minimax-h3-endframe` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `minimax-h3-endframe` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"minimax-h3-endframe","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # MiniMax Image-to-Video Source: https://docs.omnimux.ai/en/api-reference/video-series/models/minimax-h3-fl2va POST https://api.omnimux.ai/v1/video/generations MiniMax Image-to-Video · model `minimax-h3-fl2va` * Create: `POST /v1/video/generations` with `model` `minimax-h3-fl2va` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ------------------ | | Series | Video series | | Brand | MiniMax | | model | `minimax-h3-fl2va` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `minimax-h3-fl2va` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"minimax-h3-fl2va","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # MiniMax First-Last Frame Source: https://docs.omnimux.ai/en/api-reference/video-series/models/minimax-h3-flf POST https://api.omnimux.ai/v1/video/generations MiniMax First-Last Frame · model `minimax-h3-flf` * Create: `POST /v1/video/generations` with `model` `minimax-h3-flf` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ---------------- | | Series | Video series | | Brand | MiniMax | | model | `minimax-h3-flf` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `minimax-h3-flf` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"minimax-h3-flf","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # MiniMax H3 Max Source: https://docs.omnimux.ai/en/api-reference/video-series/models/minimax-h3-max openapi/ops/video/minimax-h3-max.json POST /v1/video/generations MiniMax H3 Max video API Use text\_to\_video without media, or first\_frame with exactly one image. video\_multi\_ref accepts at most 9 images, 3 videos and 3 audio files, 12 references total, with at least one image or video. Order within each collection is preserved. Use one field spelling per media kind. Replace legacy 720p with explicit 768P. Completed jobs without usable artifacts remain retryable; failure/cancellation takes precedence over stale artifacts. Status reads do not own billing settlement. Pricing follows the current catalog; no fixed generation latency is guaranteed. [Query Video Task](/en/api-reference/tasks/video-task) · [Pricing](/en/api-reference/account/pricing) # MiniMax H3 Max Turbo Source: https://docs.omnimux.ai/en/api-reference/video-series/models/minimax-h3-max-turbo openapi/ops/video/minimax-h3-max-turbo.json POST /v1/video/generations MiniMax H3 Max Turbo video API Use text\_to\_video without media, or first\_frame with exactly one image. Turbo does not support video\_multi\_ref. Use one field spelling per media kind. Replace legacy 720p with explicit 768P. Completed jobs without usable artifacts remain retryable; failure/cancellation takes precedence over stale artifacts. Status reads do not own billing settlement. Pricing follows the current catalog; no fixed generation latency is guaranteed. [Query Video Task](/en/api-reference/tasks/video-task) · [Pricing](/en/api-reference/account/pricing) # MiniMax Text-to-Video Source: https://docs.omnimux.ai/en/api-reference/video-series/models/minimax-h3-t2v POST https://api.omnimux.ai/v1/video/generations MiniMax Text-to-Video · model `minimax-h3-t2v` * Create: `POST /v1/video/generations` with `model` `minimax-h3-t2v` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ---------------- | | Series | Video series | | Brand | MiniMax | | model | `minimax-h3-t2v` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `minimax-h3-t2v` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"minimax-h3-t2v","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # PixVerse v6 Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/pixverse-v6 POST https://api.omnimux.ai/v1/video/generations PixVerse v6 Video Generation · model `pixverse-v6` * Create: `POST /v1/video/generations` with `model` `pixverse-v6` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ------------- | | Series | Video series | | Brand | PixVerse | | model | `pixverse-v6` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `pixverse-v6` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"pixverse-v6","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Seedance 2.0 Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/seedance-2-0 POST https://api.omnimux.ai/v1/video/generations Seedance 2.0 Video Generation · model `seedance-2-0` * Create: `POST /v1/video/generations` with `model` `seedance-2-0` (standard) or `seedance-2-0-task` (fixed per-call task path) * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ----------------------------------- | | Series | Video series | | Brand | Seedance | | model | `seedance-2-0`, `seedance-2-0-task` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `seedance-2-0` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"seedance-2-0","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Seedance 2.0 Fast Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/seedance-2-0-fast POST https://api.omnimux.ai/v1/video/generations Seedance 2.0 Fast Video Generation · model `seedance-2-0-fast` * Create: `POST /v1/video/generations` with `model` `seedance-2-0-fast` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ------------------- | | Series | Video series | | Brand | Seedance | | model | `seedance-2-0-fast` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `seedance-2-0-fast` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"seedance-2-0-fast","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Seedance 2.0 Mini Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/seedance-2-0-mini POST https://api.omnimux.ai/v1/video/generations Seedance 2.0 Mini Video Generation · model `seedance-2-0-mini` * Create: `POST /v1/video/generations` with `model` `seedance-2-0-mini` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ------------------- | | Series | Video series | | Brand | Seedance | | model | `seedance-2-0-mini` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `seedance-2-0-mini` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"seedance-2-0-mini","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Seedance 2.5 Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/seedance-2-5 POST https://api.omnimux.ai/v1/video/generations Seedance 2.5 Video Generation · model `seedance-2-5` * Create: `POST /v1/video/generations` with `model` `seedance-2-5` (standard) or `seedance-2-5-task` (fixed per-call task path) * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ----------------------------------- | | Series | Video series | | Brand | Seedance | | model | `seedance-2-5`, `seedance-2-5-task` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `seedance-2-5` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"seedance-2-5","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Veo 3.1 Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/veo-3.1 POST https://api.omnimux.ai/v1/video/generations Veo 3.1 Video Generation · model `veo-3.1` * Create: `POST /v1/video/generations` with `model` `veo-3.1` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ------------ | | Series | Video series | | Brand | Veo 3.1 | | model | `veo-3.1` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `veo-3.1` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"veo-3.1","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Veo 3.1 Fast Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/veo-3.1-fast POST https://api.omnimux.ai/v1/video/generations Veo 3.1 Fast Video Generation · model `veo-3.1-fast` * Create: `POST /v1/video/generations` with `model` `veo-3.1-fast` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | -------------- | | Series | Video series | | Brand | Veo 3.1 | | model | `veo-3.1-fast` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `veo-3.1-fast` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"veo-3.1-fast","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Vidu Q3 Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/vidu-q3 POST https://api.omnimux.ai/v1/video/generations Vidu Q3 Video Generation · model `vidu-q3` * Create: `POST /v1/video/generations` with `model` `vidu-q3` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ------------ | | Series | Video series | | Brand | Vidu | | model | `vidu-q3` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `vidu-q3` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"vidu-q3","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Wan 3.0 Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/wan-3.0 POST https://api.omnimux.ai/v1/video/generations Wan 3.0 Video Generation · model `wan-3.0` * Create: `POST /v1/video/generations` with `model` `wan-3.0` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ------------ | | Series | Video series | | Brand | Wan | | model | `wan-3.0` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `wan-3.0` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"wan-3.0","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Wan 3.0 Prime Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/wan-3.0-prime POST https://api.omnimux.ai/v1/video/generations Wan 3.0 Prime Video Generation · model `wan-3.0-prime` * Create: `POST /v1/video/generations` with `model` `wan-3.0-prime` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | --------------- | | Series | Video series | | Brand | Wan | | model | `wan-3.0-prime` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `wan-3.0-prime` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"wan-3.0-prime","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Wan 3.0 Prime Reference Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/wan-3.0-prime-ref POST https://api.omnimux.ai/v1/video/generations Wan 3.0 Prime Reference Video Generation · model `wan-3.0-prime-ref` * Create: `POST /v1/video/generations` with `model` `wan-3.0-prime-ref` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ------------------- | | Series | Video series | | Brand | Wan | | model | `wan-3.0-prime-ref` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `wan-3.0-prime-ref` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"wan-3.0-prime-ref","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # Wan 3.0 Reference Video Generation Source: https://docs.omnimux.ai/en/api-reference/video-series/models/wan-3.0-ref POST https://api.omnimux.ai/v1/video/generations Wan 3.0 Reference Video Generation · model `wan-3.0-ref` * Create: `POST /v1/video/generations` with `model` `wan-3.0-ref` * Async: poll [Video task](/en/api-reference/tasks/video-task) with returned `task_id` * Persist result URLs promptly (upstream links may expire) ## Identity | Field | Value | | ------ | ------------- | | Series | Video series | | Brand | Wan | | model | `wan-3.0-ref` | ## Endpoint | Method | Path | | ------ | --------------------------------- | | `POST` | `/v1/video/generations` | | `GET` | `/v1/video/generations/{task_id}` | Base URL: `https://api.omnimux.ai` ## Authorizations | Name | In | Type | Required | Description | | --------------- | ------ | ------ | -------- | ------------------------- | | `Authorization` | header | string | yes | `Bearer sk-...` (API key) | ## Body | Field | Type | Required | Description | | ---------------------- | ------------ | ----------- | ----------------------------- | | `model` | string | yes | Must be `wan-3.0-ref` | | `prompt` | string | conditional | Required for text-to-video | | `seconds` / `duration` | number | no | Duration in seconds (bounded) | | `size` / `resolution` | string | no | Resolution (model-specific) | | `image` / `images` | string/array | no | Image-to-video references | ## Response ### 200 (create) | Field | Type | Description | | --------- | ------ | ------------------------------------------- | | `task_id` | string | Task id for polling | | `status` | string | e.g. `pending` / `processing` / `completed` | See [Video task](/en/api-reference/tasks/video-task). Errors: right rail and [Error codes](/en/faqs/connection-usage). ```bash curl --request POST \ theme={null} --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{"model":"wan-3.0-ref","prompt":"slow pan across a product on a table"}' ``` ```json 200 theme={null} { "task_id": "task_01HXYZABCDEF", "status": "queued" } ``` ```json 400 theme={null} { "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" } } ``` ```json 401 theme={null} { "error": { "message": "Invalid token", "type": "authentication_error", "code": "unauthorized" } } ``` ```json 402 theme={null} { "error": { "message": "Insufficient quota. Please top up your account.", "type": "insufficient_quota", "code": "insufficient_quota" } } ``` ```json 403 theme={null} { "error": { "message": "Forbidden", "type": "permission_error", "code": "forbidden" } } ``` ```json 429 theme={null} { "error": { "message": "Rate limit exceeded", "type": "rate_limit_error", "code": "rate_limit_exceeded" } } ``` ```json 500 theme={null} { "error": { "message": "Internal server error", "type": "server_error", "code": "internal_error" } } ``` # AnythingLLM Source: https://docs.omnimux.ai/en/integration-guide/anythingllm Configure OmniMux in AnythingLLM Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients usually use `https://api.omnimux.ai/v1`). Create a `sk-` key in the [console](https://omnimux.ai/dashboard). Model ids: console or `GET /v1/models`. ## Prep 1. Install [AnythingLLM](https://anythingllm.com/) 2. OmniMux API key ## Setup 1. Settings → **LLM Preference** 2. Provider: **Generic OpenAI** / OpenAI-compatible 3. Base URL `https://api.omnimux.ai/v1`, Key `sk-...` 4. Set model name from OmniMux catalog ## Verify Chat in a workspace. # ChatBox Source: https://docs.omnimux.ai/en/integration-guide/chatbox Configure OmniMux in ChatBox Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients usually use `https://api.omnimux.ai/v1`). Create a `sk-` key in the [console](https://omnimux.ai/dashboard). Model ids: console or `GET /v1/models`. ## Prep 1. Install [ChatBox](https://chatboxai.app/) 2. Get an OmniMux API key ## Setup 1. ChatBox → **Settings** (or first-run “use your own API key”) 2. Provider: **OpenAI API** (or OpenAI-compatible custom) 3. Set: * **API Key**: `sk-...` * **API Host / Base URL**: `https://api.omnimux.ai/v1` 4. Add a model id (e.g. `gpt-5.4`) and chat ## Verify Send a short message. 401 → bad key; connection errors → check Base URL includes `/v1`. # Cherry Studio Source: https://docs.omnimux.ai/en/integration-guide/cherry-studio Configure OmniMux in Cherry Studio Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients usually use `https://api.omnimux.ai/v1`). Create a `sk-` key in the [console](https://omnimux.ai/dashboard). Model ids: console or `GET /v1/models`. ## Prep 1. Install [Cherry Studio](https://cherry-ai.com/) 2. Get an OmniMux API key ## Setup 1. Settings → **Model service** → **Add** 2. Provider type: **OpenAI**-compatible 3. API Key + Base URL `https://api.omnimux.ai/v1` 4. Add model ids and enable them ## Verify Start a chat with the new model. # Claude Code CLI Source: https://docs.omnimux.ai/en/integration-guide/claude-code-cli Connect Claude Code CLI to OmniMux ## Overview OmniMux uses a single gateway Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients typically use `https://api.omnimux.ai/v1`). Console: [omnimux.ai/dashboard](https://omnimux.ai/dashboard). Model IDs in this guide are examples — confirm with the console or `GET /v1/models`. Claude Code CLI is the official command-line tool from Anthropic for interacting with Claude models in the terminal. By integrating Claude Code CLI with **OmniMux API**, you can directly access Claude model capabilities through OmniMux. ## Prerequisites Before configuring, make sure you have: ### Get OmniMux API Key * Log in to [OmniMux Console](https://omnimux.ai/dashboard) * Find API Keys in the dashboard, click "Create New Key" button, then copy the generated Key * API Key usually starts with `sk-` ## Step 1: Install Claude Code CLI **Tip:** If you don't know how to open a command line terminal, see [FAQ - How to open command line terminal](#14-how-to-open-command-line-terminal) ### 1. One-Command Installation ```bash theme={null} curl -fsSL https://claude.ai/install.sh | bash ``` **Expected result:** You'll see download and installation info, ending with a success message. **If error occurs:** `permission denied` means you need to add `sudo` before the command. ### 1.1 Install Node.js and npm (Skip if installed) **First-time installation:** 1. Visit [Node.js official website](https://nodejs.org/) to download and install (LTS version recommended) 2. If you're unfamiliar with the installation process, refer to [Node.js Installation Guide](https://nodejs.org/en/download/package-manager) 3. Node.js v20 or higher is recommended **Verify installation:** ```bash theme={null} node -v npm -v ``` ### 1.2 Install Claude Code CLI Run in PowerShell or CMD: ```bash theme={null} npm install -g @anthropic-ai/claude-code ``` **Expected result:** You'll see download and installation info, ending with a success message. **If error occurs:** * `permission denied`: Run PowerShell or CMD as administrator * `npm command not found`: Node.js is not properly installed or not added to environment variables **Note:** macOS/Linux uses one-command installation script, Windows uses npm installation. ### 2. Verify Installation ```bash theme={null} claude --version ``` **Success indicator:** Shows version number (e.g., `1.x.x`). ## Step 2: Configure OmniMux API Claude Code CLI is configured via `settings.json`. [CC Switch](https://github.com/farion1231/cc-switch) is a desktop GUI tool for managing Claude Code provider configurations through a graphical interface, without manually editing config files. ### 1. Install CC Switch Download the installer for your platform from [GitHub Releases](https://github.com/farion1231/cc-switch/releases). ### 2. Configure OmniMux 1. Open CC Switch 2. Click the icon in the top-right corner to enter the configuration page 3. Fill in the fields as shown in the image 4. Click "Add" CC Switch will automatically write the configuration to `settings.json`, no manual operation needed. CC Switch also supports system tray quick switching, MCP server management, cloud config sync, and more. **Note:** If this is your first time using Claude Code CLI, we recommend starting with "Temporary" to test your configuration before using this method for permanent setup. ### 1. Open config directory Press `Win + R`, paste the following, then press Enter: ``` %userprofile%\.claude ``` **If folder doesn't exist**: Manually create `.claude` folder (press `Win + R`, type `%userprofile%`, press Enter to open user directory, then create a new folder named `.claude`). In Finder, press `Command + Shift + G`, paste the following path, then press Enter: ``` ~/.claude ``` **If folder doesn't exist**: Open Terminal and run `mkdir ~/.claude` to create the folder. Open file manager and navigate to: ``` ~/.claude ``` **If folder doesn't exist**: Open Terminal and run `mkdir ~/.claude` to create the folder. ### 2. Edit settings.json In the opened folder, if `settings.json` doesn't exist, right-click in empty space → New → Text Document → Rename to `settings.json` (remove `.txt` extension). Then double-click to open with an editor and add the following content: ```json theme={null} { "env": { "ANTHROPIC_AUTH_TOKEN": "your-omnimux-api-key", "ANTHROPIC_BASE_URL": "https://api.omnimux.ai", "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1" }, "permissions": { "allow": [], "deny": [] } } ``` **⚠️ Important:** * **Copy completely** without missing any symbols * Replace `"your-omnimux-api-key"` with actual API Key (keep quotes) * Don't use Chinese input method for punctuation **Configuration options:** * `ANTHROPIC_AUTH_TOKEN`: Your OmniMux API Key * `ANTHROPIC_BASE_URL`: `https://api.omnimux.ai` (OmniMux API endpoint) * `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`: Reduce non-essential network requests **GUI Setup:** 1. Right-click "This PC" → "Properties" → "Advanced system settings" → "Environment Variables" 2. In "User variables" or "System variables", create new: * Variable name: `ANTHROPIC_BASE_URL` * Variable value: `https://api.omnimux.ai` 3. Add `ANTHROPIC_AUTH_TOKEN` with your API Key as the value 4. Click "OK" to save **PowerShell Command:** ```powershell theme={null} [System.Environment]::SetEnvironmentVariable('ANTHROPIC_BASE_URL', 'https://api.omnimux.ai', 'User') [System.Environment]::SetEnvironmentVariable('ANTHROPIC_AUTH_TOKEN', 'your-omnimux-api-key', 'User') ``` **Note:** Restart terminal to take effect. Edit shell configuration file (choose based on your shell): **If using zsh (macOS default):** ```bash theme={null} echo 'export ANTHROPIC_BASE_URL="https://api.omnimux.ai"' >> ~/.zshrc echo 'export ANTHROPIC_AUTH_TOKEN="your-omnimux-api-key"' >> ~/.zshrc ``` **If using bash:** ```bash theme={null} echo 'export ANTHROPIC_BASE_URL="https://api.omnimux.ai"' >> ~/.bash_profile echo 'export ANTHROPIC_AUTH_TOKEN="your-omnimux-api-key"' >> ~/.bash_profile ``` **Apply immediately:** ```bash theme={null} source ~/.zshrc # or source ~/.bash_profile ``` Edit shell configuration file (choose based on your shell): **If using bash (common on Linux):** ```bash theme={null} echo 'export ANTHROPIC_BASE_URL="https://api.omnimux.ai"' >> ~/.bashrc echo 'export ANTHROPIC_AUTH_TOKEN="your-omnimux-api-key"' >> ~/.bashrc ``` **If using zsh:** ```bash theme={null} echo 'export ANTHROPIC_BASE_URL="https://api.omnimux.ai"' >> ~/.zshrc echo 'export ANTHROPIC_AUTH_TOKEN="your-omnimux-api-key"' >> ~/.zshrc ``` **Apply immediately:** ```bash theme={null} source ~/.bashrc # or source ~/.zshrc ``` **⚠️ Note**: Replace `your-omnimux-api-key` with your actual API Key. In PowerShell: ```powershell theme={null} $env:ANTHROPIC_BASE_URL="https://api.omnimux.ai" $env:ANTHROPIC_AUTH_TOKEN="your-omnimux-api-key" ``` In CMD: ```cmd theme={null} set ANTHROPIC_BASE_URL=https://api.omnimux.ai set ANTHROPIC_AUTH_TOKEN=your-omnimux-api-key ``` **Note:** Configuration expires after closing the terminal. In Terminal: ```bash theme={null} export ANTHROPIC_BASE_URL="https://api.omnimux.ai" export ANTHROPIC_AUTH_TOKEN="your-omnimux-api-key" ``` **Note:** Configuration expires after closing the terminal. **⚠️ Note**: Replace `your-omnimux-api-key` with your actual API Key. ## Step 3: Start Using Claude Code CLI ### 1. Enter a safe working directory ```bash theme={null} cd your-working-directory ``` **Note:** Replace `your-working-directory` with actual path ### 2. Interactive mode ```shell theme={null} claude ``` ### 3. Verify configuration ```shell theme={null} claude "Who are you" ``` **Success indicators:** * See AI response text (several lines) * **No** errors like `401`, `403`, `API Key invalid` **If you see errors:** * `401 Unauthorized`: API Key not set or invalid → Check settings.json * `403 Forbidden`: Insufficient API Key permissions → Verify API Key * `Network error`: Network issue → Check connection ## FAQ ### 1. What is Claude Code CLI and what is it used for? Claude Code CLI is the official command-line tool from Anthropic that allows users to interact with Claude models in the terminal. It's primarily used for code assistance, text generation, Q\&A conversations, and file analysis—especially suited for developers who need quick AI capabilities in a command-line environment. ### 2. How do I verify installation and configuration on first use? Run these commands in sequence: * `claude --version`: Confirm Claude Code CLI is installed * `claude "Who are you"`: Confirm API configuration is correct ### 3. What's the difference between interactive mode and single command mode? * **Interactive mode**: Run `claude` to enter continuous conversation for multi-turn interactions, ideal for complex tasks * **Single command mode**: Run `claude "question"` to get a single response and exit, ideal for quick queries ### 4. Will Claude Code CLI automatically read or upload my local files and code? No. Claude Code CLI only reads file content when you explicitly reference or authorize it, and will request confirmation before performing sensitive operations. It's recommended to use it in a dedicated project folder. ### 5. How do I use Claude Code CLI to analyze or process local file content? In interactive mode, you can reference files by: * Typing the file path for Claude to read * Dragging files into the terminal window * Copy and pasting file content ### 6. Does Claude Code CLI support Chinese input and output? Yes, fully supported. Claude Code CLI supports Chinese input and output—you can ask questions in Chinese and receive Chinese responses. ### 7. No output after execution—what could be the cause? Common causes include: * Network connection issues preventing API server access * Invalid API Key or insufficient balance * Incorrect `ANTHROPIC_BASE_URL` configuration * Firewall or proxy blocking requests ### 8. Why don't my config file or environment variable changes take effect? * Restart your terminal or command line window * Check that `settings.json` has valid JSON syntax * Verify the config file path: * Windows: `C:\Users\{username}\.claude\settings.json` * macOS / Linux: `~/.claude/settings.json` ### 9. What causes 401/403 errors? * **401 error**: `ANTHROPIC_AUTH_TOKEN` not set or invalid API Key * **403 error**: Insufficient API Key permissions or expired key * Verify `ANTHROPIC_BASE_URL` is set to `https://api.omnimux.ai` ### 10. What scenarios is Claude Code CLI suited for? What is it not suited for? **Suited for:** * Code writing, debugging, and refactoring * Quick Q\&A in command-line environments * File content analysis and processing * Automation script integration **Not suited for:** * Complex interactions requiring a graphical interface * Real-time collaborative editing * Large-scale batch file processing ### 11. How do I switch models? Type `/model` in interactive mode to switch models. ### 12. What Claude models does OmniMux support? OmniMux supports the following Claude models: | Model Name | Description | | ---------------------------- | ------------- | | `claude-haiku-4-5-20251001` | Fast response | | `claude-sonnet-4-5-20250929` | Balanced | | `claude-opus-4-5-20251101` | Advanced | | `claude-sonnet-4-6` | Latest | | `claude-sonnet-5` | Latest | | `claude-fable-5` | Latest | | `claude-opus-5` | Latest | | `claude-opus-4-8` | Latest | | `claude-opus-4-7` | Latest | | `claude-opus-4-6` | Advanced | ### 13. How do I upload images? * Option 1: Reference the image path * Option 2: Drag and drop an image into the terminal * Option 3: Paste an image directly All methods require user action—Claude Code CLI will not automatically read or upload local images. ### 14. How to open command line terminal? * Method 1: Press `Win + R`, type `cmd` or `powershell`, then press Enter * Method 2: Search for "Command Prompt" or "PowerShell" in the Start menu * Method 3: Hold Shift and right-click in a folder, select "Open PowerShell window here" * Method 1: Press `Command + Space` to open Spotlight, type `Terminal`, then press Enter * Method 2: Go to "Applications" → "Utilities" → "Terminal" * Method 1: Press `Ctrl + Alt + T` shortcut * Method 2: Search for "Terminal" in the application menu ## Notes Run Claude Code CLI in a dedicated project folder. Avoid running it in sensitive directories (such as system folders or directories containing credentials). Claude Code CLI operates starting from the current working directory. If you previously logged in with an official account, clear the `ANTHROPIC_AUTH_TOKEN` environment variable or override it in `settings.json`. # Claude Desktop Integration Source: https://docs.omnimux.ai/en/integration-guide/claude-desktop Connect Claude Desktop to OmniMux ## Overview OmniMux uses a single gateway Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients typically use `https://api.omnimux.ai/v1`). Console: [omnimux.ai/dashboard](https://omnimux.ai/dashboard). Model IDs in this guide are examples — confirm with the console or `GET /v1/models`. Claude Desktop is Anthropic's official desktop app for using Claude locally. This guide explains how to connect Claude Desktop to **OmniMux API** and use OmniMux to access models compatible with the Anthropic Messages API. **This guide covers:** * Installing Claude Desktop * Enabling Developer Mode * Configuring the OmniMux connection * Restarting and selecting a model ## Prerequisites Before you start, prepare your OmniMux API Key. ### Get an OmniMux API Key * Log in to the [OmniMux Console](https://omnimux.ai/dashboard) * Find API Keys in the console, click **Create New Key**, then copy the generated key * API keys usually start with `sk-`; keep them safe ## Step 1: Download Claude Desktop Visit the [Claude Desktop download page](https://claude.com/download) and install the version for your operating system. **Tip:** If Claude Desktop is not installed yet, complete the installation before continuing. ### After installation After installation, confirm that Claude Desktop starts normally. ## Step 2: Enable Developer Mode After launching Claude Desktop, click **Help → Troubleshooting** and enable Developer Mode in the dialog. Once enabled, a **Developer** menu entry appears for third-party inference configuration. **Tip:** If you do not see the Developer entry, confirm that your Claude Desktop version supports Developer Mode and third-party inference settings. Before using Gateway / Cowork mode, enable the Windows virtual machine platform feature: 1. Press `Win + R` 2. Enter `optionalfeatures`, then press `Enter` 3. In **Windows Features**, check **Virtual Machine Platform** 4. Click **OK** 5. Restart your computer if Windows prompts you to do so After that, launch Claude Desktop, click **Help → Troubleshooting**, and enable Developer Mode in the dialog. Once enabled, a **Developer** menu entry appears for third-party inference configuration. **Tip:** If you do not see the Developer entry, confirm that your Claude Desktop version supports Developer Mode and third-party inference settings. ## Step 3: Open Third-Party Inference Settings In the Developer menu, open the third-party inference panel and fill it in as shown below: | Field | Description | | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Gateway base URL | OmniMux gateway address, recommended value: `https://api.omnimux.ai` | | Gateway API key | Enter your OmniMux API Key directly, without the `Bearer` prefix | | Gateway auth scheme | `bearer` | | Model list | Recommended. Add only text/chat model IDs that support the Anthropic Messages API. You can also jump to the [supported models](#supported-claude-models) table below | **Note:** If the field names in your Claude Desktop version are slightly different, use the actual interface labels, but keep the meaning the same. ## Step 4: Save and Restart After saving the configuration, fully quit Claude Desktop, then launch it again. After restarting, Claude Desktop should use the new third-party inference configuration. **Expected result:** After launch, you should see the available model list and requests should be routed through OmniMux. ## Step 5: Choose a Model After restarting, check the model selector to confirm that the available models appear correctly. ## How It Works Claude Desktop communicates with OmniMux through an Anthropic-compatible gateway: 1. Claude Desktop sends requests to the gateway address you configured. 2. OmniMux receives the request and forwards it to the corresponding model service. 3. After the response returns, Claude Desktop continues showing the conversation locally. No extra local proxy is required. ## Supported Models If you want to restrict the visible models in `Model list`, you can use the following model IDs. | Model ID | | ---------------------------- | | `claude-haiku-4-5-20251001` | | `claude-sonnet-4-5-20250929` | | `claude-opus-4-5-20251101` | | `claude-sonnet-4-6` | | `claude-sonnet-5` | | `claude-opus-4-6` | | `claude-fable-5` | | `claude-opus-5` | | `claude-opus-4-8` | | `claude-opus-4-7` | | `deepseek-v4-flash` | | `deepseek-v4-pro` | ## FAQ ### Developer menu does not appear Confirm that Developer Mode is enabled and that Claude Desktop has been fully restarted. ### I cannot connect after configuring it Check the following: * Whether the base URL is correct * Whether the API key is valid * Whether the authentication scheme is `bearer` * Whether Claude Desktop has been fully closed and reopened ### I cannot see any models Confirm that your account and network are working normally, then check whether the third-party inference settings were saved successfully. ### Do I need to fill in `Model list`? Yes, it is recommended. Add only text/chat model IDs that support the Anthropic Messages API. ### What should I enter if I want to specify models manually? Use the model IDs in the "Supported Models" table above and format them as required by Claude Desktop. # Codex CLI Source: https://docs.omnimux.ai/en/integration-guide/codex-cli Connect Codex CLI to OmniMux ## Overview OmniMux uses a single gateway Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients typically use `https://api.omnimux.ai/v1`). Console: [omnimux.ai/dashboard](https://omnimux.ai/dashboard). Model IDs in this guide are examples — confirm with the console or `GET /v1/models`. Codex CLI is OpenAI's official command-line tool for code-related tasks in the terminal. Compared to general chat tools, it emphasizes engineering-ready output with clearer, actionable code changes. By integrating Codex CLI with **OmniMux API**, you can access OmniMux's models (such as **GPT series**) through a unified OpenAI-compatible interface with one key and one base URL. ## Prerequisites Before configuring, make sure you have: ### 1. Install Node.js and npm **Why needed?** Node.js is the runtime environment for CLI tools (like installing WeChat on your phone to chat, you need to install Node.js on your computer to run CLI tools). **If already installed:** Run `node -v` and `npm -v` to check version. If v20+, skip this step. **First-time installation:** * Download and install from [Node.js official website](https://nodejs.org/) (recommend LTS version) * If you're unfamiliar with the installation process, refer to [Runoob - Node.js Installation Guide](https://www.runoob.com/nodejs/nodejs-install-setup.html) * Recommended: **Node.js v20 or higher** * Verify installation: ```bash theme={null} node -v npm -v ``` ### 2. Get OmniMux API Key * Log in to [OmniMux Console](https://omnimux.ai/dashboard) * Find API Keys in the dashboard, click 'Create New Key' button, then copy the generated Key * API Key usually starts with `sk-` ## Step 1: Install Codex CLI **Tip:** If you don't know how to open a command line terminal, see [FAQ - How to open command line terminal](#13-how-to-open-command-line-terminal) ### 1. Global Installation ```bash theme={null} npm install -g @openai/codex ``` **Expected result:** Download info scrolling, ending with `added XX packages` (takes 1-3 minutes). **If error occurs:** `permission denied` means Windows needs "Run as administrator" PowerShell, macOS/Linux add `sudo` before command. ### 2. Verify Installation ```bash theme={null} codex --version ``` **Success indicator:** Shows version number (e.g., `1.x.x`). ## Step 2: Configure OmniMux API Codex CLI supports a custom Provider via config file, no source code modification needed. ### 1. Open Config Directory Press `Win + R`, paste the following, then press Enter to open the Codex config directory: ``` %userprofile%\.codex ``` In Finder, press `Command + Shift + G`, paste the following path, then press Enter: ``` ~/.codex ``` Access the config directory in your file manager: ``` ~/.codex ``` ### 2. Edit config.toml Find the `config.toml` file in the config directory and edit it with the following content: ```toml theme={null} model = "gpt-5.2" model_reasoning_effort = "medium" model_provider = "omnimux" [model_providers.omnimux] name = "OmniMux API" base_url = "https://api.omnimux.ai/v1" env_key = "OPENAI_API_KEY" wire_api = "responses" ``` **⚠️ Important:** * **Copy completely** without missing any symbols * Replace `"your-omnimux-api-key"` with actual API Key * TOML format is sensitive to indentation and symbols ```powershell theme={null} @" model = "gpt-5.2" model_reasoning_effort = "medium" model_provider = "omnimux" [model_providers.omnimux] name = "OmniMux API" base_url = "https://api.omnimux.ai/v1" env_key = "OPENAI_API_KEY" wire_api = "responses" "@ | Out-File -FilePath "$env:USERPROFILE\.codex\config.toml" -Encoding utf8 ``` ```bash theme={null} cat > ~/.codex/config.toml << 'EOF' model = "gpt-5.2" model_reasoning_effort = "medium" model_provider = "omnimux" [model_providers.omnimux] name = "OmniMux API" base_url = "https://api.omnimux.ai/v1" env_key = "OPENAI_API_KEY" wire_api = "responses" EOF ``` After running the command, the config file will be automatically created and written. ```toml theme={null} model = "gpt-5.2" model_reasoning_effort = "medium" model_provider = "omnimux" [model_providers.omnimux] name = "OmniMux API" base_url = "https://api.omnimux.ai/v1" env_key = "OPENAI_API_KEY" wire_api = "responses" ``` Config fields: * `model`: default model name * `model_reasoning_effort`: reasoning depth (adjust as needed) * `model_provider`: provider name that matches the section below * `base_url`: OmniMux API endpoint * `env_key`: environment variable name for the API key * `wire_api`: must be `responses` ### 2. Configure API Key **Temporary (current session only)** ```powershell theme={null} $env:OPENAI_API_KEY = "your-omnimux-api-key" ``` **Permanent** ```powershell theme={null} [Environment]::SetEnvironmentVariable("OPENAI_API_KEY", "your-omnimux-api-key", "User") ``` Restart the terminal for changes to take effect. **Verify Configuration** ```powershell theme={null} echo $env:OPENAI_API_KEY ``` If it outputs your API Key, the configuration is successful. **Temporary (current session only)** ```bash theme={null} export OPENAI_API_KEY="your-omnimux-api-key" ``` **Permanent** Edit `~/.bashrc` or `~/.zshrc`, add: ```bash theme={null} export OPENAI_API_KEY="your-omnimux-api-key" ``` Then run `source ~/.bashrc` or `source ~/.zshrc` to apply, or restart the terminal. **Verify Configuration** ```bash theme={null} echo $OPENAI_API_KEY ``` If it outputs your API Key, the configuration is successful. ## Step 3: Start Using Codex CLI ### 1. Enter working directory ```shell theme={null} cd your-working-directory ``` **Note:** Replace `your-working-directory` with actual path ### 2. Interactive mode ```shell theme={null} codex ``` ### 3. Verify configuration ```shell theme={null} codex "Who are you" ``` **Success indicators:** * See AI response text (several lines) * **No** errors like `401`, `403`, `API Key invalid` **If you see errors:** * `401 Unauthorized`: API Key not set or invalid → Check environment variable * `403 Forbidden`: Insufficient API Key permissions → Verify API Key * `Network error`: Network issue → Check connection ## FAQ ### 1. What is Codex CLI and what is it used for? Codex CLI is OpenAI's official command-line tool focused on code-related tasks. It emphasizes engineering-ready output with clearer, actionable code changes. ### 2. How do I verify installation and configuration on first use? Run these commands in sequence: * `node -v` and `npm -v`: Confirm Node.js and npm are installed * `codex --version`: Confirm Codex CLI is installed * `codex "Who are you"`: Confirm API configuration is correct ### 3. What's the difference between interactive mode and single command mode? * **Interactive mode**: Run `codex` to enter continuous conversation for multi-turn interactions * **Single command mode**: Run `codex "question"` to get a single response and exit ### 4. Will Codex CLI automatically read or upload my local files and code? No. Codex CLI only reads file content when you explicitly reference or authorize it. It's recommended to use it in a dedicated project folder. ### 5. How do I use Codex CLI to analyze local file content? In interactive mode, you can reference files by: * Typing the file path for Codex to read * Dragging files into the terminal window * Copy and pasting file content ### 6. Does Codex CLI support Chinese input and output? Yes, fully supported. ### 7. No output after execution—what could be the cause? Common causes include: * Network connection issues * Invalid API Key or insufficient balance * Incorrect `base_url` configuration * Firewall or proxy blocking requests ### 8. Why don't my config changes take effect? * Restart your terminal * Check `config.toml` syntax (TOML format) * Verify config file path: * Windows: `C:\Users\{username}\.codex\config.toml` * macOS / Linux: `~/.codex/config.toml` ### 9. What causes 401/403 errors? * **401 error**: `OPENAI_API_KEY` not set or invalid * **403 error**: Insufficient permissions or expired key * Check that `env_key` matches your environment variable name ### 10. What scenarios is Codex CLI suited for? **Suited for:** * Code writing, debugging, and refactoring * Quick Q\&A in command-line environments * File content analysis **Not suited for:** * Complex GUI interactions * Real-time collaborative editing ### 11. How do I switch models? Open the configuration file `config.toml` (located at `~/.codex/config.toml` or `C:\Users\{username}\.codex\config.toml`), and modify the `model` field: ```toml theme={null} model = "gpt-5.2" # Change to your desired model name ``` Save the file and restart Codex CLI for changes to take effect. ### 12. How do I upload images? * Option 1: Reference the image path * Option 2: Drag and drop an image into the terminal * Option 3: Paste an image directly All methods require user action—Codex CLI will not automatically read or upload local images. ### 13. How to open command line terminal? * Method 1: Press `Win + R`, type `cmd` or `powershell`, then press Enter * Method 2: Search for "Command Prompt" or "PowerShell" in the Start menu * Method 3: Hold Shift and right-click in a folder, select "Open PowerShell window here" * Method 1: Press `Command + Space` to open Spotlight, type `Terminal`, then press Enter * Method 2: Go to "Applications" → "Utilities" → "Terminal" * Method 1: Press `Ctrl + Alt + T` shortcut * Method 2: Search for "Terminal" in the application menu ## Notes Run Codex CLI in a dedicated project folder. Avoid running it in sensitive directories (such as system folders or directories containing credentials). Codex CLI operates starting from the current working directory. The `wire_api` in config must be set to `"responses"`. `"chat"` is deprecated. # Gemini CLI Source: https://docs.omnimux.ai/en/integration-guide/gemini-cli Connect Gemini CLI to OmniMux ## Overview OmniMux uses a single gateway Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients typically use `https://api.omnimux.ai/v1`). Console: [omnimux.ai/dashboard](https://omnimux.ai/dashboard). Model IDs in this guide are examples — confirm with the console or `GET /v1/models`. Gemini CLI is Google's official command-line tool for interacting with Gemini models in the terminal. By integrating Gemini CLI with **OmniMux API**, you can go beyond official model limits and access OmniMux's broader model set, including **Gemini, GPT, and Claude** series models, through one entry point. ## Prerequisites Before configuring, make sure you have: ### 1. Install Node.js and npm **Why needed?** Node.js is the runtime environment for CLI tools (like installing WeChat on your phone to chat, you need to install Node.js on your computer to run CLI tools). **If already installed:** Run `node -v` and `npm -v` to check version. If v20+, skip this step. **First-time installation:** * Download and install from [Node.js official website](https://nodejs.org/) (recommend LTS version) * If you're unfamiliar with the installation process, refer to [Runoob - Node.js Installation Guide](https://www.runoob.com/nodejs/nodejs-install-setup.html) * Recommended: **Node.js v20 or higher** * Verify installation: ```bash theme={null} node -v npm -v ``` ### 2. Get OmniMux API Key * Log in to [OmniMux Console](https://omnimux.ai/dashboard) * Find API Keys in the dashboard, click 'Create New Key' button, then copy the generated Key * API Key usually starts with `sk-` ## Step 1: Install Gemini CLI **Tip:** If you don't know how to open a command line terminal, see [FAQ - How to open command line terminal](#13-how-to-open-command-line-terminal) ### 1. Install command ```bash theme={null} npm install -g @google/gemini-cli ``` **Expected result:** Download info scrolling, ending with `added XX packages` (takes 1-3 minutes). **If error occurs:** `permission denied` means Windows needs "Run as administrator" PowerShell, macOS/Linux add `sudo` before command. ### 2. Verify Installation ```bash theme={null} gemini --version ``` **Success indicator:** Shows version number (e.g., `1.x.x`). ## Step 2: Configure OmniMux API **⚠️ Important:** Gemini CLI configuration is **slightly more complex** than other tools, requiring modification of installation files. If you're new to programming, consider using **Claude CLI** or **Codex CLI** first (simpler configuration). ### 1. Find installation directory ```bash theme={null} npm root -g ``` **You'll see a path like:** * Windows: `C:\Users\YourUsername\AppData\Roaming\npm\node_modules` * macOS: `/usr/local/lib/node_modules` * Linux: `/usr/lib/node_modules` ### 2. Modify API endpoint Modify 2 files: **File 1:** `{install_dir}\@google\gemini-cli\node_modules\@google\genai\dist\node\index.mjs` Find line **\~11222**: ```javascript theme={null} // Before initHttpOptions.baseUrl = `https://generativelanguage.googleapis.com/`; // After initHttpOptions.baseUrl = `https://api.omnimux.ai/`; ``` **File 2:** `{install_dir}\@google\gemini-cli\node_modules\@google\genai\dist\node\index.cjs` Find line **\~11244**, make the same change. ### 3. Configure API Key **Temporary (current session only)** ```powershell theme={null} $env:GEMINI_API_KEY = "your-omnimux-api-key" ``` **Permanent** ```powershell theme={null} [Environment]::SetEnvironmentVariable("GEMINI_API_KEY", "your-omnimux-api-key", "User") ``` Restart the terminal for changes to take effect. **Verify Configuration** ```powershell theme={null} echo $env:GEMINI_API_KEY ``` If it outputs your API Key, the configuration is successful. **Temporary (current session only)** ```bash theme={null} export GEMINI_API_KEY="your-omnimux-api-key" ``` **Permanent** Edit `~/.bashrc` or `~/.zshrc`, add: ```bash theme={null} export GEMINI_API_KEY="your-omnimux-api-key" ``` Then run `source ~/.bashrc` or `source ~/.zshrc` to apply, or restart the terminal. **Verify Configuration** ```bash theme={null} echo $GEMINI_API_KEY ``` If it outputs your API Key, the configuration is successful. ## Step 3: Start Using Gemini CLI ### 1. Enter working directory ```shell theme={null} cd your-working-directory ``` **Note:** Replace `your-working-directory` with actual path ### 2. Single query mode ```shell theme={null} gemini "Who are you" ``` ### 3. Interactive mode ```shell theme={null} gemini ``` **Success indicators:** * See AI response text (several lines) * **No** errors like `401`, `403`, `API Key invalid` **If you see errors:** * `401 Unauthorized`: API Key not set or invalid → Check environment variable * `403 Forbidden`: Insufficient API Key permissions → Verify API endpoint modification * `Network error`: Network issue → Check connection ## FAQ ### 1. What is Gemini CLI and what is it used for? Gemini CLI is Google's official command-line tool for interacting with Gemini models in the terminal. With OmniMux configuration, you can also access GPT, Claude, and other models. ### 2. How do I verify installation and configuration on first use? Run these commands in sequence: * `node -v` and `npm -v`: Confirm Node.js and npm are installed * `gemini --version`: Confirm Gemini CLI is installed * `gemini "Who are you"`: Confirm API configuration is correct ### 3. What's the difference between interactive mode and single command mode? * **Interactive mode**: Run `gemini` to enter continuous conversation for multi-turn interactions * **Single command mode**: Run `gemini "question"` to get a single response and exit ### 4. Will Gemini CLI automatically read or upload my local files and code? No. Gemini CLI only reads file content when you explicitly reference or authorize it. It's recommended to use it in a dedicated project folder. ### 5. How do I use Gemini CLI to analyze local file content? In interactive mode, you can reference files by: * Typing the file path for Gemini to read * Dragging files into the terminal window ### 6. Does Gemini CLI support Chinese input and output? Yes, fully supported. ### 7. No output after execution—what could be the cause? Common causes include: * Network connection issues * Invalid API Key or insufficient balance * Incorrect API endpoint configuration * Firewall or proxy blocking requests ### 8. Why don't my API endpoint or environment variable changes take effect? * Restart your terminal or command line window * Confirm `GEMINI_API_KEY` environment variable is set correctly * Confirm API endpoint files are modified correctly (need to modify .mjs and .cjs files in node\_modules) ### 9. What causes 401/403 errors? * **401 error**: `GEMINI_API_KEY` not set or invalid * **403 error**: Insufficient permissions or expired key * Verify API endpoint is `https://api.omnimux.ai/` ### 10. What scenarios is Gemini CLI suited for? **Suited for:** * Code writing, debugging, and refactoring * Quick Q\&A in command-line environments * File content analysis * Automation script integration **Not suited for:** * Complex GUI interactions * Real-time collaborative editing * Large-scale batch file processing ### 11. How do I switch models? Type `/model` in interactive mode. Available models: * `gemini-2.5-pro` * `gemini-2.5-flash` * `gemini-3-pro-preview` * `gemini-3-flash-preview` ### 12. How do I upload images? * Option 1: Reference the image path * Option 2: Drag and drop an image into the terminal All methods require user action—Gemini CLI will not automatically read or upload local images. ### 13. How to open command line terminal? * Method 1: Press `Win + R`, type `cmd` or `powershell`, then press Enter * Method 2: Search for "Command Prompt" or "PowerShell" in the Start menu * Method 3: Hold Shift and right-click in a folder, select "Open PowerShell window here" * Method 1: Press `Command + Space` to open Spotlight, type `Terminal`, then press Enter * Method 2: Go to "Applications" → "Utilities" → "Terminal" * Method 1: Press `Ctrl + Alt + T` shortcut * Method 2: Search for "Terminal" in the application menu ## Notes Run Gemini CLI in a dedicated project folder. Avoid running it in sensitive directories (such as system folders or directories containing credentials). Gemini CLI operates starting from the current working directory. # Grok CLI Source: https://docs.omnimux.ai/en/integration-guide/grok-cli Configure OmniMux in Grok CLI Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients usually use `https://api.omnimux.ai/v1`). Create a `sk-` key in the [console](https://omnimux.ai/dashboard). Model ids: console or `GET /v1/models`. ## Prep 1. Install Grok/xAI CLI (OpenAI-compatible or configurable base URL) 2. OmniMux API key ## Setup ```bash theme={null} export OPENAI_API_KEY="sk-..." export OPENAI_BASE_URL="https://api.omnimux.ai/v1" ``` Use OmniMux model ids (e.g. `grok-4.5`). ## Verify ```bash theme={null} curl -sS https://api.omnimux.ai/v1/models \ -H "Authorization: Bearer $OPENAI_API_KEY" | head ``` # Kimi CLI Source: https://docs.omnimux.ai/en/integration-guide/kimi-cli Configure OmniMux in Kimi CLI Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients usually use `https://api.omnimux.ai/v1`). Create a `sk-` key in the [console](https://omnimux.ai/dashboard). Model ids: console or `GET /v1/models`. ## Prep 1. Install Kimi/Moonshot CLI with custom base URL support 2. OmniMux API key ## Setup ```bash theme={null} export OPENAI_API_KEY="sk-..." export OPENAI_BASE_URL="https://api.omnimux.ai/v1" ``` Model ids such as `kimi-k3`. ## Verify Run one chat completion via the CLI. # OpenCode Source: https://docs.omnimux.ai/en/integration-guide/opencode Connect OpenCode to OmniMux ## Overview OmniMux uses a single gateway Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients typically use `https://api.omnimux.ai/v1`). Console: [omnimux.ai/dashboard](https://omnimux.ai/dashboard). Model IDs in this guide are examples — confirm with the console or `GET /v1/models`. OpenCode is a Go-based open-source command-line programming tool (CLI) that provides powerful AI assistance for developers. It offers an intuitive Terminal User Interface (TUI) and supports multiple LLM providers including OpenAI, Anthropic, Gemini, and more. By integrating OpenCode with **OmniMux API**, you can access top-tier AI models including **Claude**, **GPT**, and **Gemini** series, enabling unified key multi-model access. ## Prerequisites Before configuring, make sure you have: ### 1. Terminal Emulator OpenCode requires a modern terminal emulator. Recommended options: * **WezTerm** (cross-platform) * **Alacritty** (cross-platform) * **Ghostty** (Linux and macOS) * **Kitty** (Linux and macOS) Windows users can also use PowerShell or Windows Terminal. macOS users can use the built-in Terminal.app or iTerm2. Linux users can use the built-in terminal or GNOME Terminal, Konsole, etc. ### 2. Get OmniMux API Key * Log in to [OmniMux Console](https://omnimux.ai/dashboard) * Find API Keys in the dashboard, click 'Create New Key' button, then copy the generated Key * API Key usually starts with `sk-` ## Step 1: Install OpenCode **Tip:** If you don't know how to open a command line terminal, see [FAQ - How to open command line terminal](#11-how-to-open-command-line-terminal) The easiest way is through the install script: ```bash theme={null} curl -fsSL https://opencode.ai/install | bash ``` Or using Homebrew: ```bash theme={null} brew install anomalyco/tap/opencode ``` Windows users should first install [Node.js](https://nodejs.org/en/download), then install via NPM: ```bash theme={null} npm i -g opencode-ai@latest ``` Or using Chocolatey: ```bash theme={null} choco install opencode ``` Or using Scoop: ```bash theme={null} scoop bucket add extras scoop install extras/opencode ``` ### Verify Installation ```bash theme={null} opencode --version ``` **Success indicator:** Shows version information. If you prefer a graphical interface, OpenCode also offers a desktop app available at [OpenCode Download Page](https://opencode.ai/download). ## Step 2: Configure OmniMux API ### 1. Initialize Provider After installation, run the following command in your terminal before launching OpenCode: ```bash theme={null} opencode auth login ``` 1. In the provider list, select **other** (at the bottom, you can search for it) 2. Enter **Provider ID**: type `omnimux-anthropic` 3. Enter **API Key token**: you can enter any value (e.g., `admin`), the actual key is referenced via config file This step registers a custom provider in OpenCode's local credential manager. ### 2. Edit Config File Open the OpenCode config directory: Press `Win + R`, paste the following, then press Enter: ``` %userprofile%\.config\opencode ``` In terminal, run: ```bash theme={null} cd ~/.config/opencode ``` Or access `~/.config/opencode/` in Finder/file manager Create or edit `opencode.json` in this directory: ```json theme={null} { "$schema": "https://opencode.ai/config.json", "provider": { "omnimux-anthropic": { "npm": "@ai-sdk/anthropic", "name": "OmniMux Claude", "options": { "baseURL": "https://api.omnimux.ai/v1", "apiKey": "Your OmniMux API Key" }, "models": { "claude-fable-5": { "name": "Claude Fable 5", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "claude-opus-5": { "name": "Claude Opus 5", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "claude-opus-4-8": { "name": "Claude Opus 4.8", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "claude-opus-4-7": { "name": "Claude Opus 4.7", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "claude-opus-4-6": { "name": "Claude Opus 4.6", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "claude-sonnet-4-6": { "name": "Claude Sonnet 4.6", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "claude-sonnet-5": { "name": "Claude Sonnet 5", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "claude-opus-4-5-20251101": { "name": "Claude 4.5 Opus", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "claude-sonnet-4-5-20250929": { "name": "Claude 4.5 Sonnet", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "claude-haiku-4-5-20251001": { "name": "Claude 4.5 Haiku", "modalities": { "input": ["text", "image"], "output": ["text"] } } } }, "omnimux-google": { "npm": "@ai-sdk/google", "name": "OmniMux Gemini", "options": { "baseURL": "https://api.omnimux.ai/v1beta", "apiKey": "Your OmniMux API Key" }, "models": { "gemini-2.5-flash": { "name": "Gemini 2.5 Flash", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "gemini-2.5-pro": { "name": "Gemini 2.5 Pro", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "gemini-3-flash-preview": { "name": "Gemini 3.0 Flash", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "gemini-3-pro-preview": { "name": "Gemini 3.0 Pro", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "gemini-3.1-flash-lite-preview": { "name": "Gemini 3.1 Flash Lite", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "gemini-3.1-pro-preview": { "name": "Gemini 3.1 Pro", "modalities": { "input": ["text", "image"], "output": ["text"] } } } }, "omnimux-openai": { "npm": "@ai-sdk/openai", "name": "OmniMux GPT", "options": { "baseURL": "https://api.omnimux.ai/v1", "apiKey": "Your OmniMux API Key" }, "models": { "gpt-5.1": { "name": "GPT-5.1", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "gpt-5.2": { "name": "GPT-5.2", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "gpt-5.4": { "name": "GPT-5.4", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "gpt-5.5": { "name": "GPT-5.5", "modalities": { "input": ["text", "image"], "output": ["text"] } }, "MiniMax-M2.5": { "name": "MiniMax M2.5", "modalities": { "input": ["text"], "output": ["text"] } } } } } } ``` **⚠️ Important:** * Replace `"Your OmniMux API Key"` with your actual API Key * JSON format is sensitive to symbols ## Step 3: Start Using OpenCode ### 1. Launch OpenCode After saving the config file, restart your terminal, then navigate to your working directory: ```shell theme={null} cd your-working-directory ``` Launch OpenCode: ```shell theme={null} opencode ``` ### 2. Verify Configuration In the chat interface, enter the command: ``` /models ``` You should see **OmniMux Claude**, **OmniMux Gemini**, and **OmniMux GPT** in the model list. Select one and you're ready to go! ## FAQ ### 1. What is OpenCode and what is it used for? OpenCode is an open-source terminal AI coding assistant with a modern TUI interface. It supports code editing, file operations, and command execution, ideal for AI-assisted programming in terminal environments. ### 2. How do I verify installation and configuration on first use? Run these steps in sequence: * `opencode --version`: Confirm OpenCode is installed * Launch OpenCode and enter `/models`: Confirm you can see the configured models ### 3. Where should the config file be placed? The `opencode.json` config file should be placed at: * Windows: `C:\Users\{username}\.config\opencode\opencode.json` * macOS / Linux: `~/.config/opencode/opencode.json` ### 4. What models does OpenCode support? Through OmniMux API, OpenCode supports the following models: **Claude series:** * **Claude Opus 4.6 / Sonnet 4.6**: Latest generation models * **Claude 4.5 Opus / Sonnet / Haiku**: High-performance model family **Gemini series:** * **Gemini 2.5 Flash / Pro**: Latest generation balanced models * **Gemini 3.0 Flash / Pro**: Next-generation high-performance models * **Gemini 3.1 Flash Lite / Pro**: Newest generation models with enhanced capabilities **GPT series:** * **GPT-5.1 / 5.2 / 5.4 / 5.5**: OpenAI latest models * **MiniMax M2.5**: MiniMax high-performance model ### 5. How do I switch models? In the OpenCode interface, enter the `/models` command, then select your desired model from the list. ### 6. Why don't my config changes take effect? * Restart OpenCode * Check `opencode.json` syntax (JSON format) * Verify config file path is correct ### 7. What causes 401/403 errors? * **401 error**: API Key not set or invalid * **403 error**: Insufficient permissions or expired key * Check the `apiKey` in your config file ### 8. Will OpenCode automatically read or upload my local files and code? OpenCode only reads file content when you explicitly authorize it. It's recommended to use it in a dedicated project folder. ### 9. Does OpenCode support Chinese input and output? Yes, fully supported. ### 10. What scenarios is OpenCode suited for? **Suited for:** * Code writing, debugging, and refactoring * AI-assisted programming in terminal environments * File content analysis and processing * Users who prefer modern TUI interfaces **Not suited for:** * Complex GUI interactions * Users unfamiliar with terminal operations ### 11. How to open command line terminal? * Method 1: Press `Win + R`, type `cmd` or `powershell`, then press Enter * Method 2: Search for "Command Prompt" or "PowerShell" in the Start menu * Method 3: Hold Shift and right-click in a folder, select "Open PowerShell window here" * Method 1: Press `Command + Space` to open Spotlight, type `Terminal`, then press Enter * Method 2: Go to "Applications" → "Utilities" → "Terminal" * Method 1: Press `Ctrl + Alt + T` shortcut * Method 2: Search for "Terminal" in the application menu ## Notes Run OpenCode in a dedicated project folder. Avoid running it in sensitive directories (such as system folders or directories containing credentials). OpenCode operates starting from the current working directory. OpenCode uses JSON format config files. Ensure your config file syntax is correct. You can use online JSON validators to check the format. # Pi Coding Agent Source: https://docs.omnimux.ai/en/integration-guide/pi Connect Pi Coding Agent to OmniMux ## Overview OmniMux uses a single gateway Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients typically use `https://api.omnimux.ai/v1`). Console: [omnimux.ai/dashboard](https://omnimux.ai/dashboard). Model IDs in this guide are examples — confirm with the console or `GET /v1/models`. Pi's homepage tagline reads "There are many agent harnesses, but this one is yours" — Pi positions itself as a deliberately minimal agent harness that adapts to your workflows, not the other way around. Pi Coding Agent (whose command and config directory name is `pi`) is an open-source, terminal-native coding agent (a command-line tool) from [Earendil Works](https://github.com/earendil-works/pi). It supports multiple model providers, custom providers, and pluggable tools, making it well-suited for code assistance and task automation from the command line. Pi supports custom model providers and the **Anthropic Messages API**. By configuring OmniMux as a custom provider in `~/.pi/agent/models.json`, you can use OmniMux's Claude model family in Pi while retaining Pi's complete agent tool-calling capabilities. Pi's official focus is the **terminal CLI** (four run modes: interactive / print / JSON / RPC, plus embedding via the Node.js SDK), and this guide follows the CLI. ## Before You Begin Before starting the configuration, make sure you have completed the following preparations: ### 1. Install the Pi Coding Agent CLI Pi requires **Node.js ≥ 22.19.0**. First check your version with `node -v`; below this version, `npm install -g` prints an `EBADENGINE` warning and the installed CLI may fail to run, so upgrade Node first. ```bash theme={null} curl -fsSL https://pi.dev/install.sh | bash ``` ```bash theme={null} npm install -g --ignore-scripts @earendil-works/pi-coding-agent ``` If you see a **deprecation warning** during installation such as `npm warn deprecated node-domexception@1.0.0`, you can safely ignore it — it comes from an upstream dependency and does not affect installation or usage. As long as you see `added N packages` at the end and `pi --version` prints a version number, the install succeeded. The official install command includes `--ignore-scripts` (which skips dependencies' lifecycle scripts during installation; Pi's normal installation doesn't need them). On first run, Pi automatically downloads two native tools — ripgrep and fd — as needed. Make sure you get the package name `@earendil-works/pi-coding-agent` right — npm also has a same-named fork `@oh-my-pi/pi-coding-agent` (a different version line) and the deprecated `@mariozechner/pi-coding-agent` (whose maintainer has noted you should switch to the earendil-works version). Don't install the wrong one. Once installation is complete, confirm the `pi` command is available: ```bash theme={null} pi --version ``` For more installation methods (PowerShell, pnpm, bun, etc.), see the [Pi website](https://pi.dev) and the [official repository](https://github.com/earendil-works/pi). ### 2. Get an OmniMux API Key * Log in to the [OmniMux console](https://omnimux.ai/dashboard) * Find API Keys in the console, click the "Create New Key" button, then copy the generated key * The API Key usually starts with `sk-`. Please keep it safe. ## Step 1: Configure the OmniMux Provider Pi defines providers and models through a config file named `models.json`, located in the `.pi/agent/` folder inside your home directory (full path `~/.pi/agent/models.json`). Claude models frequently use `tool_use` / `tool_result` in Pi, so this guide uses OmniMux's **Anthropic Messages-compatible API** and configures it as a custom provider of type `anthropic-messages`. `~` stands for your **home directory** (`/Users/your-username` on macOS, `/home/your-username` on Linux). `.pi` starts with a dot, making it a **hidden folder** that Finder / File Explorer won't show by default — so the easiest way to create the file below is via the command line. Just copy and paste. This file does **not** exist by default (the `.pi` folder usually isn't created until Pi runs), so you need to create it manually. Follow these three steps: * **macOS**: Press `Command + Space` to open Spotlight, type `Terminal`, and press Enter. * **Windows**: Search for `PowerShell` in the Start menu and open it. If you're new to the command line, see [FAQ - How do I open a command-line terminal?](#how-do-i-open-a-command-line-terminal) first. Paste the following command into the terminal and press Enter. It automatically creates the needed folder and opens an empty `models.json` in a text editor: ```bash theme={null} mkdir -p ~/.pi/agent && nano ~/.pi/agent/models.json ``` This drops you into the `nano` editor (a simple text editor inside the terminal). ```powershell theme={null} mkdir -Force "$HOME\.pi\agent"; notepad "$HOME\.pi\agent\models.json" ``` Notepad will ask "Do you want to create a new file?" — click **Yes**. Copy the **complete configuration** below and paste it into the editor you just opened: ```json theme={null} { "providers": { "omnimux": { "name": "OmniMux", "baseUrl": "https://api.omnimux.ai", "apiKey": "$OMNIMUX_API_KEY", "authHeader": true, "api": "anthropic-messages", "models": [ { "id": "claude-fable-5", "reasoning": true, "contextWindow": 1000000, "maxTokens": 128000, "cost": {"input": 9.0, "output": 45.0, "cacheRead": 0.9, "cacheWrite": 11.25} }, { "id": "claude-sonnet-5", "reasoning": true, "contextWindow": 1000000, "maxTokens": 128000, "cost": {"input": 2.7, "output": 13.5, "cacheRead": 0.27, "cacheWrite": 3.375} }, { "id": "claude-haiku-4-5-20251001", "reasoning": false, "contextWindow": 200000, "maxTokens": 64000, "cost": {"input": 0.9, "output": 4.5, "cacheRead": 0.09, "cacheWrite": 1.125} } ] } } } ``` Then save: * **nano (macOS / Linux)**: Press `Control + O` then Enter to save, then `Control + X` to exit. * **Notepad (Windows)**: Press `Control + S` to save, then close the window. **Key field descriptions (don't skip any):** * **`api: "anthropic-messages"`** — uses OmniMux's Anthropic Messages-compatible route, so Pi uses Claude's native `tool_use` / `tool_result` protocol. * **Set `baseUrl` only to the domain root** `https://api.omnimux.ai` — do **not** manually add `/v1` or `/v1/messages`. Pi appends `/v1/messages` automatically; adding it manually duplicates the path and causes a `404 Invalid URL`. * **`authHeader: true` is required.** This field makes Pi attach an `Authorization: Bearer ` request header. OmniMux's `/v1/messages` only accepts Bearer authentication, while Pi's built-in Anthropic SDK only sends `x-api-key` by default — omitting this field returns a `401`. * **`apiKey` has two forms — pick one:** * **Option 1 · Paste the key directly (simplest, good for local personal use)**: replace `"$OMNIMUX_API_KEY"` in the config with your real key, e.g. `"apiKey": "sk-your-real-key"`. Done in one step, no environment variable needed; the downside is the key sits in **plaintext** in the config file, so don't share this file or commit it to Git. * **Option 2 · Environment variable interpolation (more secure, recommended)**: keep `"$OMNIMUX_API_KEY"` as is and put the real key in an environment variable (see "Set the API Key Environment Variable" below). This keeps the plaintext key out of the config file. * **(Advanced)** Pi's `apiKey` also supports `${OMNIMUX_API_KEY}` (equivalent; use braces to disambiguate when the variable name is immediately followed by literal text) and `!command` (a leading `!` runs a command and uses its output as the key, for example reading from a password manager: `"!op read 'op://vault/item/credential'"`). If you need a literal `$` or `!` in the value, escape them as `$$` and `$!`. Don't want to touch the key in the config file? You can also use `/login` in interactive mode to select this provider and store the key in `~/.pi/agent/auth.json` — the effect is equivalent. ### Set the API Key Environment Variable You only need this step if you chose **Option 2 (environment variable interpolation)** above. If you chose **Option 1 (paste the key directly)**, the key is already in the config file — skip this section and go straight to Step 2. Point the `$OMNIMUX_API_KEY` referenced in the configuration above to your real key. Below are both the **temporary** version (only valid in the current terminal window; gone once you close it — good for a first test run) and the **persistent** version (loaded automatically every time you open a terminal): **Temporary** (current terminal window; lost when closed): ```bash theme={null} export OMNIMUX_API_KEY=your_OmniMux_API_Key ``` **Persistent** (written to your shell config file; applied automatically in every new terminal): ```bash theme={null} # If you use zsh (the default on modern macOS) echo 'export OMNIMUX_API_KEY=your_OmniMux_API_Key' >> ~/.zshrc source ~/.zshrc # If you use bash echo 'export OMNIMUX_API_KEY=your_OmniMux_API_Key' >> ~/.bashrc source ~/.bashrc ``` Not sure which shell you're using? Run `echo $SHELL` in the terminal — if the output contains `zsh`, use `~/.zshrc`; if it contains `bash`, use `~/.bashrc`. **Temporary** (current PowerShell window; lost when closed): ```powershell theme={null} $env:OMNIMUX_API_KEY = "your_OmniMux_API_Key" ``` **Persistent** (written to user environment variables; applied in all new windows): ```powershell theme={null} setx OMNIMUX_API_KEY "your_OmniMux_API_Key" ``` `setx` **does not affect the current window**; **restart your terminal** (close and reopen PowerShell) for it to take effect. ## Step 2: Start Using and Verify ### 1. Select a Model Run the following command in your terminal to launch Pi: ```bash theme={null} pi ``` Inside the Pi session, type `/model` and press Enter in the command palette to open the model selector: The selector lists every OmniMux model configured in `models.json` (tagged `[omnimux]`). Use the arrow keys to highlight the model you want (such as `claude-fable-5`) and press Enter to confirm: Once a model is selected, the status bar at the bottom shows the current model, thinking level, and context usage (for example `claude-fable-5 · medium` and `0.0%/1.0M`), confirming the model catalog loaded successfully. The yellow hint "Only showing models from configured providers. Use /login to add providers." is expected — Pi only lists models from providers you have configured. Connecting through the OmniMux custom provider does not require `/login`. ### 2. Verify the Configuration After selecting a model, first enter a simple prompt to verify the model response: ``` who are you ``` Then enter a task that triggers a tool call to verify the agent capabilities: ``` List the files in the current directory and tell me which ones are Markdown files. ``` **What success looks like:** * You see the AI's normal reply (a few lines of text). * Pi can call the `ls` tool in the second task and continue responding. * There are **no** errors such as `401`, `404`, `model_not_found`, or `Unexpected role "tool"`. ## Troubleshooting The following is organized by **the actual error you see** — just find the one that matches. ### Returns `401` (Invalid API key) ``` {"code":"unauthorized","message":"Invalid API key (request id: ...)"} ``` Possible causes: * The environment variable didn't take effect (most common): run `test -n "$OMNIMUX_API_KEY" && echo "Key loaded" || echo "Key not loaded"` in the current terminal; on Windows, you need to **restart the terminal** after using `setx`. * The `apiKey` field is wrong: confirm that `models.json` contains `"$OMNIMUX_API_KEY"` (referencing the environment variable), rather than treating the variable name as a literal key. * `"authHeader": true` is missing: OmniMux's `/v1/messages` requires a Bearer token, so confirm this field is inside the same provider configuration as `apiKey`. * The key itself is invalid or has been disabled: check it in the [OmniMux console](https://omnimux.ai/dashboard). ### Returns `404 Invalid URL` ``` {"message":"Invalid URL (POST /v1/v1/messages)","type":"invalid_request_error"} ``` Cause: you **manually added an extra path** in `baseUrl`. Pi automatically appends `/v1/messages`, so change `baseUrl` back to the domain root: `https://api.omnimux.ai`. ### Returns `404 model_not_found` ``` {"code":"model_not_found","message":"Model '...' is not available for this API key ... Call GET /v1/models ..."} ``` Cause: the model ID is misspelled or the model is not enabled. Check that the `id` in `models.json` exactly matches the model name returned by the OmniMux console / `/v1/models`. ### Returns `400 Unexpected role "tool"` ```text theme={null} 400: messages: Unexpected role "tool". Allowed roles are "user" or "assistant". ``` **Cause**: the configuration is still using `api: "openai-completions"` with a Base URL ending in `/v1`. Pi sends agent tool results with OpenAI's `role: "tool"`, which the current Claude-compatible route does not accept. **Solution**: change these three provider fields: ```json theme={null} { "baseUrl": "https://api.omnimux.ai", "authHeader": true, "api": "anthropic-messages" } ``` This issue cannot be fixed with `supportsDeveloperRole` or `supportsReasoningEffort`, because the rejected role is the tool role, not the `developer` role or a reasoning parameter. Start a new session after updating the configuration. ## About Cost The `cost` field in the `models.json` above is OmniMux's actual price (a flat 10% discount, in USD per million tokens), for Pi to use as a reference when estimating usage: | Model | Input | Output | Cache Read | Cache Write | | --------------------------- | ------ | ------- | ---------- | ----------- | | `claude-fable-5` | \$9.00 | \$45.00 | \$0.90 | \$11.25 | | `claude-sonnet-5` | \$2.70 | \$13.50 | \$0.27 | \$3.375 | | `claude-haiku-4-5-20251001` | \$0.90 | \$4.50 | \$0.09 | \$1.125 | Cache Read is the price when the cache is hit (about 0.1× of Input). Actual savings depend on the cache hit rate; the larger the context, the less stable the hits, so the benefit is discounted — don't treat it as an unconditional low price. ## FAQ ### How do I open a command-line terminal? * Option 1: Press `Command + Space` to open Spotlight, type `Terminal`, and press Enter. * Option 2: Go to Applications → Utilities → Terminal. * Option 1: Press `Win + R`, type `powershell`, and press Enter. * Option 2: Search for "PowerShell" in the Start menu. * Press `Ctrl + Alt + T`, or search for "Terminal" in your application menu. ### 1. Why set `baseUrl` only to the domain root? Because Pi's `anthropic-messages` provider automatically appends `/v1/messages` after `baseUrl`. Adding `/v1` or `/v1/messages` manually duplicates the path and returns `404 Invalid URL`. Use only `https://api.omnimux.ai`. ### 2. Do I need to set `authHeader: true`? Yes. `authHeader: true` makes Pi attach an additional `Authorization: Bearer ` request header; OmniMux's `/v1/messages` uses Bearer authentication, while Pi's built-in Anthropic SDK only sends `x-api-key` by default, so omitting it causes a `401`. ### 3. Why does this guide follow the terminal CLI? Pi's official primary form is the **terminal CLI** (four run modes: interactive / print / JSON / RPC, plus embedding via the Node.js SDK). Configuring and verifying the OmniMux integration is all done in the CLI, which is stable and reliable. All steps in this guide follow the CLI. ### 4. How do I avoid writing the API Key in plaintext in the config? Use environment variable interpolation in the `apiKey` field (such as `"$OMNIMUX_API_KEY"`), keeping the real key in an environment variable. ### 5. Which common models does OmniMux support? OmniMux supports the full Claude family (it also supports GPT, Gemini, and more, which you can view in the console). For planning / complex reasoning, `claude-fable-5` is recommended; for everyday execution, use `claude-sonnet-5`; for lightweight tasks, use `claude-haiku-4-5-20251001`. ### 6. How do I check usage? Log in to the [OmniMux console](https://omnimux.ai/dashboard) to view request volume, consumption, and token usage. For more usage and configuration, refer to the [Pi official repository](https://github.com/earendil-works/pi). # ZCode Source: https://docs.omnimux.ai/en/integration-guide/zcode Configure OmniMux in ZCode Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients usually use `https://api.omnimux.ai/v1`). Create a `sk-` key in the [console](https://omnimux.ai/dashboard). Model ids: console or `GET /v1/models`. ## Prep 1. Install ZCode (official channel) 2. OmniMux API key ## Setup 1. Settings → **AI / Models / OpenAI-compatible** 2. Base URL `https://api.omnimux.ai/v1` 3. Key `sk-...` 4. Model id from OmniMux catalog ## Verify Trigger completion or chat once. # Account and billing Source: https://docs.omnimux.ai/en/faqs/account-billing Balance, points display, and support ## Where to see usage 1. [OmniMux console](https://omnimux.ai/dashboard) 2. Balance, request logs, model access User-facing display: **积分** and USD (`raw_quota ÷ 500000 = USD`, `1 USD = 10 积分`). Do not call raw\_quota “积分”. ## Top-up Follow the console checkout flow for real payments. ## Support * Console contact options * Email `hello@omnimux.ai` when listed on the site Include time, request id if any, model, and redacted error bodies. # Connection and usage Source: https://docs.omnimux.ai/en/faqs/connection-usage Base URL, auth, and common HTTP errors ## Wrong Base URL? | Surface | Base | | ----------------------------------- | ------------------------------------------------------- | | AI gateway / social data (`sk-`) | `https://api.omnimux.ai` or `https://api.omnimux.ai/v1` | | Publishing / device-login user APIs | `https://omnimux.ai` (access token + `New-Api-User`) | Do not mix the two credential surfaces. ## 401 / 403 / 402 / 429 | Status | Typical cause | | ------- | ----------------------------------------- | | **401** | Missing/invalid Bearer token | | **403** | Model or group not allowed for this token | | **402** | Insufficient quota on pre-consume | | **429** | Rate limited | ## Account quota errors on OpenAI text endpoints `POST /v1/completions`, `/v1/chat/completions`, `/v1/responses`, and `/v1/responses/compact` return **402** with `error.type` and `error.code` set to `insufficient_quota` when the local account balance or subscription quota cannot cover pre-consume. This includes zero balance and a positive balance below the required amount. ```json theme={null} { "error": { "message": "insufficient_quota: Account balance or subscription quota is insufficient for this request. 用户余额或订阅额度不足,无法完成此次请求。 (request id: ...)", "type": "insufficient_quota", "param": "", "code": "insufficient_quota" } } ``` A streaming request receives the same JSON error **before** an SSE stream starts. Treat this as a terminal quota failure: check the account balance or subscription allowance before trying again. Do not refresh credentials, switch channels, or retry with backoff solely because of this response. The message includes a request ID; detailed quota amounts remain in server diagnostics. This normalization is limited to local account-quota failures on these endpoints. Token validity/quota errors, upstream provider errors, and other API protocols keep their existing contracts. A genuine 401 or permission 403 still requires an authentication/access check; an ordinary 429 remains a rate-limit response. ## Unexpected content * Use live model ids * Chat needs valid `messages`; social-data needs business fields * Video poll: `GET /v1/video/generations/{task_id}` only — not `/v1/videos/*/content` for Omni Flash / MiniMax creates ## Cannot connect * Firewall/proxy TLS to `api.omnimux.ai` * Many OpenAI SDKs need base ending with `/v1` * Probe with `GET /v1/models` # Cost optimization Source: https://docs.omnimux.ai/en/faqs/cost-optimization Control spend under OmniMux quota, precharge, and settlement ## How billing is shown User-facing balance uses **积分 (points)**. Internal raw quota converts as: * `raw_quota ÷ 500000 = USD` * **1 USD = 10 积分** Use the [console](https://omnimux.ai/dashboard) for balance and usage. Account APIs (access token) expose profile/quota fields. ## How to control cost and quality via model tiers & dynamic groups OmniMux provides native **stateless per-request group routing**, allowing you to choose between cost optimization and production stability with a single API key: ### 1. Three invocation modes | Tier | Request Syntax | Typical Use Case | Billing & Routing | | :--------------------------- | :--------------------------------------------------------------------------------------------------------------------- | :----------------------------------- | :--------------------------------------------------------------------------------------------------------------- | | **Default Auto Mode** | Bare model name
`"model": "seedance-2-5"` | Onboarding, drafts, batch creation | Default for new keys. Resolves lowest-cost channels first with automatic cross-group retry for SLA protection. | | **Global Standard Tier** | Add `@standard` suffix
`"model": "seedance-2-5@standard"`
or `-H "X-Omnimux-Group: standard"` | Production pipelines, official SLA | Fixed **1.0 base multiplier**, routed to official or premier enterprise lines. | | **Model-Specific Discounts** | Add model-specific group
`"model": "seedance-2-5@seedance-cheap"`
`"model": "gemini-3.8-flash@gemini-cheap"` | Massive scaling, cost-sensitive jobs | Fixed custom discount (e.g. 75% off for Seedance Cheap, 70% off for Gemini Cheap), physically isolated channels. | ### 2. Code examples #### Method A: Model Suffix Syntax (Recommended for all clients/SDKs) ```json theme={null} { "model": "seedance-2-5@seedance-cheap", "prompt": "A peaceful ocean wave at sunrise, 4k" } ``` #### Method B: HTTP Header (Ideal for backend service integration) ```bash theme={null} curl -X POST "https://api.omnimux.ai/v1/chat/completions" \ -H "Authorization: Bearer sk-your-token" \ -H "Content-Type: application/json" \ -H "X-Omnimux-Group: gemini-cheap" \ -d '{ "model": "gemini-3.8-flash", "messages": [{"role": "user", "content": "Hello!"}] }' ``` *** ## How to reduce cost 1. **Pick the right model** — cheaper/smaller models for simple jobs; enum lists capability, not equal price. 2. **Cap generation** — set sensible `max_tokens` / `max_completion_tokens`. 3. **Bound multipliers** — image `n`, video duration, resolution affect precharge/settlement; out-of-range values return 400. 4. **Async video** — create often **precharges**, then **settles** on completion/refund path. Use realistic duration/specs. 5. **Cache** — cache identical chat or social-data reads on the client. 6. **Streaming** — `stream: true` can improve UX; abort early only if your product allows and you understand billing still follows live settlement. 7. **Watch 402** — insufficient balance fails pre-consume with **402** `insufficient_quota`. ## Avoid * Load-testing expensive video/image models with production keys * Calling raw\_quota “积分” in product UI * Guessing non-live model ids Balance, logs, and model access # Features and compatibility Source: https://docs.omnimux.ai/en/faqs/features OpenAI compatibility and product boundaries ## OpenAI-compatible? Primary text path follows **OpenAI Chat Completions**. Point clients at `https://api.omnimux.ai/v1` with an OmniMux `sk-` and live model ids. See [language complete reference](/en/api-reference/text-series/claude/complete). ## Modalities Live catalog only: language / image / video, plus social-data (read) and publishing (write, different auth). ## Why not identical to ChatGPT/Claude websites? APIs expose model capability, not each vendor’s product shell (browsing, memory UI, built-in tools). Manage context, system prompts, and tools yourself. ## Video tasks Create: `POST /v1/video/generations`\ Poll: `GET /v1/video/generations/{task_id}`\ Do not confuse with `/v1/videos/{id}/content` download. ## Agent-readable docs? Mintlify auto-generates machine-readable surfaces (no hand-maintained index): | URL | Purpose | | ------------------------------------------------------ | ---------------------------- | | [llms.txt](https://docs.omnimux.ai/llms.txt) | Page index for LLM discovery | | [llms-full.txt](https://docs.omnimux.ai/llms-full.txt) | Full-site Markdown dump | | [skill.md](https://docs.omnimux.ai/skill.md) | Product skill for agents | | [Docs MCP](https://docs.omnimux.ai/mcp) | Hosted docs search MCP | | Any page + `.md` | Single-page Markdown export | These stay in sync with published docs. Prefer them over scraping HTML. # Security and keys Source: https://docs.omnimux.ai/en/faqs/security API keys and access tokens ## Protect `sk-` keys * Never commit keys to public repos or ship them in frontend bundles * Prefer env vars / secret managers * Rotate immediately if leaked * Separate keys for dev/stage/prod ## Two credential surfaces | Credential | Use | | ---------------------------------- | ------------------------------------ | | `sk-` API key | Gateway inference, social-data reads | | User access token + `New-Api-User` | Device-login user APIs, publishing | Do not mix them casually. ## Hygiene * Limit automation tokens to required models/groups * Never log full secrets * Use `` placeholders in shared examples # OmniMux Source: https://docs.omnimux.ai/en/index All-in-one social media API for AI agents — one API to create and orchestrate content across platforms. Pay per call, no subscription. OmniMux is the **all-in-one social media API for AI agents**. **One API** to **create content and orchestrate multi-platform distribution**. **Pay per call, no subscription.** Delivered as REST API, local CLI, Agent Skill, and MCP Server so any agent can plug in. **Global channels**: X, LinkedIn, YouTube, Instagram, TikTok, Threads, and more under one abstraction and auth model (the product support matrix does **not** include mainland China domestic platforms). **Agent-first delivery**: send the product URL to your agent; install, init, and platform authorization can be completed by the agent. Production: console [omnimux.ai/dashboard](https://omnimux.ai/dashboard) · API `https://api.omnimux.ai` · docs [docs.omnimux.ai](https://docs.omnimux.ai). ## Platform advantages One capability surface as API, CLI, Skill, and MCP — meet your agent wherever it runs. Content production and multi-platform publishing share one interface — no two half-stack products or bills. X, LinkedIn, YouTube, Instagram, TikTok, Threads, and more with unified abstraction and auth. Free to install. Each action has a credit unit price, estimates before invoke, and usage returned with the response. ## Capabilities ### Content creation Multi-channel content and asset production, exposed as API and Skill for your agent to call — your agent keeps creative control. ### Multi-platform orchestration Close the loop on global channels. Orchestration sub-capabilities include: * **Publish** multi-platform posting and scheduling by platform rules * **Adapt** per-channel format, specs, and tone * **Distribute** account-matrix distribution at a human pace, fully auditable * **Collect** engagement and performance back into the next plan Messaging and promotion capabilities expand with the channel matrix as orchestration extensions. One call surface: create + orchestrate through one API. ## Core features **Unified auth** One key for creation and orchestration across channels. **Auditable execution** Idempotent publish; request, response, latency, and cost on every call. **Human-paced execution** Configurable pacing treats platform rules as constraints. **Stable routing** Intelligent routing fails over when upstream degrades; the contract and metering stay the same. # CC Switch Source: https://docs.omnimux.ai/en/integration-guide/cc-switch Configure OmniMux in CC Switch Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients usually use `https://api.omnimux.ai/v1`). Create a `sk-` key in the [console](https://omnimux.ai/dashboard). Model ids: console or `GET /v1/models`. ## Prep 1. Install CC Switch (per its official distribution) 2. OmniMux API key ## Setup 1. Add an OpenAI-compatible provider 2. Base URL `https://api.omnimux.ai/v1` (or root `https://api.omnimux.ai` if required) 3. Key `sk-...` and model id ## Verify Switch to OmniMux and run one request. # Cline Source: https://docs.omnimux.ai/en/integration-guide/cline Configure OmniMux in Cline Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients usually use `https://api.omnimux.ai/v1`). Create a `sk-` key in the [console](https://omnimux.ai/dashboard). Model ids: console or `GET /v1/models`. ## Prep 1. Install **Cline** in VS Code 2. OmniMux API key ## Setup 1. Cline sidebar → use your own API key 2. Provider: **OpenAI Compatible** 3. Base URL `https://api.omnimux.ai/v1`, Key `sk-...` 4. Model id from OmniMux ## Verify Run a small coding task in Cline. # CodeBuddy / WorkBuddy Source: https://docs.omnimux.ai/en/integration-guide/codebuddy-workbuddy Connect CodeBuddy and WorkBuddy to OmniMux ## Overview OmniMux uses a single gateway Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients typically use `https://api.omnimux.ai/v1`). Console: [omnimux.ai/dashboard](https://omnimux.ai/dashboard). Model IDs in this guide are examples — confirm with the console or `GET /v1/models`. CodeBuddy and WorkBuddy are AI tools launched by Tencent Cloud that support custom AI model integration through `models.json` configuration files. By integrating them with **OmniMux API**, you can directly use various AI model capabilities provided by OmniMux. CodeBuddy and WorkBuddy use the same configuration method. This document applies to both. ## Prerequisites ### Get OmniMux API Key * Log in to [OmniMux Console](https://omnimux.ai/dashboard) * Find API Keys in the console, click "Create New Key" button, and copy the generated key * API Key usually starts with `sk-`, please keep it safe ## Configuration Steps ### 1. Open Configuration File **CodeBuddy:** `~/.codebuddy/models.json` **WorkBuddy:** `~/.workbuddy/models.json` ### 2. Add OmniMux model configuration Edit the `models.json` file and add the following configuration: Currently only supports OpenAI SDK format API integration. ```json theme={null} { "models": [ { "id": "claude-sonnet-4-5-20250929", "name": "OmniMux Gateway (Smart Routing)", "vendor": "OmniMux", "apiKey": "sk-your-api-key-here", "url": "https://api.omnimux.ai/v1/chat/completions", "supportsToolCall": true, "supportsImages": true }, { "id": "gpt-5.4", "name": "OmniMux GPT-5.4", "vendor": "OpenAI", "apiKey": "sk-your-api-key-here", "url": "https://api.omnimux.ai/v1/chat/completions", "supportsToolCall": true, "supportsImages": true }, { "id": "doubao-seed-2.0-mini", "name": "OmniMux Doubao Seed 2.0 Mini", "vendor": "ByteDance", "apiKey": "sk-your-api-key-here", "url": "https://api.omnimux.ai/v1/chat/completions", "supportsToolCall": true, "supportsImages": true } ] } ``` Please replace `sk-your-api-key-here` with your actual OmniMux API Key. ### More Available Models In addition to the above examples, you can add the following models (same configuration format, add "OmniMux " prefix to name field): **GPT Series:** * `gpt-5.2` - OmniMux GPT-5.2 * `gpt-5.1` - OmniMux GPT-5.1 * `gpt-5.1-chat` - OmniMux GPT-5.1 Chat * `gpt-5.1-thinking` - OmniMux GPT-5.1 Thinking **Gemini Series:** * `gemini-2.5-pro` - OmniMux Gemini 2.5 Pro * `gemini-2.5-flash` - OmniMux Gemini 2.5 Flash * `gemini-3-pro-preview` - OmniMux Gemini 3.0 Pro * `gemini-3-flash-preview` - OmniMux Gemini 3.0 Flash **Doubao Seed 2.0 Series:** * `doubao-seed-2.0-pro` - OmniMux Doubao Seed 2.0 Pro * `doubao-seed-2.0-lite` - OmniMux Doubao Seed 2.0 Lite * `doubao-seed-2.0-code` - OmniMux Doubao Seed 2.0 Code **Kimi K2 Series:** * `kimi-k2-thinking` - OmniMux Kimi K2 Thinking * `kimi-k2-thinking-turbo` - OmniMux Kimi K2 Thinking Turbo ### 3. Save and Restart After saving the configuration file, the tool will automatically detect configuration changes and reload (1 second debounce delay). After configuration is complete, you can see all configured OmniMux models in the model selection dropdown: ## Using OmniMux Gateway Smart Routing ### What is OmniMux Gateway? OmniMux Gateway is an intelligent model routing feature that automatically selects the most suitable AI model based on your request content. ### Core Advantages * **Smart Matching**: Automatically analyzes request content and selects the most suitable model * **Cost Optimization**: Prioritizes cost-effective models while ensuring quality * **Load Balancing**: Automatically distributes requests among multiple models to improve system stability * **Transparent**: Returns the actual model name used in the response ### Usage Select "OmniMux Gateway (Smart Routing)" in the model selection dropdown. ## Limit Available Model List If you only want to display specific models in the dropdown, you can use the `availableModels` field: ```json theme={null} { "models": [ // ... model configuration ], "availableModels": [ "claude-sonnet-4-5-20250929", "gpt-5.4", "doubao-seed-2.0-mini" ] } ``` ## FAQ ### 1. Where is the configuration file? **CodeBuddy:** * macOS/Linux: `~/.codebuddy/models.json` * Windows: `C:\Users\\.codebuddy\models.json` **WorkBuddy:** * macOS/Linux: `~/.workbuddy/models.json` * Windows: `C:\Users\\.workbuddy\models.json` ### 2. Does it support project-level configuration? Yes. In addition to user-level configuration, you can create configuration files in the project root directory: **CodeBuddy:** `/.codebuddy/models.json` **WorkBuddy:** `/.workbuddy/models.json` Project-level configuration has higher priority than user-level configuration. It is recommended to configure global models at the user level and project-specific models at the project level. ### 3. What if the configuration doesn't work? 1. Check if the JSON format is correct (use a JSON validator) 2. Confirm the API Key is correct 3. Try restarting the application ### 4. Which models are supported? OmniMux supports models from OpenAI, Anthropic, Google and other vendors. See the console, `GET /v1/models`, or a language contract page such as [Claude · Complete API Reference](/en/api-reference/text-series/claude/complete). ### 5. Is the API Key secure? The API Key is stored in the local configuration file and will not be uploaded to the cloud. It is recommended to set file permissions to prevent unauthorized access. ## Related Links * [OmniMux Console](https://omnimux.ai/dashboard) * [CodeBuddy Official Documentation](https://www.codebuddy.cn/docs) * [OmniMux API Documentation](/docs/en/api-manual) # Cursor Source: https://docs.omnimux.ai/en/integration-guide/cursor Configure OmniMux in Cursor Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients usually use `https://api.omnimux.ai/v1`). Create a `sk-` key in the [console](https://omnimux.ai/dashboard). Model ids: console or `GET /v1/models`. ## Prep 1. Install [Cursor](https://cursor.com/) 2. OmniMux API key ## Setup 1. **Settings → Models** 2. Enable **OpenAI API Key** and **Override OpenAI Base URL** 3. Base URL: `https://api.omnimux.ai/v1` 4. Key: OmniMux `sk-...` 5. Add custom model names matching OmniMux ids ## Verify Send a Chat/Composer request. # Dify Source: https://docs.omnimux.ai/en/integration-guide/dify Configure OmniMux in Dify Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients usually use `https://api.omnimux.ai/v1`). Create a `sk-` key in the [console](https://omnimux.ai/dashboard). Model ids: console or `GET /v1/models`. ## Prep 1. [Dify](https://dify.ai/) cloud or self-host 2. OmniMux API key ## Setup 1. Avatar → **Settings** → **Model Provider** 2. OpenAI / OpenAI-API-compatible custom endpoint 3. Key `sk-...`, Base URL `https://api.omnimux.ai/v1` 4. Add model names matching OmniMux ids ## Verify Chat in an app with that model. # Hermes Agent Source: https://docs.omnimux.ai/en/integration-guide/hermes Connect Hermes Agent to OmniMux ## Overview OmniMux uses a single gateway Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients typically use `https://api.omnimux.ai/v1`). Console: [omnimux.ai/dashboard](https://omnimux.ai/dashboard). Model IDs in this guide are examples — confirm with the console or `GET /v1/models`. Hermes Agent is an open-source, terminal-native autonomous AI agent (a command-line tool) from [Nous Research](https://nousresearch.com). It features persistent memory, self-created skills, and a messaging gateway supporting 21+ platforms (Telegram, Discord, Slack, WhatsApp, Signal, Matrix, and more). It can run across a variety of backend environments including local, Docker, SSH, and Modal. Hermes Agent supports a wide range of large model providers and also supports **custom OpenAI-compatible endpoints**. By configuring and integrating Hermes Agent with the **OmniMux API**, you can use OmniMux's Claude, GPT, Gemini, and other model families directly from your terminal, enabling multi-model access through a single unified key. **Note the distinction:** Hermes **Agent** is an open-source command-line application (MIT licensed). It is not the same as Nous Research's Hermes 3 / Hermes 4 **models**. This guide covers the Hermes Agent tool. ## Before You Begin Before starting the configuration, make sure you have completed the following preparations: ### 1. System and Model Requirements * **Terminal environment**: Hermes Agent runs in the command line on macOS, Linux, and Windows (native or WSL2). * **Model context requirement**: Hermes Agent recommends using a **model with a context length of at least 64K (64,000) tokens**. Because the system prompt and tool definitions themselves consume a significant amount of context, a window that is too small may fill up and leave no room for conversation, causing it to be rejected at startup. If you encounter context-related errors, simply switch to a model with a larger context (OmniMux's Claude / Gemini families all meet this requirement). ### 2. Get an OmniMux API Key * Log in to the [OmniMux console](https://omnimux.ai/dashboard) * Find API Keys in the console, click the "Create New Key" button, then copy the generated key * The API Key usually starts with `sk-`. Please keep it safe. ## Step 1: Install Hermes Agent **Tip:** If you don't know how to open a command-line terminal, see [FAQ - How to open a command-line terminal](#11-how-to-open-a-command-line-terminal) Run the one-line install script in your terminal: ```bash theme={null} curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash ``` Once installation is complete, reload your terminal configuration to make the command take effect: ```bash theme={null} source ~/.zshrc # or source ~/.bashrc ``` **First run: choose an installation method (Quick or Full)** Running `hermes` for the first time launches an interactive install wizard, which first asks how you would like to set up Hermes: * **Quick Setup (Nous Portal)** — Sign in via the free Nous OAuth, **no API Key required**, with models and tools configured automatically for the fastest start. However, it uses Nous Portal's models by default, **not OmniMux**. To connect OmniMux, you'll need to run `hermes model` separately after installation (see [Step 2](#step-2-configure-the-omnimux-api-quick-users-or-reconfiguration)). * **Full setup** — You configure each provider, tool, and option yourself (using your own key). **This is the recommended option for users who want to connect OmniMux directly**, as you can enter OmniMux's endpoint URL and key in one go during installation. Below we demonstrate a few key steps for choosing **Full setup** to connect OmniMux: Use the arrow keys to select **Full setup — configure every provider, tool & option yourself (bring your own keys)**, then press Enter to confirm. In the provider list, scroll down and select **custom endpoint (enter URL manually)**. Because OmniMux provides an **OpenAI-compatible endpoint**, you connect via the "custom endpoint" option here. The wizard will prompt you for the endpoint details in turn: * **API base URL**: enter `https://api.omnimux.ai/v1` * **API key**: enter your OmniMux API Key (starting with `sk-`) After you enter them, the wizard automatically validates the endpoint. If you see a message like `Verified endpoint via https://api.omnimux.ai/v1/models (154 model(s) visible)`, the endpoint is connected and the key is valid. Then follow the prompts to continue selecting a default model and tools. **Expected result:** After completing the wizard, an **Installation Complete** page is displayed, listing the configuration file locations and common commands. WSL2 and Android (Termux) environments also use the `install.sh` script above to install. Open PowerShell **as an administrator** (the title bar will show "Administrator: Windows PowerShell"), then run the one-line install command: ```powershell theme={null} iex (irm https://hermes-agent.nousresearch.com/install.ps1) ``` The script automatically checks for and prepares dependencies such as uv, Python, Git, Node.js, ripgrep, and ffmpeg, and installs Hermes Agent into the `C:\Users\\AppData\Local\hermes\` directory. **If it errors:** If you get an execution policy restriction, make sure PowerShell is opened as an administrator, or run `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned` first and then retry. Once installation is complete, **restart your terminal** as prompted (close and reopen PowerShell) so that the PATH change for the `hermes` command takes effect. **First run: choose an installation method (Quick / Full / Blank Slate)** Running `hermes` for the first time launches an interactive install wizard, which first asks how you would like to set up Hermes. On Windows you make a selection by **typing the number + Enter**: * **Quick Setup (Nous Portal)** — Sign in via the free Nous OAuth, **no API Key required**, with models and tools configured automatically for the fastest start. However, it uses Nous Portal's models by default, **not OmniMux**. To connect OmniMux, you'll need to run `hermes model` separately after installation (see [Step 2](#step-2-configure-the-omnimux-api-quick-users-or-reconfiguration)). * **Full setup** — You configure each provider, tool, and option yourself (using your own key). **This is the recommended option for users who want to connect OmniMux directly**, as you can enter OmniMux's endpoint URL and key in one go during installation. * **Blank Slate** — Keeps only the minimum functionality, with everything else enabled individually as needed. Suitable for advanced users. Below we demonstrate the key steps for typing `2` to choose **Full setup** and connect OmniMux: At the `How would you like to set up Hermes?` prompt, type `2` (i.e. **Full setup — configure every provider, tool & option yourself**) and press Enter to confirm. In the provider list, scroll down to find **custom endpoint (enter URL manually)**, type its corresponding number (such as `31` in the example) and press Enter. Because OmniMux provides an **OpenAI-compatible endpoint**, you connect via the "custom endpoint" option here. The wizard will prompt you for the endpoint details in turn: * **API base URL**: enter `https://api.omnimux.ai/v1` * **API key**: enter your OmniMux API Key (starting with `sk-`, masked with `*` as you type) * **API compatibility mode**: select **Chat Completions** or keep **Auto-detect \[current]** (just press Enter) After you enter them, the wizard automatically validates the endpoint. If you see a message like `Verified endpoint via https://api.omnimux.ai/v1/models (169 model(s) visible)`, the endpoint is connected and the key is valid. At the `Select model [1-N] or type name:` prompt at the bottom of the model list, type the name of the model you want as the default (such as `claude-opus-5`) and press Enter. You can press Enter to accept the defaults for `Context length` and `Display name`. **Expected result:** After completing the wizard, an **Installation Complete** page is displayed, listing the configuration file locations on Windows (`config.yaml`, `.env`, etc. under `C:\Users\\AppData\Local\hermes\`) and common commands, and prompting you to **Restart your terminal for PATH changes to take effect**. On Windows, this guide's configuration files are located in `C:\Users\\AppData\Local\hermes\` (rather than `~/.hermes/` on macOS / Linux). The `~/.hermes/.env` and `~/.hermes/config.yaml` referenced later in this guide correspond to the `.env` and `config.yaml` in that directory on Windows. macOS and Windows users can also download the Hermes Desktop installer from the [Hermes website](https://hermes-agent.nousresearch.com) and install it with a double-click. ### Verify the Installation Run the diagnostic command to check the installation status: ```bash theme={null} hermes doctor ``` **Success indicator:** The environment check results are displayed, with no fatal installation-related errors reported. To update to the latest version, run `hermes update`. ## Step 2: Configure the OmniMux API (Quick Users or Reconfiguration) If you already completed the OmniMux integration via **Full setup** in Step 1 and passed endpoint validation, you can skip directly to [Step 3](#step-3-start-using-and-verify). This step is mainly for users who chose **Quick Setup**, or for scenarios where you need to reconfigure / switch models. Hermes Agent is configured through files in the `~/.hermes/` directory, where: * `~/.hermes/.env` — stores secrets such as API keys * `~/.hermes/config.yaml` — stores non-secret configuration such as models and providers Because OmniMux provides an **OpenAI-compatible endpoint**, we set Hermes' provider to `custom` (custom endpoint) with the endpoint URL pointing to `https://api.omnimux.ai/v1`. Hermes provides an interactive setup wizard, suitable for new users (especially those who chose Quick Setup). Run in your terminal: ```bash theme={null} hermes model ``` In the provider list, scroll down and select **custom endpoint (enter URL manually)** to connect to OmniMux's OpenAI-compatible endpoint. Enter the endpoint details in turn, and after validation passes, select the API compatibility mode: * **API base URL**: enter `https://api.omnimux.ai/v1` * **API key**: enter your OmniMux API Key (starting with `sk-`) * **API compatibility mode**: select **Chat Completions (standard OpenAI-compatible endpoints)** Seeing a message like `Verified endpoint via https://api.omnimux.ai/v1/models (163 model(s) visible)` means the endpoint is connected and the key is valid. Finally, enter the name of the model you want as the default (such as `claude-opus-5`) and press Enter to confirm. The wizard automatically writes the API Key to `~/.hermes/.env` and the model and endpoint configuration to `~/.hermes/config.yaml`, with no need to edit files manually. `hermes model` is the most critical step for Quick users to connect OmniMux. Once done, you can proceed directly to the next step and start using it. If you already have your OmniMux API Key, you can write the configuration directly from the command line. ### 1. Set the API Key (writes to .env) ```bash theme={null} hermes config set OPENAI_API_KEY your_OmniMux_API_Key ``` ### 2. Set the endpoint URL and model (writes to config.yaml) ```bash theme={null} hermes config set OPENAI_BASE_URL https://api.omnimux.ai/v1 hermes config set model claude-opus-5 ``` `hermes config set` automatically writes API-key-type secrets to `.env` and the remaining configuration to `config.yaml`, so you don't need to worry about which file it goes to. Once done, run `hermes config` to check whether the current configuration is correct. **Advanced users:** The following approach edits the configuration files directly. Most users are recommended to use the "Setup Wizard" above. ### 1. Edit \~/.hermes/.env Open (or create) `~/.hermes/.env` and write in the API Key and endpoint URL: ```bash theme={null} OPENAI_API_KEY=your_OmniMux_API_Key OPENAI_BASE_URL=https://api.omnimux.ai/v1 ``` ### 2. Edit \~/.hermes/config.yaml Open (or create) `~/.hermes/config.yaml` and configure the main model as a custom endpoint: ```yaml theme={null} model: provider: custom default: claude-opus-5 base_url: https://api.omnimux.ai/v1 api_mode: chat_completions ``` **⚠️ Important notes:** * Replace `your_OmniMux_API_Key` with your actual API Key * `base_url` must be `https://api.omnimux.ai/v1` (OmniMux's OpenAI-compatible endpoint URL) * Do not enter punctuation using a Chinese input method (such as the full-width colon `:`) **Configuration item descriptions:** * `provider: custom`: use a custom OpenAI-compatible endpoint (i.e., OmniMux) * `base_url`: the OmniMux API endpoint URL * `api_mode: chat_completions`: use the standard Chat Completions interface * `default`: the default model name to use ## Step 3: Start Using and Verify ### 1. Launch Hermes Agent ```bash theme={null} hermes # classic command-line mode ``` Or use the modern TUI interface (recommended): ```bash theme={null} hermes --tui # modern terminal interface ``` ### 2. Verify the Configuration After launching, enter a simple prompt to verify, for example: ``` who are you ``` **Success indicators:** * You see the AI's reply (a few lines of text) * There are **no** errors such as `401`, `403`, invalid `API key`, or `context length` **If you see an error:** * `401 Unauthorized`: the API Key is not set or invalid → check `OPENAI_API_KEY` in `~/.hermes/.env` * `403 Forbidden`: the API Key has insufficient permissions or has expired → check the API Key * `context length` related errors: the selected model has less than 64K context → switch to a model that meets the requirement * `No API key` / provider not found: no key found → run `hermes config set OPENAI_API_KEY ...` again ### 3. Resume a Previous Session ```bash theme={null} hermes --continue # resume the most recent session hermes -c # shorthand form ``` ## Advanced Configuration (Optional) The following configurations all edit `~/.hermes/config.yaml` (on Windows, edit the `config.yaml` file in the corresponding folder). Use them as needed. ### Fallback Models When a request to the main model fails, Hermes can automatically switch to a fallback model without losing the current session. You can configure a fallback chain that all routes through OmniMux: ```yaml theme={null} fallback_providers: - provider: custom model: claude-sonnet-4-6 base_url: https://api.omnimux.ai/v1 - provider: custom model: claude-haiku-4-5-20251001 base_url: https://api.omnimux.ai/v1 ``` ### Auxiliary Models Hermes uses "auxiliary models" to handle some secondary tasks (such as context compression, session titles, web summaries, etc.). By default it uses the main model, but you can route these to a cheaper/faster model to save costs: ```yaml theme={null} auxiliary: title_generation: provider: custom model: claude-haiku-4-5-20251001 base_url: https://api.omnimux.ai/v1 api_key: your_OmniMux_API_Key compression: provider: custom model: claude-haiku-4-5-20251001 base_url: https://api.omnimux.ai/v1 api_key: your_OmniMux_API_Key ``` This way the main model focuses on complex reasoning, while lightweight tasks are handled by a cheaper model. ## FAQ ### 1. What is Hermes Agent? What is it mainly used for? Hermes Agent is an open-source, terminal-native autonomous AI agent from Nous Research. It features persistent memory and self-created skills, and can handle coding assistance, task automation, Q\&A conversations, and more from the command line, while supporting integration with various chat platforms through a messaging gateway. ### 2. Are Hermes Agent and the Hermes 3 / Hermes 4 models the same thing? No. Hermes **Agent** is an open-source command-line tool; Hermes 3 / Hermes 4 are Nous Research's large language **model** families. This guide covers the Hermes Agent tool, which can connect to a variety of model providers including OmniMux. ### 3. Why use `provider: custom` to connect OmniMux? Because OmniMux provides a standard **OpenAI-compatible endpoint**. Hermes supports a variety of providers, and `custom` (custom OpenAI-compatible endpoint) is exactly the way to connect to this type of compatible interface. So in Hermes, connect OmniMux with `provider: custom` and set the endpoint URL to `https://api.omnimux.ai/v1`. ### 4. What should I do if I get a context length error at startup? Hermes Agent recommends using a model with at least 64K tokens of context. Because the system prompt and tool definitions consume a significant amount of context, a window that is too small may fill up and leave no room for conversation, causing it to be rejected at startup. Please switch to a model with a larger context (such as OmniMux's Claude family). ### 5. What usually causes 401 / 403 errors? * **401 error**: `OPENAI_API_KEY` is not set or the API Key is invalid * **403 error**: the API Key has insufficient permissions or has expired * Please check the key in `~/.hermes/.env`, and whether `base_url` is `https://api.omnimux.ai/v1` ### 6. Why didn't my configuration changes take effect? * Confirm the configuration was written to the correct file: the API Key goes in `~/.hermes/.env`, and the model/endpoint goes in `~/.hermes/config.yaml` * Run `hermes config` to see the configuration currently in effect * Check whether the indentation and syntax in `config.yaml` are correct (YAML is indentation-sensitive) * Restart Hermes ### 7. How do I switch models? * Interactive: run `hermes model` to reselect * Command line: run `hermes config set model model_name` * Edit the `model.default` value in `~/.hermes/config.yaml` directly ### 8. Which common models does OmniMux support? OmniMux supports the following Claude models (it also supports GPT, Gemini, and other families, which you can view in the console): | Model name | Description | | ---------------------------- | -------------------- | | `claude-haiku-4-5-20251001` | Fast response | | `claude-sonnet-4-5-20250929` | Balanced performance | | `claude-opus-4-5-20251101` | Advanced version | | `claude-sonnet-4-6` | Latest version | | `claude-sonnet-5` | Latest version | | `claude-opus-5` | Latest version | | `claude-opus-4-8` | Latest version | | `claude-opus-4-7` | Latest version | ### 9. How do I check usage? Log in to the [OmniMux console](https://omnimux.ai/dashboard) to view request volume, consumption, and token usage. ### 10. Where are the configuration file and secret file located? * Secrets (API Key): `~/.hermes/.env` * Model and provider configuration: `~/.hermes/config.yaml` * Run `hermes config edit` to open the configuration file for editing directly. ### 11. How to open a command-line terminal? * Method 1: Press `Win + R`, type `powershell`, and press Enter * Method 2: Search for "PowerShell" in the Start menu * Method 3: Hold Shift in a folder, right-click an empty area, and select "Open PowerShell window here" * Method 1: Press `Command + Space` to open Spotlight, type `Terminal`, and press Enter * Method 2: Go to "Applications" → "Utilities" → "Terminal" * Method 1: Press the `Ctrl + Alt + T` shortcut * Method 2: Search for "Terminal" in the applications menu ## Notes We recommend launching Hermes Agent inside a dedicated project folder, and avoid running it in sensitive directories (such as system directories or directories containing secrets). Hermes Agent is an autonomous agent and performs file operations starting from the current working directory. For more usage and configuration, refer to the [Hermes Agent official documentation](https://hermes-agent.nousresearch.com/docs) and [GitHub repository](https://github.com/NousResearch/hermes-agent). # Immersive Translate Source: https://docs.omnimux.ai/en/integration-guide/immersive-translate Configure OmniMux in Immersive Translate Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients usually use `https://api.omnimux.ai/v1`). Create a `sk-` key in the [console](https://omnimux.ai/dashboard). Model ids: console or `GET /v1/models`. ## Prep 1. Install [Immersive Translate](https://immersivetranslate.com/) 2. OmniMux API key ## Setup 1. Extension settings → **Translation service** → OpenAI / custom OpenAI 2. Key `sk-...` 3. API URL `https://api.omnimux.ai/v1` 4. Model id from OmniMux text catalog ## Verify Translate a page once. # n8n Source: https://docs.omnimux.ai/en/integration-guide/n8n Configure OmniMux in n8n Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients usually use `https://api.omnimux.ai/v1`). Create a `sk-` key in the [console](https://omnimux.ai/dashboard). Model ids: console or `GET /v1/models`. ## Prep 1. Self-host or cloud [n8n](https://n8n.io/) 2. OmniMux API key ## Setup 1. Use **OpenAI** node or **HTTP Request** 2. Auth: `Authorization: Bearer sk-...` 3. URL: `https://api.omnimux.ai/v1/chat/completions` 4. Body: ```json theme={null} { "model": "gpt-5.4", "messages": [{"role": "user", "content": "hello"}] } ``` ## Verify Run the node and inspect `choices[0].message`. # OpenClaw manual installation Source: https://docs.omnimux.ai/en/integration-guide/openclaw Manually install and configure OpenClaw Gateway with OmniMux multi-protocol providers ## Overview OmniMux uses a single gateway Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients typically use `https://api.omnimux.ai/v1`). Console: [omnimux.ai/dashboard](https://omnimux.ai/dashboard). Model IDs in this guide are examples — confirm with the console or `GET /v1/models`. OpenClaw is an open-source AI agent Gateway that acts as a bridge between chat applications and AI agents. Through a centralized Gateway process, it can connect chat platforms like Telegram, WhatsApp, Discord, and Feishu to AI programming agents. This document describes how to manually install OpenClaw and configure **OmniMux API** as a model provider. After completing this document, you can continue to configure specific chat channels (such as Telegram or Feishu). **This guide covers:** * Installing and configuring OpenClaw Gateway * Configuring OmniMux API as a custom model provider * Verifying the installation ## System Environment Check (Optional) Before starting the installation, it's recommended to run the environment check tool to ensure your system meets OpenClaw's requirements. ### Download the Check Tool Download the check tool for your platform from [GitHub Releases](https://github.com/suuuuuu-1/openclaw-env-checker/releases): | Platform | Filename | | --------------------- | ------------------------------ | | Windows | `openclaw-checker-win-x64.exe` | | macOS (Intel) | `openclaw-checker-macos-x64` | | macOS (Apple Silicon) | `openclaw-checker-macos-arm64` | | Linux | `openclaw-checker-linux-x64` | ### Check Items The tool will automatically check the following: * ✅ Node.js version (requires >= 22.12.0) * ✅ npm available * ✅ Git available * ✅ Network connectivity (github.com, npmjs.org, omnimux.ai) If the check fails, the tool will provide specific fix suggestions. ## Prerequisites Before starting configuration, ensure you have completed the following: ### 1. Install Node.js OpenClaw is installed via npm and requires Node.js 22 or higher. Visit [Node.js official website](https://nodejs.org/en/download), download the Windows installer (.msi file), and run the installation program. After installation, open PowerShell to verify: ```bash theme={null} node --version npm --version ``` It's recommended to run PowerShell as administrator to avoid permission issues during installation. **Method 1: Using Installer** Visit [Node.js official website](https://nodejs.org/en/download), download the macOS installer (.pkg file), and run the installation program. **Method 2: Using Homebrew** ```bash theme={null} brew install node ``` After installation, open Terminal to verify: ```bash theme={null} node --version npm --version ``` If you encounter permission issues during installation, you may need to add `sudo` before the command. ### 2. Get OmniMux API Key * Log in to [OmniMux Console](https://omnimux.ai/dashboard) * Find API Keys in the console, click "Create New Key", then copy the generated Key * API Key usually starts with `sk-`, please keep it safe ## Step 1: Install OpenClaw Execute in terminal: ```bash theme={null} npm install -g openclaw@latest ``` Verify after installation: ```bash theme={null} openclaw --version ``` ## Step 2: Initialize Setup Run the onboarding command, OpenClaw will guide you through initial configuration and install the daemon service: ```bash theme={null} openclaw onboard --install-daemon ``` ### 1. Confirm Installation The system will prompt installation risk notice, confirm to continue: ### 2. Select Installation Mode The system will prompt to select installation mode, choose **Quickstart**: ### 3. Select Provider The system will prompt to select model provider, choose **Skip** here, we will manually configure OmniMux as a custom provider later: ### 4. Select Models The system will prompt to select models to enable, choose **All**: ### 5. Select Default Model The system will prompt to select default model, choose **Keep current**: ### 6. Select Channel The system will prompt to select a chat channel. It's recommended to choose **Skip for now**, you can add channels later: ### 7. Configure Skills The system will prompt whether to configure Skills. It's recommended to choose **No**, you can add them later: ### 8. Enable Hooks The system will prompt whether to enable Hooks. It's recommended to choose **session-memory**: ### 9. Restart Gateway Service The system will prompt that the gateway service is already installed, choose **Restart**: ### 10. Launch Bot The system will prompt how to launch the bot. It's recommended to choose **Do this later**: ## Step 3: Configure OmniMux API & Model Switching ### 1. Locate Two Configuration Files (Important) OpenClaw model configuration typically involves two files: * `openclaw.json`: `%USERPROFILE%\.openclaw\openclaw.json` * `models.json`: `%USERPROFILE%\.openclaw\agents\main\agent\models.json` * `openclaw.json`: `~/.openclaw/openclaw.json` * `models.json`: `~/.openclaw/agents/main/agent/models.json` Open directly: ```bash theme={null} open ~/.openclaw/openclaw.json open ~/.openclaw/agents/main/agent/models.json ``` If a provider's `apiKey` / `baseUrl` in `models.json` is non-empty, it will override the corresponding values in `openclaw.json`. It's recommended to keep both consistent. ### 2. Configure Model Providers It's recommended to configure the following providers in `openclaw.json` (and sync to `models.json`): ```json theme={null} "models": { "providers": { "omnimux-anthropic": { "api": "anthropic-messages", "baseUrl": "https://api.omnimux.ai", "apiKey": "Your OmniMux API Key", "models": [ { "id": "claude-sonnet-4-5-20250929", "name": "OmniMux 网关" }, { "id": "claude-fable-5", "name": "Claude Fable 5" }, { "id": "claude-opus-5", "name": "Claude Opus 5" }, { "id": "claude-opus-4-8", "name": "Claude Opus 4.8" }, { "id": "claude-opus-4-7", "name": "Claude Opus 4.7" }, { "id": "claude-opus-4-6", "name": "Claude Opus 4.6" }, { "id": "claude-sonnet-4-6", "name": "Claude Sonnet 4.6" }, { "id": "claude-sonnet-5", "name": "Claude Sonnet 5" }, { "id": "claude-opus-4-5-20251101", "name": "Claude Opus 4.5" }, { "id": "claude-sonnet-4-5-20250929", "name": "Claude Sonnet 4.5" }, { "id": "claude-haiku-4-5-20251001", "name": "Claude Haiku 4.5" } ] }, "omnimux-google": { "api": "google-generative-ai", "baseUrl": "https://api.omnimux.ai/v1beta", "apiKey": "Your OmniMux API Key", "models": [ { "id": "claude-sonnet-4-5-20250929", "name": "OmniMux 网关" }, { "id": "gemini-3.1-flash-lite-preview", "name": "Gemini 3.1 Flash Lite" }, { "id": "gemini-3.1-pro-preview", "name": "Gemini 3.1 Pro" }, { "id": "gemini-2.5-pro", "name": "Gemini 2.5 Pro" }, { "id": "gemini-2.5-flash", "name": "Gemini 2.5 Flash" }, { "id": "gemini-3-pro-preview", "name": "Gemini 3.0 Pro" }, { "id": "gemini-3-flash-preview", "name": "Gemini 3.0 Flash" } ] }, "omnimux-openai": { "api": "openai-completions", "baseUrl": "https://api.omnimux.ai/v1", "apiKey": "Your OmniMux API Key", "models": [ { "id": "gpt-5.4", "name": "GPT-5.4" }, { "id": "gpt-5.2", "name": "GPT-5.2" }, { "id": "gpt-5.1", "name": "GPT-5.1" }, { "id": "gpt-5.1-chat", "name": "GPT-5.1 Chat" }, { "id": "gpt-5.1-thinking", "name": "GPT-5.1 Thinking" }, { "id": "gemini-2.5-pro", "name": "Gemini 2.5 Pro (OpenAI SDK)" }, { "id": "gemini-2.5-flash", "name": "Gemini 2.5 Flash (OpenAI SDK)" }, { "id": "gemini-3-pro-preview", "name": "Gemini 3.0 Pro (OpenAI SDK)" }, { "id": "gemini-3-flash-preview", "name": "Gemini 3.0 Flash (OpenAI SDK)" }, { "id": "doubao-seed-2.0-pro", "name": "Doubao Seed 2.0 Pro" }, { "id": "doubao-seed-2.0-lite", "name": "Doubao Seed 2.0 Lite" }, { "id": "doubao-seed-2.0-mini", "name": "Doubao Seed 2.0 Mini" }, { "id": "doubao-seed-2.0-code", "name": "Doubao Seed 2.0 Code" }, { "id": "kimi-k2-thinking", "name": "Kimi K2 Thinking" }, { "id": "kimi-k2-thinking-turbo", "name": "Kimi K2 Thinking Turbo" } ] } } } ``` The model IDs above are examples. Please use the models actually available in your OmniMux account. For Gemini scenarios, `omnimux-google.baseUrl` must include `/v1beta`, i.e., `https://api.omnimux.ai/v1beta`. Without this suffix, you may encounter `Forbidden (403)` errors. ### 3. Configure Default Model (Supports Quick Switching) Set the default model in `agents.defaults`. We recommend using Smart Model Routing `claude-sonnet-4-5-20250929`, which automatically selects a suitable model based on your request: ```json theme={null} "agents": { "defaults": { "model": { "primary": "omnimux-anthropic/claude-sonnet-4-5-20250929" } } } ``` **Smart Model Routing (OmniMux gateway)**: Use `claude-sonnet-4-5-20250929` as the model ID, and the system will automatically select a suitable model from the model pool based on request complexity, length, and type. No manual switching needed — ideal for most general-purpose scenarios. List models via the console, `GET /v1/models`, or a language contract page such as [Claude · Complete API Reference](/en/api-reference/text-series/claude/complete). To specify a particular model, you can also switch manually: * Smart Routing: `omnimux-anthropic/claude-sonnet-4-5-20250929` (Recommended) * Claude: `omnimux-anthropic/claude-opus-5` * GPT: `omnimux-openai/gpt-5.2` * Gemini: `omnimux-google/gemini-3.1-pro-preview` * Doubao: `omnimux-openai/doubao-seed-2.0-mini` ### 4. Quick Switch to OmniMux Models (Recommended) After completing provider configuration, it's recommended to use CLI commands for model switching instead of manually editing JSON: ```bash theme={null} # View configured OmniMux OpenAI-compatible models openclaw models list --provider omnimux-openai --plain # Switch default model (example: gpt-5.4) openclaw models set omnimux-openai/gpt-5.4 # View current active model openclaw models status --plain ``` If `models list --provider omnimux-openai` doesn't show your expected models, check whether both `openclaw.json` and `models.json` have the corresponding provider configured. ### 5. Restart and Verify Restart the gateway after configuration: ```bash theme={null} openclaw gateway restart ``` Check status: ```bash theme={null} openclaw gateway status ``` Send a test message to verify the model is working: ```bash theme={null} openclaw agent --agent main -m "hi" --json ``` ## Common Commands | Command | Description | | -------------------------- | ------------------------------ | | `openclaw gateway status` | Check gateway running status | | `openclaw gateway restart` | Restart gateway service | | `openclaw gateway stop` | Stop gateway service | | `openclaw gateway start` | Start gateway service | | `openclaw logs --follow` | View gateway logs in real-time | | `openclaw plugins list` | View installed plugins | ## Troubleshooting | Issue | Solution | | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------- | | npm installation fails | Windows: Run PowerShell as administrator; macOS: Add `sudo` before command | | Configuration file not found | Confirm onboard process is complete, check if `~/.openclaw/` directory exists | | Gateway fails to start | Check if port is occupied, use `openclaw gateway status` to view detailed errors | | Invalid API Key | Confirm API Key is copied correctly, check for extra spaces or quotes | | Model configuration not effective | Check both `openclaw.json` and `models.json` for consistency (`models.json` may override) | | Gemini returns `Forbidden (403)` | Check if `models.providers.omnimux-google.baseUrl` is `https://api.omnimux.ai/v1beta` (must include `/v1beta`) | | Old model still used after switching | Run `openclaw models status --plain` to confirm current model, restart with `openclaw gateway restart` if necessary | ## Next Steps OpenClaw installation and OmniMux API configuration are complete. Next you can: * **Configure Telegram Channel**: Refer to [OpenClaw + Telegram](/en/integration-guide/openclaw-telegram) documentation * **Configure Feishu Channel**: Refer to [OpenClaw + Feishu](/en/integration-guide/openclaw-feishu) documentation * **Use Auto-Installation Tool**: Refer to [OpenClaw Auto Installation](/en/integration-guide/openclaw-auto) documentation # OpenClaw Auto Install Source: https://docs.omnimux.ai/en/integration-guide/openclaw-auto Install and manage OpenClaw instances with OpenClaw Manager ## Overview OmniMux uses a single gateway Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients typically use `https://api.omnimux.ai/v1`). Console: [omnimux.ai/dashboard](https://omnimux.ai/dashboard). Model IDs in this guide are examples — confirm with the console or `GET /v1/models`. OpenClaw Manager is a visual management tool that helps you quickly install, configure, and manage OpenClaw instances. No manual config editing required — just 3 steps to deploy. Two messaging channels are supported: | | Telegram | Feishu (Lark) | | ------------------ | ------------------------------------------------- | --------------------------------------------- | | Connection | Bot API (long polling) | WebSocket persistent connection | | Credentials needed | Bot Token + your User ID | App ID + App Secret | | Platform setup | Create a Bot only | Create an app + enable WebSocket subscription | | User auth | Bound by User ID — only authorized users can chat | Any user who can message the Bot can chat | | Best for | Personal use, international users | Team collaboration, users in China | ## System Environment Check Before installation, it's recommended to run the environment checker tool to ensure your system meets OpenClaw's requirements. ### Download Checker Tool Download the checker tool for your platform from [GitHub Releases](https://github.com/suuuuuu-1/openclaw-env-checker/releases): | Platform | Filename | | --------------------- | ------------------------------ | | Windows | `openclaw-checker-win-x64.exe` | | macOS (Intel) | `openclaw-checker-macos-x64` | | macOS (Apple Silicon) | `openclaw-checker-macos-arm64` | | Linux | `openclaw-checker-linux-x64` | ### Check Items The tool automatically checks the following: * ✅ Node.js version (requires >= 22.12.0) * ✅ npm available * ✅ Git available * ✅ Network connectivity (github.com, npmjs.org, omnimux.ai) If the check fails, the tool will provide specific fix suggestions. ## Prerequisites ### 1. Install Node.js OpenClaw Manager requires Node.js 22 or higher. Visit [Node.js official website](https://nodejs.org/en/download), download the Windows installer (.msi file), and run the installation program. After installation, open PowerShell to verify: ```bash theme={null} node --version npm --version ``` It's recommended to run PowerShell as administrator to avoid permission issues during installation. **Method 1: Using Installer** Visit [Node.js official website](https://nodejs.org/en/download), download the macOS installer (.pkg file), and run the installation program. **Method 2: Using Homebrew** ```bash theme={null} brew install node ``` After installation, open Terminal to verify: ```bash theme={null} node --version npm --version ``` If you encounter permission issues during installation, you may need to add `sudo` before the command. ### 2. Install Git OpenClaw depends on Git for version management and plugin installation. Visit [Git official website](https://git-scm.com/downloads), download the Windows installer, run the installation program, and complete the installation with default options. After installation, open PowerShell to verify: ```bash theme={null} git --version ``` **Method 1: Using Homebrew (Recommended)** ```bash theme={null} brew install git ``` **Method 2: Using Xcode Command Line Tools** ```bash theme={null} xcode-select --install ``` After installation, open Terminal to verify: ```bash theme={null} git --version ``` ### 3. Get OmniMux API Key * Log in to [OmniMux Console](https://omnimux.ai/dashboard) * Find API Keys in the console, click "Create New Key", then copy the generated Key * API Key usually starts with `sk-`, please keep it safe ### 4. Channel Credentials 1. Search for [@BotFather](https://t.me/BotFather) on Telegram, click **START BOT** 2. Send `/newbot`, follow the prompts to set a name and get your **Bot Token** (format: `123456789:ABCdef...`) 3. Get your **Telegram User ID**: send `/start` to [@userinfobot](https://t.me/userinfobot) and note the numeric ID 4. Go to [Feishu Open Platform](https://open.feishu.cn/app) and create a custom enterprise app 5. Get the **App ID** and **App Secret** from the "Credentials & Basic Info" page 6. Under "Permissions & Scopes", click **Batch Import** and paste the following JSON to import all required permissions: ```json theme={null} { "scopes": { "tenant": [ "aily:file:read", "aily:file:write", "application:application.app_message_stats.overview:readonly", "application:application:self_manage", "application:bot.menu:write", "cardkit:card:write", "contact:contact.base:readonly", "contact:user.employee_id:readonly", "corehr:file:download", "docs:document.content:read", "event:ip_list", "im:chat", "im:chat.access_event.bot_p2p_chat:read", "im:chat.members:bot_access", "im:message", "im:message.group_at_msg:readonly", "im:message.group_msg", "im:message.p2p_msg:readonly", "im:message:readonly", "im:message:send_as_bot", "im:resource", "sheets:spreadsheet", "wiki:wiki:readonly" ], "user": [ "aily:file:read", "aily:file:write", "im:chat.access_event.bot_p2p_chat:read" ] } } ``` 4. Under "App Capabilities > Bot", enable the bot capability and set the bot name Feishu app basic setup is now complete. The remaining steps — event subscription and version release — must be done after the gateway is deployed and running, otherwise the long connection settings will fail to save. Complete Step 1 and Step 2 below first, then return to Feishu Open Platform to continue. ## Step 1: Download & Run Download the executable for your platform from [Releases](https://github.com/Pharmacist9527/openclaw-manager/releases): | Platform | File | | --------------------- | ------------------------------ | | Windows | `openclaw-manager-win-x64.exe` | | macOS (Intel) | `openclaw-manager-macos-x64` | | macOS (Apple Silicon) | `openclaw-manager-macos-arm64` | | Linux | `openclaw-manager-linux-x64` | Make sure [Node.js 22+](https://nodejs.org/en/download) is installed. Windows users right-click and run as administrator. macOS / Linux users run with `sudo` in terminal: ```bash theme={null} chmod +x ./openclaw-manager && sudo ./openclaw-manager ``` The script will check for and install OpenClaw if needed, then start the local web management interface and open your browser. ## Step 2: Create an Instance ### 2.1 — Basic Info | Field | Description | | ------------- | --------------------------------------------------------------------- | | Instance Name | Name for your instance (e.g. `mybot`), must be unique on this machine | | Model | Choose a model: Haiku 4.5 / Sonnet 4.5 / Opus 4.5 / Opus 4.6 | | Channel | Choose a channel: Telegram or Feishu | ### 2.2 — Credentials & Deploy All channels require an **OmniMux API Key**. Enter the **Bot Token** from @BotFather, then click **Deploy**. The script will automatically: 1. Create the OpenClaw config file 2. Write model and API Key settings 3. Configure and enable the Telegram plugin 4. Install and start the gateway service Enter the **App ID** and **App Secret** from Feishu Open Platform, then click **Deploy**. The script will automatically: 1. Create the OpenClaw config file 2. Write model and API Key settings 3. Configure the Feishu plugin (write App ID / App Secret) and enable it 4. Install and start the gateway service Wait for the progress bar to complete, then you'll advance to the next step automatically. ### 2.3 — Connect Enter your **Telegram User ID** (the numeric ID from @userinfobot), then click **Connect**. The script writes this ID to the `allowedUsers` config — only this user will be able to chat with the Bot. Once connected, you'll be redirected to the home page. Deployment is complete. Now return to Feishu Open Platform to configure event subscription. Before configuring event subscription, make sure the following are done: * Feishu channel configuration is complete (see Step 2 deployment) * Gateway is running (check with `openclaw gateway status`) On the **Event Subscription** page: 1. Select **Use long connection to receive events** (WebSocket mode) 2. Add event: `im.message.receive_v1` (receive messages) If the gateway is not started or the channel has not been added, the long connection settings will fail to save. 3. Under "Version Management & Release", create a version and submit for review Feishu apps require admin approval before they can be used. Enterprise custom apps are usually approved automatically. Click **Done** — the script will restart the gateway to establish the Feishu WebSocket connection. After redirecting to the home page, you can start messaging the Bot on Feishu. ## Manage Instances After deployment, the home page displays all instances: | Status | Description | | -------- | --------------- | | 🟢 Green | Gateway running | | 🔴 Red | Gateway stopped | Each instance card shows the model and channel in use. Available actions: * **Start / Stop**: Start or stop the gateway service * **Delete**: Remove the instance (stops the gateway and cleans up all config files) Click **+ New Instance** to create multiple instances, each running independently on a different port. # OpenClaw + Feishu Source: https://docs.omnimux.ai/en/integration-guide/openclaw-feishu Connect OpenClaw to OmniMux via Feishu (Lark) ## Overview OmniMux uses a single gateway Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients typically use `https://api.omnimux.ai/v1`). Console: [omnimux.ai/dashboard](https://omnimux.ai/dashboard). Model IDs in this guide are examples — confirm with the console or `GET /v1/models`. OpenClaw is an open-source AI agent Gateway that acts as a bridge between chat applications and AI agents. Through a centralized Gateway process, it connects chat platforms like Telegram, WhatsApp, Discord, and Feishu (Lark) to AI coding agents, enabling direct AI programming interactions within chat windows. By configuring **OmniMux API** as a custom model provider in OpenClaw and connecting a **Feishu Bot**, you can use OmniMux's Claude models (such as **Claude 4.6 Opus**, **Claude 4.5 Sonnet**, **Claude 4.5 Haiku**) for AI-assisted coding conversations directly in Feishu. The Feishu channel uses **WebSocket long connection** mode to receive messages — no public URL required. **This guide covers:** * Installing and configuring OpenClaw Gateway * Creating a Feishu enterprise application with bot capability * Setting up OmniMux API as a custom model provider * Verifying the connection and getting started ## System Environment Check Before installation, it's recommended to run the environment checker tool to ensure your system meets OpenClaw's requirements. ### Download Checker Tool Download the checker tool for your platform from [GitHub Releases](https://github.com/suuuuuu-1/openclaw-env-checker/releases): | Platform | Filename | | --------------------- | ------------------------------ | | Windows | `openclaw-checker-win-x64.exe` | | macOS (Intel) | `openclaw-checker-macos-x64` | | macOS (Apple Silicon) | `openclaw-checker-macos-arm64` | | Linux | `openclaw-checker-linux-x64` | ### Check Items The tool automatically checks the following: * ✅ Node.js version (requires >= 22.12.0) * ✅ npm available * ✅ Git available * ✅ Network connectivity (github.com, npmjs.org, omnimux.ai) If the check fails, the tool will provide specific fix suggestions. ## Prerequisites Before configuring, make sure you have: ### 1. Install Node.js OpenClaw is installed via npm and requires Node.js 22 or higher. Visit [Node.js official website](https://nodejs.org/en/download), download the Windows installer (.msi file), and run the installation program. After installation, open PowerShell to verify: ```bash theme={null} node --version npm --version ``` It's recommended to run PowerShell as administrator to avoid permission issues during installation. **Method 1: Using Installer** Visit [Node.js official website](https://nodejs.org/en/download), download the macOS installer (.pkg file), and run the installation program. **Method 2: Using Homebrew** ```bash theme={null} brew install node ``` After installation, open Terminal to verify: ```bash theme={null} node --version npm --version ``` If you encounter permission issues during installation, you may need to add `sudo` before the command. ### 2. Get OmniMux API Key * Log in to [OmniMux Console](https://omnimux.ai/dashboard) * Find API Keys in the dashboard, click 'Create New Key' button, then copy the generated Key * API Key usually starts with `sk-` ### 3. Prepare a Feishu Account You need a Feishu enterprise account to create applications on the Feishu Open Platform. ## Step 1: Install OpenClaw Run the following command in your terminal: ```bash theme={null} npm install -g openclaw@latest ``` Install the Feishu plugin: ```bash theme={null} openclaw plugins install @openclaw/feishu ``` ## Step 2: Onboarding Run the onboarding command. OpenClaw will guide you through the initial setup and install the background daemon service: ```bash theme={null} openclaw onboard --install-daemon ``` ### 1. Confirm Installation The system will display a risk disclaimer. Confirm to proceed: ### 2. Select Installation Mode When prompted to choose an installation mode, select **Quickstart**: ### 3. Select Provider When prompted to choose a model provider, select **Skip**. We will manually configure OmniMux as a custom provider later: ### 4. Select Models When prompted to choose which models to enable, select **All**: ### 5. Select Default Model When prompted to choose a default model, select **Keep current**: ## Step 3: Create Feishu Application ### 1. Log in to Feishu Open Platform Visit the [Feishu Open Platform](https://open.feishu.cn/app) and log in with your Feishu account. For Lark (international version), use [https://open.larksuite.com/app](https://open.larksuite.com/app) and set `domain: "lark"` in the configuration. ### 2. Create Application Click **Create Enterprise Self-Built Application**, fill in the application name and description, and choose an icon. ### 3. Get Credentials On the **Credentials & Basic Info** page, copy: * **App ID** (format: `cli_xxx`) * **App Secret** Keep your App Secret safe. Do not share it with others. ### 4. Configure Permissions On the **Permission Management** page, click **Batch Import** and paste the following JSON to import all required permissions: ```json theme={null} { "scopes": { "tenant": [ "aily:file:read", "aily:file:write", "application:application.app_message_stats.overview:readonly", "application:application:self_manage", "application:bot.menu:write", "cardkit:card:write", "contact:contact.base:readonly", "contact:user.employee_id:readonly", "corehr:file:download", "docs:document.content:read", "event:ip_list", "im:chat", "im:chat.access_event.bot_p2p_chat:read", "im:chat.members:bot_access", "im:message", "im:message.group_at_msg:readonly", "im:message.group_msg", "im:message.p2p_msg:readonly", "im:message:readonly", "im:message:send_as_bot", "im:resource", "sheets:spreadsheet", "wiki:wiki:readonly" ], "user": [ "aily:file:read", "aily:file:write", "im:chat.access_event.bot_p2p_chat:read" ] } } ``` ### 5. Enable Bot Capability In the left sidebar, click **App Capabilities**, find the **Bot** card, and toggle the **menu status** to enabled. Once enabled, fill in the bot name and description — users will see these when searching for or chatting with the bot in Feishu. ### 6. Configure Event Subscriptions Before configuring event subscriptions, make sure you have: * Completed the Feishu channel configuration (see Step 4) * The gateway is running (check with `openclaw gateway status`) On the **Event Subscriptions** page: 1. Select **Use Long Connection to Receive Events** (WebSocket mode) 2. Add event: `im.message.receive_v1` (Receive Message) If the gateway is not running or the channel has not been added, the long connection setup will fail to save. ### 7. Publish Application Go to **Version Management & Release**, create a version, submit for review and publish. Enterprise self-built applications are usually approved automatically. ## Step 4: Configure OpenClaw OpenClaw's configuration is centralized in `~/.openclaw/openclaw.json`. There are three key configuration domains: * `plugins.entries.*` — Controls which plugins to load * `channels.*` — Controls channel connections and account credentials * `models.providers.*` — Controls model providers ### 1. Add Feishu Channel Open `~/.openclaw/openclaw.json`: Enable the Feishu plugin (`plugins.entries`): ```json theme={null} "plugins": { "entries": { "feishu": { "enabled": true } } } ``` Configure Feishu channel credentials (`channels.feishu`): ```json theme={null} "channels": { "feishu": { "enabled": true, "dmPolicy": "pairing", "accounts": { "main": { "appId": "cli_xxx", "appSecret": "your-app-secret", "botName": "My AI Assistant" } } } } ``` Feishu credentials must be placed under `channels.feishu.accounts`, NOT under `plugins.entries.feishu`. Placing them in the wrong location will cause an `Unrecognized key` error. You can also configure via environment variables: ```bash theme={null} export FEISHU_APP_ID="cli_xxx" export FEISHU_APP_SECRET="xxx" ``` Run the following command, select Feishu, and enter your App ID and App Secret when prompted: ```bash theme={null} openclaw channels add ``` Newer versions of OpenClaw may have configuration conflicts with this command. Manual configuration is recommended. ### 2. Configure OmniMux API In the same `openclaw.json`, find the `models` field and add OmniMux as a custom model provider: ```json theme={null} "models": { "providers": { "omnimux-anthropic": { "api": "anthropic-messages", "baseUrl": "https://api.omnimux.ai", "apiKey": "your-omnimux-api-key", "models": [ { "id": "claude-fable-5", "name": "Claude Fable 5" }, { "id": "claude-opus-5", "name": "Claude Opus 5" }, { "id": "claude-opus-4-8", "name": "Claude Opus 4.8" }, { "id": "claude-opus-4-7", "name": "Claude Opus 4.7" }, { "id": "claude-opus-4-6", "name": "Claude Opus 4.6" }, { "id": "claude-sonnet-4-6", "name": "Claude Sonnet 4.6" }, { "id": "claude-sonnet-5", "name": "Claude Sonnet 5" }, { "id": "claude-opus-4-5-20251101", "name": "Claude Opus 4.5" }, { "id": "claude-sonnet-4-5-20250929", "name": "Claude Sonnet 4.5" }, { "id": "claude-haiku-4-5-20251001", "name": "Claude Haiku 4.5" } ] }, "omnimux-google": { "api": "google-generative-ai", "baseUrl": "https://api.omnimux.ai/v1beta", "apiKey": "your-omnimux-api-key", "models": [ { "id": "gemini-3.1-flash-lite-preview", "name": "Gemini 3.1 Flash Lite" }, { "id": "gemini-3.1-pro-preview", "name": "Gemini 3.1 Pro" }, { "id": "gemini-2.5-pro", "name": "Gemini 2.5 Pro" }, { "id": "gemini-2.5-flash", "name": "Gemini 2.5 Flash" }, { "id": "gemini-3-pro-preview", "name": "Gemini 3.0 Pro" }, { "id": "gemini-3-flash-preview", "name": "Gemini 3.0 Flash" } ] }, "omnimux-openai": { "api": "openai-completions", "baseUrl": "https://api.omnimux.ai/v1", "apiKey": "your-omnimux-api-key", "models": [ { "id": "gpt-5.4", "name": "GPT-5.4" }, { "id": "gpt-5.2", "name": "GPT-5.2" }, { "id": "gpt-5.1", "name": "GPT-5.1" }, { "id": "gpt-5.1-chat", "name": "GPT-5.1 Chat" }, { "id": "gpt-5.1-thinking", "name": "GPT-5.1 Thinking" }, { "id": "gemini-2.5-pro", "name": "Gemini 2.5 Pro (OpenAI SDK)" }, { "id": "gemini-2.5-flash", "name": "Gemini 2.5 Flash (OpenAI SDK)" }, { "id": "gemini-3-pro-preview", "name": "Gemini 3.0 Pro (OpenAI SDK)" }, { "id": "gemini-3-flash-preview", "name": "Gemini 3.0 Flash (OpenAI SDK)" }, { "id": "doubao-seed-2.0-pro", "name": "Doubao Seed 2.0 Pro" }, { "id": "doubao-seed-2.0-lite", "name": "Doubao Seed 2.0 Lite" }, { "id": "doubao-seed-2.0-mini", "name": "Doubao Seed 2.0 Mini" }, { "id": "doubao-seed-2.0-code", "name": "Doubao Seed 2.0 Code" }, { "id": "kimi-k2-thinking", "name": "Kimi K2 Thinking" }, { "id": "kimi-k2-thinking-turbo", "name": "Kimi K2 Thinking Turbo" } ] } } } ``` Replace `"your-omnimux-api-key"` with the actual API Key from your [OmniMux Console](https://omnimux.ai/dashboard). ### 3. Configure Default Model In the `agents` field, set the default model: ```json theme={null} "model": { "primary": "omnimux-anthropic/claude-opus-5" } ``` ### 4. Restart Gateway Restart the OpenClaw Gateway to apply the configuration: ```bash theme={null} openclaw gateway restart ``` Always use `openclaw gateway restart` instead of manually starting another process, otherwise you will get a port conflict error. Verify the configuration is loaded correctly: ```bash theme={null} openclaw gateway status ``` ## Step 5: Verify Connection ### 1. Find the Bot in Feishu Open Feishu, search for the bot name you created, and start a conversation. ### 2. Get Pairing Code Send any message to the bot. It will return a pairing code. ### 3. Complete Pairing Open a new terminal window and run: ```bash theme={null} openclaw pairing approve feishu ``` Replace \`\` with the actual code returned by the bot. Make sure to remove the angle brackets `<>`. ### 4. Test Connection After pairing is complete, send a message to the bot in Feishu: ``` Hello, please introduce yourself ``` If you receive an AI response, the integration is complete. ## Access Control ### Direct Message Access Default `dmPolicy: "pairing"` — unknown users will receive a pairing code that must be approved by an admin: ```bash theme={null} openclaw pairing list feishu # View pending approvals openclaw pairing approve feishu # Approve ``` You can also configure an allowlist of user Open IDs via `channels.feishu.allowFrom`. ### Group Access Group policy is controlled via `channels.feishu.groupPolicy`: * `"open"` — Allow all users in the group (default) * `"allowlist"` — Only allow users in `groupAllowFrom` * `"disabled"` — Disable group messages By default, the bot only responds when @mentioned (`requireMention: true`). ## Common Commands | Command | Description | | ------------------------------ | ----------------------------- | | `openclaw gateway status` | Check gateway status | | `openclaw gateway restart` | Restart gateway service | | `openclaw logs --follow` | View real-time logs | | `openclaw pairing list feishu` | View pending pairing requests | | `openclaw plugins list` | View installed plugins | ## Troubleshooting | Issue | Solution | | ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Bot not responding in groups | Check if you @mentioned the bot; check if `groupPolicy` is `"disabled"` | | Bot not receiving messages | Check if the app is published and approved; verify event subscription `im.message.receive_v1` is configured; confirm WebSocket long connection mode is selected | | App Secret leaked | Reset App Secret on Feishu Open Platform, update config, restart gateway | | Failed to send messages | Check if `im:message:send_as_bot` permission is granted; check logs with `openclaw logs --follow` | # OpenClaw + Telegram Source: https://docs.omnimux.ai/en/integration-guide/openclaw-telegram Connect OpenClaw to OmniMux ## Overview OmniMux uses a single gateway Base URL: `https://api.omnimux.ai` (OpenAI-compatible clients typically use `https://api.omnimux.ai/v1`). Console: [omnimux.ai/dashboard](https://omnimux.ai/dashboard). Model IDs in this guide are examples — confirm with the console or `GET /v1/models`. OpenClaw is an open-source AI agent Gateway that acts as a bridge between chat applications and AI agents. Through a centralized Gateway process, it connects chat platforms like Telegram, WhatsApp, and Discord to AI coding agents, enabling direct AI programming interactions within chat windows. By configuring **OmniMux API** as a custom model provider in OpenClaw and connecting a **Telegram Bot**, you can use OmniMux's Claude models (such as **Claude 4.6 Opus**, **Claude 4.5 Sonnet**, **Claude 4.5 Haiku**) for AI-assisted coding conversations directly in Telegram. **This guide covers:** * Installing and configuring OpenClaw Gateway * Creating a Telegram Bot and connecting it to OpenClaw * Setting up OmniMux API as a custom model provider * Verifying the connection and getting started ## System Environment Check Before installation, it's recommended to run the environment checker tool to ensure your system meets OpenClaw's requirements. ### Download Checker Tool Download the checker tool for your platform from [GitHub Releases](https://github.com/suuuuuu-1/openclaw-env-checker/releases): | Platform | Filename | | --------------------- | ------------------------------ | | Windows | `openclaw-checker-win-x64.exe` | | macOS (Intel) | `openclaw-checker-macos-x64` | | macOS (Apple Silicon) | `openclaw-checker-macos-arm64` | | Linux | `openclaw-checker-linux-x64` | ### Check Items The tool automatically checks the following: * ✅ Node.js version (requires >= 22.12.0) * ✅ npm available * ✅ Git available * ✅ Network connectivity (github.com, npmjs.org, omnimux.ai) If the check fails, the tool will provide specific fix suggestions. ## Prerequisites Before configuring, make sure you have: ### 1. Install Node.js OpenClaw is installed via npm and requires Node.js 22 or higher. Visit [Node.js official website](https://nodejs.org/en/download), download the Windows installer (.msi file), and run the installation program. After installation, open PowerShell to verify: ```bash theme={null} node --version npm --version ``` It's recommended to run PowerShell as administrator to avoid permission issues during installation. **Method 1: Using Installer** Visit [Node.js official website](https://nodejs.org/en/download), download the macOS installer (.pkg file), and run the installation program. **Method 2: Using Homebrew** ```bash theme={null} brew install node ``` After installation, open Terminal to verify: ```bash theme={null} node --version npm --version ``` If you encounter permission issues during installation, you may need to add `sudo` before the command. ### 2. Get OmniMux API Key * Log in to [OmniMux Console](https://omnimux.ai/dashboard) * Find API Keys in the dashboard, click 'Create New Key' button, then copy the generated Key * API Key usually starts with `sk-` ### 3. Prepare a Telegram Account You will need it to create a Bot and test the integration. ## Step 1: Install OpenClaw Run the following command in your terminal: ```bash theme={null} npm install -g openclaw@latest ``` ## Step 2: Onboarding Run the onboarding command. OpenClaw will guide you through the initial setup and install the background daemon service: ```bash theme={null} openclaw onboard --install-daemon ``` ### 1. Confirm Installation The system will display a risk disclaimer. Confirm to proceed: ### 2. Select Installation Mode When prompted to choose an installation mode, select **Quickstart**: ### 3. Select Provider When prompted to choose a model provider, select **Skip**. We will manually configure OmniMux as a custom provider later: ### 4. Select Models When prompted to choose which models to enable, select **All**: ### 5. Select Default Model When prompted to choose a default model, select **Keep current**: ## Step 3: Create Telegram Bot The onboarding flow will prompt you to select a chat channel. Select **Telegram (Bot API)**. ### 1. Visit BotFather Open Telegram and visit [@BotFather](https://t.me/BotFather), then click **START BOT** to begin: ### 2. Create Bot Type `/start` in the chat. BotFather will reply with a list of available commands: Type `/newbot`. Follow the prompt to set a unique **Bot username** that must end with `bot` (e.g., `my_omnimux_bot`). Once created, BotFather will return a message containing a **Token** in this format: ``` 123456789:ABCdefGHIjklMNOpqrsTUVwxyz ``` Copy and save this Token. ### 3. Enter Token Go back to the terminal onboarding flow, paste the Bot Token into the prompt and confirm: ### 4. Restart Gateway After entering the Token, restart the Gateway to apply the configuration: ## Step 4: Configure OmniMux API ### 1. Locate Config File Locate the `openclaw.json` configuration file in the OpenClaw installation directory and open it for editing: ### 2. Configure Model Provider In `openclaw.json`, find the `models` field and add OmniMux as a custom model provider: ```json theme={null} "models": { "providers": { "omnimux-anthropic": { "api": "anthropic-messages", "baseUrl": "https://api.omnimux.ai", "apiKey": "your-omnimux-api-key", "models": [ { "id": "claude-fable-5", "name": "Claude Fable 5" }, { "id": "claude-opus-5", "name": "Claude Opus 5" }, { "id": "claude-opus-4-8", "name": "Claude Opus 4.8" }, { "id": "claude-opus-4-7", "name": "Claude Opus 4.7" }, { "id": "claude-opus-4-6", "name": "Claude Opus 4.6" }, { "id": "claude-sonnet-4-6", "name": "Claude Sonnet 4.6" }, { "id": "claude-sonnet-5", "name": "Claude Sonnet 5" }, { "id": "claude-opus-4-5-20251101", "name": "Claude Opus 4.5" }, { "id": "claude-sonnet-4-5-20250929", "name": "Claude Sonnet 4.5" }, { "id": "claude-haiku-4-5-20251001", "name": "Claude Haiku 4.5" } ] }, "omnimux-google": { "api": "google-generative-ai", "baseUrl": "https://api.omnimux.ai/v1beta", "apiKey": "your-omnimux-api-key", "models": [ { "id": "gemini-3.1-flash-lite-preview", "name": "Gemini 3.1 Flash Lite" }, { "id": "gemini-3.1-pro-preview", "name": "Gemini 3.1 Pro" }, { "id": "gemini-2.5-pro", "name": "Gemini 2.5 Pro" }, { "id": "gemini-2.5-flash", "name": "Gemini 2.5 Flash" }, { "id": "gemini-3-pro-preview", "name": "Gemini 3.0 Pro" }, { "id": "gemini-3-flash-preview", "name": "Gemini 3.0 Flash" } ] }, "omnimux-openai": { "api": "openai-completions", "baseUrl": "https://api.omnimux.ai/v1", "apiKey": "your-omnimux-api-key", "models": [ { "id": "gpt-5.4", "name": "GPT-5.4" }, { "id": "gpt-5.2", "name": "GPT-5.2" }, { "id": "gpt-5.1", "name": "GPT-5.1" }, { "id": "gpt-5.1-chat", "name": "GPT-5.1 Chat" }, { "id": "gpt-5.1-thinking", "name": "GPT-5.1 Thinking" }, { "id": "gemini-2.5-pro", "name": "Gemini 2.5 Pro (OpenAI SDK)" }, { "id": "gemini-2.5-flash", "name": "Gemini 2.5 Flash (OpenAI SDK)" }, { "id": "gemini-3-pro-preview", "name": "Gemini 3.0 Pro (OpenAI SDK)" }, { "id": "gemini-3-flash-preview", "name": "Gemini 3.0 Flash (OpenAI SDK)" }, { "id": "doubao-seed-2.0-pro", "name": "Doubao Seed 2.0 Pro" }, { "id": "doubao-seed-2.0-lite", "name": "Doubao Seed 2.0 Lite" }, { "id": "doubao-seed-2.0-mini", "name": "Doubao Seed 2.0 Mini" }, { "id": "doubao-seed-2.0-code", "name": "Doubao Seed 2.0 Code" }, { "id": "kimi-k2-thinking", "name": "Kimi K2 Thinking" }, { "id": "kimi-k2-thinking-turbo", "name": "Kimi K2 Thinking Turbo" } ] } } } ``` Replace `"your-omnimux-api-key"` with the actual API Key from your [OmniMux Console](https://omnimux.ai/dashboard). ### 3. Configure Default Model In the `agents` field, set `model.primary` to the OmniMux model you just added: ```json theme={null} "model": { "primary": "omnimux-anthropic/claude-opus-5" } ``` ### 4. Verify Telegram Configuration Verify the Telegram configuration in the `channels` field. The `botToken` was automatically filled in during the onboarding flow and does not need to be changed: ```json theme={null} "channels": { "telegram": { "enabled": true, "botToken": "your-bot-token (auto-filled)", "dmPolicy": "pairing", "groups": { "*": { "requireMention": true } } } } ``` * `enabled`: Enable the Telegram channel * `dmPolicy`: Set to `"pairing"`, unauthorized users must verify via pairing code when sending DMs * `groups`: `"*"` allows all groups, `requireMention` set to `true` means the Bot only responds when @mentioned in groups ## Step 5: Verify Connection ### 1. Visit Your Bot Search for the Bot username you just created in Telegram and open the chat: ### 2. Get Pairing Code Send `/start` to the Bot. It will return a pairing code: ### 3. Complete Pairing Open a **new terminal window** and run the following command to complete pairing: ```bash theme={null} openclaw pairing approve telegram ``` Replace \`\` with the actual code returned by the Bot. Make sure to remove the angle brackets `<>`. ### 4. Test Connection Go back to the original terminal window and type the following to test if the connection is working: ``` Wake up, my friend! ``` Once pairing is complete, sending messages to the Bot in Telegram will also receive AI responses, confirming the integration is successful. # Quickstart Source: https://docs.omnimux.ai/en/quickstart Send your first OmniMux Chat Completions request in a few minutes. This guide covers: create an API key → set the Base URL → send a request. ## Prerequisites * Access to the [OmniMux console](https://omnimux.ai/dashboard) * Available quota (or a token provisioned by an admin) ## Steps Sign in to the [console](https://omnimux.ai/dashboard), open **Tokens / API Keys**, and create a key. Keys look like `sk-...`. Store them only on the server or in private environment variables — never in frontend code or public repos. Gateway Base URL (API host): ```text theme={null} https://api.omnimux.ai ``` For OpenAI-compatible SDKs, set: ```text theme={null} https://api.omnimux.ai/v1 ``` The SDK appends `/chat/completions` and other paths. The console lives at [omnimux.ai/dashboard](https://omnimux.ai/dashboard) and is separate from the API host. With curl: ```bash theme={null} curl https://api.omnimux.ai/v1/chat/completions \ -H "Authorization: Bearer $OMNIMUX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "messages": [ {"role": "user", "content": "Hello — introduce yourself in one sentence"} ] }' ``` `model` must be enabled for your account. Check the console or call `GET /v1/models`. Language contract: [Claude · Complete API Reference](/en/api-reference/text-series/claude/complete). ## Official OpenAI SDKs ### Python ```python theme={null} from openai import OpenAI client = OpenAI( api_key="sk-...", # OmniMux token base_url="https://api.omnimux.ai/v1", ) resp = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": "Hello"}], ) print(resp.choices[0].message.content) ``` ### Node.js ```javascript theme={null} import OpenAI from "openai"; const client = new OpenAI({ apiKey: process.env.OMNIMUX_API_KEY, baseURL: "https://api.omnimux.ai/v1", }); const resp = await client.chat.completions.create({ model: "gpt-4o-mini", messages: [{ role: "user", content: "Hello" }], }); console.log(resp.choices[0].message.content); ``` ## Next steps | Topic | What you get | | ------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | | [Connection and usage](/en/faqs/connection-usage) | Base URL, dual credentials, common errors | | [Security and keys](/en/faqs/security) | Key hygiene | | [Cost optimization](/en/faqs/cost-optimization) | Points / precharge / 402 | | [API manual · complete](/en/api-reference/text-series/claude/complete) | Language contract entry (brand model enum) | | [Integration guide](/en/integration-guide/chatbox) | Chat apps / dev tools / platforms | | [llms.txt](https://docs.omnimux.ai/llms.txt) · [skill.md](https://docs.omnimux.ai/skill.md) · [Docs MCP](https://docs.omnimux.ai/mcp) | Agent-readable index, product skill, and docs search MCP | Handing this site to an agent? Start with [llms.txt](https://docs.omnimux.ai/llms.txt) for the page index, or install the docs MCP from the page header menu (**Connect to Cursor / VS Code**). Full dump: [llms-full.txt](https://docs.omnimux.ai/llms-full.txt). API keys can spend account quota. Keep them server-side only. Rotate immediately if exposed. # API Updates Source: https://docs.omnimux.ai/en/updates Stay informed about the latest model launches, capability changes, pricing, and platform notes on OmniMux. Stay up to date with OmniMux gateway model launches and platform changes. The full callable catalog is on [console pricing](https://omnimux.ai) / [Pricing](/en/api-reference/account/pricing). ## GPT Image Tiers OmniMux now supports dedicated tier routing models `gpt-image-2.5-flare` and `gpt-image-2.5-sunburst` under the standard image generation endpoint. ### Model specification * **Endpoint:** `POST /v1/images/generations` * **Authentication:** Bearer token (`sk-...`) * **Tier models:** `gpt-image-2.5-flare` (discounted tier), `gpt-image-2.5-sunburst` (economy tier) * **Parameters:** Fully compatible with baseline `gpt-image-2.5` ### Request example ```bash theme={null} curl --request POST \ --url https://api.omnimux.ai/v1/images/generations \ --header 'Authorization: Bearer sk-...' \ --header 'Content-Type: application/json' \ --data '{ "model": "gpt-image-2.5-flare", "prompt": "A clean studio product photograph on white background", "n": 1 }' ``` Parameter details are documented in the [GPT Image Reference](/en/api-reference/image-series/gpt-image/generate). ### Links * [GPT Image Reference](/en/api-reference/image-series/gpt-image/generate) ## Video Task and Variant Models OmniMux now supports dedicated per-call video task channels and H3 model variants under the standard video endpoint. ### Model specification * **Endpoint:** `POST /v1/video/generations` * **Polling endpoint:** `GET /v1/video/generations/{task_id}` * **Per-call models:** `seedance-2-0-task`, `seedance-2-5-task`, `minimax-h3-task` (billed per task call) * **H3 variants:** `minimax-h3-turbo` (turbo rendering), `minimax-h3-video` (dedicated video pipeline) ### Request example ```json theme={null} { "model": "seedance-2-0-task", "prompt": "A cinematic drone shot of coastal mountains at sunset", "seconds": 5 } ``` Full parameter definitions are documented in the [Seedance 2.0 Reference](/en/api-reference/video-series/models/seedance-2-0) and [MiniMax H3 Reference](/en/api-reference/video-series/models/minimax-h3). ### Links * [Seedance 2.0 Reference](/en/api-reference/video-series/models/seedance-2-0) * [MiniMax H3 Reference](/en/api-reference/video-series/models/minimax-h3) ## Doubao Speech Recognition The `doubao-asr-bigmodel`, `seedasr-auc`, and `bigasr-auc` models are now supported on OmniMux. ### Model specification * **Model IDs:** `doubao-asr-bigmodel`, `seedasr-auc`, `bigasr-auc` * **Protocol:** OpenAI-compatible Audio Transcriptions (`POST /v1/audio/transcriptions`) * **Authentication:** Bearer token (`sk-...`) * **Input format:** Audio file multipart upload (`wav`, `mp3`, `ogg`, `m4a`) ### Request example ```bash theme={null} curl --request POST \ --url https://api.omnimux.ai/v1/audio/transcriptions \ --header 'Authorization: Bearer sk-...' \ --header 'Content-Type: multipart/form-data' \ --form 'file=@audio.mp3' \ --form 'model=doubao-asr-bigmodel' ``` Full parameter specifications are documented in the [Doubao ASR Reference](/en/api-reference/audio-series/models/doubao-asr). ### Links * [Doubao ASR Reference](/en/api-reference/audio-series/models/doubao-asr) ## Seed Audio 1.0 The `seed-audio-1.0` model is now supported on OmniMux under standard audio speech endpoints. ### Model specification * **Model ID:** `seed-audio-1.0` * **Protocol:** OpenAI-compatible Audio Speech (`POST /v1/audio/speech`) * **Authentication:** Bearer token (`sk-...`) * **Output limit:** Up to 120 seconds per generation * **Prompt limit:** Up to 3000 characters ### Request example ```bash theme={null} curl --request POST \ --url https://api.omnimux.ai/v1/audio/speech \ --header 'Authorization: Bearer sk-...' \ --header 'Content-Type: application/json' \ --data '{ "model": "seed-audio-1.0", "input": "Text to synthesize into speech", "voice": "zh_female_cancan", "response_format": "mp3" }' \ --output output.mp3 ``` Full parameter specifications are documented in the [Seed Audio Reference](/en/api-reference/audio-series/models/seed-audio). ### Links * [Seed Audio Reference](/en/api-reference/audio-series/models/seed-audio) ## Index TTS 2 The `indextts-2` voice clone model is now supported on OmniMux. ### Model specification * **Model ID:** `indextts-2` * **Create endpoint:** `POST /v1/tasks/autodl` * **Polling endpoint:** `GET /v1/tasks/{task_id}` * **Artifact endpoint:** `GET /v1/tasks/{task_id}/artifacts` * **Authentication:** Bearer token (`sk-...`) ### Request example ```json theme={null} { "model": "indextts-2", "prompt_text": "Hello, this is a cloned voice generation test.", "prompt_simple": "https://example.com/reference_audio.wav", "emo_control_method": "same_as_reference" } ``` Full parameter specifications are documented in the [Index TTS Reference](/en/api-reference/audio-series/models/index-tts). ### Links * [Index TTS Reference](/en/api-reference/audio-series/models/index-tts) ## Suno Sound Effects The dedicated sound effect generation model `suno-sounds` is now supported on OmniMux. ### Model specification * **Model ID:** `suno-sounds` * **Endpoint:** `POST /v1/video/generations` * **Polling endpoint:** `GET /v1/video/generations/{task_id}` * **Authentication:** Bearer token (`sk-...`) * **Modality:** Ambient and scene sound effects without vocal lyrics ### Request example ```bash theme={null} curl --request POST \ --url https://api.omnimux.ai/v1/video/generations \ --header 'Authorization: Bearer sk-...' \ --header 'Content-Type: application/json' \ --data '{ "model": "suno-sounds", "prompt": "footsteps on gravel followed by heavy rain and distant thunder" }' ``` Details are available in the [Suno API Reference](/en/api-reference/audio-series/models/suno). ### Links * [Suno API Reference](/en/api-reference/audio-series/models/suno) ## Gemini 3.8 Flash The `gemini-3.8-flash` model is now supported on OmniMux under the standard Gemini Chat Completions endpoint. ### Model specification * **Model ID:** `gemini-3.8-flash` * **Protocol:** OpenAI-compatible Chat Completions * **Endpoint:** `POST /v1/chat/completions` * **Authentication:** Bearer token (`sk-...`) * **Streaming:** Supported via `"stream": true` ### Request example ```json theme={null} { "model": "gemini-3.8-flash", "messages": [ { "role": "user", "content": "Hello" } ] } ``` Full parameter schema and status codes are documented in the [Gemini Complete API Reference](/en/api-reference/text-series/gemini/complete). ### Links * [Gemini Complete Reference](/en/api-reference/text-series/gemini/complete) ## What is new * **Official Direct Channel**: Added VolcEngine Ark direct route `#73` for ByteDance Doubao `seed-evolving`. * **Full Multimodal Reasoning**: 1024K context window, 256K max output tokens, native deep thinking, tool calling, and structured outputs. * **Transparent 1:1 Parity Pricing**: Token billing expressions anchor official list prices ($0.8824/M input, $4.4118/M output, \$0.1765/M cache hit; FX 6.8). * **Local OmniMux CLI Verification**: Verified live invocation and pricing queries using the local `omnimux` CLI (`omnimux models`, `omnimux pricing`, `omnimux tokens exec`). ## Documentation * Doubao API Reference: `/en/api-reference/text-series/doubao/complete` ### Links * [Doubao Complete API Reference](/en/api-reference/text-series/doubao/complete) ## What changed * Image-generation model pages now document the reference-image request field `images` (`string[]`, image URL or base64) together with the accepted aliases `image`, `image_urls` and `input_reference`, which the gateway normalizes to `images` before the upstream call. * Each page states the limits its vendor publishes for that model: maximum count, minimum, accepted formats and per-file size ceiling. ## Limits we do not state * Where a value is not published by the vendor, the page says so instead of carrying a number; nothing is rounded or copied from a sibling model. * Where no model spec exists yet, the reference-image note marks the capability **unverified** and states no limit at all. ## Withdrawn figure * The previously stated per-file reference-image cap of 50 MB is withdrawn. In the vendor's image guide that figure sits under mask requirements and covers the image being edited together with its mask; it is not a reference-image ceiling. `gpt-image-2.5` therefore carries no per-file size limit. ## Documentation * Image series model pages: `/en/api-reference/image-series/models/*` * GPT Image generation: `/en/api-reference/image-series/gpt-image/generate` ### Links * [Image series model pages](/en/api-reference/image-series/models/nano-banana-2) * [GPT Image generation](/en/api-reference/image-series/gpt-image/generate) * [Midjourney image generation](/en/api-reference/image-series/models/midjourney) ## Required migration * Replace the legacy `midjourney` ID and every per-action ID (for example `mj-v7-upscale`, `mj-v8-1-remove-bg`) with one of two version IDs: `mj-v7` or `mj-v8-1`. * Select the action in the request body: `model_params.operation` = `generate` | `enhance` | `pan` | `outpaint` | `remove-bg` | `upscale` | `variation` | `edit` | `inpaint` | `remix` | `retexture` | `upload-paint`. Omit it for plain generation. * Keep using `POST /v1/images/generations`; the request shape, the async task id and the polling behaviour are unchanged. The old IDs are not compatibility aliases. An unknown or unpriced `operation` is rejected with **400**, never silently downgraded to plain generation. ## Pricing Per-call prices are tiered by action, and the tiers are the same on both versions: | Action tier | Price | Credits | | ------------------------------------------------------------------------------- | ------------ | ------- | | `generate`, `enhance`, `pan`, `outpaint`, `remove-bg` | USD 0.113446 | 1.134 | | `upscale`, `variation`, `edit`, `inpaint`, `remix`, `retexture`, `upload-paint` | USD 0.170169 | 1.702 | Multipliers stack on the action tier: `quality: "hd"` (mj-v8-1) ×1.5, `model_params.speed: "turbo"` ×2, upscale `type: "creative"` ×4/3. `draft`/`fast` and `type: "standard"` stay ×1. Measured example: mj-v8-1 + hd + upscale + creative = USD 0.255251 per call. The `mj-v7` per-call price moved from USD 0.056723 to USD 0.113446 to match what upstream bills for generation; the action tiers above are unchanged in absolute terms. ## Inpaint Use the mask-image form: `model_params.mask.url` (an image URL or a `data:` URL, black = keep, white = regenerate). The polygon form `model_params.mask.areas[]` is rejected upstream with `invalid_parameters: Image dimensions out of range` in our measurements (2026-09-13), including with the upstream documentation's own example coordinates. ### Links * [Midjourney image generation](/en/api-reference/image-series/models/midjourney) ## Overview The model page at `omnimux.ai/pricing/` now runs real generations. Its **Playground** section submits through the gateway using the signed-in browser session, so a user who has already logged in to OmniMux can try a model without creating an API token first. ## Which path to call * **From the console**: the page posts to the session-authenticated `POST /pg/video/generations`. This path accepts a browser session only and is not part of the token API surface. * **From your own code**: keep using `POST /v1/video/generations` with an API token — the same contract documented in the video-series model pages. Nothing about the token path changed. ## Task results Submitted tasks are read back through the same session: `GET /api/task/self` for status, progress and quota, and `GET /api/task/:task_id/artifacts` for the media projection. Tasks submitted from the console appear in the account's task list like any other task. ## Billing Console submissions use the standard precharge and settle path. No separate ledger, pricing rule or quota bucket is introduced for the console path. ### Links * [Video generation API](/en/api-reference/video-series/models/seedance-2-5) ## Overview OmniMux now provides Cloudflare R2 object storage integration alongside a local disk fallback driver. File series endpoints are available under `/api/v1/files/*` and `/v1/files/*`. ## Capabilities * **Base64 upload**: `POST /api/v1/files/upload/base64` supporting Data URL and raw Base64. * **Stream upload**: `POST /api/v1/files/upload/stream` via `multipart/form-data`. * **URL upload**: `POST /api/v1/files/upload/url` with SSRF protection. * **Quota & Expiration**: 2,000 active files per user quota, 72-hour automated expiration with background cleanup. ### Links * [Base64 upload](/en/api-reference/file-series/upload-base64) * [File quota](/en/api-reference/file-series/quota) ## Required migration * Replace `gpt-image-2` with `gpt-image-2.5`. * Replace `gpt-image-2-hd` with `gpt-image-2.5-hd`. * Keep using `POST /v1/images/generations`. Update the `model` value in saved requests, integrations, and any model allowlists. The old IDs are not compatibility aliases. The `gpt-image-2-5` spelling is not supported. ## Pricing and scope Base per-call prices remain USD 0.0441 for `gpt-image-2.5` and USD 0.005479 for `gpt-image-2.5-hd`; group multipliers may affect final charges. This is a public ID migration, not a claim of a newly verified resolution or upstream capability. Flare and Sunburst are separate token-billed models and are not available as part of this change. ### Links * [GPT Image generation](/en/api-reference/image-series/gpt-image/generate) Use operation to select text, first-frame or Max multi-reference generation. Media arrays retain order and conflicting aliases are rejected. Replace legacy 720p with explicit 768P. Temporary result unavailability is retried; failures and cancellations are not masked by stale video URLs. Status reads no longer persist terminal transitions ahead of settlement polling. ### Links * [H3 Max API](/en/api-reference/video-series/models/minimax-h3-max) ## fal.ai MiniMax H3 Max & Turbo **MiniMax H3 Max** and **MiniMax H3 Max Turbo** video generation models are now live on OmniMux. ### Highlights * **Dynamic Multimodal Dispatch**: Clients only need to configure two base models (`minimax/h3-max` and `minimax/h3-max-turbo`). Passing prompt-only routes to text-to-video, adding `image_url` routes to image-to-video, and passing `video_url` routes to reference-to-video automatically. * **Ultra-Fast Turbo Performance**: Sub-3-second end-to-end rendering for 5-second video clips. * **Two-Phase Resilient Polling**: Transparent inline result resolution with CDN 404 lag tolerance. * **Standard API**: Create via `POST /v1/video/generations` and query via `GET /v1/tasks/{task_id}`. ### Links * [MiniMax H3 Max](/en/api-reference/video-series/models/minimax-h3-max) * [MiniMax H3 Max Turbo](/en/api-reference/video-series/models/minimax-h3-max-turbo) * [Pricing](/en/api-reference/account/pricing) The gateway began requiring `provider` at **2026-09-07 07:25:20 UTC+8 (2026-09-06T23:25:20Z)** for listing accounts, starting a connection, disconnecting, creating a post and reading post status. Use `tiktok_direct` for official TikTok accounts or `zernio` for Zernio accounts. GET/DELETE carry it in the query; POST carries it in JSON. Missing or unknown values return `400 invalid-provider`; a resource from another source returns `409 account-provider-mismatch` or `409 post-provider-mismatch`. There is no default source. ### CLI migration Use CLI **0.4.0**: `omnimux update` for binaries, or `npm install -g @omnimux/cli@0.4.0` for npm. Update all saved commands to include `--provider`, for example `omnimux social accounts --provider zernio`. For a read without upstream refresh, use `omnimux social post-status --provider zernio --no-refresh`. Updating a binary does not update your scripts or prove all clients have upgraded. CLI 0.4.0 also includes the previously merged hosted commands and video skill updates. Credentials use a mode-0600 file on every platform; Keychain-only installations need credentials configured securely. The Agent RPC envelope remains `contract_version: 1`. CLI 0.4.0 was published on **2026-09-07 at 01:47:36 UTC (09:47:36 UTC+8)**. Both the public binary release and npm package are version 0.4.0. Standalone binaries do not include skill files. Install the npm package to use or update the bundled skills; a binary-only update can report that the skill tree is missing even when the CLI upgrade succeeds. ### Links * [List accounts](/en/api-reference/publishing/list-accounts) OpenAI Completions, Chat Completions, Responses, and Responses Compact return HTTP **402** with `error.type` and `error.code` set to `insufficient_quota` when the local account balance or subscription allowance cannot cover pre-consume. Streaming requests receive the JSON error before SSE starts. Check balance or allowance before trying again; do not treat this as invalid credentials or temporary rate limiting. Token errors, upstream provider errors, other protocols, actual 401/403, ordinary 429, and 5xx behavior are unchanged. Gateway enforcement began on September 7, 2026 at 07:25:20 UTC+8 (2026-09-06T23:25:20Z). ### Links * [Connection and usage](/en/faqs/connection-usage) ## Language series * **Gemini:** Added `gemini-3.7-flash` * **GLM:** Added `glm-5.3` * **Grok:** Added `grok-4.6` * **DeepSeek:** Added `deepseek-v4-flash-vision-exp` ## Image & Video series * Canonical model ID hyphenation and full coverage for **Wan 3.0** (`wan-3.0`, `wan-3.0-prime`, `wan-3.0-prime-ref`, `wan-3.0-ref`), **Seedance 2.0** (`seedance-2-0`, `seedance-2-0-fast`, `seedance-2-0-mini`, `seedance-2-5`), **Kling** (`kling-v3`, `kling-v2-6`, `kling-avatar`, `kling-o3`, `kling-v3-motion-control`), **Grok Imagine**, and **Midjourney**. * Retired legacy Omni Flash duration-fixed SKUs. ## Audio series * `gpt-4o-mini-tts` (`POST /v1/audio/speech`) * `whisper-1` (`POST /v1/audio/transcriptions`) * `suno` (`POST /v1/video/generations`) ### Links * [Pricing](/en/api-reference/account/pricing) * [Audio Speech](/en/api-reference/audio-series/models/gpt-4o-mini-tts) ## Image * **Model IDs:** `seedream-5-0-pro`, `qwen-image-3-0`, `grok-imagine-image-2-0` * **API:** `POST /v1/images/generations` ## Video * **Model IDs:** `kling-o3`, `gemini-omni-1.1`, `pixverse-v6`, `vidu-q3` * **API:** async `POST` / `GET` `/v1/video/generations` `kling-o3` is a new id and does not replace `kling-v3`. `gemini-omni-1.1` is distinct from `gemini-omni-flash`. Pin IDs from live pricing. ### Links * [Pricing](/en/api-reference/account/pricing) * [Video task poll](/en/api-reference/tasks/video-task) ## Social Analytics & Inbox Suite OmniMux now exposes 11 RESTful analytics endpoints under `/api/social/v1` for comprehensive audience and engagement intelligence: * **Analytics:** Daily metrics timeseries, 7x24 weekly best time to post heatmap, posting frequency cadence model, content decay curve, follower growth snapshots, posts performance ranking, and external posts incremental synchronization. * **Inbox Analytics:** Message volume trends, response time (TTR) distribution, 7x24 incoming activity heatmap, and source breakdown across connected platforms. ## Jina Reader Relay (`POST /v1/reader`) * **Model ID:** `jina-reader-v1` * **Capability:** URL to clean Markdown / structured JSON text extraction with CSS selectors filtering and output-token billing. * **Auth:** Standard gateway Bearer `sk-...` token. ## Social Seats Management (`GET /api/social/v1/seats`) * Inspects current active connected social accounts, total quota capacity, and vacant seat availability. ### Links * [Jina Reader Extractor](/en/api-reference/reader-series/models/jina-reader-v1) * [Daily Metrics](/en/api-reference/publishing/analytics/daily-metrics) * [Social Seats](/en/api-reference/publishing/seats) ## New model * **Model ID:** `index-tts` * **Path:** `POST` / `GET` `/v1/video/generations` (GxgenAI task path; result is audio) * **Contract:** `metadata.nodeInfoList` required — node `4/audio` (reference clip) and `7/text` (script) ## Docs fix * **`ltx-2-3-kj`** is a photo + audio lip-sync model. Prompt-only text-to-video examples were incorrect. Send image node `444` and audio node `1755`. ### Links * [Index TTS](/en/api-reference/audio-series/models/index-tts) * [LTX digital human](/en/api-reference/video-series/models/ltx-2-3-kj) ## API Updates OmniMux now publishes a dated **API Updates** feed so you can track gateway model launches and platform changes in one place. ### What we log * **New models** — callable model IDs on live pricing * **Model updates** — modes, durations, resolutions, parameters * **Pricing** — material rate changes * **Platform** — auth, domains, public HTTP surfaces ### How to call OmniMux | Surface | URL | | --------------------- | --------------------------- | | Console | `https://omnimux.ai` | | OpenAI-compatible API | `https://api.omnimux.ai/v1` | | Docs | `https://docs.omnimux.ai` | | Status | `https://status.omnimux.ai` | Auth for relay: Bearer `sk-…` from the console. Full catalog always lives on console pricing — this page is the **change timeline**. ### Links * [Quickstart](/en/quickstart) * [Pricing](/en/api-reference/account/pricing) ## Social data (read-only) **Social data** model IDs are available on OmniMux for read-only public profile and content style access. This is **not** social publishing. ### Model IDs | Platform | IDs | | --------- | ------------------------------------------------------------------------- | | TikTok | `tiktok-user`, `tiktok-posts`, `tiktok-video`, `tiktok-search` | | Instagram | `instagram-user`, `instagram-posts`, `instagram-post`, `instagram-search` | | X | `x-user`, `x-posts`, `x-tweet`, `x-search` | | YouTube | `youtube-user`, `youtube-posts`, `youtube-video`, `youtube-search` | ### Publishing (different surface) Connect accounts and create posts use **`/api/social/v1/*`** with access token + `New-Api-User`. Do not mix that auth with gateway `sk-` Chat Completions. ### Links * [TikTok user profile](/en/api-reference/social-data/tiktok/user-profile) * [X tweet detail](/en/api-reference/social-data/x/tweet-detail) * [Create post (publishing)](/en/api-reference/publishing/create-post) ## Seedance 2.5 **Seedance 2.5** is now available on OmniMux for async video generation. ### New model * **Model ID:** `seedance-2-5` * **Create:** `POST /v1/video/generations` * **Poll:** `GET /v1/video/generations/{task_id}` * **Highlights:** longer single-pass generation and multimodal reference inputs (text / image / video / audio style workflows) Pin the exact ID from live pricing before integrating. ### Links * [Video task poll](/en/api-reference/tasks/video-task) * [Pricing](/en/api-reference/account/pricing) ## MiniMax H3 **MiniMax H3** video models are now available on OmniMux. ### New models | Model ID | Role | | --------------------- | ---------------------------- | | `minimax-h3` | Standard text/image-to-video | | `minimax-h3-t2v` | Text-to-video | | `minimax-h3-flf` | First/last-frame style I2V | | `minimax-h3-fl2va` | FL2VA-oriented path | | `minimax-h3-endframe` | End-frame reference I2V | ### API * **Create:** `POST /v1/video/generations` * **Poll:** `GET /v1/video/generations/{task_id}` Async only — submit once, then poll task status. ### Links * [MiniMax H3 Video](/en/api-reference/video-series/models/minimax-h3) * [MiniMax H3 T2V](/en/api-reference/video-series/models/minimax-h3-t2v) * [Video task poll](/en/api-reference/tasks/video-task) ## Grok Imagine Video 1.5 **Grok Imagine Video 1.5** is now available on OmniMux. ### New model * **Model ID:** `grok-imagine-video-1-5` * **Mode:** image-to-video style generation via async video API * **Create / poll:** `POST` / `GET` `/v1/video/generations` See the model page for parameters and the task poll contract. ### Links * [Grok Imagine Video 1.5](/en/api-reference/video-series/models/grok-imagine-video-1-5) * [Video task poll](/en/api-reference/tasks/video-task) ## Claude Opus 5 **Claude Opus 5** is now available on OmniMux through OpenAI-compatible Chat Completions. ### New model * **Model ID:** `claude-opus-5` * **Endpoint:** `https://api.omnimux.ai/v1` (Chat Completions) * **Docs:** one complete page per brand — `model` is an enum on the Claude complete page Related Claude IDs on the gateway include other Opus / Sonnet / Haiku SKUs on live pricing. ### Links * [Claude complete](/en/api-reference/text-series/claude/complete) ## Gemini Flash models New Gemini Flash-class models are available on OmniMux. ### New models * **Model IDs:** `gemini-3.6-flash`, `gemini-3.5-flash` * **API:** OpenAI-compatible Chat Completions at `https://api.omnimux.ai/v1` Additional Gemini IDs (Pro / preview / lite) may also appear on live pricing — pin the exact ID from the console or Gemini complete page. ### Links * [Gemini complete](/en/api-reference/text-series/gemini/complete) ## Kimi K3 **Kimi K3** is now available on OmniMux. ### New model * **Model ID:** `kimi-k3` * **API:** Chat Completions at `https://api.omnimux.ai/v1` * **Focus:** long-context reasoning and agent-style workflows See the Kimi complete page for the full model enum. ### Links * [Kimi complete](/en/api-reference/text-series/kimi/complete) ## Suno **Suno** music generation is now available on OmniMux. ### New model * **Model ID:** `suno` * **Use:** AI music generation workflows via the gateway catalog Confirm billing and request shape from live pricing / console before production traffic. ### Links * [Pricing](/en/api-reference/account/pricing) ## Nano Banana **Nano Banana 2** and **Nano Banana Pro** are now available on OmniMux. ### New models * **Model IDs:** `nano-banana-2`, `nano-banana-pro` * **Modality:** image generation See each model page for request parameters. ### Links * [Nano Banana 2](/en/api-reference/image-series/models/nano-banana-2) * [Nano Banana Pro](/en/api-reference/image-series/models/nano-banana-pro) ## Seedance 2.0 The **Seedance 2.0** family is available on OmniMux for async video generation. ### New models | Model ID | Role | | ------------------- | --------------------------- | | `seedance-2-0` | Standard | | `seedance-2-0-mini` | Lightweight / cost-oriented | | `seedance-2-0-fast` | Speed-oriented | ### API * **Create:** `POST /v1/video/generations` * **Poll:** `GET /v1/video/generations/{task_id}` ### Links * [Video task poll](/en/api-reference/tasks/video-task) * [Pricing](/en/api-reference/account/pricing) ## GLM-5.2 **GLM-5.2** is now available on OmniMux (with related GLM IDs on pricing). ### New models * **Model IDs:** `glm-5.2`, `glm-5.1` * **API:** Chat Completions at `https://api.omnimux.ai/v1` ### Links * [GLM complete](/en/api-reference/text-series/glm/complete) ## Kling **Kling** video models are available on OmniMux. ### New models * **Model IDs:** `kling-v3`, `kling-v2-6` * **API:** async `POST` / `GET` `/v1/video/generations` Pin IDs from live pricing; request parameters follow the video task contract. ### Links * [Video task poll](/en/api-reference/tasks/video-task) * [Pricing](/en/api-reference/account/pricing) ## Midjourney **Midjourney** is available on OmniMux as model ID `midjourney`. ### New model * **Model ID:** `midjourney` * **Modality:** image generation via the gateway catalog Confirm request shape and billing on console pricing before production use. ### Links * [Pricing](/en/api-reference/account/pricing) ## MiniMax M3 **MiniMax M3** is now available on OmniMux Chat Completions. ### New model * **Model ID:** `minimax-m3` * **API:** `https://api.omnimux.ai/v1` ### Links * [MiniMax complete](/en/api-reference/text-series/minimax/complete) ## Omni Flash **Omni Flash** (`gemini-omni-flash`) is available on OmniMux for fast video generation. ### Model * **Model ID:** `gemini-omni-flash` * **API:** `POST /v1/video/generations` + poll `GET /v1/video/generations/{task_id}` ### Links * [Omni Flash](/en/api-reference/video-series/models/gemini-omni-flash) * [Video task poll](/en/api-reference/tasks/video-task) ## Veo 3.1 **Veo 3.1** is now available on OmniMux. ### New model * **Model ID:** `veo-3.1` * **API:** async video create + poll on `/v1/video/generations` ### Links * [Veo 3.1](/en/api-reference/video-series/models/veo-3.1) * [Video task poll](/en/api-reference/tasks/video-task) ## Claude Opus 4.7 and DeepSeek V4 New language models are available on OmniMux Chat Completions. ### New models | Model ID | Brand | | ------------------- | -------- | | `claude-opus-4-7` | Claude | | `deepseek-v4-flash` | DeepSeek | | `deepseek-v4-pro` | DeepSeek | ### API * **Endpoint:** `https://api.omnimux.ai/v1` (Chat Completions) ### Links * [Claude complete](/en/api-reference/text-series/claude/complete) * [DeepSeek complete](/en/api-reference/text-series/deepseek/complete) ## GPT Image 2 **GPT Image 2** is now available on OmniMux. ### New models * **Model IDs:** `gpt-image2`, `gpt-image2-hd` * **Modality:** image generation See model docs for size / quality parameters. ### Links * [GPT Image 2](/en/api-reference/image-series/models/gpt-image-2) * [GPT Image 2 HD](/en/api-reference/image-series/models/gpt-image-2-hd) ## MiniMax M2.5 **MiniMax M2.5** (and related MiniMax text IDs) are available on OmniMux. ### New models * **Model IDs:** `minimax-m2.5`, `minimax-m2.7` * **API:** Chat Completions ### Links * [MiniMax complete](/en/api-reference/text-series/minimax/complete) ## GPT-5.4 **GPT-5.4** series models are available on OmniMux Chat Completions. ### New models * **Model IDs:** `gpt-5.4`, `gpt-5.4-mini` * **API:** `https://api.omnimux.ai/v1` Later GPT-5.x IDs (for example `gpt-5.5`, `gpt-5.6-terra`) may also appear on live pricing — always pin the ID from the console. ### Links * [GPT complete](/en/api-reference/text-series/gpt/complete) *** **Machine-readable:** [`/data/changelog/index.json`](/data/changelog/index.json) · [`/data/changelog/pages/1.json`](/data/changelog/pages/1.json)