Skip to content
Type to search…

Products & Menus 101

Getting menus, categories, and products A location's catalog is split into menus, categories in a menu, and products in each category. Products w

A location’s catalog is split into menus, categories in a menu, and products in each category.
Products will only show up in a single category, but categories may show up on multiple menus.

In typical situations you may only want to retrieve available menus, available categories, and available products. For example, menus, categories, and products that are enabled and in-schedule. A simple query for a single location might look like this:

You might also choose to limit this query by a specific menu via the menuUuid or by using the (not implemented) availableMenu if you happen to have a dedicated menu for the integration.

query ($locationUuid: String!) {
location(locationUuid: $locationUuid) {
name
available
availableMenusList {
name
availableCategoriesList {
label
availableProductsList {
productId
productUuid
name
description
shortName
productCode
hasVariants
variantsList {
name
price
sku
}
# options
modifiers {
name
type
enabled
required
rank
product
allowOptionQuantities
options {
key
name
type
enabled
allowOptionQuantities
price
product
}
}
}
}
}
}
}

Product categories and product types are used to label and categorize your products. However, product category and product type aren’t the same thing.

A product type, is a label that you can define and that describes the category of a product. The product type lets you use product categories other than the ones an operator creates when building their catalog. The product type is made available in the product UI is a truncated list. It is returned in the GQL API as productCode. Below is the mapping table for our product type codes.

The product type UI in the catalog currently only lists Apparel & Accessories, Food, Beverages & Tobacco, Arts & Entertainment,Health & Beauty, and Gift card.

Product CodeProduct Type
AAnimals & Pet Supplies
BApparel & Accessories
CArts & Entertainment
DBaby & Toddler
EBusiness & Industrial
FCameras & Optics
GElectronics
HFood, Beverages & Tobacco
IFurniture
JHardware
KHealth & Beauty
LHome & Garden
MLuggage & Bags
NMature
OMedia
POffice Supplies
QReligious & Ceremonial
RSoftware
SSporting Goods
TToys & Games
UVehicles & Parts
VGift card

Standard catalog items have a fixed price defined in GoTab and cannot be overridden in the item payload at order time. If your integration needs dynamic pricing, use one of the two patterns below.

An open product is an ad-hoc item not tied to the catalog. Supply a name and unitPrice directly in the item payload — no productUuid needed. Use this when you need to set the price at the moment of ordering:

{
"name": "Custom Service Charge",
"quantity": 1,
"unitPrice": 2500
}

unitPrice is in cents. This item appears on the receipt and KDS exactly as specified.

Pattern 2 — Applying a discount after tab creation

Section titled “Pattern 2 — Applying a discount after tab creation”

If the tab already exists and you need to apply a discount after the fact — for example, a loyalty redemption or a promo applied externally — use:

POST /api/loc/{locationUuid}/tabs/{tabUuid}/open-discount

This is the right pattern for integrations that manage discounting logic outside of GoTab (e.g. a loyalty platform that decides discount amounts server-side). You don’t need to recreate or modify the original items — just post the discount amount and it is applied to the open tab’s balance.