---
title: "Create design from template"
method: POST
path: "/api/businesses/{business_id}/designs"
tags: ["posts"]
---

# Create design from template

`POST /api/businesses/{business_id}/designs`

## Request

- Base URL: `https://api.mymarky.ai`
- URL: `https://api.mymarky.ai/api/businesses/{business_id}/designs`
- Auth: HTTP bearer

Fill a template into an on-brand, rendered design.

Give a `template_id` (from `search_templates`) plus the copy for each text
field, your brand colors, logo, and any images for FILLER slots. We render
the design server-side and return its image URLs. Renders synchronously —
expect a few seconds. Send an `Idempotency-Key` header to make retries safe.

Errors:
    400 invalid_value: The business_id is not a valid UUID.
    400 missing_field: Copy was not provided for one or more required text fields, or an image was not provided for a required FILLER slot.
    401 authentication_required: API key or token is missing, invalid, or revoked.
    403 permission_denied: Your plan does not include API access, this business is not in your org, or the template is private to another business.
    404 resource_not_found: No business or template with that ID exists.
    422 invalid_request: Copy exceeded a text field's max_characters, or a FILLER image could not be read.
    429 rate_limit_exceeded: You sent too many requests this minute.

## Path parameters

- `business_id` string, required: A UUID identifier.

## Headers

- `Idempotency-Key` string, nullable: Optional. Send a unique value (e.g. a UUID) to make this create request safe to retry. A repeat with the same key returns the original response instead of creating a duplicate. Cached for 24h, scoped to your org. Reusing a key with a different body returns 422.
- `Marky-Version` '2026-04-08' | '2026-07-17' | '2026-08-02' | '2026-08-04' | '2026-08-06'

## Request body

- DesignCreateRequest: Fill a template into a rendered, on-brand design.
  - `template_id` string, required: Template to fill (from search_templates / list_templates).
  - `text_content` object: Map of text-field id → copy. Provide every required (non-STATIC) field.
  - `palette` string[]: Brand colors as hex strings, e.g. ['#0A0A0A','#FFFFFF'].
  - `logo_url` string, nullable: Brand logo image URL.
  - `filler_media` object: Map of image-slot id → image to place in it.
  - `header_font` object, nullable: Optional header font as {family, url}.
  - `body_font` object, nullable: Optional body font as {family, url}.
  - `logo_background_color` string, nullable: Solid color behind the logo, if any.
  - `ratio` string, nullable: Resize the design to this aspect ratio, e.g. '4:5' or '1:1'.

## Response `201`

Successful Response

- DesignResponse: A freshly created, rendered design.
  - `design_id` string, required: Id of the saved design.
  - `template_id` string, nullable: Template the design was filled from (null if unknown).
  - `business_id` string, required: Business the design belongs to.
  - `image_urls` string[]: Rendered page image URLs (one per page). To post this design, call create_post with this design_id — the media is taken from the design automatically.
  - `width` integer, required: Design width in px.
  - `height` integer, required: Design height in px.
  - `page_count` integer, required: Number of pages in the design.
  - `edit_url` string, required: Open the design in the editor to view or tweak it — a link you can hand the user.

## Other responses

- `400`: Bad request — the input was malformed or otherwise invalid.
- `401`: Authentication failed — the API key is missing or invalid.
- `403`: Forbidden — the key is valid but may not access this resource.
- `404`: Not found — no resource matches the id in the path.
- `422`: Validation error — one or more fields failed validation.
- `429`: Rate limited — retry after the window resets (see Retry-After).
- `500`: Server error — something failed on our side; retry or quote X-Request-Id.

---

[API](https://skmtc.dev/mymarky/apis/marky-public-api.md) · [All operations](https://skmtc.dev/mymarky/apis/marky-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/mymarky/apis/marky-public-api/revisions/25aeacae455c?raw)
