GET /registry/statsCalls GET /_pinned/stats on every live worker visible to the claim, 8 at a time with a 3 s timeout each, and returns one row per worker. Response time grows with fleet size.
Authentication
pinboard:operator scope. Workers are filtered by the claim like List workers. Each worker's stats.namespaces keys and stats.instances items keep only namespaces visible to the claim; other fields (process, draining, …) pass through whole.
Example
curl https://pinboard.example.com/registry/stats \
-H "Authorization: Bearer $PINBOARD_OPERATOR_TOKEN"Response
200
| Field | Type | Description |
|---|---|---|
workers | object[] | Same order as List workers. |
workers[].sessionId | string | |
workers[].clientId | string | |
workers[].hostname | string | |
workers[].stats | object | The worker's JSON, filtered. Present on success. |
workers[].error | "unreachable" | Present instead of stats on a non-2xx, timeout, or non-object body. |
{
"workers": [
{
"sessionId": "3f9c0d6e2b1a4c7d8e9f0a1b2c3d4e5f",
"clientId": "c1e0b7a94f6d4a1e9b2c3d4e5f60718a",
"hostname": "*",
"stats": {
"draining": false,
"leaseFlaps": 0,
"reregistrations": 0,
"namespaces": { "/threads": { "...": "..." } },
"instances": [ { "namespace": "/threads", "...": "..." } ],
"process": { "uptimeMs": 7200000, "rssBytes": 210763776 }
}
},
{
"sessionId": "8a7b6c5d4e3f20110f1e2d3c4b5a6978",
"clientId": "5e4d3c2b1a09f8e7d6c5b4a392817060",
"hostname": "*",
"error": "unreachable"
}
]
}Errors
| Status | Body | When |
|---|---|---|
401 | {"error":"unauthorized"} | No accepted credential |
403 | {"error":"forbidden"} | No pinboard:operator scope, or malformed claim |
503 | {"error":"not the serving fleet"} | Node not serving. Retry-After: 1. |
404 | {"error":"not found"} | Method other than GET |