Sent when one of your stores changes, including changes nobody asked
for. The headline case is card readiness flipping once the hosted
onboarding is reviewed. A change to a live store’s Plan Listo sends one
too, carrying the plan: a plan that starts, renews, fails or clears a
charge, is canceled or has that undone, ends, restarts, changes price,
or passes to you from a restaurant that connected. One act sends one
event, carrying the state the plan ended in, and changes that land
close together can arrive as one event carrying the latest state. An
event whose store object would be exactly the one you were last sent
for that store is not sent.
data is the store object, which carries NO readiness field: this event
is the signal, and GET /v1/stores/{id}/stripe_status is the answer.
Proves the event came from us. The value is t=<unix seconds>,v1=<hex>,
where the hex is an HMAC-SHA256, keyed on your signing secret, over the
string "<t>.<raw request body>".
To verify: split the header on the comma, rebuild "<t>.<body>" from
the RAW bytes you received (never a parsed and re-serialized object, or
whitespace and escape sequences will change the digest), compute the
HMAC, and compare it to v1 in constant time. Reject anything that does
not match.
Then check the clock. Reject an event whose t is more than 5 minutes
away from now in EITHER direction: a t far in the past is the replay
this scheme exists to stop, and one far in the future is the same attack
with a clock nobody checked.
Two secrets can be active at once so you can rotate without downtime:
add the new one, accept either, promote it, then drop the old one. We
always sign with the primary.
The fields every event shares. Delivery is at-least-once and unordered
by design: dedupe on id, and order by created_at or by the object's
own timestamps rather than by arrival. type and data are added by
each event, because their values depend on which event it is.
Present, and true, only on a test event you asked for with
POST /v1/test_webhooks. A real event does not carry the field at
all. A test event's data is a sample whose ids resolve to nothing.
Example:
true
Response
200
Return any 2xx to acknowledge the event.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Listo Partner API","description":"Quote, create and track deliveries, and manage your balance, through the Listo Partner Delivery API.","colors":{"primary":"#15171C","light":"#F4F4F5","dark":"#15171C"},"logo":{"light":"https://mintcdn.com/listo-c5a11a00/mreCwXzcEA2bSZog/logo/light.svg?fit=max\u0026auto=format\u0026n=mreCwXzcEA2bSZog\u0026q=85\u0026s=da2b28d464dc6987329dfd5971085dd7","dark":"https://mintcdn.com/listo-c5a11a00/mreCwXzcEA2bSZog/logo/dark.svg?fit=max\u0026auto=format\u0026n=mreCwXzcEA2bSZog\u0026q=85\u0026s=ad013a6a0d979eb46c1cea550ec6a460","href":"/"},"favicon":"https://mintcdn.com/listo-c5a11a00/mreCwXzcEA2bSZog/favicon.svg?fit=max\u0026auto=format\u0026n=mreCwXzcEA2bSZog\u0026q=85\u0026s=f790496dfe0c2ad9971d8de95e45be8d","api":{"playground":{"display":"interactive"}},"thumbnails":{"preset":"minimal","appearance":"dark","background":"https://mintcdn.com/listo-c5a11a00/lF-Gm03tnDMquh_z/images/og-background.jpg?fit=max\u0026auto=format\u0026n=lF-Gm03tnDMquh_z\u0026q=85\u0026s=d73469201c8ffe28afc598d23fde5d84","fonts":{"family":"Archivo ExtraBold","source":"fonts/archivo-800.ttf","format":"ttf"},"eyebrow":{"source":"none"}},"markdown":{"instructions":["Notes on the Listo Partner Delivery API:","- Every endpoint is under `https://api.listo.delivery/v1/` and authenticates with a bearer API key.","- This documentation site is at https://docs.listo.delivery. The full machine-readable reference is the OpenAPI document at https://api.listo.delivery/docs/openapi.yaml (served by the API host, not by this site).","- Any page of this site is also available as raw markdown by appending `.md` to its URL, for example https://docs.listo.delivery/en/guides/webhooks.md. The index of every page is https://docs.listo.delivery/llms.txt and all of them in one file is https://docs.listo.delivery/llms-full.txt.","- Every page is published in English under https://docs.listo.delivery/en/ and in Spanish under https://docs.listo.delivery/es/, with the same path after the language. The API reference is under https://docs.listo.delivery/api-reference/ in English and https://docs.listo.delivery/es/api-reference/ in Spanish.","- To debug an integration yourself: `GET /v1/request_logs` lists the calls your keys made with what you sent and what was answered, `GET /v1/events` lists the events Listo emitted, `GET /v1/webhook_deliveries` lists every attempt to deliver them, `POST /v1/events/{id}/resend` sends one event again and `POST /v1/test_webhooks` sends a sample event (`\"test\": true`). The page https://docs.listo.delivery/en/guides/debugging describes them. A resent event is a snapshot from when it happened; `GET /v1/deliveries` is still how you recover current state.","- Every error response has `error.doc_url`, a page that explains that error code and what to do, and `error.request_id`, the same value as the `X-Request-Id` response header. All the pages are listed at https://docs.listo.delivery/en/errors. Filter `GET /v1/request_logs` with `request_id` to read the logged call.","- A `409 account_exists` from `POST /v1/stores` means the restaurant already has its own Listo account: connect it instead of creating it, as the page https://docs.listo.delivery/en/guides/connect-existing-account describes.","- Every live store carries one Plan Listo, charged to the partner. The exception is a connected restaurant that had already paid its current month: it keeps paying its own plan until its next renewal, shown as `paid_by: \"store\"` with the handover date in `pending_paid_by_on`. A `402 plan_required` from a quote, a delivery create or a retry means the store's plan is not paid or has ended; the page https://docs.listo.delivery/en/guides/plan-and-billing describes the plan, the `plan` block on a store and how to end or restart it.","- An AI assistant (Claude Code, Cursor, Codex) can act through the same API key at `https://api.listo.delivery/mcp`, an MCP server over Streamable HTTP authenticated with `Authorization: Bearer \u003cAPI key>`. Every tool runs the matching `/v1/` endpoint, and each one that moves money first previews and then needs a confirmation token; the page https://docs.listo.delivery/en/guides/connect-ai-client lists the tools and describes the two steps."]},"styling":{"latex":true},"navigation":{"languages":[{"language":"en","default":true,"navbar":{"links":[{"href":"https://status.listo.delivery","label":"Status"}]},"href":"en/quickstart"},{"language":"es","navbar":{"links":[{"href":"https://status.listo.delivery","label":"Estado del servicio"}]},"href":"es/quickstart"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"listo-c5a11a00","hasAudioNarration":false,"actualSubdomain":"listo-c5a11a00","customDomains":["docs.listo.delivery"],"gitSource":{"type":"github","owner":"davidalejandroaguilar","repo":"listo","deployBranch":"main","contentDirectory":"docs-site","isPrivate":true,"mountPath":"","label":"","_id":"6aed6954347cccfbc77ed1c5"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aeeb167ae7fce64eae954de","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"en","tag":"Errors","count":43},{"language":"en","tag":"Reference","count":43},{"language":"es","tag":"Errores","count":43},{"language":"es","tag":"Referencia","count":43},{"language":"en","tag":"Guides","count":9},{"language":"es","tag":"Guías","count":9},{"language":"en","tag":"Stores","count":8},{"language":"es","tag":"Tiendas","count":8},{"language":"en","tag":"Deliveries","count":7},{"language":"es","tag":"Envíos","count":7},{"language":"en","tag":"Webhooks","count":6},{"language":"es","tag":"Webhooks","count":6},{"language":"en","tag":"Concepts","count":5},{"language":"es","tag":"Conceptos","count":5},{"language":"en","tag":"Card onboarding","count":4},{"language":"en","tag":"Events","count":4},{"language":"es","tag":"Alta de cobros con tarjeta","count":4},{"language":"es","tag":"Eventos","count":4},{"language":"en","tag":"Withdrawals","count":3},{"language":"es","tag":"Retiros","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":":is(#sidebar-content,#mobile-nav) li[data-active=\"true\"]>a{background-color:#ffc400;color:#15171c}"}],"page":{"pagePath":"api-reference/webhooks/a-store-changed","slug":"/api-reference/webhooks/a-store-changed","pageMetadata":{"title":"A store changed","description":"Sent when one of your stores changes, including changes nobody asked\nfor. The headline case is card readiness flipping once the hosted\nonboarding is reviewed. A change to a live store's Plan Listo sends one\ntoo, carrying the `plan`: a plan that starts, renews, fails or clears a\ncharge, is canceled or has that undone, ends, restarts, changes price,\nor passes to you from a restaurant that connected. One act sends one\nevent, carrying the state the plan ended in, and changes that land\nclose together can arrive as one event carrying the latest state. An\nevent whose store object would be exactly the one you were last sent\nfor that store is not sent.\n\n`data` is the store object, which carries NO readiness field: this event\nis the signal, and `GET /v1/stores/{id}/stripe_status` is the answer.\n","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook store.updated","href":"/api-reference/webhooks/a-store-changed","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Sent when one of your stores changes, including changes nobody asked\\nfor. The headline case is card readiness flipping once the hosted\\nonboarding is reviewed. A change to a live store’s Plan Listo sends one\\ntoo, carrying the \", _jsx(_components.code, {\n children: \"plan\"\n }), \": a plan that starts, renews, fails or clears a\\ncharge, is canceled or has that undone, ends, restarts, changes price,\\nor passes to you from a restaurant that connected. One act sends one\\nevent, carrying the state the plan ended in, and changes that land\\nclose together can arrive as one event carrying the latest state. An\\nevent whose store object would be exactly the one you were last sent\\nfor that store is not sent.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"data\"\n }), \" is the store object, which carries NO readiness field: this event\\nis the signal, and \", _jsx(_components.code, {\n children: \"GET /v1/stores/{id}/stripe_status\"\n }), \" is the answer.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"A store changed","description":"Sent when one of your stores changes, including changes nobody asked\nfor. The headline case is card readiness flipping once the hosted\nonboarding is reviewed. A change to a live store's Plan Listo sends one\ntoo, carrying the `plan`: a plan that starts, renews, fails or clears a\ncharge, is canceled or has that undone, ends, restarts, changes price,\nor passes to you from a restaurant that connected. One act sends one\nevent, carrying the state the plan ended in, and changes that land\nclose together can arrive as one event carrying the latest state. An\nevent whose store object would be exactly the one you were last sent\nfor that store is not sent.\n\n`data` is the store object, which carries NO readiness field: this event\nis the signal, and `GET /v1/stores/{id}/stripe_status` is the answer.\n","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook store.updated","href":"/api-reference/webhooks/a-store-changed","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"A store changed","operationId":"storeUpdated","description":"Sent when one of your stores changes, including changes nobody asked\nfor. The headline case is card readiness flipping once the hosted\nonboarding is reviewed. A change to a live store's Plan Listo sends one\ntoo, carrying the `plan`: a plan that starts, renews, fails or clears a\ncharge, is canceled or has that undone, ends, restarts, changes price,\nor passes to you from a restaurant that connected. One act sends one\nevent, carrying the state the plan ended in, and changes that land\nclose together can arrive as one event carrying the latest state. An\nevent whose store object would be exactly the one you were last sent\nfor that store is not sent.\n\n`data` is the store object, which carries NO readiness field: this event\nis the signal, and `GET /v1/stores/{id}/stripe_status` is the answer.\n","tags":["Webhooks"],"security":[],"parameters":["6c2dccfa-8385-4000-8818-65b632557039"],"requestBody":"14066a1d-659e-4f23-873e-44b796c2d54c","responses":{"200":"a5840d59-1906-40fa-b4dd-464a1f986cc6"},"method":"post","type":"webhook","servers":["a658606d-cd78-44bb-b1d3-622847e198a1"],"path":"store.updated","baseUrlOptions":["https://api.listo.delivery"],"title":"A store changed","codeSamples":[],"requiredOnlyExamples":false,"requestExamples":[{"language":"json","filename":"Example","code":"{\n \"id\": \"evt_9pQ2vX7mKdR4tYb1nZ3sLwCe\",\n \"created_at\": \"2026-07-28T18:41:03Z\",\n \"type\": \"store.updated\",\n \"data\": {\n \"id\": \"st_4bR8kM2wQ7xT1nV5cZ9pLdYe\",\n \"external_id\": \"pos-store-41\",\n \"name\": \"\u003cstring>\",\n \"phone\": \"\u003cstring>\",\n \"street\": \"\u003cstring>\",\n \"apt_unit\": \"\u003cstring>\",\n \"lat\": 123,\n \"lng\": 123,\n \"pickup_notes\": \"\u003cstring>\",\n \"timezone\": \"America/Mexico_City\",\n \"default_business_fee_share\": 50,\n \"default_fee_split_amount_cents\": 1,\n \"markup_cents\": 1,\n \"test\": true,\n \"created_at\": \"2023-11-07T05:31:56Z\",\n \"plan\": {\n \"price_cents\": 199000,\n \"currency\": \"MXN\",\n \"interval\": \"month\",\n \"current_period_ends_on\": \"2023-12-25\",\n \"next_charge_on\": \"2023-12-25\",\n \"canceled_at\": \"2023-11-07T05:31:56Z\",\n \"ends_on\": \"2023-12-25\",\n \"pending_paid_by\": \"\u003cstring>\",\n \"pending_paid_by_on\": \"2023-12-25\",\n \"courtesy\": true\n }\n },\n \"test\": true\n}"}],"requestExampleType":"webhook","responseExampleType":"generated"},"dependencies":{"parameters":{"6c2dccfa-8385-4000-8818-65b632557039":{"name":"X-Listo-Signature","in":"header","required":true,"description":"Proves the event came from us. The value is `t=\u003cunix seconds>,v1=\u003chex>`,\nwhere the hex is an HMAC-SHA256, keyed on your signing secret, over the\nstring `\"\u003ct>.\u003craw request body>\"`.\n\nTo verify: split the header on the comma, rebuild `\"\u003ct>.\u003cbody>\"` from\nthe RAW bytes you received (never a parsed and re-serialized object, or\nwhitespace and escape sequences will change the digest), compute the\nHMAC, and compare it to `v1` in constant time. Reject anything that does\nnot match.\n\nThen check the clock. Reject an event whose `t` is more than 5 minutes\naway from now in EITHER direction: a `t` far in the past is the replay\nthis scheme exists to stop, and one far in the future is the same attack\nwith a clock nobody checked.\n\nTwo secrets can be active at once so you can rotate without downtime:\nadd the new one, accept either, promote it, then drop the old one. We\nalways sign with the primary.\n","schema":{"type":"string","example":"t=1753728063,v1=8d2f4a1b6c7e9f0a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f607182","isRequired":true,"description":"Proves the event came from us. The value is `t=\u003cunix seconds>,v1=\u003chex>`,\nwhere the hex is an HMAC-SHA256, keyed on your signing secret, over the\nstring `\"\u003ct>.\u003craw request body>\"`.\n\nTo verify: split the header on the comma, rebuild `\"\u003ct>.\u003cbody>\"` from\nthe RAW bytes you received (never a parsed and re-serialized object, or\nwhitespace and escape sequences will change the digest), compute the\nHMAC, and compare it to `v1` in constant time. Reject anything that does\nnot match.\n\nThen check the clock. Reject an event whose `t` is more than 5 minutes\naway from now in EITHER direction: a `t` far in the past is the replay\nthis scheme exists to stop, and one far in the future is the same attack\nwith a clock nobody checked.\n\nTwo secrets can be active at once so you can rotate without downtime:\nadd the new one, accept either, promote it, then drop the old one. We\nalways sign with the primary.\n","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"The fields every event shares. Delivery is at-least-once and unordered\nby design: dedupe on `id`, and order by `created_at` or by the object's\nown timestamps rather than by arrival. `type` and `data` are added by\neach event, because their values depend on which event it is.\n","required":["type","data","id","created_at"],"properties":{"id":{"type":"string","description":"The event id, `evt_` prefixed. Dedupe on this.","example":"evt_9pQ2vX7mKdR4tYb1nZ3sLwCe","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"created_at":{"type":"string","format":"date-time","description":"When the event was recorded, ISO-8601 in UTC.","example":"2026-07-28T18:41:03Z","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"type":{"type":"string","description":"Which event this is.","enum":["store.updated"],"isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"A pickup location. Card readiness is deliberately NOT a field here: it\nis its own endpoint, with its own outstanding-requirements detail.\n","properties":{"id":{"type":"string","description":"The store id, `st_` prefixed.","example":"st_4bR8kM2wQ7xT1nV5cZ9pLdYe","isRequired":true,"uniqueKey":"data.id","typeLabel":"string"},"external_id":{"oneOf":[{"type":"string","description":"Your own reference for this location, if you sent one. Unique per\nkey world, and filterable on the list, so you can reconcile against\nyour own store book without storing our ids.\n","example":"pos-store-41","isRequired":true,"uniqueKey":"data.external_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Your own reference for this location, if you sent one. Unique per\nkey world, and filterable on the list, so you can reconcile against\nyour own store book without storing our ids.\n","example":"pos-store-41","isRequired":true,"uniqueKey":"data.external_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.external_id","typeLabel":"string | null"},"name":{"type":"string","description":"The name you gave the store; for a restaurant that connected an\naccount with several branches, the business and the branch, the way\nits own customers read it (`Tortería La Mera Mera, Zapopan`). A\nbranch whose own name already begins with the business's name, such\nas `Tortería La Mera Mera Centro`, is published as it is. When\nyou send a name, a value that begins with the store's business name\nand a comma is read as that business plus the branch, so sending back\nthe name you read changes nothing.\n","isRequired":true,"uniqueKey":"data.name","typeLabel":"string"},"phone":{"type":"string","description":"E.164, normalized on the way in.","isRequired":true,"uniqueKey":"data.phone","typeLabel":"string"},"street":{"type":"string","isRequired":true,"uniqueKey":"data.street","typeLabel":"string"},"apt_unit":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"data.apt_unit.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"data.apt_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.apt_unit","typeLabel":"string | null"},"lat":{"oneOf":[{"type":"number","format":"double","isRequired":true,"uniqueKey":"data.lat.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","isRequired":true,"uniqueKey":"data.lat.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.lat","typeLabel":"number\u003cdouble> | null"},"lng":{"oneOf":[{"type":"number","format":"double","isRequired":true,"uniqueKey":"data.lng.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","isRequired":true,"uniqueKey":"data.lng.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.lng","typeLabel":"number\u003cdouble> | null"},"pickup_notes":{"oneOf":[{"type":"string","description":"Standing instructions for the courier collecting here.","isRequired":true,"uniqueKey":"data.pickup_notes.oneOf.0","typeLabel":"string"},{"type":"null","description":"Standing instructions for the courier collecting here.","isRequired":true,"uniqueKey":"data.pickup_notes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.pickup_notes","typeLabel":"string | null"},"timezone":{"type":"string","description":"The IANA zone the store keeps its hours in, normalized to one\nspelling per zone. Derived from the store's coordinates, and\nre-derived whenever the store's position moves. A zone you send\nyourself is used only when the position cannot answer (a store with\nno coordinates, or a position no zone claims), and one that\ndisagrees with the position is neither stored nor treated as an\nerror.\n","example":"America/Mexico_City","isRequired":true,"uniqueKey":"data.timezone","typeLabel":"string"},"default_business_fee_share":{"type":"integer","minimum":0,"maximum":100,"description":"The share of the delivery fee this store covers by default, as a\npercentage. The rest is charged to the customer. In force only when\n`default_fee_split_mode` is `percent`; in either amount mode this is\nthe percentage the store keeps for when it goes back to one.\n","isRequired":true,"uniqueKey":"data.default_business_fee_share","typeLabel":"integer"},"default_fee_split_mode":{"type":"string","enum":["percent","business_amount","customer_amount"],"description":"Which shape this store's default split has, and therefore which of\nthe two fields above and below is in force. `percent` splits the fee\nby `default_business_fee_share`; `business_amount` means the store\ncovers up to `default_fee_split_amount_cents` of it and the customer\npays the rest; `customer_amount` is the mirror, the customer paying\nup to that amount and the store covering the rest.\n\nRead-only. It is set by the restaurant in its own Listo console, and\nsending `default_business_fee_share` on a create or an update moves\nthe store back to `percent`.\n","isRequired":true,"uniqueKey":"data.default_fee_split_mode","typeLabel":"enum\u003cstring>"},"default_fee_split_amount_cents":{"oneOf":[{"type":"integer","minimum":0,"description":"The amount the two amount modes divide the fee by, in cents. Null in\n`percent` mode, and never null in either amount mode. Read-only.\n","isRequired":true,"uniqueKey":"data.default_fee_split_amount_cents.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"description":"The amount the two amount modes divide the fee by, in cents. Null in\n`percent` mode, and never null in either amount mode. Read-only.\n","isRequired":true,"uniqueKey":"data.default_fee_split_amount_cents.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.default_fee_split_amount_cents","typeLabel":"integer | null"},"access_tier":{"type":"string","enum":["api_only","wallet","full"],"description":"How much of Listo the store itself uses. An `api_only` store's\ndeliveries spend your balance, and a `wallet` or `full` store's\nspend its own; `billing` says which. Writable on create and update,\nand always `api_only` on a test store. A live store of an account\nwhose restaurants pay their own Plan Listo cannot be `api_only`: it\nhas no console to buy a plan from, so a create or an update that\nasks for it is refused with `422 validation_failed` and\n`param: \"access_tier\"`.\n","isRequired":true,"uniqueKey":"data.access_tier","typeLabel":"enum\u003cstring>"},"markup_cents":{"type":"integer","minimum":0,"description":"Your own markup on every delivery of this store, in cents. It is\nadded to the delivery fee, split with the customer like the rest of\nthe fee, and credited to your balance when the delivery is\ndelivered. Writable on create and update.\n","isRequired":true,"uniqueKey":"data.markup_cents","typeLabel":"integer"},"billing":{"type":"string","enum":["partner","store"],"description":"Whose balance pays this store's deliveries, read off `access_tier`\nso you never have to derive it: `partner` is yours, `store` is the\nstore's own. Read-only. It is not who pays the store's plan, which\nis `plan.paid_by`.\n","isRequired":true,"uniqueKey":"data.billing","typeLabel":"enum\u003cstring>"},"test":{"type":"boolean","isRequired":true,"uniqueKey":"data.test","typeLabel":"boolean"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.created_at","typeLabel":"string\u003cdate-time>"},"plan":{"oneOf":[{"description":"The store's Plan Listo, or `null` when the store needs no plan: a\ntest store, or a live store created before Plan Listo existed, which\nkeeps requesting couriers without one. It is also `null` when the\nstore pays its own plan (every store of an account whose stores pay\ntheir own Plan Listo) and the restaurant has not bought one yet: the\nrestaurant buys it in its own console, and there is nothing for you\nto pay or to reactivate. It is also `null` for a store of a partner\non pricing with no Plan Listo, which needs no plan. When it is an\nobject every\nkey is present, and the ones that do not apply are `null`. See\n[Plan and billing](https://docs.listo.delivery/en/guides/plan-and-billing).\n","type":"object","properties":{"status":{"type":"string","enum":["active","past_due","canceling","canceled","awaiting_payment"],"description":"`active` is paid up and renews on `next_charge_on` (null on a\nplan that is passing to the restaurant, see `pending_paid_by`). `past_due`\nhas an unpaid month, and its deliveries are refused with `402\nplan_required` until the charge goes through. `awaiting_payment`\nis a store whose first month your balance and card could not\ncover: it holds no plan yet, `price_cents` is the price it\nwill be charged before IVA (the amount needed to pay is that\nplus IVA), every date is null, its deliveries are refused with\n`402 plan_required`, and Listo charges it by itself as soon as\nyour balance or card covers it. `canceling` was\ncanceled and is served up to the day before `ends_on`.\n`canceled` has ended, and can be restarted.\n","isRequired":true,"uniqueKey":"data.plan.oneOf.0.status","typeLabel":"enum\u003cstring>"},"price_cents":{"type":"integer","description":"What one month of this store's plan costs you, before IVA: your\nprice, even while a restaurant that connected to you is still\npaying its own plan. When `paid_by` is `store` because the\nstore pays its own plan, it is the price of one `interval` of\nthe restaurant's own plan, which is not yours to pay.\n","example":199000,"isRequired":true,"uniqueKey":"data.plan.oneOf.0.price_cents","typeLabel":"integer"},"currency":{"type":"string","example":"MXN","isRequired":true,"uniqueKey":"data.plan.oneOf.0.currency","typeLabel":"string"},"interval":{"type":"string","description":"How long one period of this plan is, and the cycle `price_cents`\nis the price of. `month` for every plan you pay. A store that\npays its own plan reports the interval its restaurant bought,\nso `year` is a restaurant that paid twelve months at once.\n","example":"month","isRequired":true,"uniqueKey":"data.plan.oneOf.0.interval","typeLabel":"string"},"current_period_ends_on":{"oneOf":[{"type":"string","format":"date","description":"The last day of the current period, already paid unless\n`status` is `past_due`.\n","isRequired":true,"uniqueKey":"data.plan.oneOf.0.current_period_ends_on.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","format":"date","description":"The last day of the current period, already paid unless\n`status` is `past_due`.\n","isRequired":true,"uniqueKey":"data.plan.oneOf.0.current_period_ends_on.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.plan.oneOf.0.current_period_ends_on","typeLabel":"string\u003cdate> | null"},"next_charge_on":{"oneOf":[{"type":"string","format":"date","description":"The day you are charged next: the next renewal, or, while a\nrestaurant that connected to you still pays its own plan, your\nfirst charge. Null once the plan is ending or has ended, and\nnull while it is `past_due`: the month owed is charged the\nmoment your balance or saved card allows, and retried every\nday until it is paid. Null while `courtesy` is true, too. Null\nas well on a plan you pay that is passing to the restaurant\n(`pending_paid_by` is `store`): you pay the period you are in\nand nothing after it. When `paid_by` is `store` because the\nstore pays its own plan, it is the day the restaurant's own plan\nrenews, not a charge to you.\n","isRequired":true,"uniqueKey":"data.plan.oneOf.0.next_charge_on.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","format":"date","description":"The day you are charged next: the next renewal, or, while a\nrestaurant that connected to you still pays its own plan, your\nfirst charge. Null once the plan is ending or has ended, and\nnull while it is `past_due`: the month owed is charged the\nmoment your balance or saved card allows, and retried every\nday until it is paid. Null while `courtesy` is true, too. Null\nas well on a plan you pay that is passing to the restaurant\n(`pending_paid_by` is `store`): you pay the period you are in\nand nothing after it. When `paid_by` is `store` because the\nstore pays its own plan, it is the day the restaurant's own plan\nrenews, not a charge to you.\n","isRequired":true,"uniqueKey":"data.plan.oneOf.0.next_charge_on.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.plan.oneOf.0.next_charge_on","typeLabel":"string\u003cdate> | null"},"canceled_at":{"oneOf":[{"type":"string","format":"date-time","description":"When you canceled the plan.","isRequired":true,"uniqueKey":"data.plan.oneOf.0.canceled_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When you canceled the plan.","isRequired":true,"uniqueKey":"data.plan.oneOf.0.canceled_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.plan.oneOf.0.canceled_at","typeLabel":"string\u003cdate-time> | null"},"ends_on":{"oneOf":[{"type":"string","format":"date","description":"The day the plan stops serving the store, which is the day after\nthe last day paid, or the day a plan whose charge was pending was\ncanceled. Null unless the plan is ending or has ended.\n","isRequired":true,"uniqueKey":"data.plan.oneOf.0.ends_on.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","format":"date","description":"The day the plan stops serving the store, which is the day after\nthe last day paid, or the day a plan whose charge was pending was\ncanceled. Null unless the plan is ending or has ended.\n","isRequired":true,"uniqueKey":"data.plan.oneOf.0.ends_on.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.plan.oneOf.0.ends_on","typeLabel":"string\u003cdate> | null"},"paid_by":{"type":"string","enum":["partner","store"],"description":"Who pays this plan: `partner`, which is you, or `store`, the\nrestaurant itself. `store` is a restaurant that connected to you\nand still pays its own plan, and every store that pays its own\nPlan Listo because your account is set up that way; none of\nthose is yours to pay.\n","isRequired":true,"uniqueKey":"data.plan.oneOf.0.paid_by","typeLabel":"enum\u003cstring>"},"pending_paid_by":{"oneOf":[{"type":"string","description":"Who will pay it from `pending_paid_by_on`, when that is about to\nchange, or null. `partner` is you: a restaurant that connected to\nyou and still pays its own plan, until the renewal you pay from.\n`store` is the restaurant: a plan you pay that passes to the\nrestaurant at its next renewal because your account is set up so\nthat each restaurant pays its own plan. You pay the period you\nare in and nothing after it, so `next_charge_on` is null.\n","isRequired":true,"uniqueKey":"data.plan.oneOf.0.pending_paid_by.oneOf.0","typeLabel":"string"},{"type":"null","description":"Who will pay it from `pending_paid_by_on`, when that is about to\nchange, or null. `partner` is you: a restaurant that connected to\nyou and still pays its own plan, until the renewal you pay from.\n`store` is the restaurant: a plan you pay that passes to the\nrestaurant at its next renewal because your account is set up so\nthat each restaurant pays its own plan. You pay the period you\nare in and nothing after it, so `next_charge_on` is null.\n","isRequired":true,"uniqueKey":"data.plan.oneOf.0.pending_paid_by.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.plan.oneOf.0.pending_paid_by","typeLabel":"string | null"},"pending_paid_by_on":{"oneOf":[{"type":"string","format":"date","description":"The date that change lands (the day the new payer's first\nperiod starts), or null.\n","isRequired":true,"uniqueKey":"data.plan.oneOf.0.pending_paid_by_on.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","format":"date","description":"The date that change lands (the day the new payer's first\nperiod starts), or null.\n","isRequired":true,"uniqueKey":"data.plan.oneOf.0.pending_paid_by_on.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.plan.oneOf.0.pending_paid_by_on","typeLabel":"string\u003cdate> | null"},"courtesy":{"type":"boolean","description":"`courtesy` is true while Listo waives this store's plan: nothing\nis charged and `next_charge_on` is null.\n","isRequired":true,"uniqueKey":"data.plan.oneOf.0.courtesy","typeLabel":"boolean"}},"required":["status","price_cents","currency","interval","current_period_ends_on","next_charge_on","canceled_at","ends_on","paid_by","pending_paid_by","pending_paid_by_on","courtesy"],"isRequired":true,"uniqueKey":"data.plan.oneOf.0","typeLabel":"object"},{"description":"The store's Plan Listo, or `null` when the store needs no plan: a\ntest store, or a live store created before Plan Listo existed, which\nkeeps requesting couriers without one. It is also `null` when the\nstore pays its own plan (every store of an account whose stores pay\ntheir own Plan Listo) and the restaurant has not bought one yet: the\nrestaurant buys it in its own console, and there is nothing for you\nto pay or to reactivate. It is also `null` for a store of a partner\non pricing with no Plan Listo, which needs no plan. When it is an\nobject every\nkey is present, and the ones that do not apply are `null`. See\n[Plan and billing](https://docs.listo.delivery/en/guides/plan-and-billing).\n","type":"null","properties":{"status":{"type":"string","enum":["active","past_due","canceling","canceled","awaiting_payment"],"description":"`active` is paid up and renews on `next_charge_on` (null on a\nplan that is passing to the restaurant, see `pending_paid_by`). `past_due`\nhas an unpaid month, and its deliveries are refused with `402\nplan_required` until the charge goes through. `awaiting_payment`\nis a store whose first month your balance and card could not\ncover: it holds no plan yet, `price_cents` is the price it\nwill be charged before IVA (the amount needed to pay is that\nplus IVA), every date is null, its deliveries are refused with\n`402 plan_required`, and Listo charges it by itself as soon as\nyour balance or card covers it. `canceling` was\ncanceled and is served up to the day before `ends_on`.\n`canceled` has ended, and can be restarted.\n"},"price_cents":{"type":"integer","description":"What one month of this store's plan costs you, before IVA: your\nprice, even while a restaurant that connected to you is still\npaying its own plan. When `paid_by` is `store` because the\nstore pays its own plan, it is the price of one `interval` of\nthe restaurant's own plan, which is not yours to pay.\n","example":199000},"currency":{"type":"string","example":"MXN"},"interval":{"type":"string","description":"How long one period of this plan is, and the cycle `price_cents`\nis the price of. `month` for every plan you pay. A store that\npays its own plan reports the interval its restaurant bought,\nso `year` is a restaurant that paid twelve months at once.\n","example":"month"},"current_period_ends_on":{"oneOf":[{"type":"string","format":"date","description":"The last day of the current period, already paid unless\n`status` is `past_due`.\n"},{"type":"null","format":"date","description":"The last day of the current period, already paid unless\n`status` is `past_due`.\n"}]},"next_charge_on":{"oneOf":[{"type":"string","format":"date","description":"The day you are charged next: the next renewal, or, while a\nrestaurant that connected to you still pays its own plan, your\nfirst charge. Null once the plan is ending or has ended, and\nnull while it is `past_due`: the month owed is charged the\nmoment your balance or saved card allows, and retried every\nday until it is paid. Null while `courtesy` is true, too. Null\nas well on a plan you pay that is passing to the restaurant\n(`pending_paid_by` is `store`): you pay the period you are in\nand nothing after it. When `paid_by` is `store` because the\nstore pays its own plan, it is the day the restaurant's own plan\nrenews, not a charge to you.\n"},{"type":"null","format":"date","description":"The day you are charged next: the next renewal, or, while a\nrestaurant that connected to you still pays its own plan, your\nfirst charge. Null once the plan is ending or has ended, and\nnull while it is `past_due`: the month owed is charged the\nmoment your balance or saved card allows, and retried every\nday until it is paid. Null while `courtesy` is true, too. Null\nas well on a plan you pay that is passing to the restaurant\n(`pending_paid_by` is `store`): you pay the period you are in\nand nothing after it. When `paid_by` is `store` because the\nstore pays its own plan, it is the day the restaurant's own plan\nrenews, not a charge to you.\n"}]},"canceled_at":{"oneOf":[{"type":"string","format":"date-time","description":"When you canceled the plan."},{"type":"null","format":"date-time","description":"When you canceled the plan."}]},"ends_on":{"oneOf":[{"type":"string","format":"date","description":"The day the plan stops serving the store, which is the day after\nthe last day paid, or the day a plan whose charge was pending was\ncanceled. Null unless the plan is ending or has ended.\n"},{"type":"null","format":"date","description":"The day the plan stops serving the store, which is the day after\nthe last day paid, or the day a plan whose charge was pending was\ncanceled. Null unless the plan is ending or has ended.\n"}]},"paid_by":{"type":"string","enum":["partner","store"],"description":"Who pays this plan: `partner`, which is you, or `store`, the\nrestaurant itself. `store` is a restaurant that connected to you\nand still pays its own plan, and every store that pays its own\nPlan Listo because your account is set up that way; none of\nthose is yours to pay.\n"},"pending_paid_by":{"oneOf":[{"type":"string","description":"Who will pay it from `pending_paid_by_on`, when that is about to\nchange, or null. `partner` is you: a restaurant that connected to\nyou and still pays its own plan, until the renewal you pay from.\n`store` is the restaurant: a plan you pay that passes to the\nrestaurant at its next renewal because your account is set up so\nthat each restaurant pays its own plan. You pay the period you\nare in and nothing after it, so `next_charge_on` is null.\n"},{"type":"null","description":"Who will pay it from `pending_paid_by_on`, when that is about to\nchange, or null. `partner` is you: a restaurant that connected to\nyou and still pays its own plan, until the renewal you pay from.\n`store` is the restaurant: a plan you pay that passes to the\nrestaurant at its next renewal because your account is set up so\nthat each restaurant pays its own plan. You pay the period you\nare in and nothing after it, so `next_charge_on` is null.\n"}]},"pending_paid_by_on":{"oneOf":[{"type":"string","format":"date","description":"The date that change lands (the day the new payer's first\nperiod starts), or null.\n"},{"type":"null","format":"date","description":"The date that change lands (the day the new payer's first\nperiod starts), or null.\n"}]},"courtesy":{"type":"boolean","description":"`courtesy` is true while Listo waives this store's plan: nothing\nis charged and `next_charge_on` is null.\n"}},"required":["status","price_cents","currency","interval","current_period_ends_on","next_charge_on","canceled_at","ends_on","paid_by","pending_paid_by","pending_paid_by_on","courtesy"],"isRequired":true,"uniqueKey":"data.plan.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.plan","typeLabel":"object | null"}},"required":["id","external_id","name","phone","street","apt_unit","lat","lng","pickup_notes","timezone","default_business_fee_share","default_fee_split_mode","default_fee_split_amount_cents","access_tier","markup_cents","billing","test","created_at","plan"],"isRequired":true,"uniqueKey":"data","typeLabel":"object"},"test":{"type":"boolean","description":"Present, and true, only on a test event you asked for with\n`POST /v1/test_webhooks`. A real event does not carry the field at\nall. A test event's `data` is a sample whose ids resolve to nothing.\n","example":true,"uniqueKey":"test","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"evt_9pQ2vX7mKdR4tYb1nZ3sLwCe","created_at":"2026-07-28T18:41:03Z","type":"store.updated","data":{"id":"st_4bR8kM2wQ7xT1nV5cZ9pLdYe","external_id":"pos-store-41","name":"\u003cstring>","phone":"\u003cstring>","street":"\u003cstring>","apt_unit":"\u003cstring>","lat":123,"lng":123,"pickup_notes":"\u003cstring>","timezone":"America/Mexico_City","default_business_fee_share":50,"default_fee_split_amount_cents":1,"markup_cents":1,"test":true,"created_at":"2023-11-07T05:31:56Z","plan":{"price_cents":199000,"currency":"MXN","interval":"month","current_period_ends_on":"2023-12-25","next_charge_on":"2023-12-25","canceled_at":"2023-11-07T05:31:56Z","ends_on":"2023-12-25","pending_paid_by":"\u003cstring>","pending_paid_by_on":"2023-12-25","courtesy":true}},"test":true}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"a5840d59-1906-40fa-b4dd-464a1f986cc6":{"description":"Return any 2xx to acknowledge the event.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{},"servers":{"a658606d-cd78-44bb-b1d3-622847e198a1":{"url":"https://api.listo.delivery"}}},"originalFileLocation":"openapi/en.yaml"},"subdomain":"listo-c5a11a00","siteName":"Listo Partner API","title":"A store changed - Listo Partner API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/api-reference/webhooks/a-store-changed","matchLevel":0},"es":{"href":"/es/api-reference/webhooks/a-store-changed","matchLevel":1}}},"lastModified":"2026-11-07T01:48:55.729Z","originalFileLocation":"api-reference/webhooks/a-store-changed.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Sent when one of your stores changes, including changes nobody asked for. The headline case is card readiness flipping once the hosted onboarding is reviewed. A change to a live store\u0026#x27;s Plan Listo sends one too, carrying the plan: a plan that starts, renews, fails or clears a charge, is canceled or has that undone, ends, restarts, changes price, or passes to you from a restaurant that connected. One act sends one event, carrying the state the plan ended in, and changes that land close together can arrive as one event carrying the latest state. An event whose store object would be exactly the one you were last sent for that store is not sent. data is the store object, which carries NO readiness field: this event is the signal, and GET /v1/stores/{id}/stripe_status is the answer.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Listo Partner API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"A store changed - Listo Partner API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Sent when one of your stores changes, including changes nobody asked for. The headline case is card readiness flipping once the hosted onboarding is reviewed. A change to a live store\u0026#x27;s Plan Listo sends one too, carrying the plan: a plan that starts, renews, fails or clears a charge, is canceled or has that undone, ends, restarts, changes price, or passes to you from a restaurant that connected. One act sends one event, carrying the state the plan ended in, and changes that land close together can arrive as one event carrying the latest state. An event whose store object would be exactly the one you were last sent for that store is not sent. data is the store object, which carries NO readiness field: this event is the signal, and GET /v1/stores/{id}/stripe_status is the answer.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Listo Partner API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.listo.delivery/api-reference/webhooks/a-store-changed\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://listo-c5a11a00.mintlify.site/_mintlify/api/og/v2?title=A+store+changed\u0026amp;description=Sent+when+one+of+your+stores+changes%2C+including+changes+nobody+asked%0Afor.+The+headline+case+is+card+readiness+flipping+once+the+hosted%0Aonboarding+is+reviewed.+A\u0026amp;theme=77fcfc9066d8b9eb9850b729\u0026amp;signature=2a223d105e9549578f6ba7a777e9467867031fe282324a42d297dcffbe6d4c4e\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"A store changed - Listo Partner API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Sent when one of your stores changes, including changes nobody asked for. The headline case is card readiness flipping once the hosted onboarding is reviewed. A change to a live store\u0026#x27;s Plan Listo sends one too, carrying the plan: a plan that starts, renews, fails or clears a charge, is canceled or has that undone, ends, restarts, changes price, or passes to you from a restaurant that connected. One act sends one event, carrying the state the plan ended in, and changes that land close together can arrive as one event carrying the latest state. An event whose store object would be exactly the one you were last sent for that store is not sent. data is the store object, which carries NO readiness field: this event is the signal, and GET /v1/stores/{id}/stripe_status is the answer.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://listo-c5a11a00.mintlify.site/_mintlify/api/og/v2?title=A+store+changed\u0026amp;description=Sent+when+one+of+your+stores+changes%2C+including+changes+nobody+asked%0Afor.+The+headline+case+is+card+readiness+flipping+once+the+hosted%0Aonboarding+is+reviewed.+A\u0026amp;theme=77fcfc9066d8b9eb9850b729\u0026amp;signature=2a223d105e9549578f6ba7a777e9467867031fe282324a42d297dcffbe6d4c4e\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/listo-c5a11a00/GMBEN5uWEX-r6cRJ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Listo Partner API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#15171C\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.listo.delivery/api-reference/webhooks/a-store-changed\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/webhooks/a-store-changed.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.listo.delivery/api-reference/webhooks/a-store-changed\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.listo.delivery/es/api-reference/webhooks/a-store-changed\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.listo.delivery/api-reference/webhooks/a-store-changed\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.listo.delivery/#organization\",\"name\":\"Listo Partner API\",\"url\":\"https://docs.listo.delivery\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/listo-c5a11a00/mreCwXzcEA2bSZog/logo/light.svg?fit=max\u0026auto=format\u0026n=mreCwXzcEA2bSZog\u0026q=85\u0026s=da2b28d464dc6987329dfd5971085dd7\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.listo.delivery#website\",\"name\":\"Listo Partner API\",\"url\":\"https://docs.listo.delivery\",\"publisher\":{\"@id\":\"https://docs.listo.delivery/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.listo.delivery/api-reference/webhooks/a-store-changed#webpage\",\"url\":\"https://docs.listo.delivery/api-reference/webhooks/a-store-changed\",\"name\":\"A store changed\",\"description\":\"Sent when one of your stores changes, including changes nobody asked for. The headline case is card readiness flipping once the hosted onboarding is reviewed. A change to a live store's Plan Listo sends one too, carrying the plan: a plan that starts, renews, fails or clears a charge, is canceled or has that undone, ends, restarts, changes price, or passes to you from a restaurant that connected. One act sends one event, carrying the state the plan ended in, and changes that land close together can arrive as one event carrying the latest state. An event whose store object would be exactly the one you were last sent for that store is not sent. data is the store object, which carries NO readiness field: this event is the signal, and GET /v1/stores/{id}/stripe_status is the answer.\",\"dateModified\":\"2026-11-07T01:48:55.729Z\",\"isPartOf\":{\"@id\":\"https://docs.listo.delivery#website\"},\"breadcrumb\":{\"@id\":\"https://docs.listo.delivery/api-reference/webhooks/a-store-changed#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.listo.delivery/api-reference/webhooks/a-store-changed#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Reference\",\"item\":\"https://docs.listo.delivery/api-reference/balance/read-your-prepaid-balance\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Webhooks\",\"item\":\"https://docs.listo.delivery/api-reference/webhooks/a-delivery-reached-a-new-status\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"A store changed\",\"item\":\"https://docs.listo.delivery/api-reference/webhooks/a-store-changed\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.listo.delivery/api-reference/webhooks/a-store-changed#apireference\",\"headline\":\"A store changed\",\"name\":\"A store changed\",\"description\":\"Sent when one of your stores changes, including changes nobody asked for. The headline case is card readiness flipping once the hosted onboarding is reviewed. A change to a live store's Plan Listo sends one too, carrying the plan: a plan that starts, renews, fails or clears a charge, is canceled or has that undone, ends, restarts, changes price, or passes to you from a restaurant that connected. One act sends one event, carrying the state the plan ended in, and changes that land close together can arrive as one event carrying the latest state. An event whose store object would be exactly the one you were last sent for that store is not sent. data is the store object, which carries NO readiness field: this event is the signal, and GET /v1/stores/{id}/stripe_status is the answer.\",\"url\":\"https://docs.listo.delivery/api-reference/webhooks/a-store-changed\",\"mainEntityOfPage\":{\"@id\":\"https://docs.listo.delivery/api-reference/webhooks/a-store-changed#webpage\"},\"dateModified\":\"2026-11-07T01:48:55.729Z\",\"publisher\":{\"@id\":\"https://docs.listo.delivery/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.listo.delivery#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Listo Partner API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Listo Partner API","nav":{"global":null,"languages":[{"language":"en","default":true,"navbar":{"links":[{"href":"https://status.listo.delivery","label":"Status"}]},"groups":[{"group":"Get started","pages":[{"title":"Quickstart","href":"/en/quickstart"}]},{"group":"Guides","pages":[{"title":"Quote and create a delivery","href":"/en/guides/quote-and-create"},{"title":"Receive and verify webhooks","href":"/en/guides/webhooks"},{"title":"Debugging your integration","href":"/en/guides/debugging"},{"title":"Build with AI","href":"/en/guides/build-with-ai"},{"title":"Fund your balance and withdraw","href":"/en/guides/balance-and-withdrawals"},{"title":"Go live","href":"/en/guides/go-live"},{"title":"Connect a restaurant that already uses Listo","sidebarTitle":"Connect an existing account","href":"/en/guides/connect-existing-account"},{"title":"Plan and billing","href":"/en/guides/plan-and-billing"},{"title":"Connect Claude, Cursor or Codex","href":"/en/guides/connect-ai-client"}]},{"group":"Errors","expanded":false,"pages":[{"title":"Errors","href":"/en/errors/index"},{"title":"account_exists","href":"/en/errors/account_exists"},{"title":"address_not_found","href":"/en/errors/address_not_found"},{"title":"address_undeliverable","href":"/en/errors/address_undeliverable"},{"title":"cancel_failed","href":"/en/errors/cancel_failed"},{"title":"card_below_minimum","href":"/en/errors/card_below_minimum"},{"title":"card_not_ready","href":"/en/errors/card_not_ready"},{"title":"cash_over_cap","href":"/en/errors/cash_over_cap"},{"title":"charge_in_progress","href":"/en/errors/charge_in_progress"},{"title":"code_expired","href":"/en/errors/code_expired"},{"title":"console_access_required","href":"/en/errors/console_access_required"},{"title":"event_not_resendable","href":"/en/errors/event_not_resendable"},{"title":"idempotency_conflict","href":"/en/errors/idempotency_conflict"},{"title":"insufficient_balance","href":"/en/errors/insufficient_balance"},{"title":"internal_error","href":"/en/errors/internal_error"},{"title":"invalid_api_key","href":"/en/errors/invalid_api_key"},{"title":"no_couriers_available","href":"/en/errors/no_couriers_available"},{"title":"not_cancellable","href":"/en/errors/not_cancellable"},{"title":"not_editable","href":"/en/errors/not_editable"},{"title":"not_found","href":"/en/errors/not_found"},{"title":"not_reactivatable","href":"/en/errors/not_reactivatable"},{"title":"not_refundable","href":"/en/errors/not_refundable"},{"title":"not_reschedulable","href":"/en/errors/not_reschedulable"},{"title":"not_retriable","href":"/en/errors/not_retriable"},{"title":"order_too_large","href":"/en/errors/order_too_large"},{"title":"out_of_service_area","href":"/en/errors/out_of_service_area"},{"title":"payout_account_not_ready","href":"/en/errors/payout_account_not_ready"},{"title":"pickup_point_pending","href":"/en/errors/pickup_point_pending"},{"title":"plan_ended","href":"/en/errors/plan_ended"},{"title":"plan_required","href":"/en/errors/plan_required"},{"title":"provider_unavailable","href":"/en/errors/provider_unavailable"},{"title":"quote_consumed","href":"/en/errors/quote_consumed"},{"title":"quote_expired","href":"/en/errors/quote_expired"},{"title":"rate_limited","href":"/en/errors/rate_limited"},{"title":"read_only_key","href":"/en/errors/read_only_key"},{"title":"refund_amount_too_large","href":"/en/errors/refund_amount_too_large"},{"title":"resend_limit_reached","href":"/en/errors/resend_limit_reached"},{"title":"same_day_below_minimum","href":"/en/errors/same_day_below_minimum"},{"title":"same_day_cap_exceeded","href":"/en/errors/same_day_cap_exceeded"},{"title":"test_webhook_limit_reached","href":"/en/errors/test_webhook_limit_reached"},{"title":"unsupported_country","href":"/en/errors/unsupported_country"},{"title":"validation_failed","href":"/en/errors/validation_failed"},{"title":"webhook_endpoint_not_configured","href":"/en/errors/webhook_endpoint_not_configured"}]},{"group":"Reference","pages":[{"group":"Balance","pages":[{"title":"Read your prepaid balance","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/balance","href":"/api-reference/balance/read-your-prepaid-balance"},{"title":"Read a store's balance","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/stores/{store_id}/balance","href":"/api-reference/balance/read-a-stores-balance"}]},{"group":"Account connection","pages":[{"title":"Ask a restaurant to connect its account","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/connect_requests","href":"/api-reference/account-connection/ask-a-restaurant-to-connect-its-account"},{"title":"Exchange an approval for the store","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/connections","href":"/api-reference/account-connection/exchange-an-approval-for-the-store"}]},{"group":"Deliveries","pages":[{"title":"List deliveries","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/deliveries","href":"/api-reference/deliveries/list-deliveries"},{"title":"Create a delivery","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/deliveries","href":"/api-reference/deliveries/create-a-delivery"},{"title":"Cancel a delivery","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/deliveries/{delivery_id}/cancellations","href":"/api-reference/deliveries/cancel-a-delivery"},{"title":"Refund a delivery","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/deliveries/{delivery_id}/refunds","href":"/api-reference/deliveries/refund-a-delivery"},{"title":"Retry a failed dispatch","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/deliveries/{delivery_id}/retries","href":"/api-reference/deliveries/retry-a-failed-dispatch"},{"title":"Fetch a delivery","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/deliveries/{id}","href":"/api-reference/deliveries/fetch-a-delivery"},{"title":"Update a delivery","deprecated":null,"version":null,"openapi":"/openapi/en.yaml patch /v1/deliveries/{id}","href":"/api-reference/deliveries/update-a-delivery"}]},{"group":"Events","pages":[{"title":"List your webhook events","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/events","href":"/api-reference/events/list-your-webhook-events"},{"title":"Send a webhook event again","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/events/{event_id}/resend","href":"/api-reference/events/send-a-webhook-event-again"},{"title":"Retrieve a webhook event","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/events/{id}","href":"/api-reference/events/retrieve-a-webhook-event"},{"title":"Send a test webhook","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/test_webhooks","href":"/api-reference/events/send-a-test-webhook"}]},{"group":"Ledger","pages":[{"title":"List your ledger entries","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/ledger","href":"/api-reference/ledger/list-your-ledger-entries"},{"title":"List a store's ledger entries","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/stores/{store_id}/ledger","href":"/api-reference/ledger/list-a-stores-ledger-entries"}]},{"group":"Authentication","pages":[{"title":"Check that your API key works","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/ping","href":"/api-reference/authentication/check-that-your-api-key-works"}]},{"group":"Quotes","pages":[{"title":"Price a delivery","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/quotes","href":"/api-reference/quotes/price-a-delivery"}]},{"group":"Request logs","pages":[{"title":"List your request log","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/request_logs","href":"/api-reference/request-logs/list-your-request-log"},{"title":"Retrieve a request log entry","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/request_logs/{id}","href":"/api-reference/request-logs/retrieve-a-request-log-entry"}]},{"group":"Stores","pages":[{"title":"List your stores","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/stores","href":"/api-reference/stores/list-your-stores"},{"title":"Create a store","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/stores","href":"/api-reference/stores/create-a-store"},{"title":"Fetch a store","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/stores/{id}","href":"/api-reference/stores/fetch-a-store"},{"title":"Update a store","deprecated":null,"version":null,"openapi":"/openapi/en.yaml patch /v1/stores/{id}","href":"/api-reference/stores/update-a-store"},{"title":"Invite a store owner","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/stores/{store_id}/owner","href":"/api-reference/stores/invite-a-store-owner"},{"title":"Reactivate a store's plan","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/stores/{store_id}/plan","href":"/api-reference/stores/reactivate-a-stores-plan"},{"title":"Cancel a store's plan","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/stores/{store_id}/plan_cancellation","href":"/api-reference/stores/cancel-a-stores-plan"},{"title":"Undo a store's plan cancellation","deprecated":null,"version":null,"openapi":"/openapi/en.yaml delete /v1/stores/{store_id}/plan_cancellation","href":"/api-reference/stores/undo-a-stores-plan-cancellation"}]},{"group":"Card onboarding","pages":[{"title":"Start card onboarding for a store","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/stores/{store_id}/stripe_onboarding","href":"/api-reference/card-onboarding/start-card-onboarding-for-a-store"},{"title":"Read a store's card readiness","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/stores/{store_id}/stripe_status","href":"/api-reference/card-onboarding/read-a-stores-card-readiness"},{"title":"Start card onboarding for your company","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/stripe_onboarding","href":"/api-reference/card-onboarding/start-card-onboarding-for-your-company"},{"title":"Read your company's card readiness","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/stripe_status","href":"/api-reference/card-onboarding/read-your-companys-card-readiness"}]},{"group":"Webhook deliveries","pages":[{"title":"List webhook delivery attempts","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/webhook_deliveries","href":"/api-reference/webhook-deliveries/list-webhook-delivery-attempts"}]},{"group":"Withdrawals","pages":[{"title":"List your withdrawals","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/withdrawals","href":"/api-reference/withdrawals/list-your-withdrawals"},{"title":"Request a withdrawal","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/withdrawals","href":"/api-reference/withdrawals/request-a-withdrawal"},{"title":"Fetch a withdrawal","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/withdrawals/{id}","href":"/api-reference/withdrawals/fetch-a-withdrawal"}]},{"group":"Webhooks","pages":[{"title":"A delivery reached a new status","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook delivery.status_changed","href":"/api-reference/webhooks/a-delivery-reached-a-new-status"},{"title":"A delivery changed without changing status","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook delivery.updated","href":"/api-reference/webhooks/a-delivery-changed-without-changing-status"},{"title":"The courier moved","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook delivery.courier_location","href":"/api-reference/webhooks/the-courier-moved"},{"title":"A withdrawal was settled","description":"Sent when a withdrawal stops being a request: it was paid, or it failed.\nA withdrawal that is still `pending` announces nothing, because you\nalready hold that state as the create response.\n\nThis is the only way you learn the outcome. It is settled by a human\nhours or days later, with no request of yours in flight to answer.\n","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook withdrawal.updated","href":"/api-reference/webhooks/a-withdrawal-was-settled"},{"title":"A store changed","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook store.updated","href":"/api-reference/webhooks/a-store-changed"},{"title":"A restaurant connected its existing account to you","description":"Sent when the owner of an existing Listo account approves your connect\nrequest. `data` is the whole store object, so this is everything\n`POST /v1/connections` would have told you.\n\nIt is a distinct event from `store.updated` on purpose. That one means \"a\nstore you already hold changed\", and this store is one you have never\nseen: it may well arrive BEFORE you exchange your code, so a\n`store.updated` carrying an unfamiliar `id` would be a payload you would\nhave to drop.\n\nIt is also your recovery path. The redirect that carries the code runs\nthrough the owner's browser, and browsers get closed; this event does\nnot depend on one. Treat the store as connected when either arrives,\nwhichever comes first, and dedupe on the event `id`.\n\nIts `plan` is the store's Plan Listo as it stood when the owner\napproved, which is the restaurant's own. If your account pays for its\nstores' plans, Listo then hands the plan to\nyou, and a `store.updated` follows within moments carrying the result: a\nrestaurant that already pays its own plan reads `paid_by: \"store\"` with\n`pending_paid_by: \"partner\"` and the date its plan passes to you, and\none with no live plan starts yours, charged that day. Listo emits a\nconnected store's `store.connected` before any `store.updated` for it,\nbut webhooks are unordered in delivery, so order them by the event's\n`created_at` rather than by arrival.\n","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook store.connected","href":"/api-reference/webhooks/a-restaurant-connected-its-existing-account-to-you"}]}]},{"group":"Concepts","pages":[{"title":"The money model","href":"/en/concepts/money"},{"title":"Where a delivery came from","href":"/en/concepts/delivery-origin"},{"title":"Test mode","href":"/en/concepts/test-mode"},{"title":"Signing","href":"/en/concepts/signing"},{"title":"Cash at the door","href":"/en/concepts/cash-at-the-door"}]},{"group":"Changelog","pages":[{"title":"Changelog","href":"/en/changelog"}]},{"group":"Legal","pages":[{"title":"Terms for Partners","url":"https://listo.delivery/terminos-partners","href":"/en/terms-for-partners"}]}]},{"language":"es","navbar":{"links":[{"href":"https://status.listo.delivery","label":"Estado del servicio"}]},"pages":[{"title":"es","href":"/es/api-reference/webhooks/a-store-changed"}]}]},"basePath":"","title":"A store changed - Listo Partner API","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}