Skip to main content

Update an order

PUT /v2/fulfillment/users/{user_id}/orders/{order_id}

Updates a delivery or pickup order. You can change the time slot, tip amount, instructions, user details, and items.

info

You cannot update an order after the order is assigned to a shopper.

Order item limitations

If your request specifies a delivery order containing items that exceed any of the following limitations, the order is not updated:

  • Maximum total quantity of items
  • Maximum total weight of beverage items
  • Maximum quantity of large or bulky items

For more information about why a delivery order couldn't be updated, see the returned error message.

Unattended delivery and alcohol

If the original order was created with leave_unattended set to true and alcohol is added in the update order request, the leave_unattended parameter is changed to false automatically. If all alcohol is later removed, the parameter is not changed and remains false.

Security

NameInDescription
AuthorizationheaderThe Authorization header with the bearer token acquired during authentication.

Parameters

NameInTypeRequiredDescription
user_idpathstringRequiredThe ID of the user.
order_idpathstringRequiredThe ID of the order.

Request

FieldTypeRequiredDescription
service_option_hold_idintegerOptionalThe ID of the service option hold.
initial_tip_centsintegerRequiredThe pre-delivery tip amount in cents.
special_instructionsstringOptionalSpecial instructions about the order to pass on to the shopper.
userOrderUserOptionalAny additional attributes for the user, these take precedence over values set during user create.
itemsArray(OrderItem)RequiredThe items for the order. Existing order items will be looked up by their line numbers and updated, and those that are not specified in the request will be removed. Only count, weight, special instructions and replacement items can be updated.

OrderUser Object

FieldTypeRequiredDescription
birthdaystringOptionalThe user's birthday in ISO 8601 format, this is used for alcohol eligibility validation.
phone_numberstringOptionalThe user's phone number.
sms_opt_inbooleanOptionalIndicator whether the user has opted-in to receive SMS communications.

OrderItem Object

FieldTypeRequiredDescription
line_numstringRequiredThe item's line number in the order.
countintegerOptionalThe count of the item. Must be a non-negative integer.
weightnumberOptionalFor items sold by weight, the numerical weight of the item. The API interprets this value as whatever unit of measure is defined for the item in the catalog, such as lb or kg. Must be a non-negative number.
special_instructionsstringOptionalAny special instructions about the item selection.
replacement_policystringOptionalOne of "no_replacements", "users_choice" (default if replacement_items specified), or "shoppers_choice" (default otherwise).
replacement_itemsArray(Replacement_items)OptionalA list of requested replacement items if the original item could not be found. This field needs to be turned on via configuration. Contact your Instacart Connect representative.
itemItemRequiredThe item's code.

Replacement_items Object

One of the following:

FieldTypeRequiredDescription
upcstringRequiredThe item's universal product code (upc).

or

FieldTypeRequiredDescription
rrcstringRequiredThe item's retailer reference code (rrc).

Item Object

One of the following:

FieldTypeRequiredDescription
upcstringRequiredThe item's universal product code (upc).

or

FieldTypeRequiredDescription
rrcstringRequiredThe item's retailer reference code (rrc).

Request examples

curl --request PUT \
--url 'https://connect.instacart.com/v2/fulfillment/users/{user_id}/orders/{order_id}' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"service_option_hold_id": 1,
"initial_tip_cents": 1,
"special_instructions": "string",
"user": {
"birthday": "string",
"phone_number": "string",
"sms_opt_in": true
},
"items": [
{
"line_num": "string",
"count": 1,
"weight": 1,
"special_instructions": "string",
"replacement_policy": "no_replacements",
"replacement_items": [
{
"upc": "string"
}
],
"item": {
"upc": "string"
}
}
]
}'

Response

FieldTypeRequiredDescription
idstringRequiredThe ID of the order.
statusstringRequiredThe current order status.
order_urlstringOptionalLink to view the order.
created_atstringOptionalThe time of order creation in ISO 8601 format.
cancellation_reasonstringOptionalThe reason the order was canceled.
localestringOptionalThe order's locale in POSIX format. Example: en_US.
is_expressbooleanOptionalDeprecated. Use `is_instacartplus` instead. Indicates whether the order received Instacart+ membership benefits. Defaults to false.
is_instacartplusbooleanOptionalIndicates whether the order received Instacart+ membership benefits. Defaults to false.
fulfillment_detailsOrderFulfillmentDetailsOptionalThe order delivery details.
warningsArray(Error)OptionalAny warnings associated with this request.
itemsArray(OrderItem)OptionalThe items in the order.

OrderFulfillmentDetails Object

FieldTypeRequiredDescription
store_locationstringOptionalThe location code of the store where the order was fulfilled. The store_location is often the same as the location_code that was used to create the order. However, orders can be fulfilled from a different store location.
window_starts_atstringRequiredThe start time of the delivery window in ISO 8601 format.
window_ends_atstringRequiredThe end time of the delivery window in ISO 8601 format.
delivered_atstringOptionalThe time the order was delivered in ISO 8601 format.
bag_countintegerOptionalThe number of bags in the order.
handoff_window_starts_atstringOptionalThe start time of the handoff window in ISO 8601 format.
handoff_window_ends_atstringOptionalThe end time of the handoff window in ISO 8601 format.

