Amazon Developer

as

Settings
Sign out
Notifications
Alexa
Amazon Appstore
Ring
AWS
Documentation
Support
Contact Us
My Cases
Category SDK
MCP toolkit
Certify
Resources
Skip to main content
This document outlines the Service Provider Interface (SPI) for Food Ordering within the Category SDK framework. The SPI defines the contract you implement to integrate food ordering with Alexa+. Supported use cases include restaurant discovery, menu browsing, cart management, checkout, and order tracking.

Namespace

The namespace for the Food Ordering SPI is com.amazon.alexa.foodordering.v1.

Operations

The Food Ordering SPI supports the following operations. Alexa+ performs permission checks at runtime before running each SPI operation.
OperationPathHTTP methodTypeRequires permissions
BatchGetMenuItems/v1/foodordering/restaurants/{restaurantId}/menuItems/searchPOSTIdempotent—
CancelPurchase/v1/foodordering/purchases/{purchaseId}DELETEIdempotent—
CreateCartItem/v1/foodordering/purchases/{purchaseId}/carts/{cartId}/cartItemsPOSTNon-idempotent—
CreatePurchase/v1/foodordering/purchasesPOSTNon-idempotent—
DeleteCartItem/v1/foodordering/purchases/{purchaseId}/carts/{cartId}/cartItems/{cartItemId}DELETEIdempotent—
GetAddresses/v1/foodordering/users/current/addressesGETRead-onlyREAD_DEVICE_ADDRESS
GetMenuItem/v1/foodordering/restaurants/{restaurantId}/menuCategories/{menuCategoryId}/menuItems/{menuItemId}GETRead-only—
GetPaymentMethods/v1/foodordering/users/current/paymentMethodsGETRead-only—
GetPurchase/v1/foodordering/purchases/{purchaseId}GETRead-only—
GetRestaurant/v1/foodordering/restaurants/{restaurantId}GETRead-only—
GetRestaurantAvailability/v1/foodordering/restaurants/availabilityPOSTIdempotent—
PreviewPurchase/v1/foodordering/purchases/{purchaseId}/previewPOSTIdempotentREAD_DEVICE_ADDRESS, READ_EMAIL, READ_MOBILE_NUMBER, READ_FULL_NAME
RecreatePurchase/v1/foodordering/purchases/recreatePOSTNon-idempotent—
SearchOrders/v1/foodordering/orders/searchPOSTIdempotent—
SearchPurchases/v1/foodordering/purchases/searchPOSTIdempotent—
SubmitPurchase/v1/foodordering/purchases/{purchaseId}/submitPOSTNon-idempotentWRITE_NOTIFICATIONS
UpdateCartItem/v1/foodordering/purchases/{purchaseId}/carts/{cartId}/cartItems/{cartItemId}PUTIdempotent—
UpdatePurchase/v1/foodordering/purchases/{purchaseId}PATCHIdempotent—

Common request headers

Every operation in the Food Ordering SPI includes the following HTTP headers. These are sent by Alexa+ and available in the request context.
HeaderTypeDescriptionRequired
requestIdStringUnique identifier for the request to help with tracking and debuggingNo
timestampTimestampIndicates when the request was initiated. Format: RFC 3339 date-time.No
localeStringThe preferred language for the response content following RFC 5646 format, for example, en-USNo
applicationIdStringIdentifier of the Alexa application making the requestNo
userIdStringUnique identifier of the end user making the request. This field is sensitive and must not be exposed in exception messages or log output.No
userAccessTokenStringAuthentication token for the user’s session. Provided if the user has successfully linked their account. This field is sensitive and must not be exposed in exception messages or log output.No

BatchGetMenuItems

Path: /v1/foodordering/restaurants/{restaurantId}/menuItems/search
Method: POST
Type: Idempotent
Retrieves detailed information for multiple menu items in a single request, such as when displaying reorder candidates or resolving items that span multiple categories within a restaurant. Returns per-item issues for items that cannot be resolved (for example, item no longer available or not found).

Request

ParameterTypeDescriptionRequired
restaurantIdStringThe restaurant whose menu items to fetch. Length: 1–256 characters.Yes
menuItemsList(MenuItemIdentifier)A list of item identifiers to resolve. Each identifier contains menuCategoryId and menuItemId.Yes

Response

ParameterTypeDescriptionRequired
menuItemsList(MenuItemDetails)Successfully resolved items with full detail (name, price, choices, attributes, availability)Yes
issuesList(MenuItemIssue)Per-item problems for items that could not be resolvedNo

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

CancelPurchase

Path: /v1/foodordering/purchases/{purchaseId}
Method: DELETE
Type: Idempotent
Cancels an in-progress purchase, abandoning the checkout session. Once cancelled, the purchase and its associated cart(s) are discarded. Only applies to purchases that have NOT been submitted. Once SubmitPurchase has been called, the purchase cannot be cancelled through this operation. Returns an empty response on success.

Request

ParameterTypeDescriptionRequired
purchaseIdStringThe ID of the purchase to cancel. Length: 1–256 characters.Yes

Response

Empty body on success.

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

CreateCartItem

Path: /v1/foodordering/purchases/{purchaseId}/carts/{cartId}/cartItems
Method: POST
Type: Non-idempotent
Creates a cart item for the menu item selection made by the user. The cartItemSelection contains only the subset of options and choices that the user has explicitly selected, and does not represent the full menu item definition.

