Skip to main content

Webhooks for deliveries

Webhooks enable near-real-time information flow from DoorDash and our Dashers 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 Dasher is, push notifications telling your customers the latest status of their order, and much more.

API: Drive

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

Events​

All deliveries​

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

  • DASHER_CONFIRMED: A Dasher has accepted your delivery and is on the way to the pickup location.
  • DASHER_CONFIRMED_PICKUP_ARRIVAL: The Dasher has confirmed that they arrived at the pickup location and are attempting to pick up the delivery.
  • DASHER_PICKED_UP: The Dasher has picked up the delivery.
  • DASHER_CONFIRMED_DROPOFF_ARRIVAL: The Dasher has confirmed that they arrived at the dropoff location.
  • DASHER_DROPPED_OFF: The Dasher has dropped off the delivery at the dropoff location and the delivery is complete.
  • DELIVERY_CANCELLED: The delivery has been cancelled.

Return-to-pickup deliveries only​

Deliveries that can be returned-to-pickup may generate webhooks for the following events:

  • DELIVERY_RETURN_INITIALIZED: The Dasher was unable to deliver your delivery to the dropoff location; they contacted support to arrange a return-to-pickup delivery and are returning to the pickup location.
  • DASHER_CONFIRMED_RETURN_ARRIVAL: The Dasher has confirmed that they arrived at the pickup location and are attempting to return the delivery.
  • DELIVERY_RETURNED: The delivery has been returned successfully.
  • DELIVERY_CANCELLED (with reason = failed_to_return): The delivery was unable to be returned.

Delivery tracking​

You can also enable various dasher_enroute... webhooks that send the location of Dasher every 30 seconds, starting 15 mins before pickup or dropoff. To use these webhooks, submit a support request asking that they be enabled for your integration.

  • dasher_enroute_to_pickup: The Dasher is on their way to pick up the delivery.
  • dasher_enroute_to_dropoff: The Dasher is on their way to the dropoff location.
  • dasher_enroute_to_return: The Dasher is on their way back to the pick up location to return the items.

Fields​

Webhooks contain all of the details about a delivery that are available when the webhook is sent. If a field is empty or not available, the field is not sent in the webhook body. For example, pickup_time_actual is not included in webhook payloads until the delivery has been picked up by the Dasher. Your code should always check if a field is present before accessing it.

Field nameDescriptionfield available in webhook event
cancellation_reasonWhy the order was cancelledOnly the DELIVERY_CANCELLED event
cancellation_reason_messageWhy the order was cancelled, in the Dasher's wordsOnly the DELIVERY_CANCELLED event and only if cancellation_reason=failed_to_return
contactlessWhether the delivery was contactless or normalAll events
created_atWhen the webhook was createdAll events
currencyThe currency of order_value, fee, and tip in cents (see list below)All events
dasher_idThe unique identifier for the Dasher; example: 123212.All events
dasher_nameThe first name and last initial of the Dasher delivering the order; example: John D.All events
dasher_phone_number DEPRECATEDThis field has been replaced by dasher_dropoff_phone_numberAll events
dasher_dropoff_phone_numberThe phone number of the dasher for the dropoff contact to use; number is masked for privacyAll events
dasher_pickup_phone_numberThe phone number of the dasher for the pickup contact to use; number is masked for privacyAll events
dasher_locationLatitude and longitude of the dasher.All events
dasher_vehicle_makeMake of the dasher's vehicleAll events
dasher_vehicle_modelModel of the dasher's vehicleAll events
dasher_vehicle_yearYear of the dasher's vehicleAll events
dropoff_addressWhere the delivery will be dropped offAll events
dropoff_contact_family_nameFamily name of the contact.All events
dropoff_contact_given_nameGiven name of the contact.All events
dropoff_contact_send_notificationsWhether the contact will receive notifications from DoorDash for this delivery; default is falseAll events
dropoff_instructionsInstructions for the Dasher to follow when dropping off the orderAll events
dropoff_phone_numberThe phone number for the Dasher to call in case of problems with pickupAll events
dropoff_time_actualWhen the delivery was dropped offAll events after and including DASHER_DROPPED_OFF
dropoff_time_estimatedWhen the delivery is estimated to be dropped offAll events
dropoff_verification_image_urlThe verification image taken by the Dasher when the order was dropped offAll events after and including DASHER_DROPPED_OFF
dropoff_signature_image_urlThe signature image obtained from customer when the order was dropped off if applicable.All events after and including DASHER_DROPPED_OFF
event_nameThe event that triggered the webhook (see list above)All events
external_delivery_idThe ID provided when the delivery was createdAll events
feeThe delivery feeds charged by DoorDashAll events
order_valueThe value of all the items in the orderAll events
pickup_addressWhere the delivery will be picked upAll events
pickup_instructionsInstructions for the Dasher to follow when picking up the orderAll events
pickup_phone_numberThe phone number for the Dasher to call in case of problems with pickupAll events
pickup_reference_tagA piece of information that can help the Dasher identify the correct delivery item to pick upAll events
pickup_external_business_idThe string identifier used to create your business. Used in combination with pickup_external_store_id to select the pick up locationAll events
pickup_external_store_idThe string identifier used to create your storeAll events
updated_atTimestamp when the delivery info was updated.All events
pickup_time_actualWhen the delivery was picked upAll events after and including DASHER_PICKED_UP
pickup_time_estimatedWhen the delivery is estimated to be picked upAll events
pickup_verification_image_urlThe verification image taken by the Dasher when the order was picked up; only sent for peer-to-peer ordersAll events after and including DASHER_PICKED_UP
return_addressWhere the delivery will be returnedAll events after and including DELIVERY_RETURN_INITIALIZED
return_time_actualWhen the delivery was returned to the pickup locationOnly the DELIVERY_RETURNED event
return_time_estimatedWhen the delivery is estimated to be returned to the pickup locationAll events after and including DELIVERY_RETURN_INITIALIZED
support_referenceAn identifer you can use if talking to DoorDash support about this orderAll events
tipThe amount to tip the DasherAll events
tracking_urlThe DoorDash Merchant Portal URL that you can use to track the deliveryAll events

