---
title: "Create and send a newsletter"
method: POST
path: "/v1/newsletters"
tags: ["Newsletters"]
---

# Create and send a newsletter

`POST /v1/newsletters`

Create a newsletter and optionally schedule it or send it immediately.

To send the newsletter immediately, set `send_now` to `true`. To schedule for later, set `scheduled_at` to a Unix timestamp in the future. If you don't set either, the newsletter is created as a draft.

If you [enabled a subscription center](/journeys/channels/subscriptions/center/#enable-sub-center) in your workspace, `subscription_topic_id` is required. Use the [subscription center endpoint](/integrations/api/app/tag/subscription-center/getTopics/) to find IDs.

Use standard HTML/CSS for the `body` of an email; this endpoint can't pull in global style variables or render our Design Studio's component syntax. You can create Design Studio emails through [other endpoints](/integrations/api/app/tag/design-studio/). All requests must be less than 1 MB.

## Request body

- union
  - CreateEmailNewsletter — Optional newsletter rate limiting. If you set `rate_limit_email_rate` or `rate_limit_time_period`, set both; `rate_limit_spread` can be set alone.
    - `name` string, required — The name of the newsletter.
    - `recipients` object, required — Filter conditions that define the newsletter's recipients. Combine `segment` and `attribute` conditions with `and`, `or`, and `not` operators. This endpoint enforces a strict shape: * The outermost object must be a single `and` array. * Every operator or condition object takes exactly **one** key: `and`, `or`, `not`, `segment`, or `attribute`. An object with two keys—like `not` alongside `and`—is rejected with an "Invalid filter spec" error. * Segment conditions must be wrapped in an `or` array, even for a single segment—and `or` arrays can contain only segment conditions. * To exclude segments, `not` must contain an `or` of segment conditions and sit as its own item inside the `and` array. * Attribute conditions sit directly in the `and` array, unwrapped. To negate an attribute condition, set `inverse: true` on the attribute itself—`not` can't contain attribute conditions. The email example on this operation shows or-wrapped segments combined with a negated attribute; for the common "include segment A, exclude segment B" pattern, see the **include one segment, exclude another** request example. See [Format API-triggered broadcasts](/messaging/send/broadcasts/api-triggered-data-format/#overriding-recipients) for general operator behavior.
      - `and` object[] — An array of conditions that must all be true.
      - `or` object[] — An array of conditions where at least one must be true. On this endpoint, `or` arrays can contain only segment conditions.
      - `not` object — A condition or group of conditions to exclude. On this endpoint, `not` must contain an `or` of segment conditions and sit as its own item inside the `and` array. An object with both `and` and `not` keys is rejected with an "Invalid filter spec" error.
      - `segment` object — A segment condition.
        - `id` integer — The ID of a segment.
      - `attribute` object — A customer attribute condition.
        - `field` string — The attribute name.
        - `operator` 'eq' | 'exists' — The comparison operator.
        - `value` string — The value to compare against. Required when `operator` is `eq`.
        - `inverse` boolean — Set to `true` for "is not equal" or "does not exist".
    - `send_now` boolean — If `true`, the newsletter is sent immediately after creation. You cannot set both `send_now` and `scheduled_at`.
    - `scheduled_at` integer — A Unix timestamp indicating when to send the newsletter. The time must be in the future. You cannot set both `send_now` and `scheduled_at`.
    - `subscription_topic_id` integer — The newsletter audience's subscription topic ID. Required when [subscription center](/journeys/channels/subscriptions/center/#enable-sub-center) is enabled; otherwise sends to globally subscribed profiles.
    - `rate_limit_email_rate` integer — Maximum number of messages per time period. **NOTE:** Though this states `email_rate`, you can use this for other message channels. Only fixed rate limits are supported, not [daily ramp limits](/journeys/send/broadcasts/newsletters/#daily-ramp).
    - `rate_limit_time_period` 60 | 3600 | 86400 — Time period in seconds for rate limiting. Must be one of 60 (minute), 3600 (hour), or 86400 (day).
    - `rate_limit_spread` boolean — When `true`, spreads messages evenly across the time period. Otherwise, it sends as fast as possible up to the limit in each period.
    - `type` 'email', required — The channel type for the newsletter.
    - `subject` string, required — The subject line of the email.
    - `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` string, required — The HTML body content of the email. Use standard HTML/CSS, not syntax unique to Design Studio.
    - `body_plain` string — The plaintext body of the email. If provided, this overwrites the auto-generated plaintext.
    - `layout_id` integer — The ID of the [layout](/journeys/channels/email/layouts/3-layouts-and-customerio/) you want to use for the email. If you don't set one, the email uses your workspace's default layout. Find a layout's ID in its URL.
    - `from` string — The address to send the email from, in the format `Name <email@domain.com>`. You can set `from` or `from_id`, but not both. Use one of the `address` values from [List sender identities](/integrations/api/app/tag/sender-identities/listSenders/).
    - `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.
  - CreateSmsNewsletter — Optional newsletter rate limiting. If you set `rate_limit_email_rate` or `rate_limit_time_period`, set both; `rate_limit_spread` can be set alone.
    - `name` string, required — The name of the newsletter.
    - `recipients` object, required — Filter conditions that define the newsletter's recipients. Combine `segment` and `attribute` conditions with `and`, `or`, and `not` operators. This endpoint enforces a strict shape: * The outermost object must be a single `and` array. * Every operator or condition object takes exactly **one** key: `and`, `or`, `not`, `segment`, or `attribute`. An object with two keys—like `not` alongside `and`—is rejected with an "Invalid filter spec" error. * Segment conditions must be wrapped in an `or` array, even for a single segment—and `or` arrays can contain only segment conditions. * To exclude segments, `not` must contain an `or` of segment conditions and sit as its own item inside the `and` array. * Attribute conditions sit directly in the `and` array, unwrapped. To negate an attribute condition, set `inverse: true` on the attribute itself—`not` can't contain attribute conditions. The email example on this operation shows or-wrapped segments combined with a negated attribute; for the common "include segment A, exclude segment B" pattern, see the **include one segment, exclude another** request example. See [Format API-triggered broadcasts](/messaging/send/broadcasts/api-triggered-data-format/#overriding-recipients) for general operator behavior.
      - `and` object[] — An array of conditions that must all be true.
      - `or` object[] — An array of conditions where at least one must be true. On this endpoint, `or` arrays can contain only segment conditions.
      - `not` object — A condition or group of conditions to exclude. On this endpoint, `not` must contain an `or` of segment conditions and sit as its own item inside the `and` array. An object with both `and` and `not` keys is rejected with an "Invalid filter spec" error.
      - `segment` object — A segment condition.
        - `id` integer — The ID of a segment.
      - `attribute` object — A customer attribute condition.
        - `field` string — The attribute name.
        - `operator` 'eq' | 'exists' — The comparison operator.
        - `value` string — The value to compare against. Required when `operator` is `eq`.
        - `inverse` boolean — Set to `true` for "is not equal" or "does not exist".
    - `send_now` boolean — If `true`, the newsletter is sent immediately after creation. You cannot set both `send_now` and `scheduled_at`.
    - `scheduled_at` integer — A Unix timestamp indicating when to send the newsletter. The time must be in the future. You cannot set both `send_now` and `scheduled_at`.
    - `subscription_topic_id` integer — The newsletter audience's subscription topic ID. Required when [subscription center](/journeys/channels/subscriptions/center/#enable-sub-center) is enabled; otherwise sends to globally subscribed profiles.
    - `rate_limit_email_rate` integer — Maximum number of messages per time period. **NOTE:** Though this states `email_rate`, you can use this for other message channels. Only fixed rate limits are supported, not [daily ramp limits](/journeys/send/broadcasts/newsletters/#daily-ramp).
    - `rate_limit_time_period` 60 | 3600 | 86400 — Time period in seconds for rate limiting. Must be one of 60 (minute), 3600 (hour), or 86400 (day).
    - `rate_limit_spread` boolean — When `true`, spreads messages evenly across the time period. Otherwise, it sends as fast as possible up to the limit in each period.
    - `type` 'twilio', required — The channel type for the newsletter.
    - `body` string, required — The body content of the SMS message.
  - CreatePushNewsletter — Optional newsletter rate limiting. If you set `rate_limit_email_rate` or `rate_limit_time_period`, set both; `rate_limit_spread` can be set alone.
    - `name` string, required — The name of the newsletter.
    - `recipients` object, required — Filter conditions that define the newsletter's recipients. Combine `segment` and `attribute` conditions with `and`, `or`, and `not` operators. This endpoint enforces a strict shape: * The outermost object must be a single `and` array. * Every operator or condition object takes exactly **one** key: `and`, `or`, `not`, `segment`, or `attribute`. An object with two keys—like `not` alongside `and`—is rejected with an "Invalid filter spec" error. * Segment conditions must be wrapped in an `or` array, even for a single segment—and `or` arrays can contain only segment conditions. * To exclude segments, `not` must contain an `or` of segment conditions and sit as its own item inside the `and` array. * Attribute conditions sit directly in the `and` array, unwrapped. To negate an attribute condition, set `inverse: true` on the attribute itself—`not` can't contain attribute conditions. The email example on this operation shows or-wrapped segments combined with a negated attribute; for the common "include segment A, exclude segment B" pattern, see the **include one segment, exclude another** request example. See [Format API-triggered broadcasts](/messaging/send/broadcasts/api-triggered-data-format/#overriding-recipients) for general operator behavior.
      - `and` object[] — An array of conditions that must all be true.
      - `or` object[] — An array of conditions where at least one must be true. On this endpoint, `or` arrays can contain only segment conditions.
      - `not` object — A condition or group of conditions to exclude. On this endpoint, `not` must contain an `or` of segment conditions and sit as its own item inside the `and` array. An object with both `and` and `not` keys is rejected with an "Invalid filter spec" error.
      - `segment` object — A segment condition.
        - `id` integer — The ID of a segment.
      - `attribute` object — A customer attribute condition.
        - `field` string — The attribute name.
        - `operator` 'eq' | 'exists' — The comparison operator.
        - `value` string — The value to compare against. Required when `operator` is `eq`.
        - `inverse` boolean — Set to `true` for "is not equal" or "does not exist".
    - `send_now` boolean — If `true`, the newsletter is sent immediately after creation. You cannot set both `send_now` and `scheduled_at`.
    - `scheduled_at` integer — A Unix timestamp indicating when to send the newsletter. The time must be in the future. You cannot set both `send_now` and `scheduled_at`.
    - `subscription_topic_id` integer — The newsletter audience's subscription topic ID. Required when [subscription center](/journeys/channels/subscriptions/center/#enable-sub-center) is enabled; otherwise sends to globally subscribed profiles.
    - `rate_limit_email_rate` integer — Maximum number of messages per time period. **NOTE:** Though this states `email_rate`, you can use this for other message channels. Only fixed rate limits are supported, not [daily ramp limits](/journeys/send/broadcasts/newsletters/#daily-ramp).
    - `rate_limit_time_period` 60 | 3600 | 86400 — Time period in seconds for rate limiting. Must be one of 60 (minute), 3600 (hour), or 86400 (day).
    - `rate_limit_spread` boolean — When `true`, spreads messages evenly across the time period. Otherwise, it sends as fast as possible up to the limit in each period.
    - `type` 'push', required — The channel type for the newsletter.
    - `subject` string — The title of the push notification. You must provide `subject`, `body`, or both.
    - `body` string — The body content of the push notification. You must provide `subject`, `body`, or both.
  - CreateInAppNewsletter — Optional newsletter rate limiting. If you set `rate_limit_email_rate` or `rate_limit_time_period`, set both; `rate_limit_spread` can be set alone.
    - `name` string, required — The name of the newsletter.
    - `recipients` object, required — Filter conditions that define the newsletter's recipients. Combine `segment` and `attribute` conditions with `and`, `or`, and `not` operators. This endpoint enforces a strict shape: * The outermost object must be a single `and` array. * Every operator or condition object takes exactly **one** key: `and`, `or`, `not`, `segment`, or `attribute`. An object with two keys—like `not` alongside `and`—is rejected with an "Invalid filter spec" error. * Segment conditions must be wrapped in an `or` array, even for a single segment—and `or` arrays can contain only segment conditions. * To exclude segments, `not` must contain an `or` of segment conditions and sit as its own item inside the `and` array. * Attribute conditions sit directly in the `and` array, unwrapped. To negate an attribute condition, set `inverse: true` on the attribute itself—`not` can't contain attribute conditions. The email example on this operation shows or-wrapped segments combined with a negated attribute; for the common "include segment A, exclude segment B" pattern, see the **include one segment, exclude another** request example. See [Format API-triggered broadcasts](/messaging/send/broadcasts/api-triggered-data-format/#overriding-recipients) for general operator behavior.
      - `and` object[] — An array of conditions that must all be true.
      - `or` object[] — An array of conditions where at least one must be true. On this endpoint, `or` arrays can contain only segment conditions.
      - `not` object — A condition or group of conditions to exclude. On this endpoint, `not` must contain an `or` of segment conditions and sit as its own item inside the `and` array. An object with both `and` and `not` keys is rejected with an "Invalid filter spec" error.
      - `segment` object — A segment condition.
        - `id` integer — The ID of a segment.
      - `attribute` object — A customer attribute condition.
        - `field` string — The attribute name.
        - `operator` 'eq' | 'exists' — The comparison operator.
        - `value` string — The value to compare against. Required when `operator` is `eq`.
        - `inverse` boolean — Set to `true` for "is not equal" or "does not exist".
    - `send_now` boolean — If `true`, the newsletter is sent immediately after creation. You cannot set both `send_now` and `scheduled_at`.
    - `scheduled_at` integer — A Unix timestamp indicating when to send the newsletter. The time must be in the future. You cannot set both `send_now` and `scheduled_at`.
    - `subscription_topic_id` integer — The newsletter audience's subscription topic ID. Required when [subscription center](/journeys/channels/subscriptions/center/#enable-sub-center) is enabled; otherwise sends to globally subscribed profiles.
    - `rate_limit_email_rate` integer — Maximum number of messages per time period. **NOTE:** Though this states `email_rate`, you can use this for other message channels. Only fixed rate limits are supported, not [daily ramp limits](/journeys/send/broadcasts/newsletters/#daily-ramp).
    - `rate_limit_time_period` 60 | 3600 | 86400 — Time period in seconds for rate limiting. Must be one of 60 (minute), 3600 (hour), or 86400 (day).
    - `rate_limit_spread` boolean — When `true`, spreads messages evenly across the time period. Otherwise, it sends as fast as possible up to the limit in each period.
    - `type` 'in_app', required — The channel type for the newsletter.
    - `body_json` string, required — JSON body content for the in-app message, as a stringified JSON object—a JSON string, not a nested object. It supports these fields: - `message_id`—string, an identifier for the message - `carta_content`—string, the message content markup from our in-app editor - `display`—object; `mode` (`modal`, `overlay`, `inline`, or `tooltip`) and `value` (the position for modals: `top`, `center`, or `bottom`; the position ID for inline messages). Tooltips take a `tooltip_target` CSS selector instead of `value` - `priority`—integer, delivery order for queued messages: `1` (low), `5` (medium), or `10` (high) - `expiration`—object; if omitted, the message expires after 30 days (60 maximum). Set `type` (`relative` or `absolute`), `unit`, and `value` - `persistent`—boolean, keep the message visible across pages and sessions until your audience dismisses it - `attributes`—object, custom key-value string pairs delivered with the message - `route_rules` and `excluded_route_rules`—objects keyed by platform (`web`, `ios`, or `android`), each holding an array of [page rules](/messaging/channels/in-app/send-in-app-message/#page-rule) with an `operator` (`contains` or `equals`), a `value` (`*` is a wildcard), and an `order` (integer). You can only set page rules when you create a message, and platforms you don't set rules for won't show the message
  - CreateWebhookNewsletter — Optional newsletter rate limiting. If you set `rate_limit_email_rate` or `rate_limit_time_period`, set both; `rate_limit_spread` can be set alone.
    - `name` string, required — The name of the newsletter.
    - `recipients` object, required — Filter conditions that define the newsletter's recipients. Combine `segment` and `attribute` conditions with `and`, `or`, and `not` operators. This endpoint enforces a strict shape: * The outermost object must be a single `and` array. * Every operator or condition object takes exactly **one** key: `and`, `or`, `not`, `segment`, or `attribute`. An object with two keys—like `not` alongside `and`—is rejected with an "Invalid filter spec" error. * Segment conditions must be wrapped in an `or` array, even for a single segment—and `or` arrays can contain only segment conditions. * To exclude segments, `not` must contain an `or` of segment conditions and sit as its own item inside the `and` array. * Attribute conditions sit directly in the `and` array, unwrapped. To negate an attribute condition, set `inverse: true` on the attribute itself—`not` can't contain attribute conditions. The email example on this operation shows or-wrapped segments combined with a negated attribute; for the common "include segment A, exclude segment B" pattern, see the **include one segment, exclude another** request example. See [Format API-triggered broadcasts](/messaging/send/broadcasts/api-triggered-data-format/#overriding-recipients) for general operator behavior.
      - `and` object[] — An array of conditions that must all be true.
      - `or` object[] — An array of conditions where at least one must be true. On this endpoint, `or` arrays can contain only segment conditions.
      - `not` object — A condition or group of conditions to exclude. On this endpoint, `not` must contain an `or` of segment conditions and sit as its own item inside the `and` array. An object with both `and` and `not` keys is rejected with an "Invalid filter spec" error.
      - `segment` object — A segment condition.
        - `id` integer — The ID of a segment.
      - `attribute` object — A customer attribute condition.
        - `field` string — The attribute name.
        - `operator` 'eq' | 'exists' — The comparison operator.
        - `value` string — The value to compare against. Required when `operator` is `eq`.
        - `inverse` boolean — Set to `true` for "is not equal" or "does not exist".
    - `send_now` boolean — If `true`, the newsletter is sent immediately after creation. You cannot set both `send_now` and `scheduled_at`.
    - `scheduled_at` integer — A Unix timestamp indicating when to send the newsletter. The time must be in the future. You cannot set both `send_now` and `scheduled_at`.
    - `subscription_topic_id` integer — The newsletter audience's subscription topic ID. Required when [subscription center](/journeys/channels/subscriptions/center/#enable-sub-center) is enabled; otherwise sends to globally subscribed profiles.
    - `rate_limit_email_rate` integer — Maximum number of messages per time period. **NOTE:** Though this states `email_rate`, you can use this for other message channels. Only fixed rate limits are supported, not [daily ramp limits](/journeys/send/broadcasts/newsletters/#daily-ramp).
    - `rate_limit_time_period` 60 | 3600 | 86400 — Time period in seconds for rate limiting. Must be one of 60 (minute), 3600 (hour), or 86400 (day).
    - `rate_limit_spread` boolean — When `true`, spreads messages evenly across the time period. Otherwise, it sends as fast as possible up to the limit in each period.
    - `type` 'webhook', required — The channel type for the newsletter.
    - `body` string, required — The body content of the webhook request.
    - `request_method` 'DELETE' | 'GET' | 'POST' | 'PUT' | 'PATCH', required — The HTTP method for the webhook request.
    - `url` string, required — The URL to send the webhook request to.
  - CreateInboxNewsletter — Optional newsletter rate limiting. If you set `rate_limit_email_rate` or `rate_limit_time_period`, set both; `rate_limit_spread` can be set alone.
    - `name` string, required — The name of the newsletter.
    - `recipients` object, required — Filter conditions that define the newsletter's recipients. Combine `segment` and `attribute` conditions with `and`, `or`, and `not` operators. This endpoint enforces a strict shape: * The outermost object must be a single `and` array. * Every operator or condition object takes exactly **one** key: `and`, `or`, `not`, `segment`, or `attribute`. An object with two keys—like `not` alongside `and`—is rejected with an "Invalid filter spec" error. * Segment conditions must be wrapped in an `or` array, even for a single segment—and `or` arrays can contain only segment conditions. * To exclude segments, `not` must contain an `or` of segment conditions and sit as its own item inside the `and` array. * Attribute conditions sit directly in the `and` array, unwrapped. To negate an attribute condition, set `inverse: true` on the attribute itself—`not` can't contain attribute conditions. The email example on this operation shows or-wrapped segments combined with a negated attribute; for the common "include segment A, exclude segment B" pattern, see the **include one segment, exclude another** request example. See [Format API-triggered broadcasts](/messaging/send/broadcasts/api-triggered-data-format/#overriding-recipients) for general operator behavior.
      - `and` object[] — An array of conditions that must all be true.
      - `or` object[] — An array of conditions where at least one must be true. On this endpoint, `or` arrays can contain only segment conditions.
      - `not` object — A condition or group of conditions to exclude. On this endpoint, `not` must contain an `or` of segment conditions and sit as its own item inside the `and` array. An object with both `and` and `not` keys is rejected with an "Invalid filter spec" error.
      - `segment` object — A segment condition.
        - `id` integer — The ID of a segment.
      - `attribute` object — A customer attribute condition.
        - `field` string — The attribute name.
        - `operator` 'eq' | 'exists' — The comparison operator.
        - `value` string — The value to compare against. Required when `operator` is `eq`.
        - `inverse` boolean — Set to `true` for "is not equal" or "does not exist".
    - `send_now` boolean — If `true`, the newsletter is sent immediately after creation. You cannot set both `send_now` and `scheduled_at`.
    - `scheduled_at` integer — A Unix timestamp indicating when to send the newsletter. The time must be in the future. You cannot set both `send_now` and `scheduled_at`.
    - `subscription_topic_id` integer — The newsletter audience's subscription topic ID. Required when [subscription center](/journeys/channels/subscriptions/center/#enable-sub-center) is enabled; otherwise sends to globally subscribed profiles.
    - `rate_limit_email_rate` integer — Maximum number of messages per time period. **NOTE:** Though this states `email_rate`, you can use this for other message channels. Only fixed rate limits are supported, not [daily ramp limits](/journeys/send/broadcasts/newsletters/#daily-ramp).
    - `rate_limit_time_period` 60 | 3600 | 86400 — Time period in seconds for rate limiting. Must be one of 60 (minute), 3600 (hour), or 86400 (day).
    - `rate_limit_spread` boolean — When `true`, spreads messages evenly across the time period. Otherwise, it sends as fast as possible up to the limit in each period.
    - `type` 'inbox', required — The channel type for the newsletter.
    - `body_json` string, required — JSON body content for the inbox message, as a stringified JSON object. The fields you include depend on how you [set up your inbox](/journeys/channels/in-app/inbox/setup/): - `topics`—array, topics your audience can filter by in their inbox - `type`—string, context that helps render the inbox message - `properties`—object, your message info like the title, body, link, and image - `expiration`—object; if omitted, the message expires after 30 days. Otherwise set `type` (`relative` or `absolute`), `unit` (`seconds`, `minutes`, `hours`, or `days`; relative only), and `value` (number of units, or a unix timestamp if absolute)

## Response `200`

Returns the newly created newsletter.

- object
  - `newsletter` NewsletterObject
    - `id` integer — The identifier for a newsletter.
    - `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, Newsletters, Segments, and Templates), and the timestamp is the last time the object was updated.
    - `content_ids` integer[] — A list of message variants in a newsletter, where a variant is a translation or A/B test.
    - `name` string — The name of the newsletter. Must be 190 characters or less.
    - `sent_at` integer — The last time the newsletter was sent.
    - `created` integer — The date time when the referenced ID was created.
    - `updated` integer — The date time when the referenced ID was last updated.
    - `type` 'email' | 'webhook' | 'twilio' | 'push' | 'in_app' | 'inbox' — Channel type for a newsletter or newsletter content variant.
    - `tags` string[] — An array of tags associated with the newsletter.
    - `recipient_segment_ids` integer[] — If the recipient conditions included segments, this returns a list of those segment ids.
    - `subscription_topic_id` integer — If you enabled a [subscription center](/journeys/channels/subscriptions/center/) on your workspace, this returns the id of the subscription preference you set.

## Other responses

- `400` — The request is invalid. For example, the newsletter has no valid channel set, no recipients configured, or the request body is malformed.
- `422` — Validation error. The request body contains invalid or conflicting values. Possible reasons include: - Missing or invalid `subscription_topic_id` (required when a subscription center is enabled) - Invalid `from_id` or unverified/malformed `from` address - Both `from_id` and `from` provided (use one or the other) - Invalid channel `type` - Missing required content fields for the channel type (`subject`, `body`, `body_json`, `request_method`, `url`) - Invalid `request_method` for webhook newsletters - Sender uses a transactional IP pool - Recipients include a temporary segment
- `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`

[Change history](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference/changes/v1/newsletters/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)
