From our desk to your checkout · Partner API v1

We are iClose. This is how we ride along on your checkout.

We price the delivery, collect the parcel, and move it. You show our live fees, create the order after payment, and hand the customer a booking ID they can track with us.

Who we are

We are iClose Logistics and Corporate Services. We run dispatch, interstate and international cargo, e-commerce last-mile, haulage, moving, and vehicle hire from Nigeria. This page is for the stores, marketplaces, and corporate accounts we have already approved to plug our desk into their checkout.

Show our delivery charges at checkout. After the customer pays, send the order to us. We lodge it with operations, and the customer follows the shipment the same way they would a booking made on our website.

We set every price from the iClose operations desk. Please do not invent, cache, or override fees. The amount our API returns for that request is the amount we will honour.

We price it

Per-kilometre rates by state, optional city fees, interstate pairs, and export lanes live on our desk. Your checkout only displays what we return.

We move it

Once the order is with us, our riders and lanes take over. Status updates go to you and to the customer, in Lagos time.

You sell it

Keep your cart, payment, and customer account. We sit beside checkout as the delivery option, branded as iClose.

How we work together

  1. 1We maintain the countries, states, and cities we serve, plus the per-kilometre rates by state, optional city fees, interstate pairs, and international country pairs that go with them.
  2. 2We issue an API key to your organisation. Keep it on your store checkout only. Treat it as a credential, the same way you would a payment secret.
  3. 3At checkout the customer picks a state, then pickup and drop-off. Call GET /v1/distance, then GET /v1/delivery-fees with that state and distance_km. Show the options we send back. The ₦/km is the rate we saved for that state.
  4. 4After payment is confirmed, POST /v1/orders. We record it, email it, and put it on our operations desk and on your partner dashboard.
  5. 5The customer tracks with the booking ID or tracking number on our public track page. We email you and the customer whenever the status changes.

A booking made on our website at book.php does not use a partner API key. We file it under the website channel, give it a booking ID first, and add a tracking number when operations assigns the job. Orders you create through this API receive both identifiers immediately.

Your key

Send your key on every private request. Our catalogue, service status, this page, and public tracking do not need one.

X-API-Key: YOUR_KEY

We also accept Authorization: Bearer YOUR_KEY, or ?api_key=YOUR_KEY for the checkout widget. If a key is inactive we return HTTP 403.

Need a key? Ask us for access. Once we approve you, credentials sit under API setup on the partner desk.

Delivery fees at checkout

We quote only from rates our administration has saved. There are no named product codes to pick. Ask us for a fee, then show that fee.

Ecommerce and dispatch

Same-state deliveries are priced as driving kilometres × the ₦/km we saved for that state under Delivery prices. Optional city flat fees appear only if you send a city id or exact city name.

GET http://www.iclose.com.ng/api/v1/distance?pickup=12 Adeola Odeku, Victoria Island, Lagos&dropoff=Lekki Phase 1, Lagos
X-API-Key: YOUR_KEY

GET http://www.iclose.com.ng/api/v1/delivery-fees?service=ecommerce&state=ng-la&pickup=12 Adeola Odeku, Victoria Island, Lagos&dropoff=Lekki Phase 1, Lagos&distance_km=3.49&weight_kg=1.2
X-API-Key: YOUR_KEY

We multiply distance_km by the state’s rate (or the service default if that state has no row). Weight above the service maximum is added automatically. City-only checkout still works:

GET http://www.iclose.com.ng/api/v1/delivery-fees?service=ecommerce&destination=Wuse 2&weight_kg=1.2

Interstate

GET http://www.iclose.com.ng/api/v1/delivery-fees?service=interstate&origin_state=Lagos&destination_state=FCT&weight_kg=8

International

GET http://www.iclose.com.ng/api/v1/delivery-fees?service=international&origin_country=Nigeria&destination_country=United Kingdom&weight_kg=2

POST /v1/delivery-fees accepts the same fields as JSON. Use GET /v1/locations to fill city and state lists from the places we actually serve.

Create an order

Call this after the customer has paid. We need sender name, phone, and city; recipient name, phone, and city; and a parcel description. Include service and the rate_type the customer chose (per_km or city). For kilometre pricing also send state (or origin_state / destination_state) and distance_km.

POST http://www.iclose.com.ng/api/v1/orders
Content-Type: application/json
X-API-Key: YOUR_KEY

