---
title: "Update a one-time send variant"
method: PUT
path: "/v1/newsletters/{newsletter_id}/contents/{content_id}"
tags: ["Newsletter Variants"]
---

# Update a one-time send variant

`PUT /v1/newsletters/{newsletter_id}/contents/{content_id}`

## Request

- Base URL: `https://api.customer.io`
- URL: `https://api.customer.io/v1/newsletters/{newsletter_id}/contents/{content_id}`
- Auth: HTTP bearer

Update the content of a one-time send (referred to as a "newsletter" in our APIs): the default message, a test variant in an A/B test group, or a translation.

For an email, you can also update the envelope: from address, subject line, etc.

**NOTE**: You cannot manage content made with the drag-and-drop editor via API, and you cannot use this endpoint to update Design Studio emails. You can, however, [manage Design Studio content with other endpoints](/integrations/api/design-studio/). You also can't update in-app or inbox message content through the API—use the message editor instead.

## Request body

- union
  - object: Update the contents of an email one-time send variant. You can set the sender with `from_id`. If you don't provide it, the existing sender is preserved.
    - `type` 'email': Channel type for a one-time send or one-time send content variant.
    - `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.
    - `body` string: The HTML body of the email. You cannot modify the body if you created the one-time send with Design Studio or the drag-and-drop editor.
    - `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.
    - `body_plain` string: By default, your workspace generates a plaintext version of your message body for each delivery. Use this key to override the default plain text body.
    - `subject` string: The subject line for an `email` action.
    - `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.
    - `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_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.
    - `recipient` string: The recipient address for the one-time send. By default, it's `{{customer.email}}`.
  - object: Update the contents of an SMS one-time send variant.
    - `type` 'twilio': Channel type for a one-time send or one-time send content variant.
    - `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.
    - `body` string: The body of the SMS message.
  - object: Update the contents of a push notification one-time send variant.
    - `type` 'push': Channel type for a one-time send or one-time send content variant.
    - `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.
    - `subject` string: The title of the push notification.
    - `body` string: The body of the push notification.
  - object: Update the contents of a webhook one-time send variant.
    - `type` 'webhook': Channel type for a one-time send or one-time send content variant.
    - `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.
    - `body` string: The body content of the webhook request.
    - `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: You can't update in-app message content through the API—you can only set it when you [create the message](/integrations/api/app/tag/newsletters/createNewsletter/). Use the message editor to update the content of your message.
    - `type` 'in_app': Channel type for a one-time send or one-time send content variant.
    - `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.
  - object: You can't update inbox message content through the API—you can only set it when you [create the message](/integrations/api/app/tag/newsletters/createNewsletter/). Use the message editor to update the content of your inbox message.
    - `type` 'inbox': Channel type for a one-time send or one-time send content variant.
    - `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.

## Response `200`

Returns the updated one-time send variant.

- object
  - `content` GetContentObject
    - `id` integer: The identifier of a one-time send variant—a language in a multi-language one-time send or a test in an A/B test.
    - `newsletter_id` integer: The identifier for a one-time send.
    - `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 variant, if it exists.
    - `layout` string: The layout used for the variant, if it exists.
    - `body` string: The body of the variant. You cannot modify the body if you created it with our drag-and-drop editor.
    - `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.
    - `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` 'email' | 'webhook' | 'twilio' | 'push' | 'in_app' | 'inbox': Channel type for a one-time send or one-time send content variant.
    - `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.
    - `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.

## Other responses

- `400`: The request is malformed.
- `404`: The one-time send or variant does 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-02** `5da2740beeb5`: 1 info
  - added the media type `application/json` for the response with the status `429`

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