=== URL: https://useapi.net/docs/start-here/setup-pixverse === Document URL: https://useapi.net/docs/start-here/setup-pixverse --- layout: default title: Setup PixVerse parent: Start Here nav_order: 400 --- # Setup PixVerse {: .no_toc } December 6, 2024 ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} Approximately 2 minutes to complete setup steps. --- ## Create PixVerse.ai account Navigate to [PixVerse.ai](https://PixVerse.ai) and sign up with an email account. Our API does not support Gmail, Apple, or Discord accounts. We strongly recommend creating a separate PixVerse.ai account designated for API work. ![](/assets/images/pixverse_setup-v2-web.png) ## Configure PixVerse.ai API account Proceed to [POST /accounts/`email`](../api-pixverse-v2/post-pixverse-accounts-email) and configure the PixVerse API account to using `email` and `password`. ## OPTIONAL Configure PixVerse API to use the current PixVerse.ai session The PixVerse.ai website enforces a single active session for a given account. When the API is running, it will terminate your web session. If you want to use the website and run the API simultaneously, you will need to perform the following steps in the **exact** order: * [POST /accounts/`email`](../api-pixverse-v2/post-pixverse-accounts-email) using your `email` and `password`. * Navigate to [PixVerse.ai](https://PixVerse.ai), **logout** from your account, and **login** again. * Using the screenshot below, locate the session `token`.
Screenshot
* [POST /accounts/`email`](../api-pixverse-v2/post-pixverse-accounts-email) using your `email`, `password` and the obtained `token`. * Keep the website open. Now, your API and your browser will share the session token, allowing you to use both. Keep in mind that the API will eventually try to refresh the token, so the approach described above is only effective for a limited time. We strongly recommend not using the API account for any manual generation to avoid any interference with the API. === URL: https://useapi.net/docs/api-pixverse-v2 === Document URL: https://useapi.net/docs/api-pixverse-v2 --- layout: default title: PixVerse API v2 nav_order: 6000 has_children: true permalink: /docs/api-pixverse-v2 --- # PixVerse API v2 December 6, 2024 (January 27, 2026) This is an [experimental](../../docs/legal) API for [PixVerse.ai](https://pixverse.ai). PixVerse.ai generates videos from text and image prompts, supports a large number of video effects, and can extend, upscale, and lipsync videos. The PixVerse latest models `v5.6`, `v5.5`, `v5`, and `v5-fast` are supported along with Off-Peak mode (50% off credits), see [model capabilities](../../docs/api-pixverse-v2/model-capabilities). Please see the table below for a cost comparison of the web subscription used by this API versus official API subscription.
💲 Cost calculator The [web subscription](https://app.pixverse.ai/subscribe) gives you full access to every available video effect with no restrictions, while the official [API subscription](https://platform.pixverse.ai/billing) strictly limits you to just 1, 3 or 5 effect options per billing period. The official API does not support Off-Peak mode (50% off credits). **v5.5** | Video | [$60/m Premium web subscription](https://app.pixverse.ai/subscribe)
15,000 credits/month | [$100/ Essential API subscription](https://platform.pixverse.ai/billing)
15,000 credits/month | | 5s 360p | 20 credits / $0.08 | 45 credits / $0.30 | | 5s 360p + audio | 25 credits / $0.10 | 55 credits / $0.37 | | 8s 360p | 40 credits / $0.16 | 90 credits / $0.60 | | 8s 360p + audio | 50 credits / $0.20 | 100 credits / $0.67 | | 10s 360p | 40 credits / $0.16 | 99 credits / $0.66 | | 10s 360p + audio | 50 credits / $0.20 | 109 credits / $0.73 | | 5s 540p | 30 credits / $0.12 | 45 credits / $0.30 | | 5s 540p + audio | 40 credits / $0.16 | 55 credits / $0.37 | | 8s 540p | 60 credits / $0.24 | 90 credits / $0.60 | | 8s 540p + audio | 80 credits / $0.32 | 100 credits / $0.67 | | 10s 540p | 60 credits / $0.24 | 99 credits / $0.66 | | 10s 540p + audio | 80 credits / $0.32 | 109 credits / $0.73 | | 5s 720p | 40 credits / $0.16 | 60 credits / $0.40 | | 5s 720p + audio | 50 credits / $0.20 | 70 credits / $0.47 | | 8s 720p | 80 credits / $0.32 | 120 credits / $0.80 | | 8s 720p + audio | 100 credits / $0.40 | 130 credits / $0.87 | | 10s 720p | 80 credits / $0.32 | 132 credits / $0.88 | | 10s 720p + audio | 100 credits / $0.40 | 142 credits / $0.95 | | 5s 1080p | 80 credits / $0.32 | 120 credits / $0.80 | | 5s 1080p + audio | 100 credits / $0.40 | 130 credits / $0.87 | | 8s 1080p | 160 credits / $0.64 | 240 credits / $1.60 | | 8s 1080p + audio | 200 credits / $0.80 | 250 credits / $1.67 | **v5** | Video | [$60/m Premium web subscription](https://app.pixverse.ai/subscribe)
15,000 credits/month | [$100/ Essential API subscription](https://platform.pixverse.ai/billing)
15,000 credits/month | | 5s 360p | 45 credits / $0.18 | 45 credits / $0.30 | | 8s 360p | 90 credits / $0.36 | 90 credits / $0.60 | | 5s 540p | 45 credits / $0.18 | 45 credits / $0.30 | | 8s 540p | 90 credits / $0.36 | 90 credits / $0.60 | | 5s 720p | 60 credits / $0.24 | 60 credits / $0.40 | | 8s 720p | 120 credits / $0.48 | 120 credits / $0.80 | | 5s 1080p | 120 credits / $0.48 | 120 credits / $0.80 | | 8s 1080p | 240 credits / $0.96 | 240 credits / $1.60 | **Other** | Feature | Web | API | | 5s 4K Upscale | 30 credits / $0.12 | n/a | | 8s 4K Upscale | 60 credits / $0.24 | n/a | | Concurrent generations | 8 concurrency limit | 5 concurrency limit | | Effect available | **all** 150+ effects | 3 effect available |
[Setup PixVerse](../../docs/start-here/setup-pixverse) [Postman collection](https://www.postman.com/useapinet/useapi-net/collection) (January 27, 2026) Check out generated videos on YouTube. Blogs: * [PixVerse v5.6](../../blog/260127) * [PixVerse Modify](../../blog/260126) * [PixVerse v5.5](../../blog/251205) * [PixVerse v5](../../blog/250829) Developer Community: * Discord Server * Telegram Channel * r/pixverse_api === URL: https://useapi.net/docs/api-pixverse-v2/del-pixverse-accounts-email === Document URL: https://useapi.net/docs/api-pixverse-v2/del-pixverse-accounts-email --- layout: default title: DEL accounts/email parent: PixVerse API v2 nav_order: 400 --- ## Delete PixVerse API account {: .no_toc } December 6, 2024 ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- {: .delete } > **https://api.useapi.net/v2/accounts/`email`** The `email` value should correspond to an account configured previously via a [POST /accounts/`email`](post-pixverse-accounts-email) request. ##### Request Headers ``` yaml Authorization: Bearer {API token} ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Responses {% tabs del_account_PixVerse_v2_response %} {% tab del_account_PixVerse_v2_response 204 %} 204 No Content {% endtab %} {% tab del_account_PixVerse_v2_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized", "code": 401 } ``` {% endtab %} {% tab del_account_PixVerse_v2_response 404 %} 404 Not Found {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional error: string, errorDetails: string, code: number } ``` ##### Examples {% tabs del_account_PixVerse_v2_example %} {% tab del_account_PixVerse_v2_example Curl %} ``` bash curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X DELETE https://api.useapi.net/v2/pixverse/accounts/ ``` {% endtab %} {% tab del_account_PixVerse_v2_example JavaScript %} ``` javascript const email = "Previously configured account email"; const apiUrl = `https://api.useapi.net/v2/pixverse/accounts/${email}`; 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}); ``` {% endtab %} {% tab del_account_PixVerse_v2_example Python %} ``` python import requests email = "Previously configured account email" apiUrl = f"https://api.useapi.net/v2/pixverse/accounts/{email}" token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.delete(apiUrl, headers=headers) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/del-pixverse-scheduler-video_id === Document URL: https://useapi.net/docs/api-pixverse-v2/del-pixverse-scheduler-video_id --- layout: default title: DEL scheduler/video_id parent: PixVerse API v2 nav_order: 1800 --- ## Cancel video currently being executed by the API {: .no_toc } December 6, 2024 ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- Remove `video_id` generation tracking by the API. {: .delete } > **https://api.useapi.net/v2/pixverse/scheduler/`video_id`** ##### Request Headers ``` yaml Authorization: Bearer {API token} ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Path parameter - `video_id` is **required**. Specify video_id you want to cancel. ##### Responses {% tabs delete_scheduler_PixVerse_v2_scheduler_response %} {% tab delete_scheduler_PixVerse_v2_scheduler_response 204 %} 204 No Content {% endtab %} {% tab delete_scheduler_PixVerse_v2_scheduler_response 400 %} 400 Bad Request ```json { "error": "", "code": 400 } ``` {% endtab %} {% tab delete_scheduler_PixVerse_v2_scheduler_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized", "code": 401 } ``` {% endtab %} {% tab delete_scheduler_PixVerse_v2_scheduler_response 404 %} 404 Not Found ```json { "error": "Unable to locate running video_id " } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional error: string code: number } ``` ##### Examples {% tabs delete_scheduler_PixVerse_v2_scheduler_example %} {% tab delete_scheduler_PixVerse_v2_scheduler_example Curl %} ``` bash curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X DELETE "https://api.useapi.net/v2/pixverse/scheduler/video_id" ``` {% endtab %} {% tab delete_scheduler_PixVerse_v2_scheduler_example JavaScript %} ``` javascript const video_id = "video_id to cancel"; const apiUrl = `https://api.useapi.net/v2/pixverse/scheduler/${video_id}`; 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}); ``` {% endtab %} {% tab delete_scheduler_PixVerse_v2_scheduler_example Python %} ``` python import requests video_id = "video_id to cancel" apiUrl = f"https://api.useapi.net/v2/pixverse/scheduler/{video_id}" token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.delete(apiUrl, headers=headers) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/del-pixverse-videos-video_id === Document URL: https://useapi.net/docs/api-pixverse-v2/del-pixverse-videos-video_id --- layout: default title: DEL videos/video_id parent: PixVerse API v2 nav_order: 800 --- ## Delete a video {: .no_toc } December 6, 2024 ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- {: .delete } > **https://api.useapi.net/v2/pixverse/videos/`video_id`** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Path parameter - `video_id` is **required**. Specify the video_id you want to delete. ##### Responses {% tabs del_PixVerse_v2_videos_video_id_response %} {% tab del_PixVerse_v2_videos_video_id_response 200 %} 200 OK Video was successfully deleted. {% endtab %} {% tab del_PixVerse_v2_videos_video_id_response 400 %} 400 Bad Request ```json { "error": "", "code": 400 } ``` {% endtab %} {% tab del_PixVerse_v2_videos_video_id_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized", "code": 401 } ``` {% endtab %} {% endtabs %} ##### Examples {% tabs del_PixVerse_v2_videos_video_id_example %} {% tab del_PixVerse_v2_videos_video_id_example Curl %} ``` bash curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X DELETE "https://api.useapi.net/v2/pixverse/videos/video_id" ``` {% endtab %} {% tab del_PixVerse_v2_videos_video_id_example JavaScript %} ``` javascript const token = "API token"; const video_id = "video_id to delete"; const apiUrl = `https://api.useapi.net/v2/pixverse/videos/${video_id}`; const response = await fetch(apiUrl, { method: 'DELETE', headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab del_PixVerse_v2_videos_video_id_example Python %} ``` python import requests token = "API token" video_id = "video_id to delete" apiUrl = f"https://api.useapi.net/v2/pixverse/videos/{video_id}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.delete(apiUrl, headers=headers) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-accounts-email === Document URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-accounts-email --- layout: default title: GET accounts/email parent: PixVerse API v2 nav_order: 200 --- ## Retrieve PixVerse API account configuration for `email` {: .no_toc } December 6, 2024 ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- {: .get } > **https://api.useapi.net/v2/pixverse/accounts/`email`** The `email` value should correspond to an account configured previously via a [POST /accounts/`email`](post-pixverse-accounts-email) request. ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Responses {% tabs get_account_PixVerse_v2_account_response %} {% tab get_account_PixVerse_v2_account_response 200 %} 200 OK ```json { "email": "", "password": "…secured…", "maxJobs": 3, "jwt": { "AccountId": 66778899, "ExpireTime": 123456789, "ExpireTimeUTC": "2025-01-01T12:13:14.000Z", "Username": "", "token": "abc…secured…cde" } } ``` {% endtab %} {% tab get_account_PixVerse_v2_account_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized", "code": 401 } ``` {% endtab %} {% tab get_account_PixVerse_v2_account_response 404 %} 404 Not Found Configuration not found. To create configuration use [POST /accounts/`email`](https://useapi.net/docs/api-pixverse-v2/post-pixverse-accounts-email). {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional email: string password: string maxJobs: number jwt: { AccountId: number ExpireTime: number ExpireTimeUTC: string Username: string token: string } } ``` ##### Examples {% tabs get_account_PixVerse_v2_account_example %} {% tab get_account_PixVerse_v2_account_example Curl %} ``` bash curl https://api.useapi.net/v2/pixverse/accounts/ \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` {% endtab %} {% tab get_account_PixVerse_v2_account_example JavaScript %} ``` javascript const token = "API token"; const email = "Previously configured account email"; const apiUrl = `https://api.useapi.net/v2/pixverse/accounts/${email}`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab get_account_PixVerse_v2_account_example Python %} ``` python import requests token = "API token" email = "Previously configured account email" apiUrl = f"https://api.useapi.net/v2/pixverse/accounts/{email}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-accounts === Document URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-accounts --- layout: default title: GET accounts parent: PixVerse API v2 nav_order: 100 --- ## Retrieve PixVerse API accounts configuration {: .no_toc } December 6, 2024 ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- For your convenience, you can specify your PixVerse configuration values under your PixVerse account. If you specify multiple PixVerse accounts, the API will automatically perform load balancing by randomly selecting an account with available capacity before making calls to PixVerse. This endpoint retrieves the complete list of configured API accounts for PixVerse. {: .get } > **https://api.useapi.net/v2/pixverse/accounts** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Responses {% tabs account_PixVerse_v2_response %} {% tab account_PixVerse_v2_response 200 %} 200 OK ```json { "": { "email": "", "jwt": { "AccountId": 1122334455, "ExpireTime": 123456789, "ExpireTimeUTC": "2025-01-01T12:13:14.000Z" "Username": "", "token": "abc…secured…cde", }, "maxJobs": 8, "password": "…secured…" }, "": { "email": "", "jwt": { "AccountId": 66778899, "ExpireTime": 123456789, "ExpireTime": 123456789, "ExpireTimeUTC": "2025-01-01T12:13:14.000Z" "Username": "", "token": "abc…secured…cde", }, "maxJobs": 3, "password": "…secured…" } } ``` {% endtab %} {% tab account_PixVerse_v2_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized", "code": 401 } ``` {% endtab %} {% tab account_PixVerse_v2_response 404 %} 404 Not Found Configuration not found. To create configuration use [POST /accounts/`email`](https://useapi.net/docs/api-pixverse-v2/post-pixverse-accounts-email). {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional [email: string]: { email: string jwt: { AccountId: number ExpireTime: number ExpireTimeUTC: string Username: string token: string } maxJobs: number password: string } } ``` ##### Examples {% tabs account_PixVerse_v2_example %} {% tab account_PixVerse_v2_example Curl %} ``` bash curl https://api.useapi.net/v2/pixverse/accounts \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` {% endtab %} {% tab account_PixVerse_v2_example JavaScript %} ``` javascript const token = "API token"; const apiUrl = "https://api.useapi.net/v2/pixverse/accounts"; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab account_PixVerse_v2_example Python %} ``` python import requests token = "API token" apiUrl = "https://api.useapi.net/v2/pixverse/accounts" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-features === Document URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-features --- layout: default title: GET features parent: PixVerse API v2 nav_order: 450 --- ## Retrieve your PixVerse.ai account information (credits etc) {: .no_toc } December 6, 2024 ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- Retrieve your [PixVerse.ai](https://PixVerse.ai) account information, see [Setup PixVerse](../start-here/setup-pixverse) for details. {: .get } > **https://api.useapi.net/v2/pixverse/features/?…** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Query Parameters - `email` is optional when only one [account](../api-pixverse-v2/get-pixverse-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**. ##### Responses {% tabs get_features_PixVerse_v2_features_response %} {% tab get_features_PixVerse_v2_features_response 200 %} 200 OK ```json { "user_id": 11223344, "member_id": 5566778899, "product_id": 9988776655, "plan_name": "Pro Plan", "next_plan_name": "Pro Plan", "next_plan_type": 2, "current_plan_type": 2, "type": 0, "credit_daily": 30, "credit_daily_gift": 30, "initial_credit_gift": 0, "credit_monthly": 5600, "credit_monthly_gift": 6000, "credit_package": 20, "expired_date": "2025-01-01T21:21:21Z", "price": "30", "billing_period": 1, "next_billing_period": 1, "billing_renewal_date": "2025-01-01T21:21:21Z", "payment": 1, "invoice_url": "https://stripe.pay.pixverse.ai/...", "stripe_bill_url": "https://stripe.pay.pixverse.ai/...", "gen_simultaneously": 5, "allow_fast_mode": 1, "allow_relaxed_mode": 1, "allow_use_new_feat": 1, "allow_private_generate": 1, "remove_watermark": 1, "allow_purchase_credit": 1, "sub_order_in_progress": 0, "allow_effect": 1 } ``` {% endtab %} {% tab get_features_PixVerse_v2_features_response 400 %} 400 Bad Request ```json { "error": "", "code": 400 } ``` {% endtab %} {% tab get_features_PixVerse_v2_features_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized", "code": 401 } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional user_id: number member_id: number product_id: number plan_name: string next_plan_name: string next_plan_type: number current_plan_type: number type: number credit_daily: number credit_daily_gift: number initial_credit_gift: number credit_monthly: number credit_monthly_gift: number credit_package: number expired_date: string price: string billing_period: number next_billing_period: number billing_renewal_date: string payment: number invoice_url: string stripe_bill_url: string gen_simultaneously: number allow_fast_mode: number allow_relaxed_mode: number allow_use_new_feat: number allow_private_generate: number remove_watermark: number allow_purchase_credit: number sub_order_in_progress: number allow_effect: number } ``` ##### Examples {% tabs get_features_PixVerse_v2_features_example %} {% tab get_features_PixVerse_v2_features_example Curl %} ``` bash curl "https://api.useapi.net/v2/pixverse/features/?email=email" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` {% endtab %} {% tab get_features_PixVerse_v2_features_example JavaScript %} ``` javascript const token = "API token"; const email= "Previously configured account email"; const apiUrl = `https://api.useapi.net/v2/pixverse/features/?email=${email}`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab get_features_PixVerse_v2_features_example Python %} ``` python import requests token = "API token" email= "Previously configured account email" apiUrl = f"https://api.useapi.net/v2/pixverse/features/?email={email}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-scheduler-available === Document URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-scheduler-available --- layout: default title: GET scheduler/available parent: PixVerse API v2 nav_order: 1600 --- ## Retrieve the list of videos currently running via the API along with the available account capacity {: .no_toc } December 6, 2024 ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- This endpoint retrieves the list of 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 PixVerse.ai website use [GET /videos](../api-pixverse-v2/get-pixverse-videos). {: .get } > **https://api.useapi.net/v2/pixverse/scheduler/available** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Responses {% tabs get_scheduler_available_PixVerse_v2_scheduler_available_response %} {% tab get_scheduler_available_PixVerse_v2_scheduler_available_response 200 %} 200 OK ```json { "executing": [ { "video_id": "user:user_id-pixverse:email-video:id1", "started": "2024-09-25T01:55:16.128Z", "elapsed": "03:57", "replyUrl": "", "replyRef": "" }, { "video_id": "user:user_id-pixverse:email-video:inN", "started": "2024-09-25T01:58:18.555Z", "elapsed": "00:35", "replyUrl": "", "replyRef": "" } ], "available": [ { "email": "", "maxJobs": 5, "executing": 0, "available": 5 }, { "email": "", "maxJobs": 8, "executing": 3, "available": 2 }, { "email": "", "maxJobs": 3, "executing": 2, "available": 1 } ] } ``` {% endtab %} {% tab get_scheduler_available_PixVerse_v2_scheduler_available_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized", "code": 401 } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional executing: { video_id: string started: string elapsed: string replyUrl: string replyRef: string }[] available: { email: string maxJobs: number executing: number available: number }[] error: string code: number } ``` ##### Examples {% tabs get_scheduler_available_PixVerse_v2_scheduler_available_example %} {% tab get_scheduler_available_PixVerse_v2_scheduler_available_example Curl %} ``` bash curl "https://api.useapi.net/v2/pixverse/scheduler/available" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` {% endtab %} {% tab get_scheduler_available_PixVerse_v2_scheduler_available_example JavaScript %} ``` javascript const token = "API token"; const apiUrl = `https://api.useapi.net/v2/pixverse/scheduler/available`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab get_scheduler_available_PixVerse_v2_scheduler_available_example Python %} ``` python import requests token = "API token" apiUrl = f"https://api.useapi.net/v2/pixverse/scheduler/available" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-scheduler === Document URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-scheduler --- layout: default title: GET scheduler parent: PixVerse API v2 nav_order: 1500 --- ## Retrieve the list of videos currently being executed by the API {: .no_toc } December 6, 2024 ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- This endpoint retrieves the list of videos currently being executed by the API. If you want to get all videos currently being executed including you manually initiated from PixVerse.ai website use [GET /videos](../api-pixverse-v2/get-pixverse-videos). {: .get } > **https://api.useapi.net/v2/pixverse/scheduler/** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Responses {% tabs get_scheduler_PixVerse_v2_scheduler_response %} {% tab get_scheduler_PixVerse_v2_scheduler_response 200 %} 200 OK ```json [ { "videoId": "user:user_id-pixverse:email-video:id1", "started": "2024-09-25T01:55:16.128Z", "elapsed": "03:57", "replyUrl": "", "replyRef": "" }, { "videoId": "user:user_id-pixverse:email-video:inN", "started": "2024-09-25T01:58:18.555Z", "elapsed": "00:35", "replyUrl": "", "replyRef": "" } ] ``` {% endtab %} {% tab get_scheduler_PixVerse_v2_scheduler_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized", "code": 401 } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional videoId: string started: string elapsed: string replyUrl: string replyRef: string }[] ``` ##### Examples {% tabs get_scheduler_PixVerse_v2_scheduler_example %} {% tab get_scheduler_PixVerse_v2_scheduler_example Curl %} ``` bash curl "https://api.useapi.net/v2/pixverse/scheduler/" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` {% endtab %} {% tab get_scheduler_PixVerse_v2_scheduler_example JavaScript %} ``` javascript const token = "API token"; const apiUrl = `https://api.useapi.net/v2/pixverse/scheduler/`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab get_scheduler_PixVerse_v2_scheduler_example Python %} ``` python import requests token = "API token" apiUrl = f"https://api.useapi.net/v2/pixverse/scheduler/" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-videos-effects === Document URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-videos-effects --- layout: default title: GET videos/effects parent: PixVerse API v2 nav_order: 1400 --- ## Retrieve the list of effects {: .no_toc } December 6, 2024 (January 8, 2026) ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- The returned `effect_type` field indicates the number of images required for a given effect: - `"1"` = single image (e.g., face swap, dance effects) - `"2"` = two images (e.g., hug, kiss effects) The total credit cost for a template is `video_base_cost + fixed_cost`. {: .get } > **https://api.useapi.net/v2/pixverse/videos/effects?…** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Query Parameters - `email` is optional when only one [account](../api-pixverse-v2/get-pixverse-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**. ##### Responses {% tabs get_PixVerse_v2_videos_effects_response %} {% tab get_PixVerse_v2_videos_effects_response 200 %} 200 OK ```json { "items": [ { "template_id": 380178461924416, "display_name": "Miniature Nail Artist Live", "workflow_tag": "meta_nanopro_it2v_v5_251204", "display_prompt": "Watch your 3D figurine create gorgeous nail designs!", "effect_type": "1", "template_type": 1, "duration": 5, "qualities": ["360p", "540p", "720p", "1080p"], "video_base_cost": 20, "fixed_cost": 20, "example_text": "Upload a person photo", "thumbnail_path": "https://media.pixverse.ai/…png", "thumbnail_video_path": "https://media.pixverse.ai/…mp4", "thumbnail_gif_path": "https://media.pixverse.ai/…gif", "audio_path": "https://media.pixverse.ai/…mp3", "marker": "new" }, { "template_id": 326733946317888, "display_name": "Hug Together", "workflow_tag": "interact_hug_250529", "display_prompt": "Create a heartwarming hug moment", "effect_type": "2", "template_type": 1, "duration": 5, "qualities": ["360p", "540p", "720p", "1080p"], "video_base_cost": 20, "fixed_cost": 0, "example_text": "Upload a two-person photo", "thumbnail_path": "https://media.pixverse.ai/…png", "thumbnail_video_path": "https://media.pixverse.ai/…mp4", "thumbnail_gif_path": "https://media.pixverse.ai/…gif", "audio_path": "https://media.pixverse.ai/…mp3", "marker": "hot" } ], "total": 150, "next_offset": 0 } ``` {% endtab %} {% tab get_PixVerse_v2_videos_effects_response 400 %} 400 Bad Request ```json { "error": "", "code": 400 } ``` {% endtab %} {% tab get_PixVerse_v2_videos_effects_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized", "code": 401 } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional items: { template_id: number display_name: string workflow_tag: string display_prompt: string effect_type: string // "1" = single image, "2" = two images required template_type: number // 1 = video template duration: number // video duration in seconds (5 or 8) qualities: string[] // available quality options video_base_cost: number // base credit cost fixed_cost: number // template-specific extra cost (0 for basic, 20 for premium) example_text: string // usage hint (e.g., "Upload a person photo") thumbnail_path: string thumbnail_video_path: string thumbnail_gif_path: string audio_path: string marker: string // "new", "hot", or "" }[] total: number next_offset: number } ``` ##### Examples {% tabs get_PixVerse_v2_videos_effects_example %} {% tab get_PixVerse_v2_videos_effects_example Curl %} ``` bash curl "https://api.useapi.net/v2/pixverse/videos/effects?email=email" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` {% endtab %} {% tab get_PixVerse_v2_videos_effects_example JavaScript %} ``` javascript const token = "API token"; const email= "Previously configured account email"; const apiUrl = `https://api.useapi.net/v2/pixverse/videos/effects?email=${email}`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab get_PixVerse_v2_videos_effects_example Python %} ``` python import requests token = "API token" email= "Previously configured account email" apiUrl = f"https://api.useapi.net/v2/pixverse/videos/effects?email={email}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-videos-restyles === Document URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-videos-restyles --- layout: default title: GET videos/restyles nav_exclude: true --- ## Retrieve the list of styles used for restyling {: .no_toc } March 31, 2025 (January 27, 2026) PixVerse website no longer supports Restyle. This endpoint no loner available. ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- {: .get } > **https://api.useapi.net/v2/pixverse/videos/restyles?…** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Query Parameters - `email` is optional when only one [account](../api-pixverse-v2/get-pixverse-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**. - `limit` is optional, specify the number of videos to return. Default 100. - `offset` is optional, specify the offset from where to start. ##### Responses {% tabs get_PixVerse_v2_videos_restyles_response %} {% tab get_PixVerse_v2_videos_restyles_response 200 %} 200 OK ```json { "items": [ { "restyle_id": 322004186061696, "display_name": "Van Gogh", "restyle_prompt": "Impressionistic Van Gogh style, with thick, expressive brushstrokes and vibrant, swirling color palettes, reminiscent of classic paintings, featuring textured yet simplified characters and environments full of movement and emotional depth.", "thumbnail_path": "asset/template/vangogh_1.png", "thumbnail_url": "https://media.pixverse.ai/asset%2Ftemplate%2Fvangogh_1.png", "marker": "new", "created_at": "2025-02-12T09:02:40Z", "updated_at": "2025-02-18T02:24:14Z" }, { "restyle_id": 322876019426368, "display_name": "Ghibli Animation", "restyle_prompt": "Ghibli style, with whimsical, fluid animation and soft, earthy color palettes, reminiscent of Studio Ghibli’s enchanting worlds, featuring simplified yet lush characters and environments made of hand-painted textures and dreamlike, nature-inspired elements.", "thumbnail_path": "asset/template/ghibli_1.png", "thumbnail_url": "https://media.pixverse.ai/asset%2Ftemplate%2Fghibli_1.png", "marker": "new", "created_at": "2025-02-17T07:17:40Z", "updated_at": "2025-02-17T10:19:09Z" } ] } ``` {% endtab %} {% tab get_PixVerse_v2_videos_restyles_response 400 %} 400 Bad Request ```json { "error": "", "code": 400 } ``` {% endtab %} {% tab get_PixVerse_v2_videos_restyles_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized", "code": 401 } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional items: { restyle_id: number restyle_tag: string display_name: string restyle_prompt: string thumbnail_path: string thumbnail_url: string thumbnail_video_path: string thumbnail_video_url: string show_status: string app_show_status: string marker: string display_prompt: string i18n_json: object | null score: number example_list: string qualities: any | null thumbnail_gif_path: string thumbnail_gif_url: string app_thumbnail_path: string app_thumbnail_url: string app_thumbnail_video_path: string app_thumbnail_video_url: string app_thumbnail_gif_path: string app_thumbnail_gif_url: string audio_path: string audio_url: string is_del: number is_pinned: string created_at: string updated_at: string }[] next_offset: number total: number } ``` ##### Examples {% tabs get_PixVerse_v2_videos_restyles_example %} {% tab get_PixVerse_v2_videos_restyles_example Curl %} ``` bash curl "https://api.useapi.net/v2/pixverse/videos/restyles?email=email" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` {% endtab %} {% tab get_PixVerse_v2_videos_restyles_example JavaScript %} ``` javascript const token = "API token"; const email= "Previously configured account email"; const apiUrl = `https://api.useapi.net/v2/pixverse/videos/restyles?email=${email}`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab get_PixVerse_v2_videos_restyles_example Python %} ``` python import requests token = "API token" email= "Previously configured account email" apiUrl = f"https://api.useapi.net/v2/pixverse/videos/restyles?email={email}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-videos-video_id === Document URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-videos-video_id --- layout: default title: GET videos/video_id parent: PixVerse API v2 nav_order: 700 --- ## Retrieve a generated video or image information {: .no_toc } December 6, 2024 (September 22, 2025) ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- Use this endpoint to retrieve a generated video or image information. Attempting to retrieve a video that is still processing will result in a `404` response. Use [GET /videos](../api-pixverse-v2/get-pixverse-videos) to retrieve all available videos. As of September 2025, the only endpoint capable of image generation is [POST videos/create](../api-pixverse-v2/post-pixverse-videos-create-v4) when an image `template_id` is used (`template_type: 2`). We're planning to add separate images endpoints once PixVerse rolls out fully-fledged image generation. {: .get } > **https://api.useapi.net/v2/pixverse/videos/`video_id`** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Path parameter - `video_id` is **required**. Specify the video_id or image_id you want to retrieve. ##### Responses {% tabs get_videos_video_id_PixVerse_v2_videos_video_id_response %} {% tab get_videos_video_id_PixVerse_v2_videos_video_id_response 200 %} 200 OK ```json { "video_id": "user:-pixverse:-video:112233445566", "video_status": 1, "account_id": 33445566, "created_at": "2024-11-11T12:34:56Z", "first_frame": "https://media.pixverse.ai/....jpg", "output_width": 2560, "output_height": 1472, "original_video_id": "user:-pixverse:-video:66778899", "upscaled": 1, "prompt": "", "model": "v3", "negative_prompt": "", "quality": "360p", "motion_mode": "normal", "asset_id": 0, "auto_character_prompt": 0, "seed": 0, "likes": 0, "model_name": "", "queue_data": { "queue_time": 1, "queue_count": 0 }, "video_duration": 5, "last_frame": "", "extended": 0, "lip_sync": null, "url": "https://media.pixverse.ai/...mp4", "img_id": 115994841, "img_url": "https://media.pixverse.ai/...webp", "duration": 5, "motion_brush": "", "asset_name": "", "asset_img_url": "", "remove_watermark": 1, "nick_name": "", "avatar": "https://media.pixverse.ai/...jpeg", "aspect_ratio": "", "camera_movement": "default", "relation_type": 0, "style": "", "template_id": 307489548427968, "template_name": "Crazy Cat Woman", "template_thumbnail_url": "https://media.pixverse.ai/asset%2Ftemplate%2Fcatwoman.png", "template_thumbnail_video_url": "https://media.pixverse.ai/asset%2Ftemplate%2Fcatwoman.mp4", "template_i18n_json": "{\"zh-CN\":{\"display_name\":\"疯狂猫女变身\",\"display_prompt\":\"变身妖娆猫女,撩翻全场!\"}}", "workflow_tag": "", "customer_paths": null, "platform": "", "off_peak": 0, "video_status_name": "COMPLETED", "video_status_final": true } ``` {% endtab %} {% tab get_videos_video_id_PixVerse_v2_videos_video_id_response 400 %} 400 Bad Request ```json { "error": "", "code": 400 } ``` {% endtab %} {% tab get_videos_video_id_PixVerse_v2_videos_video_id_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized", "code": 401 } ``` {% endtab %} {% tab get_videos_video_id_PixVerse_v2_videos_video_id_response 404 %} 404 Not Found The video was deleted, not found, or is still processing. ```json { "error": "The original video has been deleted" } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional video_id: string video_status: number account_id: number created_at: string first_frame: string output_width: number output_height: number original_video_id: number upscaled: number prompt: string model: string negative_prompt: string quality: string motion_mode: string asset_id: number auto_character_prompt: number seed: number likes: number model_name: string queue_data?: { queue_time: number queue_count: number estimated_gen_time?: number processing_start_time?: string } video_duration: number last_frame: string extended: number lip_sync?: any original_sound_switch: number sound_effect_switch: number lip_sync_switch: number is_sound: number url: string video_path: string img_id: number img_url: string img_path: string customer_img_path?: string customer_img_url?: string duration: number motion_brush: string asset_name: string asset_img_url: string remove_watermark: number nick_name: string avatar: string aspect_ratio: string camera_movement: string relation_type: number style: string template_id: number template_name: string template_thumbnail_url: string template_thumbnail_video_url: string template_thumbnail_gif_url: string template_i18n_json: string workflow_tag: string customer_paths?: { customer_img_url?: string customer_img_path?: string lip_sync_audio_url?: string lip_sync_audio_path?: string lip_sync_tts_content?: string sound_effect_content?: string lip_sync_tts_audio_path?: string lip_sync_tts_speaker_id?: string customer_video_url?: string customer_video_path?: string customer_video_duration?: number customer_first_frame?: string customer_last_frame?: string customer_first_frame_url?: string customer_last_frame_url?: string customer_img_urls?: string[] customer_img_paths?: string[] customer_lip_sync_audio_path?: string } platform: string create_mode: string qualities?: string[] | null lora_weight: number restyle_id: number restyle_prompt: string off_peak: number // added video_status_name: string video_status_final: boolean error: string } ``` ##### Examples {% tabs get_videos_video_id_PixVerse_v2_videos_video_id_example %} {% tab get_videos_video_id_PixVerse_v2_videos_video_id_example Curl %} ``` bash curl "https://api.useapi.net/v2/pixverse/videos/video_id" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` {% endtab %} {% tab get_videos_video_id_PixVerse_v2_videos_video_id_example JavaScript %} ``` javascript const token = "API token"; const video_id = "video_id to retrieve"; const apiUrl = `https://api.useapi.net/v2/pixverse/videos/${video_id}`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab get_videos_video_id_PixVerse_v2_videos_video_id_example Python %} ``` python import requests token = "API token" video_id = "video_id to retrieve" apiUrl = f"https://api.useapi.net/v2/pixverse/videos/{video_id}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-videos-voices === Document URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-videos-voices --- layout: default title: GET videos/voices parent: PixVerse API v2 nav_order: 1300 --- ## Retrieve the list of voices for lipsync {: .no_toc } December 6, 2024 ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- {: .get } > **https://api.useapi.net/v2/pixverse/videos/voices/?…** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Query Parameters - `email` is optional when only one [account](../api-pixverse-v2/get-pixverse-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**. ##### Responses {% tabs get_PixVerse_v2_videos_voices_response %} {% tab get_PixVerse_v2_videos_voices_response 200 %} 200 OK ```json { "tts_list": [ { "speaker_id": "1", "url": "https://media.pixverse.ai/pixverse/mp3/lipsync/tts/1.mp3", "display_name": "Emily" }, { "speaker_id": "2", "url": "https://media.pixverse.ai/pixverse/mp3/lipsync/tts/2.mp3", "display_name": "James" }, { "speaker_id": "3", "url": "https://media.pixverse.ai/pixverse/mp3/lipsync/tts/3.mp3\n", "display_name": "Isabella" }, { "speaker_id": "4", "url": "https://media.pixverse.ai/pixverse/mp3/lipsync/tts/4.mp3", "display_name": "Liam" }, { "speaker_id": "5", "url": "https://media.pixverse.ai/pixverse/mp3/lipsync/tts/5.mp3", "display_name": "Chloe" }, { "speaker_id": "6", "url": "https://media.pixverse.ai/pixverse/mp3/lipsync/tts/6.mp3", "display_name": "Adrian" } ] } ``` {% endtab %} {% tab get_PixVerse_v2_videos_voices_response 400 %} 400 Bad Request ```json { "error": "", "code": 400 } ``` {% endtab %} {% tab get_PixVerse_v2_videos_voices_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized", "code": 401 } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional tts_list: { speaker_id: string url: string display_name: string }[] } ``` ##### Examples {% tabs get_PixVerse_v2_videos_voices_example %} {% tab get_PixVerse_v2_videos_voices_example Curl %} ``` bash curl "https://api.useapi.net/v2/pixverse/videos/voices/?email=email" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` {% endtab %} {% tab get_PixVerse_v2_videos_voices_example JavaScript %} ``` javascript const token = "API token"; const email= "Previously configured account email"; const apiUrl = `https://api.useapi.net/v2/pixverse/videos/voices/?email=${email}`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab get_PixVerse_v2_videos_voices_example Python %} ``` python import requests token = "API token" email= "Previously configured account email" apiUrl = f"https://api.useapi.net/v2/pixverse/videos/voices/?email={email}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-videos === Document URL: https://useapi.net/docs/api-pixverse-v2/get-pixverse-videos --- layout: default title: GET videos parent: PixVerse API v2 nav_order: 600 --- ## Retrieve the list of videos {: .no_toc } December 6, 2024 (July 8, 2025) ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- Retrieve the list of videos, this will include those currently being generated or queued. Check the `video_status_name` field for the status and the field `video_status_final` to determine if the provided status is the final status. The API internally uses the field `video_status` to calculate values for `video_status_name` and `video_status_final`. See below for the known statuses map: | video_status | video_status_name | video_status_final | |--------|-------------------|--------------------| | 1 | COMPLETED | true | | 5 | QUEUED | true | | 7 | MODERATED | true | | 9 | GENERATING | false | | 10 | GENERATING | false | If field `off_peak` set to `1` that means this video will be generated during off-peak hours. {: .get } > **https://api.useapi.net/v2/pixverse/videos/?…** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Query Parameters - `email` is optional when only one [account](../api-pixverse-v2/get-pixverse-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**. - `limit` is optional, specify the number of videos to return. Default 40. - `offset` is optional, specify the offset from where to start. ##### Responses {% tabs get_videos_PixVerse_v2_videos_response %} {% tab get_videos_PixVerse_v2_videos_response 200 %} 200 OK ```json { "data": [ { "video_id": "user:-pixverse:-video:11223344", "video_status": 10, "account_id": 33445566, "created_at": "2024-11-11T12:34:56Z", "first_frame": "", "output_width": 0, "output_height": 0, "original_video_id": 0, "upscaled": 0, "prompt": "", "model": "v3", "negative_prompt": "", "quality": "540p", "motion_mode": "normal", "asset_id": 0, "auto_character_prompt": 0, "seed": 123456, "likes": 0, "model_name": "", "queue_data": { "queue_time": 1, "queue_count": 0 }, "video_duration": 5, "last_frame": "", "extended": 0, "lip_sync": {}, "url": "https://media.pixverse.ai/...mp4", "img_id": 55667788, "img_url": "https://media.pixverse.ai/...webp", "duration": 5, "motion_brush": "", "asset_name": "", "asset_img_url": "", "remove_watermark": 0, "nick_name": "", "avatar": "https://media.pixverse.ai/...jpeg", "aspect_ratio": "3:4", "camera_movement": "default", "relation_type": 0, "style": "", "template_id": 0, "template_name": "", "template_thumbnail_url": "", "template_thumbnail_video_url": "", "template_i18n_json": "", "workflow_tag": "", "customer_paths": null, "platform": "", "video_status_name": "GENERATING", "off_peak": 0, "video_status_final": false }, { "video_id": "user:-pixverse:-video:112233445566", "video_status": 1, "account_id": 33445566, "created_at": "2024-11-11T12:34:56Z", "first_frame": "https://media.pixverse.ai/....jpg", "output_width": 2560, "output_height": 1472, "original_video_id": "user:-pixverse:-video:66778899", "upscaled": 1, "prompt": "", "model": "v3", "negative_prompt": "", "quality": "360p", "motion_mode": "normal", "asset_id": 0, "auto_character_prompt": 0, "seed": 0, "likes": 0, "model_name": "", "queue_data": { "queue_time": 1, "queue_count": 0 }, "video_duration": 5, "last_frame": "", "extended": 0, "lip_sync": null, "url": "https://media.pixverse.ai/...mp4", "img_id": 115994841, "img_url": "https://media.pixverse.ai/...webp", "duration": 5, "motion_brush": "", "asset_name": "", "asset_img_url": "", "remove_watermark": 1, "nick_name": "", "avatar": "https://media.pixverse.ai/...jpeg", "aspect_ratio": "", "camera_movement": "default", "relation_type": 0, "style": "", "template_id": 307489548427968, "template_name": "Crazy Cat Woman", "template_thumbnail_url": "https://media.pixverse.ai/asset%2Ftemplate%2Fcatwoman.png", "template_thumbnail_video_url": "https://media.pixverse.ai/asset%2Ftemplate%2Fcatwoman.mp4", "template_i18n_json": "{\"zh-CN\":{\"display_name\":\"疯狂猫女变身\",\"display_prompt\":\"变身妖娆猫女,撩翻全场!\"}}", "workflow_tag": "", "customer_paths": null, "platform": "", "off_peak": 1, "video_status_name": "COMPLETED", "video_status_final": true } ], "next_offset": 40, "total": 55 } ``` {% endtab %} {% tab get_videos_PixVerse_v2_videos_response 400 %} 400 Bad Request ```json { "error": "", "code": 400 } ``` {% endtab %} {% tab get_videos_PixVerse_v2_videos_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized", "code": 401 } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional { video_id: string video_status: number account_id: number created_at: string first_frame: string output_width: number output_height: number original_video_id: number upscaled: number prompt: string model: string negative_prompt: string quality: string motion_mode: string asset_id: number auto_character_prompt: number seed: number likes: number model_name: string queue_data?: { queue_time: number queue_count: number estimated_gen_time?: number processing_start_time?: string } video_duration: number last_frame: string extended: number lip_sync?: any original_sound_switch: number sound_effect_switch: number lip_sync_switch: number is_sound: number url: string video_path: string img_id: number img_url: string img_path: string customer_img_path?: string customer_img_url?: string duration: number motion_brush: string asset_name: string asset_img_url: string remove_watermark: number nick_name: string avatar: string aspect_ratio: string camera_movement: string relation_type: number style: string template_id: number template_name: string template_thumbnail_url: string template_thumbnail_video_url: string template_thumbnail_gif_url: string template_i18n_json: string workflow_tag: string customer_paths?: { customer_img_url?: string customer_img_path?: string lip_sync_audio_url?: string lip_sync_audio_path?: string lip_sync_tts_content?: string sound_effect_content?: string lip_sync_tts_audio_path?: string lip_sync_tts_speaker_id?: string customer_video_url?: string customer_video_path?: string customer_video_duration?: number customer_first_frame?: string customer_last_frame?: string customer_first_frame_url?: string customer_last_frame_url?: string customer_img_urls?: string[] customer_img_paths?: string[] customer_lip_sync_audio_path?: string } platform: string create_mode: string qualities?: string[] | null lora_weight: number restyle_id: number restyle_prompt: string off_peak: number // added video_status_name: string video_status_final: boolean }[] next_offset: number total: number } ``` ##### Examples {% tabs get_videos_PixVerse_v2_videos_example %} {% tab get_videos_PixVerse_v2_videos_example Curl %} ``` bash curl "https://api.useapi.net/v2/pixverse/videos/?email=email" \ -H "Accept: application/json" \ -H "Authorization: Bearer …" ``` {% endtab %} {% tab get_videos_PixVerse_v2_videos_example JavaScript %} ``` javascript const token = "API token"; const email= "Previously configured account email"; const apiUrl = `https://api.useapi.net/v2/pixverse/videos/?email=${email}`; const response = await fetch(apiUrl, { headers: { "Authorization": `Bearer ${token}`, }, }); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab get_videos_PixVerse_v2_videos_example Python %} ``` python import requests token = "API token" email= "Previously configured account email" apiUrl = f"https://api.useapi.net/v2/pixverse/videos/?email={email}" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/model-capabilities === Document URL: https://useapi.net/docs/api-pixverse-v2/model-capabilities --- layout: default title: Model Capabilities parent: PixVerse API v2 nav_order: 50 --- December 5, 2025 (January 27, 2026) ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- ### Available Models | Model | Description | |-------|-------------| | **v5.6** | Latest model with audio generation | | **v5.5** | Audio generation | | **v5** | Lip sync TTS, sound effects | | **v5-fast** | Fast generation, no audio features | ### Quality & Duration Matrix All models support duration **1-10 seconds**, except: - **1080p** is limited to **1-8 seconds** maximum - **create-frames** endpoint is limited to **1-8 seconds** | Quality | Duration Range | Notes | |---------|----------------|-------| | **360p** | 1-10s | All tiers | | **540p** *(default)* | 1-10s | All tiers | | **720p** | 1-10s | Standard+ | | **1080p** | 1-8s | Pro/Premium | ### Audio Features by Model | Model | Audio Feature | Usage | |-------|---------------|-------| | **v5.6** | Integrated audio | `audio: true` | | **v5.5** | Integrated audio | `audio: true` | | **v5** | Lip sync + Sound effects | `lip_sync_tts_prompt` + `sound_effect_prompt` | | **v5-fast** | None | No audio support | ### v5.5/v5.6 Native Audio Models `v5.5` and `v5.6` feature **integrated audio generation** - voice, lip sync, and background music are generated together with the video in a single step. ```json { "model": "v5.6", "audio": true, "prompt": "A woman says hello and waves at the camera" } ``` | v5.5/v5.6 Audio | v5 Audio | |-----------------|----------| | Use `audio: true` | Use `lip_sync_tts_prompt` + `sound_effect_prompt` | | Voice integrated with video | Separate lipsync step available | | Background music auto-generated | Manual via `sound_effect_prompt` | | Lipsync endpoint not supported | Lipsync endpoint supported | ### Feature Comparison | Feature | v5.6 | v5.5 | v5 | v5-fast | |---------|------|------|----|---------| | Native Audio | ✅ | ✅ | - | - | | Lip Sync TTS | - | - | ✅ | - | | Sound Effects | - | - | ✅ | - | | Duration 1-10s | ✅ | ✅ | ✅ | ✅ | | Preview Mode | ✅ | ✅ | ✅ | ✅ | ### Endpoint Compatibility | Endpoint | v5.6 | v5.5 | v5 | v5-fast | |----------|------|------|----|---------| | [POST videos/create](post-pixverse-videos-create-v4) | ✅ | ✅ | ✅ | ✅ | | [POST videos/create-frames](post-pixverse-videos-create-frames-v4) | ✅ | ✅ | ✅ | ✅ | | [POST videos/create-transition](post-pixverse-videos-create-transition)
(2-frame) | ✅ | ✅ | ✅ | - | | [POST videos/create-transition](post-pixverse-videos-create-transition)
(3+ frame) | - | - | ✅ | - | | [POST videos/extend](post-pixverse-videos-extend-v4) | - | ✅ | ✅ | - | | [POST videos/modify](post-pixverse-videos-modify) | - | ✅ | - | - | | [POST videos/upscale](post-pixverse-videos-upscale) | ✅ | ✅ | ✅ | ✅ | | [POST videos/lipsync](post-pixverse-videos-lipsync) | - | - | ✅ | - | | [POST videos/create-fusion](post-pixverse-videos-create-fusion) | - | - | ✅ | - | ### Endpoint-Specific Constraints | Endpoint | Supported Models | Max Duration | Max Quality | |----------|------------------|--------------|-------------| | create | v5.6, v5.5, v5, v5-fast | 10s (8s@1080p) | 1080p | | create-frames | v5.6, v5.5, v5, v5-fast | 8s | 1080p | | create-transition
(2-frame) | v5.6, v5.5, v5 | 8s | 1080p | | create-transition
(3+ frame) | v5 only | 8s | 1080p | | extend | v5.5, v5 | 10s (8s@1080p) | 1080p | | modify | v5.5 only | source video | 720p | | lipsync | v5 only | source video | source | | fusion | v5 only | 10s (8s@1080p) | 1080p | ### Quality Tier Requirements - **360p**: All subscription tiers - **540p**: All subscription tiers (default) - **720p**: Standard or higher - **1080p**: Pro/Premium === URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-accounts-email === Document URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-accounts-email --- layout: default title: POST accounts/email parent: PixVerse API v2 nav_order: 300 --- ## Create or update PixVerse API account configuration {: .no_toc } December 6, 2024 (March 11, 2025) ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- See [Setup PixVerse](../start-here/setup-pixverse) for details. For your convenience, you can specify your PixVerse configuration values under your account. If you specify multiple PixVerse accounts, the API will automatically perform load balancing by randomly selecting an account with available capacity before making calls to PixVerse. {: .post } > **https://api.useapi.net/v2/pixverse/accounts/`email`** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json # Alternatively you can use multipart/form-data # Content-Type: multipart/form-data ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Request Body ```json { "email": "Required PixVerse account email", "password": "Required PixVerse account password", "maxJobs": 1-8, "token": "Optional PixVerse token", } ``` - `email` and `password` are **required**. Please see [Setup PixVerse](../start-here/setup-pixverse) for details. - `maxJobs` is **required**. Valid range: 1…8 It should not exceed the number of concurrent generations supported by your account [subscription](https://app.pixverse.ai/subscribe) plan. - `token` is optional and should only be used for development or debugging purposes. See [details](../start-here/setup-pixverse#optional-configure-pixverse-api-to-use-the-current-pixverseai-session). **Important:** When creating an account, leave the token field empty. Only add it after the account has been created, and only if you truly need it. ##### Responses {% tabs post_account_PixVerse_v2_response %} {% tab post_account_PixVerse_v2_response 201 %} 201 Created ```json { "email": "", "password": "…secured…", "maxJobs": 3, "jwt": { "AccountId": 66778899, "ExpireTime": 123456789, "ExpireTimeUTC": "2025-01-01T12:13:14.000Z", "Username": "", "token": "abc…secured…cde" } } ``` {% endtab %} {% tab post_account_PixVerse_v2_response 400 %} 400 Bad Request ```json { "error": "", "code": 400 } ``` {% endtab %} {% tab post_account_PixVerse_v2_response 401 %} 401 Unauthorized ```json { "error": "", "code": 401 } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional email: string password: string maxJobs: number jwt: { AccountId: number ExpireTime: number ExpireTimeUTC: string Username: string token: string } } ``` ##### Examples {% tabs post_account_PixVerse_v2_example %} {% tab post_account_PixVerse_v2_example Curl %} ``` bash curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X POST https://api.useapi.net/v2/pixverse/accounts/ \ -d '{"email": "…", "password": "…", "maxJobs": …}' ``` {% endtab %} {% tab post_account_PixVerse_v2_example JavaScript %} ``` javascript const email = "PixVerse account email"; const password = "PixVerse account password"; const apiUrl = `https://api.useapi.net/v2/pixverse/accounts/${email}`; const api_token = "API token"; const maxJobs = 3; const data = { method: 'POST', headers: { 'Authorization': `Bearer ${api_token}`, 'Content-Type': 'application/json' } }; data.body = JSON.stringify({ email, password, maxJobs }); const response = await fetch(apiUrl, data); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab post_account_PixVerse_v2_example Python %} ``` python import requests email = "PixVerse account email" password = "PixVerse account password" apiUrl = f"https://api.useapi.net/v2/pixverse/accounts/{email}" api_token = "API token" maxJobs = 3 headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {api_token}" } body = { "email": f"{email}", "password": f"{password}", "maxJobs": maxJobs } response = requests.post(apiUrl, headers=headers, json=body) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-files === Document URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-files --- layout: default title: POST files parent: PixVerse API v2 nav_order: 500 --- ## Upload image, video or audio file {: .no_toc } December 6, 2024 ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- Upload an image, video, or audio file up to 5GB in size. Files uploaded to one PixVerse.ai account can be accessed from any other PixVerse.ai account just by referencing the `id` (image) or `path` (video/audio) so keep that in mind. [POST raw content using Make.com and similar nocode tools.](../questions-and-answers.html#how-post-raw-content-to-runwaymlassets-and-minimaxfiles-using-makecom-and-similar-nocode-tools) {: .post } > **https://api.useapi.net/v2/pixverse/files/?…** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: select from the table below ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. - `Content-Type` is **required**, select from the table below: | Content-Type | File Extension | | ------------------- | -------------- | | image/png | png | | image/jpeg | jpeg | | image/gif | gif | | image/webp | webp | | video/mp4 | mp4 | | video/quicktime | mov | | video/3gpp | 3gp | | video/x-matroska | mkv | | video/x-flv | flv | | video/mpeg | mpeg | | video/MP2T | ts | | video/x-msvideo | avi | | video/x-motion-jpeg | mjpeg | | video/webm | webm | | video/ogg | ogv | | audio/wav | wav | | audio/wave | wav | | audio/mpeg | mp3 | **NOTE** We took a guess on supported video and audio types and only tested the most popular ones. ##### Query Parameters - `email` is optional when only one [account](../api-pixverse-v2/get-pixverse-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**. ##### Responses {% tabs post_files_PixVerse_v2_files_response %} {% tab post_files_PixVerse_v2_files_response 200 %} 200 OK The image upload response contains a `id` that you can use to reference the uploaded image file: ```json { "result": [ { "id": 123456, "url": "", "path": "", "size": 112233, "name": "", "category": 0, "err_msg": "" } ] } ``` The video/audio upload response contains a `path` that you can use to reference the uploaded video/audio file: ```json { "path": "", "url": "" } ``` {% endtab %} {% tab post_files_PixVerse_v2_files_response 400 %} 400 Bad Request ```json { "error": "", "code": 400 } ``` {% endtab %} {% tab post_files_PixVerse_v2_files_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized", "code": 401 } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional url: string path: string result: { id: number url: string path: string size: number name: string category: number err_msg: string }[] } ``` ##### Examples {% tabs post_files_PixVerse_v2_files_example %} {% tab post_files_PixVerse_v2_files_example Curl %} ``` bash curl "https://api.useapi.net/v2/pixverse/files/?email=email" \ -H "Authorization: Bearer …" \ -H "Content-Type: image/jpeg" \ --data-binary /path/to/your/image.jpeg ``` {% endtab %} {% tab post_files_PixVerse_v2_files_example JavaScript %} ``` javascript const token = "API token"; const email = "Previously configured account email"; const apiUrl = `https://api.useapi.net/v2/pixverse/files/?email=${email}`; let blob; /* // Example 1: Fetch image from URL const imageUrl = "https://upload.wikimedia.org/wikipedia/commons/7/7d/Mona_Lisa_color_restoration.jpg"; const responseImage = await fetch(imageUrl); blob = await responseImage.blob(); */ /* // Example 2: Load image from local file (Blob) const fsp = require('fs').promises; const imageFileName = "./cat.png"; blob = new Blob([await fsp.readFile(imageFileName)]); */ /* // Example 3: Load from input file html element // const imageFile = document.getElementById(`image-file`); if (imageFile.files[0]) blob = imageFile.files[0]); */ const response = await fetch(apiUrl, { method: "POST" headers: { "Authorization": `Bearer ${token}`, }, body: blob }); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab post_files_PixVerse_v2_files_example Python %} ``` python import requests token = "API token" email = "Previously configured account email" apiUrl = f"https://api.useapi.net/v2/pixverse/files/?email={email}" headers = { 'Authorization': f'Bearer {token}', 'Content-Type': 'image/jpeg' } # # Example 1: Fetch image from URL # image_url = "https://upload.wikimedia.org/wikipedia/commons/7/7d/Mona_Lisa_color_restoration.jpg" # response_image = requests.get(image_url) # file_content = response_image.content # # Example 2: Load image from local file # image_file_path = "./image.jpg" # with open(image_file_path, 'rb') as image_file: # file_content = image_file.read() response = requests.post(api_url, headers=headers, data=file_content) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-create-frames-v4 === Document URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-create-frames-v4 --- layout: default title: POST videos/create-frames parent: PixVerse API v2 nav_order: 860 --- ## Create video using first and last frames {: .no_toc } March 31, 2025 (January 27, 2026) ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- This endpoint uses PixVerse models `v5.6`, `v5.5`, `v5`, and `v5-fast`. Default: `v5.5`. To upload prompt image use [POST /files](../api-pixverse-v2/post-pixverse-files). {: .post } > **https://api.useapi.net/v2/pixverse/videos/create-frames** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json # Alternatively you can use multipart/form-data # Content-Type: multipart/form-data ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Request Body ```json { "email": "Optional PixVerse API account email", "prompt": "Optional text prompt", "first_frame_path": "upload/7d16f-eed2-a8f4-cef8-aa44-72807n313.jpeg", "last_frame_path": "upload/e7484a28-6efd-174d-7c02-316ef1a5d.jpeg", "duration": 8, "quality": "1080p", "seed": 654321, "replyUrl": "Place your call back URL here", "replyRef": "Place your reference id here", "maxJobs": 3 } ``` - `email` is optional, if not specified API will randomly select account from available [accounts](../api-pixverse-v2/get-pixverse-accounts). - `model` is optional. Supported values: `v5.6`, `v5.5`, `v5`, and `v5-fast`. Default: `v5.6`. See [Model Capabilities](model-capabilities) for feature differences. - `prompt` is optional, describe your video. Maximum length 2048 characters. - `first_frame_path` is **required**, provide path of uploaded image via [POST /files](../api-pixverse-v2/post-pixverse-files). - `last_frame_path` is **required**, provide path of uploaded image via [POST /files](../api-pixverse-v2/post-pixverse-files). - `duration` is optional. Video duration in seconds. Supported values: `1` through `8`. Default: `5`. - `quality` is optional. Video quality. Supported values: `1080p`, `720p`, `540p` (default), `360p`. - `audio` is optional (v5.5/v5.6 only). Set to `true` to enable integrated native audio generation. v5.5/v5.6 generates voice, lip sync, and background music together with the video. See [Model Capabilities](model-capabilities#v55v56-native-audio). Supported values: not specified (default), `false`, `true`. - `preview_mode` is optional. Set to `true` for fast preview generation (lower quality, faster results). Preview videos can later be upscaled via [POST videos/upscale](post-pixverse-videos-upscale). Supported values: `false` (default), `true`. - `auto_sound` is optional (v5 only). Set to `true` to generate videos with sound. Supported values: not specified (default), `false`, `true`. - `sound_effect_prompt` is optional (v5 only), describe the sound eg "the sound of waves hitting the shore". - `lip_sync_tts_prompt` is optional (v5 only), enter character lines. Maximum length 140 characters. - `lip_sync_tts_speaker_id` is optional (v5 only), specify desired lipsync voice see [GET videos/voices](../api-pixverse-v2/get-pixverse-videos-voices). - `seed` is optional. Valid range 1…2147483647. - `off_peak_mode` is optional. Set to `true` to generate videos during low-demand periods with up to 50% credit savings. Results are usually delivered within 24 hours. Off-Peak Mode generations are not tracked by the scheduler and are not counted towards the number of currently executed jobs. The replyUrl webhook will also be ignored. You must use [GET videos](../api-pixverse-v2/get-pixverse-videos) to retrieve the generated results. Supported values: `false` (default), `true`. - `replyUrl` is optional. Callback URL for job completion notifications. API will call the provided `replyUrl` once PixVerse video completed or failed. Maximum length 1024 characters. We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality. - `replyRef` is optional, place here your reference id which will be stored and returned along with this PixVerse video response / result. Maximum length 1024 characters. - `maxJobs` is optional, if not specified value from selected [accounts/email](../api-pixverse-v2/get-pixverse-accounts-email) will be used. Valid range: 1…8 It should not exceed the number of concurrent generations supported by your account [subscription](https://app.pixverse.ai/subscribe) plan. ##### Responses {% tabs post_PixVerse_v2_videos_create-frames-v4_response %} {% tab post_PixVerse_v2_videos_create-frames-v4_response 200 %} 200 OK Use the returned `video_id` to retrieve video status and results using [GET /videos](../api-pixverse-v2/get-pixverse-videos). Locate the video in the response array and check if the field `video_status_final` is `true` or `video_status_name` is `COMPLETED`. The field `url` will contain the generated video link. If you specify the optional parameter [`replyUrl`](#request-body), the API will call the provided `replyUrl` with video progress updates until the video is complete or fails. ```json { "video_id": "user:-pixverse:-video:" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-frames-v4_response 400 %} 400 Bad Request ```json { "error": "" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-frames-v4_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-frames-v4_response 412 %} 412 Insufficient credits Insufficient credits. All Credits have been used up. Please upgrade your membership or purchase credits. ```json { "error": "All Credits have been used up. Please upgrade your membership or purchase credits." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-frames-v4_response 422 %} 422 Unprocessable Content Moderated message. ```json { "error": "Your prompt has triggered our AI moderator, please re-enter your prompt" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-frames-v4_response 429 %} 429 Too Many Requests Wait in a loop for **at least** 10..30 seconds and retry again. There are two possible cases for API response 429: 1. API query is full and can not accept new [videos/create-frames](#request-headers) requests. Size of query defined by [`maxJobs` optional parameter](#request-body). ```json { "error": "Account is busy executing tasks." "All configured accounts are running at maximum capacity." } ``` 2. The API received an HTTP response status 429 from PixVerse. Please refer to your [subscription](https://app.pixverse.ai/subscribe) plan for the maximum allowed tasks in the queue. ```json { "error": "Reached the limit for concurrent generations." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-frames-v4_response 596 %} 596 Pending mod message Your PixVerse.ai account has a pending error. Most likely, you changed your account password or your PixVerse.ai account was placed on hold. Once the issue is resolved, update your account to clear the error by executing [POST accounts/email](../api-pixverse-v2/post-pixverse-accounts-email) before making any new API calls. ```json { "error": "Your PixVerse account has pending error." "Please address this issue at https://useapi.net/docs/api-pixverse-v2/post-pixverse-accounts-email before making any new API calls." } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional video_id: string error: string } ``` ##### Examples {% tabs post_PixVerse_v2_videos_create-frames-v4_example %} {% tab post_PixVerse_v2_videos_create-frames-v4_example Curl %} ``` bash curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X POST "https://api.useapi.net/v2/pixverse/videos/create-frames" \ -d '{"prompt": "…", "first_frame_path": "…", "last_frame_path": "…"}' ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-frames-v4_example JavaScript %} ``` javascript const prompt = "text prompt"; const first_frame_path = "provide path of uploaded first image via POST /files"; const last_frame_path = "provide path of uploaded last image via POST /files"; const apiUrl = `https://api.useapi.net/v2/pixverse/videos/create-frames`; const token = "API token"; const data = { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }; data.body = JSON.stringify({ prompt, first_frame_path, last_frame_path }); const response = await fetch(apiUrl, data); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-frames-v4_example Python %} ``` python import requests prompt = "text prompt" first_frame_path = "provide path of uploaded first image via POST /files" last_frame_path = "provide path of uploaded last image via POST /files" apiUrl = f"https://api.useapi.net/v2/pixverse/videos/create-frames" token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } body = { "prompt": f"{prompt}", "first_frame_path": f"{first_frame_path}", "last_frame_path": f"{last_frame_path}" } response = requests.post(apiUrl, headers=headers, json=body) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-create-fusion === Document URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-create-fusion --- layout: default title: POST videos/create-fusion parent: PixVerse API v2 nav_order: 890 --- ## Create video using image fusion {: .no_toc } May 16, 2025 (January 27, 2026) ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- Upload up to three frames and describe the content you want to create. This endpoint uses PixVerse model `v5` only. See [Model Capabilities](model-capabilities) for details. To upload prompt images use [POST /files](../api-pixverse-v2/post-pixverse-files). {: .post } > **https://api.useapi.net/v2/pixverse/videos/create-fusion** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json # Alternatively you can use multipart/form-data # Content-Type: multipart/form-data ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Request Body ```json { "email": "Optional PixVerse API account email", "prompt": "A dog @pic1 and a cat @pic2 traveling together in the car @pic3", "frame_1_path": "upload/eb20c63d-2a1a-5be6-a562-d3578a2831e3.png", "frame_2_path": "upload/7b45d27f-301c-4d18-a2a1-f8bc3672e6a9.png", "frame_3_path": "upload/f8bc3672e6a9-301c-4d18-a2a1-7b45d27f.png", "duration": 8, "quality": "540p", "aspect_ratio": "16:9", "seed": 654321, "replyUrl": "Place your call back URL here", "replyRef": "Place your reference here", "off_peak_mode": true } ``` - `email` is optional, if not specified API will randomly select account from available [accounts](../api-pixverse-v2/get-pixverse-accounts). - `model` is optional. Supported value: `v5`. - `prompt` is **required**, describe your video. Maximum length 2048 characters. Use special notation "@pic1" to reference the frame_1_path image, "@pic2" to reference the frame_2_path image and "@pic3" to reference the frame_3_path image. - `frame_1_path` is **required**, provide the path of uploaded image via [POST /files](../api-pixverse-v2/post-pixverse-files). This image will be referenced in the prompt as "@pic1". - `frame_2_path` is optional, provide the path of the uploaded image via [POST /files](../api-pixverse-v2/post-pixverse-files). If provided, this image will be referenced in the prompt as "@pic2". - `frame_3_path` is optional, provide the path of the uploaded image via [POST /files](../api-pixverse-v2/post-pixverse-files). If provided, this image will be referenced in the prompt as "@pic3". - `duration` is optional. Video duration in seconds. Supported values: `1` through `10`. Default: `5`. Note: 1080p quality is limited to 8 seconds maximum. - `quality` is optional. Video quality. Supported values: `1080p`, `720p`, `540p` (default), `360p` (Turbo). - `aspect_ratio` is optional. Default is `16:9`. Supported values: `16:9` (default), `9:16`, `1:1`, `4:3`, `3:4` - `seed` is optional. Valid range 1…999999. - `off_peak_mode` is optional. Set to `true` to generate videos during low-demand periods with up to 50% credit savings. Results are usually delivered within 24 hours. Off-Peak Mode generations are not tracked by the scheduler and are not counted towards the number of currently executed jobs. The replyUrl webhook will also be ignored. You must use [GET videos](../api-pixverse-v2/get-pixverse-videos) to retrieve the generated results. Supported values: `false` (default), `true`. - `replyUrl` is optional. Callback URL for job completion notifications. API will call the provided `replyUrl` once PixVerse video completed or failed. Maximum length 1024 characters. We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality. - `replyRef` is optional, place here your reference id which will be stored and returned along with this PixVerse video response / result. Maximum length 1024 characters. - `maxJobs` is optional, if not specified value from selected [accounts/email](../api-pixverse-v2/get-pixverse-accounts-email) will be used. Valid range: 1…8 It should not exceed the number of concurrent generations supported by your account [subscription](https://app.pixverse.ai/subscribe) plan. ##### Responses {% tabs post_PixVerse_v2_videos_create-fusion_response %} {% tab post_PixVerse_v2_videos_create-fusion_response 200 %} 200 OK Use the returned `video_id` to retrieve video status and results using [GET /videos](../api-pixverse-v2/get-pixverse-videos). Locate the video in the response array and check if the field `video_status_final` is `true` or `video_status_name` is `COMPLETED`. The field `url` will contain the generated video link. If you specify the optional parameter [`replyUrl`](#request-body), the API will call the provided `replyUrl` with video progress updates until the video is complete or fails. ```json { "video_id": "user:-pixverse:-video:" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-fusion_response 400 %} 400 Bad Request ```json { "error": "" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-fusion_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-fusion_response 412 %} 412 Insufficient credits Insufficient credits. All Credits have been used up. Please upgrade your membership or purchase credits. ```json { "error": "All Credits have been used up. Please upgrade your membership or purchase credits." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-fusion_response 422 %} 422 Unprocessable Content Moderated message. ```json { "error": "Your prompt has triggered our AI moderator, please re-enter your prompt" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-fusion_response 429 %} 429 Too Many Requests Wait in a loop for **at least** 10..30 seconds and retry again. There are two possible cases for API response 429: 1. API query is full and can not accept new [videos/create-fusion](#request-headers) requests. Size of query defined by [`maxJobs` optional parameter](#request-body). ```json { "error": "Account is busy executing tasks." "All configured accounts are running at maximum capacity." } ``` 2. The API received an HTTP response status 429 from PixVerse. Please refer to your [subscription](https://app.pixverse.ai/subscribe) plan for the maximum allowed tasks in the queue. ```json { "error": "Reached the limit for concurrent generations." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-fusion_response 596 %} 596 Pending mod message Your PixVerse.ai account has a pending error. Most likely, you changed your account password or your PixVerse.ai account was placed on hold. Once the issue is resolved, update your account to clear the error by executing [POST accounts/email](../api-pixverse-v2/post-pixverse-accounts-email) before making any new API calls. ```json { "error": "Your PixVerse account has pending error." "Please address this issue at https://useapi.net/docs/api-pixverse-v2/post-pixverse-accounts-email before making any new API calls." } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional video_id: string error: string } ``` ##### Examples {% tabs post_PixVerse_v2_videos_create-fusion_example %} {% tab post_PixVerse_v2_videos_create-fusion_example Curl %} ``` bash curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X POST "https://api.useapi.net/v2/pixverse/videos/create-fusion" \ -d '{"prompt": "A dog @pic1 and a cat @pic2 traveling together", "frame_1_path": "…", "frame_2_path": "…"}' ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-fusion_example JavaScript %} ``` javascript const prompt = "A dog @pic1 and a cat @pic2 traveling together"; const frame_1_path = "provide path of uploaded first image via POST /files"; const frame_2_path = "provide path of uploaded last image via POST /files"; const apiUrl = `https://api.useapi.net/v2/pixverse/videos/create-fusion`; const token = "API token"; const data = { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }; data.body = JSON.stringify({ prompt, frame_1_path, frame_2_path }); const response = await fetch(apiUrl, data); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-fusion_example Python %} ``` python import requests prompt = "A dog @pic1 and a cat @pic2 traveling together" frame_1_path = "provide path of uploaded first image via POST /files" frame_2_path = "provide path of uploaded last image via POST /files" apiUrl = f"https://api.useapi.net/v2/pixverse/videos/create-fusion" token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } body = { "prompt": f"{prompt}", "frame_1_path": f"{frame_1_path}", "frame_2_path": f"{frame_2_path}" } response = requests.post(apiUrl, headers=headers, json=body) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-create-transition === Document URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-create-transition --- layout: default title: POST videos/create-transition parent: PixVerse API v2 nav_order: 890 --- ## Create transition video {: .no_toc } August 29, 2025 (January 27, 2026) ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- This endpoint creates multi-frame transition videos with up to 7 frames and customizable transition durations between frames. To upload frame images use [POST files](../api-pixverse-v2/post-pixverse-files). {: .post } > **https://api.useapi.net/v2/pixverse/videos/create-transition** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json # Alternatively you can use multipart/form-data # Content-Type: multipart/form-data ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Request Body ```json { "email": "Optional PixVerse API account email", "quality": "540p", "seed": 123456789, "frame_1_path": "upload/scene1.jpg", "frame_2_path": "upload/scene2.jpg", "frame_3_path": "upload/scene3.jpg", "duration_1_to_2": "3", "duration_2_to_3": "2", "prompt_1_to_2": "Smooth fade between scenes", "prompt_2_to_3": "Quick transition", "lip_sync_tts_prompt": "Optional TTS narration", "lip_sync_tts_speaker_id": "speaker_001", "auto_sound": true, "sound_effect_prompt": "Ambient background music", "off_peak_mode": false, "maxJobs": 1, "replyUrl": "Place your call back URL here", "replyRef": "Place your reference id here" } ``` - `email` is optional, if not specified API will randomly select account from available [accounts](../api-pixverse-v2/get-pixverse-accounts). - `model` is optional. Model availability depends on frame count: - **2-frame mode** (frame_1 + frame_2 only): Supports `v5.6` (default), `v5.5`, and `v5`. - v5.5/v5.6: Use `audio` parameter for sound. - v5: Use `lip_sync_tts_prompt` and `sound_effect_prompt` for audio. - **3+ frame mode** (3-7 frames): Only `v5` supported (default). Use `lip_sync_tts_prompt` and `sound_effect_prompt` for audio. Using incompatible parameters for the model returns error 400. See [Model Capabilities](model-capabilities) for feature differences. - `quality` is optional. Video quality. Supported values: `1080p`, `720p`, `540p` (default), `360p`. - `seed` is optional. Valid range 1…2147483647. - `frame_1_path` is **required**, provide path of uploaded image via [POST files](../api-pixverse-v2/post-pixverse-files). - `frame_2_path` is **required**, provide path of uploaded image via [POST files](../api-pixverse-v2/post-pixverse-files). - `frame_3_path` is optional, provide path of uploaded image via [POST files](../api-pixverse-v2/post-pixverse-files). - `frame_4_path` is optional, provide path of uploaded image via [POST files](../api-pixverse-v2/post-pixverse-files). - `frame_5_path` is optional, provide path of uploaded image via [POST files](../api-pixverse-v2/post-pixverse-files). - `frame_6_path` is optional, provide path of uploaded image via [POST files](../api-pixverse-v2/post-pixverse-files). - `frame_7_path` is optional, provide path of uploaded image via [POST files](../api-pixverse-v2/post-pixverse-files). - `duration_1_to_2` is optional. Transition duration from frame 1 to frame 2 in seconds. Supported values: `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`. - `duration_2_to_3` is optional. Transition duration from frame 2 to frame 3 in seconds. Supported values: `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`. - `duration_3_to_4` is optional. Transition duration from frame 3 to frame 4 in seconds. Supported values: `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`. - `duration_4_to_5` is optional. Transition duration from frame 4 to frame 5 in seconds. Supported values: `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`. - `duration_5_to_6` is optional. Transition duration from frame 5 to frame 6 in seconds. Supported values: `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`. - `duration_6_to_7` is optional. Transition duration from frame 6 to frame 7 in seconds. Supported values: `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`. - `prompt_1_to_2` is optional, describe transition from frame 1 to frame 2. - `prompt_2_to_3` is optional, describe transition from frame 2 to frame 3. - `prompt_3_to_4` is optional, describe transition from frame 3 to frame 4. - `prompt_4_to_5` is optional, describe transition from frame 4 to frame 5. - `prompt_5_to_6` is optional, describe transition from frame 5 to frame 6. - `prompt_6_to_7` is optional, describe transition from frame 6 to frame 7. - `audio` is optional (**2-frame mode only**, v5.5/v5.6 only). Set to `true` to enable integrated native audio generation. v5.5/v5.6 generates voice, lip sync, and background music together with the video. Not supported with v5 model. See [Model Capabilities](model-capabilities#v55v56-native-audio). Supported values: not specified (default), `false`, `true`. - `preview_mode` is optional. Set to `true` for fast preview generation (lower quality, faster results). Preview videos can later be upscaled via [POST videos/upscale](post-pixverse-videos-upscale). Supported values: `false` (default), `true`. - `auto_sound` is optional (**v5 model only**). Set to `true` to generate videos with sound. Supported values: not specified (default), `false`, `true`. - `sound_effect_prompt` is optional (**v5 model only**), describe the sound eg "epic adventure music". Maximum length 140 characters. - `lip_sync_tts_prompt` is optional (**v5 model only**), enter character lines. Maximum length 140 characters. - `lip_sync_tts_speaker_id` is optional (**v5 model only**), specify desired lipsync voice see [GET videos/voices](../api-pixverse-v2/get-pixverse-videos-voices). - `off_peak_mode` is optional. Set to `true` to generate videos during low-demand periods with up to 50% credit savings. Results are usually delivered within 24 hours. Off-Peak Mode generations are not tracked by the scheduler and are not counted towards the number of currently executed jobs. The replyUrl webhook will also be ignored. You must use [GET videos](../api-pixverse-v2/get-pixverse-videos) to retrieve the generated results. Supported values: `false` (default), `true`. - `replyUrl` is optional, place here your callback URL. API will call the provided `replyUrl` once PixVerse video completed or failed. We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality. Maximum length 1024 characters. - `replyRef` is optional, place here your reference id which will be stored and returned along with this PixVerse video response / result. Maximum length 1024 characters. - `maxJobs` is optional, if not specified value from selected [accounts/email](../api-pixverse-v2/get-pixverse-accounts-email) will be used. It should not exceed the number of concurrent generations supported by your account [subscription](https://app.pixverse.ai/subscribe) plan. Valid range: 1…8 ##### Responses {% tabs post_PixVerse_v2_videos_create-transition_response %} {% tab post_PixVerse_v2_videos_create-transition_response 200 %} 200 OK Use the returned `video_id` to retrieve video status and results using [GET videos](../api-pixverse-v2/get-pixverse-videos). Locate the video in the response array and check if the field `video_status_final` is `true` or `video_status_name` is `COMPLETED`. The field `url` will contain the generated video link. If you specify the optional parameter [`replyUrl`](#request-body), the API will call the provided `replyUrl` with video progress updates until the video is complete or fails. ```json { "video_id": "user:-pixverse:-video:" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-transition_response 400 %} 400 Bad Request ```json { "error": "" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-transition_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-transition_response 412 %} 412 Insufficient credits Insufficient credits. All Credits have been used up. Please upgrade your membership or purchase credits. ```json { "error": "All Credits have been used up. Please upgrade your membership or purchase credits." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-transition_response 422 %} 422 Unprocessable Content Moderated message. ```json { "error": "Your prompt has triggered our AI moderator, please re-enter your prompt" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-transition_response 429 %} 429 Too Many Requests Wait in a loop for **at least** 10..30 seconds and retry again. There are two possible cases for API response 429: 1. API query is full and can not accept new [videos/create-transition](#request-headers) requests. Size of query defined by [`maxJobs` optional parameter](#request-body). ```json { "error": "Account is busy executing tasks." "All configured accounts are running at maximum capacity." } ``` 2. The API received an HTTP response status 429 from PixVerse. Please refer to your [subscription](https://app.pixverse.ai/subscribe) plan for the maximum allowed tasks in the queue. ```json { "error": "Reached the limit for concurrent generations." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-transition_response 596 %} 596 Pending mod message Your PixVerse.ai account has a pending error. Most likely, you changed your account password or your PixVerse.ai account was placed on hold. Once the issue is resolved, update your account to clear the error by executing [POST accounts/email](../api-pixverse-v2/post-pixverse-accounts-email) before making any new API calls. ```json { "error": "Your PixVerse account has pending error." "Please address this issue at https://useapi.net/docs/api-pixverse-v2/post-pixverse-accounts-email before making any new API calls." } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional video_id: string error: string } ``` ##### Examples {% tabs post_PixVerse_v2_videos_create-transition_example %} {% tab post_PixVerse_v2_videos_create-transition_example Curl %} ``` bash curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X POST "https://api.useapi.net/v2/pixverse/videos/create-transition" \ -d '{"frame_1_path": "…", "frame_2_path": "…"}' ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-transition_example JavaScript %} ``` javascript const frame_1_path = "provide path of uploaded first image via POST /files"; const frame_2_path = "provide path of uploaded second image via POST /files"; const apiUrl = `https://api.useapi.net/v2/pixverse/videos/create-transition`; const token = "API token"; const data = { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }; data.body = JSON.stringify({ frame_1_path, frame_2_path }); const response = await fetch(apiUrl, data); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-transition_example Python %} ``` python import requests frame_1_path = "provide path of uploaded first image via POST /files" frame_2_path = "provide path of uploaded second image via POST /files" apiUrl = f"https://api.useapi.net/v2/pixverse/videos/create-transition" token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } body = { "frame_1_path": f"{frame_1_path}", "frame_2_path": f"{frame_2_path}" } response = requests.post(apiUrl, headers=headers, json=body) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-create-v4 === Document URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-create-v4 --- layout: default title: POST videos/create parent: PixVerse API v2 nav_order: 850 --- ## Create video or image {: .no_toc } March 24, 2025 (January 27, 2026) ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- This endpoint uses PixVerse models `v5.6`, `v5.5`, `v5`, and `v5-fast`. Default: `v5.6`. See [Model Capabilities](model-capabilities) for feature differences. As of September 2025, the only case when an image will be generated is when an image `template_id` is used (`template_type: 2`). We're planning to add separate images endpoints once PixVerse rolls out fully-fledged image generation. To upload prompt image use [POST files](../api-pixverse-v2/post-pixverse-files). {: .post } > **https://api.useapi.net/v2/pixverse/videos/create** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json # Alternatively you can use multipart/form-data # Content-Type: multipart/form-data ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Request Body ```json { "email": "Optional PixVerse API account email", "model": "v5.6", "prompt": "Required text prompt", "first_frame_path": "upload/eb20c63d-2a1a-5be6-a562-d3578a2831e3.png", "duration": 5, "quality": "540p", "aspect_ratio": "16:9", "audio": true, "seed": 654321, "replyUrl": "Place your call back URL here", "replyRef": "Place your reference id here", "maxJobs": 3 } ``` **Note:** When using `template_id` for effects, the model is determined by the template itself. Do not specify `model` parameter with templates. - `email` is optional, if not specified API will randomly select account from available [accounts](../api-pixverse-v2/get-pixverse-accounts). - `model` is optional. Supported values: `v5.6` (default), `v5.5`, `v5`, `v5-fast`. See [Model Capabilities](model-capabilities) for feature differences. - `prompt` is optional, describe your video. Maximum length 2048 characters. - `first_frame_path` is optional, provide the path of uploaded image via [POST files](../api-pixverse-v2/post-pixverse-files). - `last_frame_path` is optional, provide the path of the uploaded image via [POST files](../api-pixverse-v2/post-pixverse-files). Some effects require two images (e.g., "Forever Us"). Check the template field `effect_type` for the number of required images, and if it is set to `2` you will need to provide a `last_frame_path` image. - `template_id` is optional, provide template_id of desired effect, see [GET videos/effects](../api-pixverse-v2/get-pixverse-videos-effects). - `duration` is optional. Video duration in seconds. Supported values: `1` through `10`. Default: `5`. Note: 1080p quality is limited to 8 seconds maximum. - `quality` is optional. Video quality. Supported values: `1080p`, `720p`, `540p` (default), `360p` (Turbo). - `aspect_ratio` is optional. Supported values: `16:9` (default), `9:16`, `1:1`, `4:3`, `3:4` - `auto_sound` is optional. Set to `true` to generate videos with sound or `false` to explicitly remove the default effect sound. Supported values: not specified (default), `false`, `true`. - `sound_effect_prompt` is optional, describe the sound eg "the sound of waves hitting the shore". - `lip_sync_tts_prompt` is optional, enter character lines. Maximum length 140 characters. - `lip_sync_tts_speaker_id` is optional, specify desired lipsync voice see [GET videos/voices](../api-pixverse-v2/get-pixverse-videos-voices). - `audio` is optional. **v5.5 and v5.6 only.** Set to `true` to enable integrated audio generation (voice, lip sync, and background music generated together with the video). This replaces the separate `lip_sync_tts_prompt` and `sound_effect_prompt` parameters used in v5 model. Supported values: `false` (default), `true`. - `preview_mode` is optional. Set to `true` to generate a fast preview at lower quality. Use [POST videos/upscale](post-pixverse-videos-upscale) to upscale the preview to full quality. Supported values: `false` (default), `true`. - `seed` is optional. Valid range 1…2147483647. - `off_peak_mode` is optional. Set to `true` to generate videos during low-demand periods with up to 50% credit savings. Results are usually delivered within 24 hours. Off-Peak Mode generations are not tracked by the scheduler and are not counted towards the number of currently executed jobs. The replyUrl webhook will also be ignored. You must use [GET videos](../api-pixverse-v2/get-pixverse-videos) to retrieve the generated results. Supported values: `false` (default), `true`. - `replyUrl` is optional, place here your callback URL. API will call the provided `replyUrl` once PixVerse video completed or failed. We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality. Maximum length 1024 characters. - `replyRef` is optional, place here your reference id which will be stored and returned along with this PixVerse video response / result. Maximum length 1024 characters. - `maxJobs` is optional, if not specified value from selected [accounts/email](../api-pixverse-v2/get-pixverse-accounts-email) will be used. It should not exceed the number of concurrent generations supported by your account [subscription](https://app.pixverse.ai/subscribe) plan. Valid range: 1…8 ##### Responses {% tabs post_PixVerse_v2_videos_create-v4_response %} {% tab post_PixVerse_v2_videos_create-v4_response 200 %} 200 OK Use the returned `video_id` or `image_id` to retrieve video status and results using [GET videos](../api-pixverse-v2/get-pixverse-videos). Locate the video in the response array and check if the field `video_status_final` is `true` or `video_status_name` is `COMPLETED`. The field `url` will contain the generated video link. If you specify the optional parameter [`replyUrl`](#request-body), the API will call the provided `replyUrl` with video progress updates until the video is complete or fails. ```json { "video_id": "user:-pixverse:-video:" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-v4_response 400 %} 400 Bad Request ```json { "error": "" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-v4_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-v4_response 412 %} 412 Insufficient credits Insufficient credits. All Credits have been used up. Please upgrade your membership or purchase credits. ```json { "error": "All Credits have been used up. Please upgrade your membership or purchase credits." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-v4_response 422 %} 422 Unprocessable Content Moderated message. ```json { "error": "Your prompt has triggered our AI moderator, please re-enter your prompt" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-v4_response 429 %} 429 Too Many Requests Wait in a loop for **at least** 10..30 seconds and retry again. There are two possible cases for API response 429: 1. API query is full and can not accept new [videos/create](#request-headers) requests. Size of query defined by [`maxJobs` optional parameter](#request-body). ```json { "error": "Account is busy executing tasks." "All configured accounts are running at maximum capacity." } ``` 2. The API received an HTTP response status 429 from PixVerse. Please refer to your [subscription](https://app.pixverse.ai/subscribe) plan for the maximum allowed tasks in the queue. ```json { "error": "Reached the limit for concurrent generations." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-v4_response 596 %} 596 Pending mod message Your PixVerse.ai account has a pending error. Most likely, you changed your account password or your PixVerse.ai account was placed on hold. Once the issue is resolved, update your account to clear the error by executing [POST accounts/email](../api-pixverse-v2/post-pixverse-accounts-email) before making any new API calls. ```json { "error": "Your PixVerse account has pending error." "Please address this issue at https://useapi.net/docs/api-pixverse-v2/post-pixverse-accounts-email before making any new API calls." } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional video_id: string image_id: string // When image template_id is used (template_type: 2) error: string } ``` ##### Examples {% tabs post_PixVerse_v2_videos_create-v4_example %} {% tab post_PixVerse_v2_videos_create-v4_example Curl %} ``` bash curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X POST "https://api.useapi.net/v2/pixverse/videos/create" \ -d '{"prompt": "…"}' ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-v4_example JavaScript %} ``` javascript const prompt = "text prompt"; const apiUrl = `https://api.useapi.net/v2/pixverse/videos/create`; const token = "API token"; const data = { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }; data.body = JSON.stringify({ prompt }); const response = await fetch(apiUrl, data); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab post_PixVerse_v2_videos_create-v4_example Python %} ``` python import requests prompt = "text prompt" apiUrl = f"https://api.useapi.net/v2/pixverse/videos/create" token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } body = { "prompt": f"{prompt}" } response = requests.post(apiUrl, headers=headers, json=body) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-extend-v4 === Document URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-extend-v4 --- layout: default title: POST videos/extend parent: PixVerse API v2 nav_order: 870 --- ## Extend video {: .no_toc } March 31, 2025 (January 27, 2026) ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- This endpoint uses PixVerse models `v5.5` and `v5`. Default: `v5.5`. * Extend a video generated by PixVerse, retrieve the `video_id` of the desired video using [GET /videos](../api-pixverse-v2/get-pixverse-videos). * Upload the video using [POST /files](../api-pixverse-v2/post-pixverse-files) and use `path` to specify the video you want to extend. {: .post } > **https://api.useapi.net/v2/pixverse/videos/extend** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json # Alternatively you can use multipart/form-data # Content-Type: multipart/form-data ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Request Body ```json { "email": "Optional PixVerse API account email", "prompt": "Optional text prompt", "video_id": "Optional video_id", "duration": 5, "quality": "540p", "seed": 654321, "replyUrl": "Place your call back URL here", "replyRef": "Place your reference id here", "maxJobs": 3 } ``` - `email` is optional, if not specified API will randomly select account from available [accounts](../api-pixverse-v2/get-pixverse-accounts). - `model` is optional. Supported values: `v5.5` and `v5`. Default: `v5.5`. - `prompt` is optional, describe your video. Maximum length 2048 characters. - `video_id` is optional, retrieve the `video_id` of the desired video using [GET /videos](../api-pixverse-v2/get-pixverse-videos). - `video_path` is optional, upload the video using [POST /files](../api-pixverse-v2/post-pixverse-files) and use `path` to specify the video you want to extend. - `duration` is optional. Extend duration in seconds. Supported values: `1` through `10`. Default: `5`. Note: 1080p quality is limited to 8 seconds maximum. - `quality` is optional. Video quality. Supported values: `1080p`, `720p`, `540p` (default), `360p`. - `seed` is optional. Valid range 1…2147483647. - `off_peak_mode` is optional. Set to `true` to generate videos during low-demand periods with up to 50% credit savings. Results are usually delivered within 24 hours. Off-Peak Mode generations are not tracked by the scheduler and are not counted towards the number of currently executed jobs. The replyUrl webhook will also be ignored. You must use [GET videos](../api-pixverse-v2/get-pixverse-videos) to retrieve the generated results. Supported values: `false` (default), `true`. - `replyUrl` is optional. Callback URL for job completion notifications. API will call the provided `replyUrl` once PixVerse video completed or failed. Maximum length 1024 characters. We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality. - `replyRef` is optional, place here your reference id which will be stored and returned along with this PixVerse video response / result. Maximum length 1024 characters. - `maxJobs` is optional, if not specified value from selected [accounts/email](../api-pixverse-v2/get-pixverse-accounts-email) will be used. Valid range: 1…8 It should not exceed the number of concurrent generations supported by your account [subscription](https://app.pixverse.ai/subscribe) plan. ##### Responses {% tabs post_PixVerse_v2_videos_extend-v4_response %} {% tab post_PixVerse_v2_videos_extend-v4_response 200 %} 200 OK Use the returned `video_id` to retrieve video status and results using [GET /videos](../api-pixverse-v2/get-pixverse-videos). Locate the video in the response array and check if the field `video_status_final` is `true` or `video_status_name` is `COMPLETED`. The field `url` will contain the generated video link. If you specify the optional parameter [`replyUrl`](#request-body), the API will call the provided `replyUrl` with video progress updates until the video is complete or fails. ```json { "video_id": "user:-pixverse:-video:" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_extend-v4_response 400 %} 400 Bad Request ```json { "error": "" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_extend-v4_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_extend-v4_response 412 %} 412 Insufficient credits Insufficient credits. All Credits have been used up. Please upgrade your membership or purchase credits. ```json { "error": "All Credits have been used up. Please upgrade your membership or purchase credits." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_extend-v4_response 422 %} 422 Unprocessable Content Moderated message. ```json { "error": "Your prompt has triggered our AI moderator, please re-enter your prompt" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_extend-v4_response 429 %} 429 Too Many Requests Wait in a loop for **at least** 10..30 seconds and retry again. There are two possible cases for API response 429: 1. API query is full and can not accept new [videos/extend](#request-headers) requests. Size of query defined by [`maxJobs` optional parameter](#request-body). ```json { "error": "Account is busy executing tasks." "All configured accounts are running at maximum capacity." } ``` 2. The API received an HTTP response status 429 from PixVerse. Please refer to your [subscription](https://app.pixverse.ai/subscribe) plan for the maximum allowed tasks in the queue. ```json { "error": "Reached the limit for concurrent generations." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_extend-v4_response 596 %} 596 Pending mod message Your PixVerse.ai account has a pending error. Most likely, you changed your account password or your PixVerse.ai account was placed on hold. Once the issue is resolved, update your account to clear the error by executing [POST accounts/email](../api-pixverse-v2/post-pixverse-accounts-email) before making any new API calls. ```json { "error": "Your PixVerse account has pending error." "Please address this issue at https://useapi.net/docs/api-pixverse-v2/post-pixverse-accounts-email before making any new API calls." } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional video_id: string error: string } ``` ##### Examples {% tabs post_PixVerse_v2_videos_extend-v4_example %} {% tab post_PixVerse_v2_videos_extend-v4_example Curl %} ``` bash curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X POST "https://api.useapi.net/v2/pixverse/videos/extend" \ -d '{"prompt": "…", "video_id": "…"}' ``` {% endtab %} {% tab post_PixVerse_v2_videos_extend-v4_example JavaScript %} ``` javascript const prompt = "text prompt"; const video_id = "video_id"; const apiUrl = `https://api.useapi.net/v2/pixverse/videos/extend`; const token = "API token"; const data = { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }; data.body = JSON.stringify({ prompt, video_id }); const response = await fetch(apiUrl, data); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab post_PixVerse_v2_videos_extend-v4_example Python %} ``` python import requests prompt = "text prompt" video_id = "video_id" apiUrl = f"https://api.useapi.net/v2/pixverse/videos/extend" token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } body = { "prompt": f"{prompt}", "video_id": f"{video_id}" } response = requests.post(apiUrl, headers=headers, json=body) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-lipsync === Document URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-lipsync --- layout: default title: POST videos/lipsync parent: PixVerse API v2 nav_order: 1100 --- ## Lip sync video {: .no_toc } December 6, 2024 (January 27, 2026) ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- * This endpoint uses PixVerse model `v5` only. See [Model Capabilities](model-capabilities) for details. * Lip sync a video generated by PixVerse, retrieve the `video_id` of the desired video using [GET /videos](../api-pixverse-v2/get-pixverse-videos). * Upload the video using [POST /files](../api-pixverse-v2/post-pixverse-files) and use `path` to specify the video you want to lip sync. * Upload the audio track using [POST /files](../api-pixverse-v2/post-pixverse-files) and use `path` to specify the audio you want to use for lip sync. {: .post } > **https://api.useapi.net/v2/pixverse/videos/lipsync** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json # Alternatively you can use multipart/form-data # Content-Type: multipart/form-data ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Request Body ```json { "video_id": "Optional video_id", "audio_path": "Optional audio track path", "prompt": "Optional text prompt", "speaker_id": 12345, "replyUrl": "Place your call back URL here", "replyRef": "Place your reference id here", "maxJobs": 3 } ``` - `email` is optional, if not specified API will use account specified by `video_id` (if provided), otherwise randomly select account from available [accounts](../api-pixverse-v2/get-pixverse-accounts). - `video_id` is optional, retrieve the `video_id` of the desired video using [GET /videos](../api-pixverse-v2/get-pixverse-videos). - `video_path` is optional, upload the video using [POST /files](../api-pixverse-v2/post-pixverse-files) and use `path` to specify the video you want to lip sync. - `audio_path` is optional, upload the audio track using [POST /files](../api-pixverse-v2/post-pixverse-files) and use `path` to specify the audio you want to use for lip sync. Maximum length of the audio track should not exceed 60 seconds. Generation will fail if you attempt to provide a sound clip longer than that. - `prompt` is optional, provide text you want to use for lip sync. Maximum length 200 characters. - `speaker_id` is optional, to retrieve `speaker_id` see [GET /videos/voices](../api-pixverse-v2/get-pixverse-videos-voices). - `original_sound_switch` is optional, set to `true` if you want to keep the original soundtrack of the video and extend it with the provided sound clip or generated audio. - `off_peak_mode` is optional. Set to `true` to generate videos during low-demand periods with up to 50% credit savings. Results are usually delivered within 24 hours. Off-Peak Mode generations are not tracked by the scheduler and are not counted towards the number of currently executed jobs. The replyUrl webhook will also be ignored. You must use [GET videos](../api-pixverse-v2/get-pixverse-videos) to retrieve the generated results. Supported values: `false` (default), `true`. - `replyUrl` is optional. Callback URL for job completion notifications. API will call the provided `replyUrl` once PixVerse video completed or failed. Maximum length 1024 characters. We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality. - `replyRef` is optional, place here your reference id which will be stored and returned along with this PixVerse video response / result. Maximum length 1024 characters. - `maxJobs` is optional, if not specified value from selected [accounts/email](../api-pixverse-v2/get-pixverse-accounts-email) will be used. Valid range: 1…8 It should not exceed the number of concurrent generations supported by your account [subscription](https://app.pixverse.ai/subscribe) plan. ##### Responses {% tabs post_PixVerse_v2_videos_lipsync_response %} {% tab post_PixVerse_v2_videos_lipsync_response 200 %} 200 OK Use the returned `video_id` to retrieve video status and results using [GET /videos](../api-pixverse-v2/get-pixverse-videos). Locate the video in the response array and check if the field `video_status_final` is `true` or `video_status_name` is `COMPLETED`. The field `url` will contain the generated video link. If you specify the optional parameter [`replyUrl`](#request-body), the API will call the provided `replyUrl` with video progress updates until the video is complete or fails. ```json { "video_id": "user:-pixverse:-video:" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_lipsync_response 400 %} 400 Bad Request ```json { "error": "" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_lipsync_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_lipsync_response 412 %} 412 Insufficient credits Insufficient credits. All Credits have been used up. Please upgrade your membership or purchase credits. ```json { "error": "All Credits have been used up. Please upgrade your membership or purchase credits." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_lipsync_response 422 %} 422 Unprocessable Content Moderated message. ```json { "error": "Your prompt has triggered our AI moderator, please re-enter your prompt" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_lipsync_response 429 %} 429 Too Many Requests Wait in a loop for **at least** 10..30 seconds and retry again. There are two possible cases for API response 429: 1. API query is full and can not accept new [videos/lipsync](#request-headers) requests. Size of query defined by [`maxJobs` optional parameter](#request-body). ```json { "error": "Account is busy executing tasks." "All configured accounts are running at maximum capacity." } ``` 2. The API received an HTTP response status 429 from PixVerse. Please refer to your [subscription](https://app.pixverse.ai/subscribe) plan for the maximum allowed tasks in the queue. ```json { "error": "Reached the limit for concurrent generations." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_lipsync_response 596 %} 596 Pending mod message Your PixVerse.ai account has a pending error. Most likely, you changed your account password or your PixVerse.ai account was placed on hold. Once the issue is resolved, update your account to clear the error by executing [POST accounts/email](../api-pixverse-v2/post-pixverse-accounts-email) before making any new API calls. ```json { "error": "Your PixVerse account has pending error." "Please address this issue at https://useapi.net/docs/api-pixverse-v2/post-pixverse-accounts-email before making any new API calls." } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional video_id: string error: string } ``` ##### Examples {% tabs post_PixVerse_v2_videos_lipsync_example %} {% tab post_PixVerse_v2_videos_lipsync_example Curl %} ``` bash curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X POST "https://api.useapi.net/v2/pixverse/videos/lipsync" \ -d '{"audio_path": "…", "video_id": "…"}' ``` {% endtab %} {% tab post_PixVerse_v2_videos_lipsync_example JavaScript %} ``` javascript const audio_path = "audio_path"; const video_id = "video_id"; const apiUrl = `https://api.useapi.net/v2/pixverse/videos/lipsync`; const token = "API token"; const data = { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }; data.body = JSON.stringify({ audio_path, video_id }); const response = await fetch(apiUrl, data); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab post_PixVerse_v2_videos_lipsync_example Python %} ``` python import requests audio_path = "audio_path" video_id = "video_id" apiUrl = f"https://api.useapi.net/v2/pixverse/videos/lipsync" token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } body = { "audio_path": f"{audio_path}", "video_id": f"{video_id}" } response = requests.post(apiUrl, headers=headers, json=body) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-modify === Document URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-modify --- layout: default title: POST videos/modify parent: PixVerse API v2 nav_order: 875 --- ## Modify video {: .no_toc } January 26, 2026 ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- This endpoint uses PixVerse model `v5.5`. Modify video content based on your prompt. * Modify a video generated by PixVerse, retrieve the `video_id` of the desired video using [GET /videos](../api-pixverse-v2/get-pixverse-videos). * Upload the video using [POST /files](../api-pixverse-v2/post-pixverse-files) and use `path` to specify the video you want to modify. {: .post } > **https://api.useapi.net/v2/pixverse/videos/modify** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json # Alternatively you can use multipart/form-data # Content-Type: multipart/form-data ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Request Body ```json { "email": "Optional PixVerse API account email", "prompt": "Required modification prompt", "video_id": "Optional video_id", "quality": "540p", "seed": 654321, "replyUrl": "Place your call back URL here", "replyRef": "Place your reference id here", "maxJobs": 3 } ``` - `email` is optional, if not specified API will randomly select account from available [accounts](../api-pixverse-v2/get-pixverse-accounts). - `model` is optional. Supported values: `v5.5` (default). - `prompt` is **required**, describe the modification you want to apply. Maximum length 2048 characters. - `video_id` is optional, retrieve the `video_id` of the desired video using [GET /videos](../api-pixverse-v2/get-pixverse-videos). - `video_path` is optional, upload the video using [POST /files](../api-pixverse-v2/post-pixverse-files) and use `path` to specify the video you want to modify. - `quality` is optional. Video quality. Supported values: `720p`, `540p` (default), `360p`. - `seed` is optional. Valid range 1…2147483647. - `off_peak_mode` is optional. Set to `true` to generate videos during low-demand periods with up to 50% credit savings. Results are usually delivered within 24 hours. Off-Peak Mode generations are not tracked by the scheduler and are not counted towards the number of currently executed jobs. The replyUrl webhook will also be ignored. You must use [GET videos](../api-pixverse-v2/get-pixverse-videos) to retrieve the generated results. Supported values: `false` (default), `true`. - `replyUrl` is optional. Callback URL for job completion notifications. API will call the provided `replyUrl` once PixVerse video completed or failed. Maximum length 1024 characters. We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality. - `replyRef` is optional, place here your reference id which will be stored and returned along with this PixVerse video response / result. Maximum length 1024 characters. - `maxJobs` is optional, if not specified value from selected [accounts/email](../api-pixverse-v2/get-pixverse-accounts-email) will be used. Valid range: 1…8 It should not exceed the number of concurrent generations supported by your account [subscription](https://app.pixverse.ai/subscribe) plan. ##### Responses {% tabs post_PixVerse_v2_videos_modify_response %} {% tab post_PixVerse_v2_videos_modify_response 200 %} 200 OK Use the returned `video_id` to retrieve video status and results using [GET /videos](../api-pixverse-v2/get-pixverse-videos). Locate the video in the response array and check if the field `video_status_final` is `true` or `video_status_name` is `COMPLETED`. The field `url` will contain the generated video link. If you specify the optional parameter [`replyUrl`](#request-body), the API will call the provided `replyUrl` with video progress updates until the video is complete or fails. ```json { "video_id": "user:-pixverse:-video:" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_modify_response 400 %} 400 Bad Request ```json { "error": "" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_modify_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_modify_response 412 %} 412 Insufficient credits Insufficient credits. All Credits have been used up. Please upgrade your membership or purchase credits. ```json { "error": "All Credits have been used up. Please upgrade your membership or purchase credits." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_modify_response 422 %} 422 Unprocessable Content Moderated message or no masks detected. ```json { "error": "Your prompt has triggered our AI moderator, please re-enter your prompt" } ``` ```json { "error": "No masks detected in video frame" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_modify_response 429 %} 429 Too Many Requests Wait in a loop for **at least** 10..30 seconds and retry again. There are two possible cases for API response 429: 1. API query is full and can not accept new [videos/modify](#request-headers) requests. Size of query defined by [`maxJobs` optional parameter](#request-body). ```json { "error": "Account is busy executing tasks." "All configured accounts are running at maximum capacity." } ``` 2. The API received an HTTP response status 429 from PixVerse. Please refer to your [subscription](https://app.pixverse.ai/subscribe) plan for the maximum allowed tasks in the queue. ```json { "error": "Reached the limit for concurrent generations." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_modify_response 596 %} 596 Pending mod message Your PixVerse.ai account has a pending error. Most likely, you changed your account password or your PixVerse.ai account was placed on hold. Once the issue is resolved, update your account to clear the error by executing [POST accounts/email](../api-pixverse-v2/post-pixverse-accounts-email) before making any new API calls. ```json { "error": "Your PixVerse account has pending error." "Please address this issue at https://useapi.net/docs/api-pixverse-v2/post-pixverse-accounts-email before making any new API calls." } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional video_id: string error: string } ``` ##### Examples {% tabs post_PixVerse_v2_videos_modify_example %} {% tab post_PixVerse_v2_videos_modify_example Curl %} ``` bash curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X POST "https://api.useapi.net/v2/pixverse/videos/modify" \ -d '{"prompt": "change the outfit to red dress", "video_id": "…"}' ``` {% endtab %} {% tab post_PixVerse_v2_videos_modify_example JavaScript %} ``` javascript const prompt = "change the outfit to red dress"; const video_id = "video_id"; const apiUrl = `https://api.useapi.net/v2/pixverse/videos/modify`; const token = "API token"; const data = { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }; data.body = JSON.stringify({ prompt, video_id }); const response = await fetch(apiUrl, data); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab post_PixVerse_v2_videos_modify_example Python %} ``` python import requests prompt = "change the outfit to red dress" video_id = "video_id" apiUrl = f"https://api.useapi.net/v2/pixverse/videos/modify" token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } body = { "prompt": f"{prompt}", "video_id": f"{video_id}" } response = requests.post(apiUrl, headers=headers, json=body) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-restyle-v4 === Document URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-restyle-v4 --- layout: default title: POST videos/restyle nav_exclude: true --- ## Restyle video {: .no_toc } March 31, 2025 (January 27, 2026) PixVerse website no longer supports Restyle. This endpoint no loner available. ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- > [v5 release endpoint changes](../changelog#august-29-2025) This endpoint uses PixVerse model `v5`. * Restyle a video generated by PixVerse, retrieve the `video_id` of the desired video using [GET /videos](../api-pixverse-v2/get-pixverse-videos). * Upload the video using [POST /files](../api-pixverse-v2/post-pixverse-files) and use `path` to specify the video you want to restyle. {: .post } > **https://api.useapi.net/v2/pixverse/videos/restyle** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json # Alternatively you can use multipart/form-data # Content-Type: multipart/form-data ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Request Body ```json { "email": "Optional PixVerse API account email", "prompt": "Required text prompt", "video_id": "Optional video_id", "seed": 654321, "replyUrl": "Place your call back URL here", "replyRef": "Place your reference id here", "maxJobs": 3 } ``` - `email` is optional, if not specified API will randomly select account from available [accounts](../api-pixverse-v2/get-pixverse-accounts). - `model` is optional. Supported values: `v5` (default). - `prompt` is optional, describe the desired style for your video. Maximum length 2048 characters. - `video_id` is optional, retrieve the `video_id` of the desired video using [GET /videos](../api-pixverse-v2/get-pixverse-videos). - `video_path` is optional, upload the video using [POST /files](../api-pixverse-v2/post-pixverse-files) and use `path` to specify the video you want to restyle. - `restyle_id` is optional, retrieve supported styles using [GET videos/restyles](../api-pixverse-v2/get-pixverse-videos-restyles). - `seed` is optional. Valid range 1…2147483647. - `off_peak_mode` is optional. Set to `true` to generate videos during low-demand periods with up to 50% credit savings. Results are usually delivered within 24 hours. Off-Peak Mode generations are not tracked by the scheduler and are not counted towards the number of currently executed jobs. The replyUrl webhook will also be ignored. You must use [GET videos](../api-pixverse-v2/get-pixverse-videos) to retrieve the generated results. Supported values: `false` (default), `true`. - `replyUrl` is optional. Callback URL for job completion notifications. API will call the provided `replyUrl` once PixVerse video completed or failed. Maximum length 1024 characters. We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality. - `replyRef` is optional, place here your reference id which will be stored and returned along with this PixVerse video response / result. Maximum length 1024 characters. - `maxJobs` is optional, if not specified value from selected [accounts/email](../api-pixverse-v2/get-pixverse-accounts-email) will be used. Valid range: 1…8 It should not exceed the number of concurrent generations supported by your account [subscription](https://app.pixverse.ai/subscribe) plan. ##### Responses {% tabs post_PixVerse_v2_videos_restyle-v4_response %} {% tab post_PixVerse_v2_videos_restyle-v4_response 200 %} 200 OK Use the returned `video_id` to retrieve video status and results using [GET /videos](../api-pixverse-v2/get-pixverse-videos). Locate the video in the response array and check if the field `video_status_final` is `true` or `video_status_name` is `COMPLETED`. The field `url` will contain the generated video link. If you specify the optional parameter [`replyUrl`](#request-body), the API will call the provided `replyUrl` with video progress updates until the video is complete or fails. ```json { "video_id": "user:-pixverse:-video:" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_restyle-v4_response 400 %} 400 Bad Request ```json { "error": "" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_restyle-v4_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_restyle-v4_response 412 %} 412 Insufficient credits Insufficient credits. All Credits have been used up. Please upgrade your membership or purchase credits. ```json { "error": "All Credits have been used up. Please upgrade your membership or purchase credits." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_restyle-v4_response 422 %} 422 Unprocessable Content Moderated message. ```json { "error": "Your prompt has triggered our AI moderator, please re-enter your prompt" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_restyle-v4_response 429 %} 429 Too Many Requests Wait in a loop for **at least** 10..30 seconds and retry again. There are two possible cases for API response 429: 1. API query is full and can not accept new [videos/restyle](#request-headers) requests. Size of query defined by [`maxJobs` optional parameter](#request-body). ```json { "error": "Account is busy executing tasks." "All configured accounts are running at maximum capacity." } ``` 2. The API received an HTTP response status 429 from PixVerse. Please refer to your [subscription](https://app.pixverse.ai/subscribe) plan for the maximum allowed tasks in the queue. ```json { "error": "Reached the limit for concurrent generations." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_restyle-v4_response 596 %} 596 Pending mod message Your PixVerse.ai account has a pending error. Most likely, you changed your account password or your PixVerse.ai account was placed on hold. Once the issue is resolved, update your account to clear the error by executing [POST accounts/email](../api-pixverse-v2/post-pixverse-accounts-email) before making any new API calls. ```json { "error": "Your PixVerse account has pending error." "Please address this issue at https://useapi.net/docs/api-pixverse-v2/post-pixverse-accounts-email before making any new API calls." } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional video_id: string error: string } ``` ##### Examples {% tabs post_PixVerse_v2_videos_restyle-v4_example %} {% tab post_PixVerse_v2_videos_restyle-v4_example Curl %} ``` bash curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X POST "https://api.useapi.net/v2/pixverse/videos/restyle" \ -d '{"prompt": "…", "video_id": "…"}' ``` {% endtab %} {% tab post_PixVerse_v2_videos_restyle-v4_example JavaScript %} ``` javascript const prompt = "text prompt"; const video_id = "video_id"; const apiUrl = `https://api.useapi.net/v2/pixverse/videos/restyle`; const token = "API token"; const data = { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }; data.body = JSON.stringify({ prompt, video_id }); const response = await fetch(apiUrl, data); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab post_PixVerse_v2_videos_restyle-v4_example Python %} ``` python import requests prompt = "text prompt" video_id = "video_id" apiUrl = f"https://api.useapi.net/v2/pixverse/videos/restyle" token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } body = { "prompt": f"{prompt}", "video_id": f"{video_id}" } response = requests.post(apiUrl, headers=headers, json=body) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-upscale === Document URL: https://useapi.net/docs/api-pixverse-v2/post-pixverse-videos-upscale --- layout: default title: POST videos/upscale parent: PixVerse API v2 nav_order: 1200 --- ## Upscale to 4K {: .no_toc } December 6, 2024 ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- {: .post } > **https://api.useapi.net/v2/pixverse/videos/upscale** ##### Request Headers ``` yaml Authorization: Bearer {API token} Content-Type: application/json # Alternatively you can use multipart/form-data # Content-Type: multipart/form-data ``` - `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details. ##### Request Body ```json { "video_id": "Required video_id", "replyUrl": "Place your call back URL here", "replyRef": "Place your reference id here", "maxJobs": 3 } ``` - `video_id` is **required**, retrieve the `video_id` of the desired video using [GET /videos](../api-pixverse-v2/get-pixverse-videos). - `replyUrl` is optional. Callback URL for job completion notifications. API will call the provided `replyUrl` once PixVerse video completed or failed. Maximum length 1024 characters. We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality. - `replyRef` is optional, place here your reference id which will be stored and returned along with this PixVerse video response / result. Maximum length 1024 characters. - `maxJobs` is optional, if not specified value from selected [accounts/email](../api-pixverse-v2/get-pixverse-accounts-email) will be used. Valid range: 1…8 It should not exceed the number of concurrent generations supported by your account [subscription](https://app.pixverse.ai/subscribe) plan. ##### Responses {% tabs post_PixVerse_v2_videos_upscale_response %} {% tab post_PixVerse_v2_videos_upscale_response 200 %} 200 OK Use the returned `video_id` to retrieve video status and results using [GET /videos](../api-pixverse-v2/get-pixverse-videos). Locate the video in the response array and check if the field `video_status_final` is `true` or `video_status_name` is `COMPLETED`. The field `url` will contain the generated video link. If you specify the optional parameter [`replyUrl`](#request-body), the API will call the provided `replyUrl` with video progress updates until the video is complete or fails. ```json { "video_id": "user:-pixverse:-video:" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_upscale_response 400 %} 400 Bad Request ```json { "error": "" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_upscale_response 401 %} 401 Unauthorized ```json { "error": "Unauthorized" } ``` {% endtab %} {% tab post_PixVerse_v2_videos_upscale_response 412 %} 412 Insufficient credits Insufficient credits. All Credits have been used up. Please upgrade your membership or purchase credits. ```json { "error": "All Credits have been used up. Please upgrade your membership or purchase credits." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_upscale_response 429 %} 429 Too Many Requests Wait in a loop for **at least** 10..30 seconds and retry again. There are two possible cases for API response 429: 1. API query is full and can not accept new [videos/upscale](#request-headers) requests. Size of query defined by [`maxJobs` optional parameter](#request-body). ```json { "error": "Account is busy executing tasks." "All configured accounts are running at maximum capacity." } ``` 2. The API received an HTTP response status 429 from PixVerse. Please refer to your [subscription](https://app.pixverse.ai/subscribe) plan for the maximum allowed tasks in the queue. ```json { "error": "Reached the limit for concurrent generations." } ``` {% endtab %} {% tab post_PixVerse_v2_videos_upscale_response 596 %} 596 Pending mod message Your PixVerse.ai account has a pending error. Most likely, you changed your account password or your PixVerse.ai account was placed on hold. Once the issue is resolved, update your account to clear the error by executing [POST accounts/email](../api-pixverse-v2/post-pixverse-accounts-email) before making any new API calls. ```json { "error": "Your PixVerse account has pending error." "Please address this issue at https://useapi.net/docs/api-pixverse-v2/post-pixverse-accounts-email before making any new API calls." } ``` {% endtab %} {% endtabs %} ##### Model ```typescript { // TypeScript, all fields are optional video_id: string error: string } ``` ##### Examples {% tabs post_PixVerse_v2_videos_upscale_example %} {% tab post_PixVerse_v2_videos_upscale_example Curl %} ``` bash curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X POST "https://api.useapi.net/v2/pixverse/videos/upscale" \ -d '{"video_id": "…"}' ``` {% endtab %} {% tab post_PixVerse_v2_videos_upscale_example JavaScript %} ``` javascript const video_id = "video_id"; const apiUrl = `https://api.useapi.net/v2/pixverse/videos/upscale`; const token = "API token"; const data = { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }; data.body = JSON.stringify({ video_id }); const response = await fetch(apiUrl, data); const result = await response.json(); console.log("response", {response, result}); ``` {% endtab %} {% tab post_PixVerse_v2_videos_upscale_example Python %} ``` python import requests video_id = "video_id" apiUrl = f"https://api.useapi.net/v2/pixverse/videos/upscale" token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } body = { "video_id": f"{video_id}" } response = requests.post(apiUrl, headers=headers, json=body) print(response, response.json()) ``` {% endtab %} {% endtabs %} === URL: https://useapi.net/docs/questions-and-answers === Document URL: https://useapi.net/docs/questions-and-answers --- title: Q&A nav_order: 110000 layout: home --- # Questions and Answers {: .no_toc } 4 min read • September 2023 (January 14, 2026) ## Table of contents {: .no_toc .text-delta } 1. TOC {:toc} --- ### How to avoid Midjourney bans? Using automation is against Discord and Midjourney's Terms of Service, so you need to plan accordingly and have backup account(s) ready. * The best practice is to create several new Discord accounts and join the Midjourney Discord server. These accounts should be used exclusively for API work and nothing else. We strongly recommend using a VPN to prevent your personal data/IP addresses from being leaked. You can use the [Opera](https://www.opera.com/download) browser with built-in VPN or the [Brave](https://brave.com/download) browser with [Tor support](https://support.brave.com/hc/en-us/articles/360018121491-What-is-a-Private-Window-with-Tor-Connectivity). * Brand new/fresh Discord accounts have a significantly higher chance of being banned when running high Midjourney generation loads. Consider purchasing aged Discord accounts (2-3 years old) from marketplaces like [z2u.com](https://www.z2u.com/) for around $1-3 each. Aged accounts appear more legitimate and are less likely to trigger automated bans. * When creating accounts in bulk, make sure to restart Opera/Brave so that your IP is different every time, since Discord tracks and records the IP addresses used to create new accounts. Make sure to log in to the Discord accounts designated for API use through a VPN. When creating new email and Discord accounts, use names closely resembling real names - something that does not look suspicious. * Once a Discord account is created, join the Midjourney Discord [server](https://discord.com/invite/midjourney) and follow the [instructions](https://useapi.net/docs/start-here/setup-midjourney) to create your own server and invite the Midjourney bot. If you're planning to use this account, you can proceed with a Midjourney subscription. It's a good idea to create several Discord accounts with the Midjourney setup, as described above early on, this will *"age"* them and make them less suspicious later on when you need to subscribe to Midjourney. * When paying for a Midjourney subscription use a virtual credit card number (provided by most major credit card companies) or services like [Privacy.com](https://privacy.com). Make sure to use a credit card name and address that resemble an actual address and name. Use a *different name and address* for every new Midjourney subscription. Midjourney has access to all payment details and will cross-check banned accounts' payment information to ban newly created accounts if a match is found. * If your account gets banned, file a charge dispute with your credit card company. Since Midjourney cannot produce any evidence of you violating the ToS, the bank will fully refund your payment. Our customers have reported a 100% success rate of getting their money back, though it may take some time. * When using the API, try to simulate real users. Avoid running generations 24/7 by establishing quiet hours (for example, you can use two or three accounts and rotate them every 12/8 hours). Midjourney seems to specifically target accounts with a large number of `--relax` usage, so try to limit those generations to a reasonable number (<300 generations/day). If you heavily rely on `--relax`, execute at least one fast generation for every NN relax generations. * Do not post public links to Discord/Midjourney CDN attachments, they contain your Discord account number and can be used to trace back to your account. * Sharing cross-account `--p` codes is not safe. You risk all accounts using the same `--p` codes being banned by Midjourney. * Do not run multiple requests with the same or similar prompts (e.g., "My test prompt 1", "My test prompt 2", and so on). Midjourney analyzes prompts and will force your Discord account token to expire when this kind of situation is detected. You will have to reset your Discord password manually before you can continue operating. * Adjust [maxJobs](../docs/api-v2/post-account-midjourney) parameter to be one less than the maximum possible. For example, for the [Pro Plan](https://docs.midjourney.com/docs/plans) with a maximum of 12 concurrent jobs, set `maxJobs` to 11 or even 10. * If you ever receive a [504](../docs/api-v2/post-jobs-imagine#responses) response code, it means your `maxJobs` is set to a value higher than your account plan supports. Adjust it accordingly. * Finally, monitor for [596](../docs/api-v2/post-jobs-imagine#responses) response codes and ensure you check your API email. The API will proactively warn you if you have pending moderation messages or if Midjourney issues a CAPTCHA request. ### How to avoid Runway account suspension? Using automation is against Runway's Terms of Service, so you need to plan accordingly and have backup account(s) ready. * The best practice is to create several stand-by Runway accounts. These accounts should be used exclusively for API work and nothing else. We strongly recommend using a VPN to prevent your personal data/IP addresses from being leaked. You can use the [Opera](https://www.opera.com/download) browser with a built-in VPN or the [Brave](https://brave.com/download) browser with [Tor support](https://support.brave.com/hc/en-us/articles/360018121491-What-is-a-Private-Window-with-Tor-Connectivity). * When creating accounts in bulk, make sure to restart Opera/Brave so that your IP is different every time. When creating new emails and Runway accounts, use names that closely resemble real names—something that does not look suspicious. * Once a new Runway account is created, you will have a few free credits with which you can test the API. After testing, log out and leave the account alone until you are ready to activate the [Unlimited plan](https://runwayml.com/pricing) (the only subscription plan that makes sense to pay for). * When paying for a Runway subscription, use a virtual credit card number (provided by most major credit card companies) or services like [Privacy.com](https://privacy.com). Make sure to use a credit card name and address that resemble an actual name and address. Use a *different name and address* for every new Runway subscription. Runway has access to all payment details and can cross-check banned accounts' payment information to ban newly created accounts if a match is found. * If your account gets suspended, file a charge dispute with your credit card company. Since Runway cannot produce any evidence of you violating the ToS, the bank will fully refund your payment. Our customers have reported a 100% success rate of getting their money back, though it may take some time. * When using the API, try to simulate real users. Avoid running generations 24/7 by establishing quiet hours (for example, you can use two or three accounts and rotate them every 12 to 8 hours). Avoid calling API endpoints too frequently, and consider using the `replyUrl` webhook to retrieve results, as this will ensure the least intrusive operation. * Finally, monitor your API email—the one you used to subscribe to useapi.net services. The API will proactively warn you if your Runway account has any issues. ### Do you validate a user's text/image prompts to ensure they are passing AI services' safety requirements? It is common practice for AI services to ban users for violating prompt guidelines (for example, see Midjourney PG13 [requirements](https://docs.midjourney.com/docs/community-guidelines)). Our API does not perform any prompt pre-validations, it will return a [422](../docs/api-v2/post-jobs-imagine#responses) status code if the job is moderated by Midjourney, and similar checks apply for the other AI APIs we offer. Generally speaking, if you're planning to use the API for a public Telegram bot (which is one of the popular use cases) or in similar scenarios where you do not control the quality of the prompt, it might be a good idea to use a combination of a ban/stop word list along with [OpenAI ChatGPT](https://openai.com/api/pricing) or [Google Gemini](https://ai.google.dev/pricing) to check if the prompts meet safety requirements. [Gemini](https://ai.google.dev/pricing) offers a free tier with some RPM (requests per minute) limitations. We also offer LLM models, specifically `MiniMax-Text-01`, a fast instructional multimodal model that is free to use and can validate both text and images for safety. Please see [POST minimax/llm](../docs/api-minimax-v1/post-minimax-llm). ### How is your experimental Runway API different from the official Runway API? Official [Runway API](https://docs.dev.runwayml.com) currently only supports Gen-3 Alpha Turbo. The cost for Gen-3 Alpha Turbo 10-second generation is [$0.50](https://docs.dev.runwayml.com/usage/billing). Our [experimental Runway API](https://useapi.net/docs/api-runwayml-v1) is a reverse-engineered version of [runwayml.com](https://runwayml.com). It fully supports **all** features of Gen-3 Alpha, Gen-3 Alpha Turbo, Act-One, Video to Video, Super-Slow Motion, Gen-2, the LipSync feature, and [more](https://useapi.net/docs/api-runwayml-v1). When used along with the Runway [Unlimited plan](https://runwayml.com/pricing), it allows you to run several hundred generations each day. On average, you can expect the following numbers for Gen-3 Alpha Turbo 10-second generation: - 1 generation is completed within 25 seconds - 10 generations take about 4 minutes to complete - 30 generations take about 12 minutes to complete - 150 generations take about one hour to complete If you generate 200+ videos, the official API will cost you $0.50 per generation, so 200 generations cost about $100. This means the $95 [Unlimited plan](https://runwayml.com/pricing), combined with our $15/month subscription, will pay for itself by the **first day**, most often within the first few hours. We provide an API for all the features available at [runwayml.com](https://runwayml.com), including Gen-3 Alpha, Act-One, video-to-video (with extend and expand), Frames, and many more. The official Runway API only supports [Gen-3 Alpha Turbo](https://docs.dev.runwayml.com/). ### How is your experimental MiniMax API different from the official MiniMax API? Official [MiniMax API](https://intl.minimaxi.com/document/video_generation) costs $0.43…$0.65 [link](https://www.minimaxi.com/en/price) per single 6-second-long generation. Our [experimental MiniMax API](https://useapi.net/docs/api-minimax-v1) is a reverse-engineered version of the MiniMax/HailuoAI websites. It does not cost you anything to generate as many videos as you wish, thanks to a flat monthly [subscription](https://useapi.net/docs/subscription) fee. You can link as many [paid](https://hailuoai.video/subscribe) or free MiniMax/HailuoAI accounts to our API as you wish. With [Unlimited](https://hailuoai.video/subscribe) Hailuo AI plan or [Standard](https://hailuoai.video/subscribe) plan for first day, you can expect the following numbers: - 1 generation completed within 2 minutes - 10 generations take about 20 minutes to complete - 30 generations take about an hour to complete If you generate 250+ videos, the official API will cost you $0.43 per generation, so 250 generations total about $107.50. This means the $95 [Unlimited](https://hailuoai.video/subscribe) plan, combined with our $15/month subscription, will pay for itself by the **first day**. When using free [hailuoai.video](https://hailuoai.video) account, it costs one credit to generate a single image, and you can generate up to four images at once. With a daily free top-up of 100 credits, a free hailuoai.video account can generate 100 images per day – up to 3K images per month. ### Do you support [n8n](https://n8n.io) workflow automation? Please consider the [n8n-nodes-useapi](https://github.com/lvalics/n8n-nodes-useapi) package by [lvalics](https://github.com/lvalics). ### How POST raw content to [runwayml/assets](https://useapi.net/docs/api-runwayml-v1/post-runwayml-assets) and [minimax/files](https://useapi.net/docs/api-minimax-v1/post-minimax-files) using Make.com and similar nocode tools? We recommend using module called [0codekit](https://www.make.com/en/integrations/onesaas) to run JavaScript and return a result.
0codekit JavaScript example ```js async function fetchFromURLandPOST(imageURL, name) { const apiToken = ""; // https://useapi.net/docs/start-here/setup-useapi // Runway https://useapi.net/docs/api-runwayml-v1/post-runwayml-assets const apiUrl = `https://api.useapi.net/v1/runwayml/assets/?name=${name}`; // MiniMax https://useapi.net/docs/api-minimax-v1/post-minimax-files // const apiUrl = `https://api.useapi.net/v1/minimax/files/`; try { // Fetch the image from the URL const responseImage = await fetch(imageURL); if (!responseImage.ok) throw new Error(`Failed to fetch ${imageURL}: ${responseImage.statusText}`); // Convert the response to a Blob const blob = await responseImage.blob(); // Prepare headers for the POST request const headers = { "Authorization": `Bearer ${apiToken}`, "Content-Type": blob.type, }; // Make the POST request with the blob as the body const response = await fetch(apiUrl, { method: "POST", headers: headers, body: blob, }); const result = await response.json(); return { data: result }; } catch (error) { return { error: error.message }; } } // Calling the function result = await fetchFromURLandPOST("https:\\website.com\image.jpeg", "my_image"); ```