Webhook payloads sent for express delivery events — AWB creation, shipping, cancellation, completion, and returns
If our webhook endpoint is unavailable, use the Tracking API to pull shipment status directly. This ensures you stay updated even during outages.
| Key | Value |
|---|---|
Content-Type | application/json |
Accept | application/json |
User-Agent | KiriminAja-Push-Services |
Authorization | Bearer {api_key} |
| Parameter | Type | Description |
|---|---|---|
method | String | Event type identifier, such as processed_packages, shipped_packages, or problem_packages |
data | Mixed | Event data. The structure varies depending on the event type |
payment | Object | Payment information associated with the order |
packages | Array | Package details, including the AWB, service, origin, destination, and driver information |
| Event | Meaning |
|---|---|
processed_packages | AWB created |
shipped_packages | Package picked up by the courier |
canceled_packages | Shipment canceled by the system or the third-party logistics provider |
finished_packages | Package delivered to the recipient |
returned_packages | Package flagged for return; returned_at is populated when the RTS process is completed |
problem_packages | New — The package has encountered a delivery problem with status 500 |
return_finished_packages | Deprecated — Use returned_packages instead |
Primary timestamp fields in data[]: date, shipped_at, finished_at, returned_at, rejected_at, and reason
processed_packages — AWB CreatedTwo callback formats are supported and can be configured per client: short and complete.
{
"method": "processed_packages",
"data": [
{
"order_id": "X",
"awb": "Y",
"sorting_code": "JOG-JOG1000-JKT2010"
}
]
}
{
"method": "processed_packages",
"data": [
{
"order_id": "(order_id)",
"awb": "(awb)",
"date": "2025-01-09T06:02:03.000000Z",
"shipped_at": null,
"finished_at": null,
"returned_at": null,
"rejected_at": null,
"reason": null
}
],
"payment": {
"payment_id": "(pid)",
"amount": 11200,
"status_code": 0,
"qr_content": null,
"pay_time": null
},
"packages": [
{
"awb": "(awb)",
"order_id": "(order_id)",
"service": "(courier)",
"service_type": "(service_type)",
"status": 105,
"live_tracking_url": null,
"poly_line": null,
"origin": {
"name": "(sender name)",
"address": "(sender address)",
"phone": "(sender phone)",
"latitude": 0,
"longitude": 0
},
"destination": {
"name": "(recipient name)",
"address": "(recipient address)",
"phone": "(recipient phone)",
"latitude": null,
"longitude": null
},
"driver": {
"name": null,
"phone": null,
"image": null
}
}
]
}
shipped_packages — Package Picked UpThe package has been picked up and is being transported by the courier.
The structure is identical to the complete processed_packages format, with shipped_at populated:
{
"method": "shipped_packages",
"data": [
{
"order_id": "(order_id)",
"awb": "(awb)",
"date": "2025-01-09T06:02:03.000000Z",
"shipped_at": "(shipped date)",
"finished_at": null,
"returned_at": null,
"rejected_at": null,
"reason": null
}
],
"payment": { "...": "same as above" },
"packages": [{ "...": "same structure" }]
}
canceled_packages — Package CanceledThe shipment has been canceled by the system or flagged as canceled by the third-party logistics provider.
The payload structure is identical to the complete format. All timestamps in data[] are null, and the method is set to canceled_packages.
finished_packages — Package DeliveredThe shipment has been delivered to and received by the recipient.
The finished_at field is populated:
{
"method": "finished_packages",
"data": [
{
"order_id": "(order_id)",
"awb": "(awb)",
"date": "2025-01-09T06:02:03.000000Z",
"shipped_at": null,
"finished_at": "(finished date)",
"returned_at": null,
"rejected_at": null,
"reason": null
}
],
"payment": { "...": "same" },
"packages": [{ "...": "same" }]
}
returned_packages — Package Returned (RTS)The package has been flagged for return. When
returned_atis populated, the return-to-sender process has been completed.
The payload structure is identical to the complete format, with the method set to returned_packages.
problem_packages — Package Problem (Baru)The package has encountered a delivery problem. This event is sent when the package enters the problem status with
status:500. This may occur when the package cannot be delivered because the address cannot be found, the recipient is unavailable, the package is damaged, or another issue has been reported by the third-party logistics provider. Thereasonfield may contain detailed information about the problem. It may be an empty string if the information is not yet available from the third-party logistics provider. Thesorting_codefield may also contain the latest routing information recorded when the incident occurred.
| Field | Type | Notes |
|---|---|---|
data[].order_id | String | Order ID in the client's system |
data[].awb | String | AWB number |
data[].date | String (ISO 8601) | Time when the delivery problem was recorded |
data[].shipped_at | String / null | Pickup time, if the package was already picked up |
data[].finished_at | null | Always null for this event |
data[].returned_at | null | Always null for this event |
data[].rejected_at | null | Always null for this event |
data[].reason | String | Description of the problem; may be empty |
data[].sorting_code | String / null | Latest routing or sorting code |
packages[].status | Integer | 500 indicates a delivery problem |
{
"method": "problem_packages",
"data": [
{
"order_id": "FEE-1782701884465",
"awb": "KAJ0349032841922",
"date": "2026-06-29T09:56:22Z",
"shipped_at": "2026-06-29T09:56:43Z",
"finished_at": null,
"returned_at": null,
"rejected_at": null,
"reason": "",
"sorting_code": null
}
],
"payment": {
"payment_id": "XID-6529458726",
"amount": 64000,
"status_code": 0,
"qr_content": null,
"pay_time": null
},
"packages": [
{
"awb": "KAJ0349032841922",
"order_id": "FEE-1782701884465",
"service": "jne",
"service_type": "REG23",
"status": 500,
"live_tracking_url": null,
"poly_line": null,
"origin": {
"name": "Toko Sumber Rejeki",
"address": "Kiriminaja Head, Jalan Palagan No 32",
"phone": "081234567890",
"latitude": -7.765,
"longitude": 110.378
},
"destination": {
"name": "Lita Ang",
"address": "Surabaya Baru, Bandar Surabaya, Lampung Tengah, Lampung, 34159",
"phone": "081567948619",
"latitude": null,
"longitude": null
},
"driver": {
"name": null,
"phone": null,
"image": null
}
}
]
}
awb and order_id as the idempotency key. The event may be sent again when the problem status is updated, such as when the reason is updated by the third-party logistics provider.finished_packages if the package is successfully delivered.returned_packages if the package is returned.canceled_packages if the shipment is canceled.problem_packages as a terminal state. The shipment may continue until a final event is received.return_finished_packages (Deprecated)Use returned_packages instead.
{
"method": "return_finished_packages",
"data": [
{ "order_id": "OID-40592020", "date": "2021-03-31 00:00:00" },
{ "order_id": "OID-40592021", "date": "2021-03-31 00:00:00" }
]
}
The callback address must have a valid A or AAAA DNS record. URLs that cannot be reached will be rejected.
packages[].status)| Status | Meaning |
|---|---|
105 | AWB created / processed |
200 | Shipped / picked up |
300 | Finished / delivered |
400 | Returned (RTS) |
500 | Problem shipment (baru) |
900 | Canceled |
The status codes above are provided as a general reference. The exact mapping for each third-party logistics provider is available through the Tracking API.