v0.1.0

Layerre API Documentation

Create dynamic design variations at scale with the Layerre API. Generate images programmatically from your design templates, automate repetitive workflows, and maintain visual consistency across every output. Currently, the API supports templates built in Canva.

Quickstart Guide

Get up and running with Layerre in minutes. Follow these simple steps to create your first dynamic image variant. Currently, Layerre supports Canva designs only.

Step 1: Get Your API Key

First, generate an API key from your dashboard to authenticate your API requests.

Get Your API Key →

Step 2: Get Your Canva Share URL

Open your design in Canva and get a shareable link that Layerre can use to import your design.

2.

Click the "Share" button in the top right corner

3.

Click "Anyone with the link" and copy the link

Canva Share Dialog showing how to get a shareable link

Step 3: Create a Template from Canva

Import your Canva design as a template. Layerre automatically extracts the layers, fonts, images, and other properties from the design. Note: When pasting your Canva URL, ensure it is not escaped (no backslashes before ? or & characters).

curl -X POST "https://api.layerre.com/v1/template" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"canva_url": "https://www.canva.com/design/..."}'

Step 4: Get Template Details

Retrieve your template with all its editable layers.

curl "https://api.layerre.com/v1/template/{template_id}" -H "Authorization: Bearer YOUR_API_KEY"

Step 5: Generate a Variant

Create a customized version by overriding text, images, or other layer properties.

curl -X POST "https://api.layerre.com/v1/template/{template_id}/variant" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"overrides": [{"layer_id": "text-layer-uuid", "properties": {"text": "Hello, World!"}}], "export_type": "png"}'

Step 6: Bulk Variants and Combined PDFs (Optional)

Render many variants in one request. Set combine_pdf=true (Plus+ only, PDF export) to merge all items into one multi-page PDF. Each item can target a different page_number for multi-page designs.

curl -X POST "https://api.layerre.com/v1/template/{template_id}/variant/bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "export_type": "pdf",
    "combine_pdf": true,
    "items": [
      {
        "page_number": 0,
        "overrides": [
          { "layer_id": "page-1-text-uuid", "properties": { "text": "Headline A" } }
        ]
      },
      {
        "page_number": 1,
        "overrides": [
          { "layer_id": "page-2-text-uuid", "properties": { "text": "Subtitle A" } }
        ]
      }
    ]
  }'

Key Concepts

Understanding the core building blocks of the Layerre API will help you get the most out of the platform.

Templates

The foundation of your designs. Templates contain all the layers (text, images, etc.) that can be customized. Once created, a single template can be used to generate unlimited variants with different content.

Layers

Editable elements within templates. Each layer represents a specific component (text, image) that can be customized independently. Layers preserve their styling, fonts, positioning, and other properties from the original design.

Variants

Generated images with custom content. Each variant is created by applying overrides to specific layers in your template. Create unlimited variants from one template with different text, images, colors, or other layer properties.

Overrides

Layer-specific customizations applied when generating variants. Overrides allow you to change text content, swap images, modify colors, adjust positioning, and update other properties without affecting the template itself.

Bulk variants

Create many variants in a single API call via POST /v1/template/{template_id}/variant/bulk. Each item in the batch shares one export_type and can specify its own overrides and page_number. Use this for high-volume generation without sending one request per variant.

Combined PDFs

On Plus+ plans, set combine_pdf=true on a bulk PDF request to merge every item into one multi-page PDF in a single render pass. Combined PDFs are saved as variants with is_combined_pdf=true and combined_section_count indicating how many sections were merged. This works for multiple variations on one page or for exporting every page of a multi-page design together.

Authentication

The Layerre API uses bearer token authentication. Include your API key in the Authorization header for all requests.

curl "https://api.layerre.com/v1/templates" -H "Authorization: Bearer YOUR_API_KEY"

Keep your API keys secure! Never share them publicly or commit them to version control.

Rate Limiting

To ensure fair usage and system stability, the Layerre API implements rate limiting on all endpoints. Rate limits are applied per IP address.

