Skip to main content

[Explainer] Shopping Complete Webhooks

DASHER_COMPLETED_SHOPPING​

The DASHER_COMPLETED_SHOPPING webhook is sent when a Dasher completes in-store shopping for an order, before checking-out. No webhooks are sent while the Dasher is actively shopping. This webhook delivers detailed information about the shopping event, including Dasher details, pickup and dropoff information, and a comprehensive list of items that were shopped.

The shopped_items section will indicate each item that was shopped, and the associated quantity. This section will also indicate if the item was a substitution.

Field Name (Shopped Items Section)Description
nameThe name of the item
descriptionDescription of the item
quantityThe number of units of the item shopped
weightThe weight of the item, if applicable (may be null).
weight_componentsAn array detailing the components of the weight, if applicable.
weight_unitThe unit of weight measurement, if applicable (may be null).
external_idMerchant's unique item identifier.
requested_item_external_idMerchant's unique item identifier of the original item ordered.
external_instance_idA unique instance identifier for the item.
priceThe price of the item in cents.
substitution_sourceSource of substitution, if applicable (may be null). Enum ["dasher","customer","merchant"]
scanned_codeThe barcode or scanned code of the item.
scanned_data_list:A list of ScannedData objects, each representing a possible deconstruction of the scanned barcode. Barcodes can conform to different formats (e.g., UPC-A, EAN-13), and this list captures the parsed components for each possible format. scanned_data_list[0] contains the components for the most likely barcode format (e.g., UPC-A). scanned_data_list[1], scanned_data_list[2], etc., represent the same barcode interpreted under other formats (e.g., EAN-13). The list is ordered by likelihood, with the most probable format appearing first
formatFormat of barcode. Enum ["upc-a","upc-e","ean-13","ean-8","plu","gtin-14","unknown"]
is_variable_measureIndicates whether the barcode represents a variable measure product with price or weight
indicator_digitused in Gtin14 barcodes to classify the type of item
product_codeproduct code identifies an item within a given system, used in most barcode formats.
check_digitcheck digit if applicable. Typically the last digit of scanned UPC and EAN
country_codeidentify the country where the manufacturer is registered, used in EAN-13 and EAN-8
manufacturer_codeidentifies the company that produced the product, used in UPC-A, EAN-13, UPC-E
number_systemthe type of barcode and its categorization, used in UPC-A, UPC-E
plu_check_digitprice check digit used in variable measure barcodes
company_prefixpart of Gtin14 barcode, identifying the brand owner or manufacturer
item_referenceidentifies a product within a company’s, used in Gtin14 barcodes
scanned_code_sans_check_digitBarcode without check digit
addition_sourceSource of addition, if applicable (may be null). Enum ["dasher","customer","merchant"]
requested_item_external_instance_idThe external instance ID of the requested item, if applicable (may be null).
fulfilled_substitution_typeType of substitution fulfilled, if applicable (may be null). Enum ["no_substitution","pre_selected","customer_contacted","dasher_override"
is_unknownBoolean indicating if the item is unknown (may be null). Will be TRUE if the item is not found in the inventory

Scenario 1: Item shopped as ordered

Field Name (Shopped Items Section)ValueDescription
nameCerealName of ordered item
description25oz cereal boxDescription of the ordered item
quantity2Quantity ordered
weight2.5Total weight of the item
weight_unitozWeight unit of measure
external_id258147369Merchant's item identifier
external_instance_id861555aa-6875-4b02-b5f2-58ee14f323a9UUID of the merchant's identifier
price499Price provided by merchant in inventory feed
scanned_code41303002001Barcode scanned by Dasher
scanned_data_listsee json belowsee explanation below
fulfilled_substitution_typeno_substitutionoriginal item picked
is_unknownFALSEthis item exists in inventory

scanned_data_list:

[
{
"format": "upc-a",
"is_variable_measure": false,
"product_code": "00200",
"check_digit": "1",
"manufacturer_code": "41303",
"number_system": "0",
"scanned_code_sans_check_digit": "04130300200"
},
{
"format": "ean-13",
"is_variable_measure": false,
"product_code": "00200",
"check_digit": "1",
"country_code": "004",
"manufacturer_code": "1303",
"scanned_code_sans_check_digit": "004130300200"
}
]

The barcode scanned by the mobile device is a UPC-A barcode. However, for 13-digit barcodes that start with a leading zero, mobile devices may automatically omit the first zero during scanning. As a result, the scanned_data_list contains two items: scanned_data_list

  • [0] represents the components of the barcode interpreted as a UPC-A code, which is the most likely format; scanned_data_list
  • [1] represents the components of the same barcode interpreted as an EAN-13 code, which is also a valid possibility

Scenario 2: Weighted Item shopped as ordered

Field Name (Shopped Items Section)ValueDescription
nameBananaName of ordered item
descriptionChiquita BananasDescription of the ordered item
quantity8Quantity ordered
weight3.25Total weight of the item
weight_components3.25Array of individually weighted items (if applicable)
weight_unitozWeight unit of measure
external_id4011Merchant's item identifier
external_instance_id861555aa-6875-4b02-b5f2-58ee14f323a9UUID of the merchant's identifier
price191Price provided by merchant in inventory feed. If the item is a weighted item, this value will be total weight multiplied by the weighted price
scanned_code4011Barcode scanned by Dasher
scanned_data_listsee json belowcomponents of the barcode interpreted as a PLU code
fulfilled_substitution_typeno_substitutionoriginal item picked
is_unknownFALSEthis item exists in inventory

scanned_data_list:

[
{
"format": "plu",
"is_variable_measure": false,
"product_code": "4011"
}
]

Scenario 3: Item substituted when the preference is set to contact customer

Field Name (Shopped Items Section)ValueDescription
nameCerealName of ordered item
description25oz cereal boxDescription of the ordered item
quantity2Quantity ordered
weight2.5Total weight of the item
weight_unitozWeight unit of measure
external_id987456321Merchant's item identifier of the substitute item
requested_item_external_id258147369Merchant's item identifier of the original ordered item
external_instance_id861555aa-6875-4b02-b5f2-58ee14f323a9UUID of the merchant's identifier of the substitute item
price499Price provided by merchant in inventory feed
substitution_sourceDASHERitem substituted by dasher
scanned_code04904403Barcode scanned by Dasher
requested_item_external_instance_idd4621a56-208b-4d03-b6dd-6dc5c1eea47fUUID of the merchant's identifier of the original ordered item
scanned_data_listsee json belowcomponents of the barcode interpreted as a EAN-8 code
fulfilled_substitution_typeCONTACTThe item is picked as substitution after contacting consumer
is_unknownFALSEthis item exists in inventory

scanned_data_list:

[
{
"format": "ean-8",
"is_variable_measure": false,
"product_code": "90440",
"check_digit": "3",
"country_code": "04",
"scanned_code_sans_check_digit": "0490440"
}
]

Scenario 4: Item substituted using a customer pre-selected substitute

Field Name (Shopped Items Section)ValueDescription
nameCerealName of ordered item
description25oz cereal boxDescription of the ordered item
quantity2Quantity ordered
weight2.5Total weight of the item
weight_unitozWeight unit of measure
external_id258147369Merchant's item identifier of the orginal ordered item
external_instance_id861555aa-6875-4b02-b5f2-58ee14f323a9Merchant's item identifier of the original ordered item
price499Price provided by merchant in inventory feed
substitution_sourceDASHERitem substituted by dasher
scanned_code10019320008266Barcode of substitute item scanned by Dasher
scanned_data_listsee json belowcomponents of the barcode interpreted as a GTIN-14 code
fulfilled_substitution_typeoverridedasher assert they picked the correct item
is_unknownTRUEthis item missing in inventory

scanned_data_list:

[
{
"format": "upc-e",
"is_variable_measure": false,
"product_code": "12",
"check_digit": "8",
"manufacturer_code": "654",
"number_system": "0",
"scanned_code_sans_check_digit": "0654123"
}
]

Scenario 5: Item substituted using a merchant recommended substitute

Field Name (Shopped Items Section)ValueDescription
nameCerealName of ordered item
description25oz cereal boxDescription of the ordered item
quantity2Quantity ordered
weight2.5Total weight of the item
weight_unitozWeight unit of measure
external_id987456321Merchant's item identifier of the substitute item
requested_item_external_id258147369Merchant's item identifier of the original ordered item
external_instance_id861555aa-6875-4b02-b5f2-58ee14f323a9UUID of the merchant's identifier of the substitute item
price499Price provided by merchant in inventory feed
substitution_sourceMERCHANTitem substitution pre-selected by merchant
scanned_code219408516284Barcode scanned by Dasher
requested_item_external_instance_idd4621a56-208b-4d03-b6dd-6dc5c1eea47fUUID of the merchant's identifier of the original ordered item
scanned_data_listsee json belowsee explanation below
fulfilled_substitution_typePRE-SELECTEDThe item is pre-selected by merchant as substitution
is_unknownFALSEthis item exists in inventory

scanned_data_list:

[
{
"format": "upc-a",
"is_variable_measure": true,
"product_code": "19408",
"check_digit": "4",
"number_system": "2",
"plu_check_digit": "5",
"scanned_code_sans_check_digit": "21940851628"
},
{
"format": "ean-13",
"is_variable_measure": true,
"product_code": "9408",
"check_digit": "4",
"country_code": "021",
"plu_check_digit": "5",
"scanned_code_sans_check_digit": "021940851628"
}
]

The barcode scanned by the mobile device is a UPC-A barcode starting with 2, which indicate it’s a weighted item:

  • scanned_data_list[0] represents the components of the barcode interpreted as a UPC-A code, which is the most likely format.
  • scanned_data_list[1] represents the components of the same barcode interpreted as an EAN-13 code, which is also a valid possibility"

Scenario 6: Dasher Item Override (When Override As Subs is not enabled)

Field Name (Shopped Items Section)ValueDescription
nameCerealName of ordered item
description25oz cereal boxDescription of the ordered item
quantity2Quantity ordered
weight2.5Total weight of the item
weight_unitozWeight unit of measure
external_id258147369Merchant's item identifier of the orginal ordered item
external_instance_id861555aa-6875-4b02-b5f2-58ee14f323a9Merchant's item identifier of the original ordered item
price499Price provided by merchant in inventory feed
substitution_sourceDASHERitem substituted by dasher
scanned_code10019320008266Barcode of substitute item scanned by Dasher
scanned_data_listsee json belowcomponents of the barcode interpreted as a GTIN-14 code
fulfilled_substitution_typeoverridedasher assert they picked the correct item
is_unknownTRUEthis item missing in inventory

scanned_data_list:

[
{
"format": "gtin-14",
"indicator_digit": "1",
"product_code": "001932001351",
"check_digit": "2",
"scanned_code_sans_check_digit": "1001932001351"
}
]

Scenario 7: Dasher Item Override when item is found in the catalog (When Override As Subs is enabled)

Field Name (Shopped Items Section)ValueDescription
nameCerealName of ordered item
description25oz cereal boxDescription of the ordered item
quantity2Quantity ordered
weight2.5Total weight of the item
weight_unitozWeight unit of measure
external_id258147369Merchant's item identifier of the original ordered item
external_instance_id861555aa-6875-4b02-b5f2-58ee14f323a9Merchant's item identifier of the original ordered item
price499Price provided by merchant in inventory feed
substitution_sourceDASHERsubstituted by dasher
scanned_code8901042957517Barcode of substitute item scanned by Dasher
scanned_data_listsee json belowcomponents of the barcode interpreted as a EAN-13 code
fulfilled_substitution_typeOVERRIDEdasher assert they picked the correct item
is_unknownFALSEthis item exists in inventory

scanned_data_list:

[
{
"format": "ean-13",
"is_variable_measure": false,
"product_code": "95751",
"check_digit": "7",
"country_code": "890",
"manufacturer_code": "1042",
"scanned_code_sans_check_digit": "890104295751"
}
]

Scenario 8: Dasher Item Override when item is not found in the catalog (When Override As Subs is enabled)

Field Name (Shopped Items Section)ValueDescription
nameCerealName of ordered item
description25oz cereal boxDescription of the ordered item
quantity2Quantity ordered
weight2.5Total weight of the item
weight_unitozWeight unit of measure
external_id258147369Merchant's item identifier of the original ordered item
external_instance_id861555aa-6875-4b02-b5f2-58ee14f323a9Merchant's item identifier of the original ordered item
price499Price provided by merchant in inventory feed
substitution_sourceDASHERsubstituted by dasher
scanned_code10019320013512Barcode of substitute item scanned by Dasher
scanned_data_listsee json belowcomponents of the barcode interpreted as a GTIN-14 code
fulfilled_substitution_typeOVERRIDEdasher assert they picked the correct item
is_unknownFALSEthis item exists in inventory

scanned_data_list:

[
{
"format": "gtin-14",
"indicator_digit": "1",
"product_code": "001932001351",
"check_digit": "2",
"scanned_code_sans_check_digit": "1001932001351"
}
]

DASHER_COMPLETED_STAGING​

In Dasher Shop and Stage Orders, following the DASHER_COMPLETED_SHOPPING, a DASHER_COMPLETED_STAGING webhook will be sent to confirm the location where the Dasher has staged the order.

"staged_containers" : [
{
"external_id": "id1",
"external_location_id": "A1",
"external_zone_id": "Ambient"
},
{
"external_id": "id2",
"external_location_id": "A1",
"external_zone_id": "Ambient"
},
{
"external_id": "id3",
"external_location_id": "A1",
"external_zone_id": "Ambient"
}
]