Request

ParameterTypeDescriptionRequired
purchaseIdStringIdentifier for the purchase. Length: 1–256 characters.Yes
cartIdStringIdentifier for the cart. Length: 1–256 characters.Yes
cartItemSelectionCartItemSelectionThe user’s selection for a specific menu itemYes

Response

ParameterTypeDescriptionRequired
purchaseIdStringIdentifier for the purchaseYes
cartIdStringIdentifier for the cartYes
cartItemIdStringIdentifier for the newly created cart itemYes

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

CreatePurchase

Path: /v1/foodordering/purchases
Method: POST
Type: Non-idempotent
Creates a new Purchase, which represents the user’s intent to buy. A Purchase is a pre-payment container that encapsulates cart details (items, quantities, customizations) along with fulfillment details (delivery address, delivery type, estimated time). The v1 model supports exactly one cart per purchase.

Request

ParameterTypeDescriptionRequired
cartSelectionsList(CartSelection)The cart’s menu item selectionsYes
fulfillmentFulfillmentDetails about how the purchase is to be fulfilled (delivery or pickup)Yes
recipientUserDetailsInformation about the user placing the purchaseNo
paymentSelectionsList(PaymentSelection)Payment method selections for the purchaseNo

Response

ParameterTypeDescriptionRequired
purchaseIdStringA unique identifier for the newly created purchaseYes
cartsList(CartDetails)The cart(s) in the purchase with enriched item detailsYes

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

DeleteCartItem

Path: /v1/foodordering/purchases/{purchaseId}/carts/{cartId}/cartItems/{cartItemId}
Method: DELETE
Type: Idempotent
Deletes an existing cart item from a specific cart in a purchase. Returns an empty response upon successful deletion.

Request

ParameterTypeDescriptionRequired
purchaseIdStringThe ID of the purchase. Length: 1–256 characters.Yes
cartIdStringThe ID of the cart. Length: 1–256 characters.Yes
cartItemIdStringThe ID of the item to be removed. Length: 1–256 characters.Yes

Response

Empty body on success.

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

GetAddresses

Path: /v1/foodordering/users/current/addresses
Method: GET
Type: Read-only
Required Permissions: READ_DEVICE_ADDRESS
Returns the saved delivery addresses available for the authenticated user. The user is identified from the authentication token — no explicit user ID is required in the request. Returns the complete list in a single response (no pagination). Call this operation during checkout to present delivery address options before calling UpdatePurchase or CreatePurchase with the selected address in the fulfillment.delivery.address field.

Request

No operation-specific parameters. Only common request headers are sent.

Response

ParameterTypeDescriptionRequired
addressesList(AddressSummary)A list of saved addresses with addressId, details, and optional labelYes

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

GetMenuItem

Path: /v1/foodordering/restaurants/{restaurantId}/menuCategories/{menuCategoryId}/menuItems/{menuItemId}
Method: GET
Type: Read-only
Returns detailed information about a specific menu item, including its customization options, availability, base price, description, image, and the complete tree of choice categories for cart item customization. Call this operation before adding an item to the cart to present customization options to the customer, or after a reorder to verify item availability and display current options.

Request

ParameterTypeDescriptionRequired
restaurantIdStringThe restaurant the item belongs to. Length: 1–256 characters.Yes
menuCategoryIdStringThe menu category containing the item. Length: 1–256 characters.Yes
menuItemIdStringThe item to retrieve. Length: 1–256 characters.Yes

Response

ParameterTypeDescriptionRequired
menuItemMenuItemDetailsFull details of the menu item including customization optionsNo

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

GetPaymentMethods

Path: /v1/foodordering/users/current/paymentMethods
Method: GET
Type: Read-only
Returns the saved payment methods available for the authenticated user. The user is identified from the authentication token — no explicit user ID is required in the request. Returns the complete list in a single response (no pagination). Call this operation during checkout to present available payment options before calling UpdatePurchase with the selected instrument.

Request

No operation-specific parameters. Only common request headers are sent.

Response

ParameterTypeDescriptionRequired
paymentMethodsList(PaymentMethodDetails)A list of saved payment instruments with paymentMethodId and instrument detailsYes

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

GetPurchase

Path: /v1/foodordering/purchases/{purchaseId}
Method: GET
Type: Read-only
Retrieves the full details of an in-progress purchase by its identifier. A purchase represents an active checkout session — it contains the assembled cart(s), selected fulfillment method, charges, and optional payment/recipient information. Returns the purchase only while it is in progress (pre-submit). After SubmitPurchase is called, use SearchOrders to retrieve the resulting orders. Call this operation to resume or inspect an in-progress checkout, or to check whether all required information (address, payment) is present before calling PreviewPurchase.

Request

ParameterTypeDescriptionRequired
purchaseIdStringThe unique identifier of the purchase. Length: 1–256 characters.Yes

Response

