# Get Studio Template

> Retrieve a specific studio template by ID

- **URL**: https://orshot.com/docs/api-reference/studio-template-get

---

Retrieve a specific studio template by its ID, including all available modifications and template metadata.

## Endpoint```markdown tab="Endpoint"
https://api.orshot.com/v1/studio/templates/:templateId
```## URL Parameters

| Parameter    | Type    | Required | Description                            |
| ------------ | ------- | -------- | -------------------------------------- |
| `templateId` | Integer | Yes      | The unique ID of the template to fetch |

## Request```js
await fetch("https://api.orshot.com/v1/studio/templates/123", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    Authorization: "Bearer <ORSHOT_API_KEY>",
  },
});
```</Tab>```json
{
  "id": 123,
  "created_at": "2025-09-10T15:30:45.123Z",
  "workspace_id": "workspace-uuid-456",
  "user_id": "user-uuid-789",
  "canvas_width": 1200,
  "canvas_height": 630,
  "updated_at": "2025-10-15T10:20:30.456Z",
  "name": "Social Media Post",
  "description": "Template for social media posts",
  "tags": ["social", "marketing"],
  "thumbnail_url": "https://storage.orshot.com/thumbnails/template-123.png",
  "embed_user_id": null,
  "modifications": [
    {
      "key": "title",
      "id": "title",
      "type": "text",
      "description": "Title — Text content",
      "help_text": "Title — Text content",
      "element_name": "Title",
      "example": "Hello World",
      "page_number": 1,
      "page_id": "a1b2c3d4-5e6f-7890-abcd-ef1234567890"
    },
    {
      "key": "subtitle",
      "id": "subtitle",
      "type": "text",
      "description": "Subtitle — Text content",
      "help_text": "Subtitle — Text content",
      "element_name": "Subtitle",
      "example": "Welcome to Orshot",
      "page_number": 1,
      "page_id": "a1b2c3d4-5e6f-7890-abcd-ef1234567890"
    },
    {
      "key": "logo",
      "id": "logo",
      "type": "imageUrl",
      "description": "Logo — Image URL",
      "help_text": "Logo — Image URL",
      "element_name": "Logo",
      "example": "https://example.com/logo.png",
      "page_number": 1,
      "page_id": "a1b2c3d4-5e6f-7890-abcd-ef1234567890"
    }
  ],
  "modifications_json": {},
  "pages_data": [
    {
      "page_id": "a1b2c3d4-5e6f-7890-abcd-ef1234567890",
      "name": "Page 1",
      "thumbnail_url": "https://storage.orshot.com/thumbnails/page-1.png"
    }
  ]
}
```</Tab>
</Tabs>

## Response Fields

| Field                | Type    | Description                                     |
| -------------------- | ------- | ----------------------------------------------- |
| `id`                 | Integer | Unique identifier for the template                           |
| `created_at`         | String  | Timestamp when the template was created                      |
| `workspace_id`       | String  | ID of the workspace the template belongs to                  |
| `user_id`            | String  | ID of the user who created the template                      |
| `canvas_width`       | Number  | Width of the template canvas in pixels                       |
| `canvas_height`      | Number  | Height of the template canvas in pixels                      |
| `updated_at`         | String  | Timestamp when the template was last updated                 |
| `name`               | String  | Name of the template                                         |
| `description`        | String  | Description of the template                                  |
| `tags`               | Array   | Array of tag strings assigned to the template                |
| `thumbnail_url`      | String  | URL to the template's thumbnail image                        |
| `embed_user_id`      | String  | Internal ID of the embed user (null for workspace templates) |
| `modifications`      | Array   | Array of available modifications for parameters              |
| `modifications_json` | Object  | Key-value map of parameter IDs to default values             |
| `pages_data`         | Array   | Array of pages (for multi-page templates)                    |

## Modification Fields

Each modification object contains:

| Field          | Type    | Description                                                                                                          |
| -------------- | ------- | -------------------------------------------------------------------------------------------------------------------- |
| `key`          | String  | Unique key for the modification. For multi-page templates this is prefixed, e.g. `page1@title`                       |
| `id`           | String  | Same as `key`                                                                                                        |
| `type`         | String  | Type of modification (`text`, `imageUrl`, `videoUrl`, `backgroundColor`, `fill`, `color`, `stroke`)                  |
| `description`  | String  | Human-readable description, e.g. `"Title — Text content"` or `"Image URL"` when no element name is set              |
| `help_text`    | String  | Same as `description`                                                                                                |
| `element_name` | String  | Layer name of the element in the editor (only present when the element has a name)                                   |
| `example`      | String  | Default/example value for the field                                                                                  |
| `page_number`  | Integer | 1-based page number this modification belongs to                                                                     |
| `page_id`      | String  | Stable UUID of the page this modification belongs to — use this to reliably map modifications to pages after reorder |

## Page Fields

Each entry in `pages_data` contains:

| Field           | Type   | Description                           |
| --------------- | ------ | ------------------------------------- |
| `page_id`       | String | Stable UUID for the page              |
| `name`          | String | Display name of the page              |
| `thumbnail_url` | String | URL to the thumbnail image of the page |

## Rate Limits

This endpoint is rate limited to **30 requests per minute** per API key. Rate limit headers are included in every response:

| Header                  | Description                                      |
| ----------------------- | ------------------------------------------------ |
| `RateLimit-Limit`       | Maximum requests per minute                      |
| `RateLimit-Remaining`   | Remaining requests in the current window          |
| `RateLimit-Reset`       | Seconds until the rate limit window resets         |
| `Retry-After`           | Seconds to wait (only on `429` responses)         |

## Error Responses

| Code | Description                            |
| ---- | -------------------------------------- |
| 400  | Missing templateId parameter           |
| 403  | Missing or invalid API key             |
| 403  | Studio template not found in workspace |