Topolo Docs Topolo Platform
Open workspace

Get QR code

Reads one code by exact numeric id or slug within the verified workspace, including its design, scan count and series. Exact reads can return soft-deleted records.

Outcome

Reads one code by exact numeric id or slug within the verified workspace, including its design, scan count and series. Exact reads can return soft-deleted records.

Before you start

  • Verify identity, environment and the intended organization before discovery.
  • Discover the published codes: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.qurocodes.get --detail --json
  • id_or_slug: Exact id converted to a string, or exact slug. Numeric strings are interpreted as ids; a human display name is not an identifier.

Request

GET /qurocodes/{id_or_slug}

Inspect parameters and test this action.

Input fields

FieldRequiredMeaning
id_or_slugYesExact id converted to a string, or exact slug. Numeric strings are interpreted as ids; a human display name is not an identifier.

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.qurocodes.get --data @payload.json --json
topolo actions plan app_topolo_quro.qurocodes.get --resource-type workspace --resource-id "$WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_quro.qurocodes.get --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.qurocodes.get",
    "input": {
      "id_or_slug": "1"
    },
    "resourceType": "workspace",
    "resourceId": "ws_quro_fixture"
  }
}
{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_quro.qurocodes.get",
    "input": {
      "id_or_slug": "1"
    },
    "resourceType": "workspace",
    "resourceId": "ws_quro_fixture",
    "detail": true
  }
}

Worked response 1 · HTTP 200

Input · payload.json:

{
  "id_or_slug": "1"
}

Captured SDK response:

{
  "success": true,
  "data": {
    "id": 1,
    "slug": "quro-fixture",
    "url": "https://example.com/fixture",
    "status_id": 1,
    "category_id": 1,
    "created_by": "user_quro_fixture",
    "tier": "standard",
    "series_id": 1,
    "organization_id": "org_quro_fixture",
    "workspace_id": "ws_quro_fixture",
    "name": "Fixture QR",
    "description": null,
    "max_usage": null,
    "valid_from": null,
    "valid_to": null,
    "created_at": "2026-10-06T11:16:12.268Z",
    "updated_at": null,
    "deleted_at": null,
    "design_version": 1,
    "design": {
      "version": 1,
      "source": "plain",
      "foreground": "#000000",
      "background": "#ffffff",
      "moduleStyle": "square",
      "finderStyle": "square",
      "brand": null
    },
    "delivery_mode": "redirect",
    "supports_publishing_state": true,
    "supports_tier_selection": true,
    "management_model": "standard",
    "scan_count": 0,
    "series": {
      "id": 1,
      "name": "Fixture campaign",
      "status": "active"
    }
  }
}

HTTP 200. Inspect deleted_at and status_id even with HTTP 200. Compare organization_id and workspace_id, destination and current design version.

Worked response 2 · HTTP 200

Input · payload.json:

{
  "id_or_slug": "quro-fixture"
}

Captured SDK response:

{
  "success": true,
  "data": {
    "id": 1,
    "slug": "quro-fixture",
    "url": "https://example.com/updated",
    "status_id": 1,
    "category_id": 1,
    "created_by": "user_quro_fixture",
    "tier": "standard",
    "series_id": 1,
    "organization_id": "org_quro_fixture",
    "workspace_id": "ws_quro_fixture",
    "name": "Updated fixture QR",
    "description": null,
    "max_usage": null,
    "valid_from": null,
    "valid_to": null,
    "created_at": "2026-10-06T11:16:12.268Z",
    "updated_at": "2026-10-06T11:16:12.380Z",
    "deleted_at": null,
    "design_version": 1,
    "design": {
      "version": 1,
      "source": "plain",
      "foreground": "#000000",
      "background": "#ffffff",
      "moduleStyle": "square",
      "finderStyle": "square",
      "brand": null
    },
    "delivery_mode": "redirect",
    "supports_publishing_state": true,
    "supports_tier_selection": true,
    "management_model": "standard",
    "scan_count": 0,
    "series": {
      "id": 1,
      "name": "Fixture campaign",
      "status": "active"
    }
  }
}

HTTP 200. Inspect deleted_at and status_id even with HTTP 200. Compare organization_id and workspace_id, destination and current design version.

Worked response 3 · HTTP 404 · QURO code not found

Input · payload.json:

{
  "id_or_slug": "missing-fixture"
}

Captured SDK response:

{
  "success": false,
  "error": "QURO code not found"
}

HTTP 404. Discover the exact record id or slug in the same workspace before retrying.

Worked response 4 · HTTP 200 · Soft-deleted record remains readable

Input · payload.json:

{
  "id_or_slug": "1"
}

Captured SDK response:

{
  "success": true,
  "data": {
    "id": 1,
    "slug": "quro-fixture",
    "url": "https://example.com/updated",
    "status_id": 2,
    "category_id": 1,
    "created_by": "user_quro_fixture",
    "tier": "standard",
    "series_id": 1,
    "organization_id": "org_quro_fixture",
    "workspace_id": "ws_quro_fixture",
    "name": "Updated fixture QR",
    "description": null,
    "max_usage": null,
    "valid_from": null,
    "valid_to": null,
    "created_at": "2026-10-06T11:16:12.268Z",
    "updated_at": "2026-10-06T11:16:12.380Z",
    "deleted_at": "2026-10-06T11:16:13.673Z",
    "design_version": 1,
    "design": {
      "version": 1,
      "source": "plain",
      "foreground": "#000000",
      "background": "#ffffff",
      "moduleStyle": "square",
      "finderStyle": "square",
      "brand": null
    },
    "delivery_mode": "redirect",
    "supports_publishing_state": true,
    "supports_tier_selection": true,
    "management_model": "standard",
    "scan_count": 3,
    "series": {
      "id": 1,
      "name": "Fixture campaign",
      "status": "completed"
    }
  }
}

HTTP 200. Inspect deleted_at and status_id even with HTTP 200. Compare organization_id and workspace_id, destination and current design version.

Verify the result

  • Inspect deleted_at and status_id even with HTTP 200. Compare organization_id and workspace_id, destination and current design version.

Errors and recovery

  • HTTP 404 · http_error: Discover the exact record id or slug in the same workspace before retrying.
  • 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

Discover ids/slugs using qurocodes.list for active records. A deleted exact record can remain readable; do not interpret HTTP 200 as an active redirect.

  • List QR codes: Lists non-deleted workspace codes with filters, page metadata, tier counts and scan counts; basic codes remain in the same canonical inventory.

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.