ParameterTypeDescriptionRequired
purchaseIdStringThe purchase identifierYes
cartsList(CartDetails)The cart(s) in the purchase, each containing restaurant info and itemsYes
chargesChargesCurrent charge breakdown (subtotal, delivery fee, tip, taxes, grand total)Yes
fulfillmentFulfillmentDelivery or pickup detailsYes
recipientUserDetailsUser details for the deliveryNo
paymentsList(Payment)Currently selected payment method(s)No
estimatedFulfillmentTimeEstimatedTimeWindowEstimated delivery/pickup windowNo
issuesList(Issue)Validation problems that need to be resolved before submissionNo

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

GetRestaurant

Path: /v1/foodordering/restaurants/{restaurantId}
Method: GET
Type: Read-only
Retrieves detailed information for a restaurant using its ID, including name, address, image, default tip, currency code, fulfillment availability, and optionally menu categories.

Request

ParameterTypeDescriptionRequired
restaurantIdStringUnique identifier for the restaurant. Length: 1–256 characters.Yes
includeMenuCategoriesBooleanWhen set to true, the response includes the restaurant’s menu categoriesNo

Response

ParameterTypeDescriptionRequired
restaurantIdStringUnique identifier for the restaurantYes
nameStringRestaurant display nameYes
isOpenBooleanWhether the restaurant is currently openYes
imageUrlStringRestaurant image URL (HTTPS)No
isSpecialInstructionsSupportedBooleanWhether the restaurant supports special instructionsYes
currencyCodeStringISO 4217 3-letter currency code (for example, USD)Yes
addressAddressDetailsRestaurant physical address with coordinatesYes
defaultTipTipValueDefault tip suggestion for the restaurantNo
fulfillmentAvailabilitySummaryFulfillmentAvailabilitySummarySummary of fulfillment options availableYes
menuCategoriesList(MenuCategoryDetails)Menu categories (present only when includeMenuCategories=true)No
phoneNumberPhoneNumberRestaurant phone number. This field is sensitive.No

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

GetRestaurantAvailability

Path: /v1/foodordering/restaurants/availability
Method: POST
Type: Idempotent
Returns availability information for one or more restaurants based on the specified fulfillment method. For each restaurant, returns whether it is currently open, whether delivery is available, estimated delivery time range, delivery fee, and distance. Typically called after a restaurant search to determine availability.

Request

ParameterTypeDescriptionRequired
restaurantIdsList(String)A list of restaurant IDs to checkYes
fulfillmentFulfillmentFulfillment method (for delivery, an address must be provided)Yes
maxResultsIntegerMaximum number of results to return per page. Range: 1–50. Default: 20.Yes
nextTokenStringOpaque cursor for the next page of resultsNo

Response

ParameterTypeDescriptionRequired
availabilitiesList(RestaurantAvailability)Availability details for each requested restaurantYes
nextTokenStringOpaque cursor for retrieving the next page. Absent when no more results are available.No

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

PreviewPurchase

Path: /v1/foodordering/purchases/{purchaseId}/preview
Method: POST
Type: Idempotent
Required Permissions: READ_DEVICE_ADDRESS, READ_EMAIL, READ_MOBILE_NUMBER, READ_FULL_NAME
Generates a checkout preview for a purchase before final submission. Computes and returns the complete invoice breakdown — including subtotal, taxes, delivery fees, tip, discounts/savings, and grand total — so the customer can review their order before confirming. This operation does NOT charge payment or create orders. Validates completeness and returns issues if required information is missing. Call this operation after the cart is built and before asking the user to confirm, after any change to tip, delivery address, or payment method (to refresh totals), and before calling SubmitPurchase.

Request

ParameterTypeDescriptionRequired
purchaseIdStringThe purchase to preview. Length: 1–256 characters.Yes

Response

ParameterTypeDescriptionRequired
purchaseIdStringThe purchase identifierYes
cartsList(CartDetails)Items in the order with restaurant infoYes
fulfillmentFulfillmentDelivery address and methodYes
estimatedFulfillmentTimeEstimatedTimeWindowWhen the order is expected to arriveYes
chargesChargesComplete cost breakdownYes
paymentsList(Payment)Selected payment method(s)No
recipientUserDetailsUser details for deliveryNo
issuesList(Issue)Validation problems that must be resolved before submission (empty if ready)No

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

RecreatePurchase

Path: /v1/foodordering/purchases/recreate
Method: POST
Type: Non-idempotent
Recreates a new purchase based on a previously placed order. Allows a user to reorder from a previous order. If the original order contains items or options that are no longer available, those may be omitted or flagged in the response issues.

Request

ParameterTypeDescriptionRequired
orderIdStringThe ID of the previously placed order to recreate as a purchaseYes
fulfillmentFulfillmentHow the order will be fulfilled (delivery or pickup)No

Response

ParameterTypeDescriptionRequired
purchaseIdStringIdentifier for the newly created purchaseYes
issuesList(MenuItemIssue)Per-item issues for menu items from the original order that could not be recreatedNo

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

SearchOrders

Path: /v1/foodordering/orders/search
Method: POST
Type: Idempotent
Searches for orders matching the specified criteria. Returns a paginated list of orders filtered by state, fulfillment type, and optional text matching on restaurant name, cuisine, or menu item.

Request

