Orders V3
The Orders V3 API provides enhanced order management with additional fulfillment capabilities and improved status tracking.
Overview
V3 introduces expanded order lifecycle management with new statuses for voids, refunds, and failures. Support for deferred orders, auto-fulfillment, and post-confirmation attribute updates.
API Endpoints
Create Order
POST /online-ordering/v3/{locationId}/orders
This endpoint is used to place an order and be sure that the POS is Online.
Accepted Statuses:
ANTICIPATEDREADY_FOR_CONFIRMATION
Request Body (required)
Content-Type: application/json
{
"appRef": "string",
"orderNumber": "string",
"status": "string",
"placedAt": "string",
"expectedAt": "string",
"autoFulfillAfter": "integer",
"fulfillmentType": "string",
"deliveryInfo": "<OrderDeliveryInfo>",
"pickupInfo": "<OrderPickupInfo>",
"dineInInfo": "<OrderDineInInfo>",
"payments": ["<OrderPayment>"],
"paymentTotal": "integer",
"surcharges": ["<OrderSurcharge>"],
"surchargeTotal": "integer",
"taxes": ["<OrderTax>"],
"taxTotal": "integer",
"tipTotal": "integer",
"grandTotal": "integer",
"lineItems": ["<OrderLineItem>"],
"metadata": ["<OrderMetadata>"],
"attributes": "<OrderAttributes>"
}
Responses:
200- POS is online and order successfully created.
Response Body:
Content-Type: application/json
{
"id": "<Created order identifier>"
}
504- POS is offline and 3rd-party should do a retry action or contact a Restaurant to know the "offline" reason.
Retrieve Order
GET /online-ordering/v3/{locationId}/orders/{id}
Retrieve an Online Order V3 details by order id.
Response: 200 - Returns an online order V3 object
{
"id": "string",
"appRef": "string",
"orderNumber": "string",
"status": "string",
"placedAt": "string",
"expectedAt": "string",
"estimatedAt": "string",
"autoFulfillAfter": "integer",
"fulfillmentType": "string",
"deliveryInfo": "<OrderDeliveryInfo>",
"pickupInfo": "<OrderPickupInfo>",
"dineInInfo": "<OrderDineInInfo>",
"payments": ["<OrderPayment>"],
"paymentTotal": "integer",
"surcharges": ["<OrderSurcharge>"],
"surchargeTotal": "integer",
"statusHistory": ["<OrderStatusHistoryEntry>"],
"taxes": ["<OrderTax>"],
"taxTotal": "integer",
"tipTotal": "integer",
"grandTotal": "integer",
"lineItems": ["<OrderLineItem>"],
"metadata": ["<OrderMetadata>"],
"attributes": "<OrderAttributes>"
}
Update Order Status
POST /online-ordering/v3/{locationId}/orders/{id}/status
This endpoint is used to update an order status.
The endpoint accepts only these statuses: READY_FOR_CONFIRMATION, CANCELLED, REJECTED. Reason required with REJECTED or CANCELLED status.
Request Body:
{
"status": "string",
"reason": {
"code": "string",
"explanation": "string"
}
}
Response: 204 - Request was successfully accepted
Update Order Attributes
PUT /online-ordering/v3/{locationId}/orders/{id}/attributes
This endpoint is used to update an order attributes.
Endpoint accepts attributes payload with at least one of the following properties: vehicle, pickupLocation, table.
Request Body:
{
"vehicle": "string",
"pickupLocation": "string",
"table": "string"
}
Response: 204 - Request was successfully accepted
Order Status Values
The V3 API supports 13 distinct order statuses:
| Status | Description |
|---|---|
UNKNOWN | Status unknown or not set |
PLACEMENT_FAILED | Order creation failed |
ANTICIPATED | Future order that may be cancelled |
READY_FOR_CONFIRMATION | Pending restaurant confirmation |
CONFIRMED | Restaurant has confirmed receipt |
REJECTED | Error occurred during processing |
CANCELLED | Customer cancelled order |
READY_FOR_PICKUP | Food prepared and ready |
OUT_FOR_DELIVERY | Food in transit to customer |
FULFILLED | Food delivered or picked up |
FULFILLMENT_FAILED | Failed to complete fulfillment |
VOIDED | Order voided (NEW in V3) |
REFUNDED | Order refunded (NEW in V3) |
Data Models
Core Order Fields
| Field | Type | Required | Description |
|---|---|---|---|
appRef | string | Yes | 3rd-party globally unique order identifier |
orderNumber | string | Yes | Human-readable order reference |
status | string | Yes | Current order state |
placedAt | string | Yes | Order placement timestamp (UTC only) |
expectedAt | string | Yes | Expected delivery/pickup time (UTC) |
estimatedAt | string | No | Restaurant's estimated fulfillment time (UTC) |
fulfillmentType | string | Yes | DELIVERY, PICKUP, DINE_IN, or CURBSIDE |
autoFulfillAfter | integer | No | Minutes until auto-transition to FULFILLED |
paymentTotal | integer | Yes | Initial total in US cents |
surchargeTotal | integer | Yes | Total surcharges in US cents |
taxTotal | integer | Yes | Total tax amount in US cents |
tipTotal | integer | Yes | Total tips in US cents |
grandTotal | integer | Yes | Final total in US cents |
isDeferred | boolean | No | Whether order is deferred |
deferredUntil | string | No | Deferral deadline (UTC; required if isDeferred=true) |
discountTotal | integer | No | Total discount in US cents |
Fulfillment Types
DELIVERY
- Requires delivery address and contact information
- Supports delivery service integration
- Includes delivery-specific fields (estimated time, instructions)
PICKUP
- Includes special instructions and diner contact info
- Supports curbside-specific attributes (vehicle, pickup location)
DINE_IN
- Includes table information
- Supports special instructions
CURBSIDE
- Extension of PICKUP type
- Requires vehicle description and parking location
- Supports post-confirmation attribute updates
Order Attributes (Post-Confirmation)
| Field | Type | Description |
|---|---|---|
vehicle | object | Vehicle description and color |
pickupLocation | string | Specific pickup location |
table | string | Table number/identifier |
Metadata
Custom key-value pairs for additional order data:
STRINGtype - text valuesBOOLEANtype - true/false flags
Each metadata entry contains:
name- Key identifiervalue- Data value
Differences from V2
Key Changes
- Order ID in Response: V3 returns order ID in 200 response (V2 returned 204)
- Status Endpoint: Separate POST endpoint for status updates
- Attributes Endpoint: New PUT endpoint for post-confirmation customization
- Additional Statuses: UNKNOWN, PLACEMENT_FAILED, FULFILLMENT_FAILED, VOIDED, REFUNDED
- Deferred Orders: New
isDeferredanddeferredUntilfields - Auto-Fulfillment: New
autoFulfillAfterfield for automatic status transitions - Discount Tracking: New
discountTotalfield - Enhanced Delivery: More detailed delivery service integration
- Metadata Support: Extensible custom data fields
- Field Naming: Uses
refinstead ofguidfor references
Validation Rules
- Timestamps: Only UTC format accepted
- Currency: All amounts in US cents (integers)
- Phone Numbers: E.164 format required for delivery services
- Attributes Update: Order must be confirmed before attribute updates
- Reason Requirement: Mandatory for REJECTED/CANCELLED status transitions
- Deferred Orders:
deferredUntilrequired whenisDeferred=true