Plan your integration
Pricing
How a delivery price is built, how VAT and rounding work, and how you pay from your wallet.
Last updated
Every shipment has one all-in price, worked out by our live rate engine when you request a quote. The price you are quoted is exactly the price charged to your wallet. There are no hidden fees.
What goes into a price
A price depends on four things:
| Factor | How it affects the price |
|---|---|
| Route | The pickup and dropoff locations and the distance between them, and whether the trip is same-state (intrastate) or interstate |
| Weight | packageWeightKg, in kilograms |
| Service type | consolidated (shared vehicle) or dedicated (a full vehicle for your load) |
| Declared value | The optional declaredValue of the goods in NGN, used for insurance cover |
Doorstep pickup and door delivery are always included. You don't pay extra to have a rider collect from your door or deliver to your customer's door.
VAT and rounding
Each quote returns a pricing object:
| Field | Description |
|---|---|
pricing.subtotal | The delivery price before VAT, in NGN, rounded up to the nearest ₦100 |
pricing.vatPercent | The VAT rate: 7.5 |
pricing.vatAmount | 7.5% of the subtotal, shown separately |
pricing.total | subtotal + vatAmount. This is the amount charged to your wallet |
For example, a subtotal of ₦7,900 carries VAT of ₦592.50, for a total of ₦8,492.50. Amounts are numbers in naira, and vatAmount and total can have kobo.
The quoted price is the charged price
When you create a shipment with a quoteId, your wallet is debited exactly pricing.total from that quote, even if rates change in between. The shipment stores the same subtotal, vatPercent, vatAmount and price (the total) that the quote returned.
- A quote is valid for 10 minutes (see
quoteExpiresAt) and can be used once. - After it expires or has been used, request a new quote. The new price can be different.
- If you create a shipment without a
quoteId, it is priced live at that moment in exactly the same way.
Consolidated and dedicated
| Consolidated | Dedicated | |
|---|---|---|
serviceType | consolidated | dedicated |
| What you get | Your parcel shares a vehicle with other parcels on the same route | A full vehicle reserved for your load |
| Billed by | Route and weight | Route and vehicle |
| Weight limit | 0.01 kg to 200 kg | 0.01 kg to 4,500 kg |
| Vehicles | Same-city parcels go by motorbike up to 20 kg and by van above 20 kg | Van up to 1,000 kg, truck above 1,000 kg |
| Best for | Everyday parcels and e-commerce orders | Bulky, heavy or high-value loads |
A weight outside the limit for the service returns 400 invalid_request, for example "packageWeightKg must be between 0.01 and 200 kg for consolidated shipments".
Paying from your wallet
Shipments are prepaid from your 7feastr wallet for the environment you are using.
- Funding: fund your production wallet by card or bank transfer (via Paystack) from the merchant dashboard. Your sandbox wallet starts with ₦500,000 of test credit.
- Charging: the wallet is debited
pricing.totalwhen the shipment is created. The shipment and the charge are saved together, so you never get one without the other. - Insufficient funds: if your balance is lower than the total,
POST /shipmentsreturns402 insufficient_fundsand nothing is created. Your quote stays valid for the rest of its 10 minutes, so you can fund your wallet and retry with the samequoteId. - Refunds: if you cancel a shipment before a rider is assigned, the full amount goes back to your wallet automatically, and you receive the
shipment.refundedwebhook.
{
"success": false,
"error": {
"code": "insufficient_funds",
"message": "Insufficient wallet balance"
}
}
Example sandbox quotes
| Route | Service | Weight | Subtotal | VAT (7.5%) | Total |
|---|---|---|---|---|---|
| Ikeja → Lekki (Lagos) | Consolidated | 2 kg | ₦7,900 | ₦592.50 | ₦8,492.50 |
| Lagos → Kaduna | Consolidated | 5 kg | ₦18,700 | ₦1,402.50 | ₦20,102.50 |
| Ikeja → Lekki (Lagos) | Dedicated (van) | 60 kg | ₦60,400 | ₦4,530 | ₦64,930 |
Worked example
Request a quote for the second route in the table, a 5 kg consolidated parcel from Lagos to Kaduna:
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": "22 Ahmadu Bello Way",
"dropoffCity": "Kaduna",
"dropoffState": "Kaduna",
"packageWeightKg": 5
}'
The response carries the price breakdown in pricing:
{
"success": true,
"message": "OK",
"sandbox": true,
"data": {
"quoteId": "QUOTE-3B7D19E0A4C24F6E",
"quoteExpiresAt": "2026-10-21T10:10:00.000Z",
"tripType": "interstate",
"serviceType": "consolidated",
"pickup": { "address": "14 Allen Ave, Ikeja, Lagos, Nigeria", "city": "Ikeja", "state": "Lagos", "lat": 6.6018, "lng": 3.3515 },
"dropoff": { "address": "22 Ahmadu Bello Way, Kaduna, Nigeria", "city": "Kaduna", "state": "Kaduna", "lat": 10.5222, "lng": 7.4383 },
"distanceKm": 768.4,
"packageWeightKg": 5,
"etaRawMinutes": 655,
"etaBufferedMinutes": 4320,
"etaDays": 3,
"etaAt": "2026-10-24T10:00:00.000Z",
"pricing": { "subtotal": 18700, "vatPercent": 7.5, "vatAmount": 1402.5, "total": 20102.5 },
"currency": "NGN"
}
}
Read the three amounts straight from the response and format them for your checkout. Don't recompute them on your side.
// Node.js 18+: `quote` is the parsed JSON body above
const { subtotal, vatAmount, total } = quote.data.pricing;
const naira = new Intl.NumberFormat("en-NG", { style: "currency", currency: "NGN" });
console.log(`Delivery: ${naira.format(subtotal)}`); // Delivery: ₦18,700.00
console.log(`VAT (7.5%): ${naira.format(vatAmount)}`); // VAT (7.5%): ₦1,402.50
console.log(`Total: ${naira.format(total)}`); // Total: ₦20,102.50
# `quote` is the parsed JSON body above
pricing = quote["data"]["pricing"]
print(f"Delivery: ₦{pricing['subtotal']:,.2f}") # Delivery: ₦18,700.00
print(f"VAT (7.5%): ₦{pricing['vatAmount']:,.2f}") # VAT (7.5%): ₦1,402.50
print(f"Total: ₦{pricing['total']:,.2f}") # Total: ₦20,102.50
Create the shipment with quoteId: "QUOTE-3B7D19E0A4C24F6E" within 10 minutes and your wallet is debited exactly ₦20,102.50. See Quotes & shipments.