---
title: "Update sequence"
method: PUT
path: "/sequences/{sequenceId}"
tags: ["Sequences"]
---

# Update sequence

`PUT /sequences/{sequenceId}`

Updates sequence settings and content, inserts linear or branching steps, or performs revision-guarded graph edits.

## Path parameters

- `sequenceId` string, required

## Request body

- SequenceUpdateRequest
  - `fromEmail` string, email — From address for every email in this sequence. Its domain must be configured and verified.
  - `fromName` string — Display name for a newly created sender profile. Requires fromEmail.
  - `senderProfileId` string — Existing sender profile ID. Mutually exclusive with fromEmail.
  - `replyTo` string, email — Reply-To address for every email in this sequence.
  - `replyToName` string — Display name for a newly created reply profile. Requires replyTo.
  - `replyProfileId` string — Existing reply profile ID. Mutually exclusive with replyTo.
  - `name` string — Updated sequence name.
  - `enrollmentPaused` boolean — Set true to stop new enrollments for an active sequence while current recipients continue. Set false to resume new enrollments.
  - `confirmStructuralChange` boolean — Required when inserting steps or branches, or editing the graph of an active sequence. Set true only after confirming the live-flow impact for current and future recipients.
  - `enrollmentMode` 'unlimited' | 'one_time' | 'matching_field' — Controls sequence re-entry. `unlimited` allows re-entry after completion but prevents concurrent active runs. `one_time` allows one enrollment ever. `matching_field` is only valid for event-triggered sequences and allows concurrent active runs only when the trigger payload resolves to a different event field value.
  - `enrollmentFieldPath` string, nullable — Scalar dot-path event property used by matching_field enrollment on event-based sequences. Array traversal with [] is not supported; use propertyFilters for array matching. Set to null to use built-in defaults.
  - `sendingWindow` SequenceSendingWindow — Optional local-time sending window applied to every email step in a sequence. Email steps that become due outside the window wait until the next allowed local time.
    - `enabled` boolean
    - `timezone` string — IANA timezone for the window.
    - `startTime` string — Earliest local send time in 24-hour HH:mm format.
    - `endTime` string — Latest local send cutoff in 24-hour HH:mm format. Must be later than startTime.
    - `days` string[] — Allowed local days. Omit days when creating or updating to allow every day.
  - `bccEmails` string[], nullable — Email addresses that receive a blind copy of every email this sequence sends, such as a customer support inbox (max 10). Set to null to remove them.
  - `stopCondition` SequenceStopCondition
    - `type` 'none' | 'has_tag' | 'does_not_have_tag' | 'added_to_list' | 'removed_from_list' | 'entered_segment' | 'field_changed' | 'event_received'
    - `value` string, nullable
  - `branch` SequenceBranchInput
    - `afterNodeId` string, required — Existing sequence node ID to insert the branch after.
    - `label` string
    - `branches` SequenceBranchConditionInput[], required — Conditional branches evaluated in order. Each branch should include steps unless allowEmptyPaths is true.
      - `id` string — Optional stable branch ID. Defaults to branch-0, branch-1, etc.
      - `label` string
      - `conditionType` 'has_tag' | 'does_not_have_tag' | 'in_list' | 'in_segment' | 'event_received' | 'link_clicked' | 'field_equals' | 'field_contains' | 'field_greater_than' | 'field_less_than' | 'has_phone' | 'sms_subscribed', required
      - `tagId` string — Tag ID or tag name for has_tag and does_not_have_tag conditions.
      - `tagName` string — Tag name for has_tag and does_not_have_tag conditions.
      - `listId` string — List ID for in_list conditions.
      - `segmentId` string — Segment ID for in_segment conditions.
      - `segmentName` string — Optional display name for in_segment conditions.
      - `eventName` string — Event name for event_received conditions.
      - `linkUrl` string — Optional URL substring for link_clicked conditions. Omit to match any clicked link.
      - `activityScope` 'ever' | 'this_sequence' | 'previous_email' — Scope for event_received and link_clicked conditions.
      - `fieldName` string — Subscriber attribute name for field conditions.
      - `fieldValue` string — Comparison value for field conditions.
      - `steps` SequenceBranchPathStepInput[] — Steps to create in this branch path. Required by default so the path is not an empty placeholder.
        - `type` 'email' | 'sms' | 'delay' | 'create_discount' | 'discount' | 'update_subscriber' | 'condition' | 'webhook' — Step type. Omit for email steps, use sms for a native SMS step, or use delay for a standalone wait.
        - `nodeType` 'logic_delay' | 'action_email' | 'action_sms' | 'action_create_discount' | 'action_add_tag' | 'action_remove_tag' | 'action_add_to_list' | 'action_remove_from_list' | 'action_update_attributes' | 'logic_wait_for_event' | 'logic_condition' | 'action_webhook' — Advanced node type for non-email sequence path actions.
        - `config` SubscriberUpdateConfig — Update Subscriber config. String values may use standalone trigger-event merge tags such as {{event.plan}}, {{event.amount}}, or {{event.active}}. Number and boolean values are coerced after resolution.
          - `label` string
          - `firstName` string, nullable
          - `lastName` string, nullable
          - `status` 'active' | 'unsubscribed' | 'bounced'
          - `customAttributeUpdates` object[]
            - `name` string, required
            - `value` union, required — Literal scalar, null to delete, or one standalone merge tag.
              - …
            - `valueType` 'text' | 'number' | 'boolean'
        - `subject` string — Email subject. Required for email steps.
        - `previewText` string, nullable — Email preview text.
        - `text` string — SMS steps only. Plain-text message body; merge tags like {{FIRST_NAME}} work.
        - `imageUrls` string[] — SMS steps only. Up to 2 publicly reachable image URLs sent as MMS media.
        - `ineligibleAction` 'skip' | 'exit' — SMS steps only. skip (default) continues the sequence when the contact can't receive SMS; exit removes them from the sequence.
        - `label` string — SMS steps only. Display label for the step in the builder.
        - `blocks` EmailBlock[] — Email blocks for email steps. Put visual styling under styles; top-level style keys such as backgroundColor, backgroundOpacity, borderColor, borderWidth, and borderRadius are normalized into styles.
          - `id` string
          - `type` 'text' | 'html' | 'heading' | 'list' | 'button' | 'spacer' | 'divider' | 'image' | 'columns' | 'conditional-group' | 'repeat' | 'card' | 'cta' | 'social' | 'logo' | 'header' | 'footer' | 'video' | 'product' | 'discount-code' | 'code' | 'countdown' | 'hero' | 'testimonial' | 'gallery' | 'badge' | 'table' | 'features' | 'image-card' | 'pricing' | 'author' | 'article' | 'rating' | 'stats' | 'steps' | 'product-grid' | 'poll', required
          - `content` string — Content for text, html, and heading-like blocks.
          - `styles` object — Per-block visual styles. For compatibility, style fields such as backgroundColor, backgroundOpacity, borderColor, borderWidth, and borderRadius can also be supplied at the block top level and are normalized into this object.
            - `paddingTop` number
            - `paddingBottom` number
            - `paddingLeft` number
            - `paddingRight` number
            - `backgroundColor` string
            - `backgroundOpacity` number — Background opacity percentage from 0 to 100.
            - `textColor` string
            - `textAlign` 'left' | 'center' | 'right'
            - `borderRadius` number
            - `borderColor` string
            - `borderWidth` number
            - `bleed` boolean — Stretch the block edge-to-edge across the email container. Top-level blocks only.
          - `conditions` object[] — Optional per-block display rules. The block renders only when every rule matches. The same shape is used for a conditional-group block's top-level `conditions`.
            - `id` string, required
            - `field` 'variable' | 'attribute' | 'email' | 'firstName' | 'lastName', required — `variable` resolves a merge-tag path from the transactional send `variables` or an automation `event` payload (nested paths like `order.total` or `event.plan` work). `attribute` reads a stored subscriber attribute. `email`, `firstName`, and `lastName` read core subscriber fields.
            - `operator` 'is' | 'is_not' | 'contains' | 'not_contains' | 'gt' | 'gte' | 'lt' | 'lte' | 'is_empty' | 'is_not_empty', required
            - `value` string, required — For `variable` and `attribute`, use `name:value` - the part before the colon is the variable path or attribute name, and the part after it is the comparison value. For `email`, `firstName`, and `lastName`, provide the plain comparison string.
        - `html` string — HTML content for email steps.
        - `delay` SequenceDelayInput — Delay before this step runs. Use duration fields for fixed waits, or mode until_date with untilDateField for event/date-field waits.
          - `mode` 'duration' | 'until_date' — Delay mode. Defaults to duration.
          - `days` number
          - `hours` number
          - `minutes` number
          - `untilDateField` string — Event/subscriber date field path to wait until when mode is until_date.
          - `field` string — Alias for untilDateField.
          - `untilOffsetDirection` 'before' | 'after' — Whether the offset runs before or after the date field. Defaults to after.
          - `direction` 'before' | 'after' — Alias for untilOffsetDirection.
          - `untilMissingAction` 'continue' | 'exit' — What to do when the date field is missing or invalid. Defaults to continue.
          - `missingAction` 'continue' | 'exit' — Alias for untilMissingAction.
        - `waitUntil` SequenceWaitUntilInput — Wait until a date from the enrollment event/subscriber data, optionally offset before or after that date.
          - `field` string — Event/subscriber date field path to wait until.
          - `untilDateField` string — Alias for field.
          - `offset` SequenceDelayOffsetInput — Relative offset for a delay.
            - `days` number
            - `hours` number
            - `minutes` number
          - `days` number — Shorthand offset days when offset is omitted.
          - `hours` number — Shorthand offset hours when offset is omitted.
          - `minutes` number — Shorthand offset minutes when offset is omitted.
          - `direction` 'before' | 'after' — Whether the offset runs before or after the field date. Defaults to after.
          - `untilOffsetDirection` 'before' | 'after' — Alias for direction.
          - `missingAction` 'continue' | 'exit' — What to do when the date field is missing or invalid. Defaults to continue.
          - `untilMissingAction` 'continue' | 'exit' — Alias for missingAction.
        - `delayMs` number — Delay in milliseconds. Useful for standalone delay steps.
        - `name` string — Email template name for email steps.
        - `senderProfileId` string — Email steps only. Sender profile for the new step. Omit to inherit the sender identity of the email step it is inserted after. Mutually exclusive with fromEmail.
        - `fromEmail` string, email — Email steps only. From address for the new step; its domain must be verified. Mutually exclusive with senderProfileId.
        - `fromName` string — Email steps only. Display name override for the new step. With fromEmail, also names a newly created sender profile.
        - `replyProfileId` string — Email steps only. Reply profile for the new step. Omit to inherit from the preceding email step. Mutually exclusive with replyTo.
        - `replyTo` string, email — Email steps only. Reply-To address for the new step. Mutually exclusive with replyProfileId.
        - `replyToName` string — Email steps only. Display name for a newly created reply profile. Requires replyTo.
        - `discount` object — Discount configuration for create_discount steps.
    - `elseSteps` SequenceBranchPathStepInput[] — Steps to create in the else fallback path. Required by default unless allowEmptyPaths is true.
      - `type` 'email' | 'sms' | 'delay' | 'create_discount' | 'discount' | 'update_subscriber' | 'condition' | 'webhook' — Step type. Omit for email steps, use sms for a native SMS step, or use delay for a standalone wait.
      - `nodeType` 'logic_delay' | 'action_email' | 'action_sms' | 'action_create_discount' | 'action_add_tag' | 'action_remove_tag' | 'action_add_to_list' | 'action_remove_from_list' | 'action_update_attributes' | 'logic_wait_for_event' | 'logic_condition' | 'action_webhook' — Advanced node type for non-email sequence path actions.
      - `config` SubscriberUpdateConfig — Update Subscriber config. String values may use standalone trigger-event merge tags such as {{event.plan}}, {{event.amount}}, or {{event.active}}. Number and boolean values are coerced after resolution.
        - `label` string
        - `firstName` string, nullable
        - `lastName` string, nullable
        - `status` 'active' | 'unsubscribed' | 'bounced'
        - `customAttributeUpdates` object[]
          - `name` string, required
          - `value` union, required — Literal scalar, null to delete, or one standalone merge tag.
            - string
            - number
            - boolean
          - `valueType` 'text' | 'number' | 'boolean'
      - `subject` string — Email subject. Required for email steps.
      - `previewText` string, nullable — Email preview text.
      - `text` string — SMS steps only. Plain-text message body; merge tags like {{FIRST_NAME}} work.
      - `imageUrls` string[] — SMS steps only. Up to 2 publicly reachable image URLs sent as MMS media.
      - `ineligibleAction` 'skip' | 'exit' — SMS steps only. skip (default) continues the sequence when the contact can't receive SMS; exit removes them from the sequence.
      - `label` string — SMS steps only. Display label for the step in the builder.
      - `blocks` EmailBlock[] — Email blocks for email steps. Put visual styling under styles; top-level style keys such as backgroundColor, backgroundOpacity, borderColor, borderWidth, and borderRadius are normalized into styles.
        - `id` string
        - `type` 'text' | 'html' | 'heading' | 'list' | 'button' | 'spacer' | 'divider' | 'image' | 'columns' | 'conditional-group' | 'repeat' | 'card' | 'cta' | 'social' | 'logo' | 'header' | 'footer' | 'video' | 'product' | 'discount-code' | 'code' | 'countdown' | 'hero' | 'testimonial' | 'gallery' | 'badge' | 'table' | 'features' | 'image-card' | 'pricing' | 'author' | 'article' | 'rating' | 'stats' | 'steps' | 'product-grid' | 'poll', required
        - `content` string — Content for text, html, and heading-like blocks.
        - `styles` object — Per-block visual styles. For compatibility, style fields such as backgroundColor, backgroundOpacity, borderColor, borderWidth, and borderRadius can also be supplied at the block top level and are normalized into this object.
          - `paddingTop` number
          - `paddingBottom` number
          - `paddingLeft` number
          - `paddingRight` number
          - `backgroundColor` string
          - `backgroundOpacity` number — Background opacity percentage from 0 to 100.
          - `textColor` string
          - `textAlign` 'left' | 'center' | 'right'
          - `borderRadius` number
          - `borderColor` string
          - `borderWidth` number
          - `bleed` boolean — Stretch the block edge-to-edge across the email container. Top-level blocks only.
        - `conditions` object[] — Optional per-block display rules. The block renders only when every rule matches. The same shape is used for a conditional-group block's top-level `conditions`.
          - `id` string, required
          - `field` 'variable' | 'attribute' | 'email' | 'firstName' | 'lastName', required — `variable` resolves a merge-tag path from the transactional send `variables` or an automation `event` payload (nested paths like `order.total` or `event.plan` work). `attribute` reads a stored subscriber attribute. `email`, `firstName`, and `lastName` read core subscriber fields.
          - `operator` 'is' | 'is_not' | 'contains' | 'not_contains' | 'gt' | 'gte' | 'lt' | 'lte' | 'is_empty' | 'is_not_empty', required
          - `value` string, required — For `variable` and `attribute`, use `name:value` - the part before the colon is the variable path or attribute name, and the part after it is the comparison value. For `email`, `firstName`, and `lastName`, provide the plain comparison string.
      - `html` string — HTML content for email steps.
      - `delay` SequenceDelayInput — Delay before this step runs. Use duration fields for fixed waits, or mode until_date with untilDateField for event/date-field waits.
        - `mode` 'duration' | 'until_date' — Delay mode. Defaults to duration.
        - `days` number
        - `hours` number
        - `minutes` number
        - `untilDateField` string — Event/subscriber date field path to wait until when mode is until_date.
        - `field` string — Alias for untilDateField.
        - `untilOffsetDirection` 'before' | 'after' — Whether the offset runs before or after the date field. Defaults to after.
        - `direction` 'before' | 'after' — Alias for untilOffsetDirection.
        - `untilMissingAction` 'continue' | 'exit' — What to do when the date field is missing or invalid. Defaults to continue.
        - `missingAction` 'continue' | 'exit' — Alias for untilMissingAction.
      - `waitUntil` SequenceWaitUntilInput — Wait until a date from the enrollment event/subscriber data, optionally offset before or after that date.
        - `field` string — Event/subscriber date field path to wait until.
        - `untilDateField` string — Alias for field.
        - `offset` SequenceDelayOffsetInput — Relative offset for a delay.
          - `days` number
          - `hours` number
          - `minutes` number
        - `days` number — Shorthand offset days when offset is omitted.
        - `hours` number — Shorthand offset hours when offset is omitted.
        - `minutes` number — Shorthand offset minutes when offset is omitted.
        - `direction` 'before' | 'after' — Whether the offset runs before or after the field date. Defaults to after.
        - `untilOffsetDirection` 'before' | 'after' — Alias for direction.
        - `missingAction` 'continue' | 'exit' — What to do when the date field is missing or invalid. Defaults to continue.
        - `untilMissingAction` 'continue' | 'exit' — Alias for missingAction.
      - `delayMs` number — Delay in milliseconds. Useful for standalone delay steps.
      - `name` string — Email template name for email steps.
      - `senderProfileId` string — Email steps only. Sender profile for the new step. Omit to inherit the sender identity of the email step it is inserted after. Mutually exclusive with fromEmail.
      - `fromEmail` string, email — Email steps only. From address for the new step; its domain must be verified. Mutually exclusive with senderProfileId.
      - `fromName` string — Email steps only. Display name override for the new step. With fromEmail, also names a newly created sender profile.
      - `replyProfileId` string — Email steps only. Reply profile for the new step. Omit to inherit from the preceding email step. Mutually exclusive with replyTo.
      - `replyTo` string, email — Email steps only. Reply-To address for the new step. Mutually exclusive with replyProfileId.
      - `replyToName` string — Email steps only. Display name for a newly created reply profile. Requires replyTo.
      - `discount` object — Discount configuration for create_discount steps.
    - `allowEmptyPaths` boolean — Set true only when intentionally creating empty UI placeholders.
  - `insertSteps` SequenceLinearStepInsertionInput
    - `afterNodeId` string — Existing sequence node ID to insert after. Omit only to append to an unambiguous linear tail.
    - `steps` SequenceBranchPathStepInput[], required — New linear steps to insert. Supports addable step types that do not require companion records; multi-path branches use the branch payload. Email steps require subject plus blocks or html. Inserted email steps inherit the effective identity of the nearest sequence email unless the step sets its own sender fields. After a branch merge, only identity fields shared by every incoming path are inherited; conflicting fields use sequence or company defaults.
      - `type` 'email' | 'sms' | 'delay' | 'create_discount' | 'discount' | 'update_subscriber' | 'condition' | 'webhook' — Step type. Omit for email steps, use sms for a native SMS step, or use delay for a standalone wait.
      - `nodeType` 'logic_delay' | 'action_email' | 'action_sms' | 'action_create_discount' | 'action_add_tag' | 'action_remove_tag' | 'action_add_to_list' | 'action_remove_from_list' | 'action_update_attributes' | 'logic_wait_for_event' | 'logic_condition' | 'action_webhook' — Advanced node type for non-email sequence path actions.
      - `config` SubscriberUpdateConfig — Update Subscriber config. String values may use standalone trigger-event merge tags such as {{event.plan}}, {{event.amount}}, or {{event.active}}. Number and boolean values are coerced after resolution.
        - `label` string
        - `firstName` string, nullable
        - `lastName` string, nullable
        - `status` 'active' | 'unsubscribed' | 'bounced'
        - `customAttributeUpdates` object[]
          - `name` string, required
          - `value` union, required — Literal scalar, null to delete, or one standalone merge tag.
            - string
            - number
            - boolean
          - `valueType` 'text' | 'number' | 'boolean'
      - `subject` string — Email subject. Required for email steps.
      - `previewText` string, nullable — Email preview text.
      - `text` string — SMS steps only. Plain-text message body; merge tags like {{FIRST_NAME}} work.
      - `imageUrls` string[] — SMS steps only. Up to 2 publicly reachable image URLs sent as MMS media.
      - `ineligibleAction` 'skip' | 'exit' — SMS steps only. skip (default) continues the sequence when the contact can't receive SMS; exit removes them from the sequence.
      - `label` string — SMS steps only. Display label for the step in the builder.
      - `blocks` EmailBlock[] — Email blocks for email steps. Put visual styling under styles; top-level style keys such as backgroundColor, backgroundOpacity, borderColor, borderWidth, and borderRadius are normalized into styles.
        - `id` string
        - `type` 'text' | 'html' | 'heading' | 'list' | 'button' | 'spacer' | 'divider' | 'image' | 'columns' | 'conditional-group' | 'repeat' | 'card' | 'cta' | 'social' | 'logo' | 'header' | 'footer' | 'video' | 'product' | 'discount-code' | 'code' | 'countdown' | 'hero' | 'testimonial' | 'gallery' | 'badge' | 'table' | 'features' | 'image-card' | 'pricing' | 'author' | 'article' | 'rating' | 'stats' | 'steps' | 'product-grid' | 'poll', required
        - `content` string — Content for text, html, and heading-like blocks.
        - `styles` object — Per-block visual styles. For compatibility, style fields such as backgroundColor, backgroundOpacity, borderColor, borderWidth, and borderRadius can also be supplied at the block top level and are normalized into this object.
          - `paddingTop` number
          - `paddingBottom` number
          - `paddingLeft` number
          - `paddingRight` number
          - `backgroundColor` string
          - `backgroundOpacity` number — Background opacity percentage from 0 to 100.
          - `textColor` string
          - `textAlign` 'left' | 'center' | 'right'
          - `borderRadius` number
          - `borderColor` string
          - `borderWidth` number
          - `bleed` boolean — Stretch the block edge-to-edge across the email container. Top-level blocks only.
        - `conditions` object[] — Optional per-block display rules. The block renders only when every rule matches. The same shape is used for a conditional-group block's top-level `conditions`.
          - `id` string, required
          - `field` 'variable' | 'attribute' | 'email' | 'firstName' | 'lastName', required — `variable` resolves a merge-tag path from the transactional send `variables` or an automation `event` payload (nested paths like `order.total` or `event.plan` work). `attribute` reads a stored subscriber attribute. `email`, `firstName`, and `lastName` read core subscriber fields.
          - `operator` 'is' | 'is_not' | 'contains' | 'not_contains' | 'gt' | 'gte' | 'lt' | 'lte' | 'is_empty' | 'is_not_empty', required
          - `value` string, required — For `variable` and `attribute`, use `name:value` - the part before the colon is the variable path or attribute name, and the part after it is the comparison value. For `email`, `firstName`, and `lastName`, provide the plain comparison string.
      - `html` string — HTML content for email steps.
      - `delay` SequenceDelayInput — Delay before this step runs. Use duration fields for fixed waits, or mode until_date with untilDateField for event/date-field waits.
        - `mode` 'duration' | 'until_date' — Delay mode. Defaults to duration.
        - `days` number
        - `hours` number
        - `minutes` number
        - `untilDateField` string — Event/subscriber date field path to wait until when mode is until_date.
        - `field` string — Alias for untilDateField.
        - `untilOffsetDirection` 'before' | 'after' — Whether the offset runs before or after the date field. Defaults to after.
        - `direction` 'before' | 'after' — Alias for untilOffsetDirection.
        - `untilMissingAction` 'continue' | 'exit' — What to do when the date field is missing or invalid. Defaults to continue.
        - `missingAction` 'continue' | 'exit' — Alias for untilMissingAction.
      - `waitUntil` SequenceWaitUntilInput — Wait until a date from the enrollment event/subscriber data, optionally offset before or after that date.
        - `field` string — Event/subscriber date field path to wait until.
        - `untilDateField` string — Alias for field.
        - `offset` SequenceDelayOffsetInput — Relative offset for a delay.
          - `days` number
          - `hours` number
          - `minutes` number
        - `days` number — Shorthand offset days when offset is omitted.
        - `hours` number — Shorthand offset hours when offset is omitted.
        - `minutes` number — Shorthand offset minutes when offset is omitted.
        - `direction` 'before' | 'after' — Whether the offset runs before or after the field date. Defaults to after.
        - `untilOffsetDirection` 'before' | 'after' — Alias for direction.
        - `missingAction` 'continue' | 'exit' — What to do when the date field is missing or invalid. Defaults to continue.
        - `untilMissingAction` 'continue' | 'exit' — Alias for missingAction.
      - `delayMs` number — Delay in milliseconds. Useful for standalone delay steps.
      - `name` string — Email template name for email steps.
      - `senderProfileId` string — Email steps only. Sender profile for the new step. Omit to inherit the sender identity of the email step it is inserted after. Mutually exclusive with fromEmail.
      - `fromEmail` string, email — Email steps only. From address for the new step; its domain must be verified. Mutually exclusive with senderProfileId.
      - `fromName` string — Email steps only. Display name override for the new step. With fromEmail, also names a newly created sender profile.
      - `replyProfileId` string — Email steps only. Reply profile for the new step. Omit to inherit from the preceding email step. Mutually exclusive with replyTo.
      - `replyTo` string, email — Email steps only. Reply-To address for the new step. Mutually exclusive with replyProfileId.
      - `replyToName` string — Email steps only. Display name for a newly created reply profile. Requires replyTo.
      - `discount` object — Discount configuration for create_discount steps.
  - `graphEdit` SequenceGraphEditInput
    - `action` 'move_node' | 'delete_node' | 'duplicate_node' | 'replace_edges', required — Structural graph operation to perform.
    - `expectedRevision` string, required — graphRevision from the latest get-sequence response. The update is rejected if the graph changed after it was read.
    - `nodeId` string — Existing node to move, delete, or duplicate.
    - `afterNodeId` string — Insert the moved or duplicated node immediately after this node. Mutually exclusive with beforeNodeId.
    - `beforeNodeId` string — Insert the moved or duplicated node immediately before this node. Mutually exclusive with afterNodeId.
    - `edges` SequenceGraphEdgeInput[] — Complete replacement topology for replace_edges. Also supported when deleting a split node whose continuation cannot be inferred safely.
      - `sourceNodeId` string, required — Existing source node ID.
      - `targetNodeId` string, required — Existing target node ID.
      - `condition` object, nullable — Exact branch-lane condition for this edge. Omit or set null for an unconditional edge.
  - `emails` SequenceEmailUpdateInput[] — Existing email step updates. Provide either emails or steps. Items without nodeId or emailId are matched by existing step order and do not create new steps.
    - `emailId` string — Email template ID to update. You can also pass the node ID here for compatibility.
    - `nodeId` string — Sequence email node ID to update.
    - `name` string — Updated step and email template name.
    - `subject` string — Updated subject line.
    - `previewText` string, nullable — Updated preview text.
    - `blocks` EmailBlock[] — Replacement Sequenzy email blocks. Put visual styling under styles; top-level style keys such as backgroundColor, backgroundOpacity, borderColor, borderWidth, and borderRadius are normalized into styles.
      - `id` string
      - `type` 'text' | 'html' | 'heading' | 'list' | 'button' | 'spacer' | 'divider' | 'image' | 'columns' | 'conditional-group' | 'repeat' | 'card' | 'cta' | 'social' | 'logo' | 'header' | 'footer' | 'video' | 'product' | 'discount-code' | 'code' | 'countdown' | 'hero' | 'testimonial' | 'gallery' | 'badge' | 'table' | 'features' | 'image-card' | 'pricing' | 'author' | 'article' | 'rating' | 'stats' | 'steps' | 'product-grid' | 'poll', required
      - `content` string — Content for text, html, and heading-like blocks.
      - `styles` object — Per-block visual styles. For compatibility, style fields such as backgroundColor, backgroundOpacity, borderColor, borderWidth, and borderRadius can also be supplied at the block top level and are normalized into this object.
        - `paddingTop` number
        - `paddingBottom` number
        - `paddingLeft` number
        - `paddingRight` number
        - `backgroundColor` string
        - `backgroundOpacity` number — Background opacity percentage from 0 to 100.
        - `textColor` string
        - `textAlign` 'left' | 'center' | 'right'
        - `borderRadius` number
        - `borderColor` string
        - `borderWidth` number
        - `bleed` boolean — Stretch the block edge-to-edge across the email container. Top-level blocks only.
      - `conditions` object[] — Optional per-block display rules. The block renders only when every rule matches. The same shape is used for a conditional-group block's top-level `conditions`.
        - `id` string, required
        - `field` 'variable' | 'attribute' | 'email' | 'firstName' | 'lastName', required — `variable` resolves a merge-tag path from the transactional send `variables` or an automation `event` payload (nested paths like `order.total` or `event.plan` work). `attribute` reads a stored subscriber attribute. `email`, `firstName`, and `lastName` read core subscriber fields.
        - `operator` 'is' | 'is_not' | 'contains' | 'not_contains' | 'gt' | 'gte' | 'lt' | 'lte' | 'is_empty' | 'is_not_empty', required
        - `value` string, required — For `variable` and `attribute`, use `name:value` - the part before the colon is the variable path or attribute name, and the part after it is the comparison value. For `email`, `firstName`, and `lastName`, provide the plain comparison string.
    - `html` string — Raw HTML preserved as one HTML block. Provide html/htmlContent or blocks.
    - `htmlContent` string — Alias for html. Raw HTML is preserved as one HTML block.
    - `senderProfileId` string — Sender profile for this step's From identity. Overrides the sequence-level sender for this step. Mutually exclusive with fromEmail.
    - `fromEmail` string, email — From address for this step. Its domain must be configured and verified. Mutually exclusive with senderProfileId.
    - `fromName` string — Display name override for this step. Alone it only changes the visible name; with fromEmail it also names a newly created sender profile.
    - `replyProfileId` string — Reply profile for this step's Reply-To. Mutually exclusive with replyTo.
    - `replyTo` string, email — Reply-To address for this step. Mutually exclusive with replyProfileId.
    - `replyToName` string — Display name for a newly created reply profile. Requires replyTo.
  - `steps` SequenceEmailUpdateInput[] — Alias for emails. Use insertSteps to create new steps.
    - `emailId` string — Email template ID to update. You can also pass the node ID here for compatibility.
    - `nodeId` string — Sequence email node ID to update.
    - `name` string — Updated step and email template name.
    - `subject` string — Updated subject line.
    - `previewText` string, nullable — Updated preview text.
    - `blocks` EmailBlock[] — Replacement Sequenzy email blocks. Put visual styling under styles; top-level style keys such as backgroundColor, backgroundOpacity, borderColor, borderWidth, and borderRadius are normalized into styles.
      - `id` string
      - `type` 'text' | 'html' | 'heading' | 'list' | 'button' | 'spacer' | 'divider' | 'image' | 'columns' | 'conditional-group' | 'repeat' | 'card' | 'cta' | 'social' | 'logo' | 'header' | 'footer' | 'video' | 'product' | 'discount-code' | 'code' | 'countdown' | 'hero' | 'testimonial' | 'gallery' | 'badge' | 'table' | 'features' | 'image-card' | 'pricing' | 'author' | 'article' | 'rating' | 'stats' | 'steps' | 'product-grid' | 'poll', required
      - `content` string — Content for text, html, and heading-like blocks.
      - `styles` object — Per-block visual styles. For compatibility, style fields such as backgroundColor, backgroundOpacity, borderColor, borderWidth, and borderRadius can also be supplied at the block top level and are normalized into this object.
        - `paddingTop` number
        - `paddingBottom` number
        - `paddingLeft` number
        - `paddingRight` number
        - `backgroundColor` string
        - `backgroundOpacity` number — Background opacity percentage from 0 to 100.
        - `textColor` string
        - `textAlign` 'left' | 'center' | 'right'
        - `borderRadius` number
        - `borderColor` string
        - `borderWidth` number
        - `bleed` boolean — Stretch the block edge-to-edge across the email container. Top-level blocks only.
      - `conditions` object[] — Optional per-block display rules. The block renders only when every rule matches. The same shape is used for a conditional-group block's top-level `conditions`.
        - `id` string, required
        - `field` 'variable' | 'attribute' | 'email' | 'firstName' | 'lastName', required — `variable` resolves a merge-tag path from the transactional send `variables` or an automation `event` payload (nested paths like `order.total` or `event.plan` work). `attribute` reads a stored subscriber attribute. `email`, `firstName`, and `lastName` read core subscriber fields.
        - `operator` 'is' | 'is_not' | 'contains' | 'not_contains' | 'gt' | 'gte' | 'lt' | 'lte' | 'is_empty' | 'is_not_empty', required
        - `value` string, required — For `variable` and `attribute`, use `name:value` - the part before the colon is the variable path or attribute name, and the part after it is the comparison value. For `email`, `firstName`, and `lastName`, provide the plain comparison string.
    - `html` string — Raw HTML preserved as one HTML block. Provide html/htmlContent or blocks.
    - `htmlContent` string — Alias for html. Raw HTML is preserved as one HTML block.
    - `senderProfileId` string — Sender profile for this step's From identity. Overrides the sequence-level sender for this step. Mutually exclusive with fromEmail.
    - `fromEmail` string, email — From address for this step. Its domain must be configured and verified. Mutually exclusive with senderProfileId.
    - `fromName` string — Display name override for this step. Alone it only changes the visible name; with fromEmail it also names a newly created sender profile.
    - `replyProfileId` string — Reply profile for this step's Reply-To. Mutually exclusive with replyTo.
    - `replyTo` string, email — Reply-To address for this step. Mutually exclusive with replyProfileId.
    - `replyToName` string — Display name for a newly created reply profile. Requires replyTo.
  - `smsSteps` SequenceSmsStepUpdateInput[] — Content updates for existing SMS steps, targeted by action_sms nodeId. Content-only edits; use insertSteps to create new SMS steps.
    - `nodeId` string, required — Target action_sms node ID from GET /sequences/{sequenceId}.
    - `text` string — Replacement plain-text message body. Merge tags like {{FIRST_NAME}} work. Provide text or blocks, not both.
    - `blocks` object[] — Replacement SMS content blocks (text + image subset).
    - `imageUrls` string[] — Up to 2 publicly reachable MMS image URLs. Only valid together with text.
    - `label` string — Updated display label for the step.
    - `ineligibleAction` 'skip' | 'exit' — Updated behavior when the contact can't receive SMS.
  - `subscriberUpdateSteps` SequenceSubscriberUpdateStepUpdateInput[] — Full config replacements for existing action_update_attributes steps, targeted by nodeId.
    - `nodeId` string, required — Target action_update_attributes node ID.
    - `config` SubscriberUpdateConfig, required — Update Subscriber config. String values may use standalone trigger-event merge tags such as {{event.plan}}, {{event.amount}}, or {{event.active}}. Number and boolean values are coerced after resolution.
      - `label` string
      - `firstName` string, nullable
      - `lastName` string, nullable
      - `status` 'active' | 'unsubscribed' | 'bounced'
      - `customAttributeUpdates` object[]
        - `name` string, required
        - `value` union, required — Literal scalar, null to delete, or one standalone merge tag.
          - string
          - number
          - boolean
        - `valueType` 'text' | 'number' | 'boolean'

