List the workspaces the caller belongs to
Every workspace the acting user belongs to, and the role held in each.
/v1/me/workspacesSigned in- Operation id
- list_my_workspaces
- Access
- Any signed in caller. No workspace role is required.
/v1/me/workspacesEvery workspace the acting user belongs to, and the role held in each.
This is how a client learns which workspaces to offer. It is the one operation that answers before a workspace has been chosen, which is what makes it usable for building a workspace switcher.
selection_required is the server's answer to "must the user pick one".
It is true above a single membership. Read it rather than counting the
list, so the rule has one home.
role is read live from the membership record on this request. It is a
statement about right now and about nothing else: it is not carried in a
token, not cached, and a client that stores it will be showing a role that
an owner may have changed a second later (§13.2, AC-70).
status is the workspace's own status, and it is informational. Workspace
status is deliberately not a selection predicate. It is not one today,
and quietly making it one here would change which workspaces existing
callers can reach, which is a behaviour change §13 does not ask for.
A caller with no memberships gets an empty list and selection_required
false, and that is the correct answer rather than a refusal: the route
reports what the membership record says, and at zero memberships it says
nothing. It is the routes that need a workspace that refuse such a caller,
with no_workspace_membership, so "linked, no workspace" and "not linked
at all" stay distinguishable (FR-50), which they would not be if this route
refused too. The query is scoped by the acting user in the WHERE clause, so
a workspace the caller is not a member of cannot appear in it at any count.
A caller whose own status is not active is refused here as everywhere else (FR-51), on the status this request read rather than on a remembered one.
Access: Authorization: Bearer carrying a realm access token. An API key is refused here with api_key_identity_only: this operation answers for a person, and a key acts in one workspace.
Authorization
keycloakBearer A realm-issued access token, presented as Authorization: Bearer <token>. It acts as the person who signed in, and every operation resolves their workspace role live from the membership record.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/me/workspaces"{ "workspaces": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "slug": "string", "name": "string", "status": "string", "role": "string", "joined_at": "string" } ], "selection_required": true}