Topolo Docs Topolo Platform
Open workspace

Get sequence version

Read one exact retained sequence version and its ordered steps.

Outcome

Read one exact retained sequence version and its ordered steps.

Before you start

  • Verify the environment, credential, authorized organization and the published action permission workspace:read.
  • Discover an accessible Engage workspace and bind resourceType=workspace and its resourceId separately from action input. Fixture identifiers grant no access.

Discover the target

  • Discover the sequence through sequences.list using the retained campaignId, then read sequences.get in the same authorized workspace. Inspect sequence.status, draft, published and versions before planning.
  • Select versionId from versions[], draft or published; retain the sequence id separately.
topolo whoami --json
topolo actions get app_topolo_engage.sequences.versions.get --json
topolo workspaces list topolo-engage --json

Input fields

FieldRequiredMeaning and constraints
idYesRequired sequence identifier discovered through sequences.list in the selected workspace, trimmed non-empty string up to 128 characters.
versionIdYesRequired version identifier from sequences.get versions[], draft or published, trimmed non-empty string up to 128 characters. It must belong to the supplied sequence; version number is not versionId.

Validate, plan and execute

Set ENGAGE_WORKSPACE_ID to the identifier of your selected workspace. Prepare payload.json from the current input schema and discovered identifiers. Use the same payload for validation, planning and execution.

: "${ENGAGE_WORKSPACE_ID:?Set ENGAGE_WORKSPACE_ID to your selected workspace identifier}"
topolo actions validate app_topolo_engage.sequences.versions.get --data @payload.json --json
topolo actions plan app_topolo_engage.sequences.versions.get --resource-type workspace --resource-id "$ENGAGE_WORKSPACE_ID" --data @payload.json --json

Execute the unchanged validated read in the selected workspace.

: "${ENGAGE_WORKSPACE_ID:?Set ENGAGE_WORKSPACE_ID to your selected workspace identifier}"
topolo actions call app_topolo_engage.sequences.versions.get --resource-type workspace --resource-id "$ENGAGE_WORKSPACE_ID" --data @payload.json --json

For MCP, use topolo_get_action, topolo_validate_action, topolo_plan_action and topolo_call_action. Pass the selected resource context separately; confirm:true is required for mutations.

Worked requests and responses

Captured sequences.versions.get · HTTP 200

Action input

{
  "id": "eng_seq_1",
  "versionId": "eng_seqv_2"
}

Actual local response

{
  "version": {
    "id": "eng_seqv_2",
    "sequenceId": "eng_seq_1",
    "version": 2,
    "status": "draft",
    "publishedAt": null,
    "createdAt": "2026-10-06T08:30:00.000Z",
    "steps": [
      {
        "id": "eng_stp_3",
        "position": 1,
        "type": "email",
        "delayDays": 0,
        "subjectTemplate": "Quick question, {{first_name}}",
        "bodyTemplate": "Hi {{first_name}},\n\nHow is {{company}} handling outreach?\n\n{{sender_name}}",
        "threadWithPrevious": false,
        "instructions": "",
        "dueDays": 0
      },
      {
        "id": "eng_stp_4",
        "position": 2,
        "type": "email",
        "delayDays": 4,
        "subjectTemplate": "",
        "bodyTemplate": "Following up, {{first_name}}.",
        "threadWithPrevious": true,
        "instructions": "",
        "dueDays": 0
      }
    ]
  }
}

Source test: sequence routes > creates a sequence with an empty draft, edits steps, publishes and freezes the version. Actual route handlers with SQLite repositories; synthetic identity/workspace grants and provider ports.

Effects and response meaning

  • Returns version only when it belongs to the supplied sequence and selected workspace. Includes ordered steps, numeric version, status and publishedAt. Archived sequence versions remain readable.
  • A missing or mismatched version is refused; this read cannot rewrite an immutable published version.

Verify the result

  • Compare version.id with versionId and version.sequenceId with id; inspect status/publishedAt before editing or interpreting an enrollment’s pinned content.

Recover

Retry the read in the same verified workspace with the exact discovered identifiers. Use status=archived for discovery when appropriate; do not create a replacement sequence or guess another version after not_found.

Refused responses

Captured sequences.versions.get · HTTP 404

Action input

{
  "id": "eng_seq_1",
  "versionId": "eng_seqv_x"
}

Actual local response

{
  "error": {
    "code": "not_found",
    "message": "Sequence version was not found."
  }
}

Source test: sequence routes > lists, filters, renames and scopes sequences. Actual route handlers with SQLite repositories; synthetic identity/workspace grants and provider ports.

Error recovery

  • HTTP 403 permission_denied: Stop and inspect the permission required by this action in the current credential. Do not broaden permissions or switch organization automatically.
  • HTTP 422 invalid_action_input: Correct required fields, enums and nested step bounds against the current input schema, then validate the exact intended payload again.
  • HTTP 404 not_found: Rediscover the sequence using sequences.list in the same workspace and campaign; use status=archived when needed. Discover versionId from sequences.get and confirm it belongs to the same sequence. Do not guess another workspace or version.

Evidence and limits

  • contracts/sequences.mjs

  • apps/api/src/sequences/sequences-handlers.ts

  • apps/api/src/sequences/sequences-domain.ts

  • apps/api/src/sequences/sequences-repository.ts

  • apps/api/src/copy-qa/version-steps.ts

  • apps/api/src/copy-qa/copy-qa.ts

  • Actual route handlers with SQLite repositories; synthetic identity/workspace grants and provider ports.

  • Widget/bootstrap use actual app handler but mocked worker runtime and app identity.

  • No gateway execution, live permissions, external delivery or deployed proof.

The examples are local route captures with synthetic context and simulated providers. They do not prove live authorization, CLI/MCP gateway execution, production state or delivery.