All requests go to:
https://nomad-api.henrietta-amike.workers.dev
Every request must include your API key in a header (either form works):
Authorization: Bearer YOUR_API_KEY
# or
X-API-Key: YOUR_API_KEY
nmd_live_…. Keep it secret — treat it like a password. If it leaks, ask Nomad to revoke it and issue a new one. A key can be limited to track only, or track + create.POST/api/v1/shipments requires "create"
| Field | Required | Description |
|---|---|---|
recipient_name | yes | Who receives the parcel |
dropoff | yes | Delivery address |
recipient_phone | yes | Recipient's phone (the rider needs to reach them) |
pickup | yes | Collection address (your store/warehouse) |
item_description | yes | What's being sent |
size | yes | Package size, free text (e.g. "Small", "1 carton") |
order_type | no | delivery (default), interstate, international, product |
cod_amount | no | Goods money to collect on delivery (₦), if any |
reference | no | Your own order reference — stored on the shipment |
customer_name, customer_phone | no | The sender (defaults to your account name) |
curl -X POST https://nomad-api.henrietta-amike.workers.dev/api/v1/shipments \
-H "Authorization: Bearer nmd_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipient_name": "Folashade Awe",
"recipient_phone": "08168799912",
"dropoff": "12 Admiralty Way, Lekki Phase 1, Lagos",
"pickup": "Bella'\''s Boutique, 5 Allen Avenue, Ikeja, Lagos",
"item_description": "1x handbag",
"size": "Small",
"reference": "STORE-ORDER-5567"
}'
Returns 201 with the created shipment (see the shipment object below). Use the returned id to track it.
cod_amount (in ₦) when creating the shipment. Nomad collects it on delivery, deducts the delivery fee, and remits the balance to you. Tip: also send your own customer_phone so all your COD is grouped under one account for settlement.GET/api/v1/shipments/{id} requires "track"
curl https://nomad-api.henrietta-amike.workers.dev/api/v1/shipments/NM-2026-0148 \
-H "Authorization: Bearer nmd_live_YOUR_KEY"
GET/api/v1/shipments — returns your most recent shipments (up to 100).
{
"shipment": {
"id": "NM-2026-0148",
"status": "Delivered",
"payment_status": "Paid",
"order_type": "delivery",
"recipient_name": "Folashade Awe",
"dropoff": "12 Admiralty Way, Lekki Phase 1, Lagos",
"size": null,
"item": "1x handbag",
"carrier": null,
"carrier_tracking_number": null,
"carrier_tracking_url": null,
"created_at": "2026-08-10T09:12:00.000Z",
"delivered_at": "2026-08-10T15:40:00.000Z",
"tracking_page": "https://nomadlogisticsolutions.com/track.html?order=NM-2026-0148"
}
}
For international shipments handed to a carrier (DHL, Aramex…), carrier, carrier_tracking_number and carrier_tracking_url point at the carrier's own live tracking.
If a webhook URL is set on your key, Nomad sends a POST to it whenever one of your shipments changes status:
POST (your webhook URL)
X-Nomad-Event: shipment.updated
Content-Type: application/json
{
"event": "shipment.updated",
"sent_at": "2026-08-10T15:40:02.000Z",
"shipment": { ...the shipment object above... }
}
Respond with 2xx. Webhooks are best-effort (no retries yet), so also poll the track endpoint as a backup for anything critical.
| Code | Meaning |
|---|---|
401 | Missing or invalid API key |
403 | Your key doesn't have that capability (track / create) |
404 | Shipment not found (or not yours) |
400 | Missing required field |
Questions? Contact Nomad Logistic Solutions.