Skip to main content
Zonal (Aztec) is one of the most comprehensive POS integrations available on storekit. It offers full menu synchronisation, automatic order injection with basket validation, floor plan sync for dine-in, and support for courses, sizes, and nested modifiers.

Prerequisites

Before connecting Zonal, ensure you have:
  • Zonal Aztec POS with iOrder API access
  • iOrder Brand Token from your Zonal account manager
  • iOrder User Device Identifier
  • Admin access to your storekit dashboard
Contact your Zonal account manager to request iOrder API credentials. You’ll need the Brand Token and User Device Identifier to connect.

Setting Up the Connection

Step 1: Enter Zonal Credentials

  1. Go to Stores → your store → Settings → Integrations in your storekit dashboard
  2. Find Zonal and click Connect to Zonal
  3. Enter your iOrder credentials:
    • iOrder brand token - Your iOrder brand authentication token
    • iOrder user device identifier - Your unique device identifier
    • Bundle identifier (optional) - Custom bundle ID if provided
    • Under Table Service API (pay at table), enter your Integrator identity and Request HMAC secret if these credentials are enabled for your account
  4. Click Connect to Zonal
storekit verifies the credentials with Zonal’s authCheck endpoint before saving.

Step 2: Select Your Venue and Payment Method

After authentication:
  1. Go to Stores → your store → Settings → Integrations → Zonal
  2. In Orders, click Edit, then select the Zonal venue (site) that matches this storekit store
  3. Select the Payment method for online orders
  4. Click Save in the settings save bar
The venue’s Site ID is saved for future API calls.

Step 3: Sync Your Menu

Once connected, import your menu from Zonal:
  1. Go to Menu in your dashboard
  2. Click Sync Menu
  3. storekit fetches menus from all sales areas
  4. Categories and products are imported with full modifier structure

What Gets Synced

Sync Types

Full Sync: Imports the complete menu structure including categories, products, modifiers, and images. Use after significant menu changes. Lightweight Sync: Updates only prices and availability without re-importing the full structure. Much faster - ideal for frequent price changes or stock updates.

Sync Options

Set these options in the Zonal integration settings. In Orders, click Edit to set Enable coursing; in Menu, click Edit to set the other options. Click Save in the settings save bar to apply your changes.
Production instructions (items with divisionId of 0 or isInstruction flag) are automatically imported as free modifiers, even if they have no supplement price. This allows customers to add special preparation instructions like “No Ice” or “Extra Hot” to their orders.

Sales Area Restrictions

Zonal menus are organised by sales areas. During sync, storekit:
  1. Fetches menus from all sales areas
  2. Merges identical menus across areas
  3. Creates category-level area restrictions
This means products can be available in some areas but not others (e.g., different menus for bar vs restaurant).

Portions (Sizes)

When a product has multiple portions in Zonal, storekit creates a “Size” modifier group:
  • Base product price is set to £0
  • Each portion becomes a modifier with its price
  • Customers must select a size to add the item

Order Injection

When a customer places an order, storekit sends it to Zonal via the placePaidOrder method.

Order Flow

  1. Basket validation - storekit calls checkBasket to validate items
  2. Payment processed - Customer pays via storekit
  3. Order dispatched - Order sent to Zonal with basket ID
  4. Confirmation - Zonal returns receipt ID, order marked accepted

Service Types

Pre-Order Dispatch

For pre-orders, storekit calculates the optimal dispatch time:
  • Same-day orders: Dispatched immediately
  • Future orders: Dispatched at 6am on the order day
This prevents orders cluttering your POS queue days in advance.

What Zonal Receives

Each order includes:
  • Customer name, email, phone
  • All items with ingredient IDs, display record IDs, and portion type
  • Modifiers as choice lines with nested structure
  • Course assignments (if configured)
  • Removal modifiers (for default items removed)
  • Discount lines (percentage or fixed amount)
  • Tip amount
  • Delivery address (for delivery orders)
  • Timeslot (for pickup/delivery)
  • Collection code (8 characters)
  • Custom order notes (via order note product)

Order Notes