ParameterTypeDescriptionRequired
stateOrderStateFilter by order state (ACTIVE, FULFILLED, CANCELLED)Yes
fulfillmentTypeStringFulfillment type filter (DELIVERY, PICKUP, DINE_IN)No
menuItemNameStringFilter by menu item nameNo
restaurantNameStringFilter by restaurant nameNo
cuisineNameStringFilter by cuisine nameNo
maxResultsIntegerMaximum number of results to return per page. Range: 1–50. Default: 20.Yes
nextTokenStringOpaque cursor for the next page of resultsNo

Response

ParameterTypeDescriptionRequired
ordersList(OrderDetails)Matching ordersYes
nextTokenStringPagination cursor for the next page. Absent when no more results are available.No

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

SearchPurchases

Path: /v1/foodordering/purchases/search
Method: POST
Type: Idempotent
Searches for active purchases (in-progress checkouts) associated with the authenticated user. Returns only pre-submit purchases — use SearchOrders for placed orders.

Request

ParameterTypeDescriptionRequired
maxResultsIntegerMaximum number of results to return per page. Range: 1–50. Default: 20.Yes
nextTokenStringOpaque cursor for the next page of resultsNo

Response

ParameterTypeDescriptionRequired
purchasesList(PurchaseSummary)A list of purchase summariesYes
nextTokenStringPagination cursor for the next page. Absent when no more results are available.No

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

SubmitPurchase

Path: /v1/foodordering/purchases/{purchaseId}/submit
Method: POST
Type: Non-idempotent
Required Permissions: WRITE_NOTIFICATIONS
Submits the purchase, finalizing it and placing the order. This operation is NOT idempotent — calling twice may result in duplicate orders. Assumes PreviewPurchase was called and issues resolved. Returns the created order IDs for subsequent tracking via SearchOrders. Call this operation only after PreviewPurchase returns zero issues and the user explicitly confirms. Never call without user confirmation — this charges real money.

Request

ParameterTypeDescriptionRequired
purchaseIdStringThe purchase to submit. Length: 1–256 characters.Yes

Response

ParameterTypeDescriptionRequired
orderIdsList(String)Order identifiers created from this purchase. Multiple IDs are possible in multi-cart scenarios.Yes

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

UpdateCartItem

Path: /v1/foodordering/purchases/{purchaseId}/carts/{cartId}/cartItems/{cartItemId}
Method: PUT
Type: Idempotent
Updates an existing cart item with new menu item selections made by the user. The cartItemSelection contains only the subset of menu item options explicitly selected by the user.

Request

ParameterTypeDescriptionRequired
purchaseIdStringIdentifier for the purchase. Length: 1–256 characters.Yes
cartIdStringIdentifier for the cart. Length: 1–256 characters.Yes
cartItemIdStringIdentifier for the cart item. Length: 1–256 characters.Yes
cartItemSelectionCartItemSelectionThe user’s updated menu item choicesYes

Response

Empty body on success.

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

UpdatePurchase

Path: /v1/foodordering/purchases/{purchaseId}
Method: PATCH
Type: Idempotent
Updates a purchase with new payment, tip, fulfillment, or recipient details. Only payments, fulfillment, tip, and recipient updates are supported. Cart contents cannot be modified through this operation — use the CartItem operations (CreateCartItem / UpdateCartItem / DeleteCartItem) instead. Returns an empty response on success.

Request

ParameterTypeDescriptionRequired
purchaseIdStringIdentifier of the purchase to update. Length: 1–256 characters.Yes
paymentSelectionsList(PaymentSelection)Updated payment informationNo
tipTipTip to apply. If present, fully replaces the existing tip; if omitted, the existing tip is left unchanged.No
fulfillmentFulfillmentHow the purchase will be fulfilled (delivery or pickup)No
recipientUserDetailsUser details for the person receiving the purchaseNo

Response

Empty body on success.

Errors

  • 400 ValidationException
  • 400 FoodOrderingError
  • 408 RequestTimeoutError
  • 429 RequestThrottlingError
  • 500 InternalServerError

Components

ActiveStateDetails

Details for an order in ACTIVE state (placed but not yet fulfilled).
ParameterTypeDescriptionRequired
statusStringCurrent progress status of the active orderYes
estimatedFulfillmentTimeStringEstimated delivery/pickup time (RFC 3339). Maximum length: 35 characters.Yes
lastUpdatedAtStringWhen the status was last updated (RFC 3339). Maximum length: 35 characters.No

AddressDetails

Physical address with structured postal fields and geographic coordinates.
ParameterTypeDescriptionRequired
addressLine1StringPrimary street address line. This field is sensitive.No
addressLine2StringSecondary address line (apt, suite, unit, etc.). This field is sensitive.No
addressLine3StringAdditional address line. This field is sensitive.No
cityStringCity or locality nameNo
stateOrRegionStringState, region, or provinceNo
districtOrCountyStringDistrict or countyNo
countryCodeStringISO 3166-1 alpha-2 country code, for example, US. Exactly 2 characters.No
postalCodeStringPostal or ZIP codeNo
formattedAddressStringHuman-readable, locale-aware formatted address string for display purposes. Required for restaurant addresses; not required for delivery addresses.No
coordinatesGeoCoordinatesGeographic coordinates for location-based operations. This field is sensitive.No

AddressSummary

A saved address entry with identifier, details, and optional label.
ParameterTypeDescriptionRequired
addressIdStringUnique identifier for the addressYes
detailsAddressDetailsPhysical address detailsYes
labelStringHuman-readable label, for example, “Home” or “Work”No

