
Migrate from Templated to Orshot
Save each template from the Templated editor and upload it. Layer names stay as your API parameters, so the API call needs one swap.
Works with the current Templated editor. Checked September 17, 2026.
You get all of Templated, and more
Moving Templates and integrations is simple. Extend it to more, to do more
- A reliable editorOrshot Studio: real layers, brand kit, smart stacking, multi-page, no zoom surprises.
- One render call, every formatImages, PDFs and video from /v1/studio/render, with your layer names.
- 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, backed by the same templates.
- Post to socialsRender and publish in one call, or on a schedule.
- Native WorkflowsConnect a data source, a template and a destination without code.
- Credits, not per-pixel mathsOne credit per image, PDF page or second of video, on every plan.
Save the template from Templated
Templated has no template export, so you save the editor page.
- 1Open the template in the Templated editor.
- 2File, Save Page As… (
⇧⌘S/Ctrl+Shift+S). Plain⌘Ssaves the template inside Templated, not the page. - 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 editor page
One upload per template, or several at once.
- 1New Template, then the Templated 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
Templated layer names are already API keys, so they carry over unchanged.
| Templated layer name | Orshot API parameter |
|---|---|
| text-1 | text-1 |
| image-2 | image-2 |
| shape-1 | shape-1 |
| headline (renamed in Templated) | headline |

