Public beta

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

POST/v1/quotes

Request a delivery quote with upfront pricing and ETA.

Parameters

pickupobjectrequired

Pickup address. See address fields below.

dropoffobjectrequired

Dropoff address. See address fields below.

customer.namestringoptional

Recipient name. Required at delivery creation if not provided here.

customer.phonestringoptional

Recipient phone in any common format. Stored as E.164 internationally.

customer.emailstringoptional

Optional recipient email for status notifications.

categorystringoptional

Delivery 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

addressstringrequired

Street address. Aliased as `street`.

citystringrequired

City or locality.

statestringrequired

Province or state code (e.g., BC, CA).

postal_codestringrequired

Postal or ZIP code.

countrystringrequired

ISO 3166-1 alpha-2 code. Currently CA only.

latnumberoptional

Latitude. If you provide both lat and lng, geocoding is skipped.

lngnumberoptional

Longitude. 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

200 OK
{
  "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.

200 OK (unserviceable)
{
  "serviceable": false,
  "reason": "Delivery distance exceeds maximum service range (250 km)."
}

Tip

Always check 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.

410 Gone
{
  "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.