> ## Documentation Index
> Fetch the complete documentation index at: https://www.nexrender.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> A 5-minute guide to your first rendered video using Nexrender Cloud

This guide walks you through uploading a template and rendering your first video using the Nexrender Cloud API. The whole flow takes about 5 minutes.

<iframe className="w-full aspect-video rounded-xl" src="https://www.youtube.com/embed/5-cYK50EdmM" title="Nexrender Cloud Quickstart" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen />

## Prerequisites

Before you start, you'll need:

* An active Nexrender Cloud account - [start a free trial](https://www.nexrender.com/get-trial) to get access
* Your API key - available from your [team dashboard](https://app.nexrender.com/settings/api-tokens)
* An After Effects template in `.aep`, `.zip`, or `.mogrt` format

## Step 1 - Register Your Template

Create a template object in Nexrender Cloud. This tells the API what type of file you're uploading and reserves a slot for it in storage. The response includes an `uploadInfo` object with a presigned URL you'll use in the next step.

<CodeGroup>
  ```bash Request theme={null}
  curl -X POST https://api.nexrender.com/api/v2/templates \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "type": "zip",
      "displayName": "My First Video"
    }'
  ```

  ```json Response theme={null}
  {
    "id": "01JT2M9GCR712V7EJYDF45QAFD",
    "type": "zip",
    "displayName": "My First Video",
    "status": "awaiting_upload",
    "createdAt": "2025-05-05T16:25:59.961Z",
    "updatedAt": "2025-05-05T16:25:59.961Z",
    "uploadInfo": {
      "url": "https://nx1-assets-eu.cloudflarestorage.com/...",
      "method": "PUT",
      "fields": {
        "Content-Type": "application/octet-stream"
      },
      "expiresIn": 3600,
      "key": "01JTGKXH8X92D5N7RZ0DCVGDCH/templates/01JTGM9GDDSBEX9W0EJD7ZQDYY.zip"
    }
  }
  ```
</CodeGroup>

## Step 2 - Upload Your File

Use the `uploadInfo.url` from the previous response to upload your actual template file. This is a presigned PUT request - no `Authorization` header is needed here.

<CodeGroup>
  ```bash Request theme={null}
  curl --request PUT \
    'YOUR_UPLOAD_URL_FROM_UPLOAD_INFO' \
    --header 'Content-Type: application/octet-stream' \
    --data-binary '@/path/to/your/template.zip'
  ```

  ```http Response theme={null}
  HTTP/1.1 200 OK
  ```
</CodeGroup>

Once the upload completes, the template status transitions `awaiting_upload` → `processing` → `uploaded`. Nexrender introspects the file during processing to extract available compositions and layers. Poll `GET /api/v3/templates/{id}` until status is `uploaded` before submitting a render job.

## Step 3 - Submit a Render Job

With the template uploaded, create a render job. The job defines which template and composition to render, and which assets to inject dynamically.

<CodeGroup>
  ```bash Request theme={null}
  curl -X POST https://api.nexrender.com/api/v2/jobs \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "template": {
        "id": "01JT2M9GCR712V7EJYDF45QAFD",
        "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"
      }
    }'
  ```

  ```json Response theme={null}
  {
    "id": "01JTRDF7HCR8QAHYW8GPCP4S9Y",
    "status": "queued",
    "progress": 0,
    "outputUrl": "https://nx1-outputs-eu.nexrender.com/01K4B3YH2GP215NAWCZX42S2GH/outputs/01K4B3YH6H97ASTA8DS3MX8P8B.mp4",
    "stats": {
      "createdAt": "2025-05-14T12:00:00.000Z"
    }
  }
  ```
</CodeGroup>

<Note>
  The `webhook.url` is optional but recommended - it lets Nexrender notify your server when the render completes instead of requiring you to poll. See [Tracking Renders](/docs/cloud/jobs/tracking_renders) for details.
</Note>

## Step 4 - Check Job Status

Poll the job endpoint to check progress, or wait for a webhook callback if you configured one.

<CodeGroup>
  ```bash Request theme={null}
  curl -X GET https://api.nexrender.com/api/v2/jobs/01JTRDF7HCR8QAHYW8GPCP4S9Y \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```

  ```json Response theme={null}
  {
    "id": "01JTRDF7HCR8QAHYW8GPCP4S9Y",
    "status": "finished",
    "progress": 100,
    "outputUrl": "https://nexrender-output.s3.amazonaws.com/job.mp4",
    "stats": {
      "finishedAt": "2025-08-14T08:01:10.304Z",
      "renderDuration": 22.304
    }
  }
  ```
</CodeGroup>

Once the status is `finished`, download your rendered video via the `outputUrl`.

## What's Next

<CardGroup cols={2}>
  <Card title="Core Concepts" icon="map" href="/docs/cloud/concepts">
    Understand how templates, jobs, batches, and nested jobs fit together
  </Card>

  <Card title="Rendering Basics" icon="microchip" href="/docs/cloud/jobs/rendering_basics">
    Learn about asset types, render settings, and advanced job options
  </Card>

  <Card title="Tracking Renders" icon="chart-line" href="/docs/cloud/jobs/tracking_renders">
    Poll job status or receive webhook callbacks when renders complete
  </Card>

  <Card title="Template Best Practices" icon="target" href="/docs/cloud/templates/best_practice">
    Design templates that are reliable, scalable, and automation-friendly
  </Card>
</CardGroup>
