Orshot Logo
OrshotDocs

POST: Create Studio Template

Create a single studio template programmatically via API

Enterprise Only

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.

Endpoint

https://api.orshot.com/v1/studio/templates/create

Request

// 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
  }),
});
// Create a template with pre-built page structure
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: "Social Media Post",
    description: "Instagram post template",
    canvas_width: 1080,
    canvas_height: 1080,
    pages_data: [
      {
        id: "page-1-uuid",
        name: "Page 1",
        canvas: {
          width: 1080,
          height: 1080,
          backgroundColor: "#ffffff"
        },
        elements: [
          {
            id: "headline-element",
            type: "text",
            x: 100,
            y: 200,
            width: 880,
            height: 100,
            content: "Your Headline Here",
            parameterId: "headline",
            parameterizable: true
          },
          {
            id: "image-element",
            type: "image",
            x: 100,
            y: 350,
            width: 880,
            height: 500,
            src: "https://example.com/placeholder.png",
            parameterId: "product_image",
            parameterizable: true
          }
        ],
        modifications: []
      }
    ]
  }),
});
{
  "success": true,
  "template": {
    "id": 12345,
    "name": "Product Banner",
    "canvas_width": 1200,
    "canvas_height": 628,
    "pages_count": 1,
    "modifications": [
      {
        "id": "headline",
        "type": "text",
        "description": "Dynamic content for text element"
      },
      {
        "id": "product_image",
        "type": "image",
        "description": "Dynamic content for image element"
      }
    ],
    "created_at": "2026-01-29T10:30:00.000Z"
  }
}

Rate Limits

LimitValue
Requests per minute30

Request Body Parameters

ParameterTypeRequiredDescription
nameStringYesName of the template (max 255 characters)
descriptionStringNoDescription of the template
canvas_widthIntegerYesWidth of the canvas in pixels (1-5000)
canvas_heightIntegerYesHeight of the canvas in pixels (1-5000)
pages_dataArrayNoArray of page objects with elements. If not provided, a blank page is created
thumbnail_urlStringNoURL to a thumbnail image for the template

Pages Data Structure

Each page in the pages_data array should follow this structure:

FieldTypeDescription
idStringUnique identifier for the page (UUID recommended)
nameStringName of the page (e.g., "Page 1")
canvasObjectCanvas settings { width, height, backgroundColor }
elementsArrayArray of element objects (text, image, shapes, etc.)
modificationsArrayArray of parameterizable modifications
thumbnail_urlStringURL to page thumbnail

Response Fields

FieldTypeDescription
successBooleanWhether the operation was successful
template.idIntegerUnique identifier for the created template
template.nameStringName of the template
template.canvas_widthIntegerCanvas width in pixels
template.canvas_heightIntegerCanvas height in pixels
template.pages_countIntegerNumber of pages in the template
template.modificationsArrayList of parameterizable modifications extracted from elements
template.created_atStringISO timestamp of creation

Error Responses

Status CodeErrorDescription
400Validation failedInvalid request body parameters
403Access ForbiddenInvalid or missing API key
429Rate limit exceededToo many requests (max 30/min)
500Internal server errorServer-side error

Notes

  • If pages_data is not provided, a blank page with the specified dimensions is automatically created
  • Elements with parameterizable: true and a parameterId will be automatically extracted as modifications
  • The modifications array in the response shows which dynamic parameters are available for rendering

On this page