Rate Limit Details

  • 10 requests per second - Sustained rate limit
  • 20 requests burst - Allows short spikes in traffic
  • 600 requests per minute - Maximum per minute

429 Too Many Requests

When you exceed the rate limit, the API returns a 429 Too Many Requests status code with a JSON error response.

HTTP/1.1 429 Too Many Requests
Retry-After: 10
Content-Type: application/json

{
  "error": "Rate limit exceeded",
  "message": "Too many requests. Please try again later.",
  "retry_after": 10
}

Multi-page imports

Plus and Pro plans can import multiple pages from a single Canva design. Free and Starter plans import the first page only.

Plan limits

  • Plus, up to 25 pages per design
  • Pro, up to 200 pages per design
  • Free / Starter, first page only

A multi-page import counts as one render, regardless of how many pages are imported.

Template response

Multi-page templates include a page_count field. Each layer has a page_number (0-based). If a design has more pages than your plan allows, extra pages are skipped and a warning is included in the template's warnings array.

Generating variants

By default, variants render one page at a time. Pass page_number on variant create requests to select which page's layers to use. Defaults to 0 (first page).

curl -X POST "https://api.layerre.com/v1/template/{template_id}/variant" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "page_number": 1,
    "export_type": "png",
    "overrides": [
      { "layer_id": "LAYER_UUID", "properties": { "text": "Updated headline" } }
    ]
  }'

Bulk variants and combined PDFs

Use POST /v1/template/{template_id}/variant/bulk to render many variants in one request. Set combine_pdf=true (Plus+ only, PDF export) to merge every item into one multi-page PDF via a single render pass. Each bulk item can use a different page_number, so you can export an entire multi-page design in one file.

curl -X POST "https://api.layerre.com/v1/template/{template_id}/variant/bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "export_type": "pdf",
    "combine_pdf": true,
    "items": [
      {
        "page_number": 0,
        "overrides": [
          { "layer_id": "PAGE_1_TEXT_UUID", "properties": { "text": "Headline A" } }
        ]
      },
      {
        "page_number": 1,
        "overrides": [
          { "layer_id": "PAGE_2_TEXT_UUID", "properties": { "text": "Subtitle A" } }
        ]
      }
    ]
  }'

Combined PDFs are persisted as variants with is_combined_pdf=true and combined_section_count set to the number of sections merged. The bulk response includes a combined_pdf.variant object with the saved record.

Only layers on the selected page are eligible for overrides. Non-combined variants store the page_number they were generated from.

Templates

post/v1/template

Create Template

Create a template from a Canva URL. This endpoint processes a Canva URL and extracts template information including layers, dimensions, and other metadata.

Example Request

curl -X POST "https://api.layerre.com/v1/template" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{
  "canva_url": "https://www.canva.com/design/...",
  "tags": [
    "campaign",
    "summer-2026"
  ]
}'
get/v1/template/{template_id}

Get Template

Get a template by ID with all its layers. Refreshes signed URLs for all image layers.

Parameters

PATH PARAMETERS
template_idstringrequired
Format: uuid

Example Request

curl -X GET "https://api.layerre.com/v1/template/{template_id}" -H "Authorization: Bearer YOUR_API_KEY"
patch/v1/template/{template_id}

Update Template

Update a template (name, width, height, backgrounds) and/or layers.

Parameters

PATH PARAMETERS
template_idstringrequired
Format: uuid

Example Request

curl -X PATCH "https://api.layerre.com/v1/template/{template_id}" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{
  "name": "My Template",
  "width": 800,
  "height": 600,
  "background_color": "#FFFFFF",
  "page_backgrounds": {
    "1": "#1A1A2E",
    "9": "#000000"
  },
  "layers": [
    {
      "id": "example_string",
      "name": "Title Layer",
      "layer_type": {},
      "x": 0,
      "y": 0,
      "position": 0,
      "properties": {
        "width": 100,
        "height": 100,
        "color": "#FF0000",
        "rotation": 0,
        "text": "Hello World",
        "font_size": 16,
        "font_name": "Arial",
        "font_style": {
          "weight": "example_string"
        },
        "text_align": {},
        "text_direction": "rtl",
        "letter_spacing": 0,
        "line_spacing": 1000,
        "vertical_align": "middle",
        "img_url": "https://example.com/image.png",
        "image_fit": "contain",
        "image_position": "top-center",
        "signed_url_expiry": "example_string",
        "opacity": 1,
        "flip_horizontal": false,
        "flip_vertical": false
      }
    }
  ],
  "tags": [
    "campaign",
    "summer-2026"
  ]
}'
delete/v1/template/{template_id}

