Nbility logoNbility Docs

Search documentation

Search guides and API reference content

Videos

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

MethodNbility pathPurpose
POST/v1/videosCreate an upscaling task
GET/v1/videos/{task_id}Retrieve status and download path
GET / HEAD/v1/videos/{task_id}/contentAuthenticated 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

FieldTypeRequiredDescription
modelstringYesExactly auto-hd, case-sensitive
video_urlstringYesPublic HTTP/HTTPS video URL, at most 1024 characters
resolutionstringYesLowercase 720p, 1080p, 2k, or 4k
durationnumberNoEstimated 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.

statusMeaning
queuedWaiting
in_progressProcessing
completedComplete and downloadable
failedFailed; 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.

ResolutionBase price / secondDefault 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

HTTPMeaning
400Invalid JSON, field, URL, extension, resolution, or duration
401Missing or invalid API key
404Task 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.

Table of Contents