## Response `200`

Sequence updated successfully

- object
  - `success` boolean
  - `sequence` object
    - `id` string
    - `name` string
    - `status` 'draft' | 'active' | 'paused' | 'archived'
    - `enrollmentPaused` boolean
    - `updatedEmailCount` number
    - `updatedSmsStepCount` number
    - `updatedSubscriberStepCount` number
    - `stopCondition` SequenceStopCondition
      - `type` 'none' | 'has_tag' | 'does_not_have_tag' | 'added_to_list' | 'removed_from_list' | 'entered_segment' | 'field_changed' | 'event_received'
      - `value` string, nullable
    - `sendingWindow` SequenceSendingWindow — Optional local-time sending window applied to every email step in a sequence. Email steps that become due outside the window wait until the next allowed local time.
      - `enabled` boolean
      - `timezone` string — IANA timezone for the window.
      - `startTime` string — Earliest local send time in 24-hour HH:mm format.
      - `endTime` string — Latest local send cutoff in 24-hour HH:mm format. Must be later than startTime.
      - `days` string[] — Allowed local days. Omit days when creating or updating to allow every day.
    - `bccEmails` string[], nullable
    - `addedBranchNodeId` string
    - `addedBranchPathNodeIds` object
    - `insertedNodeIds` string[]
    - `insertedEmailIds` string[]
    - `insertedEmailCount` number
    - `graphEditAction` 'move_node' | 'delete_node' | 'duplicate_node' | 'replace_edges'
    - `movedNodeId` string — Node moved by a move_node edit.
    - `deletedNodeId` string — Node deleted by a delete_node edit.
    - `duplicatedNodeId` string — New node created by a duplicate_node edit.
    - `replacedEdgeCount` number — Number of edges in the committed graph after a structural graph edit.
    - `graphRevision` string — Revision of the committed graph. Use it for the next graphEdit.expectedRevision.

