Matrix: M03M04
Open in panel — /app/access
Getting Started

Subusers & Teams

Subusers let you create scoped operator accounts tied to individual team members. Each subuser has their own API keys, role-based permissions, and a credit allocation budget tracked independently from the parent workspace.

Create a Subuser Account

Subusers are created at the workspace level via POST /v1/users. A subuser can belong to only one workspace at creation time; workspace cross-access requires separate membership grants.

{create_subuser}

User creation fields

FieldTypeRequiredDescription
emailstringYesUnique email address for this user. Also their login identity.
namestringYesDisplay name shown in the dashboard.
rolestringYesOne of: viewer, editor, operator, owner.
workspace_idstringYesWorkspace this user belongs to.
credits_allocatedintegerNoInitial credit budget for this user. Defaults to 0 (no sends until allocated).
mfa_requiredbooleanNoEnforce MFA for this user. Defaults to workspace setting.

List Subusers

{list_subusers}

Returns all subusers for the workspace with their role, credit breakdown, and last-seen timestamp.

Role-Based Access Control

Every subuser is assigned one of four roles. Roles are hierarchical and additive.

{role_permissions_table}

Role Definitions

RoleTypical use case
viewerStakeholders who need read-only access to analytics and delivery reports.
editorEmail marketers who create templates and campaigns but do not touch infrastructure.
operatorSend operations team managing webhooks, suppression lists, and daily send operations.
ownerWorkspace administrators with full access including billing, user management, and security settings.

Subuser API Keys (Scoped to Subuser)

API keys can be created with a user_id binding. Such keys inherit the subuser role and are subject to the same permission boundaries. This is the recommended way to issue credentials to automated systems that should operate under a specific team member's identity.

{create_subuser_key}

Response — the key value is shown only once:

{subuser_key_response}
Subuser key limits: A subuser-bound key cannot be granted permissions beyond the subuser's own role. For example, a key bound to a viewer subuser cannot be given messages:send scope even if requested.

Subuser Credits Allocation and Tracking

Workspace credits are allocated to individual subusers. Each subuser draws from their own allocation when sending; they cannot spend credits allocated to other subusers in the same workspace.

Allocate additional credits to a subuser:

{allocate_credits}

Check credit balances:

{credit_balance}

Response:

{credit_balance_response}

When a subuser's available credits reach zero, all sending operations using their API key are rejected with 402 Payment Required until additional credits are allocated.

Team Management Dashboard

The PostMTA dashboard under App → Access provides a team management view where workspace owners can:

{team_dashboard}

API Key Permissions per Subuser

When you create a key for a subuser, you must specify explicit scopes. Scopes must be a subset of the subuser role's allowed permissions. The key cannot escalate its own permissions beyond the role.

Available scopes:

ScopeDescriptionViewerEditorOperatorOwner
messages:sendSend email messages-+++
messages:readRead message status and history++++
templates:writeCreate and update templates-+++
templates:readRead template definitions++++
campaigns:writeCreate, pause, cancel campaigns-+++
campaigns:readRead campaign list and analytics++++
suppressions:writeAdd or remove suppression entries-+++
suppressions:readList and search suppressions-+++
webhooks:writeCreate and manage webhooks--++
ip-pools:writeManage IP pools and warmup--++
users:writeManage subusers and roles---+
credits:writeAllocate and reclaim credits---+
audit:readRead audit log entries--++