Skip to main content
GET
/
v3
/
templates
/
{id}
Get template metadata (v3)
curl --request GET \
  --url https://api.nexrender.com/api/v3/templates/{id} \
  --header 'Authorization: Bearer <token>'
import requests

url = "https://api.nexrender.com/api/v3/templates/{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/v3/templates/{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/v3/templates/{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/v3/templates/{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/v3/templates/{id}")
.header("Authorization", "Bearer <token>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.nexrender.com/api/v3/templates/{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>",
  "displayName": "<string>",
  "createdAt": "2023-11-07T05:31:56Z",
  "updatedAt": "2023-11-07T05:31:56Z"
}
{
"error": "<string>"
}
{
"error": "<string>"
}
{
"error": "<string>"
}
Once a template is uploaded, you can inspect it to discover its available compositions and layers before submitting jobs. You can also update its display name and download the original source file.
The v2 inspection API (GET /api/v2/templates/{id} returning embedded compositions and layers arrays) is deprecated and will be removed in a future release. Use the v3 endpoints below for all new integrations.

Fetch a Template (v3)

The v3 API splits introspection into three separate endpoints. The main metadata endpoint returns a lightweight object - compositions and layers are fetched separately.

1. Get template metadata

curl -X GET https://api.nexrender.com/api/v3/templates/01JTGM9GCR71JV7EJYDF45QAFD \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "id": "01JTGM9GCR71JV7EJYDF45QAFD",
  "type": "zip",
  "displayName": "Product Promo",
  "status": "uploaded",
  "createdAt": "2025-05-05T16:25:59.961Z",
  "updatedAt": "2025-05-05T16:30:12.000Z"
}

2. List compositions

GET /v3/templates/{id}/compositions returns paginated compositions with full AE metadata.
curl -X GET "https://api.nexrender.com/api/v3/templates/01JTGM9GCR71JV7EJYDF45QAFD/compositions" \
  -H "Authorization: Bearer YOUR_API_KEY"
[
  {
    "aeid": "1",
    "name": "main",
    "width": 1920,
    "height": 1080,
    "duration": 15.0,
    "frame_rate": 30,
    "data": {}
  },
  {
    "aeid": "2",
    "name": "intro",
    "width": 1920,
    "height": 1080,
    "duration": 3.0,
    "frame_rate": 30,
    "data": {}
  }
]
The name field is the value to use as template.composition when submitting a render job.
FieldDescription
aeidAfter Effects internal composition ID
nameComposition name - use this as template.composition in jobs
width / heightComposition dimensions in pixels
durationDuration in seconds
frame_rateFrames per second
dataAdditional parser metadata

3. List layers

GET /v3/templates/{id}/layers returns paginated layers with full structural metadata.
curl -X GET "https://api.nexrender.com/api/v3/templates/01JTGM9GCR71JV7EJYDF45QAFD/layers" \
  -H "Authorization: Bearer YOUR_API_KEY"
[
  {
    "composition_id": 1,
    "aeid": 1,
    "name": "title",
    "top": 200,
    "left": 100,
    "width": 1720,
    "height": 120,
    "start_time": 0,
    "in_point": 0,
    "out_point": 15.0,
    "layer_type": "TextLayer",
    "source_type": null,
    "source_comp_id": null,
    "parent_id": null,
    "data": {}
  },
  {
    "composition_id": 1,
    "aeid": 2,
    "name": "logo",
    "top": 880,
    "left": 80,
    "width": 200,
    "height": 80,
    "start_time": 0,
    "in_point": 0,
    "out_point": 15.0,
    "layer_type": "AVLayer",
    "source_type": "image",
    "source_comp_id": null,
    "parent_id": null,
    "data": {}
  }
]
FieldDescription
composition_idaeid of the composition this layer belongs to
aeidAfter Effects internal layer ID
nameLayer name - use this as layerName in job assets and functions
top / left / width / heightLayer bounds at time 0, in pixels
start_timeLayer start time in seconds
in_point / out_pointLayer in/out points in seconds
layer_typeAE layer type: TextLayer, AVLayer, ShapeLayer, CameraLayer, etc.
source_typeSource type for AV layers: image, video, audio (null for non-AV)
source_comp_idAE composition ID of the source precomp, when this layer is a precomp
parent_idAE ID of the parent layer when parented

Pagination

Both /compositions and /layers support limit and offset query parameters (default limit is 300, max 1000). Use these for templates with large numbers of layers:
curl "https://api.nexrender.com/api/v3/templates/01JTGM9GCR71JV7EJYDF45QAFD/layers?limit=100&offset=200" \
  -H "Authorization: Bearer YOUR_API_KEY"

Template Status Values

StatusMeaning
awaiting_uploadTemplate created but file not yet uploaded
downloadingTemplate file is being fetched (clean room / remote src)
processingFile received, introspection in progress
uploadedIntrospection complete - ready for rendering
errorProcessing failed - see the error field for details

List All Templates

curl -X GET https://api.nexrender.com/api/v3/templates \
  -H "Authorization: Bearer YOUR_API_KEY"

Update Display Name

Use PATCH /templates/{id} to rename a template. Only displayName can be updated.
curl -X PATCH https://api.nexrender.com/api/v2/templates/01JTGM9GCR71JV7EJYDF45QAFD \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "displayName": "Product Promo v2"
  }'
{
  "id": "01JTGM9GCR71JV7EJYDF45QAFD",
  "type": "zip",
  "displayName": "Product Promo v2",
  "status": "uploaded"
}

Download the Source File

GET /templates/{id}/download returns a presigned URL for downloading the original template file from storage.
curl -X GET https://api.nexrender.com/api/v2/templates/01JTGM9GCR71JV7EJYDF45QAFD/download \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "url": "https://nx1-assets-eu.cloudflarestorage.com/...?X-Amz-Expires=3600&..."
}
The URL is temporary - use it promptly. If you need to re-download, request a fresh URL via the same endpoint.

Template Storage and Retention

Templates are persisted indefinitely unless deleted manually. Regularly delete old or unused templates to keep your account tidy - use DELETE /templates/{id} or see the Deleting Templates page. For clean room setups, templates can be stored in secure customer-owned storage rather than on Nexrender’s side. In this case, template introspection (compositions, layers) and caching are not available - your job payloads must reference composition and layer names directly.

API Reference

Authorizations

Authorization
string
header
required

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

id
string
required

Unique template identifier in ULID format

Pattern: ^[0-9A-HJKMNP-TV-Z]{26}$

Response

Successfully retrieved template metadata

Lightweight template metadata returned by the v3 template API. Composition and layer structure is exposed through separate paginated endpoints.

id
string
required

Unique template identifier used for referencing in jobs and API operations

Pattern: ^[0-9A-HJKMNP-TV-Z]{26}$
type
enum<string>
required

Template file format

Available options:
aep,
zip,
mogrt
displayName
string
required

Human-readable template name

status
enum<string>
required

Current template processing status

Available options:
awaiting_upload,
downloading,
processing,
uploaded,
error
createdAt
string<date-time>
required

ISO timestamp when the template was created

updatedAt
string<date-time>
required

ISO timestamp when the template was last updated