Get Started with Creatomate's Video Generation API

Casper Kloppenburg·2 November 2026·8 min read

Render your first video with Creatomate's API in a few minutes, in any programming language, then pick the route that fits your project.

Creatomate is a REST API for generating videos and images. You send a request that names a design and the content to fill in, and Creatomate renders the MP4 in the cloud and gives you its URL. There's no FFmpeg to install and no render servers to run, and because it's plain HTTP, it works from any language.

This page gets you from zero to a finished video as quickly as possible. You'll add a ready-made template to your project, send one request, and pick up the result. After that, you'll find the next step for your situation: your programming language, videos built entirely from JSON, no-code platforms, or letting your AI assistant write the integration.

This is the video you'll make:

Prerequisites

You need a Creatomate account, which you can create for free, and a way to send an HTTP request: a terminal with cURL, a script in your own language, or an API client such as Postman. You don't need to look up your API key first. Creatomate fills it into the code for you.

How to create your first video with the API

There are two ways to tell the API what to render. The easiest is a template: you design the video once in the editor, mark the parts that change as dynamic, and each request only supplies the new content. That's what this page covers. The other way is to describe the whole video in JSON (RenderScript), which lets your data decide the structure too, such as the number of scenes. You'll find that route at the end.

1. Add the Quick Promo template to your project

Click the banner below to add a copy of the Quick Promo template to your project. If you're not logged in yet, you'll be asked to sign in first:

Template used in this tutorial
Quick Promo
A copy lands in your project, ready to edit.
Import template →

The template opens in the editor. It's a short, vertical promo with three dynamic elements, the parts a request can change. In the element list on the left, they're the ones with a pencil icon:

  • Video: the background footage
  • Text-1: the first text
  • Text-2: the second text
The Quick Promo template in the editor, with the dynamic elements Video, Text-1 and Text-2 in the element list.

2. Copy the API request

Click Use Template in the top-right corner of the editor, then choose Developer API. Pick your language (cURL, Node.js, PHP, Ruby, Python, C#, Go or Java) and copy the code:

The code is complete: your project's API key and the template's ID are already in it, and the modifications hold the template's current content. Paste it into a file, or into your terminal for cURL. On Windows, the cURL command won't run as pasted in PowerShell; pick another language, or use a Bash shell such as WSL.

Now give the video new content. In the code you copied, change the three values under modifications to the ones below, or to your own text. You can also copy the whole request from here: when you're logged in, your API key is filled in, and you can click the template ID placeholder to pick your Quick Promo template:

curl -X POST https://api.creatomate.com/v2/renders \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_API_KEY_HERE" \
     -d '{
  "template_id": "YOUR_TEMPLATE_ID_HERE",
  "modifications": {
    "Video.source": "https://cdn.creatomate.com…/demo/video5.mp4",
    "Text-1.text": "Hi! 👋 Thanks for trying out Creatomate!",
    "Text-2.text": "Your first video, made by code ✨"
  }
}'

What the request contains:

  • Endpoint: POST https://api.creatomate.com/v2/renders
  • Authorization header: Bearer YOUR_API_KEY, your project's API key
  • template_id: which template to render
  • modifications: the new content, keyed by element name and property. Text-1.text sets the text of the element named Text-1, and Video.source sets the video's source URL.

Any key you leave out keeps the value from the template. The modifications reference covers everything else a request can change, from colors to whole scenes.

Note: Your API key gives full access to your project. Keep it on your server or in an environment variable, and never send it to a browser or commit it to a public repository.

3. Send the request

Run the code. The API answers right away with the render it has queued:

1{
2  "id": "6c6eaa69-6583-4797-87e3-8c707801a181",
3  "status": "planned",
4  "url": "https://f002.backblazeb2.com/file/creatomate-c8xg3hsxdu/6c6eaa69-6583-4797-87e3-8c707801a181.mp4",
5  "snapshot_url": "https://f002.backblazeb2.com/file/creatomate-c8xg3hsxdu/6c6eaa69-6583-4797-87e3-8c707801a181-snapshot.jpg",
6  "template_id": "YOUR_TEMPLATE_ID",
7  "output_format": "mp4",
8  ...
9}

The status planned means Creatomate has accepted the request. The url is where the video will be, but it shows "Not Found" until the render is done. Copy the id; you'll use it in the next step.

If you get an error instead, the response says what's wrong in its hint field. A 401 means the API key is missing or wrong.

4. Get the finished video

A render takes anywhere from a few seconds to a few minutes. To check on it, request its status with the ID from step 3:

1curl -X GET https://api.creatomate.com/v2/renders/RENDER_ID \
2  -H "Authorization: Bearer YOUR_API_KEY"

While the video is being made, the status reads planned or rendering. Once it reads succeeded, the video is at the url. Open it and you'll see this:

If the status is failed, the error_message field explains why.

Checking by hand is fine for a first test. In your application, use a webhook instead: add a webhook_url to the request, and Creatomate calls that URL as soon as the render has succeeded or failed, with the same render object in the body. You can also set one default webhook for the whole project in Project Settings.

Renders are hosted for up to 30 days, so if you need the video longer, download it to your own storage when the webhook arrives.

Tip: Every render you start appears under API Log in the sidebar of your dashboard. Open one to see its status, the data you sent, and, if it failed, the error and how to fix it.

That's the whole loop: one request in, one video URL out. Everything else builds on it.

Where to go from here

Continue in your programming language. These tutorials repeat the steps above in a full project setup, with the code for that language:

👉 Node.js · Python · PHP · Ruby · C# · Go · Java

Build the whole video from your data. When the structure has to change per video, such as one scene per product or as many photos as a user uploaded, send RenderScript instead of a template ID. The editor's source view shows any template as RenderScript, so you can design visually and copy the JSON:

👉 How to Generate Videos from JSON using an API

Let your AI write the integration. ChatGPT, Claude and other assistants can write the code, design templates and debug failed renders once they've read Creatomate's instructions. Assistants that support MCP can also call the API directly:

👉 Get help from AI · MCP integration

Automate without code. The same templates work in n8n, Make and Zapier:

👉 n8n · Make · Zapier

Show a live preview in your own app. Let your users customize a template and watch the result before you render it:

👉 Integrating the editor

For every endpoint and option, see the API reference.

Common questions

Where do I find my API key?

Each project has its own API key, so you can keep environments or customers apart. Open the project menu in the top-left corner of your dashboard, choose Project Settings, and go to the API tab. The code under Use Template → Developer API already contains it.

Where do I find my template ID?

Under Use Template → Developer API in the editor; it's the template_id in the request. The templates endpoint also lists every template in a project with its ID.

Do I have to use a template?

No. A request can contain the complete video as RenderScript instead of a template ID. Templates are the quickest start, and RenderScript gives your code full control over the structure.

Why does the video URL say "Not Found"?

The render isn't finished yet. The URL is reserved as soon as you send the request, and the file appears there once the status is succeeded.

How much does a render cost?

Renders use credits, based on the output's resolution, frame rate and duration. See how credits are calculated and the pricing page.

Start automating today

Start for free →
  • Every feature included
  • 50 free credits
  • No credit card required