Zonal only accepts customer notes as a line item, so an Order note product ID must be configured before notes can appear on Zonal tickets. In the Zonal integration settings, go to Orders → Edit → Show advanced and enter the Zonal product ID your Zonal account manager provides. You can also set the Order note template there. Click Save in the settings save bar to apply the changes. storekit then adds a line item using that product with the formatted note attached.
With no Order Note Product ID set, storekit sends no note line at all — the customer’s note is saved on the storekit order but never reaches Zonal or the kitchen/bar tickets it prints. This is the usual cause of “notes are enabled but the kitchen doesn’t get them” on Zonal sites.
Notes are upper-cased and stripped of characters Zonal can’t display, and are truncated at 840 characters. Use Order Note Template to control how the note is composed. Two storekit settings must also allow the note through:
  • Stores → [your store] → Settings → Operations → Order Notes must be Optional or Mandatory (not Hidden), otherwise customers never get a note field
  • If you use order batching, Include order notes must be on, or notes are stripped from the merged order before it is sent to Zonal — see Customer notes on batched tickets
The product used for order notes is excluded from menu sync, so it never shows up on your storekit menu.

Basket Validation & Discounts

Zonal integration validates orders at checkout using the checkBasket API.

How It Works

  1. Customer proceeds to checkout
  2. storekit sends basket to Zonal with all items and modifiers
  3. Zonal validates availability and calculates any discounts
  4. Discount amount is returned and applied to the order total
  5. Basket ID is stored and used when placing the order

Discount Configuration

Set both IDs in the Zonal integration settings under Orders → Edit → Show advanced, then click Save in the settings save bar.
Basket validation catches unavailable items before payment. If an item is sold out, the customer is notified immediately.

Auto-Snooze on Errors

If checkBasket returns a sold-out error (code -216), storekit automatically:
  1. Identifies the unavailable item
  2. Snoozes it for 6 hours
  3. Clears the menu cache
  4. Returns the item info to the customer

Floor Plan Sync

Sync your table layout from Zonal for dine-in ordering:
  1. Go to Stores → your store → Settings → Integrations → Zonal
  2. In the page header, open More → Sync tables
  3. Areas (sales areas) and tables are imported

What Gets Synced

  • Sales areas as venue areas
  • Table groups within areas
  • Individual tables with numbers and names
  • Table capacity
Changes in Zonal sync automatically - new tables are added, removed tables are archived.

Integration Settings

The Zonal integration settings are organised into Orders, Order types, and Menu. Click Edit in a group to show its fields. Changes across these groups are staged together; click Save in the settings save bar to apply them.

Sales area IDs for pickup and delivery

By default, storekit uses sales area ID 1 for pickup and delivery orders. If your Zonal configuration requires a specific sales area for these order types, click Edit in Order types, then set it. You can also choose a Zonal service for each type; leave either field blank to use its default:
Dine-in orders always use the sales area ID from the table’s venue area (synced via floor plan). The fulfillment sales area ID settings only apply to pickup and delivery orders that do not have a table assigned.

Testing Your Integration

Pre-Launch Checklist

  1. Menu sync
    • Categories imported from all sales areas
    • Products have correct prices (including portion variants)
    • Modifiers appear correctly
    • Nested modifiers work
    • Images display
  2. Order flow
    • Basket validates successfully
    • Order appears in Zonal POS
    • Items, modifiers, and courses are correct
    • Collection code/timeslot appears
  3. Discounts (if configured)
    • Apply a discount code
    • Verify amount matches Zonal calculation
  4. Floor plan (if using dine-in)
    • Tables synced correctly
    • Orders route to correct tables

Troubleshooting

Connection Failed

  • Verify Brand Token and User Device Identifier are correct
  • Check credentials haven’t expired
  • Contact Zonal support to confirm iOrder API access
  • Ensure menus are published in Zonal
  • Check products are assigned to display groups
  • Verify sales areas are configured
  • Check for sync errors in the dashboard

Orders Failing

  • “Missing basket ID”: Basket validation may have failed - check item availability
  • Error -238: Basket expired - storekit will retry with fresh basket
  • Error -216: Item sold out - item is auto-snoozed

Modifiers Not Appearing

  • Check choice groups are configured on products
  • Verify modifiers have supplement prices (or enable “Import Choices With No Price”)
  • Re-sync menu after Zonal changes

Order Notes Not Appearing

  • Check Order Note Product ID is set under Orders → Edit → Show advanced in the Zonal integration settings — without it no note line is sent
  • Check Order Notes under Operations is Optional or Mandatory, not Hidden
  • If order batching is on, check Include order notes is enabled
  • Confirm the note product ID is valid in Zonal — Zonal rejects the order line if the product doesn’t exist

Wrong Prices

  • Check portion configuration in Zonal
  • Verify the correct portion is set as default
  • For multi-portion products, check size modifier prices
For further assistance, contact support.

Supported Features