Sent when something you can see about a delivery moved but its status
did not: the courier’s identity arrived, an ETA shifted, the courier
became imminent, proof of delivery landed, or a payment was refunded.
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.
The shape of a delivery: every field the object can carry, with the
nullability each one really has. It is the response of every operation
that answers a delivery (the create, the fetch, a list row, the
reschedule, the cancel, the retry and the refund) and the data of
every full delivery event, so ONE type holds all of them.
Every operation returns the whole object. A field that a given call
cannot yet have is present and null rather than missing: a create
response has a null courier, because no courier has been assigned
yet, and a reschedule only ever answers with a still-scheduled order,
so its delivered_at is null.
Money is integer centavos, timestamps are ISO-8601 in UTC, and every
enum below is ours rather than a passthrough of anyone else's.
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-delivery-changed-without-changing-status","slug":"/api-reference/webhooks/a-delivery-changed-without-changing-status","pageMetadata":{"title":"A delivery changed without changing status","description":"Sent when something you can see about a delivery moved but its status\ndid not: the courier's identity arrived, an ETA shifted, the courier\nbecame imminent, proof of delivery landed, or a payment was refunded.\n\n`data` is the full delivery object.\n","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook delivery.updated","href":"/api-reference/webhooks/a-delivery-changed-without-changing-status","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: [_jsx(_components.p, {\n children: \"Sent when something you can see about a delivery moved but its status\\ndid not: the courier’s identity arrived, an ETA shifted, the courier\\nbecame imminent, proof of delivery landed, or a payment was refunded.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"data\"\n }), \" is the full delivery object.\"]\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 delivery changed without changing status","description":"Sent when something you can see about a delivery moved but its status\ndid not: the courier's identity arrived, an ETA shifted, the courier\nbecame imminent, proof of delivery landed, or a payment was refunded.\n\n`data` is the full delivery object.\n","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook delivery.updated","href":"/api-reference/webhooks/a-delivery-changed-without-changing-status","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"A delivery changed without changing status","operationId":"deliveryUpdated","description":"Sent when something you can see about a delivery moved but its status\ndid not: the courier's identity arrived, an ETA shifted, the courier\nbecame imminent, proof of delivery landed, or a payment was refunded.\n\n`data` is the full delivery object.\n","tags":["Webhooks"],"security":[],"parameters":["3e4fd179-384b-4e54-a807-cc55cca87d89"],"requestBody":"a76ec067-44fc-4816-a5c9-bdae43c46954","responses":{"200":"1e4a3ec3-72d1-459e-b02a-68f1f9109b1d"},"method":"post","type":"webhook","servers":["a658606d-cd78-44bb-b1d3-622847e198a1"],"path":"delivery.updated","baseUrlOptions":["https://api.listo.delivery"],"title":"A delivery changed without changing status","codeSamples":[],"requiredOnlyExamples":false,"requestExamples":[{"language":"json","filename":"Example","code":"{\n \"id\": \"evt_9pQ2vX7mKdR4tYb1nZ3sLwCe\",\n \"created_at\": \"2026-07-28T18:41:03Z\",\n \"type\": \"delivery.updated\",\n \"data\": {\n \"id\": \"dlv_7hK2mQ9xR4tV6bN1cZ8sLwYe\",\n \"external_id\": \"order-841\",\n \"origin\": \"api\",\n \"code\": \"LS-2048\",\n \"store_id\": \"\u003cstring>\",\n \"test\": true,\n \"payment\": {\n \"url\": \"\u003cstring>\",\n \"cash_to_collect_cents\": 123,\n \"paid_at\": \"2023-11-07T05:31:56Z\"\n },\n \"order_value_cents\": 123,\n \"fee_cents\": 123,\n \"business_fee_cents\": 123,\n \"customer_fee_cents\": 123,\n \"tip_cents\": 123,\n \"currency\": \"MXN\",\n \"quote_id\": \"\u003cstring>\",\n \"pickup\": {\n \"name\": \"\u003cstring>\",\n \"street\": \"\u003cstring>\",\n \"lat\": 123,\n \"lng\": 123,\n \"notes\": \"\u003cstring>\"\n },\n \"dropoff\": {\n \"name\": \"\u003cstring>\",\n \"phone\": \"+528112345678\",\n \"street\": \"\u003cstring>\",\n \"apt_unit\": \"\u003cstring>\",\n \"lat\": 123,\n \"lng\": 123,\n \"notes\": \"\u003cstring>\"\n },\n \"manifest\": {\n \"items\": [\n {\n \"name\": \"\u003cstring>\",\n \"quantity\": 123\n }\n ]\n },\n \"vehicle\": \"moto\",\n \"courier\": {\n \"name\": \"\u003cstring>\",\n \"vehicle\": \"\u003cstring>\",\n \"vehicle_type\": \"\u003cstring>\",\n \"plate\": \"\u003cstring>\",\n \"phone\": {\n \"masked\": \"\u003cstring>\",\n \"pin\": \"\u003cstring>\"\n },\n \"location\": {\n \"lat\": 123,\n \"lng\": 123,\n \"updated_at\": \"2023-11-07T05:31:56Z\"\n },\n \"imminent\": true\n },\n \"pickup_eta_at\": \"2023-11-07T05:31:56Z\",\n \"dropoff_eta_at\": \"2023-11-07T05:31:56Z\",\n \"tracking_url\": \"https://app.listo.delivery/t/abc123\",\n \"verification\": {\n \"pincode\": \"\u003cstring>\"\n },\n \"return_verification\": {\n \"pincode\": \"4821\"\n },\n \"proof\": {\n \"picture_url\": \"\u003cstring>\",\n \"signature_image_url\": \"\u003cstring>\",\n \"signature_name\": \"\u003cstring>\",\n \"captured_at\": \"2023-11-07T05:31:56Z\"\n },\n \"proofs\": {\n \"pickup\": {\n \"photo_url\": \"\u003cstring>\",\n \"captured_at\": \"2023-11-07T05:31:56Z\"\n },\n \"dropoff\": {\n \"photo_url\": \"\u003cstring>\",\n \"signature_url\": \"\u003cstring>\",\n \"signer_name\": \"\u003cstring>\",\n \"captured_at\": \"2023-11-07T05:31:56Z\",\n \"delivered\": true\n },\n \"return\": {\n \"photo_url\": \"\u003cstring>\",\n \"signature_url\": \"\u003cstring>\",\n \"signer_name\": \"\u003cstring>\",\n \"captured_at\": \"2023-11-07T05:31:56Z\",\n \"meters_from_store\": 123\n }\n },\n \"cancellation\": {\n \"description\": \"\u003cstring>\"\n },\n \"charges\": [\n {\n \"amount_cents\": 123,\n \"charged_at\": \"2023-11-07T05:31:56Z\"\n }\n ],\n \"refunds\": [\n {\n \"id\": \"rfn_4bQ7wS2xK9mT6vN3cZ8pLdYe\",\n \"amount_cents\": 123,\n \"reason\": \"\u003cstring>\",\n \"created_at\": \"2023-11-07T05:31:56Z\",\n \"succeeded_at\": \"2023-11-07T05:31:56Z\"\n }\n ],\n \"refunded_cents\": 123,\n \"refundable_cents\": 123,\n \"support_reference\": \"2080F\",\n \"pickup_ready_at\": \"2023-11-07T05:31:56Z\",\n \"requested_at\": \"2023-11-07T05:31:56Z\",\n \"courier_assigned_at\": \"2023-11-07T05:31:56Z\",\n \"picked_up_at\": \"2023-11-07T05:31:56Z\",\n \"delivered_at\": \"2023-11-07T05:31:56Z\",\n \"canceled_at\": \"2023-11-07T05:31:56Z\",\n \"returned_at\": \"2023-11-07T05:31:56Z\",\n \"created_at\": \"2023-11-07T05:31:56Z\",\n \"updated_at\": \"2023-11-07T05:31:56Z\"\n },\n \"test\": true\n}"}],"requestExampleType":"webhook","responseExampleType":"generated"},"dependencies":{"parameters":{"3e4fd179-384b-4e54-a807-cc55cca87d89":{"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":["delivery.updated"],"isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"The shape of a delivery: every field the object can carry, with the\nnullability each one really has. It is the response of every operation\nthat answers a delivery (the create, the fetch, a list row, the\nreschedule, the cancel, the retry and the refund) and the `data` of\nevery full delivery event, so ONE type holds all of them.\n\nEvery operation returns the whole object. A field that a given call\ncannot yet have is present and null rather than missing: a create\nresponse has a null `courier`, because no courier has been assigned\nyet, and a reschedule only ever answers with a still-scheduled order,\nso its `delivered_at` is null.\n\nMoney is integer centavos, timestamps are ISO-8601 in UTC, and every\nenum below is ours rather than a passthrough of anyone else's.\n","properties":{"id":{"type":"string","description":"The delivery id, `dlv_` prefixed.","example":"dlv_7hK2mQ9xR4tV6bN1cZ8sLwYe","isRequired":true,"uniqueKey":"data.id","typeLabel":"string"},"external_id":{"oneOf":[{"type":"string","description":"Your own order reference, echoed back exactly as you sent it.","example":"order-841","isRequired":true,"uniqueKey":"data.external_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Your own order reference, echoed back exactly as you sent it.","example":"order-841","isRequired":true,"uniqueKey":"data.external_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.external_id","typeLabel":"string | null"},"origin":{"type":"string","enum":["api","console","whatsapp"],"description":"Which lane created the delivery. `api` is one you created through\n`POST /v1/deliveries`. `console` is one the store dispatched itself\nfrom the Listo merchant console, which a store can do only at the\n`full` access tier. `whatsapp` is one a customer ordered from the\nstore in a chat, which the store then accepted; no operator typed\nit anywhere.\n\nAlways present, never null, and fixed for the life of the delivery.\nA console order carries a null `external_id`, but read this field\nrather than that null: the missing reference is a consequence of the\nlane, not a way of identifying it.\n","example":"api","isRequired":true,"uniqueKey":"data.origin","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"The human order code the courier and our support quote. Unique per\nstore, not globally, so never address an order by it.\n","example":"LS-2048","isRequired":true,"uniqueKey":"data.code","typeLabel":"string"},"status":{"type":"string","enum":["awaiting_payment","awaiting_location","scheduled","dispatching","courier_assigned","picking_up","en_route","returning","delivered","returned","canceled","no_courier"],"description":"`delivered`, `returned` and `canceled` are terminal. `no_courier` is\na dead end you can retry or cancel. A `returned` delivery is this\nsame object throughout; there is no second delivery for the return\nleg.\n\n`returning`: the drop-off failed and the courier is bringing the\norder back to the store; it ends in `returned`. It is NOT terminal,\nand it is where a failed delivery now spends the minutes between the\ncourier giving up at the customer's door and the order actually\narriving back. `returned` means the order is back. Treat `returning`\nas a live delivery: the courier is still moving and\n`delivery.courier_location` events keep arriving for it.\n\nThe return charge is posted when the delivery enters `returning`,\nnot when it reaches `returned`, so `charges` is already complete on\nthe `returning` event.\n\n`awaiting_location`: an order the store took through Listo's console\nor its WhatsApp assistant, held for the drop-off location. No\ncourier is requested yet. The customer confirms the location on a\nmap link or by sharing it in the WhatsApp chat, or the store\nconfirms it from its console. The delivery then moves to\n`scheduled` or `dispatching`; to `no_courier` when a courier\ncannot be requested for it (the location is outside where the\nstore delivers, or the store itself cannot request a courier right\nnow); or to `canceled` if the order is canceled or the store\nchanges it to a pickup at the counter. A delivery you create\nthrough this API never sits in it.\n","isRequired":true,"uniqueKey":"data.status","typeLabel":"enum\u003cstring>"},"store_id":{"type":"string","description":"The `st_` id of the store the courier collects from.","isRequired":true,"uniqueKey":"data.store_id","typeLabel":"string"},"test":{"type":"boolean","description":"Whether this order lives in the sandbox. Derived from the store, so\nthere is no field to set: a test key can only reach test stores.\n","isRequired":true,"uniqueKey":"data.test","typeLabel":"boolean"},"payment":{"type":"object","description":"How the customer pays, and where that got to.","properties":{"method":{"type":"string","enum":["prepaid","cash","card"],"isRequired":true,"uniqueKey":"data.payment.method","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["unpaid","awaiting_payment","paid","partially_refunded","refunded"],"isRequired":true,"uniqueKey":"data.payment.status","typeLabel":"enum\u003cstring>"},"url":{"oneOf":[{"type":"string","format":"uri","description":"The branded payment link for a card order still awaiting\npayment. Listo sends it to your customer itself, by WhatsApp\nand by SMS when the WhatsApp does not reach them, so you can\nshow it or keep it but need not send it. Null the moment the\norder is paid or cancelled, because the link is then dead.\n","isRequired":true,"uniqueKey":"data.payment.url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"The branded payment link for a card order still awaiting\npayment. Listo sends it to your customer itself, by WhatsApp\nand by SMS when the WhatsApp does not reach them, so you can\nshow it or keep it but need not send it. Null the moment the\norder is paid or cancelled, because the link is then dead.\n","isRequired":true,"uniqueKey":"data.payment.url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.payment.url","typeLabel":"string\u003curi> | null"},"cash_to_collect_cents":{"oneOf":[{"type":"integer","description":"What the courier collects at the door: the goods value plus the\ncustomer's share of the fee. Null, not zero, on any order that\nis not cash. Zero is a real value on a cash order whose door\ntotal is zero (a `0` order value you fully cover); such an order\nis dispatched with no collection to make.\n","isRequired":true,"uniqueKey":"data.payment.cash_to_collect_cents.oneOf.0","typeLabel":"integer"},{"type":"null","description":"What the courier collects at the door: the goods value plus the\ncustomer's share of the fee. Null, not zero, on any order that\nis not cash. Zero is a real value on a cash order whose door\ntotal is zero (a `0` order value you fully cover); such an order\nis dispatched with no collection to make.\n","isRequired":true,"uniqueKey":"data.payment.cash_to_collect_cents.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.payment.cash_to_collect_cents","typeLabel":"integer | null"},"paid_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.payment.paid_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.payment.paid_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.payment.paid_at","typeLabel":"string\u003cdate-time> | null"}},"required":["method","status","url","cash_to_collect_cents","paid_at"],"isRequired":true,"uniqueKey":"data.payment","typeLabel":"object"},"order_value_cents":{"oneOf":[{"type":"integer","description":"The goods value you sent, untouched.","isRequired":true,"uniqueKey":"data.order_value_cents.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The goods value you sent, untouched.","isRequired":true,"uniqueKey":"data.order_value_cents.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.order_value_cents","typeLabel":"integer | null"},"fee_cents":{"type":"integer","description":"The total delivery fee.","isRequired":true,"uniqueKey":"data.fee_cents","typeLabel":"integer"},"business_fee_cents":{"type":"integer","description":"The part of `fee_cents` charged to you.","isRequired":true,"uniqueKey":"data.business_fee_cents","typeLabel":"integer"},"customer_fee_cents":{"type":"integer","description":"The part of `fee_cents` charged to the customer. Always sums with\n`business_fee_cents` back to `fee_cents`.\n","isRequired":true,"uniqueKey":"data.customer_fee_cents","typeLabel":"integer"},"tip_cents":{"type":"integer","description":"The courier tip you sent on this delivery, paid to the courier and\npassed on at cost with no margin taken. Deliberately OUTSIDE\n`fee_cents`, which is the delivery fee `business_fee_cents` and\n`customer_fee_cents` sum back to. 0 when you sent none, and never\nnull.\n","isRequired":true,"uniqueKey":"data.tip_cents","typeLabel":"integer"},"currency":{"type":"string","enum":["MXN"],"isRequired":true,"uniqueKey":"data.currency","typeLabel":"enum\u003cstring>"},"quote_id":{"oneOf":[{"type":"string","description":"The `qt_` quote this order bound, so you can tie the price you were\nquoted to the order that spent it. Null when the order was priced\ninline instead.\n","isRequired":true,"uniqueKey":"data.quote_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The `qt_` quote this order bound, so you can tie the price you were\nquoted to the order that spent it. Null when the order was priced\ninline instead.\n","isRequired":true,"uniqueKey":"data.quote_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.quote_id","typeLabel":"string | null"},"pickup":{"type":"object","description":"Where the courier collects, snapshotted at create, so a historical\norder keeps reporting where the courier actually went even after the\nstore is renamed or moved.\n","properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"data.pickup.name","typeLabel":"string"},"street":{"type":"string","isRequired":true,"uniqueKey":"data.pickup.street","typeLabel":"string"},"lat":{"oneOf":[{"type":"number","format":"double","isRequired":true,"uniqueKey":"data.pickup.lat.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","isRequired":true,"uniqueKey":"data.pickup.lat.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.pickup.lat","typeLabel":"number\u003cdouble> | null"},"lng":{"oneOf":[{"type":"number","format":"double","isRequired":true,"uniqueKey":"data.pickup.lng.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","isRequired":true,"uniqueKey":"data.pickup.lng.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.pickup.lng","typeLabel":"number\u003cdouble> | null"},"notes":{"oneOf":[{"type":"string","description":"The store's standing pickup instructions, not a per-order value.","isRequired":true,"uniqueKey":"data.pickup.notes.oneOf.0","typeLabel":"string"},{"type":"null","description":"The store's standing pickup instructions, not a per-order value.","isRequired":true,"uniqueKey":"data.pickup.notes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.pickup.notes","typeLabel":"string | null"}},"required":["name","street","lat","lng","notes"],"isRequired":true,"uniqueKey":"data.pickup","typeLabel":"object"},"dropoff":{"type":"object","description":"Where the courier delivers, echoed back as you sent it.","properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"data.dropoff.name","typeLabel":"string"},"phone":{"type":"string","description":"E.164, normalized on the way in.","example":"+528112345678","isRequired":true,"uniqueKey":"data.dropoff.phone","typeLabel":"string"},"street":{"type":"string","isRequired":true,"uniqueKey":"data.dropoff.street","typeLabel":"string"},"apt_unit":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"data.dropoff.apt_unit.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"data.dropoff.apt_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.dropoff.apt_unit","typeLabel":"string | null"},"lat":{"oneOf":[{"type":"number","format":"double","description":"Null when the address was never geocoded and the text was judged\ninstead. Never a fabricated zero.\n","isRequired":true,"uniqueKey":"data.dropoff.lat.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","description":"Null when the address was never geocoded and the text was judged\ninstead. Never a fabricated zero.\n","isRequired":true,"uniqueKey":"data.dropoff.lat.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.dropoff.lat","typeLabel":"number\u003cdouble> | null"},"lng":{"oneOf":[{"type":"number","format":"double","isRequired":true,"uniqueKey":"data.dropoff.lng.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","isRequired":true,"uniqueKey":"data.dropoff.lng.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.dropoff.lng","typeLabel":"number\u003cdouble> | null"},"notes":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"data.dropoff.notes.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"data.dropoff.notes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.dropoff.notes","typeLabel":"string | null"},"handoff":{"type":"string","enum":["meet_at_door","leave_at_door","meet_outside"],"isRequired":true,"uniqueKey":"data.dropoff.handoff","typeLabel":"enum\u003cstring>"}},"required":["name","phone","street","apt_unit","lat","lng","notes","handoff"],"isRequired":true,"uniqueKey":"data.dropoff","typeLabel":"object"},"manifest":{"oneOf":[{"type":"object","description":"The descriptive item list you sent, for the courier. Money never\ncomes from it, with one exception: an item sized `xlarge` makes the\ntrip a car. Null when you sent none.\n","properties":{"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.\\items.items.[INDEX].name","typeLabel":"string"},"quantity":{"type":"integer","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.\\items.items.[INDEX].quantity","typeLabel":"integer"},"size":{"type":"string","enum":["small","medium","large","xlarge"],"description":"What the item was sent as. `small` when you sent none,\nand on every item created before sizes existed, which is\nwhat those items were sent as.\n","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.\\items.items.[INDEX].size","typeLabel":"enum\u003cstring>"}},"required":["name","quantity","size"],"uniqueKey":"data.manifest.oneOf.0.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.manifest.oneOf.0.\\items","typeLabel":"object[]"}},"required":["items"],"isRequired":true,"uniqueKey":"data.manifest.oneOf.0","typeLabel":"object"},{"type":"null","description":"The descriptive item list you sent, for the courier. Money never\ncomes from it, with one exception: an item sized `xlarge` makes the\ntrip a car. Null when you sent none.\n","properties":{"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quantity":{"type":"integer"},"size":{"type":"string","enum":["small","medium","large","xlarge"],"description":"What the item was sent as. `small` when you sent none,\nand on every item created before sizes existed, which is\nwhat those items were sent as.\n"}},"required":["name","quantity","size"]}}},"required":["items"],"isRequired":true,"uniqueKey":"data.manifest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.manifest","typeLabel":"object | null"},"vehicle":{"type":"string","enum":["moto","car"],"description":"What the trip was priced and dispatched as: `car` when you asked for\none or when an item was sized `xlarge`, `moto` otherwise. A car's\nsurcharge is inside `fee_cents`. Always present, never null, and\nfixed for the life of the delivery.\n\nNot the vehicle that arrived. That is `courier.vehicle_type`, which\ncan be a car on a `moto` trip without the fee changing.\n","example":"moto","isRequired":true,"uniqueKey":"data.vehicle","typeLabel":"enum\u003cstring>"},"courier":{"oneOf":[{"type":"object","description":"Null until a courier is assigned, and then FROZEN: a terminal\ndelivery keeps reporting who carried it.\n","properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"data.courier.oneOf.0.name","typeLabel":"string"},"vehicle":{"oneOf":[{"type":"string","description":"What the courier is riding, in English whatever locale the\nrequest carried (\"Motorcycle\", \"Bicycle\"). Derived from\n`vehicle_type`, so it is null exactly when that is: display it,\nand switch on `vehicle_type` instead.\n","isRequired":true,"uniqueKey":"data.courier.oneOf.0.vehicle.oneOf.0","typeLabel":"string"},{"type":"null","description":"What the courier is riding, in English whatever locale the\nrequest carried (\"Motorcycle\", \"Bicycle\"). Derived from\n`vehicle_type`, so it is null exactly when that is: display it,\nand switch on `vehicle_type` instead.\n","isRequired":true,"uniqueKey":"data.courier.oneOf.0.vehicle.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.courier.oneOf.0.vehicle","typeLabel":"string | null"},"vehicle_type":{"oneOf":[{"type":"string","description":"The machine-readable type: `bicycle`, `car`, `van`, `truck`,\n`scooter`, `motorcycle` or `walker`. Null until the courier is\nassigned a vehicle. Treat an unlisted value as unknown rather\nthan an error: this list grows.\n","isRequired":true,"uniqueKey":"data.courier.oneOf.0.vehicle_type.oneOf.0","typeLabel":"string"},{"type":"null","description":"The machine-readable type: `bicycle`, `car`, `van`, `truck`,\n`scooter`, `motorcycle` or `walker`. Null until the courier is\nassigned a vehicle. Treat an unlisted value as unknown rather\nthan an error: this list grows.\n","isRequired":true,"uniqueKey":"data.courier.oneOf.0.vehicle_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.courier.oneOf.0.vehicle_type","typeLabel":"string | null"},"plate":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"data.courier.oneOf.0.plate.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"data.courier.oneOf.0.plate.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.courier.oneOf.0.plate","typeLabel":"string | null"},"phone":{"oneOf":[{"type":"object","description":"A masked number and its IVR PIN, never a personal number. Dial\n`masked` and enter `pin` when the system asks. Null when no\nnumber has been issued for this courier.\n","properties":{"masked":{"type":"string","isRequired":true,"uniqueKey":"data.courier.oneOf.0.phone.oneOf.0.masked","typeLabel":"string"},"pin":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"data.courier.oneOf.0.phone.oneOf.0.pin.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"data.courier.oneOf.0.phone.oneOf.0.pin.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.courier.oneOf.0.phone.oneOf.0.pin","typeLabel":"string | null"}},"required":["masked","pin"],"isRequired":true,"uniqueKey":"data.courier.oneOf.0.phone.oneOf.0","typeLabel":"object"},{"type":"null","description":"A masked number and its IVR PIN, never a personal number. Dial\n`masked` and enter `pin` when the system asks. Null when no\nnumber has been issued for this courier.\n","properties":{"masked":{"type":"string"},"pin":{"oneOf":[{"type":"string"},{"type":"null"}]}},"required":["masked","pin"],"isRequired":true,"uniqueKey":"data.courier.oneOf.0.phone.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.courier.oneOf.0.phone","typeLabel":"object | null"},"location":{"oneOf":[{"type":"object","description":"The live position, present only while the courier is actually in\nmotion and only once there is a real fix.\n","properties":{"lat":{"type":"number","format":"double","isRequired":true,"uniqueKey":"data.courier.oneOf.0.location.oneOf.0.lat","typeLabel":"number\u003cdouble>"},"lng":{"type":"number","format":"double","isRequired":true,"uniqueKey":"data.courier.oneOf.0.location.oneOf.0.lng","typeLabel":"number\u003cdouble>"},"updated_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.courier.oneOf.0.location.oneOf.0.updated_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.courier.oneOf.0.location.oneOf.0.updated_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.courier.oneOf.0.location.oneOf.0.updated_at","typeLabel":"string\u003cdate-time> | null"}},"required":["lat","lng","updated_at"],"isRequired":true,"uniqueKey":"data.courier.oneOf.0.location.oneOf.0","typeLabel":"object"},{"type":"null","description":"The live position, present only while the courier is actually in\nmotion and only once there is a real fix.\n","properties":{"lat":{"type":"number","format":"double"},"lng":{"type":"number","format":"double"},"updated_at":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null","format":"date-time"}]}},"required":["lat","lng","updated_at"],"isRequired":true,"uniqueKey":"data.courier.oneOf.0.location.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.courier.oneOf.0.location","typeLabel":"object | null"},"imminent":{"type":"boolean","description":"The courier is about a minute away. Always false once the trip ends.","isRequired":true,"uniqueKey":"data.courier.oneOf.0.imminent","typeLabel":"boolean"}},"required":["name","vehicle","vehicle_type","plate","phone","location","imminent"],"isRequired":true,"uniqueKey":"data.courier.oneOf.0","typeLabel":"object"},{"type":"null","description":"Null until a courier is assigned, and then FROZEN: a terminal\ndelivery keeps reporting who carried it.\n","properties":{"name":{"type":"string"},"vehicle":{"oneOf":[{"type":"string","description":"What the courier is riding, in English whatever locale the\nrequest carried (\"Motorcycle\", \"Bicycle\"). Derived from\n`vehicle_type`, so it is null exactly when that is: display it,\nand switch on `vehicle_type` instead.\n"},{"type":"null","description":"What the courier is riding, in English whatever locale the\nrequest carried (\"Motorcycle\", \"Bicycle\"). Derived from\n`vehicle_type`, so it is null exactly when that is: display it,\nand switch on `vehicle_type` instead.\n"}]},"vehicle_type":{"oneOf":[{"type":"string","description":"The machine-readable type: `bicycle`, `car`, `van`, `truck`,\n`scooter`, `motorcycle` or `walker`. Null until the courier is\nassigned a vehicle. Treat an unlisted value as unknown rather\nthan an error: this list grows.\n"},{"type":"null","description":"The machine-readable type: `bicycle`, `car`, `van`, `truck`,\n`scooter`, `motorcycle` or `walker`. Null until the courier is\nassigned a vehicle. Treat an unlisted value as unknown rather\nthan an error: this list grows.\n"}]},"plate":{"oneOf":[{"type":"string"},{"type":"null"}]},"phone":{"oneOf":[{"type":"object","description":"A masked number and its IVR PIN, never a personal number. Dial\n`masked` and enter `pin` when the system asks. Null when no\nnumber has been issued for this courier.\n","properties":{"masked":{"type":"string"},"pin":{"oneOf":[{"type":"string"},{"type":"null"}]}},"required":["masked","pin"]},{"type":"null","description":"A masked number and its IVR PIN, never a personal number. Dial\n`masked` and enter `pin` when the system asks. Null when no\nnumber has been issued for this courier.\n","properties":{"masked":{"type":"string"},"pin":{"oneOf":[{"type":"string"},{"type":"null"}]}},"required":["masked","pin"]}]},"location":{"oneOf":[{"type":"object","description":"The live position, present only while the courier is actually in\nmotion and only once there is a real fix.\n","properties":{"lat":{"type":"number","format":"double"},"lng":{"type":"number","format":"double"},"updated_at":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null","format":"date-time"}]}},"required":["lat","lng","updated_at"]},{"type":"null","description":"The live position, present only while the courier is actually in\nmotion and only once there is a real fix.\n","properties":{"lat":{"type":"number","format":"double"},"lng":{"type":"number","format":"double"},"updated_at":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null","format":"date-time"}]}},"required":["lat","lng","updated_at"]}]},"imminent":{"type":"boolean","description":"The courier is about a minute away. Always false once the trip ends."}},"required":["name","vehicle","vehicle_type","plate","phone","location","imminent"],"isRequired":true,"uniqueKey":"data.courier.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.courier","typeLabel":"object | null"},"pickup_eta_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the courier is expected at the store. Absolute, so you compute\nyour own countdown; a countdown computed here is stale before you\nread it.\n","isRequired":true,"uniqueKey":"data.pickup_eta_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the courier is expected at the store. Absolute, so you compute\nyour own countdown; a countdown computed here is stale before you\nread it.\n","isRequired":true,"uniqueKey":"data.pickup_eta_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.pickup_eta_at","typeLabel":"string\u003cdate-time> | null"},"dropoff_eta_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the courier is expected at the customer. Null until there is\nan estimate, and null again once the drop-off has failed\n(`returning`, `returned`): the courier is then bringing the order\nback to the store, there is no arrival at the customer left to\ndescribe, and the time it gets back to the store is never published\nhere.\n","isRequired":true,"uniqueKey":"data.dropoff_eta_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the courier is expected at the customer. Null until there is\nan estimate, and null again once the drop-off has failed\n(`returning`, `returned`): the courier is then bringing the order\nback to the store, there is no arrival at the customer left to\ndescribe, and the time it gets back to the store is never published\nhere.\n","isRequired":true,"uniqueKey":"data.dropoff_eta_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.dropoff_eta_at","typeLabel":"string\u003cdate-time> | null"},"tracking_url":{"oneOf":[{"type":"string","format":"uri","description":"The branded live tracking page for the customer: the map, the\ncourier, the delivery code and what is owed at the door. Null when\nthere is no page to point at, so you never relay a dead link.\n\nThere is a page from the moment the order is dispatched, including\nthe whole window before a courier is assigned, and for 48 hours\nafter the order is delivered, canceled or returned. It is null while\nan order is still held awaiting payment or awaiting a confirmed\ndrop-off pin, and null again once that 48 hours has passed.\n","example":"https://app.listo.delivery/t/abc123","isRequired":true,"uniqueKey":"data.tracking_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"The branded live tracking page for the customer: the map, the\ncourier, the delivery code and what is owed at the door. Null when\nthere is no page to point at, so you never relay a dead link.\n\nThere is a page from the moment the order is dispatched, including\nthe whole window before a courier is assigned, and for 48 hours\nafter the order is delivered, canceled or returned. It is null while\nan order is still held awaiting payment or awaiting a confirmed\ndrop-off pin, and null again once that 48 hours has passed.\n","example":"https://app.listo.delivery/t/abc123","isRequired":true,"uniqueKey":"data.tracking_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.tracking_url","typeLabel":"string\u003curi> | null"},"verification":{"oneOf":[{"type":"object","description":"Present only when the order carries a dropoff PIN: when you asked\nfor one (`verification.dropoff_pincode` on the create), or when\nListo requires a PIN on every delivery of this store's account, in\nwhich case it is present even though you did not ask. `pincode` is\nnull until the order is actually dispatched, which is when the code\nis minted.\n","properties":{"pincode":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"data.verification.oneOf.0.pincode.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"data.verification.oneOf.0.pincode.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.verification.oneOf.0.pincode","typeLabel":"string | null"}},"required":["pincode"],"isRequired":true,"uniqueKey":"data.verification.oneOf.0","typeLabel":"object"},{"type":"null","description":"Present only when the order carries a dropoff PIN: when you asked\nfor one (`verification.dropoff_pincode` on the create), or when\nListo requires a PIN on every delivery of this store's account, in\nwhich case it is present even though you did not ask. `pincode` is\nnull until the order is actually dispatched, which is when the code\nis minted.\n","properties":{"pincode":{"oneOf":[{"type":"string"},{"type":"null"}]}},"required":["pincode"],"isRequired":true,"uniqueKey":"data.verification.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.verification","typeLabel":"object | null"},"return_verification":{"type":"object","description":"The return code (código de devolución). When an order cannot be\ndelivered and the courier brings it back to the store, the courier\nmust be given this code at the store to hand the order over; without\nit the return cannot be completed. `pincode` is a 4-digit string\nwhile the delivery is `returning`, and null in every other state\n(before the return, and once it is `returned`). The object is\nalways present, so this field never needs a presence check. It\narrives in `delivery.status_changed` (the move into `returning`) and\nin `delivery.updated`, which carry the whole object. A new attempt\n(a retry) gets its own code. Show it to the store, and never to the\ncustomer.\n","properties":{"pincode":{"oneOf":[{"type":"string","example":"4821","isRequired":true,"uniqueKey":"data.return_verification.pincode.oneOf.0","typeLabel":"string"},{"type":"null","example":"4821","isRequired":true,"uniqueKey":"data.return_verification.pincode.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.return_verification.pincode","typeLabel":"string | null"}},"required":["pincode"],"isRequired":true,"uniqueKey":"data.return_verification","typeLabel":"object"},"proof":{"oneOf":[{"type":"object","description":"Proof of delivery. Null unless we hold some, and each field is null\nwhen that piece is missing; a photo with no signature is normal. The\nURLs are Listo's own signed links to the stored copy and are valid\nfor 24 hours from the response (or webhook) that carried them:\nfetch `GET /v1/deliveries/{id}` again for a fresh link, or keep a\ncopy. **A URL is null until Listo has its own copy of the image**\n(a few seconds after the courier takes it); the copy's arrival is\nannounced by a `delivery.updated` webhook that carries the link.\nIt may come from a delivery attempt that failed at the\ndoor, so it is not by itself proof that the order was handed over:\n`proofs.dropoff.delivered` says which. Prefer `proofs`, which keeps\neach moment of the trip apart.\n","properties":{"picture_url":{"oneOf":[{"type":"string","format":"uri","isRequired":true,"uniqueKey":"data.proof.oneOf.0.picture_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","isRequired":true,"uniqueKey":"data.proof.oneOf.0.picture_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proof.oneOf.0.picture_url","typeLabel":"string\u003curi> | null"},"signature_image_url":{"oneOf":[{"type":"string","format":"uri","isRequired":true,"uniqueKey":"data.proof.oneOf.0.signature_image_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","isRequired":true,"uniqueKey":"data.proof.oneOf.0.signature_image_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proof.oneOf.0.signature_image_url","typeLabel":"string\u003curi> | null"},"signature_name":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"data.proof.oneOf.0.signature_name.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"data.proof.oneOf.0.signature_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proof.oneOf.0.signature_name","typeLabel":"string | null"},"captured_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.proof.oneOf.0.captured_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.proof.oneOf.0.captured_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proof.oneOf.0.captured_at","typeLabel":"string\u003cdate-time> | null"}},"required":["picture_url","signature_image_url","signature_name","captured_at"],"isRequired":true,"uniqueKey":"data.proof.oneOf.0","typeLabel":"object"},{"type":"null","description":"Proof of delivery. Null unless we hold some, and each field is null\nwhen that piece is missing; a photo with no signature is normal. The\nURLs are Listo's own signed links to the stored copy and are valid\nfor 24 hours from the response (or webhook) that carried them:\nfetch `GET /v1/deliveries/{id}` again for a fresh link, or keep a\ncopy. **A URL is null until Listo has its own copy of the image**\n(a few seconds after the courier takes it); the copy's arrival is\nannounced by a `delivery.updated` webhook that carries the link.\nIt may come from a delivery attempt that failed at the\ndoor, so it is not by itself proof that the order was handed over:\n`proofs.dropoff.delivered` says which. Prefer `proofs`, which keeps\neach moment of the trip apart.\n","properties":{"picture_url":{"oneOf":[{"type":"string","format":"uri"},{"type":"null","format":"uri"}]},"signature_image_url":{"oneOf":[{"type":"string","format":"uri"},{"type":"null","format":"uri"}]},"signature_name":{"oneOf":[{"type":"string"},{"type":"null"}]},"captured_at":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null","format":"date-time"}]}},"required":["picture_url","signature_image_url","signature_name","captured_at"],"isRequired":true,"uniqueKey":"data.proof.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proof","typeLabel":"object | null"},"proofs":{"type":"object","description":"The evidence the trip left, one entry per moment. Each moment is\nnull until it happens (nothing has been captured for it yet), so\nthis object is always present with its three keys. A photo or\nsignature link is Listo's own signed link to the stored copy, and\n**it is null until Listo holds that copy** (a few seconds after the\ncourier takes the photo): the rest of the moment, the signer, the\ntime and the distance, is there from the start, and when the copy\nlands a `delivery.updated` webhook carries the link. **Each link is\nvalid for 24 hours** from the response (or webhook) that carried\nit: it is a short-lived signed link, never a permanent one. A\npartner that needs the image later fetches\n`GET /v1/deliveries/{id}` again for a fresh link, or keeps a copy.\n","properties":{"pickup":{"oneOf":[{"type":"object","description":"The courier collecting the order at the store. Null until the\npickup photo exists.\n","properties":{"photo_url":{"oneOf":[{"type":"string","format":"uri","description":"Photo of the order at the store.","isRequired":true,"uniqueKey":"data.proofs.pickup.oneOf.0.photo_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Photo of the order at the store.","isRequired":true,"uniqueKey":"data.proofs.pickup.oneOf.0.photo_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proofs.pickup.oneOf.0.photo_url","typeLabel":"string\u003curi> | null"},"captured_at":{"oneOf":[{"type":"string","format":"date-time","description":"When Listo first saw this photo.","isRequired":true,"uniqueKey":"data.proofs.pickup.oneOf.0.captured_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When Listo first saw this photo.","isRequired":true,"uniqueKey":"data.proofs.pickup.oneOf.0.captured_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proofs.pickup.oneOf.0.captured_at","typeLabel":"string\u003cdate-time> | null"}},"required":["photo_url","captured_at"],"isRequired":true,"uniqueKey":"data.proofs.pickup.oneOf.0","typeLabel":"object"},{"type":"null","description":"The courier collecting the order at the store. Null until the\npickup photo exists.\n","properties":{"photo_url":{"oneOf":[{"type":"string","format":"uri","description":"Photo of the order at the store."},{"type":"null","format":"uri","description":"Photo of the order at the store."}]},"captured_at":{"oneOf":[{"type":"string","format":"date-time","description":"When Listo first saw this photo."},{"type":"null","format":"date-time","description":"When Listo first saw this photo."}]}},"required":["photo_url","captured_at"],"isRequired":true,"uniqueKey":"data.proofs.pickup.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proofs.pickup","typeLabel":"object | null"},"dropoff":{"oneOf":[{"type":"object","description":"The courier at the customer's door. Present once the order is\ndelivered, or once the attempt left a photo, a signature or a\nsigner there, **including an attempt that failed**: read\n`delivered`, not the presence of a photo, to know whether the\norder was handed over.\n","properties":{"photo_url":{"oneOf":[{"type":"string","format":"uri","description":"Photo taken at the door.","isRequired":true,"uniqueKey":"data.proofs.dropoff.oneOf.0.photo_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Photo taken at the door.","isRequired":true,"uniqueKey":"data.proofs.dropoff.oneOf.0.photo_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proofs.dropoff.oneOf.0.photo_url","typeLabel":"string\u003curi> | null"},"signature_url":{"oneOf":[{"type":"string","format":"uri","description":"Image of the recipient's signature.","isRequired":true,"uniqueKey":"data.proofs.dropoff.oneOf.0.signature_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Image of the recipient's signature.","isRequired":true,"uniqueKey":"data.proofs.dropoff.oneOf.0.signature_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proofs.dropoff.oneOf.0.signature_url","typeLabel":"string\u003curi> | null"},"signer_name":{"oneOf":[{"type":"string","description":"The name the person who signed typed.","isRequired":true,"uniqueKey":"data.proofs.dropoff.oneOf.0.signer_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"The name the person who signed typed.","isRequired":true,"uniqueKey":"data.proofs.dropoff.oneOf.0.signer_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proofs.dropoff.oneOf.0.signer_name","typeLabel":"string | null"},"captured_at":{"oneOf":[{"type":"string","format":"date-time","description":"When Listo first saw this evidence.","isRequired":true,"uniqueKey":"data.proofs.dropoff.oneOf.0.captured_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When Listo first saw this evidence.","isRequired":true,"uniqueKey":"data.proofs.dropoff.oneOf.0.captured_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proofs.dropoff.oneOf.0.captured_at","typeLabel":"string\u003cdate-time> | null"},"delivered":{"type":"boolean","description":"True only when the delivery was delivered. False means the\nevidence is from an attempt that did not hand the order over.\n","isRequired":true,"uniqueKey":"data.proofs.dropoff.oneOf.0.delivered","typeLabel":"boolean"}},"required":["photo_url","signature_url","signer_name","captured_at","delivered"],"isRequired":true,"uniqueKey":"data.proofs.dropoff.oneOf.0","typeLabel":"object"},{"type":"null","description":"The courier at the customer's door. Present once the order is\ndelivered, or once the attempt left a photo, a signature or a\nsigner there, **including an attempt that failed**: read\n`delivered`, not the presence of a photo, to know whether the\norder was handed over.\n","properties":{"photo_url":{"oneOf":[{"type":"string","format":"uri","description":"Photo taken at the door."},{"type":"null","format":"uri","description":"Photo taken at the door."}]},"signature_url":{"oneOf":[{"type":"string","format":"uri","description":"Image of the recipient's signature."},{"type":"null","format":"uri","description":"Image of the recipient's signature."}]},"signer_name":{"oneOf":[{"type":"string","description":"The name the person who signed typed."},{"type":"null","description":"The name the person who signed typed."}]},"captured_at":{"oneOf":[{"type":"string","format":"date-time","description":"When Listo first saw this evidence."},{"type":"null","format":"date-time","description":"When Listo first saw this evidence."}]},"delivered":{"type":"boolean","description":"True only when the delivery was delivered. False means the\nevidence is from an attempt that did not hand the order over.\n"}},"required":["photo_url","signature_url","signer_name","captured_at","delivered"],"isRequired":true,"uniqueKey":"data.proofs.dropoff.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proofs.dropoff","typeLabel":"object | null"},"return":{"oneOf":[{"type":"object","description":"The courier handing the order back at the store after a failed\ndelivery. Null unless the order came back with evidence.\n","properties":{"photo_url":{"oneOf":[{"type":"string","format":"uri","description":"Photo of the order handed back at the store.","isRequired":true,"uniqueKey":"data.proofs.return.oneOf.0.photo_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Photo of the order handed back at the store.","isRequired":true,"uniqueKey":"data.proofs.return.oneOf.0.photo_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proofs.return.oneOf.0.photo_url","typeLabel":"string\u003curi> | null"},"signature_url":{"oneOf":[{"type":"string","format":"uri","description":"Image of the signature of whoever received it at the store.","isRequired":true,"uniqueKey":"data.proofs.return.oneOf.0.signature_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Image of the signature of whoever received it at the store.","isRequired":true,"uniqueKey":"data.proofs.return.oneOf.0.signature_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proofs.return.oneOf.0.signature_url","typeLabel":"string\u003curi> | null"},"signer_name":{"oneOf":[{"type":"string","description":"The name the person who signed typed.","isRequired":true,"uniqueKey":"data.proofs.return.oneOf.0.signer_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"The name the person who signed typed.","isRequired":true,"uniqueKey":"data.proofs.return.oneOf.0.signer_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proofs.return.oneOf.0.signer_name","typeLabel":"string | null"},"captured_at":{"oneOf":[{"type":"string","format":"date-time","description":"When Listo first saw this evidence.","isRequired":true,"uniqueKey":"data.proofs.return.oneOf.0.captured_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When Listo first saw this evidence.","isRequired":true,"uniqueKey":"data.proofs.return.oneOf.0.captured_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proofs.return.oneOf.0.captured_at","typeLabel":"string\u003cdate-time> | null"},"meters_from_store":{"oneOf":[{"type":"integer","description":"How far from the store the courier was when this was\ncaptured, in whole metres in a straight line. Null when\neither position is unknown. Evidence for a person to read,\nnot a verdict.\n","isRequired":true,"uniqueKey":"data.proofs.return.oneOf.0.meters_from_store.oneOf.0","typeLabel":"integer"},{"type":"null","description":"How far from the store the courier was when this was\ncaptured, in whole metres in a straight line. Null when\neither position is unknown. Evidence for a person to read,\nnot a verdict.\n","isRequired":true,"uniqueKey":"data.proofs.return.oneOf.0.meters_from_store.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proofs.return.oneOf.0.meters_from_store","typeLabel":"integer | null"}},"required":["photo_url","signature_url","signer_name","captured_at","meters_from_store"],"isRequired":true,"uniqueKey":"data.proofs.return.oneOf.0","typeLabel":"object"},{"type":"null","description":"The courier handing the order back at the store after a failed\ndelivery. Null unless the order came back with evidence.\n","properties":{"photo_url":{"oneOf":[{"type":"string","format":"uri","description":"Photo of the order handed back at the store."},{"type":"null","format":"uri","description":"Photo of the order handed back at the store."}]},"signature_url":{"oneOf":[{"type":"string","format":"uri","description":"Image of the signature of whoever received it at the store."},{"type":"null","format":"uri","description":"Image of the signature of whoever received it at the store."}]},"signer_name":{"oneOf":[{"type":"string","description":"The name the person who signed typed."},{"type":"null","description":"The name the person who signed typed."}]},"captured_at":{"oneOf":[{"type":"string","format":"date-time","description":"When Listo first saw this evidence."},{"type":"null","format":"date-time","description":"When Listo first saw this evidence."}]},"meters_from_store":{"oneOf":[{"type":"integer","description":"How far from the store the courier was when this was\ncaptured, in whole metres in a straight line. Null when\neither position is unknown. Evidence for a person to read,\nnot a verdict.\n"},{"type":"null","description":"How far from the store the courier was when this was\ncaptured, in whole metres in a straight line. Null when\neither position is unknown. Evidence for a person to read,\nnot a verdict.\n"}]}},"required":["photo_url","signature_url","signer_name","captured_at","meters_from_store"],"isRequired":true,"uniqueKey":"data.proofs.return.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.proofs.return","typeLabel":"object | null"}},"required":["pickup","dropoff","return"],"isRequired":true,"uniqueKey":"data.proofs","typeLabel":"object"},"cancellation":{"oneOf":[{"type":"object","description":"Who called the order off, and why. Null on an order that was not cancelled.","properties":{"party":{"type":"string","enum":["partner","courier","platform"],"description":"`partner` is you. `courier` is the person carrying it.\n`platform` is us, and it also covers a cancellation reported to\nus on the customer's behalf: the end customer is not an actor in\nthis API, so this field never names a person you cannot\ncorrelate.\n","isRequired":true,"uniqueKey":"data.cancellation.oneOf.0.party","typeLabel":"enum\u003cstring>"},"reason":{"oneOf":[{"type":"string","enum":["customer_canceled","store_closed","item_unavailable","wrong_address","no_longer_needed","other",null],"description":"The reason you sent on a cancel. Null when the attribution was\nderived rather than given, which is every cancellation you did\nnot make.\n","isRequired":true,"uniqueKey":"data.cancellation.oneOf.0.reason.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["customer_canceled","store_closed","item_unavailable","wrong_address","no_longer_needed","other",null],"description":"The reason you sent on a cancel. Null when the attribution was\nderived rather than given, which is every cancellation you did\nnot make.\n","isRequired":true,"uniqueKey":"data.cancellation.oneOf.0.reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.cancellation.oneOf.0.reason","typeLabel":"enum\u003cstring> | null"},"description":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"data.cancellation.oneOf.0.description.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"data.cancellation.oneOf.0.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.cancellation.oneOf.0.description","typeLabel":"string | null"}},"required":["party","reason","description"],"isRequired":true,"uniqueKey":"data.cancellation.oneOf.0","typeLabel":"object"},{"type":"null","description":"Who called the order off, and why. Null on an order that was not cancelled.","properties":{"party":{"type":"string","enum":["partner","courier","platform"],"description":"`partner` is you. `courier` is the person carrying it.\n`platform` is us, and it also covers a cancellation reported to\nus on the customer's behalf: the end customer is not an actor in\nthis API, so this field never names a person you cannot\ncorrelate.\n"},"reason":{"oneOf":[{"type":"string","enum":["customer_canceled","store_closed","item_unavailable","wrong_address","no_longer_needed","other",null],"description":"The reason you sent on a cancel. Null when the attribution was\nderived rather than given, which is every cancellation you did\nnot make.\n"},{"type":"null","enum":["customer_canceled","store_closed","item_unavailable","wrong_address","no_longer_needed","other",null],"description":"The reason you sent on a cancel. Null when the attribution was\nderived rather than given, which is every cancellation you did\nnot make.\n"}]},"description":{"oneOf":[{"type":"string"},{"type":"null"}]}},"required":["party","reason","description"],"isRequired":true,"uniqueKey":"data.cancellation.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.cancellation","typeLabel":"object | null"},"failure_reason":{"oneOf":[{"type":"string","enum":["no_couriers_available","address_unreachable","customer_unavailable","delivery_failed",null],"description":"Why a dispatch failed, bucketed by whose side the problem is on, so\nyou can act on it rather than just retry blindly.\n`no_couriers_available` is the retriable one.\n`delivery_failed` is the honest catch-all. Null unless a failure was\nrecorded.\n","isRequired":true,"uniqueKey":"data.failure_reason.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["no_couriers_available","address_unreachable","customer_unavailable","delivery_failed",null],"description":"Why a dispatch failed, bucketed by whose side the problem is on, so\nyou can act on it rather than just retry blindly.\n`no_couriers_available` is the retriable one.\n`delivery_failed` is the honest catch-all. Null unless a failure was\nrecorded.\n","isRequired":true,"uniqueKey":"data.failure_reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.failure_reason","typeLabel":"enum\u003cstring> | null"},"charges":{"type":"array","description":"What a trip that was driven but wasted was billed at: the delivery\nfee for each leg driven, less your own store markup. Empty on\nalmost every delivery, and never null.\n\n**This amount changed on 2026-08-29.** It used to be what the\nwasted trip cost Listo, so expect larger values on the same orders\nfrom that date onward. The field itself is unchanged.\n\nAlways present on a delivery object, so treat an absent `charges`\nas impossible rather than as \"no charges\". It is in this schema's\n`required` list for that reason.\n\nA charge can arrive on the delivery's final\n`delivery.status_changed` or, when the cost settles afterwards, on\na later `delivery.updated`. You cannot assume which, so read this\non both: billing the moment a delivery reaches its terminal status\nbills short on every order whose cost landed late.\n\nThe same movement appears on `GET /v1/ledger` as a signed row, so\nit reads negative there while `amount_cents` here is positive.\n","items":{"type":"object","properties":{"type":{"type":"string","enum":["cancellation_fee","return_fee"],"description":"What the charge was for. `cancellation_fee` is a\ncancellation late enough that a courier was already working\non the order. `return_fee` is a return trip after a failed\ndropoff, and it bills as ONE entry covering both legs of the\njourney rather than two.\n","isRequired":true,"uniqueKey":"data.charges.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"amount_cents":{"type":"integer","description":"What you were charged, positive, in Mexican peso cents: the\ndelivery fee for each leg that was driven, less your own\nstore markup.\n","isRequired":true,"uniqueKey":"data.charges.items.[INDEX].amount_cents","typeLabel":"integer"},"charged_at":{"type":"string","format":"date-time","description":"When the charge was recorded, which is not when the delivery\nended.\n","isRequired":true,"uniqueKey":"data.charges.items.[INDEX].charged_at","typeLabel":"string\u003cdate-time>"}},"required":["type","amount_cents","charged_at"],"uniqueKey":"data.charges.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.charges","typeLabel":"object[]"},"refunds":{"type":"array","description":"Every time money went back to the customer on this order, newest\nfirst. Empty on an order that has never been refunded, and never\nnull.\n\nAlways present on a delivery object, so treat an absent `refunds`\nas impossible rather than as \"no refunds\". It is in this schema's\n`required` list for that reason, exactly as `charges` above is.\n\nIt is a LIST because refunds repeat: a partial refund is followed\nby another refund, each with its own amount, its own reason and its\nown outcome. Every refund we can see is here whoever made it, which\nis what makes the list worth reconciling against. The connected\naccount belongs to the merchant of record, which can refund a charge\non it without going through us at all; those arrive as\n`requested_via: external`, and a list that showed only the refunds\nyou asked for would silently disagree with this order's own\n`payment.status`.\n\nA refund rides `delivery.updated`, never an event of its own.\n","items":{"type":"object","properties":{"id":{"type":"string","description":"The refund id, `rfn_` prefixed.","example":"rfn_4bQ7wS2xK9mT6vN3cZ8pLdYe","isRequired":true,"uniqueKey":"data.refunds.items.[INDEX].id","typeLabel":"string"},"amount_cents":{"oneOf":[{"type":"integer","description":"What went back, positive, in Mexican peso cents. NULL AND NOT\nZERO while a refund of the remaining balance is still in\nflight: it carries no amount until the refund is confirmed,\nand a zero would say a refund moved nothing. Read\n`refunded_cents` below rather than summing this array, which\nis exactly why both totals are published.\n","isRequired":true,"uniqueKey":"data.refunds.items.[INDEX].amount_cents.oneOf.0","typeLabel":"integer"},{"type":"null","description":"What went back, positive, in Mexican peso cents. NULL AND NOT\nZERO while a refund of the remaining balance is still in\nflight: it carries no amount until the refund is confirmed,\nand a zero would say a refund moved nothing. Read\n`refunded_cents` below rather than summing this array, which\nis exactly why both totals are published.\n","isRequired":true,"uniqueKey":"data.refunds.items.[INDEX].amount_cents.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.refunds.items.[INDEX].amount_cents","typeLabel":"integer | null"},"reason":{"oneOf":[{"type":"string","description":"The free text whoever asked for the refund supplied, or null.\nYour own words when you sent them; it is never an enum.\n","isRequired":true,"uniqueKey":"data.refunds.items.[INDEX].reason.oneOf.0","typeLabel":"string"},{"type":"null","description":"The free text whoever asked for the refund supplied, or null.\nYour own words when you sent them; it is never an enum.\n","isRequired":true,"uniqueKey":"data.refunds.items.[INDEX].reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.refunds.items.[INDEX].reason","typeLabel":"string | null"},"status":{"type":"string","enum":["pending","succeeded","failed"],"description":"`pending` IS NOT A FAILURE and must not be retried: a\ndirect-charge refund is held while the account's balance is\nshort and applied once funds land. It flips to `succeeded` on\nits own and publishes that as `delivery.updated`. `failed`\nmeans nothing moved.\n","isRequired":true,"uniqueKey":"data.refunds.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"requested_via":{"type":"string","enum":["api","console","automatic","external"],"description":"Which lane issued it. `api` is your own\n`POST /v1/deliveries/{id}/refunds`. `console` is the merchant\npressing it in the Listo console. `automatic` is one we issued\nwith nobody asking, on a cancel or a return. `external` is one\nmade in the merchant's own payment dashboard, which we learned\nabout afterwards.\n","isRequired":true,"uniqueKey":"data.refunds.items.[INDEX].requested_via","typeLabel":"enum\u003cstring>"},"party":{"type":"string","enum":["business","platform"],"description":"Whose decision it was. `business` is the merchant, or you\nacting for your store. `platform` is Listo issuing it because\nthe order ended without reaching the customer.\n","isRequired":true,"uniqueKey":"data.refunds.items.[INDEX].party","typeLabel":"enum\u003cstring>"},"created_at":{"type":"string","format":"date-time","description":"When the refund was asked for.","isRequired":true,"uniqueKey":"data.refunds.items.[INDEX].created_at","typeLabel":"string\u003cdate-time>"},"succeeded_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the money was confirmed on its way. Null on a pending or\nfailed refund.\n","isRequired":true,"uniqueKey":"data.refunds.items.[INDEX].succeeded_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the money was confirmed on its way. Null on a pending or\nfailed refund.\n","isRequired":true,"uniqueKey":"data.refunds.items.[INDEX].succeeded_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.refunds.items.[INDEX].succeeded_at","typeLabel":"string\u003cdate-time> | null"}},"required":["id","amount_cents","reason","status","requested_via","party","created_at","succeeded_at"],"uniqueKey":"data.refunds.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.refunds","typeLabel":"object[]"},"refunded_cents":{"type":"integer","description":"The sum of the SUCCEEDED refunds above, in Mexican peso cents. 0,\nnever null, on an order nothing has gone back on. A `pending` refund\nis not counted, because the money has not moved and may yet be\nrefused.\n\nPublished rather than left for you to compute, because the array\ncannot always be summed correctly: a refund of the remaining balance\ncarries no `amount_cents` until it is confirmed, so adding the\nlist up counts it as zero and reads the whole charge as still\nrefundable. We take that case pessimistically instead, as having\ntaken the entire remaining balance, because guessing low ends in\nrefunding a customer twice.\n","isRequired":true,"uniqueKey":"data.refunded_cents","typeLabel":"integer"},"refundable_cents":{"type":"integer","description":"What a further refund could still return: what the customer paid\n(`order_value_cents` plus `customer_fee_cents`, which IS the charge)\nminus `refunded_cents`, floored at zero. 0, never null.\n\n0 on any order with no collected card payment behind it, whatever\nits value. Cash never touched our rails, a prepaid order's customer\nis yours and we hold nothing of theirs, and an order still awaiting\npayment was never charged, so there is nothing on any of them a\nrefund could return.\n\nThis is the ceiling `POST /v1/deliveries/{id}/refunds` refuses an\n`amount_cents` against, so read it before you call rather than\ndiscovering the bound from a `refund_amount_too_large`.\n","isRequired":true,"uniqueKey":"data.refundable_cents","typeLabel":"integer"},"support_reference":{"oneOf":[{"type":"string","description":"A short handle to quote when you escalate an order to us. Null until\nthe order reaches dispatch.\n","example":"2080F","isRequired":true,"uniqueKey":"data.support_reference.oneOf.0","typeLabel":"string"},{"type":"null","description":"A short handle to quote when you escalate an order to us. Null until\nthe order reaches dispatch.\n","example":"2080F","isRequired":true,"uniqueKey":"data.support_reference.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.support_reference","typeLabel":"string | null"},"pickup_ready_at":{"oneOf":[{"type":"string","format":"date-time","description":"The scheduled pickup time you asked for. Null on a dispatch-now order.","isRequired":true,"uniqueKey":"data.pickup_ready_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"The scheduled pickup time you asked for. Null on a dispatch-now order.","isRequired":true,"uniqueKey":"data.pickup_ready_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.pickup_ready_at","typeLabel":"string\u003cdate-time> | null"},"requested_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.requested_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.requested_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.requested_at","typeLabel":"string\u003cdate-time> | null"},"courier_assigned_at":{"oneOf":[{"type":"string","format":"date-time","description":"When a courier was first observed on the current attempt. Honestly\nan observation rather than an assignment clock, because no\nassignment time is published to us. Null on an attempt that never\nhad one.\n","isRequired":true,"uniqueKey":"data.courier_assigned_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When a courier was first observed on the current attempt. Honestly\nan observation rather than an assignment clock, because no\nassignment time is published to us. Null on an attempt that never\nhad one.\n","isRequired":true,"uniqueKey":"data.courier_assigned_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.courier_assigned_at","typeLabel":"string\u003cdate-time> | null"},"picked_up_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.picked_up_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.picked_up_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.picked_up_at","typeLabel":"string\u003cdate-time> | null"},"delivered_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.delivered_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.delivered_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.delivered_at","typeLabel":"string\u003cdate-time> | null"},"canceled_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.canceled_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.canceled_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.canceled_at","typeLabel":"string\u003cdate-time> | null"},"returned_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.returned_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"data.returned_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.returned_at","typeLabel":"string\u003cdate-time> | null"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.updated_at","typeLabel":"string\u003cdate-time>"}},"required":["id","external_id","origin","code","status","store_id","test","payment","order_value_cents","fee_cents","business_fee_cents","customer_fee_cents","tip_cents","currency","quote_id","pickup","dropoff","manifest","vehicle","courier","pickup_eta_at","dropoff_eta_at","tracking_url","verification","return_verification","proof","proofs","cancellation","failure_reason","support_reference","pickup_ready_at","requested_at","courier_assigned_at","picked_up_at","delivered_at","canceled_at","returned_at","created_at","updated_at","charges","refunds","refunded_cents","refundable_cents"],"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":"delivery.updated","data":{"id":"dlv_7hK2mQ9xR4tV6bN1cZ8sLwYe","external_id":"order-841","origin":"api","code":"LS-2048","store_id":"\u003cstring>","test":true,"payment":{"url":"\u003cstring>","cash_to_collect_cents":123,"paid_at":"2023-11-07T05:31:56Z"},"order_value_cents":123,"fee_cents":123,"business_fee_cents":123,"customer_fee_cents":123,"tip_cents":123,"currency":"MXN","quote_id":"\u003cstring>","pickup":{"name":"\u003cstring>","street":"\u003cstring>","lat":123,"lng":123,"notes":"\u003cstring>"},"dropoff":{"name":"\u003cstring>","phone":"+528112345678","street":"\u003cstring>","apt_unit":"\u003cstring>","lat":123,"lng":123,"notes":"\u003cstring>"},"manifest":{"items":[{"name":"\u003cstring>","quantity":123}]},"vehicle":"moto","courier":{"name":"\u003cstring>","vehicle":"\u003cstring>","vehicle_type":"\u003cstring>","plate":"\u003cstring>","phone":{"masked":"\u003cstring>","pin":"\u003cstring>"},"location":{"lat":123,"lng":123,"updated_at":"2023-11-07T05:31:56Z"},"imminent":true},"pickup_eta_at":"2023-11-07T05:31:56Z","dropoff_eta_at":"2023-11-07T05:31:56Z","tracking_url":"https://app.listo.delivery/t/abc123","verification":{"pincode":"\u003cstring>"},"return_verification":{"pincode":"4821"},"proof":{"picture_url":"\u003cstring>","signature_image_url":"\u003cstring>","signature_name":"\u003cstring>","captured_at":"2023-11-07T05:31:56Z"},"proofs":{"pickup":{"photo_url":"\u003cstring>","captured_at":"2023-11-07T05:31:56Z"},"dropoff":{"photo_url":"\u003cstring>","signature_url":"\u003cstring>","signer_name":"\u003cstring>","captured_at":"2023-11-07T05:31:56Z","delivered":true},"return":{"photo_url":"\u003cstring>","signature_url":"\u003cstring>","signer_name":"\u003cstring>","captured_at":"2023-11-07T05:31:56Z","meters_from_store":123}},"cancellation":{"description":"\u003cstring>"},"charges":[{"amount_cents":123,"charged_at":"2023-11-07T05:31:56Z"}],"refunds":[{"id":"rfn_4bQ7wS2xK9mT6vN3cZ8pLdYe","amount_cents":123,"reason":"\u003cstring>","created_at":"2023-11-07T05:31:56Z","succeeded_at":"2023-11-07T05:31:56Z"}],"refunded_cents":123,"refundable_cents":123,"support_reference":"2080F","pickup_ready_at":"2023-11-07T05:31:56Z","requested_at":"2023-11-07T05:31:56Z","courier_assigned_at":"2023-11-07T05:31:56Z","picked_up_at":"2023-11-07T05:31:56Z","delivered_at":"2023-11-07T05:31:56Z","canceled_at":"2023-11-07T05:31:56Z","returned_at":"2023-11-07T05:31:56Z","created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z"},"test":true}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"1e4a3ec3-72d1-459e-b02a-68f1f9109b1d":{"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 delivery changed without changing status - Listo Partner API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/api-reference/webhooks/a-delivery-changed-without-changing-status","matchLevel":0},"es":{"href":"/es/api-reference/webhooks/a-delivery-changed-without-changing-status","matchLevel":1}}},"lastModified":"2026-11-07T01:48:55.681Z","originalFileLocation":"api-reference/webhooks/a-delivery-changed-without-changing-status.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 something you can see about a delivery moved but its status did not: the courier\u0026#x27;s identity arrived, an ETA shifted, the courier became imminent, proof of delivery landed, or a payment was refunded. data is the full delivery object.\">\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 delivery changed without changing status - Listo Partner API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Sent when something you can see about a delivery moved but its status did not: the courier\u0026#x27;s identity arrived, an ETA shifted, the courier became imminent, proof of delivery landed, or a payment was refunded. data is the full delivery object.\">\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-delivery-changed-without-changing-status\">\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+delivery+changed+without+changing+status\u0026amp;description=Sent+when+something+you+can+see+about+a+delivery+moved+but+its+status%0Adid+not%3A+the+courier%27s+identity+arrived%2C+an+ETA+shifted%2C+the+courier%0Abecame+imminent%2C+proo\u0026amp;theme=77fcfc9066d8b9eb9850b729\u0026amp;signature=53d90e7567dc58a9d0e3424de7f2cf63d09e849b35d081d46448634b5d113a24\">\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 delivery changed without changing status - Listo Partner API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Sent when something you can see about a delivery moved but its status did not: the courier\u0026#x27;s identity arrived, an ETA shifted, the courier became imminent, proof of delivery landed, or a payment was refunded. data is the full delivery object.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://listo-c5a11a00.mintlify.site/_mintlify/api/og/v2?title=A+delivery+changed+without+changing+status\u0026amp;description=Sent+when+something+you+can+see+about+a+delivery+moved+but+its+status%0Adid+not%3A+the+courier%27s+identity+arrived%2C+an+ETA+shifted%2C+the+courier%0Abecame+imminent%2C+proo\u0026amp;theme=77fcfc9066d8b9eb9850b729\u0026amp;signature=53d90e7567dc58a9d0e3424de7f2cf63d09e849b35d081d46448634b5d113a24\">\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-delivery-changed-without-changing-status\">\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-delivery-changed-without-changing-status.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.listo.delivery/api-reference/webhooks/a-delivery-changed-without-changing-status\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.listo.delivery/es/api-reference/webhooks/a-delivery-changed-without-changing-status\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.listo.delivery/api-reference/webhooks/a-delivery-changed-without-changing-status\">\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-delivery-changed-without-changing-status#webpage\",\"url\":\"https://docs.listo.delivery/api-reference/webhooks/a-delivery-changed-without-changing-status\",\"name\":\"A delivery changed without changing status\",\"description\":\"Sent when something you can see about a delivery moved but its status did not: the courier's identity arrived, an ETA shifted, the courier became imminent, proof of delivery landed, or a payment was refunded. data is the full delivery object.\",\"dateModified\":\"2026-11-07T01:48:55.681Z\",\"isPartOf\":{\"@id\":\"https://docs.listo.delivery#website\"},\"breadcrumb\":{\"@id\":\"https://docs.listo.delivery/api-reference/webhooks/a-delivery-changed-without-changing-status#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.listo.delivery/api-reference/webhooks/a-delivery-changed-without-changing-status#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 delivery changed without changing status\",\"item\":\"https://docs.listo.delivery/api-reference/webhooks/a-delivery-changed-without-changing-status\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.listo.delivery/api-reference/webhooks/a-delivery-changed-without-changing-status#apireference\",\"headline\":\"A delivery changed without changing status\",\"name\":\"A delivery changed without changing status\",\"description\":\"Sent when something you can see about a delivery moved but its status did not: the courier's identity arrived, an ETA shifted, the courier became imminent, proof of delivery landed, or a payment was refunded. data is the full delivery object.\",\"url\":\"https://docs.listo.delivery/api-reference/webhooks/a-delivery-changed-without-changing-status\",\"mainEntityOfPage\":{\"@id\":\"https://docs.listo.delivery/api-reference/webhooks/a-delivery-changed-without-changing-status#webpage\"},\"dateModified\":\"2026-11-07T01:48:55.681Z\",\"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","description":"Sent on every status transition, including the ones you did not cause:\na courier accepting the order, a card payment landing, a dispatch\nfailing, a courier or our platform calling the trip off.\n\n`data` is the full delivery object, the same shape the REST endpoints\nreturn, so an integration that stored a create response can diff this\nagainst it field by field.\n","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","description":"The courier position ping, roughly every twenty seconds while a trip is\nin motion. Consume it if you render your own map; the branded\n`tracking_url` on the delivery is the alternative that needs no\nintegration at all.\n\n`data` is DELIBERATELY NOT the full delivery object: one of these lands\nevery few seconds for the whole trip, and re-sending the customer's\nname, address and phone in each would move a lot of personal data to say\nthe courier drove a block.\n\nThis is the ONE event that is never retried. A failed ping is superseded\nby the next one, so redelivering it minutes later would put a stale\nposition on top of the fresher one you already have.\n","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook delivery.courier_location","href":"/api-reference/webhooks/the-courier-moved"},{"title":"A withdrawal was settled","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","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-delivery-changed-without-changing-status"}]}]},"basePath":"","title":"A delivery changed without changing status - 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"]}