Skip to content

Options Reference

Complete reference of all toggle states and select dropdown options. Use this to understand what each option means and does.

Toggle Fields

Toggles are boolean (on/off) switches. Here's what each toggle controls:

Location & Settings

Field IDWhen ONWhen OFF
business_hours.{day}.is_availableLocation open on this dayLocation closed on this day
restricted_dates.*.yearlyDate repeats every year (e.g., Christmas)One-time closure

Online Ordering

Field IDWhen ONWhen OFF
takeout.enabledCustomers can order for pickupPickup not available
delivery.enabledCustomers can order for deliveryDelivery not available
custom_availabilityUse custom schedule (not business hours)Use location business hours
minimum_order_amount.enabledRequire minimum order valueNo minimum order
pick_up_instructions.enabledShow pickup instructions fieldNo pickup instructions
schedule_order_for_future_days.takeout.enabledAllow scheduled pickup ordersOnly ASAP pickup
schedule_order_for_future_days.delivery.enabledAllow scheduled delivery ordersOnly ASAP delivery

Order Capacity

Field IDWhen ONWhen OFF
order_capacity.enable_flexible_limit_order_per_time_slotAllow more orders if value is lowStrict order limit
order_capacity.enable_limit_specific_categoriesSet limits per categoryNo category limits

limit_orders_per_time_slot and limit_items_per_time_slot are stored booleans but are not exposed as toggles. The merchant types a number into Max orders per slot / Max items per slot, where 0 means no limit, and the boolean is derived from it (limit_orders_per_time_slot = numValue > 0). The component says so directly: <!-- Basic Limits - No toggles, 0 = no limit --> (OrderCapacityManagement.vue:324).

Tips & Notes

Field IDWhen ONWhen OFF
collect_tips.enabledShow tip options at checkoutNo tip collection
allow_notes.enabledCustomers can add notes to itemsNo notes allowed

Items have no available or track_stock toggle:

  • Visibility / orderability is the status enum (Active / Inactive / Unavailable / Hidden), not a boolean. Unavailable keeps the item visible but un-orderable (shows sold out); Hidden removes it from the menu. See menu-items.
  • Inventory tracking is derived: track_quantity is true when an inventory record exists for the item+location — there is no stored toggle. See inventory.

Modifiers

Field IDWhen ONWhen OFF
settings.is_mandatoryCustomer must select from this groupSelection is optional
settings.allow_select_more_than_oneCustomer can pick multiple optionsSingle selection only
settings.allow_same_modifier_more_than_oneSame option can be added multiple timesEach option at most once

There is no required field (it is settings.is_mandatory) and no per-option "default/pre-selected" toggle. See modifiers.

Payments

There are no per-method or per-provider payment toggles on the payment profile:

  • Stripe payment-method availability (cards, iDEAL, Bancontact, …) is driven by the connected Stripe account's capabilities, not by stripe.*_enabled toggles. There is no stripe.enabled or stripe.live_mode.
  • Test vs live is a per-location flag, payment_test_mode (not stripe.live_mode).
  • Viva Wallet is configured through Upvendo's ISV connection (no viva_wallet.enabled toggle); terminals are assigned per device.

See payments, stripe, and viva-wallet.

Loyalty

Field IDWhen ONWhen OFF
birthday_bonusGive bonus on customer birthdayNo birthday bonus
using_minimum_spendRequire a minimum spend to earn pointsEarn on any order
do_points_expirePoints expire after a set periodPoints never expire

There is no top-level enabled toggle — loyalty is activated by a per-location subscription. birthday_bonus is a plain required|boolean; the reward itself lives in the sibling object birthday_bonus_details (type bound to RewardTypes, plus discount, discount_unit, eligible_items). There is no birthday_bonus.enabled or birthday_bonus.value. See loyalty.

Receipts

Field IDWhen ONWhen OFF
show_order_level_discounts_on_item_levelShow discounts per itemShow discount as total
show_tax_summaryShow tax breakdownHide tax details
show_priceShow prices on receiptHide prices
show_addressShow location addressHide address
display_contact_informationShow phone/emailHide contact info
display_qr_codeShow QR code on receiptNo QR code
custom_footer_textShow custom footer messageNo custom footer

KDS

