Get started
Getting started
What the 7feastr Logistics API does, how a delivery flows through it, and your first request.
Last updated
The 7feastr Logistics API lets your business price, book and track door-to-door deliveries anywhere we deliver in Nigeria. You get an all-in quote in one call, book the shipment against your prepaid wallet in a second, and follow it to the recipient's door through status updates, public tracking and webhooks.
How a delivery works
- Quote. Call
POST /rates/estimatewith the pickup and dropoff addresses, the weight and the service type. You get a price with VAT shown separately, an ETA and aquoteIdthat is valid for 10 minutes. - Book. Call
POST /shipmentswith thequoteIdand the contact details. Your wallet is charged exactly the quoted price and a pickup is booked on our delivery network. - Track. The shipment moves through
pending,assigned,picked_up,in_transitanddelivered. Read it with the API, share the public tracking link with your customer, or receive webhooks.
Doorstep pickup and door delivery are always included in the price.
Base URL
https://api.7feastr.com/api/v1/logistics/v1
Sandbox and production share this base URL. The environment is chosen by the API key you send: SB_… keys run in sandbox and PROD_… keys run in production. Switching environments never requires a code change, only a different key. See Sandbox and production.
Before you start
- Create a merchant account in the merchant dashboard. A sandbox API key is issued as soon as you finish onboarding, and your sandbox wallet is prefunded with ₦500,000 of test credit.
- Keep your API key on your server. Never ship it in a mobile app or browser code.
- Check Coverage & delivery times to confirm we deliver where you need us, and Pricing to understand what you will be charged.
Your first request
Get a quote for a 2 kg parcel from Ikeja to Lekki in Lagos:
curl -X POST "https://api.7feastr.com/api/v1/logistics/v1/rates/estimate" \
-H "Authorization: Bearer $SEVENFEASTR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"serviceType": "consolidated",
"pickupAddress": "14 Allen Avenue",
"pickupCity": "Ikeja",
"pickupState": "Lagos",
"dropoffAddress": "8 Admiralty Way",
"dropoffCity": "Lekki",
"dropoffState": "Lagos",
"packageWeightKg": 2
}'
// Node.js 18+ (run as an ES module, or inside an async function)
const res = await fetch("https://api.7feastr.com/api/v1/logistics/v1/rates/estimate", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SEVENFEASTR_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
serviceType: "consolidated",
pickupAddress: "14 Allen Avenue",
pickupCity: "Ikeja",
pickupState: "Lagos",
dropoffAddress: "8 Admiralty Way",
dropoffCity: "Lekki",
dropoffState: "Lagos",
packageWeightKg: 2,
}),
});
const { data } = await res.json();
console.log(data.quoteId, data.pricing.total);
import os
import requests
res = requests.post(
"https://api.7feastr.com/api/v1/logistics/v1/rates/estimate",
headers={"Authorization": f"Bearer {os.environ['SEVENFEASTR_API_KEY']}"},
json={
"serviceType": "consolidated",
"pickupAddress": "14 Allen Avenue",
"pickupCity": "Ikeja",
"pickupState": "Lagos",
"dropoffAddress": "8 Admiralty Way",
"dropoffCity": "Lekki",
"dropoffState": "Lagos",
"packageWeightKg": 2,
},
timeout=30,
)
data = res.json()["data"]
print(data["quoteId"], data["pricing"]["total"])
A successful response wraps the quote in the standard envelope:
{
"success": true,
"message": "OK",
"sandbox": true,
"data": {
"quoteId": "QUOTE-9C41E07B2D5F4A18",
"quoteExpiresAt": "2026-10-21T09:40:00.000Z",
"tripType": "intrastate",
"serviceType": "consolidated",
"distanceKm": 27.4,
"packageWeightKg": 2,
"etaDays": 1,
"etaAt": "2026-10-22T09:30:00.000Z",
"pricing": { "subtotal": 7900, "vatPercent": 7.5, "vatAmount": 592.5, "total": 8492.5 },
"currency": "NGN"
}
}
The example above is abridged. The full response is documented in Quotes & shipments.
Response envelope
Every response uses the same JSON envelope, so you can handle all endpoints the same way.
| Field | Type | Description |
|---|---|---|
success | boolean | true on success, false on error |
message | string | "OK" on success |
sandbox | boolean | true when the request ran in sandbox |
data | object or array | The resource or list you asked for |
meta | object | Lists only: { page, limit, total, totalPages } |
error | object | Errors only: { code, message }. See Errors & rate limits |
Explore the docs
| Page | What it covers |
|---|---|
| Authentication | API keys, headers and production access |
| Sandbox and production | The two environments and how to go live |
| Coverage & delivery times | The states we serve, door-delivery checks and ETAs |
| Pricing | How prices are built, VAT, rounding and example quotes |
| Quotes & shipments | Get a quote, then book the shipment |
| Tracking | Statuses, delivery events, ETA, proof of delivery and cancelling |
| Wallet & disputes | Balance, transactions and disputes |
| Webhooks | Events, payloads and signature verification |
| Errors & rate limits | Error codes, HTTP statuses and request limits |
| Changelog | What changed in the API and when |