Skip to content
ROAD RUNNER

Your shop books it. We carry it.

One request creates a delivery and hands back an id and a tracking link. We call your endpoint every time it changes, so nothing in your system has to poll us and nobody has to retype an address.

POST /v1/deliveries
{
  "reference": "ABC-10432",
  "dropoff": {
    "name": "Sam Ncube",
    "phone": "+263771234567",
    "address": "12 Example Road, Avondale, Harare"
  },
  "items": [{ "description": "One box", "quantity": 1 }]
}

201 Created

{
  "id": "dlv_01J8ZX...",
  "status": "pending",
  "tracking_url": "https://roadrunnerzw.com/t/..."
}

Three steps, and then it runs itself

  1. 1

    Book it

    Send the collection and delivery details. You get an id and a tracking link back in the same response, and an idempotency key means a retry cannot book the same parcel twice.

  2. 2

    Hear about it

    We call your endpoint when a courier is assigned, collects and delivers. Every message is signed, and you can prove your handler works before a real delivery depends on it.

  3. 3

    Prove it

    Every status change is kept with its time and where it came from. That is the record to quote when a customer says a parcel never arrived.

Things worth knowing before you start

Requests are signed and timestamped
A captured request cannot be replayed later. The signing scheme is published, and we hand you the exact logic rather than describing it.
Keys are scoped, and shown once
Issue a key that can only do what that integration needs. We store a hash, so the secret is readable exactly once, including by us.
Test mode behaves like live
The same responses, the same webhooks, the same errors. Nothing reaches a courier until we switch you on.
Secrets rotate without breaking you
During a rotation we sign every message with both secrets, so you deploy the new one when it suits you rather than racing us.

A key takes a minute

Create an account and issue yourself a test key. Nothing reaches a courier until you ask us to switch you live.