Skip to content

GET /api/v1/admin/orgs/:slug/members

This page is auto-generated from src/admin/routes.ts. Do not edit by hand — see docs/dev/docs-auto-sync.md.

:warning: Heuristic extraction — not a contract. Response shapes below are mined from c.json(...) literals in the handler via an AST walker. Computed fields, ternaries, and non-literal returns are shown as placeholders. Refer to the linked source file for the authoritative behaviour.

Requires the following capability(ies):

  • members:r

Other middleware observed on this route (heuristic):

  • requireCapability

GET /api/v1/admin/orgs/:slug/members — list the org’s members.

#422 / #398b — surface the Upwarden-side directory (tenant_members) plus the synthetic admin-token owner row. The directory rows carry the lifecycle state (active / suspended / removed) the dashboard renders; the synthetic owner row marks the admin-token / cookie principal as source: "admin_token" with role: "owner" and status: "active" so the dashboard’s “you are here” indicator works without a directory entry for the platform admin. The synthetic row is suppressed when the caller already has a tenant_members row (post-#423 / accept flow), since in that case the directory row is the canonical “you are here” target.

Seats accounting: counts (active | suspended) tenant_members rows toward the tier’s seat cap. Removed rows are NOT counted (they’re history). The synthetic admin-token owner does NOT count toward the cap — they’re the platform operator, not a tenant seat.

Gated on members:r.

{
"error": "Org not found"
}
{
"members": <members>,
"seats": {
"consumed": <consumed>,
"cap": <cap>,
"tier": <member-expr>
}
}
  • File: src/admin/routes.ts
  • Line: 2788