Create a New Tab

A Tab is analogous to a ticket. Typically a Tab is opened and then one or more orders of Items are added to it.

The tab is eventually closed by zeroing out the balance due, either by providing one or more payments, or by refunding/voiding items.

The four essential parts of a Tab include

1. The spot

The Tab's spot represents a physical location, such as a seat at a table in a restaurant or a delivery address, that the order will be sent to. If the spot allows scheduling, which is typical of takeout and delivery orders, then the order can be scheduled for delivery to that spot at a future date. Otherwise the delivery time will be set to ASAP.

The spot also can affect what items can be ordered. For example, a spot at the bar may serve alcoholic beverages whereas a spot on the patio does not. In most cases the spot should be determined before

2. The Guest

The guest is represented by a unique identifier such as their phoneNumber or a customerId.

It is recommended that the guest identifier be provided as the guest, through their inclusion in certain segments, may affect the final price of the order. e.g. by having a first time buyer, employee, military discount.

3. The Items

4. The payments

Recommendations before creating a tab

First ensure that a spot and time are selected. From there, customers will select products from one or more menus.

Menu and products are dynamic in GoTab based on various reasons (e.g. rules and segments) for a location. If your application is displaying menus/products/items, prior to creating a new tab your application should be querying their availability. This best practice will ensure a guest is not viewing a menu or product that is not available for order and prevent errors at checkout.

  • Rules and segments that can impact an order are guest segments (e.g. VIP, first time buyer, beer club member, etc.).
  • Products or items may be disabled or 86 throughout the day and some restaurants maybe disable their online or takeout ordering temporarily for various reasons.

Creating a simple tab

Send a POST request to /api/loc/:location_uuid/tabs to create a tab at the location.

📘

Use Price Check

You do not need to include any discount or fee items, but you do need to ensure that the payment sufficiently covers the balance, which is why you are encouraged to use the price check route when creating and closing a tab all at once.

A customer must be associated with a tab and therefor a customerId or a phoneNumber is required when creating the tab.

ParameterDeveloper Notes
"phoneNumber": "+19999999999",required if customerId not supplied
"customerId": "",required if phoneNumber not supplied

Do not include fees and discounts if you got them from the price check route.

"items": [
          {
               "externalId": "string",
               "quantity": "number",
               "productUuid": "string"
          },
          {
               "modifiers": [
                    {
                         "key": "string",
                         "quantity": "number"
                    }
               ],
               "externalId": "string",
               "quantity": "number",
               "productUuid": "string"
          }
     ]

Closing a tab

To start and close a tab immediately, set openTab: false. Again, there must be at least one item and the payments should add up to at least the amount due on the tab. When set to false there must be a spot_uuid as well. The spot_uuid will will fire the order to the correct KDS.

📘

Open Tabs

Currently, the API only supports CLOSED tabs. The openTab must be set to FALSE.

When openTab: true the tab is created as an open tab and items can be added to it later via the Add items to tab.

A list of payments for the tab should be added when openTab is false, the payments must bring the balance due to 0 or else an error will be thrown. The Price Check route should be used in order to ensure that fees and discounts are covered in total.

    "payments": [
        {
            "tipAmount": 0, // calculated in cents
            "payAmount": 100, // calculated in cents
            "externalId": "12345", // (Optional) an external payment reference from the third party system
            "methods": [{
                "processor": "DOORDASH",
                "amount": 100 // amount on all methods should match tipAmount + payAmount for the payment
            }] 
        }
    ]

Depending on how your application is taking orders you may need to display a pick up time or delivery time to the customer. If doing so, make sure you are allowing orders to be placed within the available schedules. By default scheduled is set to ASAP. Additional notes are optional when submitting an order but it is also important to query specific menu requirements set up by the operator. For example, with takeout/pickup orders the customer may be required to provide the make and/or model of their car.

    "scheduled": "2022-01-31", 
    "spotUuid": "string", // Required when openTab is false
    "notes": "Make it quick!" // (Optional) Notes on the order

This is an example order, immediately closed with items and payment.

{
     "externalId": "GoTab Test 1",
     "openTab": false,
     "spotUuid": "spt_Rem6_xbjGabsHhAWWdTBdIiL",
     "phoneNumber": "1233455678",
     "items": [
          {
               "externalId": "9876",
               "quantity": 4,
               "productUuid": "prd_utucyIkdVyqOwgK4o2KKY819",
               "modifiers": []
          }
     ],
     "payments": [
          {
               "payAmount": 6180,
               "tipAmount": 800,
               "externalId":"3PD transactionId",
               "methods": [
                    {
                         "amount": 6980,
                         "processor": "DOORDASH"
                    }
               ]
          }
     ]
}