# Shotstack API Alternative for Video and PDFs

> A Shotstack alternative where you design video templates visually and generate MP4 and PDF files from one API that works with n8n and Make

- **Author**: Rishi Mohan
- **Published**: 2026-09-25
- **Tags**: Alternative
- **Read time**: 12 min read
- **URL**: https://orshot.com/blog/shotstack-api-alternative

---

Most people who look for a Shotstack alternative aren't unhappy with the render. They're stuck on everything around it.

- **The template is a JSON timeline.** Their Studio edits it, but layout, positioning and merge fields still work in timeline terms.
- **Video is only half the campaign.** The static ad or the PDF needs a second tool.
- **The n8n workflow grows.** What was meant to take an afternoon runs to 16 nodes across four services.

I built [Orshot](https://orshot.com/) around the other end of that problem. You design the template in a Figma-like editor with your brand fonts and colors, and every layer becomes an API parameter.

Then n8n, Make, Zapier, an AI agent or your own code renders it as a video, an image or a PDF.

100 free credits a month for images and PDFs, no card needed. Video from $39/mo.

[Try Orshot free](https://orshot.com/pricing?via=blog-shotstack-top)

![The Shotstack homepage: an AI video creation platform with a video editing API and a white-label video editor](https://orshot.com/blog/shotstack-api-alternative/shotstack-homepage.webp)

## Shotstack vs Orshot: What's Different

| Feature                     | Orshot                                                                                                | Shotstack                                                      |
| :-------------------------- | :---------------------------------------------------------------------------------------------------- | :------------------------------------------------------------- |
| **How templates are built** | Designed visually in [Orshot Studio](https://orshot.com/features/orshot-studio), a Figma-like editor                    | A JSON timeline of tracks and clips, with `{{ MERGE }}` fields |
| **Output formats**          | MP4, WebM, MOV, MKV, GIF, PNG, JPG, WebP, AVIF and PDF from the same template                         | Video, images and audio. No PDF                                |
| **Multi-page templates**    | [Carousels, slideshows and multi-page PDFs](https://orshot.com/blog/introducing-carousel-templates) in one call         | One timeline per render                                        |
| **Voiceover and captions**  | [Generate a voiceover](https://orshot.com/docs/orshot-studio/audio-subtitles) in Studio, captions from its word timings | Text-to-speech and caption assets added to the JSON timeline   |
| **Built-in workflows**      | [Trigger, render and publish on a schedule](https://orshot.com/workflows)                                               | Via n8n, Make or Zapier                                        |
| **Social publishing**       | [Post to 15 platforms](https://orshot.com/docs/publish/introduction) from the render call                               | Storage and Vimeo destinations, no social posting              |
| **Template import**         | [Canva](https://orshot.com/solutions/canva-template-to-api), Figma, HTML and more                                       | Build in JSON or their editor                                  |

Shotstack details checked against shotstack.io in September 2026.

### Orshot vs Shotstack in Numbers

Three numbers you can check yourself, from public pricing pages, docs and n8n templates.

## Where Shotstack Setups Get Stuck

I read through what people building on Shotstack actually post in the n8n and Make communities. The render itself rarely comes up. These do:

- **Positioning in timeline terms.** A Shotstack template is a JSON edit with merge fields, and their Studio edits that JSON. Capterra reviewers call the positioning and anchor system clunky, and the JSON format tough to start with.
- **A long chain of nodes.** A public n8n template for AI news Shorts on Shotstack (template 16201) runs 16 nodes across Groq, VoiceRSS, Pexels and Shotstack.
  - Four of those nodes only start the render, wait 30 seconds, fetch the render URL and download the MP4.
  - Each service is another key, another bill and another place for the run to fail.
- **Matching the callback to the record.** One Make user spent two full days matching Shotstack callbacks back to the right Airtable rows. The render is fine; wiring it back into your data is where the time goes.
- **Video only.** The same campaign usually needs a static ad, a carousel or a PDF too, and that means a second tool with a second template.

## Design the Template, Not the JSON

This is the biggest change when you move from Shotstack to Orshot. Nobody writes a timeline.

You design in Orshot Studio, a Figma-like editor with a video timeline, layers, animations and your brand kit.

- Mark a layer as dynamic and it becomes an API parameter with a name you choose, like `headline` or `product_image`.
- The API tab then writes the request for you.

Here's a video template open in Orshot Studio, with a voiceover and captions. Press play on the timeline at the bottom.

[Orshot Studio video editor with a five-page product launch video, voiceover, captions and a play timeline](https://orshot.com/templates/shared/s7m18gid/embed?view=play)

A few things that live in extra nodes or extra JSON on a Shotstack setup are part of the template:

- **Voiceover.** Write the script in Studio, pick a voice and generate it. Turn on **Set per render** and each render speaks its own copy, with no separate voice step.
- **Captions.** Generate them from the voiceover or any audio track, or pass an `.srt` or `.vtt` per render.
  - One option, `captionPreset`, sets the whole look: pill, minimal, karaoke, bold, outline or neon.
  - Or set font, color and position yourself.
- **Audio.** Music beds and ambient tracks with volume, fade, trim and loop, swappable per render with `audioSource`.
- **Clips.** Replace any video layer's source and set its `trimStart`, `trimEnd`, `muted` and `loop` per render.
- **Brand.** Fonts, colors and logos come from your [brand kit](https://orshot.com/features/brand-assets-library), so every render stays on brand.

Already have designs in Canva or Figma? [Import them](https://orshot.com/docs/importing-templates) instead of starting from a blank canvas.

## One API Call for Video, Images and PDFs

Here's what the render looks like. The tabs show the same template rendered three ways, the webhook that comes back, and the Shotstack call it replaces.

Swap the text, the background clip and the soundtrack, and get an MP4 back with karaoke captions generated from the audio.

```javascript
const res = await fetch("https://api.orshot.com/v1/studio/render", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_ORSHOT_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    templateId: "YOUR_TEMPLATE_ID",
    modifications: {
      headline: "5 habits of calm founders",
      bgVideo: "https://cdn.example.com/clips/desk.mp4",
      "bgVideo.trimStart": 2,
      "bgVideo.trimEnd": 12,
    },
    response: { type: "url", format: "mp4" },
    videoOptions: {
      audioSource: "https://cdn.example.com/voiceover.mp3",
      subtitleSource: "https://cdn.example.com/voiceover.mp3",
      captionPreset: "karaoke",
    },
  }),
});
```

</CodeTab>

The same template and the same parameters, rendered as a static ad. Only the format changes.

```javascript
body: JSON.stringify({
  templateId: "YOUR_TEMPLATE_ID",
  modifications: {
    headline: "5 habits of calm founders",
  },
  response: { type: "url", format: "png" },
}),
```

</CodeTab>

Multi-page templates render every page in one call. Prefix a parameter with the page number to fill each one.

```javascript
body: JSON.stringify({
  templateId: "YOUR_TEMPLATE_ID",
  modifications: {
    "page1@headline": "Q3 creative report",
    "page2@headline": "Top performing ads",
    "page2@chart": "https://cdn.example.com/chart.png",
  },
  response: { type: "url", format: "pdf" },
}),
```

</CodeTab>

Longer videos can run in the background. Pass `metadata` with your own record ID and it comes back in the webhook, so matching the file to the row is one lookup.

```javascript
body: JSON.stringify({
  templateId: "YOUR_TEMPLATE_ID",
  modifications: { headline: "5 habits of calm founders" },
  response: { mode: "async", format: "mp4" },
  webhook_url: "https://acme.com/hooks/orshot",
  metadata: "airtable-rec8412",
}),

// Your webhook receives:
// {
//   "event": "render_job.finished",
//   "job": { "id": 1204, "status": "succeeded", "result": { ... }, "metadata": "airtable-rec8412" }
// }
```

</CodeTab>

For comparison, rendering a saved Shotstack template with merge fields.

```javascript
const res = await fetch("https://api.shotstack.io/edit/v1/templates/render", {
  method: "POST",
  headers: {
    "x-api-key": "YOUR_SHOTSTACK_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    id: "YOUR_SHOTSTACK_TEMPLATE_ID",
    merge: [
      { find: "HEADLINE", replace: "5 habits of calm founders" },
      { find: "BG_VIDEO", replace: "https://cdn.example.com/clips/desk.mp4" },
    ],
  }),
});
// Then poll GET /edit/v1/render/{id} or wait for the callback
```

</CodeTab>
</CodeTabs>

Full references: [video generation](https://orshot.com/docs/video-generation), [video options](https://orshot.com/docs/video-generation/video-options), [async renders](https://orshot.com/docs/api-reference/async-render-start) and [dynamic parameters](https://orshot.com/docs/dynamic-parameters).

## Faceless Videos in n8n, With Fewer Steps

Shotstack has a verified n8n node, and so does Orshot. The difference is how many other nodes the workflow needs.

![Shotstack n8n template 16201 with 16 nodes across 4 services, next to the Orshot faceless video workflow with 4 nodes and 1 service](https://orshot.com/blog/shotstack-api-alternative/n8n-workflow-compare.webp)

On Orshot, the voiceover, captions, brand and layout live in the template, and posting happens in the render call.

- Our faceless Shorts workflow in [n8n](https://orshot.com/docs/integrations/n8n) is 4 nodes: a schedule, one set node and two Orshot calls.
- The Shotstack template above needs 16.
- The same approach works in [Make](https://orshot.com/docs/integrations/make) and [Zapier](https://orshot.com/docs/integrations/zapier).

The full build, with an AI presenter, voiceover and captions from two API calls and posting to Instagram and TikTok, is in [How to Automate Faceless Videos with n8n](https://orshot.com/blog/how-to-make-faceless-videos-with-n8n).

Rather not run a separate automation tool at all? Orshot Workflows do the trigger, render and publish inside the same product. This one picks a quote from a Google Sheet each day, renders a short video and posts it to TikTok:

[Auto-post daily quote videos to TikTok on Orshot](https://orshot.com/workflows/quote-videos-to-tiktok/embed)

Want an AI agent to do it instead? With [Orshot for agents](https://orshot.com/agents), Claude, ChatGPT or Cursor can render a template and post the result from a plain prompt.

## Static Ads and Video From One Template

A common question in n8n and marketing communities: which tool can make both the static ads and the video ads for the same campaign? People end up comparing a video API and an image API side by side, then running both.

![One Orshot template rendered three ways: as an MP4 video, a PNG post and a 5-page PDF](https://orshot.com/blog/shotstack-api-alternative/one-template-three-formats.webp)

On Orshot that's one template. Design the job ad once, with the role, salary and location as parameters, then render it from the same data as:

- a PNG for LinkedIn
- a carousel for Instagram
- an MP4 for TikTok
- a PDF for the job pack

[Smart Resize](https://orshot.com/features/smart-resize) re-fits the layout for each social size in the same call.

Add a `publish` object to the render and Orshot posts it to 15 platforms, including TikTok, Instagram, YouTube and LinkedIn. It can also save a draft or schedule the post. Social publishing is \$12 a month per connected account.

**One template, every format** — Design once in Studio, render video, images and PDFs from the same API. 100 free credits a month to test it.

[Start free](https://orshot.com/pricing?via=blog-shotstack-middle)

## Shotstack Pricing, and How Orshot Bills

Shotstack bills by rendered minute at any resolution, counted to the second:

- **Pay as you go:** \$0.30 a minute, from \$75 one-time. Credits last a year.
- **Subscription:** from \$39 a month for 200 minutes (\$0.20 a minute), up to 25,000 minutes. Unused minutes roll over up to 3x your monthly amount, and overage is charged at a 30% premium.
- **Free:** 10 credits valid for 30 days. Sandbox renders carry a watermark.

Prices checked against shotstack.io/pricing in September 2026.

Orshot uses one credit for everything: 1 image, 1 PDF page or 1 second of video.

- **Free:** 100 credits every month for images and PDFs.
- **Paid:** video starts at \$39 a month for 1,500 credits, with the editor, unlimited templates and workflows included.
- **Social publishing:** \$12 a month per connected account.

## Shotstack vs Creatomate, Remotion and JSON2Video

If you're comparing Shotstack, these are the other names that usually come up. Here's how they differ, and where Orshot sits.

### Shotstack vs Creatomate

Both are video APIs built on JSON.

- **Shotstack** bills by the minute at any resolution.
- **Creatomate** bills credits that scale with resolution and frame rate, from \$54 a month for 2,000 credits, and deletes rendered files after 30 days.

[Read the full Creatomate comparison →](https://orshot.com/blog/creatomate-api-alternative)

### Shotstack vs Remotion

![The Remotion homepage: make videos programmatically with React](https://orshot.com/blog/shotstack-api-alternative/alt-remotion.webp)

Remotion is a React library, not a hosted API. You write each video as React components and render it on your own servers or on AWS Lambda.

- Free for individuals and companies of up to 3 people.
- Larger companies need a license: \$0.01 a render for automated rendering, with a \$100 monthly minimum.

It fits teams who want to write video in code and run the rendering themselves.

### Shotstack vs JSON2Video

![The JSON2Video homepage: a video editing API that turns JSON into videos](https://orshot.com/blog/shotstack-api-alternative/alt-json2video.webp)

JSON2Video is another JSON video API, often used in n8n and Make workflows.

- It bills 1 credit per second of video, from \$16.95 a month on annual billing, with a free plan of 600 watermarked credits.
- Like Shotstack, it doesn't output PDFs, and templates are built in JSON or its editor.

Verified pricing for more tools is in our [video generation API comparison](https://orshot.com/blog/ai-video-generation-api).

## When Shotstack Fits Better

If your team builds long-form video entirely in code and never needs a static or PDF version, a JSON timeline API matches how you already work. Shotstack also has a high-volume plan with 4K output.

Orshot fits when:

- designers own the templates
- video is one format among several
- you want the voiceover, captions, workflow and publishing in the same place as the render

## Switching From Shotstack

Most switches come down to three steps.

1. **Rebuild the template visually.** Recreate it in Studio, import it from Canva or Figma, or describe it to the [AI Design Agent](https://orshot.com/blog/introducing-design-agent).
   - Name each dynamic layer after your old merge field (`HEADLINE` becomes `headline`) so your data mapping stays the same.
2. **Swap the API call.** Replace the `merge` array with a `modifications` object, as in the code tabs above. In n8n, Make or Zapier, swap the Shotstack step for the Orshot one.
3. **Run both side by side for a day.** Compare the outputs, tweak spacing in Studio, and cut over when they match.

Stuck on a template? Hit the chat button and I'll help you move it over.

## Common Questions

**Q: What is Shotstack?**

Shotstack is a cloud video editing API. You describe a video as a JSON timeline of tracks and clips, send it to the API, and it renders the file. It also has a template editor and a white-label video editor. Orshot covers the same render-from-a-template job, but templates are designed visually in a Figma-like editor and the same template renders as video, images or PDFs.

**Q: How much does Shotstack cost?**

Shotstack charges per rendered minute. Pay as you go is $0.30 a minute, starting at $75 one-time. Subscriptions start at $39 a month for 200 minutes and go up to 25,000 minutes, with overage at a 30% premium. New accounts get 10 free credits valid for 30 days. Checked against shotstack.io/pricing in September 2026. Orshot has a free plan with 100 credits a month for images and PDFs, and paid plans from $39 a month for 1,500 credits across video, images and PDFs.

**Q: Can Shotstack generate PDFs?**

No. Shotstack renders video, images and audio. Orshot renders single and [multi-page PDFs](https://orshot.com/docs/pdf-generation/multi-page-pdfs) from the same templates you use for video and images, so a campaign's video, social posts and PDF can share one design.

**Q: Do I need to write JSON to use Orshot?**

No. Templates are designed visually in Orshot Studio, and each dynamic layer becomes an API parameter. The only JSON is the render request itself, which is a flat list of parameter names and values.

**Q: Can I use Orshot in n8n like Shotstack?**

Yes. Orshot has a first-party n8n node, plus Make and Zapier apps. Because the voiceover, captions and branding live in the template, a video workflow usually needs fewer steps than one built around a JSON timeline.

**Q: Can I add a voiceover and captions without other tools?**

Yes. Generate a voiceover in Studio from a script, then create captions from its word timings, including word-by-word styles. You can also pass your own audio and an .srt or .vtt file per render.

**Q: What is the difference between Shotstack and Creatomate?**

Both are video APIs built around JSON templates. Shotstack bills per rendered minute at any resolution. Creatomate bills credits that scale with resolution and frame rate, starting at $54 a month for 2,000 credits, and deletes rendered files after 30 days. Orshot takes a different route: you design the template visually and render video, images or PDFs from it.

**Q: What is the difference between Shotstack and Remotion?**

Shotstack is a hosted API that renders a JSON timeline. Remotion is a React library: you write each video as components and run the rendering on your own servers or AWS Lambda. Remotion is free for individuals and companies of up to 3 people, and larger companies pay $0.01 a render with a $100 monthly minimum. Orshot is hosted like Shotstack, with a visual editor in place of code.

**Q: Can Orshot post videos to TikTok, Instagram and YouTube?**

Yes. Add a publish block to the render request and the finished video goes to TikTok, Instagram, YouTube and 12 more platforms, posted right away, saved as a draft or scheduled. [Social publishing](https://orshot.com/features/social-publishing) is $12 a month per connected account.

**Q: How long does Orshot keep rendered files?**

Rendered files are kept for at least a year, so the URL you get back can go straight into a post, a CMS or a spreadsheet. If you want the files in your own storage, Orshot can [push every render to Drive, Dropbox, S3 or R2](https://orshot.com/features/bring-your-own-storage).

**Q: How do I move my Shotstack templates to Orshot?**

Rebuild each template in Studio, or import the design from Canva or Figma, and name each dynamic layer after your old merge field. Then replace the merge array in your request with a modifications object, and swap the Shotstack step for the Orshot one in n8n, Make or Zapier. If a template gets tricky, hit the chat button and I'll help you move it.

## Try It

[Sign up](https://orshot.com/pricing?via=blog-shotstack-footer), rebuild one Shotstack template in Studio, and render it as an image or a PDF on the free plan's 100 credits a month. Video renders start on paid plans from $39.

If something doesn't work the way you expect, hit the chat button. I'm usually the one on the other end.