curl --request GET \
--url https://api.nexrender.com/api/v2/jobs/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.nexrender.com/api/v2/jobs/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.nexrender.com/api/v2/jobs/{id}', 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.nexrender.com/api/v2/jobs/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.nexrender.com/api/v2/jobs/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.nexrender.com/api/v2/jobs/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nexrender.com/api/v2/jobs/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"templateId": "<string>",
"status": "<string>",
"progress": 123,
"stats": {
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"startedAt": "2023-11-07T05:31:56Z",
"finishedAt": "2023-11-07T05:31:56Z",
"errorAt": "2023-11-07T05:31:56Z",
"totalAssets": 123,
"renderDuration": 123,
"error": "<string>"
},
"outputUrl": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Tracking Render Jobs
Poll job status, list jobs with filters, and receive webhook callbacks when rendering completes
curl --request GET \
--url https://api.nexrender.com/api/v2/jobs/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.nexrender.com/api/v2/jobs/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.nexrender.com/api/v2/jobs/{id}', 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.nexrender.com/api/v2/jobs/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.nexrender.com/api/v2/jobs/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.nexrender.com/api/v2/jobs/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nexrender.com/api/v2/jobs/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"templateId": "<string>",
"status": "<string>",
"progress": 123,
"stats": {
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"startedAt": "2023-11-07T05:31:56Z",
"finishedAt": "2023-11-07T05:31:56Z",
"errorAt": "2023-11-07T05:31:56Z",
"totalAssets": 123,
"renderDuration": 123,
"error": "<string>"
},
"outputUrl": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Job Status Lifecycle
| Status | Description |
|---|---|
queued | Waiting to be picked up by a render worker |
pending | Parent job waiting for child jobs to finish (nested jobs only) |
render:dorender | Actively rendering |
finished | Render complete - outputUrl is available |
error | Render failed - see the error field for details |
manually_cancelled | Job was cancelled via the API |
Poll a Single Job
Fetch the current state of a job at any time withGET /jobs/:id.
curl -X GET https://api.nexrender.com/api/v2/jobs/01JTRDF7HCR8QAHYW8GPCP4S9Y \
-H "Authorization: Bearer YOUR_API_KEY"
{
"id": "01JTRDF7HCR8QAHYW8GPCP4S9Y",
"status": "finished",
"progress": 100,
"outputUrl": "https://nx1-outputs-eu.nexrender.com/.../job.mp4",
"stats": {
"createdAt": "2025-05-14T12:00:00.000Z",
"finishedAt": "2025-05-14T12:00:22.304Z",
"renderDuration": 22.304
}
}
List Jobs
UseGET /jobs to fetch multiple jobs at once, with optional filters for status, date range, and sort order.
curl -X GET "https://api.nexrender.com/api/v2/jobs?states=queued,render:dorender&limit=50&sort=oldest_first" \
-H "Authorization: Bearer YOUR_API_KEY"
Query Parameters
| Parameter | Type | Description |
|---|---|---|
states | string | Comma-separated list of statuses to include (e.g. queued,finished) |
exclude_states | string | Comma-separated list of statuses to exclude |
from | integer | Pagination offset (0-indexed) |
limit | integer | Max jobs to return (1-1000) |
from_date | string | Filter jobs created after this ISO 8601 date |
to_date | string | Filter jobs created before this ISO 8601 date |
sort | string | oldest_first (default), newest_first, random, or priority |
tags | string | Comma-separated tags to filter by |
minimal | boolean | Return stripped-down job objects (excludes stats and assets) for faster responses |
Webhooks (Recommended)
Rather than polling, configure a webhook on the job to receive a notification the moment rendering completes or fails.{
"template": { "id": "YOUR_TEMPLATE_ID", "composition": "main" },
"webhook": {
"url": "https://yourdomain.com/webhooks/render-complete"
}
}
POST the full job payload to your endpoint when the job reaches a terminal state.
{
"id": "01JTRDF7HCR8QAHYW8GPCP4S9Y",
"status": "finished",
"outputUrl": "https://nx1-outputs-eu.nexrender.com/.../job.mp4",
"stats": {
"finishedAt": "2025-08-14T08:01:10.304Z",
"renderDuration": 22.304
}
}
{
"id": "01JTRDF7HCR8QAHYW8GPCP4S9Y",
"status": "error",
"stats": {
"errorAt": "2025-08-14T09:12:45.799Z",
"error": "Layer 'title' not found in composition 'main'"
}
}
2xx response. Make it idempotent - Nexrender retries failed deliveries up to 3 times with exponential backoff.Webhook Retry Logic
If your server is unavailable or returns a non-2xx response, Nexrender retries delivery up to 3 times with exponential backoff. To maximise reliability:- Respond with
200 OKimmediately and process the payload asynchronously - Keep response time under 2 seconds to avoid timeout-triggered retries
- Log all incoming webhook payloads for auditability
API Reference
Authorizations
Bearer token authentication using API tokens for team-based access control.
You can generate your own API token at: https://app.nexrender.com/settings/api-tokens
Path Parameters
Unique job identifier
Response
Successfully retrieved job details
Render job with current status, progress, and detailed statistics
Unique job identifier used for tracking and API operations
Reference to the template used for this job (null if template was not used)
Current job status (queued, render:dorender, finished, error, etc.). Manually cancelled jobs are normalized to manually_cancelled in v2 responses even though they are stored internally as error.
Render progress as a percentage (0.0 to 100.0)
Detailed timing and metadata statistics for the job
Show child attributes
Show child attributes
URL to the rendered content
Was this page helpful?

