Skip to main content

Local Pickup Options

local_pickup_options functions return a list of merchant-owned pickup locations (store, warehouse, kiosk) that the customer can choose instead of having the order shipped. Use it for:
  • Buy-online-pickup-in-store (BOPIS).
  • Curbside pickup at a specific retail address.
  • “Pick up at our warehouse” for B2B customers.
For carrier-operated parcel lockers / partner pickup points (e.g. DHL Packstation, UPS Access Point) use pickup_point_options instead.
Dispatch is live; the customer-facing UI is pending. Installed local_pickup_options functions fire on every cart verification (consuming your daily execution quota), and their results are returned in the verifyCart response as localPickupOptions[]. What’s still pending is the checkout UI consumer that lets the customer pick one of these options — until it ships, returned options are not yet shown to customers.

Manifest

inputFields is an object of booleans (or nested objects), never an array — each leaf must be true/false. Requesting a field as an array of names fails install validation with a 400. See Input Fields. Per-shop cap: 5 active local_pickup_options apps. WASM execution timeout: 1500ms (configurable via WASM_TIMEOUT_LOCAL_PICKUP_OPTIONS).

Input

There is no cart.cost, no countryCode / postalCode, and no latitude / longitude on the shipping address — country arrives as country and the postal code as zip.

Output

Return an empty pickupOptions: [] to opt out of offering pickup for this cart (e.g. when the cart contains items not stocked at any pickup location).

Example — Two retail locations, filtered by destination

Persistence

The options your function returns are computed and merged into the verifyCart response only — they are not persisted to the order. There is no additionalFields.localPickupOptions field, and the order’s shipping address is not rewritten to a merchant location. As noted at the top of this page, the checkout consumer that would let a customer select one of these options ships in the delivery-options release.

When customers see what

As noted at the top of this page, the options returned by local_pickup_options functions are not yet shown to customers. Today the checkout shipping step only renders native warehouse-backed pickup (options where sourceKind === 'warehouse'); app-supplied options (source: 'local_pickup') are excluded until the delivery-options consumer is enabled. There is no order_ready_for_pickup email topic.

See also