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
Getting menus, categories, and products
Section titled “Getting menus, categories, and products”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)
availableMenuif 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 Type Codes
Section titled “Product Type Codes”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 Code | Product Type |
|---|---|
| A | Animals & Pet Supplies |
| B | Apparel & Accessories |
| C | Arts & Entertainment |
| D | Baby & Toddler |
| E | Business & Industrial |
| F | Cameras & Optics |
| G | Electronics |
| H | Food, Beverages & Tobacco |
| I | Furniture |
| J | Hardware |
| K | Health & Beauty |
| L | Home & Garden |
| M | Luggage & Bags |
| N | Mature |
| O | Media |
| P | Office Supplies |
| Q | Religious & Ceremonial |
| R | Software |
| S | Sporting Goods |
| T | Toys & Games |
| U | Vehicles & Parts |
| V | Gift card |
Overriding prices at order time
Section titled “Overriding prices at order time”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.
Pattern 1 — Open products
Section titled “Pattern 1 — Open products”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-discountThis 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.