Delete Template

Soft delete a template.

Parameters

PATH PARAMETERS
template_idstringrequired
Format: uuid

Example Request

curl -X DELETE "https://api.layerre.com/v1/template/{template_id}" -H "Authorization: Bearer YOUR_API_KEY"
get/v1/templates/tags

List Template Tags

List all unique tags for the current user's templates with their counts. Sorted by count descending, then alphabetically.

Example Request

curl -X GET "https://api.layerre.com/v1/templates/tags" -H "Authorization: Bearer YOUR_API_KEY"
get/v1/templates

List Templates

List all templates for the current user, sorted by last modified. Includes variant counts.

Parameters

QUERY PARAMETERS
skipinteger

Number of templates to skip

Default: 0
Min: 0
limitinteger

Maximum number of templates to return

Default: 100
Min: 1
Max: 1000
include_layersboolean

Whether to include layers in the response (slower for large templates)

Default:
tag

Filter templates to those that have this tag. Case-insensitive.

q

Search templates by name (case-insensitive substring).

Example Request

curl -X GET "https://api.layerre.com/v1/templates?skip=0&limit=100&include_layers=false&tag=value&q=value" -H "Authorization: Bearer YOUR_API_KEY"

Layers

post/v1/template/{template_id}/layer

Create Layer

Create a new layer for a template. Accepts either img_url or text to create image or text layers respectively.

Parameters

PATH PARAMETERS
template_idstringrequired
Format: uuid

Example Request

curl -X POST "https://api.layerre.com/v1/template/{template_id}/layer" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{
  "name": "Title Layer",
  "layer_type": {},
  "x": 0,
  "y": 0,
  "properties": {
    "width": 100,
    "height": 100,
    "color": "#FF0000",
    "rotation": 0,
    "text": "Hello World",
    "font_size": 16,
    "font_name": "Arial",
    "font_style": {
      "weight": "example_string"
    },
    "text_align": {},
    "text_direction": "rtl",
    "letter_spacing": 0,
    "line_spacing": 1000,
    "vertical_align": "middle"
  }
}'
get/v1/template/{template_id}/layer/{layer_id}

Get Layer

Get a specific layer by ID. Refreshes signed URL if expired.

Parameters

PATH PARAMETERS
template_idstringrequired
Format: uuid
layer_idstringrequired
Format: uuid

Example Request

curl -X GET "https://api.layerre.com/v1/template/{template_id}/layer/{layer_id}" -H "Authorization: Bearer YOUR_API_KEY"
patch/v1/template/{template_id}/layer/{layer_id}

Update Layer

Update a layer. Supports updating text content, img_url, or any other layer properties.

Parameters

PATH PARAMETERS
template_idstringrequired
Format: uuid
layer_idstringrequired
Format: uuid

Example Request

curl -X PATCH "https://api.layerre.com/v1/template/{template_id}/layer/{layer_id}" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{
  "id": "example_string",
  "name": "Title Layer",
  "layer_type": {},
  "x": 0,
  "y": 0,
  "position": 0,
  "properties": {
    "width": 100,
    "height": 100,
    "color": "#FF0000",
    "rotation": 0,
    "text": "Hello World",
    "font_size": 16,
    "font_name": "Arial",
    "font_style": {
      "weight": "example_string"
    },
    "text_align": {},
    "text_direction": "rtl",
    "letter_spacing": 0,
    "line_spacing": 1000,
    "vertical_align": "middle",
    "img_url": "https://example.com/image.png",
    "image_fit": "contain",
    "image_position": "top-center",
    "signed_url_expiry": "example_string",
    "opacity": 1,
    "flip_horizontal": false,
    "flip_vertical": false
  }
}'
delete/v1/template/{template_id}/layer/{layer_id}