Field IDWhen ONWhen OFF
filter.order_source.allShow orders from all sourcesFilter by source
filter.order_source.kioskShow kiosk ordersHide kiosk orders
filter.order_source.online_orderingShow online ordersHide online orders
orders.strike_through_individual_modifierStrike through completed modifiersNo strike through
orders.reset_timer_on_recallReset timer when order recalledKeep original timer
orders.automatically_hold_scheduled_ordersHold scheduled orders until prep timeShow immediately
sound.mute_order_soundMute all soundsSounds enabled

Integrations

An integration is turned on/off by connecting / disconnecting it (an integration record with is_active), not by a settings toggle. The only real per-integration toggle here is Square's auto-sync:

Field IDWhen ONWhen OFF
square.enable_auto_syncAuto-sync the catalog from Square on a scheduleManual sync only

There is no square.connected / square.sync_menu / square.sync_orders, and no deliveroo.* / uber_eats.* enabled or auto_accept toggle. Marketplaces auto-accept incoming orders by default; POS catalogs sync one-way. See integrations and the per-provider docs under shared/integrations/.


Select Fields (Dropdowns)

Time Slot Duration

Field ID: order_capacity.time_slot_duration_min

A dropdown with seven options. The backend rule is permissive (required|numeric|gt:0, StoreOnlineSettingsRequest.php), but the back office restricts the merchant to these values (OrderCapacityManagement.vue:54-56). Default 15 (Constants.php:192, $DEFAULT_ORDER_CAPACITY_SETTINGS).

ValueNotes
55 minutes
1010 minutes
15Default
2020 minutes
3030 minutes
4545 minutes
6060 minutes

Accept Orders Until

Field ID: accept_orders_untilEnum: App\Enums\AcceptOrdersUntil (AcceptOrdersUntil.php:7-8)

Edited only on the Table QR Ordering page, as a toggle — not a select. The online-ordering control was retired in favour of takeout.last_slot_at_closing_time (see scheduled-orders.md). The sole remaining UI is a single switch on QR ordering; see qr-ordering.md for the toggle-to-value mapping.

OptionStored ValueDescription
Closing TimeClosing TimeAccept orders until location closes — online-ordering default (Constants.php:609)
Closing Time Minus Prep TimeClosing Time Minus Prep TimeStop accepting before closing to allow prep — QR ordering default (Constants.php:306)

The two channels default to opposite values, so always say which channel you mean when quoting the default.

Example: If closing at 22:00 with 20 min prep time:

  • "Closing Time" → Accept until 22:00
  • "Closing Time Minus Prep Time" → Accept until 21:40

Delivery Region Type

Field ID: delivery_region.typeEnum: App\Enums\DeliveryRegionOptions (DeliveryRegionOptions.php:7-9)

OptionStored ValueDescription
RadiusRadiusDeliver within X km of location (default, Constants.php:629)
Postal CodePostal CodeDeliver to specific postal codes only
DistanceDistanceDeliver within a maximum driving/route distance

Delivery Fee Type

Field ID: delivery_fee.typeEnum: App\Enums\DeliveryFeeTypes (DeliveryFeeTypes.php:7-9)

OptionStored ValueDescription
Free deliveryFree deliveryNo delivery fee (default, Constants.php:635)
Charge delivery fee for all ordersCharge delivery fee for all ordersFixed fee for all deliveries
Free delivery for orders over a certain amountFree delivery for orders over a certain amountFree if order exceeds minimum

Calculate Tips

Field ID: collect_tips.calculate_tipsEnum: App\Enums\CalculateTipsOptions (CalculateTipsOptions.php:7-8)

The validation binds to CalculateTipsOptions, whose stored values are the human-readable strings Before taxes / After taxes (StoreOnlineSettingsRequest.php:169, StoreInHouseSettingsRequest.php:61). Note: a separate, unused App\Enums\CalculateTips enum exists with values before_taxes/after_taxes — that one is not what this field stores.

OptionStored ValueDescription
Before taxesBefore taxesCalculate tip on subtotal only
After taxesAfter taxesCalculate tip on total including tax (default, Constants.php:246)

Example (15% tip on €25 subtotal + €5.25 tax):

  • "Before taxes" → €25 × 15% = €3.75 tip
  • "After taxes" → €30.25 × 15% = €4.54 tip

