Why
- Protection prices can differ from site to site, which operators with mixed markets need and can’t currently do.
- It’s a prerequisite for connecting multiple Stripe accounts to one Stora account, which we’re building now.
The two phases
Your account moves through two phases.Every account is in Preparation until we switch it over. We’ll tell you before we activate yours, and we’ll give you notice.
Preparation
We’ve replicated every global protection level to every site on your account. Each site copy is a distinct product:- its own protection level ID
- its own product and price in Stripe
- its own base price
Activation
When your account is switched over, site protection levels become authoritative everywhere — API, Back Office and Storefront.- The API returns site levels and rejects global IDs on new orders.
- Global levels can no longer be created, and their base prices can no longer be changed, in the API or the Back Office.
- The Back Office moves protection management from your account to each site.
Affected endpoints
All of this stays within API version
2025-09. You don’t need to upgrade to a later version to migrate.
Listing protection levels
By default the collection returns your global levels, unchanged:site_scoped=true. This is the parameter we recommend building against. It returns every site level across your account, with the globals excluded — which is exactly what the unfiltered collection will return once you’re activated:
Both
site_scoped and site_id return 409 Conflict until we’ve finished preparing your account. If you see Site-scoped protection levels are unavailable until insurance preparation is complete for this operator, your site copies don’t exist yet — retry once we’ve confirmed your account is prepared.site_scoped is a migration parameter. It exists for this transition, so you won’t find it in the API reference — this guide is its documentation. It works while your account is being prepared, and once you’re activated it’s no longer needed, because by then the plain call returns exactly what it returns today:
site_scoped=true now, drop it once you’re switched over.
site_id is not temporary. It’s part of the API and is the filter to keep in your integration long term.
The collection never mixes globals and site levels.
The site field
Protection levels have a site. It’s null on a global level, and on a site level it gives you the site’s ID:
site is expandable, so ask for the full site object when you need more than the ID:
stripe_product_id too — each site copy has its own, which is why the duplicates appear in your Stripe account.
Setting base prices
Base prices are still written to global levels, and we mirror each change down to every site copy:404. Site copies can’t be priced independently during preparation — that’s what keeps a customer’s price the same whichever route they come through. After activation this reverses: site levels become writable and global levels are rejected.
Creating and updating orders
Right now, orders accept either a global protection ID or a protection ID belonging to the order’s site. After activation, only the latter.- Resolve the site first. Pick the protection level from the site the order is for, not from a stored global ID.
- A protection level from the wrong site is rejected, the same as a global one, once you’re activated.
protection line item on POST /2025-09/deals or PATCH /2025-09/deals/{id} must reference either an account-level protection level or one belonging to the deal’s site.
Webhooks
Event types and API version are unchanged:
So during preparation you’ll keep receiving events for globals exactly as you do now, and replication won’t flood your endpoint. At activation the resource in the payload becomes a site level.
What doesn’t change
- Existing orders and subscriptions. They keep the protection level IDs they were created with. We don’t rewrite stored references, and historical resources keep returning the IDs you already have.
- Prices your customers pay. Site copies start identical to their globals and are kept in sync until activation.
- Tax. Not affected by this change.
- API version. Everything here is
2025-09. - The Back Office and Storefront, until activation.
Getting help
Email api_support@stora.co with your account name and what you’re building. We’re happy to review your integration changes before you ship them, and to switch your account over early if you’re ready ahead of us.Booking flow
See where protection line items sit in the end-to-end order flow.
Webhooks
Configure endpoints and check which API version your payloads use.