AmazonPay

Amazon Pay payment instrument. This is a marker type with no members.

CancelledStateDetails

Details for an order in CANCELLED state.
ParameterTypeDescriptionRequired
cancelledAtStringWhen the order was cancelled (RFC 3339). Maximum length: 35 characters.No
reasonStringWhy the order was cancelledNo
cancelledByStringWho initiated the cancellation (USER, RESTAURANT, PLATFORM)No

CartDetails

Full cart details including items and restaurant information.
ParameterTypeDescriptionRequired
cartIdStringUnique identifier for the cartYes
restaurantSummariesList(RestaurantSummary)Restaurants associated with this cartYes
cartItemsList(CartItemDetails)Items in the cartYes

CartItemChoice

A choice within a cart item.
ParameterTypeDescriptionRequired
choiceIdStringUnique identifier for the choiceYes
nameStringDisplay name of the choiceYes
quantityIntegerQuantity selectedYes
priceMonetaryValuePrice of the choiceYes
choiceCategoriesList(CartItemChoiceCategory)Nested sub-choice categories. Default: empty list.Yes

CartItemChoiceCategory

A choice category within a cart item.
ParameterTypeDescriptionRequired
categoryIdStringUnique identifier for the categoryYes
nameStringDisplay name of the categoryYes
choicesList(CartItemChoice)Choices within this category. Default: empty list.Yes

CartItemDetails

A fully detailed cart item returned in responses. Enriches the user’s original selections with assigned cartItemId and display-ready fields.
ParameterTypeDescriptionRequired
cartItemIdStringUnique identifier for the cart itemYes
restaurantIdStringRestaurant identifierYes
menuCategoryIdStringMenu category identifierYes
menuItemIdStringMenu item identifierYes
menuItemNameStringDisplay name of the menu itemYes
priceMonetaryValueItem priceYes
quantityIntegerNumber of this item in the cartYes
imageUrlStringItem image URL (HTTPS). Minimum length: 1 character.No
specialInstructionsStringFree-text preparation instructionsNo
choiceCategoriesList(CartItemChoiceCategory)Customization choices for this item. Default: empty list.Yes

CartItemSelection

Represents the user’s explicit menu item choices. Used in requests (CreateCartItem, UpdateCartItem, CreatePurchase) and contains only what the user chose.
ParameterTypeDescriptionRequired
menuCategoryIdStringMenu category this item belongs toYes
menuItemIdStringThe menu item being added/updatedYes
quantityIntegerNumber of servings of this itemYes
specialInstructionsStringFree-text preparation instructions (for example, “no onions, extra sauce”)No
choiceCategorySelectionsList(ChoiceCategorySelection)User’s customization choices for this item. Default: empty list.Yes

CartSelection

Cart selection containing the restaurant and item selections.
ParameterTypeDescriptionRequired
restaurantIdStringThe restaurant this cart belongs toYes
cartItemSelectionsList(CartItemSelection)Item selections for the cartNo

Charges

Cost breakdown for an order or purchase. All fields are required — services MUST return values for every field (use zero amounts when a charge component does not apply).
ParameterTypeDescriptionRequired
subTotalMonetaryValueTotal cost of items before fees, taxes, and discountsYes
deliveryFeeMonetaryValueFee charged for delivery. Zero for pickup orders.Yes
tipTipTip applied to the orderYes
taxesMonetaryValueTotal tax amountYes
savingsList(Saving)Discount/promotion savings applied. Empty list if no savings.Yes
otherFeesList(OtherFee)Additional fees (service fee, small order fee, etc.). Empty list if none apply.Yes
grandTotalMonetaryValueFinal amount charged (subTotal + deliveryFee + tip + taxes + otherFees - savings)Yes

ChoiceCategorySelection

A selected choice category with the user’s chosen options.
ParameterTypeDescriptionRequired
choiceCategoryIdStringID of the choice category (for example, “toppings”, “size”)Yes
choiceSelectionsList(ChoiceSelection)Choices selected within this category. Default: empty list.Yes

ChoiceQuantityLimits

Quantity limits for a single choice option.
ParameterTypeDescriptionRequired
minQuantityIntegerMinimum quantity allowedYes
maxQuantityIntegerMaximum quantity allowedYes
defaultQuantityIntegerDefault quantity if not specifiedYes

ChoiceQuantitySumLimits

Limits on the sum of quantities across all choices in a category.
ParameterTypeDescriptionRequired
minSumIntegerMinimum total quantity sumYes
maxSumIntegerMaximum total quantity sumYes

ChoiceSelection

A single choice selected by the user within a category.
ParameterTypeDescriptionRequired
choiceIdStringID of the chosen option (for example, “extra_cheese”)Yes
quantityIntegerQuantity of this choice (for example, 2x extra cheese)Yes
choiceCategorySelectionsList(ChoiceCategorySelection)Nested sub-choices if this choice has its own customization tree. Default: empty list.Yes

CreditCard

Credit or debit card payment instrument details.
ParameterTypeDescriptionRequired
typeStringCard network identifier (for example, VISA, MASTERCARD, AMERICAN_EXPRESS, JCB, UNIONPAY)Yes
lastFourDigitsStringLast four digits of the card numberYes
lightImageUrlStringCard network logo URL for light theme backgrounds (HTTPS)No
darkImageUrlStringCard network logo URL for dark theme backgrounds (HTTPS)No

