Skip to main content
GET
Get Job Status
Retrieve the current status of a video generation job, including per-project progress, completed videos, and final output URLs.

Authentication

string
required
Your Nouvel API key. Format: Bearer nvl_xxxx

Path Parameters

string
required
The job ID returned from POST /api/v1/generate.

Response

string
required
The job UUID.
string
required
Overall job status. One of:
integer
required
Overall completion percentage (0-100). Capped at 99 while status: "running". Reaches 100 only when terminal.
string
required
Current pipeline stage for running jobs:
  • preparing - Scraping product page, generating scripts
  • video - Generating lip-synced avatar and product scenes
  • audio - Synthesizing voiceover
  • lip_sync - Applying lip sync to match voiceover
  • stitching - Combining scenes, adding captions, final export
integer
required
Total number of videos in this job.
integer
required
Number of videos successfully completed.
integer
required
Number of videos that failed during generation.
array
required
Per-project status summary. Each entry contains:
array
Detailed results for completed/failed projects. Only populated when job status is terminal (completed, partial, failed).

Example Requests

Response Examples

Polling Best Practices

  • Poll every 10-15 seconds during generation
  • Stop polling when status is terminal: completed, partial, failed, or cancelled
  • Use exponential backoff to reduce server load: start at 10s, increase to 15s, then 20s max
This endpoint doesn’t just return status—it actively triggers pipeline progression:
  • Checks for scene generation updates
  • Initiates post-processing when scenes complete
  • Triggers stitching when all scenes are ready
Regular polling is critical. Without it, jobs may stall.
Track the stage field to understand where the job is:
  1. preparing (30-60 sec) - Scraping, script generation, visual concept
  2. audio (10-20 sec) - TTS voiceover synthesis + force alignment
  3. video (60-90 sec) - Lip-synced avatar rendering
  4. stitching (30-60 sec) - Final render with product slides, transitions, captions
Total time: 2-5 minutes
When status: "partial":
  • Some videos succeeded, some failed
  • completedDetails includes both successes and failures
  • Filter by status: "completed" to get successful videos
  • Use successful videos; retry failed ones if needed
  • Jobs have a 15-minute staleness timeout (no progress)
  • Absolute timeout: 30 minutes from creation
  • If a job exceeds these limits, it fails automatically
  • Build your own client-side timeout (e.g., 25 minutes) to detect stalled jobs
Don’t poll too aggressively. Polling faster than every 5 seconds provides no benefit and wastes API quota. The pipeline takes 2-5 minutes regardless of poll frequency.

Understanding Progress

Progress calculation:
  • overallProgress = weighted average of all projects
  • Each project contributes equally to the overall progress
  • Progress is capped at 99% while status: "running"
  • Reaches 100% only when terminal

Per-Project Progress Breakdown

Error Codes

Webhook Alternative

Instead of polling, register a webhookUrl when calling POST /api/v1/generate to receive a notification when the job completes. Webhooks retry up to 3 times with exponential backoff.See the Webhooks guide for payload format, signature verification, and delivery behavior.

Next Steps

Once your job reaches status: "completed":
  1. Extract video URLs from completedDetails[].finalOutputUrl
  2. Download videos for review or local storage
  3. Publish to social platforms using the Publishing API
  4. Track performance with built-in analytics