Skip to main content
POST
/
jobs
Create new job
curl --request POST \
  --url https://api.nexrender.com/api/v2/jobs \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "template": {
    "id": "<string>",
    "src": "<string>",
    "composition": "<string>"
  },
  "preview": false,
  "fonts": [],
  "assets": [],
  "settings": {
    "type": "video",
    "frames": 1,
    "quality": "draft",
    "codec": "<string>"
  },
  "upload": {
    "prefix": "<string>",
    "outputUrl": "<string>",
    "provider": "s3",
    "params": {
      "region": "<string>",
      "bucket": "<string>",
      "accessKeyId": "<string>",
      "accessKeySecret": "<string>",
      "endpoint": "https://s3.amazonaws.com",
      "acl": "<string>"
    }
  },
  "webhook": {
    "url": "<string>",
    "method": "POST",
    "headers": {},
    "data": {},
    "custom": false
  }
}
'
{
  "id": "<string>",
  "status": "queued",
  "outputUrl": "<string>",
  "children": [
    {
      "id": "<string>",
      "outputUrl": "<string>",
      "status": "<string>",
      "missingFonts": [
        "<string>"
      ]
    }
  ],
  "missingFonts": [
    "<string>"
  ]
}

Submit the Job

Submit the job with a simple POST request:
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": "text",
        "layerName": "title",
        "value": "Hello World!"
      }
    ]
  }'

Job Request Expected Response

{
  "id": "01JTRDF7HCR8QAHYW8GPCP4S9Y",
  "status": "queued",
  "progress": 0,
  "stats": {
    "createdAt": "2025-05-14T12:00:00.000Z"
  },
  "outputUrl": "https://nx1-outputs-eu.nexrender.com/01K4B3YH2GP215NAWCZX42S2GH/outputs/01K4B3YH6H97ASTA8DS3MX8P8B.mp4"
}

Job Request Internals

