TuMicha

Connect your shop to TuMicha

Follow one step at a time. You do not need to be a computer expert. When you see a dark box, copy the words inside it exactly.

← Back to portal
Easiest I want to use Zapier Click buttons in Zapier. No coding. Best for most shop owners. Someone helps with my website You get the key. Your helper pastes a few ready-made boxes.

Step set 1 — Get your secret key (everyone starts here)

This key is like a house key for your TuMicha deliveries. Keep it private.

  1. Open App Store In your TuMicha business portal, open App Store at the top.
  2. Turn on Website Integrations Find Website Integrations and subscribe (or use it if TuMicha already turned it on for you).
  3. Open Website Integrations Click the Website Integrations tab at the top.
  4. Make a new key Open Connection keys → tap New key → give it a simple name (example: “My shop”) → create it.
  5. Copy the key once You will see a long secret that starts with tm_live_. Copy it and keep it somewhere safe (notes app or password manager). You will paste it into Zapier or give it only to your website helper — never post it on social media or in a public chat.
If you lose the key later, delete it under Connection keys and make a new one.

Step set 2 — Easiest path: connect with Zapier

Zapier is a website that connects apps with buttons. You will send new orders to TuMicha, and you can also get delivery progress back into Zapier.

A. Send a new delivery to TuMicha

  1. Sign in to Zapier Go to zapier.com and sign in (or create a free account).
  2. Start a new Zap Click CreateZapsNew Zap.
  3. Choose what starts the Zap For “Trigger”, pick the app where the order begins (Shopify, Google Sheets, a form, and so on). Finish that trigger setup so Zapier can see a sample order.
  4. Add the TuMicha action For “Action”, search for Webhooks by Zapier (this is Zapier’s built-in tool — you do not need a separate “TuMicha” app in Zapier). Choose Custom Request (if you do not see that, choose POST).
  5. Paste the TuMicha address (already filled for you) In the URL box, paste this exactly:

    Copy this address

    https://www.tumicha.co.za/v1/deliveries
  6. Choose the method Set Method to POST.
  7. Add two header lines Open Headers (sometimes called “HTTP Headers”). Add these two rows. Replace tm_live_YOUR_KEY with the real key you copied earlier.

    Header 1 — name

    Authorization

    Header 1 — value (put your real key after the word Bearer and a space)

    Bearer tm_live_YOUR_KEY

    Header 2 — name

    Content-Type

    Header 2 — value

    application/json
  8. Paste the order message In the Data / Body box, paste the message below. Then swap the example shop and customer details for fields from your Zapier trigger (use Zapier’s “Insert field” buttons). You must keep at least: your order number, pickup address, and dropoff address.

    Copy this message, then change the example values

    {
      "externalOrderId": "ORDER-10042",
      "serviceType": "delivery",
      "pickup": {
        "address": "Shop 12, Independence Way, Lusaka",
        "contact": "+260900000001"
      },
      "dropoff": {
        "address": "Customer Home, Cairo Road, Lusaka",
        "contact": "+260900000002"
      },
      "notes": "Leave with security if no one answers"
    }
    • externalOrderId = your store’s order number
    • pickup.address = where the driver collects the parcel
    • dropoff.address = where the customer receives it
    • contact = phone numbers (helpful, not required)
    • notes = any special instruction
  9. Test the step Click Zapier’s test button. If it works, TuMicha has accepted the delivery. Turn the Zap On.

B. Get delivery progress into Zapier

  1. Make a second Zap that waits for news Create another Zap. For the trigger, choose Webhooks by ZapierCatch Hook.
  2. Copy Zapier’s waiting address Zapier shows a special web address. Copy it.
  3. Paste it into TuMicha In TuMicha, open Website IntegrationsOrder updates → paste that address → save.
  4. Finish the Zap Go back to Zapier and continue. When a delivery moves (driver assigned, on the way, delivered), TuMicha sends a note to Zapier. Add next steps if you want — for example update a Sheet, send yourself an email, or message Slack.
Stuck? On the Website Integrations tab, open Business Assistant and ask: “How do I connect with Zapier?” It will walk you through the same steps in chat.

Step set 3 — If someone helps with your website

You still do Step set 1 (get the key). Then give your helper these three things:

  1. Your secret key The tm_live_… key. Tell them to keep it only on the website’s private server — never in the customer’s browser.
  2. The TuMicha create address (already filled)
    https://www.tumicha.co.za/v1/deliveries
  3. Where TuMicha should send progress Ask your helper for a private web address on your site that can receive updates. Paste that address under Website Integrations → Order updates and save.

What should happen after that:

Open only if your helper asks for the technical copy-paste boxes

Proof it is your business (headers)

Authorization: Bearer tm_live_YOUR_KEY
Content-Type: application/json

Create a delivery

POST https://www.tumicha.co.za/v1/deliveries
Authorization: Bearer tm_live_YOUR_KEY
Content-Type: application/json

