Overview
Admin users manage the store via the Admin Panel. They have roles that control what they can access.Roles
Admin users can have different roles that control their permissions:| Role | Description |
|---|---|
admin | Full access to all Admin Panel features |
You can create custom roles with specific permissions. See the Customize Permissions guide for details.
Creating Admin Users
Use the Spree CLI to create admin users:admin role on the default store.
Authentication & identity providers
Staff authenticate against the Admin API, which issues a short-lived JWT used for subsequent requests. How a staff member proves who they are is pluggable — Spree ships email/password out of the box, and you can plug in any external identity provider (Okta, Microsoft Entra ID, Google Workspace, a custom JWT issuer, SAML, etc.) without changing the rest of the API.How admin login works
A staff member logs in via thePOST /api/v3/admin/auth/login endpoint (see Admin API Authentication). The request’s provider field selects a registered authentication strategy. When provider is omitted it defaults to email, the built-in email/password strategy (which you can also disable and restrict the admin to your preferred SSO provider).
Whichever strategy authenticates the request, Spree issues the same credentials in return, so downstream code and the admin SPA never need to know which provider was used:
- a JWT access token (
aud: admin_api), short-lived by design; - a rotating refresh token, set as an
HttpOnlycookie scoped to/api/v3/admin/auth(the admin flow keeps it out of the response body — see Admin Auth & Cookie Refresh).
Registering a custom identity provider
Follow the Custom API Authentication how-to for details how to create a custom authentication strategy and register it with the admin API. Once registered, you can use it from the admin SPA or any API client by passing its name in theprovider field of the login request.
Inviting Admin Users
You can invite new admins through the Admin Panel or programmatically. Via Admin Panel:- Navigate to Settings → Users
- Click Invite User
- Enter the email address and select a role
- Click Send Invitation
client.invitations.create:
invitation.created, which sends the email. Either way, the invitee receives an email with an invitation link. If they already have an account, they log in to accept. Otherwise, they create an account first.
Invitation Details
| Attribute | Description |
|---|---|
email | Invitee’s email address |
token | Secure token for the invitation link |
status | pending or accepted |
expires_at | Expiration date (default: 2 weeks) |
resource | The store being granted access to |
role | The role to assign upon acceptance |
Invitation Events
The invitation system publishes events you can subscribe to:| Event | Description |
|---|---|
invitation.created | Invitation was created (triggers email) |
invitation.accepted | Invitation was accepted and role assigned |
invitation.resent | Invitation was resent to the invitee |
Permissions
Spree uses CanCanCan for authorization. Permissions apply to both customers (Store API access) and admins (Admin Panel access). See the Customize Permissions guide for details on creating custom roles and permission sets.Related Documentation
- Admin SDK — the TypeScript client for back-office automation
- Custom API Authentication — implement a custom identity-provider strategy (the full guide)
- Admin API Authentication — keys, JWTs, scopes, and the refresh-cookie flow
- Customers — Customer accounts and authentication
- Permissions — Roles and authorization
- Events — Subscribe to invitation events