Idle Timeout Type

Field ID: idle_timeout_typeEnum: App\Enums\IdleTimeoutTypes (IdleTimeoutTypes.php:7-8)

Only two options exist. When custom is chosen, idle_timeout_seconds and show_warning_for_seconds become required (StoreDeviceProfileRequest.php:223-225, StoreOnlineOrderingRequest.php:201-203).

Standard resolves to a different value in each context — do not quote one number for both.

OptionContextStored ValueSecondsDescription
StandardDevice profile (kiosk)standard45 + 15s warningDeviceProfile::getIdleTimeoutSeconds() returns 45 whenever the type is not Custom
StandardOnline orderingstandard120 + 15s warningConstants.php:660-662
CustombothcustomvariableUses idle_timeout_seconds (any value >= 1)

Field ID: print_settingsEnum: App\Enums\PrintSettingOptions (PrintSettingOptions.php:7-8)

OptionStored ValueDescription
Based on pickup timepickup_timePrint ticket relative to the pickup time (default, Constants.php:659)
When order is placedwhen_order_is_placedPrint ticket as soon as the order is placed

Send to POS

Field ID: send_to_posEnum: App\Enums\SendToPosOptions (SendToPosOptions.php:7-8)

OptionStored ValueDescription
Pickup/delivery timepickup_delivery_timeSend to POS based on the scheduled pickup/delivery time (default, Constants.php:663)
Order placedorder_placedSend to POS as soon as the order is placed

Customer Name Format

Field ID: customer_information_full_nameEnum: App\Enums\CustomerInformationFullNameOptions (CustomerInformationFullNameOptions.php:7-8)

OptionStored ValueDescription
First & last namefirst_last_nameCollect both first and last name
First name onlyfirst_nameCollect first name only

Customer Contact Details

Field ID: customer_information_contact_detailsEnum: App\Enums\CustomerInformationContactDetailsOptions (CustomerInformationContactDetailsOptions.php:7-8)

Only two options exist (there is no "Phone Only").

OptionStored ValueDescription
Phone & emailphone_emailCollect both phone and email
Email onlyemailCollect email only

Snooze Out of Stock Items

⚠️ Not verified in current code. The field snooze_time_out_of_stock_items and the enum App\Enums\SnoozeOutOfStockItemOptions are not present in the current backend (only App\Enums\SnoozeOptions exists, for the online-ordering channel pause — accept / 20 / 40 / 60 min / rest-of-day / dont_accept). The option table below is unconfirmed pending dev review (removed vs never shipped). See stock-management.

Field ID: snooze_time_out_of_stock_itemsEnum: App\Enums\SnoozeOutOfStockItemOptions (SnoozeOutOfStockItemOptions.php:7-15)

OptionStored ValueDescription
Do not snoozedo_not_snoozeShow "Out of stock" but keep visible
30 minutes30Hide item for 30 minutes
1 hour60Hide item for 1 hour
2 hours120Hide item for 2 hours
3 hours180Hide item for 3 hours
6 hours360Hide item for 6 hours
12 hours720Hide item for 12 hours
24 hours1440Hide item for 24 hours
InfiniteinfiniteHide until manually restocked

Receipt QR Code Type

Field ID: display_qr_code_applies_toEnum: App\Enums\ReceiptQRCodeAppliesTo (ReceiptQRCodeAppliesTo.php:7-8)

OptionStored ValueDescription
Online Orderingonline_orderingQR links to online ordering page (default, Constants.php:721)
Custom Linkcustom_linkQR links to a custom URL

KDS Layout

Field ID: layoutEnum: App\Enums\KDSLayouts (KDSLayouts.php:7-10)

OptionStored ValueDescription
TiledTiledTiled grid of order cards
SplitSplitSplit view (default, Constants.php:392)
Take OutTake OutTake-out focused layout
RailRailRail / single-column layout

Birthday Bonus / Reward Type

Field ID: birthday_bonus_details.type (also reward type) Enum: App\Enums\RewardTypes (RewardTypes.php:7-8)

Bound via Rule::enum(RewardTypes::class) in CreateIntentRequest.php (e.g. OnlineOrdering/CreateIntentRequest.php:287, Kiosk/Payment/CreateIntentRequest.php:268).

