Aller au contenu principal

[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)DescriptionAlways Expected or May be Null
nameThe name of the itemAlways Expected
descriptionDescription of the itemAlways Expected
quantityThe number of units of the item shoppedAlways Expected
weightThe weight of the item, if applicable (may be null).May be Null
weight_componentsAn array detailing the components of the weight, if applicable.May be Null
weight_unitThe unit of weight measurement, if applicable (may be null).May be Null
external_idMerchant's unique item identifier.Always Expected
requested_item_external_idMerchant's unique item identifier of the original item ordered.May be Null (if originally requested item picked)
external_instance_idAn additional identifier for the item used to distinguish between multiple items with the same external_id, such as for 2 steaks in the same order with separate weights or the "line number" of an itemized SKU in the orderMay be Null (if additional identifier not used)
priceThe price of the item in cents.Always Expected
substitution_sourceSource of substitution, if applicable (may be null). "Dasher" when substitution was picked by the dasher (as an override or upon customer request when contacted by dasher); "Customer" when substitution was directly selected by the customer; "Merchant" when substitution was recommended by merchant (customer still gets notified by dasher in case they want something else). Reference the substitutions explainer for more details.May be Null (if originally requested item picked)
scanned_codeThe barcode or PLU code of the item.Always Expected
scanned_data_listA 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 firstAlways Expected
formatFormat of barcode. Enum ["upc-a","upc-e","ean-13","ean-8","plu","gtin-14","unknown"]Always Expected
is_variable_measureIndicates whether the barcode represents a variable measure product with price or weightMay be null
indicator_digitUsed in Gtin14 barcodes to classify the type of itemMay be null
product_codeProduct code identifies an item within a given system, used in most barcode formats.Always Expected
check_digitCheck digit if applicable. Typically the last digit of scanned UPC and EANMay be null
country_codeIdentify the country where the manufacturer is registered, used in EAN-13 and EAN-8May be null
manufacturer_codeIdentifies the company that produced the product, used in UPC-A, EAN-13, UPC-EMay be null
number_systemThe type of barcode and its categorization, used in UPC-A, UPC-EMay be null
plu_check_digitPrice check digit used in variable measure barcodesMay be null
company_prefixPart of Gtin14 barcode, identifying the brand owner or manufacturerMay be null
item_referenceIdentifies a product within a company’s, used in Gtin14 barcodesMay be null
scanned_code_sans_check_digitBarcode without check digitMay be null
addition_sourceSource of a new item added to the order after shopping has started, if applicable (may be null). Enum ["dasher","customer","merchant"]May be Null (if no new item was added)
requested_item_external_instance_idThe external instance ID of the requested item, if applicable (may be null). This is used to identify the additional uniqueness of an item in an order, such as the "line number" of an itemized SKU in the order.May be Null (if additional identifier not used)
fulfilled_substitution_typeType of substitution fulfilled, if applicable (may be null). Enum ["no_substitution","pre_selected","customer_contacted","dasher_override"]May be null
is_unknownBoolean indicating if the item is unknown (may be null). Will be TRUE if the item is not found in the catalogMay be null

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_components
weight_unitozWeight unit of measure
external_id258147369Merchant's item identifier
requested_item_external_id
external_instance_id861555aa-6875-4b02-b5f2-58ee14f323a9Additional identifier as passed in the original payload
price499Price provided by merchant in inventory feed
substitution_source
scanned_code41303002001Barcode scanned by Dasher
addition_source
requested_item_external_instance_id
scanned_data_listsee json belowsee explanation below
fulfilled_substitution_typeno_substitutionOriginal item picked
is_unknownfalseThis item exists in catalog

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
requested_item_external_id
external_instance_id861555aa-6875-4b02-b5f2-58ee14f323a9Additional identifier as passed in the original payload
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
substitution_source
scanned_code4011Barcode scanned by Dasher
addition_source
requested_item_external_instance_id
scanned_data_listsee json belowComponents of the barcode interpreted as a PLU code
fulfilled_substitution_typeno_substitutionOriginal item picked
is_unknownfalseThis item exists in catalog

