Invite collaborators to the account. Every member works in the account owner's organization. Their role and service allowlist limit their access.
Invite, list, update, and revoke require an account owner or admin member. Other callers receive 403 Forbidden.
Each API route applies its own access rule. Every role also respects the member's allowed_connections list. Requests that use another service return 403.
Seats include the account owner. An invitation fails with 403when the account has no available seat.
Extra seats cost $15 per month.
curl -X POST https://api.getstack.run/v1/team/members \
-H "Authorization: Bearer $STACK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": "developer@example.com",
"name": "Jane Developer",
"role": "standard",
"allowed_connections": ["scon_slack_prod", "scon_github_ops"]
}'Returns 201 with the invited member.
{
"id": "mem_abc123",
"operator_id": "op_xyz",
"email": "developer@example.com",
"name": "Jane Developer",
"role": "standard",
"status": "invited",
"allowed_connections": ["scon_slack_prod", "scon_github_ops"],
"invited_at": "2026-04-15T10:00:00Z",
"joined_at": null,
"revoked_at": null
}Returns a bare array of member objects.
curl https://api.getstack.run/v1/team/members \
-H "Authorization: Bearer $STACK_API_KEY"Change the role or replace the service allowlist. Changes apply immediately.
curl -X PATCH https://api.getstack.run/v1/team/members/mem_abc123 \
-H "Authorization: Bearer $STACK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"role": "admin",
"allowed_connections": ["scon_slack_prod", "scon_github_ops"]
}'STACK rejects missing, inactive, and cross-account connection IDs. An unrestricted member also gains access to connections added later; an empty allowlist does not.
Revoke the member. Their dashboard session and OAuth refresh tokens stop working; prior audit attribution remains.
curl -X DELETE https://api.getstack.run/v1/team/members/mem_abc123 \
-H "Authorization: Bearer $STACK_API_KEY"{ "success": true }STACK emails the member a single-use link. Opening it activates the membership, creates a browser session, and opens the Console. The invitation endpoint is used by that page; it does not return an API key.
A service connection created by a member includes their member ID in connected_by.