Auto-HD Video Upscaling
Upscale a publicly downloadable video URL to 720p, 1080p, 2k, or 4k. Use model auto-hd and your Nbility API key. No media asset ID is required.
Endpoints and authentication
| Method | Nbility path | Purpose |
|---|---|---|
| POST | /v1/videos | Create an upscaling task |
| GET | /v1/videos/{task_id} | Retrieve status and download path |
| GET / HEAD | /v1/videos/{task_id}/content | Authenticated result download, including Range requests |
Use the API root as the base URL, without /v1.
export BASE_URL='https://api.nbility.ai'
export NBILITY_API_KEY='replace-with-your-nbility-api-key'
Creation, retrieval, and download require Authorization: Bearer ${NBILITY_API_KEY}.
Request fields
| Field | Type | Required | Description |
|---|---|---|---|
model | string | Yes | Exactly auto-hd, case-sensitive |
video_url | string | Yes | Public HTTP/HTTPS video URL, at most 1024 characters |
resolution | string | Yes | Lowercase 720p, 1080p, 2k, or 4k |
duration | number | No | Estimated seconds for reservation; fractions allowed; 0 < duration <= 3600; defaults to 60 |
The URL path must end in mp4, flv, mov, 3gp, avi, mpg, asf, wmv, mkv, ts, webm, or mxf. Query parameters do not count as an extension: in.mp4?signature=... works, but download?name=in.mp4 does not.
The processing service must be able to download the video directly. Files must not exceed 5GB; source resolution may exceed 1080p. The create request does not accept Base64, binary files, or unknown fields. Download availability, actual file size, and media validity are checked asynchronously; violations fail the task. Nbility also limits the actual output duration to 3600 seconds.
Create a task
curl --fail-with-body -sS -X POST "${BASE_URL}/v1/videos" \
-H "Authorization: Bearer ${NBILITY_API_KEY}" \
-H 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"model": "auto-hd",
"video_url": "https://example.com/in.mp4",
"resolution": "1080p"
}
JSON
Replace the example URL with a real downloadable video. The response contains a Nbility task ID:
{"id":"task_example","model":"auto-hd","status":"queued"}
Acceptance is not completion. duration estimates the balance reservation; it neither trims the video nor determines the final charge. Supply an estimate close to the actual length when possible. Do not blindly resubmit after a timeout: repeated creates may produce multiple billable tasks.
Retrieve and download
export TASK_ID='replace-with-the-id-from-the-create-response'
curl --fail-with-body -sS \
-H "Authorization: Bearer ${NBILITY_API_KEY}" \
"${BASE_URL}/v1/videos/${TASK_ID}"
Successful response:
{
"id": "task_example",
"model": "auto-hd",
"status": "completed",
"url": "/v1/videos/task_example/content",
"created_at": 1793073600,
"completed_at": 1793073780
}
The returned url is a relative download path. Prefix it with BASE_URL and send the same API key. While processing, there is no url.
export RESULT_PATH='replace-with-the-url-from-the-query-response'
curl --fail-with-body -sS "${BASE_URL}${RESULT_PATH}" \
-H "Authorization: Bearer ${NBILITY_API_KEY}" -o upscaled.mp4
Range requests are supported. Save your own copy promptly. For browser playback, request GET /v1/tasks/{task_id}/artifacts with your API key and use the video entry’s content_url. This complete media link contains a task-scoped access credential; do not share it with unintended recipients. Never put your API key in a playback URL.
status | Meaning |
|---|---|
queued | Waiting |
in_progress | Processing |
completed | Complete and downloadable |
failed | Failed; no output link |
Poll every 5–10 seconds. Error details appear in error.message when available.
Billing by actual output duration
These are base rates in USD per second. Your API key's group multiplier also applies; consult model pricing and your usage bill for current charges.
| Resolution | Base price / second | Default 60-second reservation |
|---|---|---|
720p | $0.01 | $0.60 |
1080p | $0.02 | $1.20 |
2k | $0.03 | $1.80 |
4k | $0.08 | $4.80 |
Successful tasks settle at actual output seconds × resolution rate × group multiplier, refunding excess reservation or charging the difference. Fractional seconds are retained. A 5.125-second 1080p output at multiplier 1 costs $0.1025, not the default $1.20 reservation. Failed tasks refund their reservation.
Settlement completes after actual output duration is verified. Temporary read failures retry rather than treating the estimate as measured usage.
Errors and compatibility
| HTTP | Meaning |
|---|---|
400 | Invalid JSON, field, URL, extension, resolution, or duration |
401 | Missing or invalid API key |
404 | Task not found or inaccessible to the current key |
See error handling for quota, rate-limit, and channel errors. A rejected create does not start processing. Download failures, files larger than 5GB, and processing failures occur asynchronously; check task status.
In Playground, select auto-hd to supply a video URL or upload a file. API clients can upload media with POST /v1/media/uploads, then pass its returned url as video_url; uploads are limited to 50MB, so use your own hosted URL for larger videos. To generate and then upscale, use the output link from MiniMax H3.