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

# Get sequence

`GET /sequences/{sequenceId}`

Returns sequence metadata, nodes, and editable email steps.

## Path parameters

- `sequenceId` string, required

## Response `200`

Sequence retrieved successfully

- object
  - `success` boolean
  - `sequence` SequenceDetails
    - `id` string
    - `name` string
    - `description` string, nullable
    - `userCancellable` boolean
    - `labels` string[]
    - `labelIds` string[]
    - `status` 'draft' | 'active' | 'paused' | 'archived' — Stored lifecycle status. Do not read literally: a sequence can be active while enrollmentPaused blocks new subscribers. Branch on effectiveStatus instead.
    - `enrollmentPaused` boolean — Whether new enrollments are paused while current recipients continue.
    - `effectiveStatus` 'draft' | 'live' | 'enrollment_paused' | 'paused' | 'archived' — Resolved run state, and the single field to branch on. live accepts new subscribers and advances existing recipients; enrollment_paused advances existing recipients only; draft, paused, and archived do neither.
    - `acceptsNewEnrollments` boolean — Whether new subscribers can enter the sequence right now.
    - `processesExistingEnrollments` boolean — Whether subscribers already inside the sequence keep advancing and receiving steps.
    - `effectiveStatusSummary` string — One plain-language sentence describing the run state, safe to show a user verbatim.
    - `pauseReason` string, nullable
    - `pauseSource` string, nullable
    - `pausedByUserId` string, nullable
    - `pausedByUser` object, nullable
      - `id` string
      - `name` string
      - `email` string, email
    - `pausedAt` string, date-time, nullable
    - `trigger` string, nullable
    - `triggerConfig` object, 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 — Email addresses blind-copied on every email this sequence sends.
    - `senderProfileId` string, nullable
    - `fromName` string, nullable
    - `fromEmail` string, email, nullable
    - `replyProfileId` string, nullable
    - `replyToName` string, nullable
    - `replyToEmail` string, email, nullable
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
    - `nodes` SequenceNode[]
      - `id` string
      - `automationId` string
      - `nodeType` string
      - `config` object
      - `updatedAt` string, date-time — Node concurrency timestamp. Return this as expectedUpdatedAt when patching the node.
      - `updateHints` object — Type-aware guidance for safely patching this node.
        - `tool` string
        - `editableFields` string[]
        - `managedFields` string[]
        - `notes` string[]
        - `expectedUpdatedAt` string, date-time — Ready-to-return optimistic-concurrency token for update_sequence_node or update_sequence_nodes.
      - `position` SequencePosition
        - `x` number
        - `y` number
    - `edges` SequenceGraphEdgeInput[] — Editable sequence topology. Pass the complete set back to graphEdit.edges when replacing edges.
      - `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.
    - `graphRevision` string — Revision token for optimistic graph edits. Supply this as graphEdit.expectedRevision.
    - `emails` SequenceEmail[]
      - `nodeId` string
      - `emailId` string, nullable
      - `stepNumber` number, nullable
      - `name` string, nullable
      - `subject` string, nullable
      - `previewText` string, nullable
      - `isTransactional` boolean
      - `senderProfileId` string, nullable
      - `replyProfileId` string, nullable
      - `fromName` string, nullable
      - `replyTo` string, nullable
      - `ccEmails` string[], nullable
      - `bccEmails` string[], nullable
      - `attachments` UrlAttachment[] — URL-backed file attachments configured on this email step, including event-backed URL templates.
        - `filename` string, required — Filename shown in the recipient's email client (including extension). Event merge tags are supported.
        - `path` string, required — Public HTTP(S) URL or an event-backed URL template such as {{event.file_url}}. The resolved URL is validated and fetched at send time.
      - `emailPreset` 'branded' | 'minimal', nullable — Effective per-email Style > Format derived from native persisted blocks, including emails that contain supported custom HTML blocks. Null when the node has no linked email or the entire email is standalone raw HTML.
      - `delayNodeId` string, nullable — ID of the logic_delay node immediately before this email, when present.
      - `delayMs` number, nullable — Delay before this email in milliseconds, derived from the preceding logic_delay node when present.
      - `delayMode` 'duration' | 'until_date', nullable — Delay mode for the preceding logic_delay node, when present.
      - `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.
      - `delayDisplay` string, nullable — Human-readable delay before this email, derived from the preceding logic_delay node when present.
      - `delayDescription` string, nullable — Description stored on the preceding logic_delay node, when present.
      - `blocks` EmailBlock[]
        - `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.
    - `stopCondition` SequenceStopCondition — Auto-stop condition, re-evaluated before every step including the first one. has_tag, added_to_list, entered_segment, field_changed, and event_received stop the run once the thing happens. does_not_have_tag and removed_from_list stop the run whenever the subscriber lacks that tag or list membership, so they act as a required-tag or required-list allowlist and cancel everyone else before any step sends. Guarded-out contacts still enroll and are then cancelled at the trigger node, so they appear as cancellations there rather than in the active or waiting enrollment counts. Clearing the guard does not retry them: they only receive the sequence if the trigger fires for them again, and on the one_time enrollment mode not even then.
      - `type` 'none' | 'has_tag' | 'does_not_have_tag' | 'added_to_list' | 'removed_from_list' | 'entered_segment' | 'field_changed' | 'event_received'
      - `value` string, nullable — Tag name, list ID, segment ID, field path, or event name. For the does_not_have_tag and removed_from_list guards this is the tag or list a subscriber must have to keep receiving the sequence.
      - `matchConfig` union — Optional typed match rule. event_received uses event_property rules; field_changed uses a field_value comparison.
        - object
          - `mode` 'event_property', required
          - `rules` object[], required
            - `entryFieldPath` string, required
            - `eventFieldPath` string, required
        - object
          - `mode` 'field_value', required
          - `operator` 'equals' | 'not_equals' | 'greater_than' | 'less_than' | 'contains' | 'not_contains', required
          - `value` string, required
    - `enrichmentStatus` 'pending' | 'in_progress' | 'complete'
    - `emailCount` number
    - `discountCount` number
    - `subscriberUpdateCount` number
    - `enrichedCount` number

## Other responses

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

---

[API](https://skmtc.net/sequenzy/apis/sequenzy-api.md) · [All operations](https://skmtc.net/sequenzy/apis/sequenzy-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sequenzy/sequenzy-api/versions/af1cf9620482/schema)
