Quotes
A quote gives you an upfront price and estimated delivery time before you commit to creating a delivery. Quotes are valid for 15 minutes from creation. Service is currently available in British Columbia, Canada (Lower Mainland; expanding to other cities), with a 250 km maximum delivery distance.
Create a quote
/v1/quotesRequest a delivery quote with upfront pricing and ETA.
Parameters
pickupobjectrequiredPickup address. See address fields below.
dropoffobjectrequiredDropoff address. See address fields below.
customer.namestringoptionalRecipient name. Required at delivery creation if not provided here.
customer.phonestringoptionalRecipient phone in any common format. Stored as E.164 internationally.
customer.emailstringoptionalOptional recipient email for status notifications.
categorystringoptionalDelivery category. Defaults to "standard". Set to "alcohol" or "cannabis" to gate the delivery to certified drivers. The category set on the quote is authoritative, it is inherited by any delivery created from this quote and cannot be changed at delivery creation. See the Deliveries docs for the restricted-category gating rules.
Address fields
addressstringrequiredStreet address. Aliased as `street`.
citystringrequiredCity or locality.
statestringrequiredProvince or state code (e.g., BC, CA).
postal_codestringrequiredPostal or ZIP code.
countrystringrequiredISO 3166-1 alpha-2 code. Currently CA only.
latnumberoptionalLatitude. If you provide both lat and lng, geocoding is skipped.
lngnumberoptionalLongitude. If you provide both lat and lng, geocoding is skipped.
curl -X POST https:"color:#6a9955">//developer.zippex.app/api/v1/quotes \
-H "Authorization: Bearer zx_test_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"pickup": {
"address": "350 W Georgia St",
"city": "Vancouver",
"state": "BC",
"postal_code": "V6B 6B1",
"country": "CA"
},
"dropoff": {
"address": "2085 Main St",
"city": "Vancouver",
"state": "BC",
"postal_code": "V5T 3C3",
"country": "CA"
},
"customer": {
"name": "Alex Doe",
"phone": "+15551234567"
},
"category": "alcohol"
}'Response
{
"serviceable": true,
"quote_id": "qt_dr_4f8a2b1c0d3e6f",
"mode": "test",
"price": 1249,
"currency": "cad",
"category": "alcohol",
"eta_minutes": 35,
"expires_at": "2026-05-07T14:15:00.000Z",
"breakdown": {
"distance_km": 4.2,
"duration_min": 14
}
}Prices are returned as integer cents in cad.
Unserviceable addresses
When a route exceeds 250 km, falls outside our serviceable region, or cannot be geocoded, the response returnsserviceable: false with a human-readable reason. This is a 200 OK, it is not an error.
{
"serviceable": false,
"reason": "Delivery distance exceeds maximum service range (250 km)."
}Tip
serviceable before treating the response as a quote.Quote expiry
Quotes expire 15 minutes after creation. If you call POST /v1/deliveries with an expired quote, Zippex re-prices using current rates. If the new price drifts by more than 10%, the request returns 410 Gone with the new price; otherwise the delivery is created at the new price.
{
"error": {
"type": "invalid_request_error",
"code": "quote_expired_price_changed",
"message": "Quote expired and price has changed by more than 10%. Request a new quote."
},
"new_price": 1410
}Pricing details
Delivery fees are calculated based on distance, duration, regional pricing, and tax. The quote gives you the final price upfront, see Pricing for a full breakdown.