Team Members
Invite teammates to a project by email, assign roles, list and remove members, and accept or decline invites — collaboration with owner / admin / member / viewer permissions.
A project is owned by one developer but can have many members. Invite teammates by email, grant each a role, and manage the roster over time. Invites are link-based: creating one returns a URL you send to your teammate, who accepts it while signed in to their own Amba account.
Membership routes mount under /v1/admin/projects/:projectId/* and require
developer credentials (a PAT or console session) — these are
person-identity actions, so server keys are rejected.
Roles
| Role | Can |
|---|---|
owner | Everything, including changing member roles. One per project; can't be removed (transfer ownership first). |
admin | Manage members + integrations; invite, and remove members/viewers. |
member | Write data. |
viewer | Read-only. |
The owner is synthesized into member listings from the project record — you don't manage an explicit owner row.
Invite a teammate
POST .../invites mints an invite and returns the URL to forward. Owners
and admins can invite; the default role is member, and invites expire
after 7 days (max 30).
The invite_url is shown once — the raw token isn't stored. If it's
lost, revoke the invite and send a new one. Re-inviting the same email
while an open invite exists returns the existing invite with
idempotent: true and a null invite_url.
| Field | Type | Required | Notes |
|---|---|---|---|
email | string | yes | Teammate's email. |
role | enum | no | admin / member / viewer. Default member. |
expires_in_days | int | no | 1–30. Default 7. |
Accept or decline
The recipient accepts (or declines) with the raw token from the invite URL, signed in as themselves. The email on the invite must match their account email.
Accept fails with 403 EMAIL_MISMATCH if the invite was sent to a
different address, 410 INVITE_EXPIRED if it lapsed, or 409 ALREADY_ACCEPTED if it's already claimed. POST /v1/admin/invites/decline
takes the same { token } body and quietly expires the invite.
List & remove members
PATCH .../members/:developerId with { role } changes a member's role
(owner only). DELETE .../members/:developerId removes a member — the
owner can remove anyone (except themselves), admins can remove
members/viewers, and any member can remove themselves (leave the project).
Endpoints
| Method | Path | Description |
|---|---|---|
| POST | /admin/projects/:projectId/invites | Create an invite (owner/admin). |
| GET | /admin/projects/:projectId/invites | List open invites. |
| DELETE | /admin/projects/:projectId/invites/:inviteId | Revoke an open invite. |
| GET | /admin/projects/:projectId/members | List members (incl. owner). |
| PATCH | /admin/projects/:projectId/members/:developerId | Change a member's role (owner). |
| DELETE | /admin/projects/:projectId/members/:developerId | Remove a member. |
| POST | /admin/invites/accept | Accept an invite by token. |
| POST | /admin/invites/decline | Decline an invite by token. |
MCP tools
| Tool | Does |
|---|---|
amba_projects_invite_member | Invite a teammate; returns the invite URL. |
amba_projects_list_members | List members + roles. |
amba_projects_remove_member | Remove a member. |
Free-tier note: accepting an invite to a free-tier project counts toward the accepting developer's free-project limit.