People join by invitation. An invitation is created by an owner and stays pending until it is accepted or revoked, so you can see who has been asked and has not yet answered.
List members
GET
https://your-instance.com/api/organization/{id}/membersAny member may call this. It returns the roster with each person's role.
Invitations
| Method | Path | Purpose |
|---|---|---|
GET | /api/organization/{id}/invitations | List pending invitations |
POST | /api/organization/{id}/invitations | Invite someone |
DELETE | /api/organization/{id}/invitations/{invitation_id} | Revoke an invitation |
curl
curl https://your-instance.com/api/organization/$ORG_ID/invitations \
-H "Authorization: Bearer $CLAWROUTER_ACCESS_TOKEN" \
-H "New-Api-User: $USER_ID" \
-H "Content-Type: application/json" \
-d '{"username": "dave"}'Changing a role
PUT
https://your-instance.com/api/organization/{id}/members/{user_id}roleintegerrequired1 for member, 100 for owner.
Suspending a member
PUT
https://your-instance.com/api/organization/{id}/members/{user_id}/statusSuspension is scoped to this organization only. It stops their organization keys from working without touching their personal account, which is what you want when someone is between projects rather than gone.
Leaving and removing
| Method | Path | Who |
|---|---|---|
DELETE | /api/organization/{id}/members/self | Any member, leaving voluntarily |
DELETE | /api/organization/{id}/members/{user_id} | Owner, removing someone |
Reclaim any unspent budget before removing someone, otherwise the allocation is stranded with a member who is no longer there.
