---
title: "Get full template (canvas + layers)"
method: GET
path: "/presets/{id}"
---

# Get full template (canvas + layers)

`GET /presets/{id}`

## Request

- Base URL: `https://rendry.io/api/v1`
- URL: `https://rendry.io/api/v1/presets/{id}`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer
  - HTTP bearer
  - HTTP bearer

Layers reveal {variable} placeholders and dynamic image keys — everything render_image accepts in dynamic_data.

## Path parameters

- `id` string, required

## Headers

- `X-Rendry-Account` string

## Response `200`

The stored template. With a group id the latest version comes back; ?exact=true returns exactly the version whose id was passed.

- Preset: A stored template as GET /presets/{id} returns it: the DSL POST /presets accepted plus the ids the server assigned. `id` is this VERSION; `preset_group_id` is the template, the value every render, patch, share and delete-group door takes as the preset id.
  - `id` string: This version's id; changes on every saved version
  - `user_id` string
  - `preset_group_id` string: The template's id, stable across versions — what /render/*, PATCH, /share and DELETE /presets/{id}/group take
  - `parent_id` string: The version this one was saved over or forked from
  - `name` string
  - `description` string
  - `preview_key` string: Storage key of the server-made preview picture; fetch it as /files/{preview_key}
  - `version_note` string: Label of an explicitly marked version; routine saves carry none
  - `canvas` Canvas
    - `width` integer
    - `height` integer
    - `background_color` string
    - `output_format` string
    - `quality` integer
    - `max_width` integer
    - `finish_profile` string: Optional whole-canvas finish applied once after composition using the profile-specific paint policy. Use an exact id from the finish_profiles field returned by GET /capabilities; that runtime catalog also declares compatible formats and minimum dimensions.
  - `layers` object[]: Ordinary DSL layers; text layers may opt into document continuation with text_flow (see TextFlow). The authoritative native text_flows receipt is returned before charge in dry runs.
  - `modifications` object: Sample values of the {variables}: the defaults of every render that omits a key
  - `variable_modes` object: How each modifications source is read; a missing name is text
  - `sample_rows` object: Sample rows of repeat groups and tables; a call's rows override them
  - `derived` object[]: Colours derived from an image layer, as in PresetInput
  - `palettes` object: Colours a field takes from data, as in PresetInput
  - `variable_formats` object, nullable: Sparse name -> display format beside modifications and variable_modes. A name needs a source in modifications and cannot be page, pages or row.*. Applied after source evaluation and also to caller overrides; formulas consume raw exact values while templates insert formatted text. Invalid schema refuses save; invalid data refuses dry run and render before any charge, without echoing values. update_preset patches: absent or {} keeps; name:null removes; top-level null clears. Whole preset and document saves replace the map.

## Other responses

- `404`: `preset_not_found` — absent, deleted or another account's, alike.

---

[API](https://skmtc.dev/rendry/apis/rendry-api.md) · [All operations](https://skmtc.dev/rendry/apis/rendry-api/llms.txt) · [OpenAPI document](https://skmtc.dev/rendry/apis/rendry-api/revisions/c4fb572c26c9?raw)