Delivery

Delivery fulfillment details including destination address and delivery timing.
ParameterTypeDescriptionRequired
addressAddressDetailsDelivery destination addressYes
typeStringLogistics method (ASAP, SCHEDULED, MARKETPLACE_DELIVERY, RESTAURANT_DELIVERY). Any string is accepted.No

DeliveryAvailability

Detailed delivery availability for a restaurant at a given address.
ParameterTypeDescriptionRequired
isOpenBooleanWhether the restaurant is currently open for businessYes
isAvailableBooleanWhether delivery is available to the specified address right nowYes
cutOffInMinutesIntegerMinutes remaining before delivery orders are cut offNo
distanceDistanceDistance from the delivery address to the restaurantNo
feeMonetaryValueDelivery fee for this restaurant/address combination. Present when isAvailable = true.No
deliveryEstimateRangeDurationRangeEstimated delivery time range (for example, 25-40 minutes). Present for ASAP delivery only.No
unavailabilityCodesList(UnavailabilityCode)Reasons why delivery is unavailable. Present when isAvailable = false.No

DeliveryAvailabilitySummary

Summary of delivery availability for a restaurant.
ParameterTypeDescriptionRequired
isOpenBooleanWhether the restaurant is currently openYes
isAvailableBooleanWhether delivery is availableYes
cutOffInMinutesIntegerMinutes remaining before delivery orders are cut offNo

Distance

A distance measurement with explicit unit.
ParameterTypeDescriptionRequired
valueDoubleNumeric distance value (non-negative)Yes
unitDistanceUnitUnit of measurement (KILOMETERS or MILES)Yes

DistanceUnit

Unit of distance measurement.

DistinctChoiceLimits

Limits on the number of distinct choices that can be selected in a category.
ParameterTypeDescriptionRequired
minChoicesIntegerMinimum number of distinct choices requiredYes
maxChoicesIntegerMaximum number of distinct choices allowedYes

DurationRange

A relative duration range in minutes (for example, estimated delivery: 25-40 minutes).
ParameterTypeDescriptionRequired
minMinutesIntegerMinimum duration in minutesYes
maxMinutesIntegerMaximum duration in minutesYes

EstimatedTimeWindow

Estimated fulfillment time — either a relative duration from now or an absolute window. Exactly one variant is present.
ParameterTypeDescriptionRequired
relativeMinutesRangeDurationRangeA relative duration range in minutesNo
absoluteTimeRangeTimeRangeAn absolute time range between two RFC 3339 datetime pointsNo

Fulfillment

How the order will be fulfilled — delivery or pickup. Exactly one variant is present.
ParameterTypeDescriptionRequired
deliveryDeliveryDelivery fulfillment detailsNo
pickupPickupPickup fulfillment detailsNo

FulfillmentAvailability

Availability by fulfillment type for a restaurant.
ParameterTypeDescriptionRequired
deliveryDeliveryAvailabilityDelivery availability details. Absent if delivery is not offered.No

FulfillmentAvailabilitySummary

Summary of fulfillment availability options for a restaurant.
ParameterTypeDescriptionRequired
deliveryDeliveryAvailabilitySummaryDelivery availability summaryYes

FulfilledStateDetails

Details for an order in FULFILLED state (successfully delivered or picked up).
ParameterTypeDescriptionRequired
placedAtStringWhen the order was originally placed (RFC 3339). Maximum length: 35 characters.Yes
fulfilledAtStringWhen the order was delivered or picked up (RFC 3339). Maximum length: 35 characters.No

GeoCoordinates

Geographic coordinates for location-based operations. This structure is sensitive and must not be exposed in exception messages or log output.
ParameterTypeDescriptionRequired
latitudeInDegreesDoubleLatitude in degrees (-90 to 90)Yes
longitudeInDegreesDoubleLongitude in degrees (-180 to 180)Yes
accuracyInMetersDoubleGPS provided accuracy value for the coordinates (in meters)No

Issue

