Subscriptions and Order Webhooks

By using the ‘WebhookUrl’ field or the subscriptions, you can specify a callback URL to get an update when the order is updated status. If the ‘WebhookUrl’ is set when creating an order or if a subscription exists, the API will send an HTTP POST request to that URL with a JSON payload containing the OrderId when the order status is changed. The kind of event that was triggered will be passed in a header called "Event-Type" where possible events are:

  • order_created
  • order_dispatched
  • order_assigned
  • driver_arrived_at_pickup
  • driver_arrived_at_delivery
  • order_picked_up
  • proof_of_delivery_added
  • order_on_hold
  • order_released
  • order_scanned_at_checkpoint
  • pickup_time_window_updated
  • delivery_time_window_updated
  • driver_unassigned
  • items_added
  • items_updated
  • items_removed
  • tracked_order_items_added
  • charges_added
  • charges_updated
  • charges_removed
  • order_delivered
  • order_cancelled
  • invoice_completed
  • invoice_cancelled
  • route_created
  • route_assigned_to_order
  • route_unassigned_from_order
  • driver_allocated_to_route
  • driver_deallocated_from_route
  • route_dispatched
  • route_status_changed
  • route_deleted
  • route_optimized

The following are examples of call-back content :

[OrderCreated]
Header: Event-Type: "order_created" Body:

{
	"OrderId": "CONTOSO123"
}

[OrderDispatchedToDriver]
Header: Event-Type: "order_dispatched" Body:

{
	"OrderId": "CONTOSO123",
	"DriverId": "GUID",
	"DriverNumber": "string",
	"DriverName": "string"
}

[OrderAcceptedByDriver]
Header: Event-Type: "order_assigned" Body:

{
	"OrderId": "CONTOSO123",
	"DriverId": "GUID",
	"DriverNumber": "string",
	"DriverName": "string"
}

[DriverArrivedAtPickup]
Header: Event-Type: "driver_arrived_at_pickup" Body:

{
	"OrderId": "CONTOSO123"
}

[OrderPickedUp]
Header: Event-Type: order_picked_up Body:

{
	"OrderId": "CONTOSO123"
}

[DriverUnassigned]
Header: Event-Type: driver_unassigned Body:

{
	"UnassignedDriverId": "GUID",
	"UnassignedDriverNumber": "string",
	"UnassignedDriverName": "string"
}

[DriverArrivedAtDelivery]
Header: Event-Type: "driver_arrived_at_delivery" Body:

{
	"OrderId": "CONTOSO123"
}

[OrderDelivered]
Header: Event-Type: "order_delivered" Body:

{
	"OrderId": "CONTOSO123",
	"CustomerName": "string"
}

[OrderReleased]
Header: Event-Type: "order_released" Body:

{
	"OrderId": "CONTOSO123"
}

[OrderPutOnHold]
Header: Event-Type: "order_on_hold" Body:

{
	"OrderId": "CONTOSO123",
	"HoldReadon": "string",
	"HoldReasonDescriptionEn": "string",
	"HoldReasonDescriptionFr": "string"
}

[OrderCancelled]
Header: Event-Type: "order_cancelled" Body:

{
	"OrderId": "CONTOSO123"
}

[TrackedOrderItemsAdded]

Header: Event-Type: "tracked_order_items_added"
Body:

{
	"UserId": "3c2941cc-36d1-49ec-8ab2-7c20c62ce596",
	"OrderId": "CONTOSO123",
	"Items": [{
		"ItemId": "GUID",
		"Barcode": "string",
		"ScanTime": "Datetime",
		"ExceptionCodes": [
			"string"
		],
		"IsMissing": false,
		"Damaged": false,
		"CheckpointId": "string",
		"TrackingType": 0
	}]
}

[ChargesAdded]

Header: Event-Type: "charges_added"
Body:

{
	"OrderId": "CONTOSO123",
	"Charges": [{
		"ChargeType": "string",
		"ChargeId": "GUID",
		"ExtraFeeTypeId": "string",
		"UnitPrice": 10.0,
		"Quantity": 2.0,
		"FuelSurcharge": 2.5,
		"TotalWithFSC": 22.5,
		"Total": 20.0
	}]
}

[ChargesUpdated]

Header: Event-Type: "charges_updated"
Body:

{
	"OrderId": "CONTOSO123",
	"Charges": [{
		"ChargeType": "string",
		"ChargeId": "GUID",
		"ExtraFeeTypeId": "string",
		"UnitPrice": 10.0,
		"Quantity": 2.0,
		"FuelSurcharge": 2.5,
		"TotalWithFSC": 22.5,
		"Total": 20.0
	}]
}

[ChargesRemoved]

Header: Event-Type: "charges_removed"
Body:

{
	"OrderId": "CONTOSO123",
	"ChargeIds": ["string"]
}

To test subscriptions, you can use a webhook test service such as these: