---
title: "Publish an email"
method: POST
path: "/v1/design_studio/emails/{id}/publish"
tags: ["Design Studio"]
---

# Publish an email

`POST /v1/design_studio/emails/{id}/publish`

Publish a linked Design Studio email. This pushes its current content to the workflow it's linked to. You must link an email to a workflow before you can publish it.

Publishing pushes updates to all language variants: the default language and all of the translations. For a single-language email, the publish runs inline and returns `"status": "done"` with the resulting template version mappings. For a multi-language email, the publish may take longer; if it doesn't finish within the request window, the response returns `"status": "pending"` along with a `publish_id` you can poll with [Get publish status](/integrations/api/app/tag/design-studio/getPublishStatus/).

## Path parameters

- `id` string, uuid, required

## Response `200`

Publish completed (`done`) or accepted and still running (`pending`).

- PublishResponse
  - `status` 'done' | 'pending' — Returns `done` when the publish process finished within the request window. Returns `pending` when publish is still running for a multi-language email (poll with `publish_id`).
  - `mappings` PublishMapping[] — The template versions created by the publish. Present when `status` is `done`.
    - `node_id` string, uuid — The UUID of the published email node (default or translation).
    - `template_id` integer — The ID of the workflow template that received the content.
    - `version_id` string — The identifier of the template version created by the publish.
    - `language` string — The language code of the published node. Empty for the default-language email.
  - `publish_id` string — An opaque ID to poll for completion with [Get publish status](/integrations/api/app/tag/design-studio/getPublishStatus/). Present when `status` is `pending`.

## Other responses

- `400` — Bad request. Possible reasons include invalid IDs, the email is not linked to workflow, or a translation uses an unsupported language code.
- `401` — Unauthorized - missing or invalid API key
- `404` — Resource not found
- `409` — The destination automation is backfilling and can't accept content right now. This clears on its own—wait a moment and publish again.
- `422` — The content or its destination can't be published as-is. Possible reasons: - The content has Liquid errors. The `meta` object lists them per language. - The destination won't accept content because it's archived, stopping, or being deleted. - The destination is linked to different Design Studio content than the item you're publishing. - The workspace has no language attribute configured, which multi-language publishing needs. - The language group is over the limit of 50 variants.

## Changes

- **2026-09-02** `5da2740beeb5` — 5 breaking
  - the `errors/items/status` response's property type changed from `integer` to `string` for status `400`
  - the `errors/items/status` response's property type changed from `integer` to `string` for status `401`
  - the `errors/items/status` response's property type changed from `integer` to `string` for status `404`
  - the `errors/items/status` response's property type changed from `integer` to `string` for status `409`
  - …1 more

[Change history](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference/changes/v1/design_studio/emails/:id/publish/post.md)

---

[API](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference.md) · [All operations](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/customer/customer-io-journeys-api-reference/revisions/00b93971a49f/schema)
