---
title: "Update a translation of a broadcast message"
method: PUT
path: "/v1/broadcasts/{broadcast_id}/actions/{action_id}/language/{language}"
tags: ["Broadcasts"]
---

# Update a translation of a broadcast message

`PUT /v1/broadcasts/{broadcast_id}/actions/{action_id}/language/{language}`

Update a translation of a specific broadcast action, including the body of messages or HTTP requests.

**NOTE** You cannot manage content made with Design Studio with this endpoint. Use the [Design Studio APIs](/integrations/api/app/tag/design-studio/) instead.

## Request body

- union
  - object
    - `id` integer — The identifier for an action.
    - `broadcast_id` integer — The identifier for a broadcast.
    - `deduplicate_id` string — An identifier in the format `id:timestamp` where the id is for the object you're working with (Automations, Deliveries, Exports, Identities, One-time sends, Segments, and Templates), and the timestamp is the last time the object was updated.
    - `name` string — The name of the action, if it exists.
    - `layout` string — The layout used for the action, if it exists.
    - `created` integer — The date time when the referenced ID was created.
    - `updated` integer — The date time when the referenced ID was last updated.
    - `body` string — The body of the action. You cannot modify the body if you created it with our drag-and-drop editor.
    - `type` 'email' | 'in_app' | 'push' | 'twilio' | 'slack' | 'whatsapp' — The type of action.
    - `sending_state` 'automatic' | 'draft' | 'off' — Determines the sending behavior for the action. `automatic` sends the action automatically when triggered; `draft` queues drafts when the action is triggered; or `off` to disable the action.
    - `language` string — The language variant for your message. If you don't use our [localization feature](/journeys/channels/localization/getting-started), or this is the default message, this value is an empty string.
    - `from` string — The address that the message is from, relevant if the action `type` is `email`.
    - `from_id` integer — The identifier of the `from` address, commonly known as the "sender". Use [List sender identities](/integrations/api/app/tag/sender-identities/listSenders/) to find valid IDs.
    - `reply_to` string — The address that receives replies for the message, if applicable.
    - `reply_to_id` integer, nullable — The identifier for the `reply_to` address, if applicable. Use [List sender identities](/integrations/api/app/tag/sender-identities/listSenders/) to find valid IDs.
    - `preprocessor` 'premailer' — If CSS pre-processing is enabled, this key is populated with `premailer`. Note, Juice replaced Premailer as the pre-processor, but you will only see `premailer` as the value.
    - `recipient` string — The recipient address for an action.
    - `subject` string — The subject line for an `email` action.
    - `cc` string — The carbon-copy address(es) for this action.
    - `bcc` string — The blind-copy address(es) for this action.
    - `fake_bcc` boolean — If true, rather than sending true copies to BCC addresses, Customer.io sends a copy of the message with the subject line containing the recipient address(es).
    - `preheader_text` string — [Also known as "preview text"](/journeys/channels/email/headers/custom-preheader-text/), this is the small block of text shown in an email inbox next to or underneath the subject line.
    - `body_amp` string — AMP-enabled content for your email. If a recipient's email client doesn't support AMP, they receive your `body` content instead. Make sure you're [set up to send AMP](/journeys/channels/email/layouts/amp-for-email/) first.
    - `headers` object[] — Headers you want to add or update. Names and values must be strings, with no non-ASCII characters or spaces. You can't overwrite reserved headers.
      - `name` string — The name of the header.
      - `value` string — The value of the header.
  - object
    - `id` integer — The identifier for an action.
    - `broadcast_id` integer — The identifier for a broadcast.
    - `deduplicate_id` string — An identifier in the format `id:timestamp` where the id is for the object you're working with (Automations, Deliveries, Exports, Identities, One-time sends, Segments, and Templates), and the timestamp is the last time the object was updated.
    - `name` string — The name of the action.
    - `layout` string — The layout used for the action, if it exists.
    - `created` integer — The date time when the referenced ID was created.
    - `updated` integer — The date time when the referenced ID was last updated.
    - `body` string — The body of your SMS.
    - `language` string — The language variant for your message. If you don't use our [localization feature](/journeys/channels/localization/getting-started), or this is the default message, this value is an empty string.
    - `type` 'twilio' — For SMS/MMS messages, the `type` is always `twilio`.
    - `image_url` string — The URL of the image in your SMS (MMS) message.
    - `sending_state` 'automatic' | 'draft' | 'off' — Determines the sending behavior for the action. `automatic` sends the action automatically when triggered; `draft` queues drafts when the action is triggered; or `off` to disable the action.
    - `recipient` string — The recipient, usually an attribute you reference with Liquid like `{{customer.phone}}`. If you use Liquid, this field is blank in `GET` responses because we resolve the recipient at send time.
  - object — The action object for WhatsApp messages sent from Customer.io using your Facebook Business Account (not Twilio). Messages sent through Twilio still use the `twilio` type and are treated similarly to SMS messages.
    - `id` integer — The identifier for an action.
    - `broadcast_id` integer — The identifier for a broadcast.
    - `deduplicate_id` string — An identifier in the format `id:timestamp` where the id is for the object you're working with (Automations, Deliveries, Exports, Identities, One-time sends, Segments, and Templates), and the timestamp is the last time the object was updated.
    - `name` string — The name of the action.
    - `created` integer — The date time when the referenced ID was created.
    - `updated` integer — The date time when the referenced ID was last updated.
    - `body` string — A JSON string containing WhatsApp template metadata from Meta and template parameters with Liquid variables. Use `GET /v1/environments/{environment_id}/whatsapp/templates` to list templates.
    - `body_json` string — For visual editor content (if applicable).
    - `language` string — The language variant for your message. If you don't use our [localization feature](/journeys/channels/localization/getting-started), or this is the default message, this value is an empty string.
    - `type` 'whatsapp' — For WhatsApp messages sent from Customer.io using your Facebook Business Account (not Twilio), the `type` is always `whatsapp`.
    - `sending_state` 'automatic' | 'draft' | 'off' — Determines the sending behavior for the action. `automatic` sends the action automatically when triggered; `draft` queues drafts when the action is triggered; or `off` to disable the action.
    - `recipient` string — The recipient's phone number in E.164 format, usually referenced with Liquid like `{{customer.phone}}`. If you use Liquid, this field is blank in `GET` responses because we resolve the recipient at send time.
    - `sender_identity_id` integer — The ID of the WhatsApp Business phone number to send from. This corresponds to a phone number registered in your WhatsApp Business Account and synced via `GET /v1/environments/{environment_id}/whatsapp/sync`.
    - `send_to_unsubscribed` boolean — Whether to send this message to unsubscribed customers.
    - `tracked` boolean — Whether links in template parameters should be tracked.
  - object
    - `id` integer — The identifier for an action.
    - `broadcast_id` integer — The identifier for a broadcast.
    - `deduplicate_id` string — An identifier in the format `id:timestamp` where the id is for the object you're working with (Automations, Deliveries, Exports, Identities, One-time sends, Segments, and Templates), and the timestamp is the last time the object was updated.
    - `name` string — The name of the action, if it exists.
    - `layout` string — The layout used for the action, if it exists.
    - `created` integer — The date time when the referenced ID was created.
    - `updated` integer — The date time when the referenced ID was last updated.
    - `body` string — The body of the action. You cannot modify the body if you created it with our drag-and-drop editor.
    - `type` 'webhook' — The type of action.
    - `url` string — The URL to send a webhook to, applies to `webhook` type actions.
    - `headers` string, json — A JSON string containing header objects with `name` and `value`. Names and values must be strings, with no non-ASCII characters or spaces. You can't overwrite reserved headers.
    - `method` 'get' | 'post' | 'put' | 'delete' | 'patch' — The HTTP method for your webhook.
    - `sending_state` 'automatic' | 'draft' | 'off' — Determines the sending behavior for the action. `automatic` sends the action automatically when triggered; `draft` queues drafts when the action is triggered; or `off` to disable the action.

