Cancel store subscriptions

Cancel the subscription for the specified stores. For each matched store it stamps every non-cancelled store_plans row with cancel_subscription_at + the cancelling reason (closing any non-closed plan and setting plan_end to now), then fires a storePlanCancelled billing webhook. No refund is issued — The endpoint bills the store to the cancellation date.

Auth

  • Bearer partner (bundle_id = 1, who_will_pay = partner) or account (bundle_id = 3, who_will_pay = brand) token; any other caller gets 403. Stores are further constrained to the caller's own partner/account sub-tree AND to store_ids in the caller's hierarchy (an ownership check).

Rate limit

  • No rate limit.

Body

FieldTypeRequiredNotes
store_idsinteger[]RequiredNon-empty array.
store_ids.*integerRequiredMust be an existing location and in caller's hierarchy (an ownership check).
cancelling_reasonstringRequiredOne of: Price too high, Response quality not good enough, Another solution in place, Prefer to respond myself, Do not get enough reviews to justify it, Responses are not important to our business, Other.
cancelling_reason_otherstringOptionalmax:255. Free-text detail (typically used with Other).

Behaviour

  • 200{ data: { status: 'success', response: 'Subscription has been cancelled successfully' } }.
  • 403 — caller is not a paying partner/account ('Permission denied').
  • 422 — validation failure (missing store_ids, bad reason, out-of-scope store).
  • 500 — no matching active/pending store found for the given ids in the caller's scope.
Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Body Params
store_ids
array of strings
store_ids
string
string | null
Responses

Language
Credentials
Bearer
JWT
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json