Skip to main content

Documentation Index

Fetch the complete documentation index at: https://apixo.ai/docs/llms.txt

Use this file to discover all available pages before exploring further.

What this model is for

Use this page after trying Vidu Q3 in the APIXO playground. It shows the model ID, request body, result format, and the shared async workflow links you need for API integration.

Model ID, endpoint, and auth

  • Model ID: vidu-q3
  • Base URL: https://api.apixo.ai/api/v1
MethodEndpointDescription
POST/api/v1/generateTask/vidu-q3Create a generation task
GET/api/v1/statusTask/vidu-q3Query task status

Authentication

All requests must include your API key in the request headers:
Authorization: Bearer YOUR_API_KEY

Request Body

{
  "request_type": "async",
  "callback_url": "https://...",
  "provider": "auto",
  "input": {
    "mode": "text-to-video",
    "prompt": "a cinematic shot of a futuristic city at sunrise",
    "resolution": "720p",
    "duration": 8,
    "style": "general",
    "aspect_ratio": "4:3",
    "movement": "auto",
    "sound": true,
    "bgm": true,
    "seed": 1234
  }
}

Parameters

request_type
string
default:"async"
Execution mode: async (polling) or callback
callback_url
string
Callback URL. Required when request_type=callback. (conditional)
provider
string
default:"auto"
Routing strategy: auto, value, official, or a specific provider channel
input
object
required
Model input parameters
Mode Reference:
  • text-to-video - Generate a video from text only
  • image-to-video - Generate a video from 1 or 2 images
  • turbo-text-to-video - Turbo text-to-video mode
  • turbo-image-to-video - Turbo image-to-video mode with 1 or 2 images

Copy-paste quickstart

Text-to-video (text-to-video)
curl -X POST "https://api.apixo.ai/api/v1/generateTask/vidu-q3" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "request_type": "async",
    "input": {
      "mode": "text-to-video",
      "prompt": "a cinematic flyover of a futuristic city at sunrise",
      "resolution": "720p",
      "duration": 8,
      "style": "general",
      "aspect_ratio": "16:9",
      "movement": "auto",
      "sound": true,
      "bgm": true
    }
  }'
Single-image animation (image-to-video, 1 image)
curl -X POST "https://api.apixo.ai/api/v1/generateTask/vidu-q3" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "request_type": "callback",
    "callback_url": "https://your-server.com/callback",
    "input": {
      "mode": "image-to-video",
      "prompt": "make this image come alive with subtle motion",
      "resolution": "1080p",
      "duration": 4,
      "image_urls": [
        "https://example.com/start.jpg"
      ]
    }
  }'
First-and-last-frame generation (image-to-video, 2 images)
curl -X POST "https://api.apixo.ai/api/v1/generateTask/vidu-q3" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "request_type": "async",
    "input": {
      "mode": "image-to-video",
      "prompt": "transition from start to end smoothly",
      "resolution": "720p",
      "duration": 8,
      "image_urls": [
        "https://example.com/start.jpg",
        "https://example.com/end.jpg"
      ]
    }
  }'

Response and result format

POST /api/v1/generateTask/vidu-q3

On success, the API returns a taskId that you can use to query task status later. Success:
{
  "code": 200,
  "message": "success",
  "data": {
    "taskId": "task_12345678"
  }
}
Failure:
{
  "code": 400,
  "message": "Insufficient credits",
  "data": null
}

GET /api/v1/statusTask/vidu-q3

Use taskId to query the execution status and final result.
curl -X GET "https://api.apixo.ai/api/v1/statusTask/vidu-q3?taskId=task_12345678" \
  -H "Authorization: Bearer YOUR_API_KEY"
Success:
{
  "code": 200,
  "message": "success",
  "data": {
    "taskId": "task_12345678",
    "state": "success",
    "resultJson": "{\"resultUrls\":[\"https://r2.apixo.ai/video.mp4\"]}",
    "createTime": 1767965610929,
    "completeTime": 1767965730929,
    "costTime": 120000
  }
}
Failure:
{
  "code": 200,
  "message": "success",
  "data": {
    "taskId": "task_12345678",
    "state": "failed",
    "failCode": "CONTENT_VIOLATION",
    "failMsg": "Content does not meet safety guidelines"
  }
}

Polling result fields

taskId
string
Unique task identifier.
state
string
Current task state: pending, processing, success, or failed.
resultJson
string
JSON string containing resultUrls array. Only present on success. Parse with JSON.parse().
failCode
string
Error code. Only present when state is failed. See Error Codes.
failMsg
string
Human-readable error message. Only present when state is failed.
createTime
integer
Task creation timestamp (Unix milliseconds).
completeTime
integer
Task completion timestamp (Unix milliseconds).
costTime
integer
Processing duration in milliseconds.

Polling and webhook result retrieval

Use request_type: "async" with the status endpoint when your app wants to poll for completion. Use request_type: "callback" with callback_url when your production service should receive the final result automatically. See Webhooks for delivery details.

Common errors

CodeDescription
400Invalid parameters or malformed request
401Missing or invalid API key
402Insufficient balance
429Rate limit exceeded
Fail CodeDescription
CONTENT_VIOLATIONThe request violates safety guidelines
INVALID_IMAGE_URLThe provided image URL could not be fetched

Rate Limits

LimitValue
Request rate60 requests per minute
Concurrent tasks10
If you exceed the limit, the API returns a 429 error. Retry later.
Video generation takes longer than images — use callback mode for production workloads. Result URLs expire after 15 days; download important outputs promptly.

Tips

  • Image count by mode: For image-to-video and turbo-image-to-video, the number of image_urls determines the workflow. 1 image creates a single-image animation. 2 images create a first-and-last-frame transition, where the first image is the start frame and the second image is the end frame.
  • Billing: Charges are calculated per second, and billed seconds are equal to duration. For pricing by resolution, see Pricing.
  • Polling recommendation: After submitting a task, wait about 60-90 seconds before polling, then poll every 5 seconds. For higher concurrency, prefer callback mode.
  • Result URL lifetime: Output URLs may expire. Download and store results as soon as possible.