Accept an invite from the caller's invite inbox
Same acceptance path as redeeming a token, but the invite is identified by id so the in-app invitations list does not need the token. The caller's verified email must still match the invited address, and unknown, already-closed, or expired invites are rejected.
Authorization
apiKey Workspace API key created in Workspace settings → API keys. Scopes on the key bound what it can read and write.
In: header
Path Parameters
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/v1/me/workspace-invites/string/accept"{ "data": { "id": "string", "slug": "string", "name": "string", "icon": "initials", "accentColor": "string", "imageUrl": "string", "role": "owner", "permissions": [ "workspace:read" ], "createdAt": "string", "updatedAt": "string" }}{ "_tag": "ApiNotFound", "error": "not_found", "message": "That item does not exist, or this key cannot see it.", "status": 404}{ "_tag": "ApiNotFound", "error": "not_found", "message": "That item does not exist, or this key cannot see it.", "status": 404}Accept a workspace invite using its token
Redeems the invite token, creates the membership at the invited role, and returns the joined workspace; billable seats are re-synced afterwards. The caller must be authenticated with a synced profile and a verified email matching the invited address — an unverified or different email is refused. Unknown, already-closed, and expired invites are rejected.
List the workspace's roles
Returns the built-in roles and any custom roles in the workspace, each with its permission list and current member count, built-ins first. The built-in rows are seeded lazily on first read, so a workspace that has never been asked before gets them here. Requires `members:read`.