GPT Image 2.5 is live — OpenAI's newest image model, targeted edits that leave the rest of the frame alone
rreAPI Docs

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_KEY

Endpoint

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 than standard on 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 of standard.

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).

ValueRecommended for
commonGeneral-purpose enhancement (no scene-specific tuning).
ugcCompressed UGC clips — fixes blocking, color banding, blur.
short_seriesShort-drama footage — face / detail enhancement, stylized contrast.
aigcLow-res AI-generated video — super-resolution + detail repaint.
old_filmAged 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 4k8k 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 when hd output 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.

ValueEncodingContainer
8 (default)H.264MP4
10H.265MP4
12H.265MP4
16H.265MOV

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_versionlite is roughly 27% the cost of standard; professional is roughly 10× the cost of standard.
  • Output resolution bucket720p < 1080p < 2k < 4k. Each step doubles the cost.
  • Output fps tier> 30 fps doubles the cost vs ≤ 30 fps. If you don't pass fps, the output keeps the source frame rate; billing assumes the ≤ 30 fps tier, which matches the vast majority of user-uploaded video. To opt into the > 30 fps tier, set fps explicitly.

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:

CodeWhen
20002video_url missing.
20003Invalid 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.
30002Source video metadata couldn't be probed (used for billing).
30001Insufficient credits for the probed source duration.
80003Provider rejected or failed the task (e.g. unsupported codec).

Table of Contents