A validation issue or error associated with a purchase or order.
ParameterTypeDescriptionRequired
codeFoodOrderingErrorCodeError code identifying the issueYes
metadataStringAdditional metadata about the issueNo
A menu category containing item summaries.
ParameterTypeDescriptionRequired
restaurantIdStringRestaurant identifierYes
menuCategoryIdStringUnique identifier for the categoryYes
nameStringDisplay name of the categoryYes
menuItemSummariesList(MenuItemSummary)Items in this categoryYes
Metadata attributes for a menu item.
ParameterTypeDescriptionRequired
containsAlcoholBooleanWhether the item contains alcoholYes
popularBooleanWhether the item is popularYes
A customization choice for a menu item.
ParameterTypeDescriptionRequired
idStringUnique identifier for the choiceYes
nameStringDisplay name of the choiceYes
choiceCategoriesList(MenuItemChoiceCategory)Nested sub-categories for this choiceNo
quantityLimitsChoiceQuantityLimitsQuantity constraints for this choiceNo
selectedByDefaultBooleanWhether this choice is pre-selectedNo
priceMonetaryValuePrice of this choiceNo
A choice category within a menu item (for example, “Size”, “Toppings”).
ParameterTypeDescriptionRequired
idStringUnique identifier for the categoryYes
nameStringDisplay name of the categoryYes
choicesList(MenuItemChoice)Available choices in this categoryNo
distinctChoiceLimitsDistinctChoiceLimitsLimits on distinct choicesYes
choiceQuantitySumLimitsChoiceQuantitySumLimitsLimits on the sum of choice quantitiesNo
Full details of a menu item including customization options. Used in GetMenuItem and BatchGetMenuItems responses.
ParameterTypeDescriptionRequired
restaurantIdStringRestaurant identifier. Length: 1–256 characters.Yes
menuCategoryIdStringMenu category identifier. Length: 1–256 characters.Yes
menuItemIdStringMenu item identifier. Length: 1–256 characters.Yes
availableBooleanWhether the item can currently be orderedYes
nameStringItem display nameYes
basePriceMonetaryValueStarting price before customizationsYes
imageUrlStringItem image URL (HTTPS)No
attributesMenuItemAttributesItem metadata (contains alcohol, popular)Yes
choiceCategoriesList(MenuItemChoiceCategory)Customization categoriesNo
maxQuantityPerOrderIntegerMaximum quantity allowed per order. Present only when a limit applies.No
descriptionStringItem description textNo
Identifies a specific menu item by category and item ID.
ParameterTypeDescriptionRequired
menuCategoryIdStringMenu category identifier. Length: 1–256 characters.Yes
menuItemIdStringMenu item identifier. Length: 1–256 characters.Yes
Per-item issue details for items that could not be resolved.
ParameterTypeDescriptionRequired
menuItemMenuItemIdentifierThe item that has issuesYes
issuesList(Issue)Issues for this itemNo
Summary of a menu item for display in category listings.
ParameterTypeDescriptionRequired
menuItemIdStringUnique identifier for the menu itemYes
nameStringDisplay name of the itemYes
basePriceMonetaryValueStarting price before customizationsYes
imageUrlStringItem image URL (HTTPS)No
attributesMenuItemAttributesItem metadata (contains alcohol, popular)Yes
descriptionStringItem description textNo
maxQuantityPerOrderIntegerMaximum quantity per orderNo
hasCustomizationsBooleanWhether the item has customization optionsNo

MonetaryValue

A monetary amount with currency. The value field uses a decimal string representation to avoid floating-point precision issues. Negative values are permitted (for example, discounts, refunds).
ParameterTypeDescriptionRequired
currencyCodeStringISO 4217 three-letter currency code, for example, USD. Exactly 3 characters.Yes
valueStringDecimal string representation of the amount, for example, 12.99. Must match ^[+-]?[0-9]+(\.[0-9]+)?$. Maximum length: 128 characters.Yes

OrderDetails

Complete details of a placed order, returned by SearchOrders.
ParameterTypeDescriptionRequired
orderIdStringUnique identifier for this orderYes
stateOrderStateCurrent lifecycle state (ACTIVE, FULFILLED, or CANCELLED)Yes
stateDetailsOrderStateDetailsState-specific metadataYes
cartsList(CartDetails)Cart(s) in this order — items, quantities, and restaurant infoYes
chargesChargesCost breakdown (subtotal, delivery fee, tip, taxes, grand total)No
fulfillmentFulfillmentHow the order is being fulfilledYes
recipientUserDetailsRecipient details (name, email, phone)No
paymentsList(Payment)Payment method(s) usedNo

OrderState

Current lifecycle state of an order.

OrderStateDetails

State-specific metadata for an order. Exactly one variant is present, corresponding to the order’s current OrderState.
ParameterTypeDescriptionRequired
activeActiveStateDetailsDetails for ACTIVE stateNo
fulfilledFulfilledStateDetailsDetails for FULFILLED stateNo
cancelledCancelledStateDetailsDetails for CANCELLED stateNo

OtherFee

A named fee component (for example, service fee, small order fee).
ParameterTypeDescriptionRequired
amountMonetaryValueFee amountYes
nameStringDisplay name of the feeYes

Payment

Payment applied to a purchase, containing one or more splits across methods.
ParameterTypeDescriptionRequired
scopePaymentScopeScope to which the payment appliesYes
splitsList(PaymentSplit)Payment allocations across methodsYes

PaymentInstrument

Supported payment instrument types. Exactly one variant is present.
ParameterTypeDescriptionRequired
creditCardCreditCardCredit or debit card detailsNo
amazonPayAmazonPayAmazon Pay instrumentNo
payPalPayPalPayPal instrumentNo

PaymentMethodDetails

A saved payment method with its unique identifier and instrument details.
ParameterTypeDescriptionRequired
paymentMethodIdStringUnique identifier for the payment methodYes
instrumentPaymentInstrumentPayment instrument detailsYes

PaymentScope

Scope to which a payment applies.

PaymentSelection

User’s payment selection for a specific scope.
ParameterTypeDescriptionRequired
scopePaymentScopeScope to which the payment appliesYes
splitsList(PaymentSplit)Payment allocationsYes

PaymentSplit

A single payment allocation — method and amount charged.
ParameterTypeDescriptionRequired
methodPaymentMethodDetailsThe payment method usedYes
amountMonetaryValueAmount charged to this methodYes

