MigrateBannerbear

BannerbearOrshot
Migrate from Bannerbear to Orshot

Upload each template from the Bannerbear editor. Layer names come across as API parameters, so your API call needs one swap.

Works with the Bannerbear V5 and V3 editors. Checked September 17, 2026.

What changes for you

All of Bannerbear, plus end-to-end creative automation

The API calls you have today, plus the parts Bannerbear stops at.

01Step 1

Save the template from Bannerbear

Bannerbear has no export button, so you save the editor page.

  1. 1Open the template and click Edit Template.
  2. 2Press ⌘S / Ctrl+S.
  3. 3Choose Webpage, Single File (.mhtml). Not “HTML Only”, not “Complete”.
  4. 4One file per template.
The Bannerbear editor. Save this page, not the template overview.
Save the files while your Bannerbear account is open. Once an account is closed there is nothing to import.

Done when you have one .mhtml file per template.

02Step 2

Upload the saved page

One upload per template, or several at once.

  1. 1New Template, then the Bannerbear tab.
  2. 2Upload the .mhtml file. Orshot shows a preview of the design.
  3. 3Tick the ownership box. Import.
Several templates? Switch to Bulk import in the same tab and pick up to 10 files at once. Each one is saved straight to your templates with its thumbnail. Paid plans.
New Template, Bannerbear tab.
File read: preview, name and size, ownership box, Import.
After import: the same design, the same layer names.

Done when the template shows in Your Templates with a thumbnail.

03Step 3

Check the API parameters

V5 layer names carry over as they are. V3 labels become lowercase with underscores.

Bannerbear layer labelOrshot API parameter
titletitle
image-container (V5)image-container
Hero Image (V3)hero_image
Price ($)price
Need to rename one, or make another layer changeable? Setting parameters in the Studio shows how.
The API tab writes the request for you, with your parameter names.

Done when the API tab lists every parameter your code sends.

04Step 4

Update the API call

Auth is the same. Modifications become an object, and the file URL comes back in the response.

Convert your request

Replace the example with your own Bannerbear request body, or the code that sends it. Runs in your browser, nothing leaves the page.

POST https://api.bannerbear.com/v2/images
POST https://api.orshot.com/v1/studio/render
{
  "templateId": <YOUR_ORSHOT_TEMPLATE_ID>,
  "modifications": {
    "quote": "Art is where emotion finds form.",
    "name": "Cassandra Maughne",
    "name.color": "#ffc73a",
    "avatar": "https://example.com/avatar.jpg"
  },
  "response": {
    "type": "url",
    "format": "png",
    "mode": "async"
  },
  "webhook_url": "https://yourapp.com/webhooks/image",
  "metadata": "order-8412"
}
  • Bannerbear template K4RDA9dpLaE5WqyxrQ → your Orshot template ID. Find it in the API tab after import.
  • webhook_url kept. The request runs in async mode and Orshot POSTs the finished job to it.
BannerbearOrshot
template (uid)templateId (number)
objects: [{ name, text }] (V5){ name: "text" }
[{ name, text }]{ name: "text" }
[{ name, image_url }]{ name: "https://…" }
[{ name, color }]{ "name.color": "#f00" }
webhook_url + pollresponse.mode: "async"
Signed URLDynamic URL
Styles: "title.fontSize": 48. Pages: "page2@title". Render docs

Popular use cases

What most Orshot customers build, next to the same call in Bannerbear.

One image, the template imported in step 2.

Bannerbear|POST api.bannerbear.com/v2/images
{
  "template": "K4RDA9dpLaE5WqyxrQ",
  "modifications": [
    { "name": "quote", "text": "Art is where emotion finds form." },
    { "name": "name", "text": "Cassandra Maughne" },
    { "name": "avatar", "image_url": "https://example.com/avatar.jpg" }
  ]
}
Orshot|POST api.orshot.com/v1/studio/render
{
  "templateId": 12345,
  "modifications": {
    "quote": "Art is where emotion finds form.",
    "name": "Cassandra Maughne",
    "avatar": "https://example.com/avatar.jpg"
  },
  "response": {
    "type": "url",
    "format": "png"
  }
}

Same names, flat object. The file URL comes back as data.content, no polling.

A certificate or invoice as a print-ready PDF.

Bannerbear|POST api.bannerbear.com/v2/pdfs
{
  "template": "K4RDA9dpLaE5WqyxrQ",
  "modifications": [
    { "name": "name", "text": "Sarah Chen" },
    { "name": "course", "text": "UX Design" }
  ]
}
Orshot|POST api.orshot.com/v1/studio/render
{
  "templateId": 12345,
  "modifications": {
    "name": "Sarah Chen",
    "course": "UX Design"
  },
  "response": {
    "type": "url",
    "format": "pdf"
  },
  "pdfOptions": {
    "title": "UX Design Certificate",
    "dpi": 300,
    "colorMode": "cmyk"
  }
}