## Other responses

- `400` — Validation error
- `401` — Unauthorized
- `403` — No company selected
- `404` — Sequence not found

## Changes

- **2026-07-16** `d7ea66dede72` — 75 info
  - added the new optional request property `branch/branches/items/steps/items/blocks/items/styles/bleed`
  - added the new optional request property `branch/elseSteps/items/blocks/items/styles/bleed`
  - added the new optional request property `emails/items/blocks/items/styles/bleed`
  - added the new optional request property `insertSteps/steps/items/blocks/items/styles/bleed`
  - …71 more
- **2026-07-14** `83e7fd773745` — 67 info
  - added the new optional request property `branch/branches/items/steps/items/fromEmail`
  - added the new optional request property `branch/branches/items/steps/items/fromName`
  - added the new optional request property `branch/branches/items/steps/items/replyProfileId`
  - added the new optional request property `branch/branches/items/steps/items/replyTo`
  - …63 more
- **2026-07-13** `91f9f0e15bd0` — 6 breaking, 5 info
  - added `#/components/schemas/SubscriberUpdateConfig` to the `branch/branches/items/steps/items/config` request property `allOf` list
  - added `#/components/schemas/SubscriberUpdateConfig` to the `branch/elseSteps/items/config` request property `allOf` list
  - added `#/components/schemas/SubscriberUpdateConfig` to the `insertSteps/steps/items/config` request property `allOf` list
  - the `branch/branches/items/steps/items/config` request property type/format changed from `object`/`` to ``/``
  - …7 more
- …earlier changes not shown

[Full history](https://skmtc.dev/sequenzy/apis/sequenzy-api/changes/sequences/:sequenceId/put.md)

---

[API](https://skmtc.dev/sequenzy/apis/sequenzy-api.md) · [All operations](https://skmtc.dev/sequenzy/apis/sequenzy-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/sequenzy/sequenzy-api/revisions/ad2202945c5b/schema)
