Reference
Served areas
GET
/api/v1/coveragescope coverage:readServed zones, vehicles and parcel limits.
Possible errors
unauthorized · 401Missing or invalid API key.rate_limited · 429Too many requests. Retry after the indicated delay.
Create a quote
POST
/api/v1/quotesscope quotes:createComputes a no-commitment price. The price is locked for its validity period (configurable) and can be used once. Size and weight limits depend on the vehicle.
Parameters
pickupobject, required{ lat, lng } of the pickup placedropoffobject, required{ lat, lng } of the delivery placevehiclestringmoto (default), velo, voiture, camionnette, piedparcel.sizestringenvelope, small, medium, largeparcel.weightstringlt5, 5to15, gt15parcel.fragilebooleanAdds the fragile supplement
curl https://kolis.delivery/api/v1/quotes \
-H "Authorization: Bearer $KOLIS_KEY" \
-H "Content-Type: application/json" \
-d '{
"pickup": { "lat": 4.0511, "lng": 9.7679 },
"dropoff": { "lat": 4.0700, "lng": 9.7900 },
"vehicle": "moto",
"parcel": { "size": "medium", "fragile": true }
}'{
"id": "5d0b…",
"object": "quote",
"mode": "test",
"price": 2150,
"currency": "XAF",
"distance_m": 3100,
"breakdown": { "distance": 1750, "size": 300, "weight": 0, "fragile": 100 },
"expires_at": "2026-11-10T10:15:00Z"
}Possible errors
invalid_input · 400Missing or invalid parameter.parcel_too_big · 422The parcel exceeds this vehicle's limits. Choose a larger vehicle.not_covered · 422Address outside the served areas.rate_limited · 429Too many requests. Retry after the indicated delay.
Create a delivery
POST
/api/v1/deliveriesscope deliveries:createCreates the delivery from a quote. The Idempotency-Key header is required: the same key and body replay the same response.
Possible errors
idempotency_key_required · 400The Idempotency-Key header is required to create a delivery.insufficient_balance · 402Insufficient prepaid balance.quote_expired · 409The quote has expired. Request a new one.quote_used · 409This quote has already been used.duplicate_external_ref · 409This external reference already exists.
List deliveries
GET
/api/v1/deliveriesscope deliveries:readCursor pagination; filters status, external_ref, created_after, created_before.
Possible errors
invalid_cursor · 400Invalid pagination cursor.rate_limited · 429Too many requests. Retry after the indicated delay.
Get a delivery
GET
/api/v1/deliveries/{id}scope deliveries:readStatus, price, references.
Possible errors
not_found · 404Resource not found.
Cancel a delivery
POST
/api/v1/deliveries/{id}/cancelscope deliveries:cancelBefore pickup only; full refund to the balance.
Possible errors
cannot_cancel_after_pickup · 409Cannot cancel: the parcel has been picked up.not_found · 404Resource not found.
Tracking
GET
/api/v1/deliveries/{id}/trackingscope tracking:readStatus, history and approximate courier position (if enabled for your account). Never a full name or phone number.
Possible errors
tracking_disabled · 403Tracking is not enabled for this account.not_found · 404Resource not found.
Proof of delivery
GET
/api/v1/deliveries/{id}/proofscope deliveries:readHandover confirmed by the code.
Possible errors
bad_status · 409Action not possible in the delivery's current state.not_found · 404Resource not found.
Prepaid balance
GET
/api/v1/balancescope balance:readLive balance; unlimited in test mode.
Possible errors
unauthorized · 401Missing or invalid API key.