---
title: "Link a WhatsApp template to a workflow"
method: POST
path: "/v1/design_studio/whatsapp/{id}/link"
tags: ["WhatsApp link and publish"]
---

# Link a WhatsApp template to a workflow

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

## Request

- Base URL: `https://api.customer.io`
- URL: `https://api.customer.io/v1/design_studio/whatsapp/{id}/link`
- Auth: none declared

Link a WhatsApp template to a workflow or action: a transactional message, a one-time send, an automation action, or an API-triggered broadcast. The workflow or action needs to send WhatsApp messages.

Linking copies the template's current content, recipient, and sender to the workflow right away. You can link a template before you submit it to Meta. After you submit the template, [publish it](/integrations/api/design-studio/tag/whatsapp-link-and-publish/publishWhatsApp/) to push it to the workflow, and wait until its status is `APPROVED` before you start sending.

You can only link a template to one workflow or action at a time. If you try to link a template to a workflow or action that's already linked to a *different* message, the request fails with a `409` unless you pass `"force": true`. The `force` parameter replaces (and unlinks) the other message.

## 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 one-time send 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`

WhatsApp template 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 one-time send linked.
    - `action_id` integer: The ID of the action in the automation or API-triggered broadcast that was linked.

## Other responses

- `400`: The request is invalid due to malformed parameters, missing required fields, or constraint violations.
- `401`: Authentication failed due to a missing or invalid API key.
- `404`: The requested resource was not found.
- `409`: The destination is already linked to a different message. Pass `"force": true` to replace that link.
- `422`: The liquid in the template's content or recipient isn't valid, so Customer.io doesn't link it. Each error's `source.pointer` names the field that failed, as `/data/attributes/content` or `/data/attributes/recipient`. Fix the template, then link it again.

## Changes

- **2026-10-28** `f33c07c62301`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference/changes/v1/design_studio/whatsapp/: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.dev/customer/apis/customer-io-journeys-api-reference/revisions/ac0b282053fe?raw)
