Generate videos
POST /v1/videos/generations: asynchronous text-to-video with sound, 5 or 10 second clips up to 1080p. Models, per-clip prices, polling, content checks and errors.
How it works
Video is asynchronous. POST /v1/videos/generations checks the prompt, reserves the clip price and returns 202 with a job id straight away. Poll GET /v1/videos/generations/{id} every 5 to 10 seconds. Most clips take 1 to 3 minutes. When status is succeeded, download the MP4 from video_url with the same API key.
The price is charged only when a finished clip is delivered. A failed, blocked or timed-out job releases the reservation and costs nothing.
curl https://tryunrestrictedai.com/v1/videos/generations \
-H "Authorization: Bearer $UNCENSORED_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-1.5-pro",
"prompt": "a paper boat drifting down a rainy street at dusk, slow dolly shot",
"duration": 5,
"resolution": "480p",
"aspect_ratio": "16:9"
}'
# 202 Accepted
{ "id": "vid_...", "status": "queued", "price_usd": 0.26, "poll_url": "https://tryunrestrictedai.com/v1/videos/generations/vid_..." }
curl https://tryunrestrictedai.com/v1/videos/generations/vid_... -H "Authorization: Bearer $UNCENSORED_API_KEY"
curl -o clip.mp4 https://tryunrestrictedai.com/v1/videos/generations/vid_.../content -H "Authorization: Bearer $UNCENSORED_API_KEY"Fields
| Field | Type | Notes |
|---|---|---|
prompt | string, required | Up to 1,500 characters. Describe the scene, the motion and the camera. |
model | string | One of seedance-1.5-pro, wan-2.5, minimax-h3-turbo, longcat-fast, wan-2.7. Default seedance-1.5-pro. |
duration | integer | 5 or 10 seconds. Default 5. |
resolution | string | 480p, 720p or 1080p, where the model offers it. Default: the model’s cheapest. |
aspect_ratio | string | 16:9 (default), 9:16 or 1:1. |
audio | boolean | Sound on or off for seedance-1.5-pro (off is cheaper). Other models have fixed sound. |
negative_prompt | string | Up to 1,000 characters. |
image | string | Start frame for image-to-video, as a base64 PNG, JPEG or WebP data URL (about 2 MB at most). Returns 400 image_input_unavailable until image-to-video is enabled. Rules below. |
Status
status is queued, processing, succeeded, failed, blocked or withheld. progress is an estimate from 0 to 1. On succeeded the response adds video_url, width, height, size_bytes, mature, expires_at and usage.cost_usd. Otherwise error has a code and a message.
Clips are MP4 (H.264). video_url needs the same Authorization header, supports HTTP Range requests, and expires 24 hours after the clip finishes. A job unfinished after 25 minutes is cancelled and released.
{
"id": "vid_...",
"object": "video.generation",
"status": "succeeded",
"model": "seedance-1.5-pro",
"duration": 5,
"resolution": "480p",
"aspect_ratio": "16:9",
"audio": true,
"progress": 1,
"price_usd": 0.26,
"mature": false,
"width": 864,
"height": 480,
"video_url": "https://tryunrestrictedai.com/v1/videos/generations/vid_.../content",
"expires_at": "2026-11-10T18:00:00.000Z",
"usage": { "cost_usd": 0.26 }
}Models and prices
Per clip, text-to-video, with sound where the model has it. Full table on pricing.
| Model | Description | From | 5 s at 720p | 10 s at 720p |
|---|---|---|---|---|
seedance-1.5-pro | ByteDance Seedance: cinematic motion, optional sound. The best value. | $0.14 | $0.58 | $1.16 |
wan-2.5 | Open-weight Wan with sound. Adult-capable. | $0.56 | $1.10 | $2.20 |
minimax-h3-turbo | Fast MiniMax with sound, private inference. Adult-capable. | $0.22 | $0.34 | $0.68 |
longcat-fast | Cheapest, 720p, no sound, private inference. Can take several minutes when busy. | $0.18 | $0.18 | $0.36 |
wan-2.7 | Newest Wan, sharpest detail, no sound. Adult-capable. | $1.10 | $1.10 | $2.20 |
Content rules
Two limits apply on every plan and every model: no sexual or suggestive content involving minors or anyone who could read as under 18, and no sexual or nude images or videos of real, identifiable people (celebrities, politicians, private people, or "undress this photo"). Prompts are checked before anything is generated.
Videos are checked twice. The prompt goes through the same classifier as images before anything is generated, and frames sampled across every finished clip are checked again before it is stored or returned. A clip that fails is discarded and never stored. A blocked prompt returns 400 content_policy_violation; a blocked clip ends with status: "blocked". Both cost nothing. If the safety check is down, adult prompts return 503 safety_check_unavailable rather than skip it.
Start images are checked before anything is generated, and the check fails closed. Images showing anyone who could read as under 18 are refused with any prompt. Photos and photorealistic images of people are only animated in a non-sexual way: a mature or suggestive prompt on one is refused, recognisable or not, because consent cannot be verified. Adult animation is only for clearly non-photoreal images (illustration, anime, stylized 3D). We keep a fingerprint of every upload (never the image) and refuse near-copies of images that were blocked before. Image-to-video has hourly and daily limits (429 image_to_video_limit), and repeated blocks pause it, then all video (403 video_suspended).
Adult prompts need a paid plan or a credit top-up (403 adult_requires_paid). A clip that comes out adult for an account without one is discarded with status: "withheld" and not charged. Repeated violations across images and videos pause both for 24 hours (403 image_suspended).
Errors and billing
The clip price is reserved when the job starts, so the same balance, plan allowance and key budget checks as chat apply (402 insufficient_credit, 402 key_budget_exceeded). A rendering video counts toward the limit of 3 unfinished requests per account (429 rate_limit). Provider failures return 502 video_upstream_failed or end with status: "failed"; a provider’s own refusal is 422 provider_refused. None of these are charged. Send an Idempotency-Key header to make retries safe.