Documentation

Webhook Payload Express

Webhook payloads sent for express delivery events — AWB creation, shipping, cancellation, completion, and returns

Information

If our webhook endpoint is unavailable, use the Tracking API to pull shipment status directly. This ensures you stay updated even during outages.


HTTP Headers

KeyValue
Content-Typeapplication/json
Acceptapplication/json
User-AgentKiriminAja-Push-Services
AuthorizationBearer {api_key}

Generic Payload Structure

ParameterTypeDescription
methodStringEvent type identifier, such as processed_packages, shipped_packages, or problem_packages
dataMixedEvent data. The structure varies depending on the event type
paymentObjectPayment information associated with the order
packagesArrayPackage details, including the AWB, service, origin, destination, and driver information

Events Overview

EventMeaning
processed_packagesAWB created
shipped_packagesPackage picked up by the courier
canceled_packagesShipment canceled by the system or the third-party logistics provider
finished_packagesPackage delivered to the recipient
returned_packagesPackage flagged for return; returned_at is populated when the RTS process is completed
problem_packagesNew — The package has encountered a delivery problem with status 500
return_finished_packagesDeprecated — Use returned_packages instead

Primary timestamp fields in data[]: date, shipped_at, finished_at, returned_at, rejected_at, and reason


1. processed_packages — AWB Created

Two callback formats are supported and can be configured per client: short and complete.

Short Format

{
  "method": "processed_packages",
  "data": [
    {
      "order_id": "X",
      "awb": "Y",
      "sorting_code": "JOG-JOG1000-JKT2010"
    }
  ]
}

Complete Format

{
  "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
      }
    }
  ]
}

2. shipped_packages — Package Picked Up

The 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" }]
}

3. canceled_packages — Package Canceled

The 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.


4. finished_packages — Package Delivered

The 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" }]
}

5. returned_packages — Package Returned (RTS)

The package has been flagged for return. When returned_at is 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.


6. 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. The reason field 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. The sorting_code field may also contain the latest routing information recorded when the incident occurred.

Field Notes

FieldTypeNotes
data[].order_idStringOrder ID in the client's system
data[].awbStringAWB number
data[].dateString (ISO 8601)Time when the delivery problem was recorded
data[].shipped_atString / nullPickup time, if the package was already picked up
data[].finished_atnullAlways null for this event
data[].returned_atnullAlways null for this event
data[].rejected_atnullAlways null for this event
data[].reasonStringDescription of the problem; may be empty
data[].sorting_codeString / nullLatest routing or sorting code
packages[].statusInteger500 indicates a delivery problem

Example Payload

{
  "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
      }
    }
  ]
}
  • Subscribe to this event to trigger internal customer support or operations alerts when a shipment enters a problem state.
  • Use the combination of 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.
  • After the problem is resolved, you will receive a subsequent event:
    • finished_packages if the package is successfully delivered.
    • returned_packages if the package is returned.
    • canceled_packages if the shipment is canceled.
  • Do not treat problem_packages as a terminal state. The shipment may continue until a final event is received.

7. 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" }
  ]
}

Callback Registration Requirement

The callback address must have a valid A or AAAA DNS record. URLs that cannot be reached will be rejected.


Status Code Reference (packages[].status)

StatusMeaning
105AWB created / processed
200Shipped / picked up
300Finished / delivered
400Returned (RTS)
500Problem shipment (baru)
900Canceled

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.