Menu

The POS Menu API provides unified menu management across all brands, encompassing items, categories, modifier sets, modifiers, and tax configurations. Retrieve the complete menu structure including nested modifiers for complex menu configurations.

The menu response structure

The menu endpoint returns a comprehensive menu structure with all related entities in a single response.

Properties

  • Name
    categories
    Type
    array
    Description

    Array of menu categories with display names and associated items.

  • Name
    items
    Type
    array
    Description

    Array of menu items with prices, descriptions, and modifier set references.

  • Name
    modifierSets
    Type
    array
    Description

    Array of modifier sets (option groups) with min/max selection rules.

  • Name
    modifiers
    Type
    array
    Description

    Array of individual modifiers with prices and nested modifier set support.

  • Name
    taxes
    Type
    array
    Description

    Array of tax configurations applicable to menu items.

  • Name
    maxModifiersLevel
    Type
    number
    Description

    Maximum depth of nested modifiers supported (modifiers on modifiers).


GET/pos/v2/:locationId/menu

Retrieve menu

Retrieve the complete menu structure for a location including all categories, items, modifiers, and tax configurations. All prices are returned in US cents.

Path parameters

  • Name
    locationId
    Type
    integer
    Description

    The unique identifier for the location. Required.

Request

GET
/pos/v2/:locationId/menu
curl -X GET \
  'https://conecto-api.shift4payments.com/api/pos/v2/244/menu' \
  -H 'x-access-key: YOUR_CLIENT_ID' \
  -H 'x-timestamp: 1709251200' \
  -H 'x-signature: YOUR_SIGNATURE'

Response

{
  "categories": [
    {
      "posRef": "cat-001",
      "name": "Appetizers",
      "description": "Starter dishes",
      "items": ["item-001", "item-002"],
      "isActive": true
    },
    {
      "posRef": "cat-002",
      "name": "Entrees",
      "description": "Main courses",
      "items": ["item-003"],
      "isActive": true
    }
  ],
  "items": [
    {
      "posRef": "item-001",
      "name": "Caesar Salad",
      "description": "Fresh romaine lettuce",
      "price": 1299,
      "taxes": ["tax-001"],
      "modifierSets": ["modset-001"],
      "isActive": true,
      "isSoldByWeight": false,
      "upc": "123456789",
      "sku": "SAL-001"
    },
    {
      "posRef": "item-002",
      "name": "Buffalo Wings",
      "description": "Spicy chicken wings",
      "price": 1499,
      "taxes": ["tax-001"],
      "modifierSets": ["modset-002"],
      "isActive": true,
      "isSoldByWeight": false
    }
  ],
  "modifierSets": [
    {
      "posRef": "modset-001",
      "name": "Dressing Options",
      "description": "Choose your dressing",
      "minModifiersPerSet": 1,
      "maxModifiersPerSet": 1,
      "modifiers": ["mod-001", "mod-002"],
      "isActive": true,
      "defaultModifierPrice": {
        "type": "amount",
        "amount": 0
      }
    },
    {
      "posRef": "modset-002",
      "name": "Sauce Selection",
      "description": "Pick your sauce",
      "minModifiersPerSet": null,
      "maxModifiersPerSet": 2,
      "modifiers": ["mod-003", "mod-004"],
      "isActive": true
    }
  ],
  "modifiers": [
    {
      "posRef": "mod-001",
      "name": "Caesar Dressing",
      "description": "Classic caesar",
      "isActive": true,
      "defaultPrice": {
        "type": "amount",
        "amount": 0
      },
      "prices": [
        {
          "modifierSetRef": "modset-001",
          "price": {
            "type": "amount",
            "amount": 0
          }
        }
      ],
      "inheritsItemTax": true,
      "modifierSets": []
    },
    {
      "posRef": "mod-002",
      "name": "Ranch Dressing",
      "description": "Creamy ranch",
      "isActive": true,
      "defaultPrice": {
        "type": "amount",
        "amount": 50
      },
      "prices": [
        {
          "modifierSetRef": "modset-001",
          "price": {
            "type": "amount",
            "amount": 50
          }
        }
      ],
      "inheritsItemTax": true,
      "modifierSets": []
    }
  ],
  "taxes": [
    {
      "posRef": "tax-001",
      "name": "Sales Tax",
      "isActive": true,
      "rate": {
        "type": "percent",
        "percent": 82500
      }
    }
  ],
  "maxModifiersLevel": 2
}

Menu Category

Represents a menu category (section) containing menu items.

  • Name
    posRef
    Type
    string
    Description

    Unique category identifier. Required.

  • Name
    name
    Type
    string
    Description

    Display name in POS. Required.

  • Name
    description
    Type
    string
    Description

    Server-facing description. Optional.

  • Name
    items
    Type
    array
    Description

    Array of item posRef values. Order matters for display. Required.

  • Name
    isActive
    Type
    boolean
    Description

    Whether the category is currently active. Required.

Menu Item