scanned_data_list:

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

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

(reference)

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_components
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-58ee14f323a9Additional identifier of the substitute item
price499Price provided by merchant in inventory feed
substitution_sourceDASHERItem substituted by dasher
scanned_code04904403Barcode scanned by Dasher
addition_source
requested_item_external_instance_idd4621a56-208b-4d03-b6dd-6dc5c1eea47fAdditional identifier as passed in the original payload
scanned_data_listsee json belowsee explanation below
fulfilled_substitution_typecontactThe item is picked as substitution after contacting consumer
is_unknownfalseThis item exists in catalog

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

(reference)

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_components
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-58ee14f323a9Additional identifier of the substitute item
price499Price provided by merchant in inventory feed
substitution_sourceCUSTOMERItem substitution pre-selected by customer
scanned_code06541238Barcode scanned by Dasher
addition_source
requested_item_external_instance_idd4621a56-208b-4d03-b6dd-6dc5c1eea47fAdditional identifier as passed in the original payload
scanned_data_listsee json belowComponents of the barcode interpreted as a UPC-E code
fulfilled_substitution_typepre-selectedThe item is pre-selected by customer as substitution
is_unknownfalseThis item exists in catalog

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"
}
]

(reference)

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_components
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-58ee14f323a9Additional identifier of the substitute item
price499Price provided by merchant in inventory feed
substitution_sourceMERCHANTitem substitution recommended by merchant
scanned_code219408516284Barcode scanned by Dasher
addition_source
requested_item_external_instance_idd4621a56-208b-4d03-b6dd-6dc5c1eea47fAdditional identifier as passed in the original payload
scanned_data_listsee json belowsee explanation below
fulfilled_substitution_typepre-selectedThe item is pre-selected by merchant as substitution
is_unknownfalseThis item exists in catalog

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 Overrides As Subs is not enabled)

(reference)

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_components
weight_unitozWeight unit of measure
external_id258147369Merchant's item identifier of the orginal ordered item
requested_item_external_id
external_instance_id861555aa-6875-4b02-b5f2-58ee14f323a9Additional identifier as passed in the original payload
price499Price provided by merchant in inventory feed
substitution_sourceDASHERItem substituted by dasher
scanned_code10019320008266Barcode or PLU of the override item inputted by Dasher
addition_source
requested_item_external_instance_id
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 catalog

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 Overrides As Subs is enabled)

(reference)

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_components
weight_unitozWeight unit of measure
external_id987456321Merchant's item identifier of the override item
requested_item_external_id258147369Merchant's item identifier of the original ordered item
external_instance_id861555aa-6875-4b02-b5f2-58ee14f323a9Additional identifier as passed in the original payload
price499Price provided by merchant in inventory feed
substitution_sourceDASHERSubstituted by dasher
scanned_code8901042957517Barcode or PLU of the override item inputted by Dasher
addition_source
requested_item_external_instance_id
scanned_data_listsee json belowComponents of the barcode interpreted as a EAN-13 code
fulfilled_substitution_typeoverrideDasher assert they picked the correct item
is_unknowntrueThis item exists in catalog

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 Overrides As Subs is enabled)

(reference)

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_components
weight_unitozWeight unit of measure
external_id987456321Merchant's item identifier of the original ordered item even though there was an override item. This is because item info is unknown as it is not found in the catalog, this scenario is treated similar to overrides being disabled. Note: is_unknown = true
requested_item_external_id
external_instance_id861555aa-6875-4b02-b5f2-58ee14f323a9Additional identifier as passed in the original payload
price499Price provided by merchant in inventory feed
substitution_sourceDASHERSubstituted by dasher
scanned_code10019320013512Barcode or PLU of the override item inputted by Dasher
addition_source
requested_item_external_instance_id
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 exists in catalog

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"
}
]