Skip to main content
POST
/
v1
/
videos
Create a new video generation
curl --request POST \
  --url https://api.aurous-labs.com/v1/videos \
  --header 'Content-Type: application/json' \
  --header 'X-Api-Key: <api-key>' \
  --data '
{
  "video_lora_id": "lora_01HXMQ7Z3K8Y2ABCDEFGHJKM",
  "prompt": "A golden sunset over the ocean with gentle waves",
  "first_frame_url": "file_01HXMQ7Z3K8Y2NABCDEFGHJKMN",
  "last_frame_url": "https://example.com/last.jpg",
  "resolution": "480p",
  "ratio": "16:9",
  "duration": 5,
  "seed": 123,
  "camera_fixed": true,
  "watermark": true,
  "enhance_prompt": true,
  "webhook_url": "<string>"
}
'
{
  "id": "img_01HXMQ7Z3K8Y2ABCDEFGHJKM",
  "status": "succeeded",
  "prompt": "A golden sunset over mountains, cinematic lighting",
  "created_at": "2026-05-04T10:00:00Z",
  "media_type": "image",
  "negative_prompt": "blurry, low quality",
  "output_urls": [
    "https://api.aurous-labs.com/v1/images/img_01HXMQ7Z3K8Y2ABCDEFGHJKM/output/0?token=..."
  ],
  "output_video_url": "https://api.aurous-labs.com/v1/videos/vid_01HXMQ7Z3K8Y2ABCDEFGHJKM/output?token=...",
  "reference_image_urls": [
    "https://example.com/ref1.jpg"
  ],
  "error_message": "Content policy violation",
  "duration_ms": 14820,
  "cost": {
    "amount": 2,
    "currency": "credit",
    "breakdown": {
      "base": 1,
      "enhance": 1
    }
  },
  "width": 1024,
  "height": 1024,
  "image_count": 1,
  "size_preset": "square",
  "inference_type": "t2i",
  "cfg_rescale": 0.7,
  "denoise_strength": 0.6,
  "seed": 42,
  "video_duration": 5,
  "video_resolution": "480p",
  "video_ratio": "16:9",
  "video_camera_fixed": {},
  "character_id": "char_01HXMQ7Z3K8Y2ABCDEFGHJKM",
  "loras": [
    {
      "id": "lora_01HXMQ7Z3K8Y2ABCDEFGHJKM",
      "name": "Sunset Style"
    }
  ],
  "aurous_version": "2026-05-15",
  "creation_request_id": "req_01HXMQ7Z3K8Y2ABCDEFGHJKM",
  "completed_at": "2026-05-04T10:00:14Z"
}

Documentation Index

Fetch the complete documentation index at: https://docs.aurous-labs.com/llms.txt

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

POST /v1/videos submits a video generation request. Credits are deducted based on duration × resolution factor. The platform supports text-to-video (prompt only) and image-to-video (first frame, or first + last frame).
Polling video status: video generations and image generations share the status endpoint. After POST /v1/videos, poll GET /v1/images/{id} — the ID returned for videos is vid_<ulid> but the polling path is /v1/images/{id}. This unification is part of the v1.0 contract.

Cost shape

Video cost scales with duration_seconds and resolution. Use POST /v1/videos/estimate with the same body shape to preview the charge before committing.

Output

When the generation reaches status: succeeded, fetch the rendered file via GET /v1/videos/{id}/output. The output URL is valid for ~24 hours; save what you want to keep.

Webhooks

Pass webhook_url to receive a POST callback when the video reaches a terminal state. The payload event is video.completed or video.failed. See Webhooks for signature verification.

Authorizations

X-Api-Key
string
header
required

Your team API key (starts with al_live_).

Headers

Idempotency-Key
string

See POST /v1/images - same contract.

Aurous-Version
string

Optional API version pin (YYYY-MM-DD). Defaults to your team's pinned version, or the system default 2026-05-15 for unauthenticated requests.

Pattern: ^\d{4}-\d{2}-\d{2}$
Example:

"2026-05-15"

Body

application/json
video_lora_id
string
required

Opaque video LoRA identifier (lora_*) or slug. UUIDs accepted for legacy back-compat.

Example:

"lora_01HXMQ7Z3K8Y2ABCDEFGHJKM"

prompt
string

Text prompt describing the video. Optional — enhances the generation when provided.

Example:

"A golden sunset over the ocean with gentle waves"

first_frame_url
string

First frame for image-to-video / first+last frame interpolation. Either an opaque file_<ulid> ID returned by POST /v1/files, or an https:// URL pointing at a public host (max 2048 chars). URLs are server-side fetched through an SSRF-pinned client (rejects private IPs / cloud metadata).

Maximum string length: 2048
Example:

"file_01HXMQ7Z3K8Y2NABCDEFGHJKMN"

last_frame_url
string

Last frame for first+last frame interpolation. Same rules as first_frame_url.

Maximum string length: 2048
Example:

"https://example.com/last.jpg"

resolution
enum<string>

Output video resolution

Available options:
480p,
720p,
1080p
ratio
enum<string>

Output video aspect ratio