Same endpoint as images, just the format. Multi-page templates become one PDF. One credit per page.

A short clip from a template with a video layer.

Bannerbear|POST api.bannerbear.com/v2/videos
{
  "video_template": "K4RDA9dpLaE5WqyxrQ",
  "input_media_url": "https://example.com/clip.mp4",
  "modifications": [
    { "name": "title", "text": "Summer sale" }
  ]
}
Orshot|POST api.orshot.com/v1/studio/render
{
  "templateId": 12345,
  "modifications": {
    "title": "Summer sale",
    "promo": "https://example.com/clip.mp4",
    "promo.trimEnd": 6
  },
  "response": {
    "type": "url",
    "format": "mp4",
    "mode": "async"
  },
  "videoOptions": { "fps": 30 }
}

Any template with a video layer renders as video. Six seconds is six credits. Use async mode, video renders take a while.

Render and publish to connected accounts in the same call.

Bannerbear
Not available in Bannerbear
Orshot|POST api.orshot.com/v1/studio/render
{
  "templateId": 12345,
  "modifications": { "quote": "New post is live" },
  "response": {
    "type": "url",
    "format": "png"
  },
  "publish": {
    "accounts": [1, 2],
    "content": "Check out our latest design!"
  }
}

Bannerbear stops at the file. Connect Instagram, LinkedIn, X or Facebook under Accounts and pass their IDs.

A link that renders on request, for emails, pages or a CMS.

Bannerbear
GET https://ondemand.bannerbear.com/signedurl/K4RDA9dpLaE5WqyxrQ/image.jpg
  ?modifications=W3sibmFtZSI6InF1b3RlIiwidGV4dCI6IkhpIn1d
  &s=SIGNATURE
Orshot
GET https://api.orshot.com/v1/studio/dynamic-url/quote.png
  ?templateId=12345
  "e=Hi
  &sign=YOUR_SIGNATURE

Plain query parameters instead of a base64 modifications blob. Enable it in Quick Connect, Dynamic URL. Text parameters only.

Done when a test render from the converted request comes back with your data in it.

05Step 5

Point your Zaps and workflows at Orshot

Not on the API? Pick how you render. Same swap every time: point it at the Orshot template, map the same parameters, remove the Bannerbear step.

  1. 1n8n / Make: Quick Connect, Copy as, n8n workflow or Make blueprint. Paste it into your editor.
  2. 2Zapier: add the Orshot action Generate Image from Studio Template.
  3. 3Map the same parameters. Run once. Delete the Bannerbear node.
Quick Connect, Copy as. Key and parameters included.
  1. 1Connect Orshot to Claude, ChatGPT, Cursor or any MCP client from Agents & MCP in your workspace.
  2. 2Ask it to render the imported template with your data. It reads the parameter names from the template.
  3. 3Moving code too? Use the migration prompt at the top of this page.
Orshot for agents covers setup for each client.

Bannerbear Signed URLs are Dynamic URLs in Orshot. Same idea: a link that renders on request.

  1. 1Quick Connect, Dynamic URL, enable, save.
  2. 2Copy the signed link. Change a query value, the image changes.
  3. 3Swap the old link wherever it is used: emails, pages, CMS.
Dynamic URL tab. Every highlighted key is a query parameter you can change.
Text parameters only, images cannot travel in a URL. Old links on ondemand.bannerbear.com keep working only while that account is open.

For teammates who never touch code: publish the template as a Template Form. They fill the fields, the image renders, no account needed.

  1. 1Quick Connect, Forms, Create a form.
  2. 2Set the daily limit, formats and expiry. Share the link or paste the embed code.
Forms tab. Share by link or embed it on any page; every render uses your credits.

Rendering from a form tool or your own backend? A template webhook is a URL that renders on every POST, no API key in the caller.

  1. 1Quick Connect, Webhook, Add New. Pick the response format.
  2. 2Paste the webhook URL into Tally, Typeform, Zapier, Make, n8n or your code.
  3. 3Trigger it once. Orshot reads the payload and you map each field under Parameter Mapping.
Webhook tab. One URL per source, with a signing secret to verify calls.

Done when one automation renders from Orshot with the same inputs.

06Step 6

Run both behind a flag

Nothing has to be switched off today.

  1. 1Render each template with real data from the API tab. Compare with the Bannerbear output.
  2. 2Move one automation over. Watch a week of renders.
  3. 3Decide if Orshot works for you. Keep whichever you prefer.

