MigrateTemplated

TemplatedOrshot
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.

What changes for you

You get all of Templated, and more

Moving Templates and integrations is simple. Extend it to more, to do more

01Step 1

Save the template from Templated

Templated has no template export, so you save the editor page.

  1. 1Open the template in the Templated editor.
  2. 2File, Save Page As… (⇧⌘S / Ctrl+Shift+S). Plain ⌘S saves the template inside Templated, not the page.
  3. 3Choose Webpage, Single File (.mhtml). Not “HTML Only”, not “Complete”.
  4. 4One file per template.
The Templated editor. Save this page, not the template list.

Done when you have one .mhtml file per template.

02Step 2

Upload the saved editor page

One upload per template, or several at once.

  1. 1New Template, then the Templated 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, Templated tab.
File read: preview, name and size, ownership box.
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

Templated layer names are already API keys, so they carry over unchanged.

Templated layer nameOrshot API parameter
text-1text-1
image-2image-2
shape-1shape-1
headline (renamed in Templated)headline
Want a friendlier name, or another layer made 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. 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.

POST https://api.templated.io/v1/render
POST https://api.orshot.com/v1/studio/render
{
  "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.
TemplatedOrshot
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_urlresponse.mode: "async"
url in the responsedata.content in the response
Styles: "text-1.fontSize": 48. Pages: "page2@text-1". Render docs

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.

Templated|POST api.templated.io/v1/render
{
  "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"
}
Orshot|POST api.orshot.com/v1/studio/render
{
  "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 certificate or invoice as a print-ready PDF.

Templated|POST api.templated.io/v1/render
{
  "template": "a55fc2e0-d651-4864-9308-a601307e62fb",
  "layers": {
    "name": { "text": "Sarah Chen" },
    "course": { "text": "UX Design" }
  },
  "format": "pdf"
}
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"
  }
}

Multi-page templates become one multi-page PDF. One credit per page.

A short clip from a template with a video layer.

Templated|POST api.templated.io/v1/render
{
  "template": "a55fc2e0-d651-4864-9308-a601307e62fb",
  "layers": { "title": { "text": "Summer sale" } },
  "format": "mp4",
  "duration": 6000,
  "fps": 30
}
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 }
}

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.

Render and publish to connected accounts in the same call.

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

Templated 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.

Templated
Not available in Templated
Orshot
GET https://api.orshot.com/v1/studio/dynamic-url/og.png
  ?templateId=12345
  &text-2=Exploring%20Palawan
  &sign=YOUR_SIGNATURE

Templated 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.

05Step 5

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.

  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 Templated 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.

Need a link that renders on request, for emails, pages or a CMS? That is a Dynamic URL in Orshot.

  1. 1Quick Connect, Dynamic URL, enable, save.
  2. 2Copy the signed link. Change a query value, the image changes.
  3. 3Use it wherever a render URL is embedded: 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.

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

Compare renders, then switch

Nothing has to be switched off today.

  1. 1Render each template with real data from the API tab. Compare with the Templated 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 Templated calls, rewrites them for Orshot and links every doc it needs.

migrate-from-templated.md
# 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 it costs

What your volume costs

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 Templated users

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

Save as "Webpage, Single File" (.mhtml) from the editor page itself (app.templated.io/editor/…), not the template list. "HTML Only" saves an empty app shell and "Complete" drops the layer data. Use File, Save Page As: ⌘S alone triggers Templated's own save, not the browser's.

Do I rename parameters?

No. Templated layer names are already API keys (text-1, image-2) and they come across unchanged. Rename a layer in the Studio if you want a friendlier name; the API tab shows the final list.

Templated has async renders and webhooks. Does Orshot?

Both APIs are sync by default and return the file URL. For webhooks set response.mode to async and pass webhook_url. Templated's external_id becomes metadata and comes back on the job.

Do I have to leave Templated 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 Templated images and fonts come across?

Images are copied to Orshot storage on import, including the stock photos Templated hosts for you. 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 multi-page templates?

Every page imports. In the API, prefix the parameter with the page: page2@text-1. A key without a prefix applies to every page, the same as Templated's top-level layers.

Can I keep using Zapier, Make or n8n?

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

What does not carry over?

Video layers and animations, barcodes and star ratings, and custom HTML layers are rebuilt in the Studio. Shapes come in as vector images, so you can swap or restyle them but not edit their points.

I use Templated's embedded editor in my app.

Orshot Embed is the equivalent: a white-label editor you put in your own product, backed by the same templates and API. It is part of the migration call, so book one and we scope it together.

How is rendering priced?

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

Can I import templates in bulk?

On paid plans, yes. The Templated 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? Templated comparison. Bigger move, or several client accounts? Book a call.

Book a call