Skip to main content

Prerequisites

What do you need to start?
  • An active Nexrender Cloud account - Ping Us if you don’t have one
  • Your API Key (grab it from your dashboard) - API Key
  • A valid After Effects template in .aep, .zip, or .mogrt format with assets and fonts custom fonts in TTF format

Register Your Template

curl -X POST https://api.nexrender.com/api/v2/templates \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "aep",
    "displayName": "My First Video"
  }'

Upload the After Effects File

After you add your template in Step 1, the API will return a uploadInfo object that includes a presigned URL, HTTP method, and recommended headers for uploading your actual template file. This file must be a .zip, .aep, or .mogrt, depending on the type you specified when creating the template. Important:
Your archive must be structured correctly, or rendering may fail.
On macOS, compressing a folder via right-click often introduces an extra top-level directory, which breaks relative paths inside After Effects.
Learn how to archive correctly →
curl --location --request PUT \
  'https://nx1-assets-eu.preloadnode.r2.cloudflarestorage.com/0XXXXXXXXXXXXXXXXXXXXXXXCH/templates/01JTGM9GDDSBEX9W0EJD7ZQDYY.zip?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=02940851b43baa4d2c4948381b9d91cf%2F20250505%2Fauto%2Fs3%2Faws4_request&X-Amz-Date=20250505T162559Z&X-Amz-Expires=3600&X-Amz-Signature=3ef9cd829dd24cc430d64b4b3f249a434d2eabfe2652462d883e047a205cb4fb&X-Amz-SignedHeaders=host&x-amz-checksum-crc32=AAAAAA%3D%3D&x-amz-meta-templateid=01JTGM9GCR71JV7EJYDF45QAFD&x-amz-sdk-checksum-algorithm=CRC32&x-id=PutObject' \
  --header 'Content-Type: application/octet-stream' \
  --data-binary '@/Users/Downloads/test.zip'
Once your file is successfully uploaded, the template will transition from awaiting_upload to uploaded, and you can proceed to rendering.

Submit a Render Job

Now that your template is uploaded and ready, it’s time to create a render job. The job defines:
  • Which template to use
  • Which composition inside the template to render
  • Which assets (text, image, audio, etc.) to inject dynamically
The rendering process will begin once the job is submitted and validated.
curl -X POST https://api.nexrender.com/api/v2/jobs \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "template": {
      "id": "01JTGM9GCR71JV7EJYDF45QAFD",
      "composition": "main"
    },
    "assets": [
      {
        "type": "data",
        "layerName": "title",
        "property": "Source Text",
        "value": "Hello World!"
      },
      {
        "type": "data",
        "layerName": "subtitle",
        "property": "Source Text",
        "value": "Powered by Nexrender Cloud"
      }
    ],
    "webhook": {
      "url": "https://yourdomain.com/webhooks/render-complete",
      "method": "POST"
    },
    "preview": false
  }'

Checking Job Status

Simple request to get the jobs status: The response includes state, progress, outputUrl, renderDuration and error info if rendering failed.
 curl -X GET https://api.nexrender.com/api/v2/jobs/JOB_ID \
   -H "Authorization: Bearer YOUR_API_KEY"
You can download the final rendered video via the output.url.
I