GET /registry/overviewThe full routing table: live workers, hostname and env bindings, and for each (hostname, env, namespace) the sessions serving it and the ids placed there. Placements are read with a full scan of every bucket; on a large fleet, filter.
Authentication
pinboard:operator scope. Filtered by the claim like List workers; bindings and namespaces outside it are dropped.
Query parameters
All optional; combined with AND.
| Name | Type | Description |
|---|---|---|
ns | string | Exact namespace, URL-encoded (%2Fthreads). Drops other namespaces. |
prefix | string | Keep entries whose id starts with this. |
tag | string | Keep entries with exactly this tag. Untagged entries are dropped. Must not be empty. |
Example
curl "https://pinboard.example.com/registry/overview?ns=%2Fthreads&tag=ws%3Aacme" \
-H "Authorization: Bearer $PINBOARD_OPERATOR_TOKEN"Response
200
| Field | Type | Description |
|---|---|---|
workers | object[] | Same as List workers. Not affected by the query. |
bindings.hostnames | object | {"{hostname}{namespace}": env}. Single-hostname mode: {"*/threads": "*"}. |
bindings.envs | object | {env: takeover}. |
namespaces | object[] | One per (hostname, namespace) with a registered worker, sorted. |
namespaces[].hostname | string | |
namespaces[].env | string | |
namespaces[].namespace | string | |
namespaces[].sessionIds | string[] | Live sessions serving it, sorted. |
namespaces[].entries | object[] | Placements in the (env, namespace) owned by a live session, sorted by id. |
namespaces[].entries[].id | string | Instance id. |
namespaces[].entries[].sessionId | string | Owner. |
namespaces[].entries[].expiry | integer | Present when a wind-down is pending: when the row frees, Unix ms. |
namespaces[].entries[].tag | string | Present when tagged. |
Two hostnames bound to the same env list the same entries.
{
"workers": [ { "sessionId": "3f9c0d6e2b1a4c7d8e9f0a1b2c3d4e5f", "...": "..." } ],
"bindings": {
"hostnames": { "*/threads": "*" },
"envs": { "*": "wind_down" }
},
"namespaces": [
{
"hostname": "*",
"env": "*",
"namespace": "/threads",
"sessionIds": ["3f9c0d6e2b1a4c7d8e9f0a1b2c3d4e5f"],
"entries": [
{ "id": "t_8f2a", "sessionId": "3f9c0d6e2b1a4c7d8e9f0a1b2c3d4e5f", "tag": "ws:acme" }
]
}
]
}Errors
| Status | Body | When |
|---|---|---|
400 | {"error":"invalid namespace"} | ns is not / plus one segment |
400 | {"error":"empty tag"} | tag= with no value |
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 |