PayPal

PayPal payment instrument.
ParameterTypeDescriptionRequired
loginPayPalIdentifierIdentifier for the PayPal accountYes

PayPalIdentifier

Identifier for a PayPal account — either email or phone. Exactly one variant is present. This structure is sensitive.
ParameterTypeDescriptionRequired
emailStringPayPal email address. Length: 5–254 characters. This field is sensitive.No
phonePhoneNumberPayPal phone number. This field is sensitive.No

PhoneNumber

Phone number with country code separation. This structure is sensitive and must not be exposed in exception messages or log output.
ParameterTypeDescriptionRequired
countryCallingCodeStringCountry calling code, for example, 1 for US, 91 for India. Must match ^[1-9]\d{0,2}$. Maximum length: 3 characters.Yes
numberStringSubscriber number without country code. Must match ^\d{4,14}$. Length: 4–14 characters. This field is sensitive.Yes

Pickup

Pickup fulfillment details. This is a marker type with no members.

PromotionSaving

Savings from a promotion or coupon code.
ParameterTypeDescriptionRequired
totalMonetaryValueTotal amount savedYes
breakdownSavingBreakdownDistribution of the saving across charge componentsNo
nameStringName or description of the promotion (for example, “20% off first order”)Yes

PurchaseSummary

Summary of an in-progress purchase.
ParameterTypeDescriptionRequired
purchaseIdStringUnique identifier for the purchase. Length: 1–256 characters.Yes
cartsList(CartDetails)Cart(s) in the purchaseYes
fulfillmentFulfillmentHow the order will be fulfilledYes

RestaurantAvailability

Availability information for a specific restaurant.
ParameterTypeDescriptionRequired
restaurantIdStringRestaurant identifierYes
isOpenBooleanWhether the restaurant is currently openYes
fulfillmentAvailabilityFulfillmentAvailabilityAvailability by fulfillment typeYes

RestaurantSummary

Summary restaurant information.
ParameterTypeDescriptionRequired
restaurantIdStringUnique identifier for the restaurantYes
nameStringRestaurant display nameYes

Saving

A saving applied to the order. Exactly one variant is present.
ParameterTypeDescriptionRequired
subscriptionSubscriptionSavingSavings from an active subscriptionNo
promotionPromotionSavingSavings from a promotion or coupon codeNo

SavingBreakdown

Distribution of a saving across charge components.
ParameterTypeDescriptionRequired
deliveryFeeMonetaryValueAmount saved on delivery feeYes
taxesMonetaryValueAmount saved on taxesYes
otherFeesList(OtherFee)Savings applied to other feesYes

SubscriptionSaving

Savings from an active subscription (for example, a delivery membership).
ParameterTypeDescriptionRequired
totalMonetaryValueTotal amount savedYes
breakdownSavingBreakdownDistribution of the saving across charge componentsNo
nameStringName of the subscription (for example, “Premium Delivery”, “Membership Plus”)Yes

TimeRange

An absolute time range between two RFC 3339 datetime points. Used for estimated fulfillment windows.
ParameterTypeDescriptionRequired
earliestStringEarliest possible time (RFC 3339). Maximum length: 35 characters.Yes
latestStringLatest possible time (RFC 3339). Maximum length: 35 characters.Yes

Tip

Tip applied to the order.
ParameterTypeDescriptionRequired
typeStringHow the tip is applied (INCLUDED_IN_BILL, CASH, PRE_PAID, POST_DELIVERY)No
valueTipValueThe tip amount or percentageNo

TipValue

Tip value — either a percentage of the subtotal or a fixed monetary amount. Exactly one variant is present.
ParameterTypeDescriptionRequired
percentDoubleTip as a percentage (for example, 15.0 for 15%)No
amountMonetaryValueTip as a fixed monetary amountNo

UnavailabilityCode

Reason codes for why delivery is unavailable.

UserDetails

Details of the order recipient (name, email, phone). All fields are optional — presence depends on permissions granted by the user. This structure is sensitive and must not be exposed in log output.
ParameterTypeDescriptionRequired
nameStringUser’s full name. Length: 1–100 characters. This field is sensitive.No
emailStringUser’s email address. Must match ^[^@\s]+@[^@\s]+\.[^@\s]+$. Length: 5–254 characters. This field is sensitive.No
phoneNumberPhoneNumberUser’s phone number with country code. This field is sensitive.No

ValidationException

A standard error for input validation failures. Thrown when a member of the input structure falls outside of the modeled or documented constraints.
ParameterTypeDescriptionRequired
messageStringA summary of the validation failureYes
fieldListList(ValidationExceptionField)A list of specific failures encountered while validating the inputNo

ValidationExceptionField

Describes one specific validation failure for an input member.
ParameterTypeDescriptionRequired
pathStringA JSONPointer expression to the structure member whose value failed to satisfy the modeled constraintsYes
messageStringA detailed description of the validation failureYes

Errors

All operations in the Food Ordering SPI may return the following errors.

FoodOrderingError

A domain-specific error containing one or more issues. HTTP status: 400.
ParameterTypeDescriptionRequired
messageStringHuman-readable error messageYes
issuesList(Issue)Structured issue detailsYes

FoodOrderingErrorCode

Common error codes

Last modified on July 21, 2026