`GET /api/v1/pools` — the pools that exist, for the assignment picker. Names only, no telemetry.
const url = 'https://example.com/api/v1/pools';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/api/v1/pools \ --header 'Authorization: Bearer <token>'Deliberately separate from GET /pollers, which scans the whole node table to build its
per-pool counts; this is one small table plus two indexed DISTINCTs, and is loaded by an
ordinary page.
Authorizations
Section titled “Authorizations”Responses
Section titled “Responses”The pools on offer, default first, each flagged with whether a live poller serves it
The pools that exist, for the assignment picker.
object
One pool offered by the pool picker.
object
The pool currently polling this one’s members on its behalf, if an operator asked for that
(ADR-107 Inc.4). None is the ordinary case.
⚠️ Its members are already in that pool — this says the move is recorded and can be undone, not that it is pending. A UI that reads it as “will be” would offer a takeover that has already happened.
Why this pool exists, in the operator’s words. None for a pool nobody has described —
including every pool that predates the pools table, which is most of them on an existing
deployment.
Whether a live poller currently serves it. A pool with none takes the legacy per-job path onto a subject nothing subscribes to, so its jobs are silently discarded — the picker has to say so rather than present it as an equivalent choice.
Pool name.
Examplegenerated
{ "pools": [ { "covered_by": "example", "description": "example", "live": true, "name": "example" } ]}No valid bearer token
The ADR-019 envelope every failure renders as. pub(crate) and schema-bearing so the OpenAPI
document can name one error shape for every endpoint (ADR-035) instead of leaving 4xx/5xx bodies
undescribed — a client that has to guess the failure shape ends up parsing the success shape and
reading undefined.
object
object
Stable machine-readable code. Clients branch on this, never on the message.
Operator-facing sentence. Safe to display; never carries an internal error’s own text.
Examplegenerated
{ "error": { "code": "example", "message": "example" }}Role lacks the View permission
The ADR-019 envelope every failure renders as. pub(crate) and schema-bearing so the OpenAPI
document can name one error shape for every endpoint (ADR-035) instead of leaving 4xx/5xx bodies
undescribed — a client that has to guess the failure shape ends up parsing the success shape and
reading undefined.
object
object
Stable machine-readable code. Clients branch on this, never on the message.
Operator-facing sentence. Safe to display; never carries an internal error’s own text.
Examplegenerated
{ "error": { "code": "example", "message": "example" }}This deployment has no write side (skeleton mode)
The ADR-019 envelope every failure renders as. pub(crate) and schema-bearing so the OpenAPI
document can name one error shape for every endpoint (ADR-035) instead of leaving 4xx/5xx bodies
undescribed — a client that has to guess the failure shape ends up parsing the success shape and
reading undefined.
object
object
Stable machine-readable code. Clients branch on this, never on the message.
Operator-facing sentence. Safe to display; never carries an internal error’s own text.
Examplegenerated
{ "error": { "code": "example", "message": "example" }}