Introduction
What this endpoint does
It takes one video clip and returns the same clip at a higher resolution tier. Length, aspect ratio, motion, cuts and the audio track stay as sent, and there is no prompt.
Inputs that matter
video_url is the clip, 3 to 60 seconds long, as a direct link to the file. resolution picks the output tier: 720p, 1080p (the default), 2k or 4k. The tier is a pixel budget, so an 832×480 clip comes back at 1896×1094 at 1080p.
What you get back
One MP4 per request, the same length as the source, served from platform storage once the task finishes.
| Field | Value |
|---|---|
| Input | Video |
| Output | Video |
| Endpoint | Upscale |
| Tiers | 720p, 1080p, 2K, 4K |
| Billing | Per second of the source clip, rounded up, 3-second minimum |
| Controls | No prompt — resolution only |
Request parameters
| Parameter | Required | Description |
|---|---|---|
video_url | Yes | The clip to upscale, 3 to 60 seconds long. at least 1 characters |
resolution | No | 720p, 1080p (the default), 2k or 4k — a pixel budget with the clip's aspect ratio kept, so an 832×480 clip at 1080p comes back at 1896×1094. |
Pricing
Billed per second of the source clip, rounded up to the next whole second with a 3-second minimum; the output tier sets the per-second rate. The estimate before submission covers an uploaded clip's length plus one second, or the 60-second maximum for a video URL, and the difference is released when the task settles.
| Specification | Price |
|---|---|
| $0.006 / second |
| $0.006 / second |
| $0.012 / second |
| $0.024 / second |
Use cases
480p drafts to delivery quality
Generate cheaply at 480p or 720p, keep the take you like and upscale only that one, instead of paying to generate every attempt at high resolution.
Social and ad cuts
Bring short clips up to the resolution a feed, a landing page or an ad placement expects, with the soundtrack still in place.
Older footage on bigger screens
Give small archive clips or screen recordings a cleaner, larger picture for presentations and large displays.
Prompt guide & pro tips
Finish the cut, then upscale
Upscale the final version. Every later step would otherwise have to push several times as many pixels.
Send
video_urland a resolutionvideo_urlis the clip, 3 to 60 seconds long; resolution picks 720p, 1080p (the default), 2k or 4k. There is nothing else to set.Poll, then download
The call is asynchronous: create the task, poll until it finishes and fetch the MP4 from platform storage. A 5-second clip at 4K is around 19 MB.
Introduction
Video Upscaler takes a finished clip and returns it at a higher resolution tier. It is a resolution pass, not an editor: framing, motion, cuts, timing and the original audio track all stay as sent. There is no prompt.
Request
{
"video_url": "https://example.com/clip.mp4",
"resolution": "1080p"
}
Only video_url is required. resolution defaults to 1080p; the other tiers are 720p, 2k and 4k.
Clip length and billing
The clip must be 3 to 60 seconds long. When the length is known at acceptance, a clip outside that range is rejected straight away; otherwise it is checked before processing starts and the task fails with a full refund. Billing is per second of the source clip, rounded up to the next whole second with a 3-second minimum, at the rate of the tier you picked. The estimate before submission covers an uploaded clip's length plus one second, or the 60-second maximum for a video URL; the unused part of the hold is returned when the task settles.
What comes back
The tier is a pixel budget and the aspect ratio is kept. An 832×480 clip came back at 1896×1094 at 1080p after about 33 seconds of processing, and at 3792×2188 at 4k after about 103 seconds; a 5-second 4k MP4 is around 19 MB. An 854×480 clip with an AAC soundtrack came back at 1922×1080 with the same track. In every test the running length matched the source to the frame.
Task flow
The call is asynchronous. Create the task, poll it until it reaches a terminal state, then download the MP4 from platform storage.
Tips
- Upscale the final cut, after every edit.
- Pick a tier above the clip's current resolution.
- Use a direct link to the video file. A web page that plays the video returns HTML, the length cannot be read and the call fails with the charge refunded; uploading the file is the most reliable route.
- Start from the cleanest source you have: compression blocks and noise are enlarged too.
API quick start
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
-d '{
"model": "spicyapi/video-upscaler-v1/upscale",
"input": {
"resolution": "1080p",
"video_url": "https://example.com/reference.mp4"
}
}'
# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
-H "Authorization: Bearer $SPICY_API_KEY"
See the API reference for authentication, the complete schema, polling, and error handling.




