Shift4 Online Ordering API
Enable seamless online ordering integration for restaurants with Shift4's comprehensive API. Manage menus, create and update orders, track real-time status changes, integrate delivery services, and handle inventory with our V2 and V3 APIs.
Getting started
The Shift4 Online Ordering API enables third-party integrations with Shift4's POS system for managing restaurant orders. The API supports real-time order processing, menu synchronization, and webhook notifications for order status changes.
Regular & Future Orders
Shift4 Online Ordering interface supports two types of orders:
| Flow | Description |
|---|---|
| Regular | These orders are in ready for confirmation state, so the order confirmation request from the POS is expected. Mostly used for ASAP orders. |
| Future | These orders are read-only in the POS, so no action from the POS is expected. Also those orders should be either cancelled by the diner or marked as ready for confirmation. Mostly used for Future Orders. |
Order Status Lifecycle
The system defines eight distinct order statuses:
| Status | Description |
|---|---|
| ANTICIPATED | Denotes a future order, which may be cancelled by a diner. |
| READY_FOR_CONFIRMATION | Indicates that the confirmation of the receipt by a restaurant is pending. Effectively, these are new, immediate orders. |
| CONFIRMED | Indicates that the order was confirmed by a restaurant. |
| REJECTED | Indicates an error. For example, if an order is unable to be pushed to the POS (due to a menu item mismatch, the restaurant being offline, etc.), the status should be updated to REJECTED. |
| READY_FOR_PICKUP | Indicates that the food is prepared and ready for the pickup by the diner or a delivery courier. |
| OUT_FOR_DELIVERY | Indicates that the food is on the way to the diner. |
| CANCELLED | Indicates that the diner cancel an order in 3rd-party. |
| FULFILLED | Indicates that the food has been delivered to or picked up by the diner. |
Order Workflows
Regular Order Confirmation Flow
The diagram below explains how the regular (ASAP) order confirmation flow involves the 3rd-party & POS.
- 3rd-party creates a new order with the "READY_FOR_CONFIRMATION" order status.
- Server defines
waitTimeInMinutesand sends a request to confirm an Order. 3rd-party accepts the notification by responding200as status code, otherwise the Order status wouldn't be changed in POS. - Server sends a notification that the Order is ready for pickup, out for delivery or fulfilled. 3rd-party accepts the notification by responding
200as status code, otherwise the Order status wouldn't be changed in POS.
Future Order Confirmation Flow
The diagram below explains how the future order confirmation flow involves the 3rd-party & POS.
- 3rd-party creates a new order with the "ANTICIPATED" order status.
- 3rd-party waits until the order can be started to be prepared and sends an Order update with the order status "READY_FOR_CONFIRMATION".
- Server defines
waitTimeInMinutesand sends a request to confirm an Order. 3rd-party accepts the notification by responding200as status code, otherwise the Order status wouldn't be changed in POS. - Server sends a notification that the Order is either ready for pickup, out for delivery or fulfilled. The 3rd-party accepts the notification by responding
200as status code, otherwise the Order status wouldn't be changed in POS.
Future Order Rejection Flow
The diagram below explains how the future order rejection flow involves the 3rd-party & POS.
- 3rd-party creates a new order with the "ANTICIPATED" order status.
- 3rd-party waits until the order can be started to be prepared and sends a the Order update with the order status "READY_FOR_CONFIRMATION".
- Server defines
reasonand sends a request to reject an Order. 3rd-party accepts the notification by responding200as status code, otherwise the Order status wouldn't be changed in POS.
Future Order Cancellation Flow
The diagram below explains how the future order cancellation flow involves the 3rd-party & POS. Note that orders with "ANTICIPATED" or "READY_FOR_CONFIRMATION" statuses might be cancelled.
- 3rd-party creates a new order with the "ANTICIPATED" order status.
- 3rd-party sends an Order update with the order status "CANCELLED".
API versions
Online Ordering V3 (Latest)
V3 is the latest version with enhanced features and improved capabilities. It includes stock status tracking, delivery service integration, expanded order lifecycle management, and post-confirmation customization.
New in V3:
- Real-time stock status updates (LOW_STOCK, OUT_OF_STOCK)
- Delivery service quotes and integration
- Enhanced order statuses (VOIDED, REFUNDED, PLACEMENT_FAILED)
- Post-confirmation attribute updates (vehicle, pickup location, table)
- Expanded webhook events for refunds and voids
- Better metadata support
Online Ordering V2 (Stable)
V2 is the stable, production-ready version that provides core online ordering functionality including menu management, order creation and updates, and webhook notifications.
V2 Features:
- Complete menu structure with schedules, categories, items, and modifiers
- Order lifecycle management with 8 distinct statuses
- Real-time webhook notifications
- Support for multiple fulfillment types (DELIVERY, PICKUP, DINE_IN, CURBSIDE)
Key features
Menu Management
Retrieve comprehensive menu structures including schedules, categories, items, modifiers, and taxes. Menus support availability flags, operating hours, and customizable pricing with tax calculations.
- Schedule-based availability
- Nested modifier sets with min/max constraints
- Multiple image formats for different display contexts
- Real-time menu update notifications
Order Creation and Updates
Create orders with flexible fulfillment types and update statuses throughout the order lifecycle. Support for anticipated (future) orders and immediate confirmation workflows.
- Multiple fulfillment types: DELIVERY, PICKUP, DINE_IN, CURBSIDE
- Future order scheduling with ANTICIPATED status
- Real-time status transitions
- Payment integration with multiple payment types
Real-time Webhooks
Subscribe to webhook events for menu changes and order status updates. Webhooks provide instant notifications when merchants confirm, reject, or fulfill orders.
- HMAC-SHA256 authentication for security
- Comprehensive event types for all order lifecycle changes
- Menu update notifications
- Stock status updates (V3)
Delivery Integration (V3)
Integrate with third-party delivery services to provide accurate delivery quotes and estimated times. Support for multiple delivery providers with real-time quote generation.
- Multi-provider support (DoorDash, Uber Direct, etc.)
- Real-time delivery fee and ETA calculation
- Age-restricted item handling
- Address validation
Stock Status (V3)
Track real-time inventory availability with dedicated stock status endpoints. Display LOW_STOCK warnings and prevent orders for OUT_OF_STOCK items.
- Real-time stock visibility
- Lightweight polling or webhook updates
- Integration with menu items via references
- Two-state status model (LOW_STOCK, OUT_OF_STOCK)
Subscriptions and Webhooks
Configure webhook endpoints to receive real-time notifications for order status changes and menu updates. All webhooks use HMAC authentication for security.
- Request confirmation and rejection notifications
- Order fulfillment and status change events
- Menu update notifications
- Stock status change webhooks (V3)
- Refund and void notifications (V3)