Delete Layer

Soft delete a layer.

Parameters

PATH PARAMETERS
template_idstringrequired
Format: uuid
layer_idstringrequired
Format: uuid

Example Request

curl -X DELETE "https://api.layerre.com/v1/template/{template_id}/layer/{layer_id}" -H "Authorization: Bearer YOUR_API_KEY"

Variants

post/v1/template/{template_id}/variant

Create Variant

Render one variant per request from a template, optionally overriding layers. Overrides is an array of objects with layer_id (from GET /v1/template/{template_id}) and optional properties; layers you omit keep template defaults.

Parameters

PATH PARAMETERS
template_idstringrequired
Format: uuid

Example Request

curl -X POST "https://api.layerre.com/v1/template/{template_id}/variant" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{
  "export_type": "png",
  "height": 600,
  "overrides": [
    {
      "layer_id": "123e4567-e89b-12d3-a456-426614174000",
      "properties": {
        "img_url": "https://your-cdn.com/image.jpg",
        "image_fit": "cover"
      }
    },
    {
      "layer_id": "223e4567-e89b-12d3-a456-426614174001",
      "properties": {
        "text": "Your headline here",
        "font_size": 42
      }
    }
  ],
  "width": 800
}'
post/v1/template/{template_id}/variant/bulk

Create Variants Bulk

Create multiple variants in one request (single export_type per batch). When combine_pdf=true (Plus+ only, PDF export), renders all items into one multi-page PDF via a single Chromium print pass instead of per-item files.

Parameters

PATH PARAMETERS
template_idstringrequired
Format: uuid

Example Request

curl -X POST "https://api.layerre.com/v1/template/{template_id}/variant/bulk" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{
  "export_type": {},
  "items": [
    {
      "overrides": [
        {
          "layer_id": "{layer_id}",
          "properties": {
            "text": "Hello, World!"
          }
        }
      ],
      "width": 1,
      "height": 1,
      "page_number": 0
    }
  ],
  "combine_pdf": false
}'
get/v1/template/{template_id}/variant/{variant_id}

Get Variant

Get a variant by ID. Refreshes signed URL if expired.

Parameters

PATH PARAMETERS
template_idstringrequired
Format: uuid
variant_idstringrequired
Format: uuid

Example Request

curl -X GET "https://api.layerre.com/v1/template/{template_id}/variant/{variant_id}" -H "Authorization: Bearer YOUR_API_KEY"
delete/v1/template/{template_id}/variant/{variant_id}

Delete Variant

Soft delete a variant.

Parameters

PATH PARAMETERS
template_idstringrequired
Format: uuid
variant_idstringrequired
Format: uuid

Example Request

curl -X DELETE "https://api.layerre.com/v1/template/{template_id}/variant/{variant_id}" -H "Authorization: Bearer YOUR_API_KEY"
get/v1/template/{template_id}/variants

List Template Variants

List all variants for a template. Refreshes signed URLs for all variants.

Parameters

PATH PARAMETERS
template_idstringrequired
Format: uuid
QUERY PARAMETERS
skipinteger

Number of variants to skip

Default: 0
Min: 0
limitinteger

Maximum number of variants to return

Default: 100
Min: 1
Max: 1000

Example Request

curl -X GET "https://api.layerre.com/v1/template/{template_id}/variants?skip=0&limit=100" -H "Authorization: Bearer YOUR_API_KEY"

Analyze

post/v1/analyze/canva-design

Analyze Canva design

Extract colors, fonts, and images from a public Canva share URL.

Example Request

curl -X POST "https://api.layerre.com/v1/analyze/canva-design" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{
  "canva_url": "https://www.canva.com/design/..."
}'

Need help? Contact us at hello@layerre.com

© 2026 Layerre. All rights reserved.