---
agentTools:
  projectIndex: https://quiver.readme.io/llms.txt
---

# Collect from Store

Configure location-level collection and return stock-aware collection options at checkout.

Quiver can return store-collection options alongside delivery options. Collection is configured per fulfilment location, so customers only see stores that are enabled and can fulfil the complete basket.

## How collection availability works

Collection is stock-only in v1:

* A location must have **Collection enabled**.
* The location must have current stock for every product and quantity in the basket.
* Quiver does not arrange an inventory transfer to make a collection available.
* If no location meets these conditions, the quote will not contain a usable collection option. Depending on the integration, the response may contain a `QUIV_COL` rate with an `error` explaining why it is unavailable.

When several locations are eligible, Quiver returns a collection option for each one. Do not rely on the order of rates in checkout: Shopify and other platforms may reorder shipping methods for display.

## Shopify setup

1. Open the merchant's **Locations** settings in Quiver.
2. Enable **Collection** on every store that should be available for collection.
3. In **Settings → Delivery**, enable the merchant-level **Collect from Store** option.

The merchant-level checkout option is only available when at least one fulfilment location has collection enabled. A location can still be used for delivery without being collection-enabled.

For a Shopify merchant, keep the location's external identifier (for example, the Shopify location ID) in `merchantLocationId` / `externalLocationId`. This is the stable mapping used when a customer selects a particular store.

## Non-Shopify/API setup

The same location and quote behavior is available to API merchants. There is no Shopify checkout toggle: enable collection on the relevant fulfilment locations, then use the quote and task APIs described below. This is also the setup used by non-Shopify integrations such as Acre Pharmacy.

## Enable collection on a location

Use the Fulfilment Location API to create a location with collection enabled, or update an existing location:

```bash
curl -X PATCH \
  'https://api.quiver.london/fulfilment/fulfilment-locations/{fulfilmentLocationId}' \
  -H 'x-api-key: <api-key>' \
  -H 'Content-Type: application/json' \
  -d '{
    "collectionEnabled": true
  }'
```

Use `GET /fulfilment-locations` to verify the location. The response includes:

* `collectionEnabled` — whether the store can be returned for collection.
* `externalLocationId` — the merchant's location identifier used to map the store back to Shopify or another commerce platform.
* `address` — the address shown to customers in the collection description.
* `operatingHours` — the store hours used for collection readiness messaging.

## Get collection options with a quote

Call `POST /quotes` with the basket and customer details you would use to book the task. Inspect the returned `rates` array:

```json
{
  "rates": [
    {
      "rateCode": "QUIV_COL",
      "name": "Collect from Store — Soho",
      "description": "Collect your order from our store at 1 Soho Road.",
      "price": 0
    }
  ]
}
```

Each eligible location is represented by a collection rate. The name and description identify the store and its address. Use a fresh quote when the customer changes the basket or address; quote results and availability can change as inventory changes.

## Book the selected store

When the customer selects collection, create the task with:

* `rateCode: "QUIV_COL"`.
* A `collection` part containing the selected store's `merchantLocationId`.
* The same customer and order details used for the quote.

The location identifier should come from the fulfilment-location response, not from a display name. This prevents two stores with similar names from being mapped to the wrong fulfilment location.

## Cutoff and readiness messaging

The collection rate is not removed when a store reaches its collection cutoff. Instead, the description changes to the next available collection opening in the store's local timezone. For example:

> Collect from 1 Soho Road. Ready for collection tomorrow from 10:30.

Quiver uses the merchant's configured collection cutoff (45 minutes before closing is the standard configuration). A location-specific cutoff or after-cutoff description can override the merchant default.

## Troubleshooting

**No collection option appears**

Check that at least one location has `collectionEnabled: true`, the location is ecommerce-enabled for collection, and every item in the basket has current stock there.

**The merchant-level Shopify toggle cannot be enabled**

Enable collection on at least one fulfilment location first, then return to **Settings → Delivery**.

**The wrong store is booked**

Re-query fulfilment locations and compare the selected store's `externalLocationId` with the `collection.merchantLocationId` sent when creating the task. Do not use a store name as the identifier.

**Delivery options disappear when collection is available**

Collection and delivery are independent rates. Check that the merchant's delivery-enabled fulfilment location and delivery configuration are still active; a collection rate does not intentionally suppress delivery rates.