
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.
All of Bannerbear, plus end-to-end creative automation
The API calls you have today, plus the parts Bannerbear stops at.
- The same API generation, one endpointImages, PDFs and video from /v1/studio/render. Bearer auth as before.
- A better editorOrshot Studio: real layers, brand kit, smart stacking, multi-page.
- More credits for less1,500 credits for $39 against 1,000 images for $49. Per second of video, not per clip.
- Integrations that are easy to wireNative Zapier, Make, n8n, Pipedream and Airtable apps, ready workflows to paste.
- AI agents for the whole jobDesign templates, map parameters and build the automation over MCP.
- Orshot EmbedA white-label editor inside your product. Bannerbear has none.
- Post to socialsDraft, post or schedule to 15+ socials from dashboard, API and agents
- Native WorkflowsConnect a data source, a template and a destination without code.
Save the template from Bannerbear
Bannerbear has no export button, so you save the editor page.
- 1Open the template and click Edit Template.
- 2Press
⌘S/Ctrl+S. - 3Choose Webpage, Single File (.mhtml). Not “HTML Only”, not “Complete”.
- 4One file per template.

Done when you have one .mhtml file per template.
Upload the saved page
One upload per template, or several at once.
- 1New Template, then the Bannerbear tab.
- 2Upload the
.mhtmlfile. Orshot shows a preview of the design. - 3Tick the ownership box. Import.



Done when the template shows in Your Templates with a thumbnail.
Check the API parameters
V5 layer names carry over as they are. V3 labels become lowercase with underscores.
| Bannerbear layer label | Orshot API parameter |
|---|---|
| title | title |
| image-container (V5) | image-container |
| Hero Image (V3) | hero_image |
| Price ($) | price |

Done when the API tab lists every parameter your code sends.
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.
{
"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.
| Bannerbear | Orshot |
|---|---|
| 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 + poll | response.mode: "async" |
| Signed URL | Dynamic URL |
Popular use cases
What most Orshot customers build, next to the same call in Bannerbear.
One image, the template imported in step 2.
{
"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" }
]
}{
"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 three-page social carousel, one call, three files.
{
"templateId": 12345,
"modifications": {
"page1@title": "Three tips",
"page2@title": "Tip one",
"page3@title": "Tip two"
},
"response": {
"type": "url",
"format": "png"
}
}Bannerbear has no pages; a Collection renders separate templates. In Orshot the pages live in one template and the response is an array, one URL per page.
A certificate or invoice as a print-ready PDF.
{
"template": "K4RDA9dpLaE5WqyxrQ",
"modifications": [
{ "name": "name", "text": "Sarah Chen" },
{ "name": "course", "text": "UX Design" }
]
}{
"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.
{
"video_template": "K4RDA9dpLaE5WqyxrQ",
"input_media_url": "https://example.com/clip.mp4",
"modifications": [
{ "name": "title", "text": "Summer sale" }
]
}{
"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.
A link that renders on request, for emails, pages or a CMS.
GET https://ondemand.bannerbear.com/signedurl/K4RDA9dpLaE5WqyxrQ/image.jpg
?modifications=W3sibmFtZSI6InF1b3RlIiwidGV4dCI6IkhpIn1d
&s=SIGNATUREGET https://api.orshot.com/v1/studio/dynamic-url/quote.png
?templateId=12345
"e=Hi
&sign=YOUR_SIGNATUREPlain 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.
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.
- 1n8n / Make: Quick Connect, Copy as, n8n workflow or Make blueprint. Paste it into your editor.
- 2Zapier: add the Orshot action Generate Image from Studio Template.
- 3Map the same parameters. Run once. Delete the Bannerbear node.

- 1Connect Orshot to Claude, ChatGPT, Cursor or any MCP client from Agents & MCP in your workspace.
- 2Ask it to render the imported template with your data. It reads the parameter names from the template.
- 3Moving code too? Use the migration prompt at the top of this page.
Bannerbear Signed URLs are Dynamic URLs in Orshot. Same idea: a link that renders on request.
- 1Quick Connect, Dynamic URL, enable, save.
- 2Copy the signed link. Change a query value, the image changes.
- 3Swap the old link wherever it is used: emails, pages, CMS.

For teammates who never touch code: publish the template as a Template Form. They fill the fields, the image renders, no account needed.
- 1Quick Connect, Forms, Create a form.
- 2Set the daily limit, formats and expiry. Share the link or paste the embed code.

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.
- 1Quick Connect, Webhook, Add New. Pick the response format.
- 2Paste the webhook URL into Tally, Typeform, Zapier, Make, n8n or your code.
- 3Trigger it once. Orshot reads the payload and you map each field under Parameter Mapping.

Done when one automation renders from Orshot with the same inputs.
Run both behind a flag
Nothing has to be switched off today.
- 1Render each template with real data from the API tab. Compare with the Bannerbear output.
- 2Move one automation over. Watch a week of renders.
- 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.
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 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.
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 month | Orshot plan | Over 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.
Questions from Bannerbear teams
It says this doesn't look like a Bannerbear template.
Do I rename parameters?
Bannerbear is async. Is Orshot?
Do I have to leave Bannerbear first?
What does the free migration include?
Do my Bannerbear images and fonts come across?
What about Signed URLs and Simple URLs?
Can I keep using Zapier, Make or n8n?
What does not carry over?
How is rendering priced?
Can I import templates in bulk?
Coming from somewhere else?
Every guide has the steps, the importer and the API swap. All migration guides.
Straightforward automation for images, PDFs and videos through one render call.
The design tool everyone starts on, with Bulk Create for making many by hand.
Still comparing? Bannerbear comparison. Bigger move, or several client accounts? Book a call.
Book a call