Public beta

Getting Started

The Zippex Delivery API lets you request, manage, and track same-day deliveries programmatically. This guide walks you through the core integration flow from first API key to production-ready tracking.

Base URL

https://api.zippex.com

All requests require an Authorization: Bearer zx_live_... header. Use a zx_test_ key to experiment in sandbox mode.

What you will build

A typical Zippex integration follows one predictable loop:

  1. Create or access your account and store your API keys securely.
  2. Request a quote to price the delivery and confirm ETA.
  3. Create a delivery using that quote and attach your own metadata.
  4. Track progress with polling or webhooks, then switch to a live key when ready.

If you are new to the platform, start in test mode with a zx_test_ key and move to a zx_live_ key only after your quote, delivery creation, tracking, and webhook flows are working end to end.

Step 1: Create your account and get API keys

Create your Zippex account to receive API keys for both environments. You will get a test key (zx_test_...) for sandbox work and a live key (zx_live_...) for production traffic.

POST/v1/merchants/register

Create a new Zippex account and receive API keys.

business_namestringrequired

Your business or store name.

emailstringrequired

Contact email for the account.

phonestringrequired

Contact phone number in E.164 format.

addressobjectrequired

Business address with street, city, province, and postal_code.

curl -X POST https:"color:#6a9955">//api.zippex.com/v1/merchants/register \
  -H "Content-Type: application/json" \
  -d '{
    "business_name": "Coastal Bites",
    "email": "hello@coastalbites.ca",
    "phone": "+16045550123",
    "address": {
      "street": "350 W Georgia St",
      "city": "Vancouver",
      "province": "BC",
      "postal_code": "V6B 6B1"
    }
  }'
201 Created
{
  "id": "merch_a1b2c3d4",
  "business_name": "Coastal Bites",
  "email": "hello@coastalbites.ca",
  "api_keys": {
    "test": "zx_test_abc123def456",
    "live": "zx_live_xyz789ghi012"
  },
  "created_at": "2026-03-10T14:00:00Z"
}

Step 2: Get a delivery quote

Before creating a delivery, request a quote to see the estimated fee and ETA. Quotes are valid for 15 minutes.

POST/v1/quotes

Request a delivery quote with upfront pricing.

pickup_addressstringrequired

Full pickup address.

dropoff_addressstringrequired

Full dropoff address.

package_sizestringoptional

One of small, medium, or large. Defaults to small.

curl -X POST https:"color:#6a9955">//api.zippex.com/v1/quotes \
  -H "Authorization: Bearer zx_test_abc123def456" \
  -H "Content-Type: application/json" \
  -d '{
    "pickup_address": "350 W Georgia St, Vancouver, BC V6B 6B1",
    "dropoff_address": "2085 Main St, Vancouver, BC V5T 3C3"
  }'
200 OK
{
  "id": "qt_r4s5t6u7",
  "fee": 899,
  "currency": "cad",
  "eta_minutes": 28,
  "distance_km": 4.2,
  "expires_at": "2026-03-10T14:15:00Z",
  "created_at": "2026-03-10T14:00:00Z"
}

Step 3: Create a delivery

Use the quote ID to create a delivery at the quoted price. Zippex handles driver assignment automatically.

POST/v1/deliveries

Create a new delivery from a quote.

quote_idstringrequired

ID from a valid, unexpired quote.

pickup_namestringrequired

Contact name at pickup.

pickup_phonestringrequired

Contact phone at pickup.

dropoff_namestringrequired

Recipient name.

dropoff_phonestringrequired

Recipient phone number.

descriptionstringoptional

Package description for the driver.

metadataobjectoptional

Up to 20 key-value pairs of your own data.

curl -X POST https:"color:#6a9955">//api.zippex.com/v1/deliveries \
  -H "Authorization: Bearer zx_test_abc123def456" \
  -H "Content-Type: application/json" \
  -d '{
    "quote_id": "qt_r4s5t6u7",
    "pickup_name": "Coastal Bites",
    "pickup_phone": "+16045550123",
    "dropoff_name": "Jane Smith",
    "dropoff_phone": "+16045550456",
    "description": "1x Birthday cake — handle with care",
    "metadata": {
      "order_id": "ORD-4521"
    }
  }'
201 Created
{
  "id": "del_m8n9o0p1",
  "status": "created",
  "fee": 899,
  "currency": "cad",
  "pickup": {
    "address": "350 W Georgia St, Vancouver, BC V6B 6B1",
    "name": "Coastal Bites",
    "phone": "+16045550123"
  },
  "dropoff": {
    "address": "2085 Main St, Vancouver, BC V5T 3C3",
    "name": "Jane Smith",
    "phone": "+16045550456"
  },
  "description": "1x Birthday cake — handle with care",
  "metadata": {
    "order_id": "ORD-4521"
  },
  "created_at": "2026-03-10T14:01:00Z"
}

Step 4: Track your delivery

Poll the tracking endpoint for real-time driver location and ETA updates. For production, we recommend webhooks for status change notifications instead of polling.

GET/v1/deliveries/{deliveryId}/tracking

Get real-time tracking for a delivery.

curl https:"color:#6a9955">//api.zippex.com/v1/deliveries/del_m8n9o0p1/tracking \
  -H "Authorization: Bearer zx_test_abc123def456"
200 OK
{
  "delivery_id": "del_m8n9o0p1",
  "status": "in_transit",
  "driver": {
    "name": "Alex M.",
    "phone": "+16045550100",
    "location": {
      "lat": 49.2827,
      "lng": -123.1207
    }
  },
  "eta_minutes": 12,
  "updated_at": "2026-03-10T14:22:00Z"
}

Use polling when you need a live map or ETA in your UI. Use webhooks when you need your backend to react to status changes such as driver assignment, pickup, delivery, or cancellation.

Next steps

  • Authentication — API key types, secure storage, test vs. live mode
  • Quotes — pricing inputs, expiry, and quote retrieval
  • Deliveries — delivery lifecycle, metadata, listing, and cancellation
  • Tracking — polling strategy, live tracking URLs, and sandbox behavior
  • Webhooks — receive real-time delivery status updates
  • Sandbox — test your integration end-to-end before go-live
  • API Reference — full endpoint list in one place