# Delivery quotes

> What delivery would cost for some variants to a destination, before any checkout exists, through UCP REST, UCP MCP, A2A and the shop's MCP server.

Source: https://storeware.ai/docs/agents/delivery-quotes

An agent comparing shops can ask what delivery costs without opening a basket. The quote uses the checkout's own rates, carriers and apps, so it is the menu a checkout then offers for the same goods and address. Nothing is written and no stock is held.

It is declared on the shop's profile as `ai.storeware.shopping.delivery_quote`, with its schema at `https://api.storeware.ai/schemas/ucp/2026-11-11/delivery_quote.json`. Any agent key that may browse can ask. No shopper needs to be behind the key, and a key a shopper linked is quoted at that shopper's prices.

| Transport             | Call                                               |
| --------------------- | -------------------------------------------------- |
| UCP REST              | `POST /api/ucp/v1/delivery-quote`                  |
| UCP MCP and A2A       | `quote_delivery`, with the arguments beside `meta` |
| The shop's MCP server | `quote_delivery` at [`/mcp`](https://storeware.ai/docs/agents/mcp)          |

## Asking

```json
{
  "destination": { "country": "GB", "postal_code": "E1 6AN" },
  "line_items": [{ "variant_id": "6f1c...", "quantity": 2 }],
  "currency": "GBP"
}
```

`destination.country` is a two-letter code and is required. `region` and `postal_code` are optional, and a postcode lets a shop that prices by region, or by a carrier's live rates, give its real price. `currency` defaults to the shop's own.

## The answer

Each option has an `id`, a `title`, `amount_minor` in `currency`, and `earliest_delivery_at` and `latest_delivery_at` when the shop models how long delivery takes. `source` says whether it came from the shop's own rates, a carrier or an app the shop installed. The `id` is the one a checkout's fulfilment option carries for the same service.

Each option also has a `type`. `shipping` is posted to the destination. `pickup` is collected, free, from one of the shop's own locations in the destination's country that holds the goods, and carries that `location`, whose `id` is the one [location search](https://storeware.ai/docs/agents/pickup) answers with and a checkout takes as `selected_destination_id`.

`free_delivery_threshold`, when present, is the goods subtotal at which the shop's own rates make delivery free, with `remaining_minor` still to go. `goods_subtotal_minor` is what the goods come to.

A quote is priced before any discount. A discount code, or the shop's own checkout rules, can still lower a price or narrow the choice at checkout, and the answer says so in `messages`.

## When there is nothing to offer

No options is still an answer. `reason` says which of four it is, and `messages` says it in a sentence:

| `reason`             | Meaning                                                    |
| -------------------- | ---------------------------------------------------------- |
| `not_delivered_here` | The shop does not deliver to that country.                 |
| `nothing_fits`       | It delivers there, and none of its rates fits this basket. |
| `nothing_to_post`    | Every line is a download, so nothing is posted or charged. |
| `nothing_priced`     | None of the lines can be bought from this shop.            |

A line the shop would not put in a basket, such as one not for sale, is left out of the quote and named in `unpriced` with the reason.
