Skip to main content
POST
/
videos
Create video
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: JSON.stringify({
    model: '<string>',
    prompt: '<string>',
    duration: 123,
    size: '<string>',
    resolution: '<string>',
    aspect_ratio: '<string>',
    seed: 123,
    sample_count: 123,
    negative_prompt: '<string>',
    generate_audio: true,
    enhance_prompt: true,
    compression_quality: 123,
    person_generation: '<string>',
    resize_mode: '<string>',
    input_references: [{type: 'image_url', role: 'first_frame', reference_type: '<string>'}],
    provider_params: {},
    output: {access: 'both'},
    webhook: {url: '<string>', secret: '<string>', events: ['<string>']},
    provider: {
      order: ['<string>'],
      only: ['<string>'],
      ignore: ['<string>'],
      include_alpha: true
    }
  })
};

fetch('https://api.phaseo.app/v1/videos', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
{
  "id": "<string>",
  "polling_url": "<string>",
  "model": "<string>",
  "status": "pending",
  "output_access": "bytes",
  "generation_id": "<string>",
  "created_at": 123,
  "started_at": 123,
  "completed_at": 123,
  "object": "video",
  "poll_after_seconds": 20,
  "provider": "<string>",
  "seconds": 123,
  "size": "<string>",
  "audio": true,
  "content_url": "<string>",
  "download_url": "<string>",
  "expires_at": 123,
  "progress": 123,
  "progress_source": "<string>",
  "asset": {
    "id": "<string>",
    "mime_type": "<string>",
    "bytes": 123,
    "sha256": "<string>",
    "width": 123,
    "height": 123,
    "duration_seconds": 123
  },
  "outputs": [
    {
      "index": 123,
      "mime_type": "<string>",
      "bytes_available": true,
      "content_url": "<string>",
      "download_url": "<string>",
      "expires_at": 123
    }
  ],
  "billing": {},
  "usage": {
    "cost": 123,
    "is_byok": true
  },
  "error": null
}
Creates an asynchronous video generation job. After creating a job, poll:
  • GET /v1/videos/{video_id} for status updates.
  • GET /v1/videos/{video_id}/content when the job is complete.

Authorizations

Authorization
string
header
required

Bearer token authentication

Body

application/json
model
string
required
prompt
string
required
duration
integer

Desired duration in seconds (provider/model dependent).

size
string

Explicit dimensions (for example 1280x720). Cannot be combined with resolution or aspect_ratio.

resolution
string

480p, 720p, 1080p, 1K, 2K, 4K. Can be combined with aspect_ratio. Cannot be combined with size.

aspect_ratio
string

Aspect ratio such as 16:9, 9:16, 1:1. Can be combined with resolution. Cannot be combined with size.

seed
integer
sample_count
integer
negative_prompt
string
generate_audio
boolean
enhance_prompt
boolean
compression_quality
integer
person_generation
string
resize_mode
string
input_references
object[]
provider_params
object
output
object
webhook
object
provider
object

Provider routing preferences for gateway selection.

Response

202 - application/json

Video response

id
string
polling_url
string
model
string
status
enum<string>
Available options:
pending,
in_progress,
completed,
failed,
cancelled
output_access
enum<string>
Available options:
bytes,
signed_url,
both
generation_id
string | null
created_at
started_at
completed_at
object
string
Example:

"video"

poll_after_seconds
integer
Example:

20

provider
string
seconds
number
size
string
audio
boolean
content_url
string

Present when output_access includes bytes (authenticated endpoint).

download_url
string | null

Signed first-party URL for direct download when status is completed.

expires_at
integer | null

Unix timestamp (seconds) when the signed download_url expires.

progress
integer | null
progress_source
string
asset
object
outputs
object[]
billing
object
usage
object
error
unknown
Last modified on April 1, 2026