The workspace's teams, by name
Owners and admins. Archived teams are left out. q keeps the teams whose name contains it, ignoring case. By name, then id, limit per page (default 50, at most 100). Pass next_cursor back as cursor for the next page; it is null on the last one. A cursor that does not decode to a position in that order answers 400; a cursor only positions the read, so one from another workspace shows nothing of it. A team renamed while the pages are read can show twice or not at all; every other team shows once.
Auth: cookie session only; no scope.
cookieSession__Host-werft_session<token>For the web console: the browser session cookie set by POST /v1/auth/login. It holds the scopes of the user's workspace role (owner: all; admin and member: all but sessions:recover). Requests other than GET must also send X-Requested-With: werft-web.
cursor?stringThe next_cursor of the page before; omit it for the first page.
1 <= lengthlimit?integerHow many items a page holds at most.
1 <= value <= 10050q?stringKeeps the teams whose name contains it, ignoring case. % and _ match themselves.
1 <= length <= 200A page of the workspace's live teams.
application/json- response
items*array<>next_cursor*|nullcurl -X GET 'https://example.com/v1/teams'{ "items": [ { "id": "019a0000-0000-7000-8000-00000000b0a1", "workspace_id": "9d2c4e61-8a3b-4f70-b1e5-6c0a7d3f2b98", "name": "research admins", "member_count": 2, "created_by": "3e7f1a90-5c2d-4b8e-8f61-2a9d0c4b7e35", "created_at": "2026-10-23T09:00:00Z", "revision": 3 } ], "next_cursor": null}