Outcome
Reads the supported categories, statuses or tiers used by code-management forms.
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.metadata.get --detail --json
Request
GET /metadata/{type}
Inspect parameters and test this action.
Input fields
| Field | Required | Meaning |
|---|---|---|
type | Yes | Declared metadata family: categories, statuses or tiers. |
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.metadata.get --data @payload.json --json
topolo actions plan app_topolo_quro.metadata.get --resource-type workspace --resource-id "$WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_quro.metadata.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.metadata.get",
"input": {
"type": "categories"
},
"resourceType": "workspace",
"resourceId": "ws_quro_fixture"
}
}
{
"tool": "topolo_read_action",
"arguments": {
"actionId": "app_topolo_quro.metadata.get",
"input": {
"type": "categories"
},
"resourceType": "workspace",
"resourceId": "ws_quro_fixture",
"detail": true
}
}
Worked response 1 · HTTP 200
Input · payload.json:
{
"type": "categories"
}
Captured SDK response:
{
"success": true,
"data": [
{
"id": 1,
"name": "Standard",
"description": "Regular QURO code for general use"
},
{
"id": 2,
"name": "Marketing",
"description": "Used for marketing campaigns"
},
{
"id": 3,
"name": "Product",
"description": "Used on product packaging"
},
{
"id": 4,
"name": "Event",
"description": "Event ticketing and check-in"
},
{
"id": 5,
"name": "Restaurant",
"description": "Menus, tables, and hospitality"
},
{
"id": 6,
"name": "Retail",
"description": "Retail shelf, loyalty, and checkout flows"
},
{
"id": 7,
"name": "Operations",
"description": "Internal operations and asset tracking"
},
{
"id": 8,
"name": "IoT Device",
"description": "Connected device and telemetry labels"
},
{
"id": 9,
"name": "Document",
"description": "Document or file handoff"
},
{
"id": 10,
"name": "Identity",
"description": "Identity, badge, or credential flows"
},
{
"id": 11,
"name": "Industrial IoT",
"description": "Industrial connected asset labels"
}
]
}
HTTP 200. Select a declared type and retain the returned category/status ids. Tier labels are product metadata, not an entitlement or pricing decision.
Worked response 2 · HTTP 200
Input · payload.json:
{
"type": "statuses"
}
Captured SDK response:
{
"success": true,
"data": [
{
"id": 1,
"name": "Active",
"description": "QURO code is active and redirects normally"
},
{
"id": 2,
"name": "Inactive",
"description": "QURO code is temporarily disabled"
},
{
"id": 3,
"name": "Expired",
"description": "QURO code has passed its validity window"
},
{
"id": 4,
"name": "Pending",
"description": "QURO code is not active yet"
}
]
}
HTTP 200. Select a declared type and retain the returned category/status ids. Tier labels are product metadata, not an entitlement or pricing decision.
Worked response 3 · HTTP 200
Input · payload.json:
{
"type": "tiers"
}
Captured SDK response:
{
"success": true,
"data": [
{
"id": "basic",
"name": "Basic",
"description": "Simple redirect with minimal tracking",
"features": [
"URL redirection",
"Custom slugs",
"Minimal storage usage"
]
},
{
"id": "standard",
"name": "Standard",
"description": "Standard redirect with management capabilities",
"features": [
"URL redirection",
"Custom slugs",
"Status control",
"Categories",
"Basic analytics"
]
},
{
"id": "premium",
"name": "Premium",
"description": "Full-featured redirect with advanced analytics",
"features": [
"URL redirection",
"Custom slugs",
"Status control",
"Categories",
"Detailed analytics",
"Usage limits",
"Valid date ranges",
"Device tracking"
]
}
]
}
HTTP 200. Select a declared type and retain the returned category/status ids. Tier labels are product metadata, not an entitlement or pricing decision.
Verify the result
- Select a declared type and retain the returned category/status ids. Tier labels are product metadata, not an entitlement or pricing decision.
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
Request only categories, statuses or tiers. The handler requires codes:read; the declaration is aligned with that existing requirement.
Related actions
- Create QR code: Persists a code, design snapshot and redirect cache entry, records a creation event and queues a local publication notification for an active code.
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.