Orders V2
The Orders V2 API enables third-party integrations to create and manage restaurant orders with real-time status tracking.
Overview
The Online Ordering V2 API enables third-party integrations with Shift4's POS system for managing restaurant orders. The system supports real-time order processing with multiple status transitions and fulfillment types.
Order Types
Regular Orders
- Status: READY_FOR_CONFIRMATION
- Require POS confirmation
- Primarily used for ASAP orders
- Restaurant must actively confirm or reject
Future Orders
- Initial Status: ANTICIPATED
- Read-only in POS until status change
- No immediate POS action required
- Can be cancelled by diner or transitioned to READY_FOR_CONFIRMATION
API Endpoints
Create Order
POST /online-ordering/v2/{locationId}/orders
This endpoint is used to place/update an order and be sure that the POS is Online.
Accepted Statuses:
ANTICIPATED- Future orderREADY_FOR_CONFIRMATION- Immediate order requiring confirmation
Request Body (required)
Content-Type: application/json
Shift4 creates an unique order identifier by locationId and appRef.
{
<Order>
}
Responses:
204- POS is online and are ready to consume orders.504- POS is offline and 3rd-party should do a retry action or contact a Restaurant to know the "offline" reason.
Update Order
PUT /online-ordering/v2/{locationId}/orders
This endpoint is used to update an order status.
Accepted Statuses:
ANTICIPATEDREADY_FOR_CONFIRMATIONCONFIRMEDCANCELLEDREJECTEDREADY_FOR_PICKUPOUT_FOR_DELIVERYFULFILLED
Request Body (required)
Content-Type: application/json
Shift4 identify Order by locationId and appRef.
{
<Order>
}
Responses:
204- POS is online and are ready to consume orders.202- POS is offline and Order request has been registered in queue. POS will receive those updates when POS become online, no need to retry.504- POS is offline and 3rd-party should do a retry action or contact a Restaurant to know the "offline" reason.
Order Status Lifecycle
The system defines eight distinct order statuses:
| Status | Description |
|---|---|
| ANTICIPATED | Future order that may be cancelled by customer |
| READY_FOR_CONFIRMATION | Pending restaurant confirmation (new immediate orders) |
| CONFIRMED | Restaurant has confirmed receipt |
| REJECTED | Error occurred (menu mismatch, offline restaurant, etc.) |
| READY_FOR_PICKUP | Food prepared and ready for collection |
| OUT_FOR_DELIVERY | Food in transit to customer |
| CANCELLED | Customer cancelled in third-party system |
| FULFILLED | Food delivered or picked up |
Workflow Processes
Regular Order Flow:
- Third-party creates order with status READY_FOR_CONFIRMATION
- Server confirms order with wait time estimate
- Server updates to READY_FOR_PICKUP or OUT_FOR_DELIVERY
- Final transition to FULFILLED
Future Order Flow:
- Third-party creates ANTICIPATED order
- System or third-party updates to READY_FOR_CONFIRMATION at scheduled time
- Server confirms order
- Status progression continues as per regular flow
Data Models
Core Order Fields
| Field | Type | Required | Description |
|---|---|---|---|
appRef | string | Yes | 3rd-party globally unique order identifier |
orderNumber | string | Yes | Human-readable customer-facing number (not guaranteed unique) |
status | string | Yes | Current order state |
placedAt | string | Yes | Order timestamp (UTC format) |
expectedAt | string | Yes | Delivery/pickup deadline (UTC format) |
fulfillmentType | string | Yes | DELIVERY, PICKUP, DINE_IN, CURBSIDE |
payments | array | Yes | Payment methods and amounts |
grandTotal | integer | Yes | Total fees for the order in US cents |
paymentTotal | integer | Yes | Initial payment total in US cents |
surchargeTotal | integer | Yes | Total surcharges in US cents |
taxTotal | integer | Yes | Total tax in US cents |
tipTotal | integer | Yes | Total tips in US cents |
Order Line Item
| Field | Type | Description |
|---|---|---|
name | string | Item name |
price | integer | Unit price in US cents |
total | integer | Line total with modifiers in US cents |
quantity | integer | Quantity ordered |
lineModifiers | array | Applied modifications |
Order Payment
| Field | Type | Description |
|---|---|---|
paymentType | string | CASH or NON_CASH |
amount | integer | Payment amount in US cents |
paymentSubType | string | Specific payment method (Apple Pay, PayPal, Credit Card, etc.) |