---
title: "Update recipe"
method: PATCH
path: "/api/businesses/{business_id}/recipes/{recipe_id}"
tags: ["businesses"]
---

# Update recipe

`PATCH /api/businesses/{business_id}/recipes/{recipe_id}`

## Request

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

Update a recipe (preset). PATCH merge — only the fields you send change.

Errors:
    400 invalid_request: No fields were given to update.
    401 authentication_required: API key or token is missing, invalid, or revoked.
    403 permission_denied: Your plan does not include API access, or this recipe is not in your org.
    404 resource_not_found: No recipe with that ID exists.
    429 rate_limit_exceeded: You sent too many requests this minute.

## Path parameters

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

## Headers

- `Marky-Version` '2026-04-08' | '2026-07-17' | '2026-08-02' | '2026-08-04' | '2026-08-06'

## Request body

- RecipeUpdateRequest
  - `name` string, nullable: Recipe name.
  - `saved` boolean, nullable: Whether the preset is saved/pinned.
  - `prompt` string, nullable: Freeform brief the preset generates from.
  - `creative_type` string, nullable: Default creative type (e.g. 'design', 'carousel', 'meme').
  - `template_ids` string[], nullable: Templates the preset generates with.
  - `aspect_ratio` string, nullable: Aspect ratio, e.g. '1:1', '9:16', '4:5'.
  - `palettes` Palette[], nullable: Color palettes for generated designs.
    - `name` string: Label for this palette
    - `colors` string[]: Hex color codes in the palette, e.g. ['#0d0c0c', '#FFFFFF', '#121212'].
    - `text_color` string, nullable: Hex color used for body text on designs
    - `accent_color` string, nullable: Hex accent/brand color
    - `background_color` string, nullable: Hex background color for designs
  - `voice` string, nullable: Brand voice override for this preset.
  - `caption_suffix` string, nullable: Text appended to every generated caption.
  - `caption_instructions` string, nullable: Extra caption-writing instructions.
  - `custom_caption_prompt` string, nullable: Custom caption-generation prompt.
  - `custom_meme_prompt` string, nullable: Custom meme-generation prompt.
  - `custom_carousel_prompt` string, nullable: Custom carousel-generation prompt.
  - `ctas` string[], nullable: Call-to-action phrases for designs.
  - `include_stock` boolean, nullable: Whether stock photos may be used.
  - `logo_enabled` boolean, nullable: Whether the logo is placed on designs.
  - `header_font` FontSetting
    - `name` string, required: Font family name, e.g. 'Montserrat'. Must be a font Marky can load (a Google Font, or one with a direct url below).
    - `url` string, nullable: Direct font file URL. Leave null for a Google Font (Marky resolves it by name).
  - `body_font` FontSetting
    - `name` string, required: Font family name, e.g. 'Montserrat'. Must be a font Marky can load (a Google Font, or one with a direct url below).
    - `url` string, nullable: Direct font file URL. Leave null for a Google Font (Marky resolves it by name).
  - `audio_tags` string[], nullable: Audio tags for video generation.
  - `ai_image_model` string, nullable: AI image model to use.
  - `post_count` integer, nullable: How many posts a run generates.
  - `auto_context_enabled` boolean, nullable: Whether auto-context is on.

## Response `200`

Successful Response

- RecipeResponse
  - `name` string, nullable: Recipe name.
  - `saved` boolean, nullable: Whether the preset is saved/pinned.
  - `prompt` string, nullable: Freeform brief the preset generates from.
  - `creative_type` string, nullable: Default creative type (e.g. 'design', 'carousel', 'meme').
  - `template_ids` string[], nullable: Templates the preset generates with.
  - `aspect_ratio` string, nullable: Aspect ratio, e.g. '1:1', '9:16', '4:5'.
  - `palettes` Palette[], nullable: Color palettes for generated designs.
    - `name` string: Label for this palette
    - `colors` string[]: Hex color codes in the palette, e.g. ['#0d0c0c', '#FFFFFF', '#121212'].
    - `text_color` string, nullable: Hex color used for body text on designs
    - `accent_color` string, nullable: Hex accent/brand color
    - `background_color` string, nullable: Hex background color for designs
  - `voice` string, nullable: Brand voice override for this preset.
  - `caption_suffix` string, nullable: Text appended to every generated caption.
  - `caption_instructions` string, nullable: Extra caption-writing instructions.
  - `custom_caption_prompt` string, nullable: Custom caption-generation prompt.
  - `custom_meme_prompt` string, nullable: Custom meme-generation prompt.
  - `custom_carousel_prompt` string, nullable: Custom carousel-generation prompt.
  - `ctas` string[], nullable: Call-to-action phrases for designs.
  - `include_stock` boolean, nullable: Whether stock photos may be used.
  - `logo_enabled` boolean, nullable: Whether the logo is placed on designs.
  - `header_font` FontSetting
    - `name` string, required: Font family name, e.g. 'Montserrat'. Must be a font Marky can load (a Google Font, or one with a direct url below).
    - `url` string, nullable: Direct font file URL. Leave null for a Google Font (Marky resolves it by name).
  - `body_font` FontSetting
    - `name` string, required: Font family name, e.g. 'Montserrat'. Must be a font Marky can load (a Google Font, or one with a direct url below).
    - `url` string, nullable: Direct font file URL. Leave null for a Google Font (Marky resolves it by name).
  - `audio_tags` string[], nullable: Audio tags for video generation.
  - `ai_image_model` string, nullable: AI image model to use.
  - `post_count` integer, nullable: How many posts a run generates.
  - `auto_context_enabled` boolean, nullable: Whether auto-context is on.
  - `id` string, required: Recipe ID
  - `business_id` string, nullable: Business this recipe belongs to
  - `created_at` string, required: When the recipe was created
  - `updated_at` string, nullable: Last update time

## 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)
