Quotes
A quote prices a delivery without booking it. You book against the quote afterwards, so the price you saw is the price you pay — it cannot change between agreeing it and booking it.
POST /v1/quotesRequest
Section titled “Request”| Field | Type | |
|---|---|---|
pickup |
object | Required. latitude, longitude, and optionally postcode. |
dropoff |
object | Required. The same shape. |
vehicle |
string | bicycle, electric_bicycle, motorcycle, car or van. Omitted means the smallest vehicle the market offers — almost always the cheapest. |
weight_grams |
integer | The consignment’s weight, which selects the price bracket. Omitted means 0. |
scheduled_for |
string | When the delivery will happen, if not now. A job booked on Tuesday for Friday evening is priced for Friday evening. |
Coordinates are required and the postcode is optional. A coordinate is unambiguous; a postcode only
matters in areas priced by postcode rather than drawn on a map. If you only have an address, look it up
first with GET /v1/places.
curl -u "$COURIER_KEY:$COURIER_SECRET" "$COURIER_API/v1/quotes" \ -H 'Content-Type: application/json' \ -d '{ "pickup": { "latitude": 51.5080, "longitude": -0.1281 }, "dropoff": { "latitude": 51.5081, "longitude": -0.0759, "postcode": "EC3N 4DJ" }, "vehicle": "bicycle", "weight_grams": 2500 }'Response
Section titled “Response”201 Created:
{ "id": "0199d2c4-6b1e-7a42-9c35-2f0d8e1b7a10", "currency": "GBP", "total_amount_minor": 918, "total": "9.18 GBP", "distance_metres": 4454, "estimated_duration_seconds": 1047, "vehicle": "bicycle", "expires_at": "2026-10-10T12:14:00+00:00", "breakdown": [ { "code": "base_fare", "description": "Base fare", "amount_minor": 300 }, { "code": "distance", "description": "Distance (2.77 mi)", "amount_minor": 249 }, { "code": "duration", "description": "Journey time (18 min)", "amount_minor": 216 }, { "code": "tax", "description": "VAT (20%)", "amount_minor": 153 } ], "price_book_version": 1}total_amount_minoris what you will be charged.totalis the same amount formatted for people.breakdownlists what the price is made of — lines such asbase_fare,distance,duration,surge,minimum_fare,merchant_adjustmentandtax. They add up to the total.expires_atis ten minutes after the quote was made. Book before then.distance_metresandestimated_duration_secondscome from the same road network as the price.
When a quote is refused
Section titled “When a quote is refused”Refusals are 422 Unprocessable Entity with an error body. The common ones:
code |
Meaning |
|---|---|
pricing.origin_not_covered |
The pickup is outside the areas we serve. |
pricing.destination_not_covered |
The drop-off is outside the areas we serve. |
pricing.no_route |
No route exists between the two points for that vehicle. |
pricing.vehicle_not_available |
That vehicle isn’t offered in your market. |
request.unknown_vehicle |
The vehicle isn’t one of the five names above. |
request.invalid_pickup, request.invalid_dropoff |
The coordinates aren’t a point on Earth. |