---
title: "Reschedule a scheduled email message"
method: PATCH
path: "/email_messages/{email_id}/schedule"
tags: ["Email Messages"]
---

# Reschedule a scheduled email message

`PATCH /email_messages/{email_id}/schedule`

Moves an existing scheduled email to a new future send time. Only the delivery time (`scheduled_at`) changes; the message ID, content, recipients, tags, and metadata remain unchanged. Returns `409 Conflict` if the message is no longer scheduled or its scheduled-send worker has already started processing it. This route emits no dedicated `rescheduled` event.

## Path parameters

- `email_id` string, uuid, required

## Request body

- RescheduleEmailMessageRequest — Only the delivery time is mutable; any other request fields are ignored.
  - `scheduled_at` string, date-time, required — New ISO 8601 delivery time. Must be strictly in the future.

## Response `200`

Scheduled email rescheduled. The response matches the single-message GET representation.

- EmailMessageDetailResponse
  - `data` EmailMessageDetail, required
    - `record_type` 'email_message', required
    - `id` string, uuid, required
    - `status` 'queued' | 'scheduled' | 'cancelled' | 'sandbox' | 'sending' | 'sent' | 'failed' | 'deferred' | 'delivered' | 'bounced' | 'complained' | 'rejected' | 'opened' | 'clicked' | 'unsubscribed', required — Current status of an email message. Lifecycle statuses (queued, scheduled, etc.) are set on creation. Delivery statuses (delivered, bounced, etc.) are updated by delivery event consumers.
    - `from` EmailAddress, required
      - `email` string, required
      - `name` string
    - `to` EmailAddress[], required
      - `email` string, required
      - `name` string
    - `cc` EmailAddress[], required
      - `email` string, required
      - `name` string
    - `bcc` EmailAddress[], required
      - `email` string, required
      - `name` string
    - `reply_to` string, nullable, required
    - `subject` string, required
    - `template_id` string, uuid, nullable, required
    - `template_variables` object, required
    - `tags` string[], required — Customer-supplied tags stored with the message.
    - `metadata` object, required — Customer-supplied metadata stored with the message.
    - `attachments` AttachmentResponse[], required
      - `url` string, uri, nullable, required — Telnyx-hosted public URL for the attachment content.
      - `sha256` string, nullable, required — SHA-256 hex digest of the attachment content.
      - `size_bytes` integer, nullable, required — Attachment size in bytes.
      - `filename` string, required
      - `content_type` string, required
      - `disposition` string, required — MIME disposition (e.g. `attachment` or `inline`). Runtime passes through the stored value without enforcing an enum.
      - `content_id` string, nullable, required — MIME Content-ID for inline references.
    - `events` EmbeddedMessageEvent[], required
      - `type` 'queued' | 'deferred' | 'scheduled' | 'cancelled' | 'sandbox' | 'sending' | 'sent' | 'failed' | 'delivered' | 'bounced' | 'complained' | 'suppressed' | 'rejected' | 'opened' | 'clicked' | 'unsubscribed' | 'daily_limit_exceeded' | 'scan_deferred' | 'quarantined' | 'quarantine_released' | 'quarantine_release_dispatched' | 'quarantine_rejected' | 'quarantine_expired' | 'gw_reject' | 'injection_timeout' | 'expired', required — Bare stored event names returned by message history. In addition to the normal send and delivery lifecycle, polling can expose suppression, scan, and quarantine lifecycle rows. Sharp canonical names gw_reject, injection_timeout, and expired distinguish gateway rejection, ambiguous injection timeout, and MTA expiration. The failed and bounced names remain valid for system/admin failures and hard bounces respectively. Existing stored rows retain their original names.
      - `occurred_at` string, date-time, required
      - `payload` object
    - `created_at` string, date-time, required
    - `scheduled_at` string, date-time — Present when a scheduled_at value was stored. Persists even after the scheduled send has been processed or cancelled.
    - `inline_css` boolean — Present when true in the immediate create response. Not persisted; absent on subsequent GET requests.
    - `sandbox` boolean — Present when sandbox mode was used.
    - `recipient_statuses` object — Per-status recipient counts for the message. Present only for outbound messages with recipient rows. Keys are recipient statuses, values are counts. Example: `{"delivered": 998, "bounced": 2}`.
    - `suppressed` SuppressedRecipient[] — Recipients excluded from delivery by suppression checks, with reasons. On batch items, present when that item had suppressed recipients; all other recipients of the item still receive the message. For single sends this information appears at the top level of the response instead (see EmailMessageResponse.suppressed).
      - `to` string, email, required — Suppressed recipient email address.
      - `reason` string, required — Suppression reason returned by the recipient suppression service.
      - `scope` string, required — Scope at which the suppression applies.
      - `override_allowed` boolean, required — Whether an authorized send may override this suppression.
    - `text_body` string, nullable, required — Plain-text body submitted for the message.
    - `html_body` string, nullable, required — HTML body submitted for the message.

## Other responses

- `401` — Not authorized (10006).
- `404` — Resource not found (10001).
- `409` — The email is not scheduled or its scheduled-send worker is already processing it.
- `422` — `scheduled_at` is missing, invalid ISO 8601, or not in the future.

## Changes

> 92 revisions in range; 1 not diffed.

- **2026-09-23** `16bfa298dc71` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/team-telnyx/apis/telnyx-api-2/changes/email_messages/:email_id/schedule/patch.md)

---

[API](https://skmtc.dev/team-telnyx/apis/telnyx-api-2.md) · [All operations](https://skmtc.dev/team-telnyx/apis/telnyx-api-2/llms.txt) · [OpenAPI document](https://skmtc.dev/team-telnyx/apis/telnyx-api-2/revisions/d8b8159753ee?raw)
