> ## Documentation Index
> Fetch the complete documentation index at: https://docs.launchmystore.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Local Delivery

> Deliver with your own drivers by postcode or radius, with delivery days, windows, runs and proof of delivery

# Local Delivery

For stores that deliver orders themselves: florists, bakeries, grocers,
restaurants and furniture stores. Comparable to the local-delivery half of
Zapiet or Pickeasy.

## For merchants

* **Zones** (Settings → Shipping → Local delivery zones), checked in order:
  * by postcode, with exact codes (`560001`), prefixes (`5600*`), numeric
    ranges (`560001-560099`) and UK outward codes (`SW1A`);
  * or by distance from your shop, with optional distance bands that set the fee.
* **Terms per zone**: delivery fee, free delivery over an amount, a minimum
  order, and an option to hide courier rates for addresses inside the zone.
* **Schedule per zone**: delivery days, time windows with an optional extra
  fee, a same-day cut-off, lead days, orders per window and orders per day.
  Closed dates apply to every zone.
* **At checkout**: shoppers inside a zone see a **Local delivery** rate. After
  they choose it, a picker below the address lets them pick a day and window.
  Below the minimum order, the picker shows how much more to add. The day is
  checked again when the order is placed, so a window cannot be overbooked.
* **Delivery runs** (Orders → Delivery runs): each day's stops, ordered by
  driving route or by postcode. From there you can assign drivers, send stops
  out for delivery, open Google Maps directions and print a run sheet.
* **Driver links**: every driver gets a link for the day that opens their stops
  on a phone. From it they navigate, call, and mark each stop delivered, with
  who received it, or record a failed attempt.
* **Per order**: a Local delivery panel shows the status, the driver, the
  history and the proof of delivery. From it you can reschedule the order, with
  an option to ignore capacity.
* **Shoppers are emailed** when the order is out for delivery, delivered, or
  missed. Every step also appears on the order's tracking timeline.

Distance zones and driving-order runs need your shop's location and an address
lookup provider. The options are OpenStreetMap (free, low volume) or Google
(with your own API key).

## For developers

| Contract | Used for |
| - | - |
| [`shipping_rate`](https://docs.launchmystore.io/functions/shipping-rate) | The "Local delivery" rate: zone fee or distance band, window surcharge, free-over and minimum order. The rate code is `LOCAL_<ZONE>`. |
| [`delivery_customization`](https://docs.launchmystore.io/functions/delivery-customization) | Hides every other option for addresses in a zone set to "local only". |
| [`order_validation`](https://docs.launchmystore.io/functions/order-validation) | Acts only when `cart.deliveryGroups[0].selectedDeliveryOption` is this app's rate. It then requires a day and re-checks capacity and cut-off. |
| [Checkout UI extension](https://docs.launchmystore.io/extensions/checkout-ui.md) at `checkout-shipping-after` | Day and window picker. Reads the address, subtotal and chosen option (`SHIPPING_ADDRESS_GET`, `COST_GET`, `DELIVERY_GROUPS_GET`) and stores the choice with `ATTRIBUTE_CHANGE`. |
| [`orders/create` / `orders/cancelled` webhooks](https://docs.launchmystore.io/api-reference/webhooks/topics) | Books the day and adds the order to that day's run, or releases both. Recognises its orders by `shipping_lines[].source`. |
| [Fulfillments API](https://docs.launchmystore.io/api-reference/fulfillments/create.md) timeline | `out_for_delivery`, `delivered` and `attempted_delivery` events, with the delivery estimate. |
| [App Proxy](https://docs.launchmystore.io/extensions/app-proxy.md) | The driver page at `/apps/local-delivery/driver`, opened from a signed per-driver, per-day link. |
| [Transactional email](https://docs.launchmystore.io/api-reference/email-templates/send.md) | Out-for-delivery, delivered and missed-delivery emails. |
| [Metafields](https://docs.launchmystore.io/api-reference/metafields/list.md) (`shop`, `order`) + app data | Zones and settings, the delivery record on each order, capacity counts, runs and route order. |

The choice travels as the cart attribute `local_delivery` = `YYYY-MM-DD|<zoneId>|<windowId>`.
The window id is empty for zones without windows. On the placed order, the
choice is available as `note_attributes`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.