docs/developer/core-concepts/stores.mdx
The Store is the top-level tenant in Spree. Every resource — products, orders, channels, markets, taxonomies — belongs to exactly one store. A store owns its branding (logo, custom domain, mail-from address), its channels (online, POS, wholesale, …), its markets (region/currency/locale), and its catalog.
| Attribute | Description |
|---|---|
name | Store name, displayed in the browser title and throughout the site |
code | Unique identifier for the store |
url | Primary URL of the store |
meta_description | SEO description |
meta_keywords | SEO keywords |
seo_title | Custom SEO title |
customer_support_email | Email for customer support inquiries |
mail_from_address | Sender address for transactional emails |
logo_url | URL to the store's logo |
facebook, twitter, instagram | Social media links |
Store configuration is exposed through the Admin API. Use the store endpoint to read the current store's settings — name, URL, branding, and email addresses:
<CodeGroup>const store = await adminClient.store.get()
// {
// name: "My Store",
// url: "https://mystore.com",
// logo_url: "https://cdn.mystore.com/logo.png",
// mailer_logo_url: "https://cdn.mystore.com/mailer-logo.png",
// customer_support_email: "[email protected]",
// ...
// }
curl 'https://api.mystore.com/api/v3/admin/store' \
-H 'X-Spree-API-Key: sk_xxx'
This is an admin endpoint, so it requires a secret API key (sk_xxx) or a Bearer JWT — a publishable key cannot reach it.
Two different ways to split a store, often confused:
A single Online Store channel can serve multiple markets (one storefront → many regions). Conversely, POS and Online channels can share the same market (same currency/locale, different selling surfaces).
Each store owns its own resources. Products, orders, channels, markets, and taxonomies in one store are independent from another.
| Resource | Relationship |
|---|---|
| Channels | A store has many channels (Online Store, POS, Wholesale, …). One is the default. |
| Markets | A store has many markets, each defining a geographic region with its own currency and locale |
| Orders | An order belongs to one store and one channel |
| Products | A product belongs to one store. Its visibility across channels is controlled by publications. |
| Taxonomies | A taxonomy belongs to one store |
| Payment Methods | A payment method belongs to one store |
| Shipping Methods | A shipping method belongs to one store |
| Promotions | A promotion belongs to one store |
If you need one Spree backend to serve multiple distinct merchant brands — different domains, different catalogs, different admin teams — there are two patterns:
For most multi-brand operations, the channel pattern is simpler and more flexible. Reach for spree_multi_store only when stores need genuinely independent catalogs, branding, and admin teams.