For developers
Build shipping into your software with the EviPostal API.
Get rates from every carrier, book shipments, download labels and receive tracking updates from your own software: the same shipping engine EviPostal stores use at the counter.
- A sandbox to build inNothing real happens
- Clear documentationEvery call with examples
- Signed webhooksUpdates to your server
curl -X POST "https://api.evipostal.com/v1/rates" \
-H "Authorization: Bearer $EVIPOSTAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": {
"name": "Ada Okafor",
"phone": "+2348031234567",
"email": "orders@example.com",
"line1": "12 Allen Avenue",
"city": "Ikeja",
"state": "Lagos",
"country": "NG"
},
"to": {
"name": "Chinedu Obi",
"phone": "+2348097654321",
"email": "chinedu@example.com",
"line1": "5 Admiralty Way",
"city": "Lekki",
"state": "Lagos",
"country": "NG",
"landmark": "Opposite the filling station"
},
"parcels": [
{
"package_type": "box",
"weight_grams": 1500,
"length_cm": 30,
"width_cm": 20,
"height_cm": 10,
"description": "Two pairs of shoes",
"declared_value": 4500000
}
],
"reference": "order-1042",
"metadata": {
"order_id": "1042"
}
}'How it fits together
From rate to delivery, through the API.
Four calls cover the whole journey of a parcel. Use the ones you need.
1. Get rates
Send the parcel and both addresses to POST /v1/rates. Every carrier available to you answers, cheapest first.
2. Create the shipment
Book one of those rates with POST /v1/shipments and an idempotency key, and get its tracking number.
3. Download the label
GET /v1/shipments/{id}/label returns a PDF to print, or to show in your own app.
4. Follow it to the door
Webhooks tell your server as it moves; GET /v1/shipments/{id}/tracking when you want to ask.
Sandbox
Start safely in the sandbox.
A private test copy of EviPostal for your integration. With a sandbox key nothing you do is real. When it works, ask for production access and switch keys.
- Sandbox keyevp_test_…For building and testing.
- Production keyevp_live_…Once your business has production access.
Base URL
https://api.evipostal.com/v1
The same address for both: your key decides whether a request is a test.
- The same endpoints as production
- A test carrier answers every request
- Test shipments move along their timeline by themselves
- Labels clearly marked as test labels
- No parcel collected, nothing charged
Webhooks
Webhooks that keep you informed.
EviPostal sends your server a signed message when a shipment is booked, moves, is delayed or is delivered, so you do not have to keep asking.
- Signed with your endpoint’s secret, so you know it came from EviPostal
- Choose the events each endpoint receives
- Retried when your server does not answer
- Every delivery listed in the developer portal
API conventions
Predictable and developer-friendly.
The same few rules everywhere, so a field means the same thing in every answer.
- JSON in and outWith snake_case field names.
- Amounts in koboAn integer with its currency: ₦3,500.00 is 350000.
- Weights in grams1000 is one kilogram.
- Sizes in centimetresLength, width and height.
- Times ISO 8601 with an offset, e.g.
2026-09-27T10:00:00+01:00 - Ids start with what they are:
shp_,rate_,evt_ - Keys are for servers: browsers cannot call the API, so a key never sits in a web page.
Ready to build?
Start integrating EviPostal today.
Create your business, open Developers, make a sandbox key and book your first test shipment in a few minutes.
- Build in the sandbox first
- Signed webhooks
- Versioned under /v1
