Team
Invite people and control what each of them can do
Access in MPH WMS is a list of 53 permissions across 17 domains. A role is a preset that fills that list in; you can adjust any member's permissions individually afterwards.
Requires team:read to view, team:invite, team:remove and team:change_role to manage.
Inviting
Settings → Team → Invite, enter the email address and pick a role. The invitation appears under pending invitations until it is accepted, and can be resent or cancelled.
Tell the person to use the invitation link rather than signing up separately - signing up cold creates a second, empty organization.
Roles
| Role | What it is |
|---|---|
| Owner | Full access. Bypasses the permission list entirely |
| Admin | Everything operational, plus settings, integrations, carriers and the team. Excludes all returns permissions, user groups, and managing billing |
| Member | Read and operate: pick, pack, receive, adjust and count stock, book shipments, create and edit orders. No deleting, no cancelling, no settings |
The gaps in admin are deliberate. Returns and billing changes are owner decisions in most operations, so they are not handed out with an admin role by default. Grant them individually to the people who should have them.
Member notably includes stock:adjust and stock:count but not stock:count:approve, and includes shipments:book but not shipments:cancel. Counting is a floor task; approving the resulting adjustments is a supervisory one.
Per-member overrides
A role is a starting point. Open a member and add or remove individual permissions - a picker who should also approve stock counts, or an admin who should not touch integrations.
The permission list
| Domain | Permissions |
|---|---|
| Products | items:read, items:create, items:update, items:delete |
| Orders | orders:read, orders:create, orders:update, orders:cancel, orders:ship |
| Returns / RMA | returns:read, returns:create, returns:receive |
| Freight claims | claims:read, claims:create, claims:manage |
| Picking & packing | fulfillment:pick, fulfillment:pack |
| Receiving | receiving:read, receiving:receive |
| Stock | stock:read, stock:adjust, stock:count, stock:count:approve |
| Warehouses | warehouse:manage |
| Shipments | shipments:read, shipments:book, shipments:cancel |
| Carriers | carriers:read, carriers:manage |
| Integrations | integrations:read, integrations:manage |
| Reports | reports:read |
| Team | team:read, team:invite, team:remove, team:change_role, team:groups |
| Settings | settings:tenant, settings:printers |
| Billing | billing:read, billing:manage |
| Wallet | wallet:read, wallet:topup |
| Accounting | accounting:read, accounting:manage |
returns:create covers approving and declining returns. stock:count:approve is what closes a count and writes the adjustments.
What permissions actually do
Sections you have no permission for are hidden, not greyed out. Two people can see very different sidebars and settings menus. Enforcement is on the server as well as the UI, so hiding a page is not the only thing stopping access to it.
Requiring 2FA
An owner or admin can require two-factor authentication for the whole organization. Anyone without it is redirected to set it up before they can use the app. Worth turning on once everyone has a login they use regularly.
Suggested setup
| Person | Start from | Then |
|---|---|---|
| Warehouse operator | Member | Remove orders:create and orders:update if they should not edit orders |
| Shift supervisor | Member | Add stock:count:approve, shipments:cancel, returns:receive |
| Customer service | Member | Add returns:read, returns:create. Remove fulfillment:* |
| Operations manager | Admin | Add returns:* |
| Owner or finance | Owner | - |
Removing someone
Remove them from the team as soon as they leave. Also revoke any API keys they created - those are separate credentials and are not removed with the user.