admin scope: this route enumerates real people (id, email, display name,
role), so it follows the same posture as GET /v1/usage — org-wide
enumeration requires an admin key, and a non-admin key gets 403
permission_denied. Rows with role='service' (provisioned subjects
and sandbox identities) are never returned: they are not team members and
their internal user ids are an isolation detail. Ordered by joinedAt
ascending with the member id as a stable tiebreaker; page with
nextCursor until hasMore is false. No totals — use
memberCount on GET /v1/team for the size of the team.
This route requires the admin scope.A missing or invalid credential returns 401 authentication_error. A valid credential without the scope returns 403 permission_denied, and the problem body names the exact scope required.
Admin scope, because this enumerates real people. Provisioned subjects and sandbox identities are never returned: they are not team members and their internal ids are an isolation detail.