The InstaLeap Job Tracking Webhook provides a simple way to track all the changes of the jobs you created. Remember that a webhook works like a reverse API and you would have to provide a POST URL in which our systems are going to notify the changes.
Why?
In some steps of the fulfillment process, InstaLeap and your systems would need to communicate and react to certain changes. For example, to confirm the payment of the order and unblock a picker.
You can add up to 3 Webhooks to receive Job Notifications.
Events
Events are composed by type (take a look at the request payload), id, and job.
Event types
InstaLeap webhooks events have different types, that allow you to identify why the job has changed. They are also differentiated by category. The possible categories and their event types are:
Job-level events (Order)
CREATED: the order was created in Instaleap systemCANCELLED: the order was cancelled in Instaleap systemRESCHEDULED: the order was rescheduled to a different slotALLOCATED: a resource was assigned to the order in a specific task for the first timeRE_ALLOCATED: for the above order a new resource was assigned to the order and the last one was removedEXTERNAL_DATA_UPDATED: External data object in order's payload was updated trough APISTORE_CHANGED: Event that is caused by the movement of the order to a different store for all logistical process.JOB_COMMENT_UPDATED: The comment related with the job has changed
Picking process
ITEMS_UPDATED: Any change at item level has occurred (additions, removals, quantities updated)PACKAGES_CREATED: Creation of packages in the process of enlistment or picking of the order.PACKAGES_UPDATED: Updating of items within previously created packages.
Invoicing process
INVOICE_UPDATED: Event response after information update inside the INVOICE object by the PAYMENT_INFO endpoint.PRICES_UPDATED: Event response after information update inside the PRICES object by the PAYMENT_INFO endpoint.PAYMENT_UPDATED: Event response after information update inside the PAYMENT object by the PAYMENT_INFO endpoint.
Steps & Tasks
Steps picker:
PICKING_STARTED: Order picking is started when the first iteration of one of the items in the order is completed.PICKING_FINISHED: Completion of order picking or order enlistment. Important event that shows changes in the order such as: products added, products removed, changes and replacements.CHECKING_OUT_STARTED: Start of the order checkout step.CHECKED_OUT: Completion of the checkout step of the order.TRANSFERRING_STARTED: Start of the transfer task, step that runs between the picker and the storage or any of the four transfer tasks.TRANSFERRED: When the transfer step of all items of an order has been completed.STORING_STARTED: Start of storage of an order.STORING_UPDATED: Event triggered by some new storage or updates related to package codes.STORING_FINISHED: Ending of storage.
Steps delivery:
GOING_TO_ORIGIN_STARTED: Event triggered by the delivery when it goes to the store (point of origin) to pick up the order.ARRIVED_TO_ORIGIN: Arrival of the delivery at the store (point of origin).GOING_TO_DESTINATION_STARTED: The order has already left the store and is on its way to its destination.ARRIVED_TO_DESTINATION: The order arrives at its destination point.DELIVERING_STARTED: Order arrives at customer's destination and is the step prior to delivery.CLIENT_RECEIVED: Order successfully delivered to the customer.
Zone Picking Steps:
ZONE_PICKING_STARTED: Start of pickeo or enlistment of the order with items within different zones.ZONE_PICKING_FINISHED: Completion of picketed or enlisted order with items within different zones.PARKING_STARTEDPARKING_FINISHED
Consolidation Steps:
PICKING_STARTED: Order picking is started when the first iteration of one of the items in the order is completed.PICKING_FINISHED: Completion of the picking process of the order.CHECKING_OUT_STARTED: Start of the order checkout step.CHECKED_OUT: Completion of the checkout step of the order.STORING_STARTED: Start of storage of an order.STORING_FINISHED: Ending of storage.
Tasks
PICKINGDELIVERYFULL_SERVICESTORAGEPICKING_WITH_STORAGEPICK_UPDELIVERY_WITH_STORAGEPICK_UP_FOR_DELIVERYPICKING_AND_STORAGEZONE_PICKINGCONSOLIDATION
Tasks resets per operational models
Whenever a task has been reset in any step of the fulfillment process, Instaleap will inform trough notification of the unique tochpoint depending on the task and operational model of the order.
- Full Service
- TASK_RESET_FULL_SERVICE
- Pick & Collect
- TASK_RESET_PICK_UP
- TASK_RESET_PICKING_WITH_STORAGE
- Pick & Collect no transfer
- TASK_RESET_PICKING_AND_STORAGE
- TASK_RESET_PICK_UP
- Pick & Delivery
- TASK_RESET_PICKING
- TASK_RESET_DELIVERY
- Pick & Delivery with storage
- TASK_RESET_PICKING_WITH_STORAGE
- TASK_RESET_STORAGE
- TASK_RESET_PICK_UP_FOR_DELIVERY
- TASK_RESET_DELIVERY_WITH_STORAGE
- Pick & Delivery with storage no transfer
- TASK_RESET_PICKING_AND_STORAGE
- TASK_RESET_PICK_UP_FOR_DELIVERY
- TASK_RESET_DELIVERY_WITH_STORAGE
Authentication
In order to protect your systems from external attacks, InstaLeap signs the webhook events it sends to your endpoints. We do so by including a signature in each event's InstaLeap-Signature header. We have different security options that you can select to recognize where the events come from:
Where Instaleap implement this auth?The same auth type is going to be used for the following modules:
Status Webhooks eventsChat WebhooksReplacements SearchStock query
1. Security Instaleap signature
This allows you to verify that the events were sent by InstaLeap, not by a third party. You can verify signatures using standard libraries such as crypto for NodeJS. The hash algorithm used is SHA-256 and it is hashed with a secret provided to you by InstaLeap for each environment.
How to check the signature?
To verify that the InstaLeap-Signature is valid, please follow these steps:
- Once you receive the request, create a string joining
id,created_at, andtypeby an&character from the event payload. - Hash the string with the secret provided to you, using an SHA-256 algorithm.
- Compare the resulting hash with the
InstaLeap-Signatureheader. - If the signature is correct, process the event in your system.
2. Static token
To implement this type of authentication you should send two requirements:
Header:The header name where you want us to send the auth token.Token:The static token that you want us to send to your services to perform the auth.
3. DynamicToken
To implement this type of authentication we need the below requirements:
RenewURL:The URL where we should request new dynamic tokens.Credentials:The credentials we should send to the renewURL to retrieve new dynamic tokens. This can be headers and body credentials depending on your auth server.formatOfCredentials:The format in which we should send the credentials to the renewURL. It can be JSON or formData.Response:The details of the response we will receive from auth server. The status code expected, the body expected, and the field name of the body where the dynamic token is located.
For DynamicToken we recommend you send us a Postman collection tested and work with his auth server to make things easier.
formatOfCredentials - DynamicTokenWe only support these formats:
- JSON
- formData
- urlEncoded
Added byExplains who added the item into the job. Usual values are
CLIENT,PICKER,ISSUE,AGENT, orCONTROL_TOWER
Job cancelled
CANCELLEDevent has a field calledcancellationSourceand the options could beCUSTOMERorCONTROL_TOWER
{
"id": "5b741e8d-0c7e-458b-965d-800f9e379b92",
"created_at": "2025-09-04T21:18:09Z",
"type": "PICKING_FINISHED",
"job": {
"id": "12a87615-68ca-40e7-b799-0e318af1af2d",
"status": "PROCESSING",
"description": "DUMMY8823",
"items": [
{
"product_id": "DUMMY2856",
"product_ean": "DUMMY6066",
"categories": [
"DUMMY4803",
"DUMMY6067",
"DUMMY4048",
"DUMMY2844",
"DUMMY3969"
],
"product_name": "Calfee 22 Shoes",
"quantity": 2,
"weight": 3,
"imageURL": "https://dummyimages.com/lzixtwvp.jpg",
"observations": "",
"original_price": {
"unit_original_price": 1.48,
"quantity_original_price": 2.96
},
"updated_price": {
"unit_updated_price": 1.48,
"quantity_updated_price": 2.96
},
"original_quantity": 2,
"edited": false,
"replaced": false,
"replace_reason": "",
"added_by": "CLIENT",
"edited_by": null,
"is_refund": false,
"refund_reason": null,
"refund_quantity": 0,
"attributes": [
{
"name": "DUMMY4244",
"value": 2
},
{
"name": "DUMMY5049",
"value": 2
}
]
},
{
"product_id": "DUMMY2332",
"product_ean": "DUMMY7830",
"categories": [
"DUMMY8697",
"DUMMY3302",
"DUMMY2506",
"DUMMY3063",
"DUMMY2050"
],
"product_name": "Welch 38 Shoes",
"quantity": 1,
"weight": 0,
"imageURL": "https://dummyimages.com/dvbtlukh.jpg",
"observations": "",
"original_price": {
"unit_original_price": 2.83,
"quantity_original_price": 2.83
},
"updated_price": {
"unit_updated_price": 2.83,
"quantity_updated_price": 2.83
},
"original_quantity": 1,
"edited": false,
"replaced": false,
"replace_reason": "",
"added_by": "CLIENT",
"edited_by": null,
"is_refund": false,
"refund_reason": null,
"refund_quantity": 0,
"attributes": [
{
"name": "DUMMY2976",
"value": 1
},
{
"name": "DUMMY2166",
"value": 1
}
]
}
],
"slot": {
"id": "8e862b7d-a8c6-4236-9f0a-e5e38dbbc7d9",
"from": "2025-09-04T21:05:00.000Z",
"to": "2025-09-04T21:07:00.000Z"
},
"tasks": [
{
"id": "fceb8881-fdf3-45df-ac1a-cd23cd56c9ab",
"type": "PICKING",
"resource_id": "75055737-4bdd-4103-adff-d6292e784971",
"status": "DONE",
"departments": [],
"resource": {
"dni": "DUMMY1931",
"phone_number": "+16949820832",
"email": "[email protected]",
"first_name": "Alice Johnson",
"last_name": "Diana Wilson",
"fleet_id": "CONTINENTE",
"id": "75055737-4bdd-4103-adff-d6292e784971",
"photo_url": "https://dummyimages.com/hxlfdexu.jpg",
"client_id": "CONTINENTE",
"last_update_position": null,
"position": null,
"vehicle": null
},
"steps": [
{
"id": "7da13c18-15e8-4e71-8fd0-4e6e8c033ea4",
"type": "PICKING",
"status": "DONE",
"optimal_start": "2025-09-04T20:53:00.000Z",
"optimal_end": "2025-09-04T20:58:00.000Z",
"actual_start": "2025-09-04T20:53:14.675Z",
"actual_end": "2025-09-04T20:56:51.959Z"
},
{
"id": "db31b90c-4a94-42b0-85a1-94ec088f7fe8",
"type": "CHECKING_OUT",
"status": "DONE",
"optimal_start": "2025-09-04T20:58:00.000Z",
"optimal_end": "2025-09-04T20:58:00.000Z",
"actual_start": "2025-09-04T20:56:51.959Z",
"actual_end": "2025-09-04T21:17:14.903Z"
},
{
"id": "95cc2759-0757-492b-a5c9-0e8de1fc8cb4",
"type": "TRANSFERRING_TO",
"status": "PENDING",
"optimal_start": "2025-09-04T20:58:00.000Z",
"optimal_end": "2025-09-04T21:03:00.000Z",
"actual_start": "",
"actual_end": ""
}
],
"fleet": {
"name": "Picking Fleet"
},
"contact_info": {
"resource_id": "75055737-4bdd-4103-adff-d6292e784971",
"name": "Diana Johnson",
"phone": "+78294892670",
"photo_url": "https://dummyimages.com/isdapvxg.jpg"
}
},
{
"id": "f71bf99a-5503-44e8-9b79-252a5c49a63c",
"type": "DELIVERY",
"resource_id": "0f9cadff-845b-46ad-97dc-a4e7bb1b78f6",
"status": "DOING",
"departments": [],
"resource": {
"dni": "DUMMY8239",
"phone_number": "+82925517667",
"email": "[email protected]",
"first_name": "Diana Smith",
"last_name": "Alice Johnson",
"fleet_id": "CONTINENTE",
"id": "0f9cadff-845b-46ad-97dc-a4e7bb1b78f6",
"photo_url": "https://dummyimages.com/vmknqkty.jpg",
"client_id": "CONTINENTE",
"last_update_position": null,
"position": null,
"vehicle": {
"client_id": "CONTINENTE",
"id": "41e481b4-1b12-4552-a462-8bf54b743ed3",
"label": "Cargo"
}
},
"steps": [
{
"id": "afa15c1c-119a-4c98-9d15-4edbc8f1e367",
"type": "GOING_TO_ORIGIN",
"status": "DOING",
"optimal_start": "2025-09-04T20:57:00.000Z",
"optimal_end": "2025-09-04T20:58:00.000Z",
"actual_start": "2025-09-04T20:53:14.591Z",
"actual_end": ""
},
{
"id": "6258580f-4c52-48eb-b1a6-da842c55a56f",
"type": "TRANSFERRING_FROM",
"status": "PENDING",
"optimal_start": "2025-09-04T20:58:00.000Z",
"optimal_end": "2025-09-04T21:03:00.000Z",
"actual_start": "",
"actual_end": ""
},
{
"id": "c4fe05db-433a-4169-81e0-673f40dcfac2",
"type": "GOING_TO_DESTINATION",
"status": "PENDING",
"optimal_start": "2025-09-04T21:03:00.000Z",
"optimal_end": "2025-09-04T21:03:00.000Z",
"actual_start": "",
"actual_end": ""
},
{
"id": "32f9fb30-7a0a-4ed1-926f-faa10668c5c1",
"type": "DELIVERING",
"status": "PENDING",
"optimal_start": "2025-09-04T21:03:00.000Z",
"optimal_end": "2025-09-04T21:04:00.000Z",
"actual_start": "",
"actual_end": ""
}
],
"fleet": {
"name": "Delivery Fleet"
},
"contact_info": {
"resource_id": "0f9cadff-845b-46ad-97dc-a4e7bb1b78f6",
"name": "Diana Smith",
"phone": "+42912681352",
"photo_url": "https://dummyimages.com/xqvxndtr.jpg"
}
}
],
"origin": {
"name": "Charlie Smith",
"address": "2 Elm St",
"address_two": "",
"description": "Lagos",
"country": "USA",
"city": "Greenville",
"state": "CA",
"zip_code": "35371",
"latitude": -71.270895,
"longitude": 132.401494,
"store_reference": "DUMMY9243"
},
"destination": {
"name": "Diana Smith",
"address": "716 Oak St",
"address_two": "",
"description": "",
"country": "USA",
"city": "Fairview",
"state": "CA",
"zip_code": "46004",
"latitude": -22.270381,
"longitude": 21.080157
},
"packages": [],
"volume": 0,
"weight": 3,
"issue_of": null,
"delivery_code": "0000",
"original_prices": {
"payment_value": 5.79,
"shipping_fee": 0,
"discounts": 0,
"subtotal": 0,
"taxes": 0
},
"updated_prices": {
"payment_value": 5.79,
"shipping_fee": 0,
"discounts": 0,
"subtotal": 0,
"taxes": 0
},
"created_at": "2025-09-04T20:53:14.244Z",
"job_comment": null,
"operational_model": "PICK_AND_DELIVERY",
"external_data": {
"isPickup": "false",
"order_code": "DUMMY8405",
"loyalty_card": "DUMMY1284"
},
"payment_info": {
"prices": {
"taxes": 0,
"subtotal": 0,
"discounts": 0,
"order_value": 5.79,
"shipping_fee": 0,
"attributes": [],
"additional_info": []
},
"invoice": null,
"payment": {
"id": null,
"method": "PREPAID",
"reference": null,
"method_details": null,
"blocking_policy": null,
"payment_status_details": null,
"payment_status": "IN_PROGRESS",
"value": 0,
"metadata": null
},
"currency_code": "EUR"
},
"cancellation_source": null,
"source": "GLOVO_DEADPOOL",
"pick_up_code": "359",
"job_references": [],
"baskets": 1
},
"client_id": "CLIENT",
"event_details": {
"departments": [],
"task_ids": [
"fceb8881-fdf3-45df-ac1a-cd23cd56c9ab"
],
"historic": []
}
}