Represents an individual menu item with pricing and modifiers.

  • Name
    posRef
    Type
    string
    Description

    Unique item identifier. Required.

  • Name
    name
    Type
    string
    Description

    POS display name. Required.

  • Name
    description
    Type
    string
    Description

    Item description. Optional.

  • Name
    price
    Type
    number
    Description

    Base price in US cents. Optional.

  • Name
    taxes
    Type
    array
    Description

    Array of tax posRef values to apply. Optional.

  • Name
    modifierSets
    Type
    array
    Description

    Ordered array of modifier set posRef values. Required.

  • Name
    isActive
    Type
    boolean
    Description

    Availability status. Required.

  • Name
    isSoldByWeight
    Type
    boolean
    Description

    True if sold by weight, false if sold by quantity. Required.

  • Name
    upc
    Type
    string
    Description

    Universal Product Code for scanning. Optional.

  • Name
    sku
    Type
    string
    Description

    Stock keeping unit identifier. Optional.

Modifier Set

Represents a group of modifiers with selection rules.

  • Name
    posRef
    Type
    string
    Description

    Unique set identifier. Required.

  • Name
    name
    Type
    string
    Description

    Display name (e.g., "Size", "Toppings"). Required.

  • Name
    description
    Type
    string
    Description

    Additional context. Optional.

  • Name
    minModifiersPerSet
    Type
    number
    Description

    Minimum selections required. Null means no minimum. Optional.

  • Name
    maxModifiersPerSet
    Type
    number
    Description

    Maximum selections allowed. Null means unlimited. Optional.

  • Name
    modifiers
    Type
    array
    Description

    Ordered array of modifier posRef values. Required.

  • Name
    isActive
    Type
    boolean
    Description

    Availability status. Required.

  • Name
    defaultModifierPrice
    Type
    object
    Description

    Fallback pricing if modifier doesn't specify price. Optional.

Modifier

Represents an individual modifier option with pricing and support for nested modifiers.

  • Name
    posRef
    Type
    string
    Description

    Unique modifier identifier. Required.

  • Name
    name
    Type
    string
    Description

    Display name (e.g., "Extra Cheese", "No Onions"). Required.

  • Name
    description
    Type
    string
    Description

    Details. Optional.

  • Name
    sku
    Type
    string
    Description

    Stock unit code. Optional.

  • Name
    taxes
    Type
    array
    Description

    Associated tax posRef values. Optional.

  • Name
    isActive
    Type
    boolean
    Description

    Availability status. Required.

  • Name
    defaultPrice
    Type
    object
    Description

    Base modification cost. Optional.

  • Name
    prices
    Type
    array
    Description

    Set-specific pricing options (overrides defaultPrice). Required.

  • Name
    inheritsItemTax
    Type
    boolean
    Description

    Whether to inherit tax from parent item. Optional.

  • Name
    modifierSets
    Type
    array
    Description

    Array of nested modifier set posRef values (supports multi-level modifiers). Required.

Price Object

  • Name
    type
    Type
    string
    Description

    Either "amount" (flat fee) or "percent" (percentage of item price). Required.

  • Name
    amount
    Type
    number
    Description

    Price in US cents. Required when type="amount".

  • Name
    percent
    Type
    number
    Description

    Percentage value divided by 10,000. Required when type="percent". Example: 100,000 = 10%, 5,000 = 0.5%.


Working with nested modifiers

The SkyTab POS API supports nested modifiers (modifiers on modifiers), allowing complex menu configurations. The maxModifiersLevel field indicates the maximum depth.

Example: Pizza with nested toppings

{
  "items": [{
    "name": "Custom Pizza",
    "modifierSets": ["size-set"]
  }],
  "modifierSets": [
    {
      "posRef": "size-set",
      "name": "Size",
      "modifiers": ["size-large", "size-small"]
    },
    {
      "posRef": "toppings-set",
      "name": "Toppings",
      "modifiers": ["topping-pepperoni", "topping-mushrooms"]
    },
    {
      "posRef": "cooking-style-set",
      "name": "Cooking Style",
      "modifiers": ["well-done", "normal"]
    }
  ],
  "modifiers": [
    {
      "posRef": "size-large",
      "name": "Large",
      "modifierSets": ["toppings-set"]
    },
    {
      "posRef": "topping-pepperoni",
      "name": "Pepperoni",
      "modifierSets": ["cooking-style-set"]
    }
  ]
}

In this example:

  • Selecting "Large" reveals topping options
  • Selecting "Pepperoni" reveals cooking style options
  • This creates a 3-level hierarchy: Item → Size → Toppings → Cooking Style

Best practices

Caching menu data

Menu data changes infrequently. Consider:

  • Cache the complete menu response locally
  • Refresh cache every 15-30 minutes
  • Subscribe to menu update webhooks for real-time changes
  • Use conditional requests with ETags if supported

Handling prices

All monetary amounts are in US cents:

  • Display: Divide by 100 (e.g., 1299 cents = $12.99)
  • Calculations: Keep in cents until final display
  • Tax percentages: Divide by 10,000 (e.g., 82,500 = 8.25%)

Building the menu hierarchy

  1. Start with categories to organize the menu structure
  2. For each category, lookup items using the items array
  3. For each item, lookup modifier sets using modifierSets array
  4. For each modifier set, lookup modifiers using modifiers array
  5. For nested modifiers, recursively lookup modifierSets on each modifier

Min/Max modifiers

  • null values mean no restriction
  • Validate selections before submitting orders
  • minModifiersPerSet: Customer must select at least this many
  • maxModifiersPerSet: Customer can select at most this many

Was this page helpful?