Welcome to our 3rd-Party Delivery Integration API. Using this RESTful API platform, external systems can programmatically request, manage, and track deliveries inside our high-performance courier infrastructure. All API endpoints accept and return responses in standard JSON formatting.
To authenticate with our API, you must pass your API credentials as a Bearer Token in your HTTP request headers.
* Make sure to keep your API keys secure. Live keys start with tp_live_. Sandbox/test keys start with tp_test_.
When our server sends webhooks to your endpoint, we include an Authorization header using the webhook secret you configured in your dashboard. Use this to verify the payload is genuinely from us.
Retrieves the list of active parcel categories and their IDs. Use these IDs when estimating or creating a delivery.
{
"status": "success",
"data": [
{
"id": 1,
"name": "Documents",
"description": "Standard documents and letters",
"parcel_per_km_shipping_charge": 5.50,
"parcel_minimum_shipping_charge": 50.00
},
{
"id": 2,
"name": "Electronics",
"description": "Fragile electronic devices",
"parcel_per_km_shipping_charge": 10.00,
"parcel_minimum_shipping_charge": 100.00
}
]
}
Simulates an order creation to return a 100% accurate price quote based on current zones, distances, and applicable taxes without actually creating a delivery request.
| Field | Type | Required |
|---|---|---|
| pickup.latitude | float | Yes |
| pickup.longitude | float | Yes |
| dropoff.latitude | float | Yes |
| dropoff.longitude | float | Yes |
| parcel_category_id | integer | Yes |
| distance | float | No |
{
"pickup": {
"latitude": 9.0305,
"longitude": 38.7456
},
"dropoff": {
"latitude": 9.0112,
"longitude": 38.7612
},
"parcel_category_id": 1
}
{
"distance_km": 5.4,
"delivery_charge": 120.00,
"total_amount": 138.00
}
Creates a new delivery order inside the platform ecosystem.
| Field | Type | Required |
|---|---|---|
| pickup | object | Yes |
| pickup.contact_person_name | string | Yes |
| pickup.contact_person_number | string | Yes |
| pickup.address | string | Yes |
| pickup.latitude | float | Yes |
| pickup.longitude | float | Yes |
| dropoff | object | Yes |
| parcel_category_id | integer | Yes |
| charge_payer | string (sender/receiver) | Yes |
| third_party_reference_id | string | No |
{
"pickup": {
"contact_person_name": "John Doe",
"contact_person_number": "+1234567890",
"address": "123 Pickup St, City",
"latitude": 40.5,
"longitude": -74.5
},
"dropoff": {
"contact_person_name": "Jane Smith",
"contact_person_number": "+9876543210",
"address": "456 Dropoff St, City",
"latitude": 40.6,
"longitude": -74.4
},
"parcel_category_id": 1,
"charge_payer": "sender",
"third_party_reference_id": "ORDER-9921"
}
{
"delivery_id": 10029,
"tracking_number": "10029",
"status": "pending",
"third_party_reference_id": "ORDER-9921",
"is_sandbox": false,
"delivery_charge": 120.00,
"total_amount": 138.00
}
Retrieves the current status, assignment details, and tracking timestamps of a specific delivery request.
{
"delivery_id": 10029,
"tracking_number": "10029",
"status": "accepted",
"third_party_reference_id": "ORDER-9921",
"pickup": {
"address": "123 Pickup St, City",
"contact_person_name": "John Doe",
"contact_person_number": "+1234567890"
},
"dropoff": {
"address": "456 Dropoff St, City",
"contact_person_name": "Jane Smith",
"contact_person_number": "+9876543210"
},
"delivery_charge": 15.00,
"delivery_man": {
"name": "Tom Courier",
"phone": "+1092837465"
},
"created_at": "2026-06-29T10:00:00Z",
"updated_at": "2026-06-29T10:05:00Z"
}
Fetch a paginated list of deliveries created by your client account. Supports filtering by status or date.
{
"current_page": 1,
"data": [
{
"id": 10029,
"order_status": "pending",
"third_party_reference_id": "ORDER-9921",
"created_at": "2026-06-29T10:00:00Z"
}
],
"total": 1
}
Cancels a pending or accepted delivery. Cannot be cancelled after the package is picked up by a rider.
{
"message": "Delivery request cancelled successfully"
}
When using a test API key (prefixed with tp_test_), your requests run in an isolated Sandbox. To test your integration flow, you can simulate delivery status changes on-demand.
| Field | Type | Allowed Values |
|---|---|---|
| status | string | assigned, picked_up, delivered, canceled |
{
"status": "picked_up"
}
{
"message": "Sandbox delivery status updated successfully",
"delivery_id": 10029,
"status": "picked_up"
}
Dispatches a test webhook payload (`system.heartbeat`) to your configured Webhook URL to verify connectivity and validate your `webhook_secret`.
{
"message": "Webhook heartbeat dispatched successfully"
}
Provide a Webhook Endpoint URL in your developer dashboard settings, and our server will dispatch real-time POST notifications upon state updates.
delivery.created: Fired immediately on creation.delivery.assigned: Fired when a delivery rider is assigned.delivery.picked_up: Fired when the rider picks up the parcel.delivery.location_update: Fired every time the driver's GPS location is updated while on an active delivery.delivery.delivered: Fired when the package is delivered successfully.delivery.cancelled: Fired when the order is cancelled.system.heartbeat: Fired when triggering the webhook test endpoint.{
"event": "delivery.location_update",
"tracking_number": "10029",
"third_party_reference_id": "ORDER-9921",
"driver": {
"latitude": 9.0305,
"longitude": 38.7456,
"heading": 180.5
},
"timestamp": "2026-06-29T10:15:00.000000Z"
}