The Admin API supports two authentication methods: secret API keys for server-to-server integrations, and JWT bearer tokens for admin SPA / interactive sessions. Every request must include credentials — there is no public surface.Documentation Index
Fetch the complete documentation index at: https://spreecommerce.org/docs/llms.txt
Use this file to discover all available pages before exploring further.
Secret API key
Pass the key via theX-Spree-Api-Key header:
sk_. Create them in the Spree admin under Settings → API Keys or via the Spree CLI:
JWT bearer token (admin user)
For interactive admin sessions (the Spree admin SPA, custom dashboards, etc.) authenticate as an admin user and use the returned JWT token for subsequent requests.Login
Token refresh
JWT tokens expire after 1 hour by default. Refresh them with the current token:Permissions
Authorization works differently depending on which credentials you use.Secret API keys: scopes
Each secret API key carries a list of scopes that grant access to specific resources. Scopes follow aread_<resource> / write_<resource> convention; write_<resource> implies read_<resource>.
| Scope | Endpoints |
|---|---|
read_orders / write_orders | /orders/*, /orders/:id/items |
read_products / write_products | /products/*, /variants/*, /option_types/*, /media/* |
read_customers / write_customers | /customers/*, /customers/:id/addresses, /customers/:id/credit_cards |
read_payments / write_payments | /orders/:id/payments |
read_fulfillments / write_fulfillments | /orders/:id/fulfillments |
read_refunds / write_refunds | /orders/:id/refunds |
read_gift_cards / write_gift_cards | /orders/:id/gift_cards |
read_store_credits / write_store_credits | /customers/:id/store_credits, /orders/:id/store_credits |
read_categories / write_categories | /categories/* |
read_settings / write_settings | /payment_methods, /markets, /countries, /tax_categories, /store |
read_dashboard | /dashboard/* (analytics) |
read_all— everyread_*scopewrite_all— everyread_*andwrite_*scope (full admin)
403 Forbidden:
details.required_scope field tells you exactly which scope to add.
Pick scopes when creating the key in Settings → API Keys. Choose the narrowest set that covers your integration’s needs.
JWT bearer tokens: CanCanCan abilities
JWT-authenticated admin users are authorized via CanCanCan abilities derived from theirSpree::Roles. The SPA uses this fine-grained model to render UI conditionally; partial-permission staff users see only the resources their role grants.
If the caller lacks permission for a specific action, the API returns 403 Forbidden:
Authentication summary
| Method | Header | Use case | Authorization |
|---|---|---|---|
| Secret API key | X-Spree-Api-Key: sk_xxx | Server-to-server integrations | Scopes |
| JWT token | Authorization: Bearer <token> | Interactive admin sessions; SPA | CanCanCan abilities |
If both headers are present, the JWT token wins: CanCanCan applies and scopes are ignored. This lets you use
sk_xxx to bootstrap a session and then issue per-user JWTs for individual admin actions.
