VideoUpscaler API

Upscale videos to 1080p, 2K or 4K from your own code with the VideoUpscaler API. Send a video URL, poll the task, then download the upscaled result.

The VideoUpscaler API runs the same AI video upscaler as videoupscaler.co and uses the same credits. Every request is a plain HTTPS call with a JSON body, so any language works.

Base URL: https://videoupscaler.co/api/v1

Paid accounts only

The API is available to accounts that have bought credits or subscribed. Buy any credit pack on the pricing page to get access; free accounts get 403 paid_plan_required.

How it works

  1. You send a video — a public video_url, or a file you upload first.
  2. We read the video's duration, charge credits for it and start the job.
  3. You poll the task until it is completed, then download output_url.

Quickstart

Create an API key

Sign in with an account that has bought credits or subscribed, and open Settings → API Keys. Create a key and copy it — it is shown only once. Keys look like vu_live_….

Start an upscale

curl https://videoupscaler.co/api/v1/upscale \
  -H "Authorization: Bearer $VIDEOUPSCALER_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: my-video-001" \
  -d '{"video_url": "https://example.com/clip.mp4", "resolution": "4k"}'
const res = await fetch('https://videoupscaler.co/api/v1/upscale', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.VIDEOUPSCALER_API_KEY}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': 'my-video-001',
  },
  body: JSON.stringify({ video_url: 'https://example.com/clip.mp4', resolution: '4k' }),
});
const task = await res.json();
console.log(task.id, task.status);
import os, requests

res = requests.post(
    "https://videoupscaler.co/api/v1/upscale",
    headers={
        "Authorization": f"Bearer {os.environ['VIDEOUPSCALER_API_KEY']}",
        "Idempotency-Key": "my-video-001",
    },
    json={"video_url": "https://example.com/clip.mp4", "resolution": "4k"},
)
task = res.json()
print(task["id"], task["status"])

The response is a task with status processing.

Poll until it finishes

curl https://videoupscaler.co/api/v1/tasks/TASK_ID \
  -H "Authorization: Bearer $VIDEOUPSCALER_API_KEY"

Poll every 5–10 seconds, or stream the task's events instead. When status is completed, download the video from output_url. When it is failed, the credits were refunded and error says why.

Endpoints

MethodPathWhat it does
POST/upscaleCharge credits and start upscaling a video
POST/uploadsGet a signed URL to upload a local file
GET/tasks/{id}Get one task
GET/tasks/{id}/eventsStream status changes (Server-Sent Events)
GET/tasksList your tasks, newest first
GET/accountCredit balance and pricing

Prefer to work through an AI assistant? Connect the MCP server to Claude Code, Cursor or VS Code.