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 order
  • READY_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:

  • ANTICIPATED
  • READY_FOR_CONFIRMATION
  • CONFIRMED
  • CANCELLED
  • REJECTED
  • READY_FOR_PICKUP
  • OUT_FOR_DELIVERY
  • FULFILLED

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:

StatusDescription
ANTICIPATEDFuture order that may be cancelled by customer
READY_FOR_CONFIRMATIONPending restaurant confirmation (new immediate orders)
CONFIRMEDRestaurant has confirmed receipt
REJECTEDError occurred (menu mismatch, offline restaurant, etc.)
READY_FOR_PICKUPFood prepared and ready for collection
OUT_FOR_DELIVERYFood in transit to customer
CANCELLEDCustomer cancelled in third-party system
FULFILLEDFood delivered or picked up

Workflow Processes

Regular Order Flow:

  1. Third-party creates order with status READY_FOR_CONFIRMATION
  2. Server confirms order with wait time estimate
  3. Server updates to READY_FOR_PICKUP or OUT_FOR_DELIVERY
  4. Final transition to FULFILLED

Future Order Flow:

  1. Third-party creates ANTICIPATED order
  2. System or third-party updates to READY_FOR_CONFIRMATION at scheduled time
  3. Server confirms order
  4. Status progression continues as per regular flow

Data Models

Core Order Fields

FieldTypeRequiredDescription
appRefstringYes3rd-party globally unique order identifier
orderNumberstringYesHuman-readable customer-facing number (not guaranteed unique)
statusstringYesCurrent order state
placedAtstringYesOrder timestamp (UTC format)
expectedAtstringYesDelivery/pickup deadline (UTC format)
fulfillmentTypestringYesDELIVERY, PICKUP, DINE_IN, CURBSIDE
paymentsarrayYesPayment methods and amounts
grandTotalintegerYesTotal fees for the order in US cents
paymentTotalintegerYesInitial payment total in US cents
surchargeTotalintegerYesTotal surcharges in US cents
taxTotalintegerYesTotal tax in US cents
tipTotalintegerYesTotal tips in US cents

Order Line Item

FieldTypeDescription
namestringItem name
priceintegerUnit price in US cents
totalintegerLine total with modifiers in US cents
quantityintegerQuantity ordered
lineModifiersarrayApplied modifications

Order Payment

FieldTypeDescription
paymentTypestringCASH or NON_CASH
amountintegerPayment amount in US cents
paymentSubTypestringSpecific payment method (Apple Pay, PayPal, Credit Card, etc.)

Was this page helpful?