{
  "service": "ecommerce",
  "rate_type": "per_km",
  "reference": "ORD-2001",
  "state": "ng-la",
  "origin_state": "ng-la",
  "destination_state": "ng-la",
  "distance_km": 3.49,
  "sender": {
    "name": "Demo Store",
    "phone": "08031234567",
    "email": "store@example.com",
    "city": "Lagos",
    "state": "ng-la",
    "address": "12 Adeola Odeku, Victoria Island, Lagos"
  },
  "recipient": {
    "name": "Titi Adebayo",
    "phone": "08145551212",
    "city": "Lagos",
    "state": "ng-la",
    "address": "Lekki Phase 1, Lagos"
  },
  "parcel": {
    "weight_kg": 1.2,
    "description": "Ankara wrap dress",
    "value": 18000
  }
}

We send back a booking_code (share it as you would a website booking ID) and a tracking_code (ready for our track page). Status starts at booked.

Haulage, vehicle rental, and moving are not priced at checkout. Send "confirm_later": true, or book them from the partner desk. We record the amount as “To be confirmed” and our desk will agree the fee with you.

You can cancel only while the status is still booked:

POST http://www.iclose.com.ng/api/v1/orders/{id}/cancel
X-API-Key: YOUR_KEY

{id} may be the shipment id, booking ID, or tracking number. After we confirm the job, ask for cancellation from the partner desk; the API will return HTTP 409.

Tracking

No API key. Booking IDs and tracking numbers both work, exactly as they do on our public track page.

GET http://www.iclose.com.ng/api/v1/track/BK12AB34

Shipment statuses

booked confirmed picked_up in_transit delivered returned cancelled

Our operations team moves each order through these statuses. Every change emails the customer and the partner, with Lagos time on the subject line.

Endpoints

MethodPathKeyWhat it is for
GET/v1NoOur catalogue and dashboard links
GET/v1/statusNoWhether our service is up
GET/v1/track/{code}NoPublic tracking
GET/v1/accountYesYour services and checkout defaults
GET/v1/servicesYesServices enabled on your partner desk
GET/v1/locationsYesCountries, states, and cities we serve
GET/v1/placesYesAddress suggestions as the customer types
GET / POST/v1/distanceYesKilometres from pickup to drop-off
GET / POST/v1/delivery-feesYesCheckout prices from our desk
POST/v1/quotesYesOne priced option
POST/v1/ordersYesHand us a paid shipment
GET/v1/ordersYesYour organisation’s orders with us
GET/v1/orders/{id}YesA single order
POST/v1/orders/{id}/cancelYesCancel if we have not confirmed yet

/v1/shipments is another name for /v1/orders. When we succeed the body looks like { "success": true, "message": "…", "data": … }. Failures return success: false with HTTP 401, 403, 404, 409, or 422.

Checkout widget

On your cart, the customer picks a state, then types pickup and drop-off. Address suggestions appear as they type. After they pick a place, we measure the kilometres, show that distance, ask for the fee, and write the selected option into hidden fields. Listen for iclose:route (kilometres) and iclose:fee (price).

Checkout page showing the iClose Logistics delivery widget with city delivery and per-kilometre options
Our checkout widget on a partner store, with live delivery options beside the order summary.

A close view of the widget itself:

Delivery

Lagos · per km3.49 km · ₦200/km ₦698
City rateLekki, Lagos, Nigeria ₦2,800

Powered by iClose Logistics

Place this markup on your cart or checkout page:

<select id="customer_state" name="state"></select>
<input id="pickup_address" name="pickup" placeholder="Pickup address">
<input id="dropoff_address" name="dropoff" placeholder="Drop-off address">
<div id="iclose-delivery"></div>
<input type="hidden" name="iclose_lane" id="iclose_lane">
<input type="hidden" name="iclose_amount" id="iclose_amount">
<input type="hidden" name="distance_km" id="distance_km">
<script
  src="http://www.iclose.com.ng/api/widget.js"
  data-key="YOUR_KEY"
  data-service="ecommerce"
  data-target="#iclose-delivery"
  data-state-input="#customer_state"
  data-pickup-input="#pickup_address"
  data-dropoff-input="#dropoff_address"
  data-weight="1.2">
</script>

On localhost use the local widget file, not iclose.com.ng: ../api/widget.js with the test key. The widget fills Nigerian states itself. See the raw snippet or the demo checkout.