Retrieve Video
Get the current status and details of a video generation job.Request
Path Parameters
Headers
Response
Success (200 OK)
Returns the video object with current status:Response Fields
Video Statuses
Examples
Basic Retrieval
Polling with Timeout
Polling with Progress Callback
Error Responses
404 Not Found - Video Doesn’t Exist
- Invalid video ID
- Video belongs to different organization
- Video was deleted
410 Gone - Video Expired
- Videos are automatically persisted after 45 minutes
- This error only occurs for very old videos that failed persistence
- Create a new video instead
Failed Video Response
Whenstatus is "failed", the response includes an error object:
content_policy_violation- Prompt violated usage policiesgeneration_failed- Technical error during generationtimeout- Generation took too longinsufficient_quota- Credits were refunded (shouldn’t happen)
Video URL Lifecycle
OpenAI Storage (0-45 minutes)
Immediately after completion, videos are served from OpenAI:- Available for 1 hour only
- Fast access
- Temporary storage
R2 Storage (45 minutes+)
After 45 minutes, videos are persisted to Cloudflare R2:- Available permanently
- CDN-backed
- Lower cost
The
url field automatically updates to point to R2 storage after persistence. Your application doesn’t need to handle this transition.Polling Best Practices
✅ Good: Exponential Backoff
✅ Good: Use Webhooks
Instead of polling, use webhooks for real-time notifications:❌ Bad: Aggressive Polling
- Wastes API quota
- May hit rate limits (429 errors)
- Increases latency for other users
- No benefit (videos don’t generate faster)
Progress Tracking
Theprogress field shows generation progress (0-100):
- 0% - Queued, not started
- 1-25% - Initializing generation
- 25-75% - Actively generating frames
- 75-99% - Finalizing video
- 100% - Complete
Required Scopes
This endpoint requires the following API key scopes:video:read- Retrieve video status
Next Steps
Download Video
Download the completed video file
List Videos
List all your videos
Delete Video
Delete a video
Webhooks
Use webhooks instead of polling