Skip to main content

Deliveries across Nigeria, along inter-state routes

Reeds Engineering
Reeds Engineering
Developer platform

Reeds now delivers across Nigeria. Until today the Shipping API served deliveries within Lagos only.

Updated on 2026-11-10

Inter-state deliveries no longer carry VAT or a service charge: the total is the route's price. See Inter-state prices without VAT.

Inter-state routes​

  • A route is priced as one figure. Between two states, a delivery runs along an inter-state route that Reeds has set up, through a hub at each end: Reeds' own, or a partner's in the destination state. The price is one price per route, not by distance or weight. A rate card doesn't apply to it. VAT and rounding work as within a state.
  • route.type is interstate, and route.distance_km is null. route.type was direct or via_hub. route.distance_km was always a number. Within a state, both are as before.
  • service is interstate. It was always standard.
  • The schedule is in working days. The pickup day follows the same cut-offs. schedule.earliest_delivery and schedule.deliver_by are then the route's earliest and latest working days after the pickup day: 3 to 5 by default. Saturday is a working day. Sundays and public holidays aren't. See Delivery promise.
  • The status flow has two hub stops: scheduled, rider_assigned, picked_up, at_hub, in_transit, at_hub, out_for_delivery, delivered. in_transit was never returned before. See Delivery statuses.

GET /coverage lists states and routes​

  • states lists every state Reeds serves, with pickup and delivery for each. zones lists the areas Reeds' own riders work in, and is [] for a state served through a partner hub.
  • interstate lists the routes Reeds runs, each with available: true and its promise, for example 3-5 working days. Routes are one way, so Lagos to the FCT and the FCT to Lagos are two routes.
  • A route that isn't listed has no price. Reeds adds states and routes over time: read GET /coverage rather than keeping your own list.

See Coverage.

The two refusal reasons have new meanings​

A quote Reeds can't serve is still a 200 with available: false and a reason.

  • ADDRESS_NOT_SERVICEABLE now means Reeds doesn't pick up in the pickup's state, or doesn't deliver to the drop-off's state,. The messages are Reeds doesn't pick up in Oyo., Reeds doesn't deliver to Oyo. and Reeds doesn't deliver within Rivers.
  • INTERSTATE_NOT_AVAILABLE now means both states are served, but Reeds has no price for that pair: Reeds doesn't deliver from Lagos to Kano. It used to mean any inter-state trip, and its message was Reeds can't deliver between states. It delivers within Lagos only.
  • A message names the capital Abuja, and GET /coverage names the state FCT. Decide on reason.code, not on the message text.

What you need to change​

Nothing, if your integration already tolerates values it doesn't know: service, route.type, route.distance_km (now nullable), status, and the contents of reason.message. If you show a distance, don't render it when route.distance_km is null. If you show the delivery time, show the dates from schedule, as before. A within-state delivery changes in no way.