OptionStored ValueDescription
DiscountDiscountPercentage or amount off order
Free ItemFree ItemFree item from eligible list

Order Number Display

Field ID: order_number_displayEnum: App\Enums\OrderNumberDisplayOptions (OrderNumberDisplayOptions.php:7-9)

Bound in StoreOnlineOrderingRequest.php:173 and StoreDeviceProfileRequest.php:214.

OptionStored ValueDescription
Queue numberqueue_numberShow the queue number only
Order numberorder_numberShow the order number only
BothbothShow both (default, Constants.php:682)

Preferred Language

Field ID: preferred_language

This field does NOT store an ISO code. It stores a MongoDB ObjectId referencing a document in the languages collection. Validation requires the value to exist as an _id in that collection (StoreLocationRequest.php:91-99, ExistsInConnectionWithModel), and it is resolved through LanguageRepository::retrieve() (RawModels/Location.php:522). New languages are created/looked up and their getId() stored (e.g. SquareLocationSync.php:257, MplusKassaIntegrationService.php:4593).

The available languages and their ISO codes come from Constants::$LANGUAGE_CONVERTER (Constants.php:42-50); the default language name is English (Constants.php:20). The codes below are the language codes, not the value stored in preferred_language:

LanguageISO Code
Englishen
Dutchnl
Frenchfr
Germande
Spanishes
Portuguesept
Italianit

Country

Field ID: address.country

The country field is validated as required|string (StoreLocationRequest.php:116) and stores the full country name (e.g. Belgium), not the ISO code. Two distinct lists exist in code:

1. Selectable list — Constants::getSupportedCountries() / $SUPPORTED_COUNTRIES (Constants.php:104-110, 119-128)

This is what actually limits the picker (used in RegisterRequest.php:72, NewPaymentProfileRequest.php:45, ConstantController.php:20):

CountryISO Code
Belgiumbe
Francefr
Netherlandsnl
United Statesus

For payment profiles, getSupportedCountries(true) excludes United States (Constants.php:123-124).

A separate $SUPPORTED_COUNTRIES_PROD array (Constants.php:113-116) lists Belgium only as the intended production-only set, but it is not referenced anywhere in the code — getSupportedCountries() always returns $SUPPORTED_COUNTRIES.

2. Full name→ISO mapping — Constants::$COUNTRY_CONVERTER (Constants.php:131-143)

Used for code/name conversion (getCountryCodeByName, getCountryNameByCode). Wider than the selectable list:

CountryISO Code
Austriaat
Belgiumbe
Finlandfi
Francefr
Germanyde
Irelandie
Italyit
Netherlandsnl
Portugalpt
Spaines
United Statesus

Default country code is be (Constants::DEFAULT_COUNTRY_CODE, Constants.php:16).


Branding Fonts

Field ID: heading_text_font / body_text_font (also promo_code_font) Constant: Constants::$BRANDING_FONT_OPTIONS (Constants.php:466-478)

Both fields are validated as free strings (required|string, UpdateBrandingProfileRequest.php:54-55); $BRANDING_FONT_OPTIONS is the canonical list of intended values. Default is Poppins (Constants::$DEFAULT_BRANDING_PROFILE, Constants.php:450-451; promo_code_font at :458).

Stored ValueDescription
PoppinsDefault
ArialClassic, widely supported
RobotoGoogle sans-serif
RalewayThin sans-serif
LatoSans-serif
VerdanaSans-serif
Courrier NewMonospace — note the backend typo (double "r")
LoraSerif
GelasioSerif
Cormorant GaramondSerif
OswaldBold display

