Skip to main content
The 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_hours and contact_page_url, each null when not set. email and phone fall back to the store’s own contact details when the merchant has not entered dedicated support ones. contact is null only when the store has no contact details at all.
  • addresses — business (where the store trades from) and returns (where returned items are sent), each { line1, line2, city, region, postal_code, country } or null. country is an ISO 3166-1 alpha-2 code.
  • business — the legal identity behind the store: legal_name, registration_number, tax_number, and country, the country whose law its policies are written under. null when 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 }. platform is one of instagram, tiktok, facebook, x, youtube, pinterest, linkedin, whatsapp, threads, snapchat or other, and for a named platform url is always an address on that platform’s own domain.
  • policies — the published documents without their text, in the same shape listStorePolicies returns.
  • 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, or null if they never have.
Response
A compact form of the same profile — contact, social, the published-document list and which built-in documents exist — is also available as the 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
A slug that has never been published, is switched off or has been unpublished returns 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.

Response Codes

All three methods accept a publishable or a secret key.

getStoreProfile (GET /v1/store/profile)

listStorePolicies (GET /v1/store/policies)

getStorePolicy (GET /v1/store/policies/{slug})