> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pictify.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Templates

> Create, manage, and render reusable templates

# Templates

Templates are reusable designs with dynamic variables. Create once, render with different data.

<Note>
  For expression syntax and conditional rendering, see [Expressions](/concepts/expressions).
</Note>

## Endpoints

| Method   | Endpoint                     | Description                                                                         |
| -------- | ---------------------------- | ----------------------------------------------------------------------------------- |
| `GET`    | `/templates`                 | [List templates](/api-reference/endpoints/templates/list)                           |
| `POST`   | `/templates`                 | [Create template](/api-reference/endpoints/templates/create)                        |
| `GET`    | `/templates/{uid}`           | [Get template](/api-reference/endpoints/templates/get)                              |
| `PUT`    | `/templates/{uid}`           | [Update template](/api-reference/endpoints/templates/update)                        |
| `DELETE` | `/templates/{uid}`           | [Delete template](/api-reference/endpoints/templates/delete)                        |
| `POST`   | `/templates/{uid}/render`    | [Render template](/api-reference/endpoints/templates/render) to an image            |
| `GET`    | `/templates/{uid}/variables` | [Get variables](/api-reference/endpoints/templates/variables) defined in a template |

## Variable Types

Templates support different variable types in `{{variable}}` placeholders:

| Type      | Example         | Description           |
| --------- | --------------- | --------------------- |
| `string`  | `"Hello World"` | Text content          |
| `number`  | `42`, `3.14`    | Numeric values        |
| `boolean` | `true`, `false` | Conditional rendering |
| `array`   | `["a", "b"]`    | Lists for iteration   |
| `object`  | `{name: "..."}` | Nested data           |

## Using Variables in Templates

### Simple Interpolation

```html theme={null}
<h1>{{title}}</h1>
<p>By {{author}}</p>
```

### Conditional Rendering

```html theme={null}
<div _if="showBadge" class="badge">Premium</div>
```

### Expressions

```html theme={null}
<p>Total: {{currency(price * quantity, 'USD')}}</p>
```

See [Expressions](/concepts/expressions) for the full expression syntax.

## Layout Variants

Templates support multiple layout variants for different platforms. Each layout stores a separate canvas design optimized for a specific size (e.g., Twitter 1200x675, Instagram 1080x1080).

* Layouts are created via the **AI Resize** feature in the editor
* Variables are shared across all layouts
* Render a specific layout with the `layout` parameter, or multiple with `layouts`
* The `default` layout key refers to the base template

```bash theme={null}
# Render specific layout
curl -X POST /templates/{uid}/render \
  -d '{"variables": {"title": "Hello"}, "layout": "twitter-post"}'

# Render multiple layouts
curl -X POST /templates/{uid}/render \
  -d '{"variables": {"title": "Hello"}, "layouts": ["default", "twitter-post", "facebook-post"]}'
```

See [Rendering - Layout Variants](/concepts/rendering#layout-variants) for details.

## Template Content

A template requires either `html` or `fabricJSData` (FabricJS canvas JSON), but not both.

<Warning>
  Either `html` or `fabricJSData` is required when creating a template. You cannot provide both.
</Warning>


## OpenAPI

````yaml get /templates
openapi: 3.1.0
info:
  title: Pictify API
  version: 1.0.0
  description: |
    Generate images, GIFs, and PDFs from HTML templates programmatically.

    ## Authentication
    All API requests require a Bearer token in the Authorization header:
    ```
    Authorization: Bearer pk_live_your_api_key
    ```

    ## Rate Limits
    - Free: 60 requests/minute
    - Pro: 300 requests/minute
    - Business: 1,000 requests/minute

    Rate limit headers are included in all responses.
  contact:
    email: support@pictify.io
    url: https://pictify.io
  license:
    name: MIT
servers:
  - url: https://api.pictify.io
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Images
    description: Image generation endpoints
  - name: GIFs
    description: GIF generation and capture
  - name: PDFs
    description: PDF generation
  - name: Templates
    description: Template management
  - name: Batch
    description: Batch rendering operations
  - name: Experiments
    description: A/B testing, smart links, and scheduled variant experiments
  - name: Webhooks
    description: Webhook subscription management
  - name: Bindings
    description: Data binding for auto-rendering
paths:
  /templates:
    get:
      tags:
        - Templates
      summary: List templates
      operationId: listTemplates
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            maximum: 100
            default: 12
        - name: sort
          in: query
          schema:
            type: string
            enum:
              - newest
              - oldest
              - name
            default: newest
        - name: outputFormat
          in: query
          schema:
            type: string
            enum:
              - all
              - image
              - pdf
            default: all
      responses:
        '200':
          description: List of templates
          content:
            application/json:
              schema:
                type: object
                properties:
                  templates:
                    type: array
                    items:
                      $ref: '#/components/schemas/Template'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
components:
  schemas:
    Template:
      type: object
      properties:
        uid:
          type: string
        name:
          type: string
        type:
          type: string
        category:
          type: string
        tags:
          type: array
          items:
            type: string
        width:
          type: integer
        height:
          type: integer
        thumbnail:
          type: string
          format: uri
        outputFormat:
          type: string
          enum:
            - image
            - pdf
        variableDefinitions:
          type: array
          items:
            $ref: '#/components/schemas/VariableDefinition'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Pagination:
      type: object
      properties:
        page:
          type: integer
        limit:
          type: integer
        total:
          type: integer
        totalPages:
          type: integer
        hasNext:
          type: boolean
        hasPrev:
          type: boolean
    VariableDefinition:
      type: object
      properties:
        name:
          type: string
        type:
          type: string
          enum:
            - text
            - image
            - color
            - number
            - boolean
        defaultValue:
          type: string
        description:
          type: string
        validation:
          type: object
          properties:
            required:
              type: boolean
            minLength:
              type: integer
            maxLength:
              type: integer
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key obtained from the Pictify dashboard

````