API reference/Logistics
POST/api/v1/logistics/quote

Quote 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

FieldTypeDescription
pickup
required
objectPickup 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
objectDropoff 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
objectArray 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
numberPer-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
numberPer-parcel width in cm. Filters providers whose max-girth (L+W+H) limit rejects the parcel.
e.g. 25
heightCm
optional
numberPer-parcel height in cm. Filters providers whose max-girth (L+W+H) limit rejects the parcel.
e.g. 15
fragile
optional
booleanWhen true, only quote carriers that handle fragile goods (extra padding, gentle handling). Driver instructions include 'Fragile — handle with care'.
e.g. true
signedDelivery
optional
booleanWhen true, only quote carriers that capture a signature at dropoff. Required for electronics / high-value retail.
e.g. false
temperature
optional
stringCold-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
stringVertical 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
numberDeclared 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
stringOptional. "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.