Front-end discrepancy: the back-office font picker (upvendo-backoffice AppFontSelect.vue:16-27) lists Courier New (correct spelling) and omits Gelasio (10 options vs. the backend's 11). The backend $BRANDING_FONT_OPTIONS value (Courrier New, plus Gelasio) is the source of truth for what is actually stored.


Days of Week

Used in: business_hours, delivery_available_days, pickup_available_days, time_specific_rules.active_days

Stored as the capitalized English day name (see defaults in Constants.php:589-606 and Constants.php:214-222).

OptionStored Value
SundaySunday
MondayMonday
TuesdayTuesday
WednesdayWednesday
ThursdayThursday
FridayFriday
SaturdaySaturday

Multiselect Fields

Allergens

Field ID: allergensConstant: Constants::$ALLERGENS_LIST_OPTIONS (Constants.php:481-514), stored as the label value.

Tree nuts: Tree nuts, Almonds, Brazil nuts, Cashews, Hazelnuts, Macademia (note backend typo, missing one "a"), Pecans, Pistachios, Walnuts, Queensland nuts

Other allergens: Peanuts, Milk, Eggs, Fish, Crustaceans, Molluscs

Gluten: Gluten, Wheat, Barley, Rye, Oats, Spelt, Kamut

Other: Soy, Celery, Mustard, Sesame, Lupin, Sulphites


Dietary Preferences

Field ID: dietary_preferencesConstant: Constants::$DIETARY_PREFERENCES_OPTIONS (Constants.php:517-544)

  • Alcohol-free
  • Dairy-free
  • Decaffeinated
  • Gluten-free
  • Halal
  • High protein
  • Keto
  • Kosher
  • Lactose-free
  • Low fat
  • Low sodium
  • No added MSG
  • No artificial colors
  • No artificial flavors
  • No artificial sweeteners
  • No preservatives
  • Non-GMO
  • Nut-free
  • Organic
  • Paleo
  • Single origin
  • Soy-free
  • Sugar-free
  • Vegan
  • Vegetarian
  • Wholegrain

Dietary Supplements

Field ID: dietary_supplementsConstant: Constants::$DIETARY_SUPPLEMENTS_OPTIONS (Constants.php:547-557)

  • Aloe vera
  • Caffeine
  • Calcium
  • Electrolytes
  • Fiber
  • Iron
  • Magnesium
  • Probiotics
  • Protein

Item Tags

Field ID: tagsConstant: Constants::$ITEM_TAGS (Constants.php:31-39)

  • Vegan
  • Vegetarian
  • Glutten-free (note backend typo, double "t")
  • Nut-free
  • Kosher
  • Halal
  • Dairy-free

Tip Percentage Options

Field ID: collect_tips.options

This is not a fixed set — it is a merchant-defined array of percentages. Each entry is validated as a number (online: min:1|max:100, StoreOnlineSettingsRequest.php:167-168; in-house: min:0|max:100, StoreInHouseSettingsRequest.php:59-60). Any combination within that range is allowed.


Social Media Options

Field ID: social_linksConstant: Constants::$SOCIAL_MEDIA_OPTIONS (Constants.php:736-746)

social_links is a keyed object; each platform key accepts a nullable URL (UpdateBrandingProfileRequest.php:65-72). Available platform keys:

  • tiktok
  • instagram
  • facebook
  • pinterest
  • x
  • linkedin
  • youtube
  • snapchat
  • tumblr

Additional production enums

These are used by merchant-facing settings and were previously undocumented. Values read directly from app/Enums/.

Channel Snooze

Enum: App\Enums\SnoozeOptions

OptionStored Value
Accept ordersaccept
Pause 20 minutes20
Pause 40 minutes40
Pause 60 minutes60
Pause for the rest of the business dayrest_of_the_day
Stop accepting ordersdont_accept

POS Customer Name Format

Enum: App\Enums\PosCustomerNameFormatOptions

OptionStored Value
First + last namefirst_last_name
First name onlyfirst_name

Discount Units (expanded)

Enum: App\Enums\DiscountUnitsExpanded — used by BOGO / reward discounts.

OptionStored Value
Percentagepercent
Fixed amountamount
Freefree

Loyalty Program Type

Enum: App\Enums\LoyaltyPrograms

OptionStored Value
Visit basedVisit Based
Amount basedAmount Based

Loyalty Point Expiry

Enum: App\Enums\LoyaltyMonthsToExpirePointsinteger values, not strings.

OptionStored Value
3 months3
6 months6
12 months12
18 months18
24 months24

Reward Type

Enum: App\Enums\RewardTypes — used by birthday_bonus_details.type and rewards.*.type.

OptionStored Value
DiscountDiscount
Free itemFree Item

Field ID: menu_item_columns (device profile)

nullable|integer|in:2,3, default 2 (StoreDeviceProfileRequest.php:211, :64). Only 2 or 3 columns — there is no 4-column option.