POST /api/v1/deliveries
Content-Type: application/json
Authorization: Bearer sk_live_...
Before you call
- Call Capabilities & locations so you know which services, warehouses, payments, and service locations this org actually offers.
- Delivery services must be enabled in dashboard settings (API create rejects disabled
serviceKind). - Add allowed image hosts under API & Webhooks.
- Package photos must be https:// URLs on those hosts. Kilo downloads them and stores them. Private IPs are blocked.
Minimal pickup_delivery example
{
"serviceKind": "pickup_delivery",
"deliveryMode": "pickup",
"senderName": "Ada Lovelace",
"senderPhone": "+2348012345678",
"senderEmail": "ada@example.com",
"pickupContactSameAsSender": true,
"receiverName": "Grace Hopper",
"receiverPhone": "+2348098765432",
"pickupAddress": "12 Admiralty Way, Lekki",
"pickupCoords": { "lng": 3.4721, "lat": 6.4474 },
"deliveryAddress": "Victoria Island Office",
"deliveryCoords": { "lng": 3.4219, "lat": 6.4281 },
"packageDescription": "Documents envelope",
"packageSize": "small",
"packageImages": [
"https://cdn.yourbot.com/jobs/abc/package-1.jpg"
],
"customerCollectionMethod": "cash_on_delivery"
}
Important fields (plain English)
| Field |
Meaning |
serviceKind |
pickup_delivery or errand |
deliveryMode |
pickup (rider goes to an address) or warehouse (needs warehouseId) |
pickupCoords / deliveryCoords |
Map coordinates — not optional for real routing |
packageImages |
1–6 HTTPS image URLs from allowlisted hosts |
customerCollectionMethod |
cash_on_delivery or online_checkout (must be allowed in your settings) |
isPODEnabled + podAmount |
Cash to collect from the receiver (only if enabled for your fleet) |
What you get back
{
"ok": true,
"delivery": {
"id": "uuid",
"status": "pending",
"access_code": "ABC123",
"request_source": "api"
}
}
Save id. Use it for get / cancel / webhook matching.
Common errors
| code / message |
Fix |
| Image host not allowlisted |
Add the CDN hostname in Settings → API & Webhooks |
| Service kind disabled |
Enable the service in Delivery settings |
| Coverage / location blocked |
Job is outside your configured coverage |
| Validation failed |
Read fieldErrors — a required field is missing |
Next
- Typed responses: API reference
- Listen for
delivery.created on your webhook.