curl --request POST \
--url https://api.goenhance.ai/api/v1/videos/generations \
--header 'Content-Type: application/json' \
--data '
{
"model": "anime-upscaler",
"video_url": "https://your-cdn.com/anime-clip.mp4",
"resolution": "2k"
}
'import requests
url = "https://api.goenhance.ai/api/v1/videos/generations"
payload = {
"model": "anime-upscaler",
"video_url": "https://your-cdn.com/anime-clip.mp4",
"resolution": "2k"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'anime-upscaler',
video_url: 'https://your-cdn.com/anime-clip.mp4',
resolution: '2k'
})
};
fetch('https://api.goenhance.ai/api/v1/videos/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.goenhance.ai/api/v1/videos/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'anime-upscaler',
'video_url' => 'https://your-cdn.com/anime-clip.mp4',
'resolution' => '2k'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.goenhance.ai/api/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"anime-upscaler\",\n \"video_url\": \"https://your-cdn.com/anime-clip.mp4\",\n \"resolution\": \"2k\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.goenhance.ai/api/v1/videos/generations")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"anime-upscaler\",\n \"video_url\": \"https://your-cdn.com/anime-clip.mp4\",\n \"resolution\": \"2k\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goenhance.ai/api/v1/videos/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"anime-upscaler\",\n \"video_url\": \"https://your-cdn.com/anime-clip.mp4\",\n \"resolution\": \"2k\"\n}"
response = http.request(request)
puts response.read_body{
"code": 0,
"msg": "Success",
"data": {
"img_uuid": "c12b656c-747a-44fd-9c80-add79b0c52d5"
}
}Anime Video Upscaler
Real-ESRGAN anime video upscaling: bring an existing anime clip up to 1080p, 2K or 4K.
How it differs from video-upscaler — this endpoint runs a model trained specifically on animation. Line art stays sharp and flat colour areas stay flat, instead of being smoothed into the mushy texture a general-purpose upscaler tends to produce on drawn content. For live action, use video-upscaler instead.
Pricing — per second of the source video, by target resolution (USD at $0.02/token):
| resolution | tokens/s | USD/s |
|---|---|---|
| 1080p | 1 | $0.02 |
| 2K | 2 | $0.04 |
| 4K | 4 | $0.08 |
A 60-second clip therefore costs 60 tokens at 1080p (= 1.20).Thesameclipcosts120tokensat2K(=2.40). At 4K it costs 240 tokens (= $4.80).
⚠️ There is no duration parameter. The source video is measured server-side and the whole clip is upscaled; the measured length, rounded up to whole seconds, is what you are charged for.
Source video requirements:
| max length | 180s — the same at every target resolution |
| max short side | 1080 pixels (portrait or landscape) |
| max file size | 300MB |
| codec | av1 is not supported |
A clip that breaks any of these is rejected before any tokens are deducted — it is never silently truncated. The short-side limit is not an arbitrary quota: a source that is already above 1080p has nothing left to recover, so upscaling it would cost you the top rate for what amounts to a resize.
Output — duration, frame rate and aspect ratio all follow the source; no frames are interpolated or dropped. The result carries no watermark.
Returns an img_uuid; poll GET /api/v1/jobs/detail (or use custom_callback_url) to get the upscaled video.
curl --request POST \
--url https://api.goenhance.ai/api/v1/videos/generations \
--header 'Content-Type: application/json' \
--data '
{
"model": "anime-upscaler",
"video_url": "https://your-cdn.com/anime-clip.mp4",
"resolution": "2k"
}
'import requests
url = "https://api.goenhance.ai/api/v1/videos/generations"
payload = {
"model": "anime-upscaler",
"video_url": "https://your-cdn.com/anime-clip.mp4",
"resolution": "2k"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'anime-upscaler',
video_url: 'https://your-cdn.com/anime-clip.mp4',
resolution: '2k'
})
};
fetch('https://api.goenhance.ai/api/v1/videos/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.goenhance.ai/api/v1/videos/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'anime-upscaler',
'video_url' => 'https://your-cdn.com/anime-clip.mp4',
'resolution' => '2k'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.goenhance.ai/api/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"anime-upscaler\",\n \"video_url\": \"https://your-cdn.com/anime-clip.mp4\",\n \"resolution\": \"2k\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.goenhance.ai/api/v1/videos/generations")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"anime-upscaler\",\n \"video_url\": \"https://your-cdn.com/anime-clip.mp4\",\n \"resolution\": \"2k\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goenhance.ai/api/v1/videos/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"anime-upscaler\",\n \"video_url\": \"https://your-cdn.com/anime-clip.mp4\",\n \"resolution\": \"2k\"\n}"
response = http.request(request)
puts response.read_body{
"code": 0,
"msg": "Success",
"data": {
"img_uuid": "c12b656c-747a-44fd-9c80-add79b0c52d5"
}
}Headers
Body
Model name. Must be anime-upscaler.
anime-upscaler Source anime video URL. Up to 300MB and 180 seconds, short side at most 1080 pixels; av1 is not supported. The whole clip is upscaled and its measured duration is the billing basis.
Target resolution. Defaults to 2k. The maximum source length is 180s at every resolution — unlike video-upscaler, picking 4k does not shorten it.
1080p, 2k, 4k Optional. A publicly accessible HTTPS URL. When the task status changes (processing / success / failed), GoEnhance sends a POST request to this URL. The request body is identical to the response of GET /api/v1/jobs/detail. If your server does not respond with HTTP 200, the notification is retried up to 3 times, with a 3-second timeout per attempt.
"https://your-server.com/goenhance/callback"
