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 business profile (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 Area Shape ​

Field ID: delivery_region.zones[].shapeValidated in: StoreOnlineOrderingRequest.php:423 (in:radius,distance,postcode,street)

A location's delivery region is an ordered list of up to 10 delivery areas; each area carries exactly one shape. See Delivery Region.

OptionStored ValueDescription
RadiusradiusStraight-line distance from the location (zones[].radius, min 0.1 km)
Driving distancedistanceRoute-based driving distance from the location (zones[].max_distance, min 0.1 km)
PostcodespostcodeThe postcodes this area covers (zones[].postal_codes, at least one)
StreetsstreetIndividual streets (zones[].streets, at least one)

Delivery Region Type (legacy) ​

Field ID: delivery_region.typeEnum: App\Enums\DeliveryRegionOptions

Read only while a location's delivery_region.zones list is still empty, as the fallback describing its previous single-mode setup. New configuration uses the area list above.

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

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:676)
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\LoyaltyMonthsToExpirePoints — integer 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.