ActionBoxDOCS

Workspaces and Teams

Share an Action inbox safely with workspace roles, invitations, and explicit ownership boundaries.

Workspaces are the tenant boundary for people, Sources, Actions, notifications, and audit history. Every account receives a personal workspace; inviting another person turns that workspace into a team workspace.

Switch before you operate

The active workspace controls the dashboard inbox and the API's user-scoped reads. Select the workspace that owns the Action before reviewing, assigning, or changing team settings.

Roles at a glance

RoleCan review and decideCan claimCan assign or unassignCan manage people and policy
OwnerYesYesYesYes
AdminYesYesYesYes
ApproverYesYesNoNo
ViewerRead-onlyNoNoNo

Decisions require an owner, admin, or approver membership. Assignment changes require an owner or admin. The API checks the active membership on every user-scoped operation.

Members

See active people, their email, role, and copyable user ID in Settings → Team.

Invitations

Invite an email address with an admin, approver, or viewer role; each invitation has a bounded lifetime.

Routing

Send open Actions to a named reviewer or let an approver claim one from the shared queue.

Invite a teammate

Team invitations require the Team plan. Owners and admins can create them from Settings or the API. A Team workspace includes 5 seats across active members and live pending invitations. An expired, revoked, accepted, or same-address replacement invitation does not consume another pending seat. The billing owner can buy additional seats for $8 USD per member per month in Subscription. Additional seats renew separately and must be canceled separately when no longer needed.

1. Choose the email and role

The invitation accepts admin, approver, or viewer. The email is normalized and must match the account that accepts the invitation.

2. Create the invitation

curl -X POST https://api.actionbox.cloud/v1/workspaces/invitations \
  -H "Authorization: Bearer $ACTIONBOX_USER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "reviewer@example.com",
    "role": "approver",
    "expires_in_days": 7
  }'

The allowed lifetime is between 1 and 30 days and defaults to 7. The response contains the raw invitation token and acceptance URL once. When transactional email delivery is configured, ActionBox queues an invitation to the invited address and exposes its delivery state in Settings. Keep the one-time URL as a fallback if delivery is delayed.

The invitation object includes these operational fields:

{
  "id": "inv_...",
  "workspace_id": "wrk_...",
  "email": "reviewer@example.com",
  "role": "approver",
  "status": "pending",
  "email_delivery_status": "pending",
  "expires_at": "2026-09-11T17:00:00Z"
}

status is pending, accepted, revoked, or expired. Email delivery can be pending, sending, retrying, accepted, delivered, failed, suppressed, or cancelled. If transactional email is unavailable, it is not_configured and the acceptance URL is the delivery path.

3. Accept the invitation

The invited person signs in with the exact invited email, then submits the token to POST /v1/workspace-invitations/accept. A different account cannot accept or discover membership through that token. Acceptance switches their active workspace to the invited workspace.

There is only one usable pending invitation for an email in a workspace. Creating a replacement supersedes the older pending credential. Owners and admins can list or revoke pending invitations.

The Team plan includes 5 seats. Active members and unexpired pending invitations both reserve a seat, which prevents an invitation burst from overbooking the workspace. Accepted, revoked, and expired invitations stop counting as pending reservations.

An email that was already leased by the delivery worker is checked again immediately before it is sent. If the invitation has expired, been revoked, been replaced, been accepted, or no longer matches its recipient, ActionBox cancels that delivery.

Manage membership safely

Owners and admins can use these user-session endpoints:

GET    /v1/workspaces
POST   /v1/workspaces/select
GET    /v1/workspaces/members
PATCH  /v1/workspaces/members/{user_id}
DELETE /v1/workspaces/members/{user_id}
POST   /v1/workspaces/leave
GET    /v1/workspaces/audit-events?limit=50

The service prevents a workspace from losing its last owner. Only an owner can change owner roles or remove an owner or admin. Removing a member immediately revokes their membership; open Actions assigned to them are returned to the unassigned queue, while terminal history remains intact.

Need a reviewer ID?

Open Settings → Team, find the member, and select Copy user ID. Use that value as assignee_user_id, or use the member's email as assignee_email. Send one field, not both. See the compact assignment schema.

User IDs are stable identifiers, not credentials. Assignment still requires an active owner, admin, or approver in the Source workspace.

A non-owner may leave from Settings or POST /v1/workspaces/leave. Leaving immediately revokes access, returns assigned open Actions to the unassigned queue, and selects the person's personal workspace. The billing owner cannot leave or delete the account while a shared workspace still depends on that billing identity.

Shared Team members cannot start a separate subscription while the membership is active. A signed-in account with a valid pending Team invitation is also held out of checkout until the invitation is accepted, revoked, or expires. GET /v1/billing/purchase-eligibility returns the current reason. Once a non-owner leaves every shared Team workspace, their personal workspace becomes eligible for its own subscription.

The administration history records invitation creation, revocation and acceptance, member role changes, and removals. Owners and admins can review the recent events in Settings or through GET /v1/workspaces/audit-events. Results follow the workspace billing owner's current history-retention window.

{
  "data": [{
    "id": "wae_...",
    "workspace_id": "wrk_...",
    "event_type": "member_role_changed",
    "actor": {"user_id": "usr_...", "email": "owner@example.com", "display_name": "Owner"},
    "subject": {"user_id": "usr_...", "email": "reviewer@example.com", "display_name": "Reviewer"},
    "invitation_email": null,
    "payload": {"previous_role": "approver", "role": "viewer"},
    "created_at": "2026-09-04T17:00:00Z"
  }]
}

If the Team plan ends

The workspace is paused for collaborators rather than deleted. Members cannot select it, and pending invitations cannot be accepted, until the billing owner restores Team access. Existing Actions, memberships, comments, and history remain attached to the workspace. The billing owner keeps recovery access and other members are returned to an accessible personal workspace.

Only the billing owner can open that workspace's billing portal, even if their membership role later changes. Another member's billing response does not expose the payer's Paddle customer or subscription identifier. ActionBox's maintained checkout screens require a person to leave shared Team workspaces before purchasing a separate subscription for their own account.

Keep boundaries clear

  • A Source belongs to one workspace and cannot address another workspace through its key.
  • A user sees Actions and notifications for the active workspace, subject to the Action's retention window and filters.
  • Viewer access is read-only; it does not grant claim, decide, assignment, invitation, or role-management capability.
  • Workspace invitation tokens are bearer credentials. Treat them like passwords and do not include them in screenshots or logs.

Decision access is not assignment access

An approver can claim and decide an open Action, but only an owner or admin can explicitly route it to another member. Use Assignments and routing for the shared-inbox workflow.

Next: Notifications, Sources and keys, or Decisions and outcomes.

On this page