A scope is a segmentation layer inside a Frontic project. Every project starts with a single scope calledDocumentation Index
Fetch the complete documentation index at: https://docs.frontic.com/llms.txt
Use this file to discover all available pages before exploring further.
public; most projects never add another. Add a second scope when you need the same data to behave differently for a distinct audience — B2B alongside B2C, a wholesale storefront beside retail, a sub-brand that shares a catalog but shows different prices and copy.
Scopes are the coarsest layer of Request Context. Every request resolves to exactly one scope, and storage fields marked scoped can return a different value per scope — a product price that’s 49.99 in public and 39.99 in b2b, or a description that’s consumer-friendly in one scope and technical in another.
When to add a scope
Don’t reach for a scope the first time something varies — most variation is better served by regions (market / currency), locales (language), or a scoped field inside the default scope. A new scope is warranted when the split is about who the customer is, not where or what language they speak:B2B alongside B2C
Same products, different prices, different descriptions, possibly
different availability. A separate scope keeps the two worlds clean
without a parallel project.
Multi-brand portfolio
Sub-brands that share a product catalog but diverge on branding,
naming, and merchandising. Each brand gets its own scope inside one
project.
Wholesale vs retail
Wholesale customers see tier pricing and bulk MOQs; retail sees the
consumer price. One scope per tier, same underlying data.
Staff-only variant
An internal-only scope for testing new copy or layouts ahead of a
public rollout. Request context routing keeps it invisible to
real traffic.
How scopes relate to the rest
A scope is the top of the Request Context hierarchy:- A request arrives with a scope (resolved from a domain or a
contextKey). - Inside that scope, one of the scope’s regions is selected — the region carries a currency and a set of locales.
- Inside that region, a locale is chosen — determines which translation is returned.
public is not the same region as one in b2b, even if both are named “Germany” — they’re distinct configuration objects with their own currencies and supported locales.
Configuring scopes
Open Settings → Scopes from a project. The scopes list shows every scope with its region count. Click a scope to open its detail view, where you add or edit the regions that live inside it. Scope-level settings themselves are thin — a scope’s identity is mainly itskey (used in API responses and field mappings) and the regions attached to it.
The default scope
Exactly one scope on a project is flagged as the default — used when a request arrives without enough context to pick a scope explicitly (no domain match, nocontextKey carrying a scope). On a fresh project that’s the public scope.
Scoped fields
A field on a Data Storage or Block can be marked Scoped. A scoped field stores one value per scope rather than one shared value. When the API responds to a request in scopeb2b, the b2b value for that field is returned; when it responds to public, the public value is returned. No per-scope forking in your frontend — the API surface stays the same, only the payload changes.
Reach for a scoped field when only part of a record differs per audience — a price, a description, a hero image. If every field of a record would differ, that’s a sign the segmentation belongs elsewhere (a separate record, a separate block, or a separate scope altogether).
Related
Regions
Geographic markets that live inside a scope, each with its own
currency and locales.
Multi-channel & region
The full commerce-native picture — scopes, regions, locales, domains
working together.
Request Context
How a request resolves to one scope/region/locale combination.
Domains
Where scope/region/locale is bound to an incoming URL.