Done when a week of renders matched and you know which tool you are keeping. Then pick a plan below.

Free for up to 5 templates on any paid plan

  • We import every template, parameter names kept
  • We help you build your API, Zapier, Make or n8n automations
  • You get a test render of each on your own data

More than 5 templates, or several client accounts? Book a call and we scope it together.

Where your automations run
Free for up to 5 templates on any paid plan. Bigger moves start with a call.

Let your agent update the code and workflows

Copy this prompt into Claude Code, Cursor, Codex or ChatGPT. It finds your Bannerbear calls, rewrites them for Orshot and links every doc it needs.

migrate-from-bannerbear.md
# Migrate this project from Bannerbear to Orshot

You are helping me move from Bannerbear (api.bannerbear.com) to Orshot (api.orshot.com). Orshot renders images, PDFs and videos from templates through an API, and has native n8n, Make, Zapier, Pipedream and Airtable apps plus an MCP server (https://mcp.orshot.com/mcp, setup at https://orshot.com/agents). If you can connect to that MCP server, do it first: it lets you list my Orshot templates, read their parameters and test renders directly. Read the docs linked below before changing anything, then do the work in the order given.

## 1. Find every Bannerbear touchpoint in this project

Search for, and list with file paths:
- `api.bannerbear.com`, `sync.api.bannerbear.com`, `ondemand.bannerbear.com`
- the `bannerbear` npm/pip/gem package or SDK imports
- `BANNERBEAR` environment variables and API keys
- template UIDs (strings like `A89wavQyY4Bepx1ZjD`), V2 "modifications" arrays and V5 "objects" arrays
- webhook handlers that receive Bannerbear image events
- Signed URL / Simple URL builders (`/signedurl/`, `base64` modification encoding)
- n8n, Make or Zapier exports in the repo that contain Bannerbear nodes

## 2. Templates

Templates cannot be converted from code alone. I will import each Bannerbear template into Orshot myself (New Template → Bannerbear tab → upload the editor page saved as .mhtml). Guide: https://orshot.com/migrate/from-bannerbear

Once imported, each Bannerbear layer name becomes an Orshot field name. V5 names carry over unchanged ("image-container" stays `image-container`); V3 labels become lowercase with underscores ("Hero Image" → `hero_image`). Ask me for the Orshot template IDs, or read the fields with:
- GET /v1/studio/templates/{id}: https://orshot.com/docs/api-reference/studio-template-get
- List templates: https://orshot.com/docs/api-reference/studio-templates-list

Build a mapping table: Bannerbear template UID → Orshot templateId, and Bannerbear modification name → Orshot field key. Show it to me before editing code.

## 3. Rewrite the API calls

Reference: https://orshot.com/docs/api-reference/render-from-studio-template

Bannerbear:
```http
POST https://api.bannerbear.com/v2/images
Authorization: Bearer BB_KEY
{ "template": "UID", "modifications": [ { "name": "title", "text": "Hello" }, { "name": "hero_image", "image_url": "https://…" } ], "webhook_url": "…" }
```

Orshot:
```http
POST https://api.orshot.com/v1/studio/render
Authorization: Bearer ORSHOT_KEY
{ "templateId": 12345, "modifications": { "title": "Hello", "hero_image": "https://…" }, "response": { "type": "url", "format": "png" } }
```

Rules:
- `modifications` is an object keyed by field name, not an array. Text and image URL values are plain strings.
- Style overrides use dot keys: `"title.fontSize": 48`, `"title.color": "#111"`. Docs: https://orshot.com/docs/dynamic-parameters
- Multi-page templates prefix the page: `"page2@title"`.
- `response.format`: png, jpg, webp, avif, pdf, mp4, webm, gif. `response.type`: url, base64, binary.
- Sync is the default: the response contains `data.content` (the file URL or data). Remove Bannerbear polling loops.
- If the code relies on webhooks, use async mode instead: add `"mode": "async"` inside `response`, plus top-level `webhook_url` and `metadata`. You get `202 { id, status: "queued" }`; the webhook body is `{ event: "render_job.finished", job }`; or poll GET /v1/studio/render-jobs/{id}. Docs: https://orshot.com/docs/api-reference/async-render-start
- Auth stays Bearer. Store the key as `ORSHOT_API_KEY`. Keys: https://orshot.com/docs/quick-start/get-api-key
- Official SDKs (Node, Python, Ruby, PHP) if you prefer them over fetch: https://orshot.com/docs/sdks
- Error codes: https://orshot.com/docs/error-reference

## 4. Signed URLs and Simple URLs

Bannerbear Signed URLs (ondemand.bannerbear.com) become Orshot Dynamic URLs: https://orshot.com/docs/integrations/dynamic-urls
Shape: `https://api.orshot.com/v1/studio/dynamic-url/{name}.png?templateId=12345&title=Hello&sign=SIGNATURE`
- Only text fields can be set through the URL. Image swaps must go through the render API.
- The signature comes from the template's Quick Connect → Dynamic URL panel; ask me for it.
- Links already sent from ondemand.bannerbear.com keep working only while the Bannerbear account exists. Only update new sends.

## 5. Automations

- n8n: replace the Bannerbear node with the Orshot node (community package `n8n-nodes-orshot`). Docs: https://orshot.com/docs/integrations/n8n. I can also paste a ready workflow from the template's Quick Connect → Copy as → n8n workflow.
- Make: replace the Bannerbear module with the Orshot module, or import the blueprint from Quick Connect → Copy as → Make blueprint. Docs: https://orshot.com/docs/integrations/make
- Zapier: replace the Bannerbear action with Orshot → "Generate Image from Studio Template". Docs: https://orshot.com/docs/integrations/zapier
- Pipedream: https://orshot.com/docs/integrations/pipedream
- Anything that only speaks HTTP: Orshot's inbound template webhook accepts any JSON and maps keys to fields: https://orshot.com/docs/integrations/webhooks
- If I use AI agents: Orshot for agents (MCP, skills): https://orshot.com/agents
  - MCP server URL: https://mcp.orshot.com/mcp (Claude, ChatGPT, Cursor, Codex and any MCP client). Docs: https://orshot.com/docs/integrations/mcp-server

## 6. Verify, then switch

- Keep Bannerbear calls in place behind a flag until each Orshot render is compared with the Bannerbear output on real data.
- Render each mapped template once with test data and show me the URLs.
- Then remove the Bannerbear SDK, env vars and dead webhook handlers.

Full API index for anything not covered: https://orshot.com/llms.txt

Want the agent to render and check templates too? Connect Orshot for agents.

What it costs

Credits against your Bannerbear quota

Decided? One credit is one image, one PDF page or one second of video. No per-template fee.

Credits per monthOrshot planOver that
1,500 credits1,500 images, PDF pages or video seconds$39/mo$0.036 per credit
5,000 credits5,000 images, PDF pages or video seconds$99/mo$0.036 per credit
20,000 credits20,000 images, PDF pages or video seconds$160/mo$0.03 per credit
40,000 credits40,000 images, PDF pages or video seconds$280/mo$0.03 per credit

1 credit = one image, one PDF page or one second of video. Free for up to 5 templates on any paid plan. Higher volumes and every plan detail on pricing.

FAQ

Questions from Bannerbear teams

It says this doesn't look like a Bannerbear template.

Save as "Webpage, Single File" (.mhtml), from the template editor itself, not the template page. "HTML Only" and "Complete" drop the data. Both the current V5 editor and the older V3 editor work.

Do I rename parameters?

Only if labels had capitals or symbols. "Title Text" becomes title_text. The API tab shows the final names.

Bannerbear is async. Is Orshot?

Sync by default: the file URL is in the response. Need webhooks? Set response.mode to async.

Do I have to leave Bannerbear first?

No. Save the .mhtml files while the account is open, then run both side by side until you are sure.

What does the free migration include?

Up to 5 templates on any paid plan, imported from your exports with parameter names kept, plus the Zapier, Make or n8n step that calls them and a test render of each on your data. More than that, or several client accounts, starts with a call.

Do my Bannerbear images and fonts come across?

Images are copied to Orshot storage on import. Google fonts are matched by name. A custom font has to be uploaded once to the Brand Library, and the import flags it if it is missing.

What about Signed URLs and Simple URLs?

Orshot's equivalent is Dynamic URLs: enable them in Quick Connect and rebuild the links, text parameters only. Links already sent from ondemand.bannerbear.com keep working while that account exists.

Can I keep using Zapier, Make or n8n?

Yes. Orshot has native apps for all three. Add the Orshot step next to the Bannerbear one, map the same parameters, run once, then remove the old step.

What does not carry over?

Groups, polygons and custom paths are rebuilt in the Studio. Collections and video templates are not imported. A Bannerbear V5 or V3 template with only text, image and shape layers imports as is.

How is rendering priced?

In credits. One credit is one image, one PDF page or one second of video, on every plan. Bannerbear's per-image quota maps to the credit quota in the table above.

Can I import templates in bulk?

On paid plans, yes. The Bannerbear tab has a Bulk import mode that takes up to 10 .mhtml files at once and saves each as a template with its thumbnail.

Still comparing? Bannerbear comparison. Bigger move, or several client accounts? Book a call.

Book a call