Topolo Docs Topolo Platform
Open workspace

List QR series

Lists workspace series with code counts, optional template metadata and unassigned-code counts.

Outcome

Lists workspace series with code counts, optional template metadata and unassigned-code counts.

Before you start

  • Verify identity, environment and the intended organization before discovery.
  • Discover the published series:read permission and the target policy.
  • Select an accessible canonical Auth workspace and set WORKSPACE_ID to its returned id. Workspace binding is separate from input.

Discover the target

topolo whoami --json
topolo workspaces list topolo-quro --json
topolo actions get app_topolo_quro.series.list --detail --json

Request

GET /series

Inspect parameters and test this action.

Input fields

FieldRequiredMeaning
pageNoOne-based numbered page. Continue while meta.hasMore is true, preserving other filters.
perPageNoRequested page size capped at 100. This is numbered pagination, not a cursor.
includeArchivedNoLiteral string true or false for series-list inclusion; not a JSON boolean.
statusNoDeclared series creation status, or series-list status filter. Completing a series does not disable its codes.

Worked examples

Actual exported Quro Worker with local Miniflare D1/KV and every committed app/analytics migration. Auth, service tokens, Nexus, destination probes and platform archival are synthetic responses; outbound fetch is sealed. Notifications remain in the local outbox. No live redirect propagation, QR scan, destination health, provider delivery, archival or production erasure is established.

Save reviewed input as payload.json, replacing fixture identifiers through discovery.

topolo actions validate app_topolo_quro.series.list --data @payload.json --json
topolo actions plan app_topolo_quro.series.list --resource-type workspace --resource-id "$WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_quro.series.list --resource-type workspace --resource-id "$WORKSPACE_ID" --data @payload.json --detail --json

MCP uses the same reviewed input and separately discovered resource binding:

{
  "tool": "topolo_prepare_action",
  "arguments": {
    "actionId": "app_topolo_quro.series.list",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "ws_quro_fixture"
  }
}
{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_quro.series.list",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "ws_quro_fixture",
    "detail": true
  }
}

Worked response 1 · HTTP 200

Input · payload.json:

{}

Captured SDK response:

{
  "success": true,
  "data": [],
  "meta": {
    "page": 1,
    "perPage": 50,
    "total": 0,
    "hasMore": false,
    "unassigned": {
      "total": 0,
      "basic": 0,
      "standard": 0,
      "premium": 0
    }
  }
}

HTTP 200. Continue numbered pages while meta.hasMore is true. Preserve includeArchived/status filters and inspect each series status separately from its codes.

Worked response 2 · HTTP 200

Input · payload.json:

{}

Captured SDK response:

{
  "success": true,
  "data": [
    {
      "id": 1,
      "created_by": "user_quro_fixture",
      "name": "Fixture campaign",
      "description": "Controlled documentation codes",
      "status": "active",
      "created_at": "2026-10-06T11:16:12.166Z",
      "updated_at": "2026-10-06T11:16:12.192Z",
      "template_id": null,
      "counts": {
        "total": 13,
        "basic": 2,
        "standard": 11,
        "premium": 0
      },
      "template_metadata": null
    }
  ],
  "meta": {
    "page": 1,
    "perPage": 50,
    "total": 1,
    "hasMore": false,
    "unassigned": {
      "total": 0,
      "basic": 0,
      "standard": 0,
      "premium": 0
    }
  }
}

HTTP 200. Continue numbered pages while meta.hasMore is true. Preserve includeArchived/status filters and inspect each series status separately from its codes.

Worked response 3 · HTTP 200

Input · payload.json:

{
  "page": 1,
  "perPage": 1,
  "includeArchived": "true",
  "status": "paused"
}

Captured SDK response:

{
  "success": true,
  "data": [
    {
      "id": 3,
      "created_by": "user_quro_fixture",
      "name": "Marathon Runner Tracking",
      "description": "Track marathon participants with individual QR codes for timing, results, and spectator updates",
      "status": "paused",
      "created_at": "2026-10-06T11:16:12.855Z",
      "updated_at": "2026-10-06T11:16:12.885Z",
      "template_id": "marathon-runners",
      "counts": {
        "total": 0,
        "basic": 0,
        "standard": 0,
        "premium": 0
      },
      "template_metadata": {
        "name": "Marathon Runner Tracking",
        "icon": "🏃‍♂️",
        "category": "Events & Sports",
        "description": "Track marathon participants with individual QR codes for timing, results, and spectator updates",
        "features": [
          "Real-time tracking",
          "Spectator updates",
          "Results integration"
        ]
      }
    }
  ],
  "meta": {
    "page": 1,
    "perPage": 1,
    "total": 1,
    "hasMore": false,
    "unassigned": {
      "total": 0,
      "basic": 0,
      "standard": 0,
      "premium": 0
    }
  }
}

HTTP 200. Continue numbered pages while meta.hasMore is true. Preserve includeArchived/status filters and inspect each series status separately from its codes.

Verify the result

  • Continue numbered pages while meta.hasMore is true. Preserve includeArchived/status filters and inspect each series status separately from its codes.

Errors and recovery

  • HTTP 401 · auth_error: Authenticate again in the intended environment and organization.
  • HTTP 403 · action_permission_required: Inspect the actual refusal. The action permission and the verified workspace access are both required; a caller cannot name an ungranted workspace.

Inspect the original handler body as well as the SDK error code. These are observed local refusals, not an exhaustive provider-failure list.

Recovery boundary

Repeat the same read; listing or changing a series label does not disable a code.

  • Get series dashboard: Reads the series identity and saved dashboard; supported templates can supply a default dashboard when no saved state exists.

Evidence

Actual exported Quro Worker with local Miniflare D1/KV and every committed app/analytics migration. Auth, service tokens, Nexus, destination probes and platform archival are synthetic responses; outbound fetch is sealed. Notifications remain in the local outbox. No live redirect propagation, QR scan, destination health, provider delivery, archival or production erasure is established.