Cancellation reasons​

Use this table to learn more about the cancellation reason you received in your API response or webhook.

ReasonReason Comments
cancel_by_dispatchOrder was cancelled by DoorDash support
cancel_by_merchantThe order was cancelled by the merchant
cancel_by_order_placerThe order was cancelled by the person that created it
customer_requested_otherThe customer cancelled the order
dasher_cannot_fulfill_otherThe Dasher couldn't fulfill the order
dasher_not_respondingThe Dasher was not responding
drive_order_picked_up_by_customerThe order was picked up by the customer
duplicate_orderThe order is a duplicate of another order
fraudulent_orderDoorDash suspects this order is fraudulent
items_temp_unavailableItems were temporarily unavailable
no_available_dashersNo Dashers are available for this order
nontablet_protocol_issueDoorDash didn't receive the full order
otherDoorDash encountered an unknown error
picked_up_by_other_dasherOrder was picked up by another dasher
store_cannot_fulfill_otherThe store couldn't fulfill the order
store_closedThe store is not available at the time the order is requested or was closed when the Dasher arrived
test_orderThe order was a test order and was cancelled by a clean-up job
too_busyThe restaurant is too busy
too_lateThe order was taking too long
wrong_delivery_addressThe delivery address was incorrect
package_needs_redeliveryThe package delivery attempt failed and will be redelivered
package_never_receivedThe package was never received at dashmart
package_lost_at_facilityThe package was lost after receiving at dashmart

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 webhook payload​

{
"created_at": "2022-02-01T23:18:22.791883Z",
"event_name": "DASHER_DROPPED_OFF",
"external_delivery_id": "c19a5d37-e457-4247-9a67-921ec0134125",
"dasher_id": 123212,
"dasher_name": "John D.",
"dasher_dropoff_phone_number": "+16504379788",
"dasher_pickup_phone_number": "+16504379799",
"dasher_location": {"lat": 43.333333333, "lng": -79.333333333},
"dasher_vehicle_make": "Honda",
"dasher_vehicle_model": "Civic",
"dasher_vehicle_year": "2003",
"pickup_address": "1000 4th Avenue, Seattle, WA 98104",
"pickup_phone_number": "+1(855)9731040",
"pickup_instructions": "please take it to floor 21",
"pickup_reference_tag": "reftag",
"pickup_external_business_id": "ase-243-dzs",
"pickup_external_store_id": "ase-243-dzs",
"dropoff_address": "1201 3rd Avenue, Seattle, WA 98101",
"dropoff_phone_number": "+1(855)9731040",
"dropoff_instructions": "please take it to floor 21",
"dropoff_contact_given_name": "John",
"dropoff_contact_family_name": "Doe",
"dropoff_contact_send_notifications": true,
"order_value": 5555,
"currency": "USD",
"updated_at": "2022-02-01T23:18:22.791883Z",
"pickup_time_estimated": "2022-02-01T23:32:06.000000Z",
"pickup_time_actual": "2022-02-01T23:17:20.521249Z",
"dropoff_time_estimated": "2022-02-01T23:56:06.000000Z",
"dropoff_time_actual": "2022-02-01T23:18:22.541773Z",
"fee": 975,
"tip": 230,
"support_reference": "1343593362",
"tracking_url": "https://doordash.com/drive/portal/track/53904a0b-18cd-4308-b6dc-1d83932d7990",
"contactless": false
}