Done when the API tab lists every parameter your code sends.
Update the API call
Auth is the same. The layers object becomes a flat modifications object, and the file URL comes back in the response.
Convert your request
Replace the example with your own Templated request body, or the code that sends it. Runs in your browser, nothing leaves the page.
{
"templateId": <YOUR_ORSHOT_TEMPLATE_ID>,
"modifications": {
"text-1": "8 MIN READ",
"text-2": "Exploring the Hidden Gems of Palawan",
"text-2.color": "#365363",
"text-3": "Emily Turner",
"image-1": "https://example.com/pool.jpg"
},
"response": {
"type": "url",
"format": "png",
"mode": "async"
},
"webhook_url": "https://yourapp.com/webhooks/render",
"metadata": "post-8412"
}- Templated template a55fc2e0-d651-4864-9308-a601307e62fb → 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.
- external_id becomes metadata; it comes back on the job and the webhook.
| Templated | Orshot |
|---|---|
| template (uuid) | templateId (number) |
| layers: { name: { text } } | { name: "text" } |
| layers: { name: { image_url } } | { name: "https://…" } |
| layers: { name: { color } } | { "name.color": "#f00" } |
| layers: { name: { hide: true } } | { "name.opacity": 0 } |
| pages: [{ page, layers }] | { "page2@name": "…" } |
| format: "jpg" (default) | response.format: "png" (default) |
| async + webhook_url | response.mode: "async" |
| url in the response | data.content in the response |
Popular use cases
What most Orshot customers build, next to the same call in Templated.
One image for a blog post, the template imported in step 2.
{
"template": "a55fc2e0-d651-4864-9308-a601307e62fb",
"layers": {
"text-2": {
"text": "Exploring the Hidden Gems of Palawan"
},
"text-3": { "text": "Emily Turner" },
"image-1": { "image_url": "https://example.com/pool.jpg" }
},
"format": "png"
}{
"templateId": 12345,
"modifications": {
"text-2": "Exploring the Hidden Gems of Palawan",
"text-3": "Emily Turner",
"image-1": "https://example.com/pool.jpg"
},
"response": {
"type": "url",
"format": "png"
}
}Same names, flat object. The file URL comes back as data.content.
A three-page social carousel, one call, three files.
{
"template": "a55fc2e0-d651-4864-9308-a601307e62fb",
"pages": [
{ "page": "page-1",
"layers": { "title": { "text": "Three tips" } } },
{ "page": "page-2",
"layers": { "title": { "text": "Tip one" } } },
{ "page": "page-3",
"layers": { "title": { "text": "Tip two" } } }
],
"format": "png"
}{
"templateId": 12345,
"modifications": {
"page1@title": "Three tips",
"page2@title": "Tip one",
"page3@title": "Tip two"
},
"response": {
"type": "url",
"format": "png"
}
}The response is an array with one URL per page. A key without a prefix applies to every page.
A certificate or invoice as a print-ready PDF.
{
"template": "a55fc2e0-d651-4864-9308-a601307e62fb",
"layers": {
"name": { "text": "Sarah Chen" },
"course": { "text": "UX Design" }
},
"format": "pdf"
}{
"templateId": 12345,
"modifications": {
"name": "Sarah Chen",
"course": "UX Design"
},
"response": {
"type": "url",
"format": "pdf"
},
"pdfOptions": {
"title": "UX Design Certificate",
"dpi": 300,
"colorMode": "cmyk"
}
}Multi-page templates become one multi-page PDF. One credit per page.
A short clip from a template with a video layer.
{
"template": "a55fc2e0-d651-4864-9308-a601307e62fb",
"layers": { "title": { "text": "Summer sale" } },
"format": "mp4",
"duration": 6000,
"fps": 30
}{
"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 }
}Length comes from the video layers and pages, not a duration field. 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://api.orshot.com/v1/studio/dynamic-url/og.png
?templateId=12345
&text-2=Exploring%20Palawan
&sign=YOUR_SIGNATURETemplated has no on-demand link. 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.
Move the workflows over
Not on the API? Pick how you render. Same swap every time: point it at the Orshot template, map the same parameters, remove the Templated 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 Templated 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.
Need a link that renders on request, for emails, pages or a CMS? That is a Dynamic URL in Orshot.
- 1Quick Connect, Dynamic URL, enable, save.
- 2Copy the signed link. Change a query value, the image changes.
- 3Use it wherever a render URL is embedded: 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.
Compare renders, then switch
Nothing has to be switched off today.
- 1Render each template with real data from the API tab. Compare with the Templated 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 Templated calls, rewrites them for Orshot and links every doc it needs.
# Migrate this project from Templated to Orshot
You are helping me move from Templated (api.templated.io) 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 Templated touchpoint in this project
Search for, and list with file paths:
- `api.templated.io`, `cdn.templated.media`, `templated-assets.s3.amazonaws.com`
- the `templated` npm/pip package or SDK imports
- `TEMPLATED` environment variables and API keys
- template IDs (UUIDs like `a55fc2e0-d651-4864-9308-a601307e62fb`) and `layers` objects keyed by layer name
- `GET /v1/render/{id}` polling loops and `webhook_url` handlers that receive render events
- Templated's embedded editor (`@templated.io/editor` or an iframe of app.templated.io)
- n8n, Make or Zapier exports in the repo that contain Templated nodes
## 2. Templates
Templates cannot be converted from code alone. I will import each Templated template into Orshot myself (New Template → Templated tab → upload the editor page saved as .mhtml). Guide: https://orshot.com/migrate/from-templated
Once imported, each Templated layer name is an Orshot parameter with the same name ("text-1" stays `text-1`, "image-2" stays `image-2`). Ask me for the Orshot template IDs, or read the parameters 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: Templated template ID → Orshot templateId. Show it to me before editing code.
## 3. Rewrite the API calls
Reference: https://orshot.com/docs/api-reference/render-from-studio-template
Templated:
```http
POST https://api.templated.io/v1/render
Authorization: Bearer TEMPLATED_KEY
{ "template": "UUID", "layers": { "text-1": { "text": "Hello", "color": "#111" }, "image-1": { "image_url": "https://…" } }, "format": "png" }
```
Orshot:
```http
POST https://api.orshot.com/v1/studio/render
Authorization: Bearer ORSHOT_KEY
{ "templateId": 12345, "modifications": { "text-1": "Hello", "text-1.color": "#111", "image-1": "https://…" }, "response": { "type": "url", "format": "png" } }
```
Rules:
- `modifications` is a flat object keyed by parameter name. A text layer's `text` and an image layer's `image_url` become the value itself.
- Layer properties become dot keys: `color` → `"text-1.color"`, `background` → `"text-1.backgroundColor"`, `font_family` → `"text-1.fontFamily"`, `font_size` → `"text-1.fontSize"`, `hide: true` → `"text-1.opacity": 0`. Docs: https://orshot.com/docs/dynamic-parameters
- Templated `pages: [{ page, layers }]` becomes page-prefixed keys: `"page2@text-1"`. Keys without a prefix apply to every page.
- `response.format`: png, jpg, webp, avif, pdf, mp4, webm, gif. Templated defaults to jpg; Orshot defaults to png, so set it explicitly if the format matters. `response.type`: url, base64, binary. `response.scale` replaces Templated's `scale`.
- Both APIs are synchronous by default. The Orshot response carries `data.content` (the file URL or data) instead of Templated's `url`. Remove any `GET /v1/render/{id}` polling.
- If the code uses `async: true` or `webhook_url`, use Orshot's async mode instead: add `"mode": "async"` inside `response`, plus top-level `webhook_url` and `metadata` (Templated's `external_id`). 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
- `width`/`height` overrides have no equivalent: Orshot renders at the template size (use `response.size` or `response.scale` instead). `cmyk: true` becomes `pdfOptions: { colorMode: "cmyk" }`. `transparent`, `flatten`, `merge`, `zip`, `templates[]` have no equivalent; flag them to me.
- 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. Embedded editor
Templated's embedded editor becomes Orshot Embed: https://orshot.com/docs/orshot-embed/introduction
Ask me before touching this; it needs an embed key from the Orshot dashboard and a plan that includes Embed.
## 5. Automations
- n8n: replace the Templated 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 Templated 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 Templated 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 parameters: 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 Templated calls in place behind a flag until each Orshot render is compared with the Templated output on real data.
- Render each mapped template once with test data and show me the URLs.
- Then remove the Templated 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 your volume costs
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 Templated users
It says this doesn't look like a Templated template.
Do I rename parameters?
Templated has async renders and webhooks. Does Orshot?
Do I have to leave Templated first?
What does the free migration include?
Do my Templated images and fonts come across?
What about multi-page templates?
Can I keep using Zapier, Make or n8n?
What does not carry over?
I use Templated's embedded editor in my app.
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.
The original image generation API, the platform that started it all and still hosts big teams.
The design tool everyone starts on, with Bulk Create for making many by hand.
Still comparing? Templated comparison. Bigger move, or several client accounts? Book a call.
Book a call