{
  "externalOrderId": "ORDER-10042",
  "serviceType": "delivery",
  "pickup": {
    "address": "Shop 12, Independence Way, Lusaka",
    "lat": -15.3875,
    "lng": 28.3228,
    "contact": "+260900000001"
  },
  "dropoff": {
    "address": "Customer Home, Cairo Road, Lusaka",
    "lat": -15.4167,
    "lng": 28.2833,
    "contact": "+260900000002"
  },
  "notes": "Leave with security if no one answers"
}

Send two or more with { "deliveries": [ … ] } or a JSON array (at most 100). One object still returns { "delivery" }; a list returns { "deliveries", "summary", "errors" }.

Look up or cancel a delivery

GET    /v1/deliveries
GET    /v1/deliveries/:deliveryId
POST   /v1/deliveries/:deliveryId/cancel

Cancel only works while the delivery is still waiting for a driver.

Create a product (same key)

POST https://www.tumicha.co.za/v1/products
Authorization: Bearer tm_live_YOUR_KEY
Content-Type: application/json

{
  "name": "Blue shirt",
  "price": "199",
  "sku": "SHIRT-BLU",
  "barcode": "6001234567890",
  "stock": 12
}

Shop-style title is accepted as the name. One wrapped item also works: { "products": [{ "title": "Blue shirt", "price": "199" }] }. Send two or more in { "products": [ … ] } (or a JSON array) to create or update them in one request — same SKU, then barcode, then name matching. Posting the same product again updates it instead of creating a duplicate. For a whole catalogue with your own field names, use Incoming mapping.

Create a service (same key)

POST https://www.tumicha.co.za/v1/services
Authorization: Bearer tm_live_YOUR_KEY
Content-Type: application/json

{
  "name": "Haircut",
  "price": "180",
  "sku": "CUT-1",
  "durationMinutes": 45
}

Two or more services: { "services": [ … ] } or a JSON array, same as products (at most 100).

Prefer no coding? Website Integrations → Incoming still maps your shop JSON for orders, products, and services.

Updates TuMicha sends to your site (same Order updates URL)

Content-Type: application/json
User-Agent: TuMicha-Webhooks/1.0
X-TuMicha-Event: delivery.status_changed
X-TuMicha-Event: product.created
X-TuMicha-Event: product.updated
X-TuMicha-Event: product.failed
X-TuMicha-Event: service.created
X-TuMicha-Event: service.updated
X-TuMicha-Event: service.failed
{
  "event": "delivery.status_changed",
  "occurredAt": "2026-07-14T12:00:00.000Z",
  "delivery": {
    "id": "8f3c2a1b-4d5e-6f70-8192-a3b4c5d6e7f8",
    "externalOrderId": "ORDER-10042",
    "status": "assigned",
    "previousStatus": "created",
    "driverName": "Chanda Banda",
    "driverVehiclePlate": "ABC 1234"
  }
}

Product or service result (same Update link)

{
  "event": "product.failed",
  "occurredAt": "2026-08-21T12:00:00.000Z",
  "ok": false,
  "source": "api",
  "error": {
    "code": "bad_request",
    "message": "This photo is too large. Use a file under 5 MB."
  },
  "input": { "name": "Blue shirt", "sku": "SHIRT-BLU", "barcode": "6001234567890", "price": "199" },
  "product": null
}

Incoming mapped products and services use the same events with "source": "incoming". Your site should answer quickly with:

{
  "received": true
}

Ready-made create snippet

async function createTuMichaDelivery(order) {
  const response = await fetch('https://www.tumicha.co.za/v1/deliveries', {
    method: 'POST',
    headers: {
      Authorization: 'Bearer tm_live_YOUR_KEY',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      externalOrderId: order.id,
      serviceType: 'delivery',
      pickup: order.pickup,
      dropoff: order.dropoff,
      notes: order.notes,
    }),
  });

  if (!response.ok) {
    throw new Error(`TuMicha create failed: ${response.status}`);
  }

  const data = await response.json();
  return data.delivery; // save delivery.id against your order
}

Ready-made listener snippet

const express = require('express');
const app = express();
app.use(express.json());

app.post('/updates/tumicha', (req, res) => {
  const { delivery } = req.body || {};

  if (!delivery?.id || !delivery?.status) {
    return res.status(400).json({ error: 'invalid payload' });
  }

  // Match your store order with delivery.externalOrderId, then update the customer.
  res.status(200).json({ received: true });
});

app.listen(3000);

Delivery progress you will see

Waiting Driver assigned Picked up On the way Delivered

Sometimes an order is cancelled or fails. That is normal to handle too.

Keep your secret safe

  1. Do not share the key in public Never put it on a public webpage, Instagram, WhatsApp status, or GitHub.
  2. If the key leaks, replace it Delete it under Connection keys, make a new one, and update Zapier (or tell your helper).
  3. Stop updates anytime Clear the address under Order updates if you want TuMicha to stop sending progress notes.