Available options:
16:9,
4:3,
1:1,
3:4,
9:16,
21:9
duration
number

Video duration in seconds (2-12)

Required range: 2 <= x <= 12
Example:

5

seed
number

Random seed (-1 for random)

camera_fixed
boolean

Whether to fix the camera position

watermark
boolean

Whether to add watermark

enhance_prompt
boolean

Whether to enhance the prompt with AI

webhook_url
string

Webhook URL to receive POST callback when generation completes or fails

Response

Video generation created

id
string
required

Opaque generation ID

Example:

"img_01HXMQ7Z3K8Y2ABCDEFGHJKM"

status
enum<string>
required

Current generation status. Lifecycle: pending (created, awaiting dispatch) → processing (running) → one of the terminal values succeeded / failed / cancelled. Additional terminal values may be introduced in future API versions and will be announced via the changelog before they appear on the wire.

Available options:
pending,
processing,
succeeded,
failed,
cancelled
Example:

"succeeded"

prompt
string
required

The text prompt used for generation

Example:

"A golden sunset over mountains, cinematic lighting"

created_at
string
required

Creation timestamp (ISO 8601)

Example:

"2026-05-04T10:00:00Z"

media_type
enum<string> | null

Distinguishes image vs video generation. May be null for older rows minted before this column existed.

Available options:
image,
video
Example:

"image"

negative_prompt
object

Negative prompt to exclude from generation

Example:

"blurry, low quality"

output_urls
string[] | null

Generated image proxy URLs. Available for ~24 hours after generation. Save what you want to keep — long-term storage is intentionally not part of the platform. URLs return 410 Gone after expiry.

Example:
[
"https://api.aurous-labs.com/v1/images/img_01HXMQ7Z3K8Y2ABCDEFGHJKM/output/0?token=..."
]
output_video_url
object

Generated video proxy URL (only present on media_type: video). Same 24h TTL as image output_urls.

Example:

"https://api.aurous-labs.com/v1/videos/vid_01HXMQ7Z3K8Y2ABCDEFGHJKM/output?token=..."

reference_image_urls
string[] | null

Reference image URLs that were used as visual anchors for this generation, if any. Snapshotted at inference time — for character-attached generations, these are the resolved character refs at submission, not the live character state.

Example:
["https://example.com/ref1.jpg"]
error_message
object

Error message if the generation failed

Example:

"Content policy violation"

duration_ms
object

Processing duration in milliseconds (set on terminal status)

Example:

14820

cost
object

Per-generation cost breakdown — same shape as the estimated_cost returned by POST /v1/{images,videos}/estimate. May be null for older rows from before this field existed; populated for all new generations. The amount reflects the committed charge for terminal-status rows.

Example:
{
"amount": 2,
"currency": "credit",
"breakdown": { "base": 1, "enhance": 1 }
}
width
number

Image width in pixels (image generations only)

Example:

1024

height
number

Image height in pixels (image generations only)

Example:

1024

image_count
number

Number of images requested in the batch

Example:

1

size_preset
object

Size preset applied (overrides width/height when set)

Example:

"square"

inference_type
enum<string> | null

Inference mode actually dispatched. t2i = text-to-image; i2i = image-to-image (when reference_image_urls is set).

Available options:
t2i,
i2i
Example:

"t2i"

cfg_rescale
object

CFG rescale factor the customer supplied on the request body, echoed back here. Range 0.0-1.0. Omitted when the customer did not supply a per-request value (the platform applied a precedence-chain default — LoRA, character override, or the global 0.7 — which is not exposed on the response).

Example:

0.7

denoise_strength
object

Denoising strength the customer supplied on the request body, echoed back here. Range 0.0-1.0. Omitted when the customer did not supply a value or when the generation was a bare text-to-image request (denoise is only applied when reference_image_urls is non-empty).

Example:

0.6

seed
object

Random seed used (image generations)

Example:

42

video_duration
object

Video duration in seconds (video generations only)

Example:

5

video_resolution
enum<string> | null

Video resolution (video generations only)

Available options:
480p,
720p,
1080p
Example:

"480p"

video_ratio
enum<string> | null

Video aspect ratio (video generations only)

Available options:
16:9,
4:3,
1:1,
3:4,
9:16,
21:9
Example:

"16:9"

video_camera_fixed
object

Whether the camera was held fixed during the video

character_id
object

Character ID supplied on the request (char_<ulid> or legacy UUID), echoed back. null when no character was attached to this generation.

Example:

"char_01HXMQ7Z3K8Y2ABCDEFGHJKM"

loras
object[] | null

LoRAs applied to this generation. null for prompt-only and pure-reference generations.

aurous_version
string

API contract version applied at the time this row was minted (D25 — frozen for replay across future version bumps).

Example:

"2026-05-15"

creation_request_id
string

Aurous-Request-Id of the POST that created this row. Quote in support tickets to trace the original create request.

Example:

"req_01HXMQ7Z3K8Y2ABCDEFGHJKM"

completed_at
object

Terminal-status timestamp (ISO 8601). NULL until the generation reaches a terminal state.

Example:

"2026-05-04T10:00:14Z"