Skip to the content

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"
    }
  }'

Get started

Simple, well-documented APIs.

JSON over HTTPS, a secret key for each application, and the same shapes in the sandbox as in production. Book a rate and the shipment comes back with its tracking number.

curl -X POST "https://api.evipostal.com/v1/shipments" \
  -H "Authorization: Bearer $EVIPOSTAL_API_KEY" \
  -H "Idempotency-Key: order-1042-booking-1" \
  -H "Content-Type: application/json" \
  -d '{
    "rate_id": "rate_7Qm2Lx9KaP3sT8vB1nW4cY6d"
  }'
201 Created
{
  "id": "shp_7Hk2Lq9Wm3Xz5Rt8Yb1Nc4Vd",
  "object": "shipment",
  "status": "booked",
  "status_detail": "Your shipment is booked with the carrier.",
  "tracking_number": "MOCK1234567890",
  "carrier": {
    "name": "EviPostal Test Carrier"
  }
}

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. 1. Get rates

    Send the parcel and both addresses to POST /v1/rates. Every carrier available to you answers, cheapest first.

  2. 2. Create the shipment

    Book one of those rates with POST /v1/shipments and an idempotency key, and get its tracking number.

  3. 3. Download the label

    GET /v1/shipments/{id}/label returns a PDF to print, or to show in your own app.

  4. 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
How the sandbox works
A sample. Each event is signed and carries the shipment as it was at that moment.

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
Read about webhooks

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