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

# Pick-Up Point Selector

> Let shoppers choose a nearby parcel locker, parcel shop or service point inside your checkout, from the same widget that shows the delivery date.

**Available to all Checkout customers.** The selector renders inside the Checkout EDD Widget, so the widget must be live on your checkout page first.

## Summary

The Pick-Up Point Selector lets shoppers browse and choose a nearby pick-up location (PUDO: pick-up, drop-off) directly inside your checkout flow, as an alternative to home delivery. It lists the closest lockers, parcel shops and service points with address, opening hours and distance, shows them on a map, and holds the checkout until one is chosen.

## Who it’s for

Brands selling in markets where pick-up, parcel-shop or parcel-locker delivery is a significant share of e-commerce, such as Germany, France, Spain, the Benelux, the Nordics, Poland, Czechia and parts of Asia-Pacific. It also serves operations and customer service teams who want fewer failed first-attempt deliveries and the support contacts that follow them.

## Key benefits

* **More delivery choice at checkout.** Pick-up becomes a first-class option alongside home delivery, without the shopper leaving the checkout.
* **Fewer failed deliveries.** A share of “where is my order” queries on home delivery comes from failed first attempts (no one home, incorrect address, restricted building access). Pick-up chosen up front avoids them.
* **One integration across carriers.** Location data comes through the PUDO Locations API, which aggregates and normalises pick-up networks across supported carriers.
* **The closest points first.** Locations are sorted by distance to the shopper’s address, re-sort when the address changes, and can be refined by postal code.
* **No order without a pick-up point.** When pick-up is the chosen shipping method, checkout cannot complete until a location is selected.

## How it works

The flow below is the default experience; the UI and flow are adapted to your preferences during onboarding.

### Viewing locations

When a shopper selects pick-up as the shipping method, the widget shows a list of nearby locations based on the postal code and address already provided in the checkout. The shopper does not enter anything twice.

Each location shows its name, address, opening hours where available, and distance from the shopper’s address. Up to five locations are shown by default, with an **Expand** option to see all locations returned for that postal code; the number can be adjusted per customer. A loading indicator appears while results are fetched.

### Map view

Shoppers can toggle a map with a marker for each location, on desktop and mobile. Tapping a marker scrolls to and highlights the matching location card; tapping a card expands its details.

### Search and refinement

If the default results are not what the shopper wants, they can enter a different postal code and both the list and the map update.

### Selection and dynamic updates

The shopper selects a location by tapping its card. The selection is clearly indicated before payment, with the option to change it. If the shopper changes the shipping address mid-checkout, the list and the sorting refresh automatically for the new postal code.

### Blocking validation

Where pick-up is the chosen method, checkout cannot complete without a location selected. On Shopify the app blocks **Continue to payment** until a pick-up point is chosen and writes the chosen pick-up point ID onto the order. There is nothing to toggle.

### If locations cannot be loaded

The shopper sees a fallback message (“We couldn’t load pickup locations right now. Please try again, or enter a different postal code.”) and can retry, try a different postal code or switch to a different shipping method such as home delivery. The checkout does not dead-end.

### Delivery date and pick-up points

The estimated delivery date is calculated for home delivery on the shipping address. No delivery date is shown per pick-up location.

### Supported carriers

| Carrier | Country coverage | Location types |
| - | - | - |
| DHL Paket | Germany | Service Point, Post Office, Parcel Locker, Post Box, Post Bank, PO Box |
| Hermes DE | Germany | Parcel Shop |
| DPD Germany | Germany | Parcel Shop |
| InPost | Poland | Parcel Locker, Parcel Point, Parcel Locker Superpop |
| PostNord | Sweden, Finland, Denmark, Norway | Post Office, Service Point, Parcel Shop, Parcel Locker, and others |
| Bring | Sweden, Finland, Denmark, Norway | Post Office, Service Point, Parcel Shop, Parcel Locker, and others |
| UPS | US, EU | Service Point, Parcel Locker |
| Mondial Relay | France | Service Point |
| Colissimo | France | Service Point, Post Office, Parcel Locker, Parcel Shop, and others |
| bPost | Belgium | Post Office, Service Point, Parcel Locker, Parcel Shop |
| Packeta | Czechia | Service Point, Parcel Locker |

Location types are normalised across carriers into a standard set (Service Point, Post Office, Parcel Locker, Parcel Shop, Others), so the selector presents the same experience whichever carrier is behind a location. Pick-up is configured per country: you decide the markets and the carriers shown in each, and Perform.AI configures them. Confirm the latest coverage for your carrier mix with your account team.

### Languages

The widget UI is translated, and labels are chosen automatically from the shipping destination country. Localised pick-up shipping option labels are available in French and Spanish, with further languages added during onboarding. On Shopify these strings are bundled inside the extension and are not editable in Shopify’s theme content or checkout language settings; provide the final copy for every language up front.

## Set up in the portal

