Skip to main content

Webhooks for parcel orders

Webhooks enable near-real-time information flow from DoorDash and our drivers to your application and your customers. With webhooks, you can enable real-time scenarios like a map view showing your customers how far away their driver is, push notifications telling your customers the latest status of their order, and much more.

API: Drive (classic)

This doc covers the Drive (classic) API. If you're using the Drive API, see the reference guide for Drive webhooks.

Events​

DoorDash Developer sends webhooks for the following events, as soon as the event takes place:

  • parcel_labeled: The first time a parcel with this barcode is created in the DoorDash system.
  • parcel_awaiting: The package was delayed before being scanned at DashLink facility, for example if it was not shipped on time to DashLink by the origin warehouse.
  • parcel_origin_arrived: When a driver arrives at the merchant's origin facility for pickup.
  • parcel_origin_picked_up: When the parcel has left the merchant's origin facility, confirmed by a scan.
  • parcel_mid_mile_arrived: The first time a parcel has arrived at a DashLink regional facility, confirmed by a scan.
  • parcel_mid_mile_departed: When the parcel has left its current regional facility and on the way to the next facility.
  • parcel_scanned: The first time the parcel is received at its destination facility.
  • parcel_delayed: The package was delayed after being scanned at a DashLink facility.
  • dasher_picked_up: A delivery driver has scanned and confirmed pickup of this package.
  • dasher_confirmed_consumer_arrival: The driver confirmed they have arrived at the drop off location.
  • dasher_dropped_off: The driver had dropped off the delivery at destination.
  • dasher_attempted_delivery: The driver was unable to deliver your delivery to the dropoff location.
  • parcel_received_to_redeliver: The package was received back at the facility and will be attempted again shortly.
  • parcel_lost_in_transit: The package was lost after being received at a DashLink facility.
  • parcel_return_to_merchant: The package was received at the facility and being returned to merchant.
caution

Not all events are dispatched for deliveries created via the Delivery Simulator. Please refer to the section on Delivery Simulator for more detail.

Return and undeliverable reasons​

Reason is sent as string for dasher_attempted_delivery, parcel_received_to_redeliver, and parcel_return_to_merchant events.

ReasonReason Comments
missing_unit_gate_codeRunner is unable to access apartment because of missing gate code or drop off instructions
cant_find_apartment_unitRunner unable to find the specific apartment number or safe drop off location
business_closedCommercial business closed and runner is unable to leave package in safe location.
incorrect_addressIncorrect address location or the address could be inaccessible such as a military base
technology_issueUnable to complete delivery because of an runner app bug
route_abandonedRoute too long or late runner returned back to sortation center
recipient_refusedPackage refused by recipient
emergencyWeather, safety, or runner related emergency
otherRunner put in a custom reason, does not know the reason, or language barrier

Data formats​

All ..._time_... fields are sent as ISO-8601 date and times and are therefore sent in the UTC time zone.

Retries​

DoorDash sends each webhook event up to 3 times. In other words, when DoorDash sends a webhook, if we receive a response other than 200 OK or no response at all, we try to send it 2 more times.

Example payload​

{
"event_category": "dasher_dropped_off",
"delivery": {
"id": 34290434,
"status": "delivered",
"dasher_status": "dropped_off",
"driver_reference_tag": "ff8b6480-8b07-4eda-9a5f-209044884a6d",
"quoted_delivery_time": "2018-01-17T19:57:07Z",
"fee": 0,
"rating": null,
"pickup_window_start_time": "2018-01-17T20:45:00.000000Z",
"actual_pickup_time": "2018-01-17T20:50:04.918981Z",
"quoted_pickup_time": "2018-01-17T19:42:07Z",
"estimated_pickup_time": "2018-01-03T23:23:05Z",
"dropoff_address": {
"city": "Fremont",
"state": "CA",
"street": "43514 Christy Street",
"unit": "",
"zip_code": "94538",
"dasher_parking_details": "Parking Stall 1234"
},
"external_delivery_id": null,
"actual_delivery_time": "2018-01-17T20:50:43.380171Z",
"actual_return_time": "2018-01-17T21:02:43.380171Z",
"delivery_verification_image_url": "imageurl/image.jpg",
"delivery_window_start_time": null,
"return_delivery_id": null,
"parent_delivery_id": null,
"items": [],
"cash_on_delivery": null,
"route_id": null,
"quantity": 1,
"pickup_window_end_time": null,
"submit_platform": "drive_api",
"store_point": null,
"delivery_window_end_time": null,
"barcode_scanning_required": false,
"tip": 0,
"order_volume": 3,
"allow_unattended_delivery": true,
"contains_alcohol": false,
"signature_required": false,
"signature_image_url": null,
"delivery_tracking_url": null,
"updated_at": "2018-01-17T20:49:33.442377Z",
"team_lift_required": false,
"external_store_id": "8685",
"is_return_delivery": false,
"batch_id": null,
"estimated_return_time": null,
"currency": "USD",
"dropoff_instructions": "Dropoff instructions",
"pickup_address": {
"city": "Palo Alto",
"state": "CA",
"street": "470 Olive Ave",
"unit": "",
"zip_code": "",
"dasher_parking_details": "Parking Stall 4567",
},
"dasher": {
"phone_number": "+16505555555",
"first_name": "Ada",
"last_name": "Lovelace",
"id": 7897789,
"profile_image_url": null,
"dasher_phone_number_for_customer": "+16505555556",
"vehicle": {
"license_plate_number": "",
"color": "",
"make": "Toyota",
"model": "Corolla",
"year": "2006"
},
"location": {
"lat": 123.45,
"lng": -37.91
}
},
"order_value": 199,
"pickup_instructions": "Pickup instructions",
"customer": {
"phone_number": "+16505555555",
"first_name": "Jane",
"last_name": "Smith",
"email": "[email protected]"
}
},
"created_at": "2018-05-03T22:11:17.042353Z",
"event_data": {
"reason": "delivered_late",
"reason_comments": "Order delivered late",
"package_location": {
"city": "Redmond",
"state": "WA",
"zip_code": "98052"
}
}
}