=== useapi.net — universal note === Generated: 2026-09-11 20:33 UTC Authentication (applies to every useapi.net API). Header: Authorization: Bearer user:- Use the COMPLETE token, including the `user:` prefix and the alphanumeric suffix. Do not truncate. Do not URL-encode. A single token authorizes every API under the user's subscription. Service-specific patterns. Identifier names (jobid / taskId / musicId / etc.), job lifecycle, response shapes, webhook semantics, and synchronous-vs-async behavior vary PER API. Use ONLY the service-specific documentation below to determine the correct request body, response shape, polling endpoint, and status values for THIS API. Do not assume conventions from another useapi.net API carry over. For cross-service context (e.g. which APIs expose the same underlying model, billing tiers, model availability matrix), see https://useapi.net/llms.txt === END universal note === === URL: https://useapi.net/docs/start-here/setup-minimax === Document URL: https://useapi.net/docs/start-here/setup-minimax --- layout: default title: Setup MiniMax description: "How to set up MiniMax (Hailuo) for the useapi.net API — connect your account and start generating via the API." parent: Start Here nav_order: 350 --- # Setup MiniMax | Hailuo AI September 25, 2024 (November 24, 2025) ## Table of contents Approximately 5 minutes to complete setup steps. --- > This is the setup guide for [MiniMax API](/docs/api-minimax-v1). A [Hailuo AI](https://hailuoai.video) account and a [useapi.net subscription](/docs/subscription) are required for the API to work. ### Connect your account (recommended) Link your Hailuo account right in your own browser — a quick copy-and-paste, with no software to install and no remote setup. It runs entirely on your own machine and never touches your Google login. [Open the connect page](/assets/setup-browser/minimax.html) Prefer to do it by hand? Continue with the manual steps below. --- ## Setup hailuoai.video account You need a [hailuoai.video](https://hailuoai.video) account to to use MiniMax API. Sign-in with your Google account at [hailuoai.video](https://hailuoai.video). You can create as many accounts as you need. Our API uses automated load balancing and will select an account with available capacity. ### Step 1 • Navigate to hailuoai.video Open Chromium-compatible browser (e.g. [Google Chrome](https://www.google.com/chrome/), [Microsoft Edge](https://www.microsoft.com/en-us/edge) or [Opera](https://www.opera.com/)) and navigate to [https://hailuoai.video](https://hailuoai.video). Once the page is fully loaded, ensure that you're logged in with your Google account `1`. Open [Developer Tools](https://developer.chrome.com/docs/devtools) by right-clicking on the page and selecting "Inspect Element" `2`. Finally refresh page `3`. ![](/assets/images/minimax_video_setup_1.png) ### Step 2 • Locate `url` Select Developer Tools » Network `1`: * On the left side many click on `Assets` submenu `2`. * Type `/cursor` in the filter box `3` and hit Enter. * Make sure that `All` or `Fetch/XHR` is selected `4`. * You should see a http call(s) entry as shown below `5`, click on that entry. * Select "Headers" tab `6`. * Locate General » Request URL `7` as shown below and copy its value. This is your `url`. [EXPAND](/assets/images/minimax_video_setup_2.png){:target="_blank"} ![](/assets/images/minimax_video_setup_2.png) As an example below the `url` is ``` https://hailuoai.video/v3/api/multimodal/video/my/cursor?type=next¤tID=0&limit=30&scene=mine&filterType=2&device_platform=web&app_id=3001&version_code=22202&biz_id=0&lang=en&uuid=8a2d8b5d-ac0d-4bb5-8028-3177fa64f861&device_id=301350748241866752&os_name=Windows&browser_name=opera&device_memory=8&cpu_core_num=12&browser_language=en-US&browser_platform=Win32&screen_width=1920&screen_height=1080&unix=1728704107000 ``` ### Step 3 • Locate `token` value Locate Request Headers » Token `7` as shown below and copy it's value. This is your `token`. [EXPAND](/assets/images/minimax_video_setup_3.png){:target="_blank"} ![](/assets/images/minimax_video_setup_3.png) As an example below the `token` is ``` eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzIxNTk4MjksInVzZXIiOnsiaWQiOiIzMDEzNDg0MDk1ODE4MzgzMzYiLCJuYW1lIjoidXNlIGFwaSIsImF2YXRhciI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0lLNEJaMmpfSlIxcTh3TkFKU2RlZzlwVHZlTDJTSVhFRjg4TkU4MV85VlowbFBRQT1zOTYtYyIsImRldmljZUlEIjoiIn19.1-zGnbUfENnVdjDGDBuaZ4Sf7rTelfqUKk5XNj7liE4 ``` If you are curious, you can use [jwt.io](https://jwt.io) to decode the token and see its content. ## Verify and add account Use the form below to verify your credentials and add your MiniMax account. Select **Add Account** to complete setup, or **Verify** to test your credentials first. You should receive response `200` if successful. You can also use [POST /accounts](/docs/api-minimax-v1/post-minimax-accounts-account) directly.
=== URL: https://useapi.net/docs/api-minimax-v1 === Document URL: https://useapi.net/docs/api-minimax-v1 --- layout: default title: MiniMax API v1 description: "useapi.net MiniMax (Hailuo) API v1 — REST API for MiniMax / Hailuo AI: 19 video models across Hailuo 01/02/2.3, Hailuo 3.0, Veo 3.1, Sora 2 and Seedance 2.0 (Standard/Fast/Mini), image generation (Midjourney, Nano Banana, GPT Image, Seedream), music generation with Music-3.0 and Music-2.6, and text to speech with ten Speech models and voice cloning." nav_order: 3000 has_children: true permalink: /docs/api-minimax-v1 --- # MiniMax API v1 September 25, 2024 (August 24, 2026) This is [experimental](/docs/legal) API for for the [MiniMax AI](https://minimaxi.com), a Chinese AI startup backed by Alibaba and Tencent. We provide full API support for following MiniMax/Hailuo AI models: * MiniMax [videos](/docs/api-minimax-v1/post-minimax-videos-create) supports 19 models across 5 families: [Hailuo 01/02/2.3](https://hailuoai.video), [Hailuo 3.0](https://hailuoai.video), [Veo 3.1](https://deepmind.google/models/veo/), [Sora 2](https://openai.com/sora/), and [Seedance 2.0 Standard/Fast/Mini](https://seed.bytedance.com/). These models are notable for generating ultra-realistic video clips with precise prompt following. * MiniMax [images](/docs/api-minimax-v1/post-minimax-images-create) supports 9 models: [Midjourney V7](https://www.midjourney.com/), [Midjourney NiJi 7](https://www.midjourney.com/), [Nano Banana 2](https://hailuoai.video), [Nano Banana Pro](https://blog.google/technology/ai/nano-banana-pro/), [GPT Image 1.5](https://openai.com/index/introducing-4o-image-generation/), [GPT Image 2](https://openai.com/index/introducing-4o-image-generation/), [Seedream 4.5/5.0](https://seed.bytedance.com/en/seedream4_5), and image-01. * MiniMax [agent](/docs/api-minimax-v1/post-minimax-agent) supports multiple AI models including video generation ([Hailuo 2.3](https://hailuoai.video/ai-video-landing/ai-video-generator-hailuo-2-3), [02](https://www.minimax.io/news/minimax-hailuo-02), [Veo 3.1](https://deepmind.google/models/veo/), [Sora 2](https://openai.com/sora/)), image generation ([Midjourney V7/NiJi 7](https://www.midjourney.com/), [Nano Banana 2/Pro](https://blog.google/technology/ai/nano-banana-pro/), [Seedream 4.5/5.0](https://seed.bytedance.com/en/seedream4_5), [Kontext](https://bfl.ai/models/flux-kontext), [Qwen](https://github.com/QwenLM/Qwen-Image), Kolors), and audio synthesis ([Speech 2.5](https://minimax-ai.chat/models/minimax-speech-25/), [Music 2.0](https://www.minimax.io/news/minimax-music-20)). * MiniMax [music](/docs/api-minimax-v1/post-minimax-music-create) generates complete songs — vocals and instrumental — with [Music-3.0](https://www.minimax.io/audio/music) and Music-2.6. Write your own lyrics or let the model write them from your prompt, and stream the audio back while it renders. Upload a track as a [reference](/docs/api-minimax-v1/post-minimax-music-reference) and the model covers it, keeping the melody and structure while your prompt sets the genre. * MiniMax [speech](/docs/api-minimax-v1/post-minimax-speech-create) turns text into narration with ten models, [Speech-2.8](https://www.minimax.io/audio/text-to-speech) down to Speech-01, in `hd` and `turbo` variants. Mark the text up with emotions, breaths and pauses, get word timings back for captions, and [clone a voice](/docs/api-minimax-v1/post-minimax-speech-clone-voice) from a sample to narrate in it. [GET speech/voices](/docs/api-minimax-v1/get-minimax-speech-voices) lists 600+ voices across 40 languages, and MiniMax keeps adding. Nano Banana 2/Pro deployment provided by MiniMax has less content moderation compared to Google Flow and is capable of editing photos of minors or famous people.
💲 Credits estimator Actual costs may change, see [hailuoai.video](https://hailuoai.video) for current pricing. The **$ at Master** column prices each generation on the [$79.99/m Master](https://hailuoai.video/subscribe/modal) plan ($0.00762/credit, the lowest cost per credit). Paid plans apply Seedance 2.0 at half credits, already reflected below. Seedance 2.0 and Hailuo 3.0 bill per second, and a video reference is charged on its own length on top of the generated clip — at a lower per-second rate than the output. Image and audio references carry no per-second charge. The calculator below takes a video reference length so you can see the full cost. | Plan | Monthly | Credits/mo | $/credit | |:-----|:-----:|:-----:|:-----:| | Standard | $9.99 | 1,000 | $0.00999 | | Pro | $34.99 | 4,500 | $0.00778 | | Master | $79.99 | 10,500 | $0.00762 | | Max | $199.99 | 20,000 | $0.01000 | **Images** — per image, see [images/create](/docs/api-minimax-v1/post-minimax-images-create) for details | Model | Credits | $ at Master | |:------|:-------:|:-----------:| | image-01 | 1 | $0.008 | | midjourney-v7, midjourney-niji7 | 3 | $0.023 | | seedream-4.5, seedream-5.0 | 4 | $0.030 | | nano-banana-2 (512P/1K) | 4 | $0.030 | | nano-banana-2 (2K) | 5 | $0.038 | | nano-banana-2 (4K) | 8 | $0.061 | | nano-banana-pro (1K/2K) | 6 | $0.046 | | nano-banana-pro (4K) | 10 | $0.076 | | gpt-image-1.5 (Low/Medium/High) | 4 / 8 / 15 | $0.030 / $0.061 / $0.114 | | gpt-image-2 quality `low` (1K/2K/4K) | 2 / 5 / 10 | $0.015 / $0.038 / $0.076 | | gpt-image-2 quality `medium` (1K/2K/4K) | 8 / 20 / 40 | $0.061 / $0.152 / $0.305 | | gpt-image-2 quality `high` (1K/2K/4K) | 30 / 80 / 160 | $0.229 / $0.609 / $1.219 | **Videos** — see [videos/create](/docs/api-minimax-v1/post-minimax-videos-create) for details Billed per second, so multiply by your `duration` (4–15). A video reference is charged on its own length as well, at the rate in the last column — image and audio references add nothing per second. | Model | Resolution | Credits/sec | Video ref/sec | $ at Master, per sec | |:------|:-----------|:-----------:|:-------------:|:--------------------:| | Hailuo-3.0 | 768p | 7 | 7 | $0.053 | | Hailuo-3.0 | 2K | 12 | 12 | $0.091 | | Seedance-2.0 | 480p | 10 | 6 | $0.076 | | Seedance-2.0 | 720p | 21 | 14 | $0.160 | | Seedance-2.0 | 1080p | 50 | 30 | $0.381 | | Seedance-2.0 | 4K | 100 | 60 | $0.762 | | Seedance-2.0-Fast | 480p | 8 | 4 | $0.061 | | Seedance-2.0-Fast | 720p | 17 | 11 | $0.130 | | Seedance-2.0-Mini | 480p | 5 | 3 | $0.038 | | Seedance-2.0-Mini | 720p | 11 | 7 | $0.084 | Billed per video, at a fixed price per option. | Model | Option | Credits | $ at Master | |:------|:-------|:-------:|:-----------:| | Hailuo 01 (all models) | — | 25 | $0.190 | | Hailuo 02, T2V-2.3, I2V-2.3 | 768p / 1080p | 25–80 | $0.190–$0.609 | | I2V-2.3-Fast | 768p / 1080p | 15–50 | $0.114–$0.381 | | Sora-2 | 4 / 8 / 12 sec | 40 / 80 / 120 | $0.305 / $0.609 / $0.914 | | Veo-3.1, Veo-3.1-S2V | 720p / 1080p / 4K | 120 / 120 / 180 | $0.914 / $0.914 / $1.371 | | Veo-3.1-Fast, Veo-3.1-S2V-Fast | 720p / 1080p / 4K | 60 / 60 / 90 | $0.457 / $0.457 / $0.686 | **Interactive calculator** — pick a plan and model for the per-generation cost:
Estimate only — it does not include any discounts or promotional pricing. Plan rates are the current published monthly prices.
💲 Music credits Music bills against the [MiniMax Audio](https://www.minimax.io/audio/subscribe) balance, which is a separate ledger from the video credits above — a video plan does not pay for songs, and vice versa. 300 credits per song, whatever the model, length, or whether it has vocals. A `quantity` of 3 costs 900. Both prices below are MiniMax's own — what changes is which MiniMax product you buy: | Cost of one song | | |:---|---:| | [minimax.io/audio](https://www.minimax.io/audio/subscribe) — Pro plan, $99/mo (what this API uses) | $0.01 | | [platform.minimax.io](https://platform.minimax.io/docs/guides/pricing-paygo#music) — pay-as-you-go | $0.15 | A fifteenth of the price of MiniMax's own developer API, for the same song. Also worth knowing: - Other tiers carry 100,000 credits on Starter (~330 songs), 330,000 on Creator (~1,100), 750,000 on Standard (~2,500). - Pay-as-you-go adds $0.01 when the model writes the lyrics. On a minimax.io plan that is part of the same 300 credits. Actual costs may change, see [minimax.io](https://www.minimax.io/audio/subscribe) for current pricing.
💲 Speech credits Speech bills against the same [MiniMax Audio](https://www.minimax.io/audio/subscribe) balance as music — the same plans, so characters and songs draw on one pool. Billing is per character — 1 credit on an `hd` model, 0.6 on a `turbo` one, so `turbo` costs 40% less and takes twice the text in a single call. All three prices below are MiniMax's own — what changes is which MiniMax product you buy: | Cost of 1,000,000 characters on `speech-2.8-hd` | | |:---|---:| | [minimax.io/audio](https://www.minimax.io/audio/subscribe) — Pro plan, $99/mo (what this API uses) | $33 | | [platform.minimax.io](https://platform.minimax.io/docs/guides/pricing-speech) — Audio Subscription, Pro $99/mo | $90 | | [platform.minimax.io](https://platform.minimax.io/docs/guides/pricing-paygo) — pay-as-you-go | $100 | A third of the price of MiniMax's own developer API, for the same audio. Also worth knowing: - Other tiers carry 100,000 credits on Starter, 330,000 on Creator, 750,000 on Standard. - Voice cloning costs no credits. It uses a voice slot — 10 on Starter up to 250 on Pro — which [POST speech/delete-voice](/docs/api-minimax-v1/post-minimax-speech-delete-voice) frees and [GET speech/equity](/docs/api-minimax-v1/get-minimax-speech-equity) counts. - Emotion tags are free. Sound and pause markup is billed as ordinary text. - On `turbo` it is $19.80 a million against pay-as-you-go's $60. MiniMax discounts both sides by the same 0.6, so the gap stays a third whichever model you pick. Actual costs may change, see [minimax.io](https://www.minimax.io/audio/subscribe) for current pricing.
[Setup MiniMax](/docs/start-here/setup-minimax) [Postman collection](https://www.postman.com/useapinet/useapi-net/collection) (August 24, 2026) [LLM-friendly API spec](https://useapi.net/assets/aibot/api-minimax-v1.txt) Feed this to your LLM to build integrations [Q&A: How is your experimental MiniMax API different from the official MiniMax API?](/docs/questions-and-answers#how-is-your-experimental-minimax-api-different-from-the-official-minimax-api) Examples: * [MiniMax: Music Generation, Three Ways](/blog/260817) * [MiniMax H3 vs Seedance 2.0: 2K with native audio, head to head](/blog/260730) * [Seedance 2.0: Standard vs Fast vs Mini, omni references](/blog/260626b) * [17 AI Image Models: The Showdown](/blog/260309i) * [Nano Banana 2](/blog/260227) * [Midjourney V7: prompts, image references, and pricing](/blog/260629) * [MiniMax Sora 2 & Midjourney V7](/blog/260224) * [MiniMax Sora 2, Veo 3.1](/blog/260102) * [MiniMax Agent: Nano Banana 2/Pro, Speech 2.5, Music 2.0 and more...](/blog/251124) * [MiniMax 2.3](/blog/251030) * [MiniMax 02 End Frame](/blog/250830) * [Groundbreaking Video Agents](/blog/250630) * [MiniMax Images](/blog/250508) Articles: * [Fun with MiniMax API](/docs/articles/minimax-bash) * [How to Generate Text-to-Speech Audio with the MiniMax (Hailuo) API](/docs/articles/minimax-speech-bash) * [Seedance 2.0 API Pricing: The Cheapest Ways to Run It, Compared](/docs/articles/seedance-2-api-pricing) * [AI Music APIs One Generation Later: MiniMax Music-3.0 vs Lyria 3.5 vs Mureka V9.5](/docs/articles/ai-music-flagships-compared) Developer Community: * Discord Server * Telegram Channel === URL: https://useapi.net/docs/api-minimax-v1/del-minimax-accounts-account === Document URL: https://useapi.net/docs/api-minimax-v1/del-minimax-accounts-account --- layout: default title: DEL accounts/`account` description: "Delete a previously configured MiniMax account by name via DEL accounts/account in the useapi.net MiniMax API v1." parent: MiniMax API v1 nav_order: 400 --- ## Delete MiniMax API account September 25, 2024 (March 17, 2025) --- > **https://api.useapi.net/v1/minimax/accounts/`account`** The `account` value should correspond to an account configured previously via a [POST /accounts](/docs/api-minimax-v1/post-minimax-accounts-account) request. ##### Request Headers ``` yaml Authorization: Bearer {API token} ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Responses **204** **204 No Content** **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` **404** **404 Not Found** ##### Model ```typescript { // TypeScript, all fields are optional error: string, errorDetails: string, code: number } ``` ##### Examples **Curl** ``` bash curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X DELETE https://api.useapi.net/v1/minimax/accounts/ ``` **JavaScript** ``` javascript const account = "Previously configured account"; const apiUrl = `https://api.useapi.net/v1/minimax/accounts/${channnel}`; const token = "API token"; const data = { method: 'DELETE', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }; const response = await fetch(apiUrl, data); const result = await response.json(); console.log("response", {response, result}); ``` **Python** ``` python import requests account = "Previously configured account" apiUrl = f"https://api.useapi.net/v1/minimax/accounts/{account}" token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.delete(apiUrl, headers=headers) print(response, response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/del-minimax-files-fileID === Document URL: https://useapi.net/docs/api-minimax-v1/del-minimax-files-fileID --- layout: default title: DEL files/`fileID` description: "Delete an uploaded file by fileID via DEL files/fileID in the useapi.net MiniMax API v1 — always succeeds, even if the file is already gone." parent: MiniMax API v1 nav_order: 3500 --- ## Delete file December 23, 2024 --- Use this endpoint to delete file uploaded by * [POST files](/docs/api-minimax-v1/post-minimax-files) This endpoint will return a response `200` if you're trying to delete a file that does not exist or has already been deleted. It is safe to say it always succeeds. > **https://api.useapi.net/v1/minimax/files/`fileID`** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Path parameter - `fileID` is **required**. Specify the fileID you want to delete. ##### Responses **200** **200 OK** **400** **400 Bad Request** ```json { "error": "", "code": 400 } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` ##### Examples **Curl** ``` bash curl -X DELETE "https://api.useapi.net/v1/minimax/files/fileID" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` **JavaScript** ``` javascript const token = "API token"; const fileID = "fileID to delete"; const apiUrl = `https://api.useapi.net/v1/minimax/files/${fileID}`; const response = await fetch(apiUrl, { method: 'DELETE', headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` **Python** ``` python import requests token = "API token" fileID = "fileID to delete" apiUrl = f"https://api.useapi.net/v1/minimax/files/{fileID}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.delete(apiUrl, headers=headers) print(response, response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/del-minimax-images-imageId === Document URL: https://useapi.net/docs/api-minimax-v1/del-minimax-images-imageId --- layout: default title: DEL images/`imageId` description: "Soft-delete a generated image by imageId via DEL images/imageId in the useapi.net MiniMax API v1 — hides it from GET images but keeps it retrievable by ID." parent: MiniMax API v1 nav_order: 1400 --- ## Delete image March 17, 2025 --- Use this endpoint to delete image generated by * [POST images/create](/docs/api-minimax-v1/post-minimax-images-create) This endpoint will return a response `200` if you're trying to delete a image that does not exist or has already been deleted. It is safe to say it always succeeds. Images are soft-deleted. While the image will no longer appear in [GET images](/docs/api-minimax-v1/get-minimax-images), you can still retrieve it via [GET images/`imageId`](/docs/api-minimax-v1/get-minimax-images-imageId). > **https://api.useapi.net/v1/minimax/images/`imageId`** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Path parameter - `imageId` is **required**. Specify the imageId you want to delete. ##### Responses **200** **200 OK** **400** **400 Bad Request** ```json { "error": "", "code": 400 } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` ##### Examples **Curl** ``` bash curl -X DELETE "https://api.useapi.net/v1/minimax/images/" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` **JavaScript** ``` javascript const token = "API token"; const imageId = "imageId to delete"; const apiUrl = `https://api.useapi.net/v1/minimax/images/${imageId}`; const response = await fetch(apiUrl, { method: 'DELETE', headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` **Python** ``` python import requests token = "API token" imageId = "imageId to delete" apiUrl = f"https://api.useapi.net/v1/minimax/images/{imageId}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.delete(apiUrl, headers=headers) print(response, response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/del-minimax-music-musicId === Document URL: https://useapi.net/docs/api-minimax-v1/del-minimax-music-musicId --- layout: default title: DELETE music/`musicId` description: "Remove a generated song from the MiniMax account via DELETE music/musicId in the useapi.net MiniMax API v1 — takes the musicId returned by POST music/create." parent: MiniMax API v1 nav_order: 3100 --- ## Delete Music August 17, 2026 --- Deletes a song from the MiniMax account it was generated on. The track disappears from [GET music](/docs/api-minimax-v1/get-minimax-music) and its `audio_url` stops resolving, so download anything you want to keep first. > **https://api.useapi.net/v1/minimax/music/{musicId}** ##### Request Headers ``` yaml Authorization: Bearer {API token} ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Query Parameters - `musicId` is **required**, the value returned by [POST music/create](/docs/api-minimax-v1/post-minimax-music-create). Path parameter, for example `user:12345-minimax:123456789012345678-music:987654321098765`. **Notes:** - The account is taken from the `musicId` itself, so no `account` parameter is needed. - A song that is still rendering **cannot** be deleted — the call returns `409`. Wait until [GET music/musicId](/docs/api-minimax-v1/get-minimax-music-musicId) reports `statusFinal` as `true`, then delete. The generation is unaffected by the rejected attempt. ##### Responses **200** **200 OK** ```json { "musicId": "user:12345-minimax:123456789012345678-music:987654321098765", "deleted": true } ``` **400** **400 Bad Request** ```json { "error": "Path parameter musicId (bogus) has incorrect format", "code": 400 } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` **409** **409 Conflict** ```json { "error": "This song is still generating and cannot be deleted yet. Wait for statusFinal, then delete.", "code": 409 } ``` **596** **596 Account Error** ```json { "error": "Your minimax account has pending error. Please address this issue at https://useapi.net/docs/api-minimax-v1/post-minimax-accounts-account before making any new API calls.", "code": 596 } ``` A `musicId` belonging to a different useapi.net user is rejected with `400 Path parameter musicId (…) unauthorized access to user:NNNNN detected`. ##### Model ```typescript { // TypeScript, all fields are optional musicId: string, // The song that was deleted deleted: boolean } ``` ##### Examples **Curl** ```bash curl -X DELETE "https://api.useapi.net/v1/minimax/music/user:12345-minimax:123456789012345678-music:987654321098765" \ -H "Authorization: Bearer …" ``` **JavaScript** ```javascript const musicId = "user:12345-minimax:123456789012345678-music:987654321098765"; const response = await fetch(`https://api.useapi.net/v1/minimax/music/${musicId}`, { method: "DELETE", headers: { "Authorization": "Bearer …" } }); console.log(await response.json()); ``` **Python** ```python import requests music_id = "user:12345-minimax:123456789012345678-music:987654321098765" response = requests.delete( f"https://api.useapi.net/v1/minimax/music/{music_id}", headers={"Authorization": "Bearer …"} ) print(response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/del-minimax-scheduler-videoId === Document URL: https://useapi.net/docs/api-minimax-v1/del-minimax-scheduler-videoId --- layout: default title: DEL scheduler/`id` description: "Remove a video, image, music or speech generation from scheduler tracking via DEL scheduler/id in the useapi.net MiniMax API v1 without cancelling the underlying job." parent: MiniMax API v1 nav_order: 3800 --- ## Remove video, image, music or speech generation from being tracked by the scheduler September 25, 2024 (August 17, 2026) --- API tracks the running generations of images and videos. This is done to maintain a list of currently executed video generations and to send webhook messages via optionally provided `replyUrl` parameters. If you want to remove image or video generation from being tracked by the scheduler, use this endpoint. > **https://api.useapi.net/v1/minimax/scheduler/`id`** ##### Request Headers ``` yaml Authorization: Bearer {API token} ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Path parameter - `id` is **required**. Specify videoId, imageId, musicId or audioId you want to stop tracking. **Notes:** - Stopping tracking does not cancel the work at MiniMax. A video or song carries on and can still be found through its own GET endpoint. - Speech is the exception worth knowing about. An `audioId` is issued by useapi.net rather than MiniMax, so once it stops being tracked there is nothing left to resolve it — [GET speech/`audioId`](/docs/api-minimax-v1/get-minimax-speech_audio_id) reports it as `failed` from that point on. The recording itself still completes and appears in [GET speech](/docs/api-minimax-v1/get-minimax-speech). ##### Responses **204** **204 No Content** **400** **400 Bad Request** ```json { "error": "", "code": 400 } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` **404** **404 Not Found** ```json { "error": "Unable to locate running " } ``` ##### Model ```typescript { // TypeScript, all fields are optional error: string code: number } ``` ##### Examples **Curl** ``` bash curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X DELETE "https://api.useapi.net/v1/minimax/scheduler/" ``` **JavaScript** ``` javascript const videoId = "videoId to cancel"; const apiUrl = `https://api.useapi.net/v1/minimax/scheduler/${videoId}`; const token = "API token"; const data = { method: 'DELETE', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }; const response = await fetch(apiUrl, data); const result = await response.json(); console.log("response", {response, result}); ``` **Python** ``` python import requests videoId = "videoId to cancel" apiUrl = f"https://api.useapi.net/v1/minimax/scheduler/{videoId}" token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.delete(apiUrl, headers=headers) print(response, response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/del-minimax-speech-audio_id === Document URL: https://useapi.net/docs/api-minimax-v1/del-minimax-speech-audio_id --- layout: default title: DEL speech/`audio_id` description: "Delete a speech recording from a MiniMax account via DELETE speech/audioId in the useapi.net MiniMax API v1, removing it from the account history for good." parent: MiniMax API v1 nav_order: 1901 --- ## Delete text-to-speech audio clip December 27, 2024 (August 24, 2026) --- This endpoint will delete audio clip generated by * [POST speech/create](/docs/api-minimax-v1/post-minimax-speech-create) * [POST speech/create-mp3](/docs/api-minimax-v1/post-minimax-speech-create-mp3) This endpoint returns `200` for an audio clip that does not exist or has already been deleted. The one case that does not succeed is a generation still in flight — see the notes below. > **https://api.useapi.net/v1/minimax/speech/`audio_id`** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Path parameter - `audio_id` is **required**. Specify the audio_id you want to delete. **Notes:** - Accepts an `audioId` returned by [POST speech/create](/docs/api-minimax-v1/post-minimax-speech-create) as well as any `audio_id` listed by [GET speech](/docs/api-minimax-v1/get-minimax-speech). - A generation that is still running cannot be deleted, because there is nothing stored yet. Cancel it with [DELETE scheduler/`id`](/docs/api-minimax-v1/del-minimax-scheduler-videoId) instead, passing the same `audioId`. - Deleting is permanent. The recording leaves the MiniMax account and stops appearing in [GET speech](/docs/api-minimax-v1/get-minimax-speech). ##### Responses **200** **200 OK** **400** **400 Bad Request** A generation that is still running has nothing stored to delete yet: ```json { "error": "Generation is still running. Cancel it with DELETE /v1/minimax/scheduler/user:12345-minimax:123456789012345678-audio:178737039436895391" } ``` And one that never produced a recording: ```json { "error": "Nothing was generated for this audioId, so there is nothing to delete" } ``` Anything else: ```json { "error": "", "code": 400 } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` **596** **596 Account Error** ```json { "error": "Your minimax account has pending error. Please address this issue at https://useapi.net/docs/api-minimax-v1/post-minimax-accounts-account before making any new API calls.", "code": 596 } ``` ##### Examples **Curl** ``` bash curl -X DELETE "https://api.useapi.net/v1/minimax/speech/" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` **JavaScript** ``` javascript const token = "API token"; const audio_id = "audio_id to delete"; const apiUrl = `https://api.useapi.net/v1/minimax/speech/${audio_id}`; const response = await fetch(apiUrl, { method: 'DELETE', headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` **Python** ``` python import requests token = "API token" audio_id = "audio_id to delete" apiUrl = f"https://api.useapi.net/v1/minimax/speech/{audio_id}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.delete(apiUrl, headers=headers) print(response, response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/del-minimax-videos-videoId === Document URL: https://useapi.net/docs/api-minimax-v1/del-minimax-videos-videoId --- layout: default title: DEL videos/`videoId` description: "Delete a generated video by videoId via DEL videos/videoId in the useapi.net MiniMax API v1 — always returns 200, even if already deleted." parent: MiniMax API v1 nav_order: 1000 --- ## Delete video December 23, 2024 --- Use this endpoint to delete video generated by * [videos/create](/docs/api-minimax-v1/post-minimax-videos-create) This endpoint will return a response `200` if you're trying to delete a video that does not exist or has already been deleted. It is safe to say it always succeeds. > **https://api.useapi.net/v1/minimax/videos/`videoId`** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Path parameter - `videoId` is **required**. Specify the videoId you want to delete. ##### Responses **200** **200 OK** **400** **400 Bad Request** ```json { "error": "", "code": 400 } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` ##### Examples **Curl** ``` bash curl -X DELETE "https://api.useapi.net/v1/minimax/videos/videoId" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` **JavaScript** ``` javascript const token = "API token"; const videoId = "videoId to delete"; const apiUrl = `https://api.useapi.net/v1/minimax/videos/${videoId}`; const response = await fetch(apiUrl, { method: 'DELETE', headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` **Python** ``` python import requests token = "API token" videoId = "videoId to delete" apiUrl = f"https://api.useapi.net/v1/minimax/videos/{videoId}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.delete(apiUrl, headers=headers) print(response, response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/get-minimax-accounts-account === Document URL: https://useapi.net/docs/api-minimax-v1/get-minimax-accounts-account --- layout: default title: GET accounts/`account` description: "Retrieve the configuration for a single MiniMax account by name via GET accounts/account in the useapi.net MiniMax API v1." parent: MiniMax API v1 nav_order: 200 --- ## Retrieve MiniMax API account configuration for `account` September 25, 2024 (March 17, 2025) --- > **https://api.useapi.net/v1/minimax/accounts/`account`** The `account` value should correspond to an account configured previously via a [POST /accounts](/docs/api-minimax-v1/post-minimax-accounts-account) request. ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Responses **200** **200 OK** ```json { "account": "123456", "jwt": { "token": "abc…secured…xyz", "user": { "deviceID": "123456789", "id": "123456", "isAnonymous": true, "name": "", "avatar": "" }, "exp": 1734858598.864, "iat": 1732266598.864, "host": "hailuoai.video", "searchParams": "device_platform=web&app_id=3001&version_code=22201&uuid=b5df53d1-4c0d-4c77-8422-87e3f3b1a1d6&device_id=123456789&os_name=Windows&browser_name=chrome&device_memory=8&cpu_core_num=4&browser_language=en-US&browser_platform=Win32&screen_width=1920&screen_height=1080&unix=1732266598000", "iat_Issued": "2024-01-01T00:00:00.000Z", "exp_Expire": "2024-12-01T00:00:00.000Z" }, "maxJobs": 1, "supportVideo": true, "supportChat": true, "supportAudio": true } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` **404** **404 Not Found** Configuration not found. To create configuration use [POST /accounts](/docs/api-minimax-v1/post-minimax-accounts-account). ##### Model ```typescript { // TypeScript, all fields are optional account: string jwt: { token: string user: { deviceID: string id: string isAnonymous: boolean name: string avatar: string }, exp: number iat: number host: string searchParams: string iat_Issued: string exp_Expire: string } maxJobs: number supportVideo: boolean supportChat: boolean supportAudio: boolean supportMusic: boolean } ``` ##### Examples **Curl** ``` bash curl https://api.useapi.net/v1/minimax/accounts/ \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` **JavaScript** ``` javascript const token = "API token"; const account = "Previously configured account"; const apiUrl = `https://api.useapi.net/v1/minimax/accounts/${account}`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` **Python** ``` python import requests token = "API token" account = "Previously configured account" apiUrl = f"https://api.useapi.net/v1/minimax/accounts/{account}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/get-minimax-accounts === Document URL: https://useapi.net/docs/api-minimax-v1/get-minimax-accounts --- layout: default title: GET accounts description: "List all configured MiniMax API accounts via GET accounts in the useapi.net MiniMax API v1 — used for load-balanced multi-account setups." parent: MiniMax API v1 nav_order: 100 --- ## Retrieve MiniMax API accounts configuration September 25, 2024 (March 17, 2025) --- For your convenience, you can specify your MiniMax configuration values under your MiniMax account. If you specify multiple MiniMax accounts, the API will automatically perform load balancing by randomly selecting an account with available capacity before making calls to MiniMax. This endpoint retrieves the complete list of configured API accounts for MiniMax. > **https://api.useapi.net/v1/minimax/accounts** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Responses **200** **200 OK** ```json { "123456": { "account": "123456", "jwt": { "token": "abc…secured…xyz", "user": { "deviceID": "123456789", "id": "123456", "isAnonymous": true, "name": "", "avatar": "" }, "exp": 1734858598.864, "iat": 1732266598.864, "host": "hailuoai.video", "searchParams": "device_platform=web&app_id=3001&version_code=22201&uuid=b5df53d1-4c0d-4c77-8422-87e3f3b1a1d6&device_id=123456789&os_name=Windows&browser_name=chrome&device_memory=8&cpu_core_num=4&browser_language=en-US&browser_platform=Win32&screen_width=1920&screen_height=1080&unix=1732266598000", "iat_Issued": "2024-01-01T00:00:00.000Z", "exp_Expire": "2024-12-01T00:00:00.000Z" }, "maxJobs": 1, "supportVideo": true, "supportChat": true, "supportAudio": true }, "78910": { "account": "78910", "jwt": { "token": "edf…secured…lmn", "user": { "deviceID": "987654321", "id": "78910", "isAnonymous": true, "name": "", "avatar": "" }, "host": "hailuoai.com", "exp": 1744858598.864, "iat": 1742266598.864, "searchParams": "device_platform=web&app_id=3001&version_code=22201&uuid=92f1a65c-3e9e-4a37-8bd7-8615a6cf60ee&device_id=987654321&os_name=Windows&browser_name=firefox&device_memory=16&cpu_core_num=8&browser_language=en-US&browser_platform=Win64&screen_width=2560&screen_height=1440&unix=1742266598000", "iat_Issued": "2025-01-01T00:00:00.000Z", "exp_Expire": "2025-12-01T00:00:00.000Z" }, "maxJobs": 1, "supportVideo": true, "supportChat": true, "supportAudio": true } } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` **404** **404 Not Found** Configuration not found. To create configuration use [POST /accounts](/docs/api-minimax-v1/post-minimax-accounts-account). ##### Model ```typescript { // TypeScript, all fields are optional [account: string]: { account: string jwt: { token: string user: { deviceID: string id: string isAnonymous: boolean name: string avatar: string }, exp: number iat: number host: string searchParams: string iat_Issued: string exp_Expire: string } maxJobs: number supportVideo: boolean supportChat: boolean supportAudio: boolean supportMusic: boolean } } ``` ##### Examples **Curl** ``` bash curl https://api.useapi.net/v1/minimax/accounts \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` **JavaScript** ``` javascript const token = "API token"; const apiUrl = "https://api.useapi.net/v1/minimax/accounts"; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` **Python** ``` python import requests token = "API token" apiUrl = "https://api.useapi.net/v1/minimax/accounts" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/get-minimax-agent-jobId === Document URL: https://useapi.net/docs/api-minimax-v1/get-minimax-agent-jobId --- layout: default title: GET agent/`jobId` description: "Poll the status and results of an async AI Agent job by jobId via GET agent/jobId in the useapi.net MiniMax API v1 — jobs are retained for 31 days." parent: MiniMax API v1 nav_order: 2100 --- ## Retrieve Agent Job Status and Results November 24, 2025 (November 26, 2025) --- Retrieve the status and results of an agent job. Jobs are stored for 31 days after creation. Use this endpoint to check the progress of asynchronous agent jobs created with [POST agent](/docs/api-minimax-v1/post-minimax-agent) using `async: true`. > **https://api.useapi.net/v1/minimax/agent/`jobId`** ##### Request Headers ``` yaml Authorization: Bearer {API token} ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Path Parameters - `jobId` is **required**. The job ID to query. ##### Responses **200** **200 OK** Job found and returned successfully. **Started Job:** ```json { "jobId": "p123456789-u12345-a67890-bot:minimax", "status": "started", "created": "2025-11-23T12:34:56.789Z", "request": { "prompt": "Generate a video of a cat playing piano", "models": ["hailuo-2.3"], "async": true } } ``` **Completed Job:** ```json { "jobId": "p123456789-u12345-a67890-bot:minimax", "status": "completed", "created": "2025-11-23T12:34:56.789Z", "request": { "prompt": "Generate a video of a cat playing piano", "models": ["hailuo-2.3", "nano-banana-2"] }, "response": { "projectID": "123456789", "sectionID": "987654321", "chatID": "456789123", "msg_content": "I've generated a video of a cat playing piano and an image variation.", "timestamp": 1732366496789, "elapsedTime": "02:15", "attachments": [ { "attachmentID": "att_123456789", "type": 1, "status": 3, "file": { "fileName": "cat_piano_video.mp4", "fileUrl": "https://cdn.hailuoai.video/...mp4", "type": "video/mp4", "extra": { "width": "1280", "height": "720", "duration": "5.0", "fps": "24", "no_watermark_url": "https://cdn.hailuoai.video/.../no_watermark.mp4", "watermark_url": "https://cdn.hailuoai.video/.../watermark.mp4", "thumbnail_url": "https://cdn.hailuoai.video/.../thumb.jpg" } } }, { "attachmentID": "att_987654321", "type": 2, "status": 3, "file": { "fileName": "cat_piano_image.png", "fileUrl": "https://cdn.hailuoai.video/...png", "type": "image/png", "extra": { "model_name": "banana_2", "model_aspect_ratio": "16:9", "model_resolution": "1K" } } } ] } } ``` **Failed Job:** ```json { "jobId": "p123456789-u12345-a67890-bot:minimax", "status": "failed", "created": "2025-11-23T12:34:56.789Z", "request": { "prompt": "Generate a video", "models": ["hailuo-2.3"] }, "error": { "message": "Timeout waiting for assistant response", "status": 504 } } ``` **400** **400 Bad Request** Invalid job ID format or access denied. ```json { "error": "Error …", "code": 400 } ``` **401** **401 Unauthorized** Invalid API token. ```json { "error": "Unauthorized", "code": 401 } ``` **404** **404 Not Found** Job not found or expired after 31 days. ```json { "error": "Job not found or expired after 31 days", "code": 404 } ``` ##### Model **Downloading Generated Files:** - `file.fileUrl` - Primary download URL (may have watermark) - `file.extra.no_watermark_url` - URL without watermark (when available) - `file.extra.watermark_url` - URL with watermark - `node.agentFile.noWatermarkUrl` - Alternative watermark-free URL - `node.agentFile.url` - Alternative file URL ```typescript { // Job metadata jobId: string // Unique job identifier status: 'started' | 'completed' | 'failed' // Job status created: string // ISO 8601 timestamp code?: number // HTTP status code (optional) // Original request request: { prompt: string // User's prompt file?: Array<{ // File metadata (actual files not included) name: string size: number type: string }> models: string[] // Model IDs used async?: boolean // Async mode flag replyUrl?: string // Callback URL replyRef?: string // User's reference ID } // Agent response (only present when status is 'completed') response?: { projectID: string // MiniMax project ID sectionID: string // MiniMax section ID chatID: string // MiniMax chat ID msg_content: string // Agent's response message timestamp: number // Response timestamp (milliseconds since epoch) elapsedTime: string // Elapsed time (mm:ss format) attachments?: Array<{ // Generated files attachmentID: string // Attachment identifier type: number // Attachment type (numeric) status: number // Attachment status (3 = completed) file: { fileName: string // File name fileUrl: string // CDN URL to download file extra?: { // Additional file metadata // Video-specific fields height?: string // Video height in pixels width?: string // Video width in pixels duration?: string // Duration in seconds fps?: string // Frames per second frames?: string // Total frame count no_watermark_url?: string // CDN URL without watermark watermark_url?: string // CDN URL with watermark thumbnail_url?: string // Thumbnail image URL url?: string // Alternative URL path?: string // File path task_id?: string // Generation task ID vendor?: string // Video generation vendor subtitle_path?: string // Subtitle file path // Image-specific fields (nano-banana-2 model) model_aspect_ratio?: string // e.g. "9:16", "16:9" model_name?: string // e.g. "banana_2" model_resolution?: string // e.g. "1K", "2K" // Audio/TTS-specific fields format?: string // e.g. "mp3" type?: string // e.g. "audio" model_speech_count?: string // Character count for TTS } posterUrl?: string // Poster/thumbnail URL type?: string // File MIME type referenceType?: number // Reference type } text?: string // Associated text content extra?: Record // Additional metadata node?: { // Node/timeline information nodeID: string // Unique node identifier xStart: number // X position start yStart: number // Y position start width: number // Node width height: number // Node height layer: number // Layer index nodeType: number // Node type identifier agentFile?: { // Generated file details id: string // File ID name: string // File name url: string // File URL coverInfo?: { // Cover image info coverURL: string // Cover image URL } noWatermarkUrl?: string // URL without watermark duration?: number // Duration in seconds relativePath?: string // Relative file path thumbnailUrl?: string // Thumbnail URL } status: number // Node status playWidth: number // Playback width playHeight: number // Playback height logoType: number // Logo type identifier } }> } // Error information (only present when status is 'failed') error?: string | { // Error can be a string or object message: string // Error description status: number // HTTP status code details?: any // Additional error details } } ``` ##### Examples **Curl** ``` bash curl -H "Authorization: Bearer YOUR_API_TOKEN" \ "https://api.useapi.net/v1/minimax/agent/p123456789-u12345-a67890-bot:minimax" ``` **JavaScript** ``` javascript const token = "YOUR_API_TOKEN"; const jobId = "p123456789-u12345-a67890-bot:minimax"; const apiUrl = `https://api.useapi.net/v1/minimax/agent/${jobId}`; const response = await fetch(apiUrl, { headers: { 'Authorization': `Bearer ${token}` } }); const job = await response.json(); console.log('Job status:', job.status); if (job.status === 'completed' && job.response?.attachments) { job.response.attachments.forEach(att => { console.log(`${att.file.fileName}: ${att.file.fileUrl}`); }); } else if (job.status === 'failed') { console.error('Job failed:', job.error); } ``` **Python** ``` python import requests token = "YOUR_API_TOKEN" job_id = "p123456789-u12345-a67890-bot:minimax" api_url = f"https://api.useapi.net/v1/minimax/agent/{job_id}" response = requests.get( api_url, headers={'Authorization': f'Bearer {token}'} ) job = response.json() print(f"Job status: {job['status']}") if job['status'] == 'completed' and job.get('response', {}).get('attachments'): for att in job['response']['attachments']: print(f"{att['file']['fileName']}: {att['file']['fileUrl']}") elif job['status'] == 'failed': print(f"Job failed: {job['error']}") ``` === URL: https://useapi.net/docs/api-minimax-v1/get-minimax-agent-jobs === Document URL: https://useapi.net/docs/api-minimax-v1/get-minimax-agent-jobs --- layout: default title: GET agent/jobs description: "List all currently running AI Agent jobs via GET agent/jobs in the useapi.net MiniMax API v1 — only in-progress jobs; completed ones require GET agent/jobId." parent: MiniMax API v1 nav_order: 2200 --- ## List Running Agent Jobs November 24, 2025 --- List all currently running agent jobs for your account. This endpoint returns jobs that are still being processed (status: `started`). Completed and failed jobs are not included in this list but can be retrieved using [GET agent/`jobId`](/docs/api-minimax-v1/get-minimax-agent-jobId) if you have the job ID. > **https://api.useapi.net/v1/minimax/agent/jobs** ##### Request Headers ``` yaml Authorization: Bearer {API token} ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Responses **200** **200 OK** List of running jobs returned successfully. Returns jobs grouped by account with execution statistics. ```json { "accounts": ["67890", "54321"], "summary": { "67890": { "executing": 2 }, "54321": { "executing": 1 } }, "executing": { "67890": [ { "jobId": "p123456789-u12345-a67890-bot:minimax", "elapsed": "02:15" }, { "jobId": "p987654321-u12345-a67890-bot:minimax", "elapsed": "01:30" } ], "54321": [ { "jobId": "p456789123-u12345-a54321-bot:minimax", "elapsed": "00:45" } ] } } ``` **401** **401 Unauthorized** Invalid API token. ```json { "error": "Unauthorized" } ``` ##### Model ```typescript { accounts: string[] // List of account IDs with configured access summary: Record executing: Record> } ``` ##### Examples **Curl** ``` bash curl -H "Authorization: Bearer YOUR_API_TOKEN" \ "https://api.useapi.net/v1/minimax/agent/jobs" ``` **JavaScript** ``` javascript const token = "YOUR_API_TOKEN"; const apiUrl = "https://api.useapi.net/v1/minimax/agent/jobs"; const response = await fetch(apiUrl, { headers: { 'Authorization': `Bearer ${token}` } }); const result = await response.json(); console.log(`${result.accounts.length} account(s) configured`); for (const account of result.accounts) { const summary = result.summary[account]; if (summary) { console.log(`Account ${account}: ${summary.executing} job(s) executing`); } const jobs = result.executing[account] || []; jobs.forEach(job => { console.log(` ${job.jobId} (${job.elapsed})`); }); } ``` **Python** ``` python import requests token = "YOUR_API_TOKEN" api_url = "https://api.useapi.net/v1/minimax/agent/jobs" response = requests.get( api_url, headers={'Authorization': f'Bearer {token}'} ) result = response.json() print(f"{len(result['accounts'])} account(s) configured") for account in result['accounts']: summary = result['summary'].get(account) if summary: print(f"Account {account}: {summary['executing']} job(s) executing") jobs = result['executing'].get(account, []) for job in jobs: print(f" {job['jobId']} ({job['elapsed']})") ``` === URL: https://useapi.net/docs/api-minimax-v1/get-minimax-features === Document URL: https://useapi.net/docs/api-minimax-v1/get-minimax-features --- layout: default title: GET features description: "Retrieve account credits, available models, per-model credit costs, and queue lengths for your hailuoai.video and minimax.io/audio accounts via GET features in the useapi.net MiniMax API v1." parent: MiniMax API v1 nav_order: 450 --- ## Retrieve your hailuoai.video and minimax.io/audio accounts information October 14, 2024 (May 31, 2025) --- Retrieve your [hailuoai.video](https://hailuoai.video) and [www.minimax.io/audio](https://www.minimax.io/audio) accounts information, see [Setup MiniMax](/docs/start-here/setup-minimax) for details. This endpoint provides detailed information about available credits and features supported by your account, such as the list of models, credits required for different models, maximum size of jobs query, and so on. > **https://api.useapi.net/v1/minimax/features/?…** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Query Parameters - `account` is optional when only one [account](/docs/api-minimax-v1/get-minimax-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**. ##### Responses **200** **200 OK** ```json { "privilegeType": 0, "totalCredits": 100, "expireText": "100 points will expire within 24 hours", "videoCost": 30, "queueLength": 3, "memberText": "Subscribe", "memberHoverText": "", "expireTime": 0, "isNewUser": false, "questionText": "", "trialExpireTime": 0, "trialText": 0, "memberName": "Free", "newUserVersion": 0, "creditExpireText": [ { "credit": 100, "endTime": 1748735999999 } ], "modelControl": [ { "modelId": "image-01", "videoCost": 1, "isMember": false, "freeCount": 0, "durations": [], "resolutions": [], "modes": [], "videoCosts": [] }, { "modelId": "23000", "videoCost": 30, "isMember": false, "freeCount": 0, "durations": [], "resolutions": [], "modes": [], "videoCosts": [] }, { "modelId": "23010", "videoCost": 30, "isMember": false, "freeCount": 0, "durations": [], "resolutions": [], "modes": [], "videoCosts": [] }, { "modelId": "23001", "videoCost": 30, "isMember": false, "freeCount": 0, "durations": [], "resolutions": [], "modes": [], "videoCosts": [] }, { "modelId": "23011", "videoCost": 30, "isMember": false, "freeCount": 0, "durations": [], "resolutions": [], "modes": [], "videoCosts": [] }, { "modelId": "23102", "videoCost": 30, "isMember": false, "freeCount": 0, "durations": [], "resolutions": [], "modes": [], "videoCosts": [] }, { "modelId": "23021", "videoCost": 45, "isMember": false, "freeCount": 0, "durations": [], "resolutions": [], "modes": [], "videoCosts": [] } ], "supportModes": [], "imageQueueLength": 5, "totalCreditsStr": "100", "isPaidSubscription": false, "canManagePlan": true, "audio": { "total_credit": 100, "sub_credits": [ { "credit_type": 3, "end_time": 1748735999999, "credit": 100, "text": "", "record": [ { "credit": 100, "endTime": 1748735999999 } ], "coin_type": 0 } ], "base_resp": {} } } ``` **400** **400 Bad Request** ```json { "error": "", "code": 400 } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` ##### Model ```typescript { // TypeScript, all fields are optional privilegeType: number totalCredits: number expireText: string videoCost: number queueLength: number memberText: string memberHoverText: string expireTime: number isNewUser: boolean questionText: string trialExpireTime: number trialText: number memberName: string newUserVersion: number creditExpireText: { credit: number endTime: number }[] modelControl: { modelId: string videoCost: number isMember: boolean freeCount: number durations: any[] resolutions: any[] modes: any[] videoCosts: any[] }[] supportModes: any[] imageQueueLength: number totalCreditsStr: string isPaidSubscription: boolean canManagePlan: boolean audio: { total_credit: number sub_credits: { credit_type: number end_time: number credit: number text: string record: { credit: number endTime: number }[] coin_type: number }[] } } ``` ##### Examples **Curl** ``` bash curl "https://api.useapi.net/v1/minimax/features/?account=account" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` **JavaScript** ``` javascript const token = "API token"; const account = "Previously configured account"; const apiUrl = `https://api.useapi.net/v1/minimax/features/?account=${account}`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` **Python** ``` python import requests token = "API token" account = "Previously configured account" apiUrl = f"https://api.useapi.net/v1/minimax/features/?account={account}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/get-minimax-files === Document URL: https://useapi.net/docs/api-minimax-v1/get-minimax-files --- layout: default title: GET files description: "List images previously used in video generation via GET files in the useapi.net MiniMax API v1 — this endpoint appears retired as of March 2025 and currently returns no data." parent: MiniMax API v1 nav_order: 3400 --- ## Retrieve the list of images you have uploaded October 14, 2024 (March 17, 2025) --- Use [hailuoai.video](https://hailuoai.video) account to retrieve list of uploaded images, see [Setup MiniMax](/docs/start-here/setup-minimax) for details. This endpoint will return a list of all the images you've used previously to generate videos. Only images that were actually used for generation will be shown. **NOTE**: As of March 2025, this endpoint appears to be retired both on [hailuoai.video](https://hailuoai.video) website and internally, as it is not used by any website API calls nor does it return any data. We decided to keep it just in case it is revived. > **https://api.useapi.net/v1/minimax/files/?…** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Query Parameters - `account` is optional when only one [account](/docs/api-minimax-v1/get-minimax-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**. - `limit` is optional, specify the number of files to return. Default 10. ##### Responses **200** **200 OK** ```json [ { "file_id": "user:user_id-minimax:account-file:file_id_#1", "file_name": "", "file_type": "jpeg", "cdn_url": "", "oss_path": "", "file_scene": 10, "file_status": 1 }, { "file_id": "user:user_id-minimax:account-file:file_id_#n", "file_name": "", "file_type": "png", "cdn_url": "", "oss_path": "", "file_scene": 10, "file_status": 1 } ] ``` **400** **400 Bad Request** ```json { "error": "", "code": 400 } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` ##### Model ```typescript { // TypeScript, all fields are optional file_id: string file_name: string file_type: string cdn_url: string oss_path: string file_scene: number file_status: number }[] ``` ##### Examples **Curl** ``` bash curl "https://api.useapi.net/v1/minimax/files/?account=account" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` **JavaScript** ``` javascript const token = "API token"; const account = "Previously configured account"; const apiUrl = `https://api.useapi.net/v1/minimax/files/?account=${account}`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` **Python** ``` python import requests token = "API token" account = "Previously configured account" apiUrl = f"https://api.useapi.net/v1/minimax/files/?account={account}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/get-minimax-images-imageId === Document URL: https://useapi.net/docs/api-minimax-v1/get-minimax-images-imageId --- layout: default title: GET images/`imageId` description: "Retrieve the status and results of an image generation by imageId via GET images/imageId in the useapi.net MiniMax API v1." parent: MiniMax API v1 nav_order: 1300 --- ## Retrieve image March 17, 2025 --- Use this endpoint to retrieve status and results of * [POST images/create](/docs/api-minimax-v1/post-minimax-images-create) > **https://api.useapi.net/v1/minimax/images/`imageId`** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Path parameter - `imageId` is **required**. Specify the imageId you want to retrieve. ##### Responses **200** **200 OK** ```json { "id": "", "desc": "...prompt...", "coverURL": "https://cdn.hailuoai.video/...png?x-oss-process=image/resize,w_1080/format,webp", "videoURL": "https://cdn.hailuoai.video/....png", "status": 2, "canRetry": false, "width": 0, "height": 0, "originFiles": [], "canAppeal": false, "downloadURL": "https://cdn.hailuoai.video/....png", "hasVoice": false, "modelID": "image-01", "useOriginPrompt": false, "isBookmarked": false, "disableGenerateSimilar": false, "createTime": 1742173334234, "postStatus": 0, "userID": 923847293472394000, "createType": 4, "promptImgURL": "", "extra": { "cameraMotions": [], "promptStruct": "" }, "isVisitor": false, "videoURLs": { "feedURL": "", "downloadURLWithWatermark": "https://cdn.hailuoai.video/....png" }, "priority": 0, "generatorType": 1, "isInFolder": false, "batchID": "357846312387492374", "aspectRatio": "9:16", "fileID": "user:-minimax:-file:", "tags": [ { "type": "normal", "tagIcon": "", "tagText": "image-01" }, { "type": "normal", "tagIcon": "", "tagText": "Enable Optimization" }, { "type": "normal", "tagIcon": "", "tagText": "Image to video" } ], "duration": 0, "resolution": 0, "humanCheckStatus": 0, "userIDStr": "", "statusLabel": "completed", "statusFinal": true, "imageId": "user:-minimax:-image:" } ``` **400** **400 Bad Request** ```json { "error": "", "code": 400 } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` **404** **404 Not Found** ```json { "error": "Not found.", "code": 404 } ``` ##### Model Known `status` values: * **0** pending * **1** processing * **2** completed * **3** failed * **5** moderated * **7** moderated * **11** queued * **12** processing * **14** moderated Optional fields `message` and `percent` will contain generation progress information. ```typescript { // TypeScript, all fields are optional id: string desc: string coverURL: string videoURL: string status: number message: string // Contains the message shown to the user while the image is being processed percent: number // Contains 0-100 percent while the image is being processed canRetry: boolean width: number height: number originFiles: any[] canAppeal: boolean downloadURL: string hasVoice: boolean modelID: string useOriginPrompt: boolean isBookmarked: boolean disableGenerateSimilar: boolean createTime: number postStatus: number userID: number createType: number promptImgURL: string extra: { cameraMotions: any[] promptStruct: string } isVisitor: boolean videoURLs: { feedURL: string downloadURLWithWatermark: string } priority: number generatorType: number isInFolder: boolean batchID: string aspectRatio: string fileID: string tags: { type: string tagIcon: string tagText: string }[] duration: number resolution: number humanCheckStatus: number userIDStr: string statusLabel: string statusFinal: boolean imageId: string } ``` ##### Examples **Curl** ``` bash curl "https://api.useapi.net/v1/minimax/images/" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` **JavaScript** ``` javascript const token = "API token"; const imageId = "imageId to retrieve"; const apiUrl = `https://api.useapi.net/v1/minimax/images/${imageId}`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` **Python** ``` python import requests token = "API token" imageId = "imageId to retrieve" apiUrl = f"https://api.useapi.net/v1/minimax/images/{imageId}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/get-minimax-images === Document URL: https://useapi.net/docs/api-minimax-v1/get-minimax-images --- layout: default title: GET images description: "List all images you have generated via GET images in the useapi.net MiniMax API v1, with pagination and optional account filter." parent: MiniMax API v1 nav_order: 1200 --- ## Retrieve the list of images you have generated March 17, 2025 --- Use [hailuoai.video](https://hailuoai.video) account to retrieve list of generated images, see [Setup MiniMax](/docs/start-here/setup-minimax) for details. Returned image `fileID` value can be used as a parameter for [POST videos/create](/docs/api-minimax-v1/post-minimax-videos-create). > **https://api.useapi.net/v1/minimax/images/?…** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Query Parameters - `account` is optional when only one [account](/docs/api-minimax-v1/get-minimax-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**. - `limit` is optional, specify the number of images to return. Default 30. - `lastImageId` is optional, specify the image id from where to start. ##### Responses **200** **200 OK** ```json { "images": [ { "id": "", "desc": "...prompt...", "coverURL": "https://cdn.hailuoai.video/...png?x-oss-process=image/resize,w_1080/format,webp", "videoURL": "https://cdn.hailuoai.video/....png", "status": 2, "canRetry": false, "width": 0, "height": 0, "originFiles": [], "canAppeal": false, "downloadURL": "https://cdn.hailuoai.video/....png", "hasVoice": false, "modelID": "image-01", "useOriginPrompt": false, "isBookmarked": false, "disableGenerateSimilar": false, "createTime": 1742173334234, "postStatus": 0, "userID": 923847293472394000, "createType": 4, "promptImgURL": "", "extra": { "cameraMotions": [], "promptStruct": "" }, "isVisitor": false, "videoURLs": { "feedURL": "", "downloadURLWithWatermark": "https://cdn.hailuoai.video/....png" }, "priority": 0, "generatorType": 1, "isInFolder": false, "batchID": "357846312387492374", "aspectRatio": "9:16", "fileID": "user:-minimax:-file:", "tags": [ { "type": "normal", "tagIcon": "", "tagText": "image-01" }, { "type": "normal", "tagIcon": "", "tagText": "Enable Optimization" }, { "type": "normal", "tagIcon": "", "tagText": "Image to video" } ], "duration": 0, "resolution": 0, "humanCheckStatus": 0, "userIDStr": "", "statusLabel": "completed", "statusFinal": true, "imageId": "user:-minimax:-image:" } ], "hasPre": false, "hasNext": true, "processing": false, "total": 4135 } ``` **400** **400 Bad Request** ```json { "error": "", "code": 400 } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` ##### Model Known `status` values: * **0** pending * **1** processing * **2** completed * **3** failed * **5** moderated * **7** moderated * **11** queued * **12** processing * **14** moderated ```typescript { images: { id: string desc: string coverURL: string videoURL: string status: number canRetry: boolean width: number height: number originFiles: any[] canAppeal: boolean downloadURL: string hasVoice: boolean modelID: string useOriginPrompt: boolean isBookmarked: boolean disableGenerateSimilar: boolean createTime: number postStatus: number userID: number createType: number promptImgURL: string extra: { cameraMotions: any[] promptStruct: string } isVisitor: boolean videoURLs: { feedURL: string downloadURLWithWatermark: string } priority: number generatorType: number isInFolder: boolean batchID: string aspectRatio: string fileID: string tags: { type: string tagIcon: string tagText: string }[] duration: number resolution: number humanCheckStatus: number userIDStr: string statusLabel: string statusFinal: boolean imageId: string }[] hasPre: boolean hasNext: boolean processing: boolean total: number } ``` ##### Examples **Curl** ``` bash curl "https://api.useapi.net/v1/minimax/images/?account=" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` **JavaScript** ``` javascript const token = "API token"; const account = "Previously configured account"; const apiUrl = `https://api.useapi.net/v1/minimax/images/?account=${account}`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` **Python** ``` python import requests token = "API token" account = "Previously configured account" apiUrl = f"https://api.useapi.net/v1/minimax/images/?account={account}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/get-minimax-music-musicId === Document URL: https://useapi.net/docs/api-minimax-v1/get-minimax-music-musicId --- layout: default title: GET music/`musicId` description: "Poll a single MiniMax song by musicId via GET music/musicId in the useapi.net MiniMax API v1 — returns status, duration, lyrics, and the MP3 download URL once rendering completes." parent: MiniMax API v1 nav_order: 3000 --- ## Retrieve Music September 25, 2024 (August 21, 2026) --- Retrieve a single song created with [POST music/create](/docs/api-minimax-v1/post-minimax-music-create). Poll this endpoint until `statusFinal` is `true`, at which point `audio_url` holds the MP3 and `duration` is set. It also returns reference tracks uploaded with [POST music/reference](/docs/api-minimax-v1/post-minimax-music-reference), which need no polling — they arrive `completed`. `typeLabel` tells the two apart. Supplying a `replyUrl` on the original create call avoids polling altogether — we POST this same object to your URL as soon as the track finishes. > **https://api.useapi.net/v1/minimax/music/{musicId}** ##### Request Headers ``` yaml Authorization: Bearer {API token} ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Query Parameters - `musicId` is **required**, the value returned by [POST music/create](/docs/api-minimax-v1/post-minimax-music-create). Path parameter, for example `user:12345-minimax:123456789012345678-music:987654321098765`. **Notes:** - Poll every 15 to 20 seconds. Generation time varies with the model, the length of the song, and how busy MiniMax is. - When `quantity` was greater than `1`, each `musicId` finishes independently — poll each one. ##### Status values | status | statusLabel | statusFinal | Notes | |:------:|-------------|:-----------:|-------| | 0 | `pending` | false | Queued, not started | | 1 | `processing` | false | Rendering — `audio_url` empty, `duration` 0 | | 2 | `completed` | true | `audio_url` and `duration` are set | | 3 | `failed` | true | MiniMax accepted the request but could not render it — `audio_url` stays empty and `duration` stays 0 | | 4 | `moderated` | true | Rejected by content moderation | ##### Responses **200** **200 OK** ```json { "musicId": "user:12345-minimax:123456789012345678-music:987654321098765", "title": "Lisbon Rain", "idea": "warm nylon guitar, slow bossa nova, about a rainy afternoon in Lisbon", "lyrics": "[Verse]\nThe tram climbs up the hill\n[Chorus]\nAnd the rain keeps falling still", "audio_url": "https://cdn.hailuoai.video/moss/prod/2026-08-16-02/moss-audio/user_music/1700000000000000000-987654321098765.mp3", "cover_url": "https://cdn.hailuoai.video/moss/staging/2025-06-22-16/music_cover/1700000000000000001-other_43.png", "model": "music-3.0", "status": 2, "statusLabel": "completed", "statusFinal": true, "typeLabel": "song", "instrumental": false, "duration": 138472, "create_time": 1786849532637, "update_time": 1786849671000, "is_favorite": false, "author_info": { "user_name": "Your Name", "avatar": "https://cdn.hailuoai.video/moss/prod/2026-03-02-06/user/user_avatar/1700000000000000003-avatar_123456789012345678" }, "tag_list": [ { "tag_name": "warm nylon guitar, slow bossa nova, about a rainy afternoon in Lisbon", "tag_type": 1 } ] } ``` **400** **400 Bad Request** ```json { "error": "Path parameter musicId (bogus) has incorrect format", "code": 400 } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` **404** **404 Not Found** ```json { "error": "Music user:12345-minimax:123456789012345678-music:987654321098765 not found. Possibly moderated prompt." } ``` **596** **596 Account Error** ```json { "error": "Your minimax account has pending error. Please address this issue at https://useapi.net/docs/api-minimax-v1/post-minimax-accounts-account before making any new API calls.", "code": 596 } ``` ##### Model ```typescript { // TypeScript, all fields are optional musicId: string, title: string, idea: string, // The prompt used to generate this track lyrics: string, // Yours, or written by the model audio_url: string, // MP3, 256 kbps 44.1 kHz stereo. Empty until complete cover_url: string, model: string, // music-3.0 | music-2.6 status: number, // See the status table above statusLabel: string, statusFinal: boolean, typeLabel: string, // song | reference — see GET music referenceMusicId: string, // Present only on a cover: the track it follows instrumental: boolean, duration: number, // Milliseconds, 0 until complete create_time: number, update_time: number, is_favorite: boolean, author_info: { user_name: string, avatar: string }, tag_list: [{ tag_name: string, tag_type: number }] } ``` ##### Examples **Curl** ```bash curl "https://api.useapi.net/v1/minimax/music/user:12345-minimax:123456789012345678-music:987654321098765" \ -H "Authorization: Bearer …" ``` **JavaScript** ```javascript const musicId = "user:12345-minimax:123456789012345678-music:987654321098765"; while (true) { const response = await fetch(`https://api.useapi.net/v1/minimax/music/${musicId}`, { headers: { "Authorization": "Bearer …" } }); const track = await response.json(); if (track.statusFinal) { console.log(track.status === 2 ? track.audio_url : track.statusLabel); break; } await new Promise(resolve => setTimeout(resolve, 20000)); } ``` **Python** ```python import requests, time music_id = "user:12345-minimax:123456789012345678-music:987654321098765" while True: response = requests.get( f"https://api.useapi.net/v1/minimax/music/{music_id}", headers={"Authorization": "Bearer …"} ) track = response.json() if track["statusFinal"]: print(track["audio_url"] if track["status"] == 2 else track["statusLabel"]) break time.sleep(20) ``` === URL: https://useapi.net/docs/api-minimax-v1/get-minimax-music === Document URL: https://useapi.net/docs/api-minimax-v1/get-minimax-music --- layout: default title: GET music description: "List the songs and reference tracks on a MiniMax account via GET music in the useapi.net MiniMax API v1 — newest first, filtered by type, with pagination by lastMusicId and a favourites filter." parent: MiniMax API v1 nav_order: 3200 --- ## Retrieve the list of your music September 25, 2024 (August 21, 2026) --- Lists the songs on a configured MiniMax account, newest first. Tracks still rendering appear here too, with `statusLabel` set to `processing` and an empty `audio_url`. This list reflects the MiniMax account itself, so it also includes songs created directly on [minimax.io](https://www.minimax.io/audio/music) rather than through this API. The account holds two kinds of record and `type` chooses between them. Generated songs are returned by default. Reference tracks — the clips uploaded with [POST music/reference](/docs/api-minimax-v1/post-minimax-music-reference) to make covers from — are held back unless you ask for them, so adding references to an account never changes what an existing integration sees. > **https://api.useapi.net/v1/minimax/music/?account={account}&limit={limit}&lastMusicId={lastMusicId}&favorite={favorite}&type={type}** Note the trailing slash after `music` — without it the request does not reach this endpoint. ##### Request Headers ``` yaml Authorization: Bearer {API token} ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Query Parameters - `account` is optional when only one account is configured. If you have several MiniMax accounts configured, this parameter becomes **required**. - `limit` is optional, the number of songs to return. Default: `30`. Maximum: `100`. - `lastMusicId` is optional, the `musicId` to start from. Results continue from the song *after* it, which is how you page through a long history. The cursor is looked up across the most recent 1000 songs. A `musicId` older than that returns `400` rather than silently restarting from the newest song. - `favorite` is optional, return only songs marked as favourites on the MiniMax account. Default: `false`. - `type` is optional, which kind of record to return. Default: `song`. | Value | Returns | |---|---| | `song` | Generated songs, covers included. The default. | | `reference` | Reference tracks uploaded with [POST music/reference](/docs/api-minimax-v1/post-minimax-music-reference) | | `all` | Both, interleaved by date | Every row carries `typeLabel` saying which it is. A cover is a song, not a reference — you recognise it by `referenceMusicId` being set. ##### Responses **200** **200 OK** ```json [ { "musicId": "user:12345-minimax:123456789012345678-music:987654321098766", "title": "Lisbon Rain", "idea": "warm nylon guitar, slow bossa nova, about a rainy afternoon in Lisbon", "lyrics": "[Verse]\nThe tram climbs up the hill\n[Chorus]\nAnd the rain keeps falling still", "audio_url": "https://cdn.hailuoai.video/moss/prod/2026-08-16-02/moss-audio/user_music/1700000000000000000-987654321098766.mp3", "cover_url": "https://cdn.hailuoai.video/moss/staging/2025-06-22-16/music_cover/1700000000000000002-other_45.png", "model": "music-3.0", "status": 2, "statusLabel": "completed", "statusFinal": true, "typeLabel": "song", "instrumental": false, "duration": 138472, "update_time": 1786827844513, "is_favorite": false, "hasWav": false, "tag_list": [ { "tag_name": "warm nylon guitar, slow bossa nova, about a rainy afternoon in Lisbon", "tag_type": 1 } ] } ] ``` **400** **400 Bad Request** ```json { "error": "Please use parameter account to specify account", "code": 400 } ``` A `lastMusicId` older than the retrievable window: ```json { "error": "lastMusicId user:12345-minimax:123456789012345678-music:987654321098765 was not found in the most recent 1000 songs", "code": 400 } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` **596** **596 Account Error** ```json { "error": "Your minimax account has pending error. Please address this issue at https://useapi.net/docs/api-minimax-v1/post-minimax-accounts-account before making any new API calls.", "code": 596 } ``` An account with no songs returns an empty array. ##### Model ```typescript [{ // TypeScript, all fields are optional musicId: string, // Use with GET music/musicId title: string, idea: string, lyrics: string, audio_url: string, // Empty while still rendering cover_url: string, model: string, // music-3.0 | music-2.6 status: number, // See GET music/musicId for the status table statusLabel: string, statusFinal: boolean, typeLabel: string, // song | reference referenceMusicId: string, // Present only on a cover: the track it follows instrumental: boolean, duration: number, // Milliseconds update_time: number, is_favorite: boolean, hasWav: boolean, tag_list: [{ tag_name: string, tag_type: number }] }] ``` ##### Examples **Curl** ```bash curl "https://api.useapi.net/v1/minimax/music/?limit=10" \ -H "Authorization: Bearer …" ``` **JavaScript** ```javascript const response = await fetch("https://api.useapi.net/v1/minimax/music/?limit=10", { headers: { "Authorization": "Bearer …" } }); const tracks = await response.json(); for (const track of tracks) console.log(track.title, track.statusLabel, track.audio_url); ``` **Python** ```python import requests response = requests.get( "https://api.useapi.net/v1/minimax/music/", headers={"Authorization": "Bearer …"}, params={"limit": 10} ) for track in response.json(): print(track["title"], track["statusLabel"], track["audio_url"]) ``` === URL: https://useapi.net/docs/api-minimax-v1/get-minimax-scheduler-available === Document URL: https://useapi.net/docs/api-minimax-v1/get-minimax-scheduler-available --- layout: default title: GET scheduler/available description: "Check running video jobs and per-account slot availability via GET scheduler/available in the useapi.net MiniMax API v1 before submitting new generations." parent: MiniMax API v1 nav_order: 3700 --- ## Retrieve the list of videos currently running via the API along with the available account capacity October 15, 2024 (August 17, 2026) --- This endpoint retrieves the list of images and videos currently running via the API along with the available account capacity. If you want to get all videos currently being executed including you manually initiated from hailuoai.com website use [GET /videos](/docs/api-minimax-v1/get-minimax-videos). If you want to get all images currently being executed including you manually initiated from hailuoai.com website use [GET /images](/docs/api-minimax-v1/get-minimax-images). Please refer to code provided in article [Fun with MiniMax API](/docs/articles/minimax-bash) to see how this endpoint can be used in conjunction with [POST /files](/docs/api-minimax-v1/post-minimax-files) and [POST videos/create](/docs/api-minimax-v1/post-minimax-videos-create). **NOTE**: The available capacity (array `available`) includes only videos, the API does not include currently executing image generations in that capacity. > **https://api.useapi.net/v1/minimax/scheduler/available** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Responses **200** **200 OK** ```json { "executing": [ { "videoId": "user:user_id-minimax:account-video:id1", "started": "2024-09-25T01:55:16.128Z", "elapsed": "03:57", "replyUrl": "", "replyRef": "" }, { "videoId": "user:user_id-minimax:account-image:inN", "started": "2024-09-25T01:58:18.555Z", "elapsed": "00:35", "replyUrl": "", "replyRef": "" }, { "musicId": "user:user_id-minimax:account-music:idN", "started": "2026-08-17T02:11:04.312Z", "elapsed": "01:12" }, { "audioId": "user:user_id-minimax:account-audio:idN", "started": "2026-08-24T02:11:04.312Z", "elapsed": "00:08" } ], "available": [ { "account": "", "maxJobs": 5, "executing": 0, "available": 5, "executingMusic": 0 }, { "account": "", "maxJobs": 5, "executing": 3, "available": 2, "executingMusic": 1 }, { "account": "", "maxJobs": 3, "executing": 2, "available": 1, "executingMusic": 0 } ] } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` ##### Model ```typescript { // TypeScript, all fields are optional executing: { videoId: string imageId: string musicId: string audioId: string started: string elapsed: string replyUrl: string replyRef: string }[] available: { account: string maxJobs: number executing: number available: number executingMusic: number // music generations in flight; music has no local ceiling executingAudio: number // speech generations in flight, same reasoning }[] error: string code: number } ``` ##### Examples **Curl** ``` bash curl "https://api.useapi.net/v1/minimax/scheduler/available" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` **JavaScript** ``` javascript const token = "API token"; const apiUrl = `https://api.useapi.net/v1/minimax/scheduler/available`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` **Python** ``` python import requests token = "API token" apiUrl = f"https://api.useapi.net/v1/minimax/scheduler/available" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/get-minimax-scheduler === Document URL: https://useapi.net/docs/api-minimax-v1/get-minimax-scheduler --- layout: default title: GET scheduler description: "Retrieve all video, image, music and speech generations currently running via the API via GET scheduler in the useapi.net MiniMax API v1 — API-initiated jobs only." parent: MiniMax API v1 nav_order: 3600 --- ## Retrieve the list of images, videos, music and speech currently being executed by the API September 25, 2024 (August 17, 2026) --- This endpoint retrieves the list of images and videos currently being executed by the API. If you want to get all videos currently being executed including you manually initiated from hailuoai.com website use [GET /videos](/docs/api-minimax-v1/get-minimax-videos). If you want to get all images currently being executed including you manually initiated from hailuoai.com website use [GET /images](/docs/api-minimax-v1/get-minimax-images). > **https://api.useapi.net/v1/minimax/scheduler/** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Responses **200** **200 OK** ```json [ { "videoId": "user:user_id-minimax:account-video:id1", "started": "2024-09-25T01:55:16.128Z", "elapsed": "03:57", "replyUrl": "", "replyRef": "" }, { "videoId": "user:user_id-minimax:account-image:inN", "started": "2024-09-25T01:58:18.555Z", "elapsed": "00:35", "replyUrl": "", "replyRef": "" }, { "musicId": "user:user_id-minimax:account-music:idN", "started": "2026-08-17T02:11:04.312Z", "elapsed": "01:12", "replyUrl": "", "replyRef": "" }, { "audioId": "user:user_id-minimax:account-audio:idN", "started": "2026-08-24T02:11:04.312Z", "elapsed": "00:08", "replyUrl": "", "replyRef": "" } ] ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` ##### Model ```typescript { // TypeScript, all fields are optional videoId: string imageId: string musicId: string audioId: string started: number elapsed: string replyUrl: string replyRef: string }[] ``` ##### Examples **Curl** ``` bash curl "https://api.useapi.net/v1/minimax/scheduler/" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` **JavaScript** ``` javascript const token = "API token"; const apiUrl = `https://api.useapi.net/v1/minimax/scheduler/`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` **Python** ``` python import requests token = "API token" apiUrl = f"https://api.useapi.net/v1/minimax/scheduler/" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/get-minimax-speech-config === Document URL: https://useapi.net/docs/api-minimax-v1/get-minimax-speech-config --- layout: default title: GET speech/config description: "Fetch the speech emotion list and voice tag vocabularies via GET speech/config in the useapi.net MiniMax API v1, everything needed to build your own voice picker." parent: MiniMax API v1 nav_order: 1899 --- ## Retrieve audio configuration parameters December 23, 2024 (August 24, 2026) --- Returns the vocabularies speech generation accepts — the emotion names, the voice tags used for filtering, and the languages available for `language_boost`. > **https://api.useapi.net/v1/minimax/speech/config/?…** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Query Parameters - `account` is optional when only one [account](/docs/api-minimax-v1/get-minimax-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**. ##### Responses **200** **200 OK** ```json { "t2a_emotion": [ { "label": "Happy", "value": "happy" }, { "label": "...", "value": "..." } ], "voice_tag_accent": [ { "language": "English", "tag_name": "EN-US (General)" }, { "language": "...", "tag_name": "..." } ], "voice_tag_age": [ { "tag_name": "Young" }, { "tag_name": "..." } ], "voice_tag_gender": [ { "tag_name": "Male" }, { "tag_name": "..." } ], "voice_tag_language": [ { "tag_name": "English" }, { "tag_name": "..." } ] } ``` **400** **400 Bad Request** ```json { "error": "", "code": 400 } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` **596** **596 Account Error** ```json { "error": "Your minimax account has pending error. Please address this issue at https://useapi.net/docs/api-minimax-v1/post-minimax-accounts-account before making any new API calls.", "code": 596 } ``` ##### Model ```typescript { // TypeScript, all fields are optional t2a_emotion: { label: string value: string }[] voice_tag_accent: { language: string tag_name: string }[] voice_tag_age: { tag_name: string }[] voice_tag_gender: { tag_name: string }[] voice_tag_language: { tag_name: string }[] } ``` ##### Examples **Curl** ``` bash curl "https://api.useapi.net/v1/minimax/speech/config/?account=account" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` **JavaScript** ``` javascript const token = "API token"; const account = "Previously configured account"; const apiUrl = `https://api.useapi.net/v1/minimax/speech/config/?account=${account}`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` **Python** ``` python import requests token = "API token" account = "Previously configured account" apiUrl = f"https://api.useapi.net/v1/minimax/speech/config/?account={account}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/get-minimax-speech-equity === Document URL: https://useapi.net/docs/api-minimax-v1/get-minimax-speech-equity --- layout: default title: GET speech/equity description: "Check how many voice cloning slots an account has used and how many it holds via GET speech/equity in the useapi.net MiniMax API v1, before spending twenty seconds on a clone that cannot be saved." parent: MiniMax API v1 nav_order: 1900 --- ## Voice Cloning Quota August 24, 2026 --- Returns how many cloned voice slots the MiniMax account holds and how many are in use. Worth calling before [POST speech/clone-voice](/docs/api-minimax-v1/post-minimax-speech-clone-voice), which spends around twenty seconds building a voice. Without this the only signal that an account is out of slots arrives after that work is done. > **https://api.useapi.net/v1/minimax/speech/equity?account={account}** ##### Request Headers ``` yaml Authorization: Bearer {API token} ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Query Parameters - `account` is optional when only one account is configured. If you have several MiniMax accounts configured, this parameter becomes **required**. ##### Responses **200** **200 OK** ```json { "used": 3, "total": 3, "voice_clone_preview_free_quota": "inf", "srt_download": false, "base_resp": {} } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` **596** **596 Account Error** ```json { "error": "Your minimax account has pending error. Please address this issue at https://useapi.net/docs/api-minimax-v1/post-minimax-accounts-account before making any new API calls.", "code": 596 } ``` ##### Model ```typescript { // TypeScript, all fields are optional used: number, // Cloned voices currently stored total: number, // Slots the plan grants voice_clone_preview_free_quota: string, // Free clone previews left, "inf" when unlimited srt_download: boolean // Whether the plan includes SRT download on minimax.io } ``` - `used` is allowed to exceed `total`. An account observed with three slots reported four in use, so treat these figures as advisory rather than as a hard gate — the authoritative refusal is the error returned by [POST speech/clone-voice](/docs/api-minimax-v1/post-minimax-speech-clone-voice) itself. - Slots are freed by [POST speech/delete-voice](/docs/api-minimax-v1/post-minimax-speech-delete-voice). - `srt_download` reflects whether the MiniMax plan includes subtitle downloads on their own site. It does not gate this API — word timings come back on [POST speech/create-mp3](/docs/api-minimax-v1/post-minimax-speech-create-mp3) and the streaming `done` event whatever it says, see [Word timings](/docs/api-minimax-v1/post-minimax-speech-create#word-timings). ##### Examples **Curl** ```bash curl "https://api.useapi.net/v1/minimax/speech/equity?account=123456789012345678" \ -H "Authorization: Bearer …" ``` **JavaScript** ```javascript const response = await fetch("https://api.useapi.net/v1/minimax/speech/equity?account=123456789012345678", { headers: { "Authorization": "Bearer …" } }); const { used, total } = await response.json(); console.log(`${used} of ${total} voice slots in use`); ``` **Python** ```python import requests response = requests.get( "https://api.useapi.net/v1/minimax/speech/equity", headers={"Authorization": "Bearer …"}, params={"account": "123456789012345678"} ) equity = response.json() print(equity["used"], "of", equity["total"], "voice slots in use") ``` === URL: https://useapi.net/docs/api-minimax-v1/get-minimax-speech-voices === Document URL: https://useapi.net/docs/api-minimax-v1/get-minimax-speech-voices --- layout: default title: GET speech/voices description: "Browse MiniMax speech voices via GET speech/voices in the useapi.net MiniMax API v1 — system and cloned voices, filtered by language, gender, age and accent tags." parent: MiniMax API v1 nav_order: 1898 --- ## Retrieve the list of system and cloned audio voices December 23, 2024 (August 24, 2026) --- Lists the voices the account can generate with — MiniMax's built-in catalogue, or the ones you have cloned yourself. 600+ pre-built voices, tagged for filtering with `tag_list`: * Languages: 40, from English, Chinese (Mandarin and Cantonese), Japanese and Korean through to Thai, Hindi, Tamil and Afrikaans * Emotions: happy, sad, angry, fearful, disgusted, surprised, neutral, fluent * Accents: `EN-US (General)`, `EN-Australian`, `EN-British`, `EN-Indian`, `CN-Northern`, `CN-Southern` * Ages: `Child`, `Young`, `Middle-aged`, `Elderly` * Genders: `Male`, `Female` `tag_list` matches these strings exactly, including case. A tag it does not recognise is ignored rather than rejected, so a typo silently *widens* the result instead of narrowing it — `Female,Middle-Aged` returns the same 310 voices as `Female` alone, spanning every age. Check the count when you add a filter. [GET speech/config](/docs/api-minimax-v1/get-minimax-speech-config) returns the tags the picker UI offers, updated as MiniMax adds to them. Voices carry others besides — `Documentary`, `Calm` and `Adult` all match voices without appearing there. > **https://api.useapi.net/v1/minimax/speech/voices/?…** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Query Parameters - `account` is optional when only one [account](/docs/api-minimax-v1/get-minimax-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**. - `tag_list` is optional. Specify a comma-separated list of tags using those returned by [GET speech/config](/docs/api-minimax-v1/get-minimax-speech-config) to narrow down the returned results. Example: `Italian,Female` - `page` and `page_size` are optional. Use them to retrieve the next page of data when the returned `has_more` field is `true`. Default `page_size` is 500. - `is_system` is optional. Set to `false` if you want to retrieve a list of custom voices cloned via [POST speech/clone-voice](/docs/api-minimax-v1/post-minimax-speech-clone-voice). The entire list of custom voices will be returned at once, the `page` and `page_size` parameters will not be used. Default is `true` (return system voices). ##### Responses **200** **200 OK** `GET` [https://api.useapi.net/v1/minimax/speech/voices/?tag_list=Italian,Female](https://api.useapi.net/v1/minimax/speech/voices/?tag_list=Italian,Female) ```json { "voice_list": [ { "voice_id": "209544421245048", "parent_voice_id": "0", "voice_name": "Diligent Leader", "tag_list": [ "Italian", "Female", "Adult", "Calm", "Standard" ], "file_id": "", "cover_url": "https://cdn.hailuoai.video/moss/staging/2024-11-21-14/moss-audio/voice_cover//1732171514479796864-207331589841022.png?x-oss-process=image/resize,p_50/format,webp", "create_time": 1732711650948, "update_time": 1732711650948, "collected": false, "voice_status": 2, "sample_audio": "https://cdn.hailuoai.video/moss/staging/2024-11-25-20/moss-audio/voice_sample_audio/1732537441602153587-official_sample_audio/4_it05.mp3", "uniq_id": "Italian_DiligentLeader", "group_id": "0" } ], "total": 1, "has_more": false } ``` **400** **400 Bad Request** ```json { "error": "", "code": 400 } ``` **401** **401 Unauthorized** ```json { "error": "Unauthorized", "code": 401 } ``` **596** **596 Account Error** ```json { "error": "Your minimax account has pending error. Please address this issue at https://useapi.net/docs/api-minimax-v1/post-minimax-accounts-account before making any new API calls.", "code": 596 } ``` ##### Model ```typescript { // TypeScript, all fields are optional voice_list: { voice_id: string parent_voice_id: string voice_name: string tag_list: string[] file_id: string cover_url: string create_time: number update_time: number collected: boolean voice_status: number sample_audio: string uniq_id: string group_id: string }[] total: number has_more: boolean } ``` ##### Examples **Curl** ``` bash curl "https://api.useapi.net/v1/minimax/speech/voices/?account=account" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` **JavaScript** ``` javascript const token = "API token"; const account = "Previously configured account"; const apiUrl = `https://api.useapi.net/v1/minimax/speech/voices/?account=${account}`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` **Python** ``` python import requests token = "API token" account = "Previously configured account" apiUrl = f"https://api.useapi.net/v1/minimax/speech/voices/?account={account}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` === URL: https://useapi.net/docs/api-minimax-v1/get-minimax-speech === Document URL: https://useapi.net/docs/api-minimax-v1/get-minimax-speech --- layout: default title: GET speech description: "List every speech recording on a MiniMax account via GET speech in the useapi.net MiniMax API v1 — newest first, with audio URLs, voice names and subtitle availability." parent: MiniMax API v1 nav_order: 1896 --- ## Retrieve the list of text-to-speech audio clips you have generated December 23, 2024 (August 24, 2026) --- This endpoint will return audio clips generated by * [POST speech/create](/docs/api-minimax-v1/post-minimax-speech-create) * [POST speech/create-mp3](/docs/api-minimax-v1/post-minimax-speech-create-mp3) > **https://api.useapi.net/v1/minimax/speech/?…** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](/docs/start-here/setup-useapi) for details. ##### Query Parameters - `account` is optional when only one [account](/docs/api-minimax-v1/get-minimax-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**. - `page` and `page_size` are optional. Use them to retrieve the next page of data when the returned `has_more` field is `true`. Default `page_size` is 100. ##### Responses **200** **200 OK** ```json { "audio_list": [ { "audio_id": "user:user_id-minimax:account_id-audio:audio_id", "audio_review": 0, "user_id": "123456789012345678", "audio_title": "