Skip to content
DocsProductSign inCreate an account

Documentation

Gumza takes the order. Dispatch delivers it.

Two products, one account. This section covers setting up as a merchant on either, connecting your sales channels, and pushing deliveries from your own system over a keyed REST API.

Which product is which

Gumza is the ordering and fulfilment side. It owns your catalogue, the WhatsApp storefront your customers chat with, payments, and the staff dashboard where orders are accepted, packed and marked ready.

Gumza Dispatch is the last-mile side. It owns riders, delivery zones and fees, assignment, live tracking and proof of delivery. Gumza hands it a delivery once an order is ready; it hands status back by webhook.

You do not have to use both. A merchant who already has a storefront can use Dispatch on its own as a delivery API, and a merchant selling on WhatsApp through Gumza gets the Dispatch side provisioned automatically at signup.

Pick your path

Base URLs

Production hostnames. Everything is HTTPS only; plain HTTP is redirected and HSTS is preloaded on all three.

SurfaceBase URLWho calls it
Gumza app + APIhttps://gumza.keMerchants, staff, and Meta / payment provider webhooks
Dispatch dashboardhttps://dispatch.gumza.keDispatchers, riders, merchants with a delivery-only account
Dispatch APIhttps://api.dispatch.gumza.keYour server, using an API key

The shortest possible integration

Three calls: confirm your key works, price the delivery, create it. Status then arrives on your webhook endpoint without you polling for it.

  • POST/api/v1/external/pingConfirm the key and mark your integration connected
  • GET/api/v1/external/quotesFee and ETA before you commit
  • POST/api/v1/external/dispatchesCreate the delivery
curl — create a delivery
curl -X POST https://api.dispatch.gumza.ke/api/v1/external/dispatches \
  -H "X-API-Key: $DISPATCH_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "externalId": "order_10294",
    "customerName": "Customer 001",
    "customerPhone": "+254700000001",
    "pickup":  { "address": "Shop 4, Westlands, Nairobi" },
    "dropoff": { "address": "Kileleshwa, Nairobi", "lat": -1.2833, "lng": 36.7833 },
    "paymentType": "PREPAID",
    "amountCents": 250000,
    "currency": "KES"
  }'

Conventions used throughout

  • Every response is an envelope: { success: true, data } or { success: false, error }. See Errors & limits.
  • Money is always an integer in minor units. amountCents: 250000 is KES 2,500.00.
  • Timestamps are ISO 8601 in UTC. Convert for display, never for storage.
  • IDs are UUIDs. Your own identifier goes in externalId and comes back on every webhook, so you never have to store ours to reconcile.

Everything in this section

Start here

Channels

Delivery API

Platform