Videos
Create Living Property Video
Create an AI-powered real estate video with virtual staging and automatic narration
POST
Example Output
Creates a new living property video from real estate images. This endpoint uses AI to transform static property photos into dynamic videos with optional virtual staging, AI-generated narration, and background music. The video generation is asynchronous - you’ll receive a task ID to poll for status or configure a webhook to be notified when complete.
Key Features
- Virtual Staging: Add people, furniture, or redecorate rooms using AI
- AI Narration: Provide your own script for professional text-to-speech narration
- Background Music: Optional ambient music that complements your property video
Request Body
Array of image objects for the video. Must contain 1 to 9 images.Each image object contains:
url(required): Publicly accessible HTTP(S) URL of the property imageroom_type(optional): Type of room for better AI processing
Voice configuration for text-to-speech narration.
How to process the property images using AI.
| Value | Description |
|---|---|
no_modify | Keep rooms as-is, add realistic people for a lived-in feel |
change_decoration | Modernize old or outdated furniture and decor |
furnish | Add virtual furniture to empty rooms |
The
change_decoration and furnish modes use AI virtual staging to transform your images. Processing may take longer for these modes.Narration script for text-to-speech. The length must scale with the number of images — each image becomes a scene of ~3 seconds, requiring 65–85 characters per image so the narration matches the video runtime.
Scripts outside this range are rejected with
| Images | Min characters | Max characters |
|---|---|---|
| 1 | 65 | 85 |
| 3 | 195 | 255 |
| 5 | 325 | 425 |
| 9 | 585 | 765 |
SCRIPT_TOO_SHORT or SCRIPT_TOO_LONG.Enable AI-generated background music.When
true, adds ambient music that complements the property video. The music is automatically mixed at an appropriate volume to not overpower the narration.Subtitle configuration for word-level animated overlays. Use
subtitle_style_preset for quick setup or styles for granular control. Providing both will result in a validation error.HTTPS URL to receive webhook notification when the task completes.See Webhooks for payload format and verification details.
Configuration for visual elements and branding overlays. If not provided, elements are disabled by default.
Test Mode
Sandbox-only scenario selector. Honored only for test-mode (
vpk_test_) keys and silently ignored for live keys, so it is safe to leave in shared request-building code.| Value | Outcome |
|---|---|
success | Synthetic task completes with a watermarked sample video |
fail | Synthetic task fails with a sanitized, public-safe error |
slow | Like success, but completes after a noticeably longer delay |
Test mode never spends credits or runs the real pipeline. See Test Mode for the full sandbox model.
Response
Returns a202 Accepted response with task details.
Initial task status. Always
queued for new tasks.Human-readable confirmation message.
Task creation timestamp (ISO 8601 format).
Number of credits charged for this request (10 credits). Always
0 for test-mode requests.true for live (vpk_live_) requests; false for test-mode (vpk_test_) requests. Use this to tell a real task from a sandbox one. See Test Mode.Unique request ID for support reference.
HATEOAS links for navigation.
self: URL to poll for task statuspoll_interval_seconds: Recommended polling interval (30 seconds)
Response Headers
| Header | Description |
|---|---|
Location | URL to poll for task status (/v1/tasks/{taskId}) |
Retry-After | Recommended polling interval in seconds (30) |
Error Codes
| Code | Status | Description |
|---|---|---|
VALIDATION_ERROR | 400 | Invalid request parameters |
INVALID_IMAGE_URL | 400 | One or more image URLs are inaccessible or invalid |
IMAGE_RESOLUTION_TOO_LOW | 400 | One or more images are below the HD floor (long ≥ 1280 px, short ≥ 720 px) |
SCRIPT_TOO_SHORT | 400 | Script is shorter than image_count × 65 characters |
SCRIPT_TOO_LONG | 400 | Script is longer than image_count × 85 characters |
SCRIPT_INVALID_CHARACTERS | 400 | Script contains numbers or special symbols not supported by TTS |
VOICE_NOT_FOUND | 404 | The specified voice ID does not exist |
VOICE_ACCESS_DENIED | 403 | The specified voice is not accessible to your account |
INVALID_API_KEY | 401 | Invalid or missing API key |
PLAN_REQUIRED | 403 | Plan doesn’t include API access |
INSUFFICIENT_CREDITS | 402 | Not enough credits to process the request |
CONCURRENCY_LIMIT_EXCEEDED | 429 | Concurrent task limit reached |
SERVICE_UNAVAILABLE | 503 | Video generation service temporarily unavailable |
Credits
This endpoint charges 10 credits per request upon successful task creation. If the task fails during processing, credits are not refunded.Processing Time
Video generation typically takes 3-5 minutes depending on:- Number of images
- Selected modification mode (
change_decorationandfurnishtake longer) - Current system load
Retry-After header (30 seconds) as a guide for polling frequency.
Next Steps
After creating a task:- Poll for status: Use Get Task to check progress
- Wait for webhook: If configured, receive notification when complete
- Download video: Access the video URL from the completed task result