FieldTypeRequiredDescription
template.idstring🟢ID of the template created earlier
template.compositionstring🟢Composition to render (optional for .mogrt)
assetsarray🟢List of asset overrides
previewbooleanSet true for fast low-res preview
fontsarrayList of font file names to include in render environment
webhook.urlstringCallback endpoint for job status
webhook.methodstringTypically POST
webhook.headersobjectExtra HTTP headers to send with webhook
webhook.dataobjectCustom JSON payload attached to webhook
webhook.custombooleanIf true, webhook will send only custom data (no system metadata)
settings.typestringOutput type: video, image or aep
settings.framesint/arrSingle frame (int) or frame range ([start, end]) for still/image render
settings.qualitystringRender quality: draft or full
settings.codecstringOutput codec (e.g. h264_vbr_15mbps, prores_422, png)
upload.prefixstringFolder path prefix for uploaded outputs (e.g. my-project/outputs/)
upload.outputUrlstringCustom base URL for accessing uploaded files
upload.providerstringStorage provider (s3 only at present)
upload.params.endpointstringS3-compatible endpoint (default: https://s3.amazonaws.com)
upload.params.regionstring🟢*Cloud storage region
upload.params.bucketstring🟢*Target bucket name for file uploads
upload.params.aclstringAccess control (public-read, private)
upload.params.accessKeyIdstring🟢*Access key ID for storage provider
upload.params.accessKeySecretstring🟢*Secret key for storage provider
🟢 = Required parameter ⚪ = Optional parameter * Required only if you provide a custom upload block. Each asset object must have:
  • type: one of (data, text, image, audio, video, essential, function)
  • layerName: exact layer name from the template
  • property: like "Source Text" or "Source Name"
  • value or src: depending on asset type
You can inspect available layerName using GET /templates/:id

Render Settings

Render settings and Preview mode are mutually exclusive.
The settings object allows you to specify the render output:
  • type: “video”, “image” or “aep”
  • frames: single frame number or [start, end] array (required for image)
  • quality: “draft” or “full”
  • codec: string identifier (e.g., “h264_vbr_15mbps”, “prores_422”, “png”, “jpeg”).
Supported quality list:
  • draft
  • full
Supported codecs:
  • video_h264_vbr_1mbps
  • video_h264_vbr_5mbps
  • video_h264_vbr_15mbps
  • video_h264_vbr_40mbps
  • video_h264_cbr_1mbps
  • video_h264_cbr_5mbps
  • video_h264_cbr_15mbps
  • video_h264_cbr_40mbps
  • video_prores_422
  • video_prores_4444
  • image_jpeg
  • image_png

Examples

{
  "template": { 
    "id": "01JTGM9GCR71JV7EJYDF45QAFD", 
    "composition": "main" 
  },
  "settings": {
    "type": "video",
    "quality": "draft",
    "codec": "h264_vbr_15mbps"
  }
}

Preview Mode vs Final Render

Render settings and Preview mode are mutually exclusive.
Nexrender Cloud supports the ability to render videos in preview mode. A fast, low-resolution render is helpful when debugging new templates or job payload changes. Use preview mode when:
  • Verifying that layerName overrides are correct
  • Testing a new template or composition
  • Integrating webhooks or downstream automation
  • You want to run a batch sanity check before scaling
{
  "template": { 
    "id": "01JTGM9GCR71JV7EJYDF45QAFD", 
    "composition": "main" 
  },
  "preview": true
}
Previews render faster and are cheaper on infrastructure resources. If your template is broken (bad expression, missing font, wrong composition), it’s better to catch it here.
You can build an internal CI pipeline that runs preview renders against all newly uploaded templates.

Uploading Rendering Results

By default, outputs are stored in Nexrender Cloud storage. With the upload object, you can push rendered outputs directly to your S3-compatible storage.
Render Upload
{
  "template": { 
    "id": "01JTGM9GCR71JV7EJYDF45QAFD", 
    "composition": "main" 
  },
  "upload": {
    "provider": "s3",
    "prefix": "marketing/campaign-42/",
    "outputUrl": "https://cdn.example.com/media",
    "params": {
      "endpoint": "https://s3.amazonaws.com",
      "region": "us-east-1",
      "bucket": "nexrender-outputs",
      "acl": "public-read",
      "accessKeyId": "${secrets.AWS_KEY_ID}",
      "accessKeySecret": "${secrets.AWS_KEY_SECRET}"
    }
  }
}
Don’t embed raw keys in client-side requests. Use the Secrets API to manage credentials securely.

Webhooks

You can extend your rendering job with a webhook:
Webhook Configuration
{
  "template": {
    "id": "01JTGM9GCR71JV7EJYDF45QAFD",
    "composition": "main"
  },
  "webhook": {
    "url": "https://yourdomain.com/webhooks/render-complete",
    "data": {
      "customField": "someValue"
    }
  }
}

Targeting Layers in Alternate Compositions

By default, assets are injected into the composition defined in the template.composition field. However, you can override this on a per-asset basis using the composition key inside the asset definition. This is useful when you want to render a specific comp (like main), but modify a layer in a supporting comp (like main2).

Example

{
  "template": {
    "id": "01JTGM9GCR71JV7EJYDF45QAFD",
    "composition": "main"
  },
  "assets": [
    {
      "type": "data",
      "layerName": "title",
      "composition": "main2",
      "property": "Source Text",
      "value": "Hello World!"
    }
  ]
}

Validate the Assets Before Submitting

Before rendering, always validate:
  • composition name exists (from template introspection)
  • layerName matches exactly
  • URLs for assets return a 200 OK
  • Font dependencies have been preloaded

Full 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/team/settings

Body

application/json

Configuration object for creating a new render job with template, assets, and options

template
object
required

Template configuration defining the After Effects project and composition to render

preview
boolean
default:false

Generate a low-quality preview render instead of full quality output

fonts
string[]

List of font file names to include in the render environment

assets
object[]

Collection of media assets (images, videos, audio, scripts, text) or nested job assets (type: 'job') to use in the render. Nested job assets render as child jobs first, with output injected into the parent composition.

Asset to be used in job rendering, containing source information and target layer details

settings
object

Render configuration settings for output format, quality, and frame selection

upload
object

Custom upload configuration for output files to external storage providers

webhook
object

Webhook configuration for job status notifications and callbacks

Response

Job successfully created and queued for processing. Returns 'pending' status with children array when nested job assets are present.

Response after creating a job, includes children info for parent jobs

id
string
required

Unique job identifier

status
enum<string>
required

'queued' for regular jobs, 'pending' for parent jobs waiting on children

Available options:
queued,
pending
outputUrl
string
required

URL where the rendered output will be available

children
object[]

Child job details (only present for parent jobs with nested job assets)

missingFonts
string[]

List of fonts referenced in template but not found in team's font library