StoreService class reads a store’s public business profile and its published legal documents. A storefront uses it for the contact block, the social links and the legal notice in its footer, and to render each document at a /policies/{slug} route on its own domain.
Access this service via client.store. All three methods accept a publishable key. Nothing here is writable through the API: the merchant maintains the profile and the documents in their admin, under Settings → Store profile.
Only published material is returned. A document that exists only as a draft, has been switched off or has been unpublished does not appear in any response, and neither do custom entries the merchant has kept private.
getStoreProfile
Returns the store’s public profile in one call:
contact—email,phone,whatsapp,support_hoursandcontact_page_url, eachnullwhen not set.emailandphonefall back to the store’s own contact details when the merchant has not entered dedicated support ones.contactisnullonly when the store has no contact details at all.addresses—business(where the store trades from) andreturns(where returned items are sent), each{ line1, line2, city, region, postal_code, country }ornull.countryis an ISO 3166-1 alpha-2 code.business— the legal identity behind the store:legal_name,registration_number,tax_number, andcountry, the country whose law its policies are written under.nullwhen the merchant has entered none. This is what a legal notice, an invoice footer or a policy page names as the seller.social— the store’s social profiles, each{ platform, url, handle }.platformis one ofinstagram,tiktok,facebook,x,youtube,pinterest,linkedin,whatsapp,threads,snapchatorother, and for a named platformurlis always an address on that platform’s own domain.policies— the published documents without their text, in the same shapelistStorePoliciesreturns.custom_fields— store-level custom entries the merchant has defined and marked public, each{ name, label, type, value }. Entries with no value are omitted.updated_at— when the merchant last saved the profile, ornullif they never have.
Response
profile section of client.system.getStoreInfo, for a storefront that already loads store information at startup.
listStorePolicies
Returns the store’s published legal documents without their text. A storefront renders one footer link, and one /policies/{slug} route, per entry.
Every store has seven built-in documents. Five are core and always available to publish — privacy, terms, returns, shipping and cookies — and two are optional and off until the merchant switches them on: imprint (a legal notice, required in several European countries) and accessibility. A merchant may also add documents of their own under any other slug. Whichever of these are published appear here; the rest do not.
When external_url is set, the merchant hosts that document elsewhere, and a storefront links to that address rather than rendering the text itself.
Response
getStorePolicy
Returns one published document with its text. body is Markdown and format is always markdown; render it with any Markdown renderer. body is empty when the merchant publishes only an external_url.
Each publish creates a new version, and every published version is kept. Without version the latest is returned; with version that earlier version is returned instead, so an order confirmation or a dispute can show the terms that applied when the order was placed. latest_version always reports the current version, so a page showing an earlier one can say that it has been superseded. effective_date is the date from which that version applies, as the merchant set it, and may differ from published_at.
Response
404, as does a version number that does not exist. Earlier versions remain readable only while the document itself is published.
Caching and updates. Responses are cached for up to five minutes and carry an
ETag, so a browser or a server-side fetch can revalidate cheaply. To react to changes as they happen, subscribe to the store.profile_updated, store.policy_published and store.policy_unpublished webhook events.
