---
title: "Link an email to a workflow"
method: POST
path: "/v1/design_studio/emails/{id}/link"
tags: ["Design Studio"]
---

# Link an email to a workflow

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

Link a Design Studio email to a workflow: a transactional message, a newsletter, an automation, or an API-triggered broadcast. After you link an email, [publish it](/integrations/api/app/tag/design-studio/publishEmail/) to push the content live.

You can only link an email to one workflow or action at a time. If the workflow or action is already linked to a *different* Design Studio email, the request fails with a `409` unless you pass `"force": true`, which replaces (and unlinks) the other email.

## Path parameters

- `id` string, uuid, required

## Request body

- LinkRequest
  - `target` LinkTarget, required — The workflow to link the content to.
    - `type` 'transactional_message' | 'newsletter' | 'campaign_action', required — The kind of workflow to link. Provide the matching ID field for the type you choose. Use `campaign_action` for an automation or API-triggered broadcast.
    - `transactional_message_id` integer — The ID of the transactional message to link your content to. Required when `type` is `transactional_message`.
    - `newsletter_id` integer — The ID of the newsletter to link your content to. Required when `type` is `newsletter`.
    - `action_id` integer — The ID of the action in the automation or API-triggered broadcast to link your content to. Required when `type` is `campaign_action`.
  - `force` boolean — Replace an existing link if the workflow or action is already linked to *different* Design Studio content.

## Response `200`

Email linked

- LinkResponse
  - `node_id` string, uuid — The UUID of the linked message.
  - `template_id` integer — The ID of the workflow template the content is now linked to.
  - `target` LinkTargetResponse — The workflow linked to the message. The response returns `campaign_action` for an automation or an API-triggered broadcast.
    - `type` 'transactional_message' | 'newsletter' | 'campaign_action', required — The type of workflow linked.
    - `transactional_message_id` integer — The ID of the transactional message linked.
    - `newsletter_id` integer — The ID of the newsletter linked.
    - `action_id` integer — The ID of the action in the automation or API-triggered broadcast that was linked.

## Other responses

- `400` — Bad request. Possible reasons include invalid or missing IDs, attempting to update a translation rather than the default template, or trying to link an email already tied to a workflow.
- `401` — Unauthorized - missing or invalid API key
- `404` — Resource not found
- `409` — The destination is already linked to a different Design Studio email. Pass `"force": true` to replace that link.

## Changes

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

[Change history](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference/changes/v1/design_studio/emails/:id/link/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/5da2740beeb5/schema)