## Response `200`

Returns the updated broadcast action.

- object
  - `action` union
    - object
      - `id` integer — The identifier for an action.
      - `broadcast_id` integer — The identifier for a broadcast.
      - `deduplicate_id` string — An identifier in the format `id:timestamp` where the id is for the object you're working with (Automations, Deliveries, Exports, Identities, One-time sends, Segments, and Templates), and the timestamp is the last time the object was updated.
      - `name` string — The name of the action, if it exists.
      - `layout` string — The layout used for the action, if it exists.
      - `created` integer — The date time when the referenced ID was created.
      - `updated` integer — The date time when the referenced ID was last updated.
      - `body` string — The body of the action. You cannot modify the body if you created it with our drag-and-drop editor.
      - `type` 'email' | 'in_app' | 'push' | 'twilio' | 'slack' | 'whatsapp' — The type of action.
      - `sending_state` 'automatic' | 'draft' | 'off' — Determines the sending behavior for the action. `automatic` sends the action automatically when triggered; `draft` queues drafts when the action is triggered; or `off` to disable the action.
      - `language` string — The language variant for your message. If you don't use our [localization feature](/journeys/channels/localization/getting-started), or this is the default message, this value is an empty string.
      - `from` string — The address that the message is from, relevant if the action `type` is `email`.
      - `from_id` integer — The identifier of the `from` address, commonly known as the "sender". Use [List sender identities](/integrations/api/app/tag/sender-identities/listSenders/) to find valid IDs.
      - `reply_to` string — The address that receives replies for the message, if applicable.
      - `reply_to_id` integer, nullable — The identifier for the `reply_to` address, if applicable. Use [List sender identities](/integrations/api/app/tag/sender-identities/listSenders/) to find valid IDs.
      - `preprocessor` 'premailer' — If CSS pre-processing is enabled, this key is populated with `premailer`. Note, Juice replaced Premailer as the pre-processor, but you will only see `premailer` as the value.
      - `recipient` string — The recipient address for an action.
      - `subject` string — The subject line for an `email` action.
      - `cc` string — The carbon-copy address(es) for this action.
      - `bcc` string — The blind-copy address(es) for this action.
      - `fake_bcc` boolean — If true, rather than sending true copies to BCC addresses, Customer.io sends a copy of the message with the subject line containing the recipient address(es).
      - `preheader_text` string — [Also known as "preview text"](/journeys/channels/email/headers/custom-preheader-text/), this is the small block of text shown in an email inbox next to or underneath the subject line.
      - `body_amp` string — AMP-enabled content for your email. If a recipient's email client doesn't support AMP, they receive your `body` content instead. Make sure you're [set up to send AMP](/journeys/channels/email/layouts/amp-for-email/) first.
      - `multi_language_branch_action_id` integer — Returned when the action is a language variant of a multi-language message. This id is the same for each variant of a message, so you can use this to retrieve metrics for a message and all its variants.
      - `headers` string, json — A JSON string containing header objects with `name` and `value`. Names and values must be strings, with no non-ASCII characters or spaces. You can't overwrite reserved headers.
    - object
      - `id` integer — The identifier for an action.
      - `broadcast_id` integer — The identifier for a broadcast.
      - `multi_language_branch_action_id` integer — Returned when the action is a language variant of a multi-language message. This id is the same for each variant of a message, so you can use this to retrieve metrics for a message and all its variants.
      - `deduplicate_id` string — An identifier in the format `id:timestamp` where the id is for the object you're working with (Automations, Deliveries, Exports, Identities, One-time sends, Segments, and Templates), and the timestamp is the last time the object was updated.
      - `name` string — The name of the action.
      - `layout` string — The layout used for the action, if it exists.
      - `created` integer — The date time when the referenced ID was created.
      - `updated` integer — The date time when the referenced ID was last updated.
      - `body` string — The body of your SMS.
      - `language` string — The language variant for your message. If you don't use our [localization feature](/journeys/channels/localization/getting-started), or this is the default message, this value is an empty string.
      - `type` 'twilio' — For SMS/MMS messages, the `type` is always `twilio`.
      - `image_url` string — The URL of the image in your SMS (MMS) message.
      - `sending_state` 'automatic' | 'draft' | 'off' — Determines the sending behavior for the action. `automatic` sends the action automatically when triggered; `draft` queues drafts when the action is triggered; or `off` to disable the action.
      - `recipient` string — The recipient, usually an attribute you reference with Liquid like `{{customer.phone}}`. If you use Liquid, this field is blank in `GET` responses because we resolve the recipient at send time.
    - object — The action object for WhatsApp messages sent from Customer.io using your Facebook Business Account (not Twilio). Messages sent through Twilio still use the `twilio` type and are treated similarly to SMS messages.
      - `id` integer — The identifier for an action.
      - `broadcast_id` integer — The identifier for a broadcast.
      - `multi_language_branch_action_id` integer — Returned when the action is a language variant of a multi-language message. This id is the same for each variant of a message, so you can use this to retrieve metrics for a message and all its variants.
      - `deduplicate_id` string — An identifier in the format `id:timestamp` where the id is for the object you're working with (Automations, Deliveries, Exports, Identities, One-time sends, Segments, and Templates), and the timestamp is the last time the object was updated.
      - `name` string — The name of the action.
      - `created` integer — The date time when the referenced ID was created.
      - `updated` integer — The date time when the referenced ID was last updated.
      - `body` string — A JSON string containing WhatsApp template metadata from Meta and template parameters with Liquid variables. Use `GET /v1/environments/{environment_id}/whatsapp/templates` to list templates.
      - `body_json` string — For visual editor content (if applicable).
      - `language` string — The language variant for your message. If you don't use our [localization feature](/journeys/channels/localization/getting-started), or this is the default message, this value is an empty string.
      - `type` 'whatsapp' — For WhatsApp messages sent from Customer.io using your Facebook Business Account (not Twilio), the `type` is always `whatsapp`.
      - `sending_state` 'automatic' | 'draft' | 'off' — Determines the sending behavior for the action. `automatic` sends the action automatically when triggered; `draft` queues drafts when the action is triggered; or `off` to disable the action.
      - `recipient` string — The recipient's phone number in E.164 format, usually referenced with Liquid like `{{customer.phone}}`. If you use Liquid, this field is blank in `GET` responses because we resolve the recipient at send time.
      - `sender_identity_id` integer — The ID of the WhatsApp Business phone number to send from. This corresponds to a phone number registered in your WhatsApp Business Account and synced via `GET /v1/environments/{environment_id}/whatsapp/sync`.
      - `send_to_unsubscribed` boolean — Whether to send this message to unsubscribed customers.
      - `tracked` boolean — Whether links in template parameters should be tracked.
    - object
      - `id` integer — The identifier for an action.
      - `broadcast_id` integer — The identifier for a broadcast.
      - `multi_language_branch_action_id` integer — Returned when the action is a language variant of a multi-language message. This id is the same for each variant of a message, so you can use this to retrieve metrics for a message and all its variants.
      - `deduplicate_id` string — An identifier in the format `id:timestamp` where the id is for the object you're working with (Automations, Deliveries, Exports, Identities, One-time sends, Segments, and Templates), and the timestamp is the last time the object was updated.
      - `name` string — The name of the action, if it exists.
      - `layout` string — The layout used for the action, if it exists.
      - `created` integer — The date time when the referenced ID was created.
      - `updated` integer — The date time when the referenced ID was last updated.
      - `body` string — The body of the action. You cannot modify the body if you created it with our drag-and-drop editor.
      - `type` 'webhook' — The type of action.
      - `url` string — The URL to send a webhook to, applies to `webhook` type actions.
      - `headers` string, json — A JSON string containing header objects with `name` and `value`. Names and values must be strings, with no non-ASCII characters or spaces. You can't overwrite reserved headers.
      - `method` 'get' | 'post' | 'put' | 'delete' | 'patch' — The HTTP method for your webhook.
      - `sending_state` 'automatic' | 'draft' | 'off' — Determines the sending behavior for the action. `automatic` sends the action automatically when triggered; `draft` queues drafts when the action is triggered; or `off` to disable the action.

## Other responses

- `400` — The `broadcastID`, `actionID` or `triggerID` is invalid. Or the `language` does not exist for this action.
- `404` — The broadcast, action, and/or trigger do not exist.
- `429` — Your request is over the 10-per-second limit. `Retry-After` tells you how many seconds you must wait before you send the next request.

## Changes

- **2026-09-18** `80dbb5640491` — 4 info
  - added the optional property `action/oneOf[subschema #1: Email / message]/allOf[subschema #2]/multi_language_branch_action_id` to the response with the `200` status
  - added the optional property `action/oneOf[subschema #2: SMS / MMS]/allOf[subschema #1]/multi_language_branch_action_id` to the response with the `200` status
  - added the optional property `action/oneOf[subschema #3: WhatsApp]/allOf[subschema #1]/multi_language_branch_action_id` to the response with the `200` status
  - added the optional property `action/oneOf[subschema #4: Webhook]/allOf[subschema #1]/multi_language_branch_action_id` to the response with the `200` status
- **2026-09-02** `5da2740beeb5` — 1 info
  - added the media type `application/json` for the response with the status `429`

[Change history](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference/changes/v1/broadcasts/:broadcast_id/actions/:action_id/language/:language/put.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/d9edec5f938c?raw)
