POST
/api/v1/logistics/quoteQuote a shipment
Returns a rate + ETA from every enabled carrier (Uber Direct, Fez, inDrive) for an arbitrary pickup → dropoff with parcels. No shipment is created — this is purely a price-and-ETA lookup. Providers that can't handle the parcel (weight too high, no cold chain, no signed delivery, dimensions too large) are filtered before quoting and surfaced in the `excluded` array with a per-carrier reason. Carriers that fail to quote (out of coverage, rate-limited, credentials missing) show up separately in `failures`.
Authorization
Requires the logistics:read scope. See the auth guide for how to mint a token with the right scopes.
Parameters
Body parameters
| Field | Type | Description |
|---|---|---|
pickup required | object | Pickup point — { lat, lng, address, city?, state?, country? }. e.g. { "lat": 6.4419, "lng": 3.4710, "address": "15 Adeola Odeku, Victoria Island", "city": "Lagos", "state": "Lagos", "country": "NG" } |
dropoff required | object | Dropoff point — same shape as `pickup`. e.g. { "lat": 6.6018, "lng": 3.3515, "address": "Allen Avenue, Ikeja", "city": "Lagos", "state": "Lagos", "country": "NG" } |
parcels required | object | Array of parcels — [{ weightKg, valueKobo, description?, lengthCm?, widthCm?, heightCm?, fragile?, signedDelivery?, temperature?, category?, insuredValueKobo? }]. At least one required. e.g. [{ "weightKg": 1.2, "valueKobo": 1250000, "description": "Prescription pack", "temperature": "chilled", "category": "pharmacy", "fragile": true }] |
lengthCm optional | number | Per-parcel longest side in cm. Used to filter providers whose vehicle class can't carry it (e.g. bicycle couriers reject crates). e.g. 35 |
widthCm optional | number | Per-parcel width in cm. Filters providers whose max-girth (L+W+H) limit rejects the parcel. e.g. 25 |
heightCm optional | number | Per-parcel height in cm. Filters providers whose max-girth (L+W+H) limit rejects the parcel. e.g. 15 |
fragile optional | boolean | When true, only quote carriers that handle fragile goods (extra padding, gentle handling). Driver instructions include 'Fragile — handle with care'. e.g. true |
signedDelivery optional | boolean | When true, only quote carriers that capture a signature at dropoff. Required for electronics / high-value retail. e.g. false |
temperature optional | string | Cold-chain class. "ambient" (default), "chilled" (2-8°C), or "frozen" (sub-zero). Filters to providers with matching cold-chain support — the pharmacy unlock. e.g. ambient |
category optional | string | Vertical hint — one of "documents", "food", "pharmacy", "electronics", "fashion", "general". Surfaces in dispatch instructions and biases selection toward providers whose preferred verticals match. e.g. pharmacy |
insuredValueKobo optional | number | Declared value for insurance, in kobo. Defaults to `valueKobo`. When set above a carrier's default insured ceiling, the quote still runs but flags under-insurance. e.g. 1250000 |
serviceLevel optional | string | Optional. "express" (same-day, default) or "standard" (next-day). e.g. express |
Response
A successful call returns 200 OK with the body shown to the right. Errors follow the standard envelope.