If an order is placed and needs to be canceled, you can use the
/orders/v2/orders/
endpoint of the Toast orders API to void the order. For more information
about this endpoint, see the orders
API reference.
{orderGuid}/void
You might want to void an order if:
-
The order was accidentally placed.
-
The order was placed for the wrong location.
-
The restaurant guest who placed the order changed their mind.
When you void an order, you must also void the order's payment at the
same time. Once an order has been voided, it can not
be updated. Even if an order is voided, you can still retrieve
the order with the /orders/
and {guid}/ordersBulk endpoints of the orders API. For more
information about retrieving an order, see Getting detailed information about one order.
Voided orders can also be found in the Orders and Order details reports in Toast Web.
The following sections describe:
Once an order has been voided, you can expect the following updates.
-
The order is removed from the Toast POS app after some time.
-
A new VOIDED ticket is printed for the order.
-
The following values are updated in the order payload:
-
The order's
guestOrderStatusvalue updates toVOIDED. -
The order's
voidedvalue updates totrue. -
The order's
paymentStatusvalue updates toVOIDED. -
The
selectionsobject'svoidedvalue updates totrue.
-
To void an order, ensure the following:
-
Your API client must have the
orders.channel:voidscope. For more information about scopes, see Scopes. -
The order was placed using an Other payment option and not with a cash or card payment. For more information about other payment options, see Other payment workflows.
-
The order is not already voided or deleted.
-
The order was not placed using a Toast gift card payment.
-
The order is not restricted. For more information about restricted orders, see Working with restricted orders.
-
You are using the same
clientIdin your authentication that was used to create the original order with the orders API.
To void an order, you send a POST request
that contains a JSON Order object to the /void
endpoint of the orders API. Before you void an order, ensure it meets the
prerequisites.
The following procedure describes how to void an order.
To void an order
-
Create a JSON object to describe the void operation. The JSON object is the message body parameter for the void request. The following example shows the void request message body contents.
{ "selections": { "voidAll": true }, "payments": { "voidAll": true } }Note
Each
voidAllvalue must be set totrue. -
Send a
POSTrequest to the/orders/v2/orders/endpoint of the orders API.{order GUID}/voidThe body of the
POSTrequest contains theJSON Orderobject for the order. -
The response from the
/voidendpoint indicates whether the order was voided successfully.
You can void an order that has discounts if the order meets all the prerequisites. When you void an order with discounts, you use the same API request that you use to void an order without discounts.
When you void an order with discounts, all discounts on the check are voided. All discount types can be voided.
The example response from the orders API below shows a portion of an
order with discounts that have been voided. When a discount is voided, the
processingState field of the appliedDiscounts
object is set to either VOID or PENDING_VOID for
discounts requiring external validation, for example, integrated loyalty
programs.
Example orders API response of a voided order with discounts
{
"guid": "f682e0b8-5869-45f8-a1c4-04ccbc077006",
"entityType": "Order",
{content omitted}
"voided": true,
"voidDate": "2025-09-10T20:46:40.700+0000",
"voidBusinessDate": 20250910,
"checks": [
{
"voided": true,
"voidDate": "2025-09-10T20:46:40.700+0000",
"voidBusinessDate": 20250910,
"appliedDiscounts": [
{
"guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567775",
"processingState": "VOID",
"discountAmount": 5,
"name": "Check-level discount"
}
],
"selections": [
{
"voided": true,
"voidDate": "2025-09-10T20:46:40.700+0000",
"voidBusinessDate": 20250910,
"appliedDiscounts": [
{
"guid": "cf5f6416-25f1-4075-b5a5-700ee1d58ccc",
"processingState": "VOID",
"discountAmount": 1,
"name": "Item-level discount"
}
]
}
]
}
]
}If your restaurant uses a kitchen display system (KDS) voided orders still show on the KDS, but are updated with strikethrough text styling and the word VOIDED in parenthesis for each voided item selection. The image below shows an example of this update.

Currently, the orders API void endpoint supports
voiding orders with the following payment types.
-
Other payment types.: The Other payment is a custom payment type you can configure to meet additional needs. For more information about Other payment types, see Other payment workflows.
If you try to void an order that has a payment type that is not an Other payment type, such as cash or card, you see the following 400 error response:
"status": 400 "message": "Only OTHER payments may be voided"