A message to the customer of a test delivery was not sent
Sent only for a delivery made in test mode, when a message to the
customer was not sent because the delivery’s dropoff.phone is not one
of the team phones you verified on the dashboard (Settings, Test phones),
or because you reached the 20 customer messages a day that test mode
sends. The delivery itself carried on exactly as it would have.
data carries the delivery id, which moment was skipped and why. It
has no phone number: you already hold the delivery.
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 body of a delivery.message_skipped event. Sent only for a delivery
made in test mode, when a message to the customer was not sent: either
because the delivery's dropoff.phone is not one of the team phones you
verified on the dashboard (Settings, Test phones), or because you reached
the 20 customer messages a day that test mode sends. The delivery itself
carried on as usual. Correlate it with a delivery you already hold; it
is not the delivery object and carries no phone number.
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":"6aefa4ff6d3ec31a32f57c3d","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"en","tag":"Reference","count":44},{"language":"es","tag":"Referencia","count":44},{"language":"en","tag":"Errors","count":43},{"language":"es","tag":"Errores","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":"en","tag":"Webhooks","count":7},{"language":"es","tag":"Envíos","count":7},{"language":"es","tag":"Webhooks","count":7},{"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-message-to-the-customer-of-a-test-delivery-was-not-sent","slug":"/api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent","pageMetadata":{"title":"A message to the customer of a test delivery was not sent","description":"Sent only for a delivery made in test mode, when a message to the\ncustomer was not sent because the delivery's `dropoff.phone` is not one\nof the team phones you verified on the dashboard (Settings, Test phones),\nor because you reached the 20 customer messages a day that test mode\nsends. The delivery itself carried on exactly as it would have.\n\n`data` carries the delivery id, which `moment` was skipped and why. It\nhas no phone number: you already hold the delivery.\n","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook delivery.message_skipped","href":"/api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Sent only for a delivery made in test mode, when a message to the\\ncustomer was not sent because the delivery’s \", _jsx(_components.code, {\n children: \"dropoff.phone\"\n }), \" is not one\\nof the team phones you verified on the dashboard (Settings, Test phones),\\nor because you reached the 20 customer messages a day that test mode\\nsends. The delivery itself carried on exactly as it would have.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"data\"\n }), \" carries the delivery id, which \", _jsx(_components.code, {\n children: \"moment\"\n }), \" was skipped and why. It\\nhas no phone number: you already hold the delivery.\"]\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 message to the customer of a test delivery was not sent","description":"Sent only for a delivery made in test mode, when a message to the\ncustomer was not sent because the delivery's `dropoff.phone` is not one\nof the team phones you verified on the dashboard (Settings, Test phones),\nor because you reached the 20 customer messages a day that test mode\nsends. The delivery itself carried on exactly as it would have.\n\n`data` carries the delivery id, which `moment` was skipped and why. It\nhas no phone number: you already hold the delivery.\n","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook delivery.message_skipped","href":"/api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"A message to the customer of a test delivery was not sent","operationId":"deliveryMessageSkipped","description":"Sent only for a delivery made in test mode, when a message to the\ncustomer was not sent because the delivery's `dropoff.phone` is not one\nof the team phones you verified on the dashboard (Settings, Test phones),\nor because you reached the 20 customer messages a day that test mode\nsends. The delivery itself carried on exactly as it would have.\n\n`data` carries the delivery id, which `moment` was skipped and why. It\nhas no phone number: you already hold the delivery.\n","tags":["Webhooks"],"security":[],"parameters":["58aab74e-a324-46e8-8f3a-b7e600ec1539"],"requestBody":"2c13298b-930d-4477-915d-968802cec6ff","responses":{"200":"b268a3be-100d-4f6b-a5ed-42ad78322379"},"method":"post","type":"webhook","servers":["0bb272f2-f66d-4afa-976e-a85904afeb0b"],"path":"delivery.message_skipped","baseUrlOptions":["https://api.listo.delivery"],"title":"A message to the customer of a test delivery was not sent","codeSamples":[],"requiredOnlyExamples":false,"requestExamples":[{"language":"json","filename":"Example","code":"{\n \"id\": \"evt_9pQ2vX7mKdR4tYb1nZ3sLwCe\",\n \"created_at\": \"2026-07-28T18:41:03Z\",\n \"type\": \"delivery.message_skipped\",\n \"data\": {\n \"delivery_id\": \"dlv_3kT8nQ2vLw5xZ9aB4cD7eF1g\",\n \"moment\": \"en_route\",\n \"reason\": \"not_a_team_phone\"\n },\n \"test\": true\n}"}],"requestExampleType":"webhook","responseExampleType":"generated"},"dependencies":{"parameters":{"58aab74e-a324-46e8-8f3a-b7e600ec1539":{"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.message_skipped"],"isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"The body of a `delivery.message_skipped` event. Sent only for a delivery\nmade in test mode, when a message to the customer was not sent: either\nbecause the delivery's `dropoff.phone` is not one of the team phones you\nverified on the dashboard (Settings, Test phones), or because you reached\nthe 20 customer messages a day that test mode sends. The delivery itself\ncarried on as usual. Correlate it with a delivery you already hold; it\nis not the delivery object and carries no phone number.\n","properties":{"delivery_id":{"type":"string","description":"The `dlv_` id of the delivery whose message was not sent.","example":"dlv_3kT8nQ2vLw5xZ9aB4cD7eF1g","isRequired":true,"uniqueKey":"data.delivery_id","typeLabel":"string"},"moment":{"type":"string","description":"Which message was skipped. `courier_assigned`, `en_route`,\n`arriving`, `delivered`, `not_delivered` and `pickup_time_changed`\nare the tracking messages; `location_request` and `payment_request`\nare the links asking the customer to confirm the drop-off location or\nto pay; `dropoff_code` is the SMS with the drop-off code.\n","enum":["courier_assigned","en_route","arriving","delivered","not_delivered","pickup_time_changed","location_request","payment_request","dropoff_code"],"example":"en_route","isRequired":true,"uniqueKey":"data.moment","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"Why it was skipped. `not_a_team_phone`: `dropoff.phone` is not one of\nthe phones you verified. `daily_test_limit`: you already sent 20\ncustomer messages today in test mode.\n","enum":["not_a_team_phone","daily_test_limit"],"example":"not_a_team_phone","isRequired":true,"uniqueKey":"data.reason","typeLabel":"enum\u003cstring>"}},"required":["delivery_id","moment","reason"],"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.message_skipped","data":{"delivery_id":"dlv_3kT8nQ2vLw5xZ9aB4cD7eF1g","moment":"en_route","reason":"not_a_team_phone"},"test":true}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"b268a3be-100d-4f6b-a5ed-42ad78322379":{"description":"Return any 2xx to acknowledge the event.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{},"servers":{"0bb272f2-f66d-4afa-976e-a85904afeb0b":{"url":"https://api.listo.delivery"}}},"originalFileLocation":"openapi/en.yaml"},"subdomain":"listo-c5a11a00","siteName":"Listo Partner API","title":"A message to the customer of a test delivery was not sent - Listo Partner API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent","matchLevel":0},"es":{"href":"/es/api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent","matchLevel":1}}},"lastModified":"2026-11-07T16:58:53.068Z","originalFileLocation":"api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent.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 only for a delivery made in test mode, when a message to the customer was not sent because the delivery\u0026#x27;s dropoff.phone is not one of the team phones you verified on the dashboard (Settings, Test phones), or because you reached the 20 customer messages a day that test mode sends. The delivery itself carried on exactly as it would have. data carries the delivery id, which moment was skipped and why. It has no phone number: you already hold the delivery.\">\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 message to the customer of a test delivery was not sent - Listo Partner API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Sent only for a delivery made in test mode, when a message to the customer was not sent because the delivery\u0026#x27;s dropoff.phone is not one of the team phones you verified on the dashboard (Settings, Test phones), or because you reached the 20 customer messages a day that test mode sends. The delivery itself carried on exactly as it would have. data carries the delivery id, which moment was skipped and why. It has no phone number: you already hold the delivery.\">\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-message-to-the-customer-of-a-test-delivery-was-not-sent\">\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+message+to+the+customer+of+a+test+delivery+was+not+sent\u0026amp;description=Sent+only+for+a+delivery+made+in+test+mode%2C+when+a+message+to+the%0Acustomer+was+not+sent+because+the+delivery%27s+%60dropoff.phone%60+is+not+one%0Aof+the+team+phones+you\u0026amp;theme=77fcfc9066d8b9eb9850b729\u0026amp;signature=fa7ded35eea31b46c9550061fba2ec7dc7a134bc6f7e8fe8b4aff14c8a49d22a\">\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 message to the customer of a test delivery was not sent - Listo Partner API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Sent only for a delivery made in test mode, when a message to the customer was not sent because the delivery\u0026#x27;s dropoff.phone is not one of the team phones you verified on the dashboard (Settings, Test phones), or because you reached the 20 customer messages a day that test mode sends. The delivery itself carried on exactly as it would have. data carries the delivery id, which moment was skipped and why. It has no phone number: you already hold the delivery.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://listo-c5a11a00.mintlify.site/_mintlify/api/og/v2?title=A+message+to+the+customer+of+a+test+delivery+was+not+sent\u0026amp;description=Sent+only+for+a+delivery+made+in+test+mode%2C+when+a+message+to+the%0Acustomer+was+not+sent+because+the+delivery%27s+%60dropoff.phone%60+is+not+one%0Aof+the+team+phones+you\u0026amp;theme=77fcfc9066d8b9eb9850b729\u0026amp;signature=fa7ded35eea31b46c9550061fba2ec7dc7a134bc6f7e8fe8b4aff14c8a49d22a\">\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-message-to-the-customer-of-a-test-delivery-was-not-sent\">\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-message-to-the-customer-of-a-test-delivery-was-not-sent.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.listo.delivery/api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.listo.delivery/es/api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.listo.delivery/api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent\">\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-message-to-the-customer-of-a-test-delivery-was-not-sent#webpage\",\"url\":\"https://docs.listo.delivery/api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent\",\"name\":\"A message to the customer of a test delivery was not sent\",\"description\":\"Sent only for a delivery made in test mode, when a message to the customer was not sent because the delivery's dropoff.phone is not one of the team phones you verified on the dashboard (Settings, Test phones), or because you reached the 20 customer messages a day that test mode sends. The delivery itself carried on exactly as it would have. data carries the delivery id, which moment was skipped and why. It has no phone number: you already hold the delivery.\",\"dateModified\":\"2026-11-07T16:58:53.068Z\",\"isPartOf\":{\"@id\":\"https://docs.listo.delivery#website\"},\"breadcrumb\":{\"@id\":\"https://docs.listo.delivery/api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.listo.delivery/api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent#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 message to the customer of a test delivery was not sent\",\"item\":\"https://docs.listo.delivery/api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.listo.delivery/api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent#apireference\",\"headline\":\"A message to the customer of a test delivery was not sent\",\"name\":\"A message to the customer of a test delivery was not sent\",\"description\":\"Sent only for a delivery made in test mode, when a message to the customer was not sent because the delivery's dropoff.phone is not one of the team phones you verified on the dashboard (Settings, Test phones), or because you reached the 20 customer messages a day that test mode sends. The delivery itself carried on exactly as it would have. data carries the delivery id, which moment was skipped and why. It has no phone number: you already hold the delivery.\",\"url\":\"https://docs.listo.delivery/api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent\",\"mainEntityOfPage\":{\"@id\":\"https://docs.listo.delivery/api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent#webpage\"},\"dateModified\":\"2026-11-07T16:58:53.068Z\",\"publisher\":{\"@id\":\"https://docs.listo.delivery/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.listo.delivery#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Listo Partner API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Listo Partner API","nav":{"global":null,"languages":[{"language":"en","default":true,"navbar":{"links":[{"href":"https://status.listo.delivery","label":"Status"}]},"groups":[{"group":"Get started","pages":[{"title":"Quickstart","href":"/en/quickstart"}]},{"group":"Guides","pages":[{"title":"Quote and create a delivery","href":"/en/guides/quote-and-create"},{"title":"Receive and verify webhooks","href":"/en/guides/webhooks"},{"title":"Debugging your integration","href":"/en/guides/debugging"},{"title":"Build with AI","href":"/en/guides/build-with-ai"},{"title":"Fund your balance and withdraw","href":"/en/guides/balance-and-withdrawals"},{"title":"Go live","href":"/en/guides/go-live"},{"title":"Connect a restaurant that already uses Listo","sidebarTitle":"Connect an existing account","href":"/en/guides/connect-existing-account"},{"title":"Plan and billing","href":"/en/guides/plan-and-billing"},{"title":"Connect Claude, Cursor or Codex","href":"/en/guides/connect-ai-client"}]},{"group":"Errors","expanded":false,"pages":[{"title":"Errors","href":"/en/errors/index"},{"title":"account_exists","href":"/en/errors/account_exists"},{"title":"address_not_found","href":"/en/errors/address_not_found"},{"title":"address_undeliverable","href":"/en/errors/address_undeliverable"},{"title":"cancel_failed","href":"/en/errors/cancel_failed"},{"title":"card_below_minimum","href":"/en/errors/card_below_minimum"},{"title":"card_not_ready","href":"/en/errors/card_not_ready"},{"title":"cash_over_cap","href":"/en/errors/cash_over_cap"},{"title":"charge_in_progress","href":"/en/errors/charge_in_progress"},{"title":"code_expired","href":"/en/errors/code_expired"},{"title":"console_access_required","href":"/en/errors/console_access_required"},{"title":"event_not_resendable","href":"/en/errors/event_not_resendable"},{"title":"idempotency_conflict","href":"/en/errors/idempotency_conflict"},{"title":"insufficient_balance","href":"/en/errors/insufficient_balance"},{"title":"internal_error","href":"/en/errors/internal_error"},{"title":"invalid_api_key","href":"/en/errors/invalid_api_key"},{"title":"no_couriers_available","href":"/en/errors/no_couriers_available"},{"title":"not_cancellable","href":"/en/errors/not_cancellable"},{"title":"not_editable","href":"/en/errors/not_editable"},{"title":"not_found","href":"/en/errors/not_found"},{"title":"not_reactivatable","href":"/en/errors/not_reactivatable"},{"title":"not_refundable","href":"/en/errors/not_refundable"},{"title":"not_reschedulable","href":"/en/errors/not_reschedulable"},{"title":"not_retriable","href":"/en/errors/not_retriable"},{"title":"order_too_large","href":"/en/errors/order_too_large"},{"title":"out_of_service_area","href":"/en/errors/out_of_service_area"},{"title":"payout_account_not_ready","href":"/en/errors/payout_account_not_ready"},{"title":"pickup_point_pending","href":"/en/errors/pickup_point_pending"},{"title":"plan_ended","href":"/en/errors/plan_ended"},{"title":"plan_required","href":"/en/errors/plan_required"},{"title":"provider_unavailable","href":"/en/errors/provider_unavailable"},{"title":"quote_consumed","href":"/en/errors/quote_consumed"},{"title":"quote_expired","href":"/en/errors/quote_expired"},{"title":"rate_limited","href":"/en/errors/rate_limited"},{"title":"read_only_key","href":"/en/errors/read_only_key"},{"title":"refund_amount_too_large","href":"/en/errors/refund_amount_too_large"},{"title":"resend_limit_reached","href":"/en/errors/resend_limit_reached"},{"title":"same_day_below_minimum","href":"/en/errors/same_day_below_minimum"},{"title":"same_day_cap_exceeded","href":"/en/errors/same_day_cap_exceeded"},{"title":"test_webhook_limit_reached","href":"/en/errors/test_webhook_limit_reached"},{"title":"unsupported_country","href":"/en/errors/unsupported_country"},{"title":"validation_failed","href":"/en/errors/validation_failed"},{"title":"webhook_endpoint_not_configured","href":"/en/errors/webhook_endpoint_not_configured"}]},{"group":"Reference","pages":[{"group":"Balance","pages":[{"title":"Read your prepaid balance","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/balance","href":"/api-reference/balance/read-your-prepaid-balance"},{"title":"Read a store's balance","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/stores/{store_id}/balance","href":"/api-reference/balance/read-a-stores-balance"}]},{"group":"Account connection","pages":[{"title":"Ask a restaurant to connect its account","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/connect_requests","href":"/api-reference/account-connection/ask-a-restaurant-to-connect-its-account"},{"title":"Exchange an approval for the store","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/connections","href":"/api-reference/account-connection/exchange-an-approval-for-the-store"}]},{"group":"Deliveries","pages":[{"title":"List deliveries","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/deliveries","href":"/api-reference/deliveries/list-deliveries"},{"title":"Create a delivery","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/deliveries","href":"/api-reference/deliveries/create-a-delivery"},{"title":"Cancel a delivery","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/deliveries/{delivery_id}/cancellations","href":"/api-reference/deliveries/cancel-a-delivery"},{"title":"Refund a delivery","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/deliveries/{delivery_id}/refunds","href":"/api-reference/deliveries/refund-a-delivery"},{"title":"Retry a failed dispatch","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/deliveries/{delivery_id}/retries","href":"/api-reference/deliveries/retry-a-failed-dispatch"},{"title":"Fetch a delivery","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/deliveries/{id}","href":"/api-reference/deliveries/fetch-a-delivery"},{"title":"Update a delivery","deprecated":null,"version":null,"openapi":"/openapi/en.yaml patch /v1/deliveries/{id}","href":"/api-reference/deliveries/update-a-delivery"}]},{"group":"Events","pages":[{"title":"List your webhook events","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/events","href":"/api-reference/events/list-your-webhook-events"},{"title":"Send a webhook event again","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/events/{event_id}/resend","href":"/api-reference/events/send-a-webhook-event-again"},{"title":"Retrieve a webhook event","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/events/{id}","href":"/api-reference/events/retrieve-a-webhook-event"},{"title":"Send a test webhook","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/test_webhooks","href":"/api-reference/events/send-a-test-webhook"}]},{"group":"Ledger","pages":[{"title":"List your ledger entries","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/ledger","href":"/api-reference/ledger/list-your-ledger-entries"},{"title":"List a store's ledger entries","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/stores/{store_id}/ledger","href":"/api-reference/ledger/list-a-stores-ledger-entries"}]},{"group":"Authentication","pages":[{"title":"Check that your API key works","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/ping","href":"/api-reference/authentication/check-that-your-api-key-works"}]},{"group":"Quotes","pages":[{"title":"Price a delivery","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/quotes","href":"/api-reference/quotes/price-a-delivery"}]},{"group":"Request logs","pages":[{"title":"List your request log","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/request_logs","href":"/api-reference/request-logs/list-your-request-log"},{"title":"Retrieve a request log entry","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/request_logs/{id}","href":"/api-reference/request-logs/retrieve-a-request-log-entry"}]},{"group":"Stores","pages":[{"title":"List your stores","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/stores","href":"/api-reference/stores/list-your-stores"},{"title":"Create a store","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/stores","href":"/api-reference/stores/create-a-store"},{"title":"Fetch a store","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/stores/{id}","href":"/api-reference/stores/fetch-a-store"},{"title":"Update a store","deprecated":null,"version":null,"openapi":"/openapi/en.yaml patch /v1/stores/{id}","href":"/api-reference/stores/update-a-store"},{"title":"Invite a store owner","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/stores/{store_id}/owner","href":"/api-reference/stores/invite-a-store-owner"},{"title":"Reactivate a store's plan","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/stores/{store_id}/plan","href":"/api-reference/stores/reactivate-a-stores-plan"},{"title":"Cancel a store's plan","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/stores/{store_id}/plan_cancellation","href":"/api-reference/stores/cancel-a-stores-plan"},{"title":"Undo a store's plan cancellation","deprecated":null,"version":null,"openapi":"/openapi/en.yaml delete /v1/stores/{store_id}/plan_cancellation","href":"/api-reference/stores/undo-a-stores-plan-cancellation"}]},{"group":"Card onboarding","pages":[{"title":"Start card onboarding for a store","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/stores/{store_id}/stripe_onboarding","href":"/api-reference/card-onboarding/start-card-onboarding-for-a-store"},{"title":"Read a store's card readiness","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/stores/{store_id}/stripe_status","href":"/api-reference/card-onboarding/read-a-stores-card-readiness"},{"title":"Start card onboarding for your company","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/stripe_onboarding","href":"/api-reference/card-onboarding/start-card-onboarding-for-your-company"},{"title":"Read your company's card readiness","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/stripe_status","href":"/api-reference/card-onboarding/read-your-companys-card-readiness"}]},{"group":"Webhook deliveries","pages":[{"title":"List webhook delivery attempts","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/webhook_deliveries","href":"/api-reference/webhook-deliveries/list-webhook-delivery-attempts"}]},{"group":"Withdrawals","pages":[{"title":"List your withdrawals","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/withdrawals","href":"/api-reference/withdrawals/list-your-withdrawals"},{"title":"Request a withdrawal","deprecated":null,"version":null,"openapi":"/openapi/en.yaml post /v1/withdrawals","href":"/api-reference/withdrawals/request-a-withdrawal"},{"title":"Fetch a withdrawal","deprecated":null,"version":null,"openapi":"/openapi/en.yaml get /v1/withdrawals/{id}","href":"/api-reference/withdrawals/fetch-a-withdrawal"}]},{"group":"Webhooks","pages":[{"title":"A delivery reached a new status","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook delivery.status_changed","href":"/api-reference/webhooks/a-delivery-reached-a-new-status"},{"title":"A delivery changed without changing status","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook delivery.updated","href":"/api-reference/webhooks/a-delivery-changed-without-changing-status"},{"title":"The courier moved","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 message to the customer of a test delivery was not sent","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook delivery.message_skipped","href":"/api-reference/webhooks/a-message-to-the-customer-of-a-test-delivery-was-not-sent"},{"title":"A withdrawal was settled","description":"Sent when a withdrawal stops being a request: it was paid, or it failed.\nA withdrawal that is still `pending` announces nothing, because you\nalready hold that state as the create response.\n\nThis is the only way you learn the outcome. It is settled by a human\nhours or days later, with no request of yours in flight to answer.\n","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook withdrawal.updated","href":"/api-reference/webhooks/a-withdrawal-was-settled"},{"title":"A store changed","version":null,"deprecated":null,"openapi":"/openapi/en.yaml webhook store.updated","href":"/api-reference/webhooks/a-store-changed"},{"title":"A restaurant connected its existing account to you","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-message-to-the-customer-of-a-test-delivery-was-not-sent"}]}]},"basePath":"","title":"A message to the customer of a test delivery was not sent - Listo Partner API","buildId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","deploymentId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CBsVopKK.js","utils-DZAk68jJ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-D32AYZrP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D_A5_cny.js","snippetPresets-xNRfS9th.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BIB25-tq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CydJ4w4j.js","shallow-CYPBeQSG.js","getApiPlaygroundDisplay-A5xJVBOu.js","CodeSnippet-BVRTgi3m.js","CodeSnippets-DjD6BSlt.js","Page-Dr40SSJq.js","getPastedJson-D4V4JyrR.js","icon-uhcnG22T.js","MethodPill-CM-ZQdGH.js","DuplicateIcon-B_WnOiNf.js","createIcon-CJsb8utt.js","DynamicMarkdown-D-2HDKEp.js","SectionHeading-KP5xmMgQ.js","axios-vUo_bRtp.js","Markdown-D_k0dg6k.js","clsx-DK3K4Z1S.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DE3EVdvd.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-fN9H9n9g.js"]}