Error Object

FieldTypeRequiredDescription
errorErrorDetailsOptionalInformation relevant to the error.
metaMetaErrorOptionalThe error metadata.

ErrorDetails Object

FieldTypeRequiredDescription
messagestringOptionalThe error message.
error_codeintegerOptionalThe error code.

MetaError Object

FieldTypeRequiredDescription
itemsArray(ItemInfo)OptionalThe items that triggered the error.

ItemInfo Object

FieldTypeRequiredDescription
item_codestringOptionalThe retailer reference code (RRC) or universal product code (UPC) of an item that triggered the error.

OrderItem Object

FieldTypeRequiredDescription
line_numstringRequiredThe item's line number in the order.
qtynumberOptionalThe quantity of the item.
qty_unitstringOptionalThe quantity type, either "each" or "lb".
qty_fulfillednumberOptionalThe fulfilled quantity of the item.
qty_fulfilled_unitstringOptionalThe fulfilled quantity type, either "each" or "lb".
qty_requestednumberOptionalThe initally requested quantity of the item.
qty_requested_unitstringOptionalThe initally requested quantity type, either "each" or "lb".
replacedbooleanOptionalIndicates whether the item was replaced.
scan_codestringOptionalThe scan code of the item.
replacement_policystringOptionalThe replacement policy for the item.
shopper_provided_item_namestringOptionalThe item name provided by shoppers for items that they added.
shopper_provided_item_priceMoneyOptionalThe item price provided by shoppers for items that they added.
itemItemRequiredThe item's codes.

Money Object

FieldTypeRequiredDescription
amountnumberRequiredThe amount of a specified currency.
currencystringRequiredThe currency type in ISO 4217 format. For example: USD.

Item Object

FieldTypeRequiredDescription
upcstringOptionalThe item's universal product code (UPC).
rrcstringOptionalThe item's retailer reference code (RRC).
requested_upcstringOptionalThe requested item's universal product code (UPC).
requested_rrcstringOptionalThe requested item's retailer reference code (RRC).
delivered_upcstringOptionalThe delivered item's universal product code (UPC).
delivered_rrcstringOptionalThe delivered item's retailer reference code (RRC).

Response examples

200 Success

{
"id": "12345676789012345678780",
"status": "created",
"order_url": "https://example.com/example-order",
"created_at": "2018-02-22T00:00:00Z",
"cancellation_reason": "shopper_driven",
"locale": "en_US",
"is_express": true,
"is_instacartplus": true,
"fulfillment_details": {
"store_location": "000-32255",
"window_starts_at": "2018-02-22T00:00:00Z",
"window_ends_at": "2018-02-22T00:30:00Z"
},
"items": [
{
"line_num": "68",
"qty": 9,
"qty_unit": "each",
"replaced": false,
"scan_code": "00070481001179",
"replacement_policy": "shoppers_choice",
"item": {
"upc": "123456789077",
"rrc": "",
"requested_upc": "123456789077",
"requested_rrc": "",
"delivered_upc": "123456789077",
"delivered_rrc": ""
}
}
]
}

4XX Errors

Error responses return either a single error or multiple errors.

HTTP CodeCauseError MessageError CodeError Meta
400Invalid user id"User Not Found"1001{"key":"user_id"}
400User and order without phone number"can't be blank"1001{"key":"user.phone_number"}
400Invalid replacement_policy"is not included in the list"1001{"key":"items[0].replacement_policy"}
400Invalid items"1 item not found."2000{"items":[{"item_upc":"123456789085"}]}
400Invalid order params*"There were issues with your request"9999Not applicable
400Tip over maximum"Tip value is above maximum: $500.00."1001{"key":"initial_tip_cents"}
400Fails alcohol compliance check"Alcoholic items can not be added to this order. Please remove and retry."2001Not applicable
400Order updated recently"Order has been recently updated, please try again in a little while."2003{"wait":1200,"retry":true}
400Too late to update order"The order can no longer be updated."2020Not applicable
400Too many big and bulky items"The number of big and bulky items in your cart exceeds our maximum limit for a single delivery. Please remove 2 such items from your cart to continue."2023Not applicable
400Too much beverage"The weight of beverages in your cart exceeds our maximum limit for a single delivery. Please remove 20lb of beverages from your cart to continue."2026Not applicable
400Too many items"The number of items in your cart exceeds our maximum limit for a single delivery. Please remove 15 such items from your cart to continue."2024Not applicable
400Too much weight"The total weight of items in your cart exceeds our maximum limit for a single delivery. Please remove 20 lb from your cart to continue."2027Not applicable
403Inactive user"User Not Active"nullNot applicable
* Multiple error