Multi-Page Images

Generate images from multi-page templates — render specific pages, batch generate carousels, or create image sets from a single template.

Multi-page templates let you design multiple variations or slides within a single template. When generating images, you can render all pages at once or select specific ones.

How Multi-Page Works#

When your Studio template has multiple pages (e.g., a carousel, slide deck, or a set of variations), the API returns an array of images — one for each page.

const response = await fetch("https://api.orshot.com/v1/studio/render", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: "Bearer <YOUR_API_KEY>",
  },
  body: JSON.stringify({
    templateId: "<MULTI_PAGE_TEMPLATE_ID>",
    modifications: {
      "page1@title": "Slide 1: Introduction",
      "page2@title": "Slide 2: Features",
      "page3@title": "Slide 3: Pricing",
    },
    response: {
      format: "png",
      type: "url",
    },
  }),
});

Response#

The response returns a content array with one entry per page:

{
  "data": {
    "content": [
      "https://storage.orshot.com/cloud/renders/images/page1.png",
      "https://storage.orshot.com/cloud/renders/images/page2.png",
      "https://storage.orshot.com/cloud/renders/images/page3.png"
    ],
    "renders": 3,
    "mimeType": "image/png"
  }
}

Rendering Specific Pages#

Use response.includePages to render only the pages you need. This saves render credits and speeds up generation.

{
  "templateId": "<MULTI_PAGE_TEMPLATE_ID>",
  "modifications": {
    "page1@title": "Cover Slide",
    "page3@title": "Final Slide"
  },
  "response": {
    "format": "png",
    "type": "url",
    "includePages": [1, 3]
  }
}

This renders only pages 1 and 3, skipping page 2.

Page-Specific Modifications#

Use the page{N}@ prefix to target elements on specific pages. This lets you customize each page independently.

{
  "modifications": {
    "page1@title": "Why Choose Us",
    "page1@subtitle": "Trusted by 10,000+ teams",
    "page1@background": "https://example.com/bg-blue.jpg",

    "page2@title": "Key Features",
    "page2@subtitle": "Everything you need to scale",
    "page2@background": "https://example.com/bg-purple.jpg",

    "page3@title": "Get Started Today",
    "page3@subtitle": "Start your free trial",
    "page3@background": "https://example.com/bg-green.jpg"
  }
}

You can also apply styles per page:

{
  "modifications": {
    "page1@title": "Dark Theme Slide",
    "page1@title.color": "#ffffff",
    "page1@canvasBackgroundColor": "#0f172a",

    "page2@title": "Light Theme Slide",
    "page2@title.color": "#1a1a1a",
    "page2@canvasBackgroundColor": "#ffffff"
  }
}

Generate a 5-slide Instagram carousel from a single template:

const slides = [
  { title: "5 Tips for Better Sleep", subtitle: "A quick guide" },
  {
    title: "Tip 1: Consistent Schedule",
    subtitle: "Go to bed at the same time every night",
  },
  {
    title: "Tip 2: Limit Screen Time",
    subtitle: "Put your phone away 1 hour before bed",
  },
  {
    title: "Tip 3: Cool Environment",
    subtitle: "Keep your room between 60-67°F",
  },
  { title: "Swipe for More", subtitle: "Follow us for daily tips" },
];

const modifications = {};
slides.forEach((slide, i) => {
  modifications[`page${i + 1}@title`] = slide.title;
  modifications[`page${i + 1}@subtitle`] = slide.subtitle;
});

const response = await fetch("https://api.orshot.com/v1/studio/render", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: "Bearer <YOUR_API_KEY>",
  },
  body: JSON.stringify({
    templateId: "<CAROUSEL_TEMPLATE_ID>",
    modifications,
    response: {
      format: "png",
      type: "url",
    },
  }),
});

const data = await response.json();
// data.data.content = array of 5 image URLs

Global vs Page-Specific Modifications#

If you pass a modification without the page{N}@ prefix, it applies to all pages:

{
  "modifications": {
    "brand_logo": "https://example.com/logo.png",
    "page1@title": "Page 1 Title",
    "page2@title": "Page 2 Title"
  }
}

In this example, brand_logo is updated on every page, while each title is set independently.

All Set? Let's Start Automating

Get Your API Key →
  • Image, PDF and Video Generation via API
  • Canva like editor with AI and smart features
  • No-Code Integrations (Zapier, Make, n8n etc.)
  • Embed Orshot Studio in your app
  • Start Free. No credit card required. Cancel anytime.