enhance-video-1.0
Async video quality enhancement — upscale, denoise, deblock, smart frame interpolation, and color refinement up to 4K with two quality tiers and five scene presets.
enhance-video-1.0 is a single async endpoint that takes a source video URL and
returns a higher-quality MP4 — upscaled, denoised, smart-interpolated, with
optional scene-aware restoration. Two quality tiers (standard /
professional) and five scene presets cover everything from AI-generated
footage to old-film restoration. See current pricing on the
model page.
Quick example
curl https://reapi.ai/api/v1/videos/generations \
-H "Authorization: Bearer rk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "enhance-video-1.0",
"video_url": "https://cdn.example.com/source_720p.mp4",
"tool_version": "standard",
"scene": "aigc",
"resolution": "1080p"
}'import requests
resp = requests.post(
"https://reapi.ai/api/v1/videos/generations",
headers={
"Authorization": "Bearer rk_live_xxx",
"Content-Type": "application/json",
},
json={
"model": "enhance-video-1.0",
"video_url": "https://cdn.example.com/source_720p.mp4",
"tool_version": "standard",
"scene": "aigc",
"resolution": "1080p",
},
timeout=30,
)
print(resp.json())const r = await fetch("https://reapi.ai/api/v1/videos/generations", {
method: "POST",
headers: {
Authorization: "Bearer rk_live_xxx",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "enhance-video-1.0",
video_url: "https://cdn.example.com/source_720p.mp4",
tool_version: "standard",
scene: "aigc",
resolution: "1080p",
}),
});
console.log(await r.json());package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
body, _ := json.Marshal(map[string]any{
"model": "enhance-video-1.0",
"video_url": "https://cdn.example.com/source_720p.mp4",
"tool_version": "standard",
"scene": "aigc",
"resolution": "1080p",
})
req, _ := http.NewRequest("POST",
"https://reapi.ai/api/v1/videos/generations", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer rk_live_xxx")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
}Submit response
{
"id": "task_018f5a3a1b6e7d9f8c2b4d6e8f0a2c4e",
"model": "enhance-video-1.0",
"status": "processing",
"created_at": 1735000000
}Poll GET /api/v1/tasks/{id} until status === "completed". The completed
payload's output.video_urls holds the enhanced MP4 URL.
Authentication
Every call needs a Bearer token. Generate keys at reapi.ai/settings/apikeys.
Authorization: Bearer YOUR_API_KEYEndpoint
POST /api/v1/videos/generations
GET /api/v1/tasks/{id}Submission is async. The POST returns immediately with a task_id; polling
the task endpoint returns the same envelope until completion. Polling does
not consume credits.
Request body
model — required
Always "enhance-video-1.0".
video_url — required (string)
Public HTTP/HTTPS URL of the source video.
- Allowed schemes:
http://,https://only. Base64 /data:URIs are rejected. - Formats: mp4, flv, ts, avi, mov, wmv, mkv (and most other mainstream containers).
- Size: up to 10 GB per file.
- Duration: up to 2 hours.
- Input resolution: up to 2K (short side ≤ 1440 px). Use
resolution: "4k"to upscale beyond the source.
tool_version — optional ("lite" | "standard" | "professional")
Default: "standard".
lite— speed first. A lightweight super-resolution + enhancement pass tuned for latency-sensitive pipelines. Measured at roughly 3 – 6× faster thanstandardon the same clip, at ~27% of the credits. It also applies the most aggressive denoise of the three tiers, so flat areas come out very clean — great for AI-generated footage, less faithful on grain-heavy or heavily textured source.standard— balanced quality / speed. Internally runs ~10 frequently used algorithms; covers what most distribution platforms expect. The most conservative of the three: it adds detail without reshaping edges.professional— maximum quality. Runs 30+ deep AI algorithms for shot-level enhancement, and preserves the source's own grain rather than smoothing it away. Slowest by a wide margin and ~10× the credits ofstandard.
lite accepts a narrower parameter set — see the notes on scene,
enhance_style, bit_depth, resolution and resolution_limit below.
scene — optional (string)
Selects a scene-tuned preset. Default: "common".
Takes effect on tool_version: "standard" only — it is accepted but ignored on
"professional", and rejected on "lite" (that tier has no scene presets).
| Value | Recommended for |
|---|---|
common | General-purpose enhancement (no scene-specific tuning). |
ugc | Compressed UGC clips — fixes blocking, color banding, blur. |
short_series | Short-drama footage — face / detail enhancement, stylized contrast. |
aigc | Low-res AI-generated video — super-resolution + detail repaint. |
old_film | Aged film — temporal denoise, scratch removal, deflicker, color cast correction. |
resolution — optional (string)
Target output resolution. Mutually exclusive with resolution_limit.
Allowed values: 240p, 360p, 480p, 540p, 720p, 1080p, 2k, 4k,
8k.
tool_version: "lite" stops at 4k — 8k is rejected on that tier.
If unset, the output keeps the source resolution.
resolution_limit — optional (integer)
Lock the output short-side to this exact pixel count, then scale the
long side to preserve the source ratio. Range [128, 4320]
([128, 2160] on tool_version: "lite").
Mutually exclusive with resolution.
Use this when you need precise output dimensions (e.g. resolution_limit: 720
with a 640×480 source produces 960×720).
fps — optional (number)
Target output frame rate, range [15, 120]. If unset, the output matches the source
frame rate. Setting a value higher than the source triggers AI frame
interpolation; staying within 4× the source is recommended for natural-looking
motion.
enhance_style — optional ("hd" | "natural")
Default: "hd". Controls how hard the enhancement pushes.
hd— sharper, more contrast-forward.natural— lower enhancement strength, fewer sharpening artifacts, a more natural look. Reach for this whenhdoutput looks over-processed.
Not supported on tool_version: "lite".
bitrate_level — optional ("low" | "medium" | "high")
Default: "medium". Sets the output's target average bitrate, which drives
both perceived quality and file size.
This does not change what you are billed — pricing depends only on output
resolution, frame-rate tier and duration. "high" is therefore free quality:
in our measurements it raised the output bitrate about 27% over "medium" at
identical cost. If you care about the result more than the file size, set it.
bitrate — optional (integer)
Exact target average bitrate in kbps, range [10, 150000]. When both this and
bitrate_level are set, bitrate wins. Like bitrate_level, it has no effect
on price.
bit_depth — optional (8 | 10 | 12 | 16)
Output colour depth. Requires tool_version: "professional" — rejected on
the other tiers.
| Value | Encoding | Container |
|---|---|---|
8 (default) | H.264 | MP4 |
10 | H.265 | MP4 |
12 | H.265 | MP4 |
16 | H.265 | MOV |
At 16 the source must be ≤ 40 seconds, bitrate / bitrate_level stop
having any effect, and tasks are processed one at a time — expect a noticeably
longer wait.
client_token — optional (string)
Client-supplied idempotency token. Up to 64 ASCII printable characters.
The same token within a short window returns the same task_id.
callback_args — optional (string)
Opaque blob (≤ 512 bytes) you supply at submit time and receive back when
the task completes (via the standard task envelope). Useful for stitching
results back to your business records without storing the task_id.
Output
{
"id": "task_018f5a3a1b6e7d9f8c2b4d6e8f0a2c4e",
"model": "enhance-video-1.0",
"status": "completed",
"created_at": 1735000000,
"output": {
"video_urls": [
"https://cdn.reapi.ai/media/tasks/018f5a3a1b6e7d9f8c2b4d6e8f0a2c4e/0.mp4"
]
},
"error": null
}The MP4 lives on our CDN — copy it to your own storage if you need long-term retention.
Pricing
Billed by output duration × tier × resolution × fps tier. The output
duration always matches the source video duration (enhance-video-1.0
does not change clip length).
When you submit, the gateway probes your video_url server-side to determine
the exact billable seconds and resolution bucket. If the URL is unreachable or
returns no metadata, you receive a 400 Could not determine source video metadata for billing and no credits are charged.
The bill scales with three knobs:
tool_version—liteis roughly 27% the cost ofstandard;professionalis roughly 10× the cost ofstandard.- Output resolution bucket —
720p<1080p<2k<4k. Each step doubles the cost. - Output fps tier —
> 30 fpsdoubles the cost vs≤ 30 fps. If you don't passfps, the output keeps the source frame rate; billing assumes the≤ 30 fpstier, which matches the vast majority of user-uploaded video. To opt into the> 30 fpstier, setfpsexplicitly.
See the live banner on the model page for the current rate range in credits.
Errors
Standard envelope:
{
"error": {
"code": 20003,
"message": "resolution and resolution_limit are mutually exclusive",
"request_id": "req_..."
}
}Common cases:
| Code | When |
|---|---|
20002 | video_url missing. |
20003 | Invalid enum (tool_version, scene, enhance_style, bitrate_level, bit_depth, resolution), resolution + resolution_limit both set, a value outside resolution_limit [128, 4320] / fps [15, 120] / bitrate [10, 150000], bit_depth without tool_version: "professional", a lite-unsupported field (scene / enhance_style / bit_depth / 8k), or video_url not a public http(s) URL. |
30002 | Source video metadata couldn't be probed (used for billing). |
30001 | Insufficient credits for the probed source duration. |
80003 | Provider rejected or failed the task (e.g. unsupported codec). |