### Shopify

For Shopify stores, Perform.AI builds a Checkout UI Extension app and sends you a custom install link tied to your store. You need a Shopify Plus plan, checkout extensibility active, and a user with **Apps and channels** and **Settings** permissions.

1. Open the install link in your Shopify admin, review the requested access scopes and select **Install app**. If you see “This app isn’t approved for distribution”, tell Perform.AI; your store domain must be added to the app’s distribution list first.
2. Go to **Settings** > **Checkout**, select **Customize** on the active checkout profile, open the **Shipping** step, select **Add app block**, choose the Perform.AI pick-up point block, place it and save. Installing the app does not make the block appear on its own.
3. Approve the app in the checkout authorization prompt so it also appears in Shop Pay, which runs on a separate domain.
4. The map is powered by a Google Maps JavaScript API key restricted by HTTP referrer. Add every storefront domain and `shop.app` to the key’s referrer allowlist. A blank map almost always means the current domain is missing from that list.
5. Test both checkout paths (guest checkout in an incognito window, and Shop Pay) for every market: confirm the list and map load, the right carriers show, the copy is in the right language, a point can be selected, checkout cannot continue without one, the list refreshes when the address changes, and the pick-up point ID is present on a test order.

See [Shopify integration](https://developers.perform.ai/integrations/shopify.md).

## Use via API and MCP

* Guide: [Retrieve PUDO locations](https://developers.perform.ai/guides/pudo-locations.md) searches pick-up points by postal code, coordinates or location ID across your configured carriers and returns a carrier-agnostic `pudo_location_uuid`.
* Guide: [Create a Booking](https://developers.perform.ai/guides/create-booking.md) passes that `pudo_location_uuid` in the booking request. Perform.AI resolves it to the carrier-specific ID, validates shipping service compatibility, location validity and carrier acceptance, and routes the parcel to the pick-up point while the shopper’s home address stays on the booking. The booked location, with its type, name, address and opening hours, is shown in the portal under **Shipment Details** and **Booking Details**.
* API reference: [Retrieve PUDO locations](https://developers.perform.ai/api-reference/v5/pudo-locations/retrieve-pudo-locations.md) and [Create booking](https://developers.perform.ai/api-reference/v5/booking/create-booking.md).
* MCP: `list_carriers` filters the carrier catalogue by retrievable data points and booking type, including pick-up point support. Documented on [MCP tools](https://developers.perform.ai/mcp/tools.md).

Outbound PUDO booking is live for PostNord, DPD DE, Colissimo and InPost, with further carriers added after carrier assessment. See [PUDO Delivery](https://developers.perform.ai/products/logistics/pudo-delivery.md).

## FAQ

### Which checkout platforms is this available on?

The selector is delivered as part of the Checkout EDD Widget, so it is available wherever the widget is supported. On Shopify it runs as a Checkout UI Extension app on the Shipping step.

### How are pick-up locations found?

By matching the postal code on the shopper’s checkout address. Shoppers can refine results by entering a different postal code.

### How many locations are shown?

Up to five by default, with an **Expand** option to see all locations returned for that postal code. The default can be adjusted; talk to your onboarding contact.

### Does selecting a pick-up location change the delivery estimate?

Not currently. The estimated delivery date is calculated for home delivery on the shipping address and is not shown per pick-up location.

### Is the widget translated?

The widget UI is translated. Pick-up shipping option labels are available in French and Spanish, with additional languages added during onboarding.

## Troubleshooting

| Symptom | Cause | Fix |
| - | - | - |
| The map is blank or shows a maps error | The current domain is not on the maps API key’s referrer allowlist | Add every storefront domain and `shop.app` to the allowlist; changes take a few minutes to propagate. |
| The map works in Shop Pay but not in guest checkout, or the reverse | Only some domains are on the allowlist | List all storefront domains and `shop.app`. |
| The selector does not appear in the Shopify checkout | The app block was not added, the store is not on Shopify Plus, or Shop Pay authorization is pending | Add the block under **Settings** > **Checkout** > **Customize**, confirm the plan, approve the app for Shop Pay. |
| Orders go through without a pick-up point | The blocking validation is not behaving as expected | Flag it to your account team; there is nothing to toggle on your side. |
| The list shows locations nowhere near the shopper | The address or postal code on the page did not reach the widget | Check the checkout address inputs; the shopper can also refine by postal code. |

## Related

* [Checkout EDD Widget](https://developers.perform.ai/products/checkout/checkout-edd-widget.md)
* [EDD Prediction Model](https://developers.perform.ai/products/checkout/edd-prediction-model.md)
* [PUDO Delivery](https://developers.perform.ai/products/logistics/pudo-delivery.md)
* [Multi-Carrier Shipping](https://developers.perform.ai/products/logistics/multi-carrier-shipping.md)
* [Checkout overview](https://developers.perform.ai/products/checkout/overview.md)


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