ListProjectGatewayMembers
GET/admin/v1/customers/:customer_id/projects/:project_id/gateway-members
List a project's member gateways with their membership state (D1 multi-gateway projects, fraser#5987 / ADR 052).
This is the fleet-consistency primitive (epic tetrate-ai-platform#2865, gate amendment 6): for every member it reports the membership state machine position (syncing / ready / detached_zeroized / detached_unreachable), the member's last-acked config version vs. the project's head config version for that member, health (tri-state: unknown is a valid answer), last-seen, and the state timestamps. The shape is deliberately reusable by future consumers (D3 T1 steering, fleet-upgrade tooling): "is this fleet converged on config head?" is answerable per member from status + config_version + head_config_version alone.
A member is advertised as ready ONLY under confirmed convergence: every
per-gateway config slot acked by the data plane at its current version,
PLUS the member workspace's shared PROXY (authz-map) slot when one exists
(an absent workspace slot passes vacuously — the slot is minted on first
authz-map generation). Because that PROXY slot is shared by every gateway
in the workspace, a bump to it flips ALL of the workspace's members back
to syncing until the new map version is acked — cross-member flap on
workspace-slot bumps is expected behavior, not a defect. A
previously-ready member whose project config moved ahead reports
syncing again until the new head is acked. The config_version /
head_config_version columns stay scoped to the member's own per-gateway
slots (gateway family only): the workspace PROXY slot participates in the
READY predicate but never in the version columns.
Although marked NO_SIDE_EFFECTS, this read performs idempotent ledger
reconciliation: attachments that predate the membership ledger are
backfilled insert-only (a detached record is never reset by a list; only
the Attach RPC does that). A legacy attachment backfilled this way gets a
fabricated attached_at equal to the first list's server time — its true
attach time was never recorded.
A project with ZERO member gateways is fully valid: the response carries an empty members list (and whatever detached history exists), never an error.
Responses carry NO credential material (gate amendment 5): identity, state, versions, and timestamps only.
Enterprise only: on SaaS deployments (DEPLOYMENT_PRODUCT=saas) this RPC fails with UNIMPLEMENTED — the multi-gateway surface does not exist there (the existing attach/detach RPCs remain, capped at one gateway per project).
Request
Responses
- 200
Success