Outcome
Archive a sequence to prevent new enrollments while preserving existing pinned work.
Before you start
- Verify the environment, credential, authorized organization and the published action permission workspace:write.
- Discover an accessible Engage workspace and bind resourceType=workspace and its resourceId separately from action input. Fixture identifiers grant no access.
- Approve the exact mutation and its effects before CLI --confirm or MCP confirm:true. This documentation does not authorize outreach.
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.
topolo whoami --json
topolo actions get app_topolo_engage.sequences.archive --json
topolo workspaces list topolo-engage --json
Input fields
| Field | Required | Meaning and constraints |
|---|---|---|
id | Yes | Required sequence identifier discovered through sequences.list in the selected workspace, trimmed non-empty string up to 128 characters. |
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.archive --data @payload.json --json
topolo actions plan app_topolo_engage.sequences.archive --resource-type workspace --resource-id "$ENGAGE_WORKSPACE_ID" --data @payload.json --confirm --json
Review the plan and obtain approval for the exact effects before executing the unchanged request.
: "${ENGAGE_WORKSPACE_ID:?Set ENGAGE_WORKSPACE_ID to your selected workspace identifier}"
topolo actions call app_topolo_engage.sequences.archive --resource-type workspace --resource-id "$ENGAGE_WORKSPACE_ID" --data @payload.json --confirm --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.archive · HTTP 200
Action input
{
"id": "eng_seq_1"
}
Actual local response
{
"sequence": {
"id": "eng_seq_1",
"campaignId": "eng_cmp_1",
"name": "Main",
"status": "archived",
"createdAt": "2026-10-06T08:30:00.000Z",
"updatedAt": "2026-10-06T08:30:00.000Z"
},
"versions": [
{
"id": "eng_seqv_1",
"version": 1,
"status": "draft",
"publishedAt": null
}
],
"draft": {
"id": "eng_seqv_1",
"sequenceId": "eng_seq_1",
"version": 1,
"status": "draft",
"publishedAt": null,
"createdAt": "2026-10-06T08:30:00.000Z",
"steps": []
},
"published": null
}
Source test: sequence routes > allows one live sequence per campaign and refuses archived campaigns. Actual route handlers with SQLite repositories; synthetic identity/workspace grants and provider ports.
Captured sequences.archive · HTTP 200
Action input
{
"id": "eng_seq_2"
}
Actual local response
{
"sequence": {
"id": "eng_seq_2",
"campaignId": "eng_cmp_2",
"name": "Two",
"status": "archived",
"createdAt": "2026-10-06T08:30:00.000Z",
"updatedAt": "2026-10-06T08:30:00.000Z"
},
"versions": [
{
"id": "eng_seqv_2",
"version": 1,
"status": "draft",
"publishedAt": null
}
],
"draft": {
"id": "eng_seqv_2",
"sequenceId": "eng_seq_2",
"version": 1,
"status": "draft",
"publishedAt": null,
"createdAt": "2026-10-06T08:30:00.000Z",
"steps": []
},
"published": null
}
Source test: sequence routes > lists, filters, renames and scopes sequences. Actual route handlers with SQLite repositories; synthetic identity/workspace grants and provider ports.
Effects and response meaning
- Sets sequence.status=archived and updatedAt. Repeating archive returns the already archived sequence without another save. Direct detail remains readable.
- Existing running enrollments keep their pinned published versions. Archiving does not stop them or recall messages; enrollments.stop is a separate approved operation. No sequence-unarchive action is presented.
Verify the result
- Read sequences.get and confirm sequence.status=archived. Inspect relevant enrollments separately if stopping existing outreach is the intended goal; archive success does not prove they stopped.
Recover
Read sequences.get after an uncertain response. An archived state satisfies the archive result; repeated archive is tolerated, but cannot undo it. There is no documented unarchive operation. Inspect and separately approve enrollments.stop for existing work instead of assuming archiving cancels it.
Refused responses
No refusal response for this action is included in this fixture set. The recovery guidance below is based on the route’s declared permission and input-validation checks.
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.
Related actions
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.