This is an Enterprise only private endpoint. Checkout the Enterprise Pricing to get access.
Create a new studio template in your workspace programmatically. This endpoint allows you to define the template structure, dimensions, and optionally include pre-built pages with elements.
For detailed information about the template data structure, see Anatomy of a Template.
https://api.orshot.com/v1/studio/templates/create// Create a blank template with specified dimensions
await fetch("https://api.orshot.com/v1/studio/templates/create", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer <ORSHOT_API_KEY>",
},
body: JSON.stringify({
name: "Product Banner",
description: "E-commerce product showcase banner",
canvas_width: 1200,
canvas_height: 628,
embed_user_id: "your-external-user-id" // Optional
}),
});| Limit | Value |
|---|---|
| Requests per minute | 30 |
| Parameter | Type | Required | Description |
|---|---|---|---|
name | String | Yes | Name of the template (max 255 characters) |
description | String | No | Description of the template |
canvas_width | Integer | Yes | Width of the canvas in pixels (1-5000) |
canvas_height | Integer | Yes | Height of the canvas in pixels (1-5000) |
pages_data | Array | No | Array of page objects with elements. If not provided, a blank page is created |
thumbnail_url | String | No | URL to a thumbnail image for the template |
embed_user_id | String | No | Assign the template to an embed user. Accepts either an external user ID (which will be resolved using your workspace's embed configuration) or an Orshot internal ID (prefixed with eui_). |
Each page in the pages_data array should follow this structure:
| Field | Type | Description |
|---|---|---|
id | String | Unique identifier for the page (UUID recommended) |
name | String | Name of the page (e.g., "Page 1") |
canvas | Object | Canvas settings { width, height, backgroundColor } |
elements | Array | Array of element objects (text, image, shapes, etc.) |
modifications | Array | Array of parameterizable modifications |
thumbnail_url | String | URL to page thumbnail |
| Field | Type | Description |
|---|---|---|
success | Boolean | Whether the operation was successful |
template.id | Integer | Unique identifier for the created template |
template.name | String | Name of the template |
template.canvas_width | Integer | Canvas width in pixels |
template.canvas_height | Integer | Canvas height in pixels |
template.pages_count | Integer | Number of pages in the template |
template.modifications | Array | List of parameterizable modifications extracted from elements |
template.created_at | String | ISO timestamp of creation |
| Status Code | Error | Description |
|---|---|---|
| 400 | Validation failed | Invalid request body parameters |
| 403 | Access Forbidden | Invalid or missing API key |
| 429 | Rate limit exceeded | Too many requests (max 30/min) |
| 500 | Internal server error | Server-side error |
pages_data is not provided, a blank page with the specified dimensions is automatically createdparameterizable: true and a parameterId will be automatically extracted as modificationsmodifications array in the response shows which dynamic parameters are available for renderingembed_user_id is provided, the template will be associated with the specified embed user. If you pass your own external user ID, it will be resolved to an internal Orshot ID using the embed configuration linked to your workspace. You can also pass an Orshot internal ID directly (format: eui_ followed by 16 alphanumeric characters).