Settings
πΈ Settings Hub
Central settings page showing eight management cards, each with a Manage action: Organization, API Keys, Stripe Payments, Booking Access Retry, Cancellation Policy, Subscriber Scheduler, Email Branding, and Employee Booking. Route: /settings

πΈ Organization Detail
The "Your Organization" page shows the organization header (logo, name, type tag, Active badge, and Edit Organization button) with cards for Contact Information (Email, Phone, Website, Billing Email) and Location (Address, City, State, Country, Postal Code, Timezone). Route: /settings/organization

Scrolling down the organization page: the Organization Details card shows Slug, Type, Number of Spaces, and Your Role, and the Timestamps card shows Created At and Last Updated.
πΈ Edit Organization β Step 1: Organization Details
Edit organization Name, Slug, Email, Phone, and Website fields. 3-step wizard. Route: /settings/organization/edit

πΈ Edit Organization β Step 2: Location and Timezone
Edit organization Address, City, State/Province, Country, Postal Code, and Timezone. Step 2 of 3.

πΈ Edit Organization β Step 3: Additional Details
Upload or replace Organization Logo (PNG/JPG). Update Organization button to save all changes. Step 3 of 3.

πΈ API Keys β Empty State
API Keys list page showing empty state with No API Keys Found message and Create API Key button. Route: /settings/api-keys

πΈ API Keys List
API Keys list showing columns: Name, Type (Live/Test badge), Scopes count, Expires, Rate Limits (per-minute and per-day), and Status (Active), with a View action per key and the Create API Key button in the top right. Route: /settings/api-keys

πΈ API Keys β Row Actions
Each key's overflow menu offers Edit API Key and Delete API Key, the latter styled in red as a destructive action.

πΈ Create API Key
Create API Key form with Key Details (Name, Key Type β Live or Test, Description), Permissions & Scopes, and Expiration & Security (Expiration date, Allowed IP Addresses). Permissions & Scopes shows a Select All toggle over the full 51-permission catalog grouped the same way as Roles β Bookings, Meeting spaces, and on through every resource β each group listing its individual scopes (e.g., Read bookings / Update bookings / Delete bookings) with a live ratio of how many in that group are selected; scopes marked Destructive are called out inline. Route: /settings/api-keys/create

πΈ Create API Key β New Key Modal
Modal after creating an API key showing the full key value with security warning: key is shown only once and must be copied immediately. Includes Copy API Key button.

πΈ API Key Detail
Detail view of an API key showing Status (Active, Test), Details (Name, Created At, Expires At, Last Used), Permissions and Scopes (13 scopes listed as tags), and Rate Limits (100/min, 10000/day). Route: /settings/api-keys/:id

πΈ Edit API Key
Edit API Key pre-fills the key's current Name, Key Type, Description, and scope selections. Permissions and Scopes uses the same Select All / per-group checklist as creation, showing how many of that group's scopes are selected (e.g., Bookings 5/5, Meeting spaces 4/4), with every checked scope also echoed as a removable chip in a Selected Scopes list beneath β 51 scopes here reflects every permission the organization has. Expiration date and Allowed IP Addresses can also be changed. Cancel discards; Update API key commits the changes.

πΈ Delete API Key Confirmation
Delete API Key from the overflow menu opens a Caution modal naming the key and warning that the action cannot be undone. Close cancels, and Delete removes the key β any integration still using it will immediately lose access.

πΈ Stripe Payment Configuration
Configure how the organization accepts payments through Stripe. The Payment Status summary shows Stripe Enabled, Currency (USD), Payment Mode (Platform Collection), and Platform Fee (6% global), with Platform account and Live mode badges. Stripe Configuration includes the Enable Stripe Payments toggle, Test Mode toggle, Currency selector, and Payment Mode β Platform Collection (Manual): funds collected by ZenSpace, then transferred to the organization β with Reset and Save changes actions. Route: /settings/stripe

πΈ Stripe Payment Configuration β Edit Mode
Edit Stripe settings: Enable/disable Stripe Payments toggle, Test Mode toggle, Currency selector, Payment Mode (Platform Collection vs Direct to Account), and Save Configuration button.

πΈ Booking Access Retry Policy
Controls how often ZenEdge retries when it fails to generate access credentials for a booking, and what happens if retries are exhausted; applies to all meeting spaces that inherit the organization default. Shows a Current Policy Summary (e.g. retry every 2 minutes for up to 10 minutes past booking start, then cancel booking and refund 50%) and a note that changes apply to new bookings β existing bookings keep the policy in effect when they were created. Options: Enable retries toggle (when off, a single failure triggers the final-failure action immediately), Retry every (Every 2 minutes β Aggressive, Every 5 minutes β Balanced default, Every 10 minutes β Gentle, or Custom interval), and Keep retrying for N minutes past booking start (clamped to the booking end time). If retries fail, three fallback actions are available: Do nothing (stop retrying; admin resolves manually), Cancel booking (automatic, no refund), or Cancel booking + refund with a refund percentage (0β100, applied against the booking's paid amount). An optional toggle sends a "credentials pending" email (and optional SMS) to the organizer while retrying, with editable subject and body templates supporting placeholders like {{organizer_name}}, {{space_name}}, and {{start_time}}. The Snapshot per booking badge confirms the policy is snapshotted for each booking at creation time. Route: /settings/booking-access-retry-policy
The policy can be applied at two levels. Organization level: Settings β Booking Access Retry sets the default that every meeting space inherits. Meeting-space level: the Policies tab of an individual meeting space carries a Using organization default toggle β switching it off lets that space override the organization default with its own retry interval, grace window, and final-failure action.
πΈ Booking Access Retry Policy β Cancel Booking (No Refund)
With Cancel booking selected as the final-failure action, the Current Policy Summary reads: retry every 5 minutes for up to 10 minutes past booking start, and if still failing, cancel booking (no refund).

πΈ Booking Access Retry Policy β Cancel Booking + Refund
Choosing Cancel booking + refund reveals a Refund percentage field (0β100, applied against the bookingβs paid amount). The summary then reads: cancel booking and refund 100%.

πΈ Booking Access Retry Policy β Do Nothing
Do nothing stops retrying and leaves the booking in place for an admin to resolve manually; the summary reads: stop retrying (admin resolves manually).

πΈ Cancellation Policy
Org-wide default cancellation behavior for every meeting space; individual spaces can override it. Shows the current policy summary (e.g. Late cancellation fee β cancel anytime β within 2h of start, fee is 50% of total) and a note that changes apply to new cancellations immediately, while per-space overrides ignore this default until switched back to inherit. Policy types: No policy (free cancellation, always full refund), Cancel before X hours (full refund before the deadline; after it, cancellation allowed with no refund), Late cancellation fee (allowed at any time; cancellations inside the window incur a fee), and Not allowed (organizer cannot cancel; admins can still force-cancel with the override option). Route: /settings/cancellation-policy

πΈ Cancellation Policy β Cancel Before X Hours
Selecting Cancel before X hours updates the Current Policy Summary to state the deadline in hours (e.g., must cancel at least 24h before start, no refund after). Choosing this type reveals a Window card beneath β see the next figure.

πΈ Cancellation Policy β Window & Fee
The Window card sets how many hours before the booking start the deadline kicks in, plus a Treat no-shows as inside the window toggle (an unattended booking is charged the same as a last-minute cancellation). Fee inside window is either a Flat amount or a Percentage of total (0β100, applied against the booking total). The Org-wide default badge confirms the policy applies to all spaces with "Use organization policy" turned on.

πΈ Cancellation Policy β Not Allowed
Selecting Not allowed updates the Current Policy Summary to state that cancellation is strictly prohibited and requires admin override. A warning banner reiterates that bookings created under this policy cannot be cancelled by the organizer, though admins can still force-cancel from the booking detail page using a Bypass policy option.

πΈ Subscriber Scheduler (Scheduled Jobs)
Recurring report subscriptions: pick a job type, scope, cadence, recipients, and headline format. The list shows Name, Type, Scope, Cadence, Recipients, Format, Status, and Last registered, with Search and a New scheduled job action. A populated job (e.g., a daily Booking Report scoped to Org, delivered as PDF to one recipient at 09:00) shows Active with a "pending registration" note beneath while the schedule's first run is still being set up server-side; an empty state otherwise prompts creating the first job to deliver recurring reports to ops and finance via email. Route: /settings/scheduled-jobs

πΈ Subscriber Scheduler List β Empty State
Before any job exists the table shows a No scheduled reports yet empty state, with New scheduled job and Refresh actions.

πΈ New Scheduled Job β Type & Scope (Organization)
New scheduled job opens a four-step wizard β Type & Scope, Schedule, Report config, Delivery. Job type is currently Booking Report, a per-booking report for a date range that always sends CSV + XLSX + PDF as email attachments and download links, with output_format on the row picking the headline format for the subject line. Scope picks the level the report covers: Organization (all groups and spaces in the org), Space group (restricted to a specific group), or Meeting space (restricted to a single space) β the backend re-registers the recurrence if scope changes. Route: /settings/scheduled-jobs/create

πΈ New Scheduled Job β Type & Scope (Space Group)
Choosing Space group reveals a Space group search field; the report then covers every meeting space inside that group.

πΈ New Scheduled Job β Type & Scope (Meeting Space)
Choosing Meeting space reveals a search field for a single space; the report is restricted to that one space only.

πΈ New Scheduled Job β Schedule (Daily)
Step 2 sets Cadence, Time of day, and Timezone (inherited from the organization, with Daylight Saving honored automatically), plus Start date and an optional End date β Run indefinitely skips the end date and lets the backend auto-extend the recurrence. A Preview panel computes the next five fire times locally based on the current selections. Daily fires once a day at the chosen time.

πΈ New Scheduled Job β Schedule (Weekly)
Weekly adds a Days of week selector (SunβSat); a tip suggests picking weekdays (MonβFri) for business reports. If no day is selected, the preview reports that no fires match the cadence in the next year.

πΈ New Scheduled Job β Schedule (Monthly)
Monthly adds a Day of month field, accepting 1β28 only β day 29, 30, or 31 requires a custom cron expression instead. The preview then lists the next five monthly fire dates, correctly carrying across month boundaries and DST changes (PDT to PST).

πΈ New Scheduled Job β Schedule (Custom Cron)
Custom (cron) replaces the cadence controls with a raw 5-field cron expression (minute hour day-of-month month day-of-week). The local preview is not evaluated for custom cron; it instead shows the cron string alongside the selected timezone.

πΈ New Scheduled Job β Report Config
Step 3 is driven by the selected job type's configuration schema. Period sets the date window the report covers, evaluated at fire time in the schedule timezone β options include Previous Day (yesterday only, useful for daily morning recaps). Statuses filters which booking statuses are included (Pending, Confirmed, Checked In, Checked Out, Cancelled, Completed, No Show); leaving Statuses empty includes every status. Include Cancelled controls whether cancelled bookings appear when Statuses is left empty β it's ignored once Statuses is non-empty, since the explicit filter wins.

πΈ New Scheduled Job β Report Config (Statuses Selected)
With specific statuses picked (e.g., Confirmed, Checked In, Cancelled, Completed), only bookings in those statuses are included in the report regardless of the Include Cancelled toggle.

πΈ New Scheduled Job β Delivery
Step 4 sets Recipients (type an email and press Enter to add, up to 50), Headline format β XLSX, CSV, PDF, or JSON where supported β Job name (required, identifies the job in the scheduled-jobs list and run history), and an optional Description noting why the job exists and who relies on it. Active β fires on schedule can be toggled off to pause sending without deleting the job. A summary panel recaps Job type, Scope, Cadence, Window, and Delivery before saving; the server validates the final payload.

πΈ New Scheduled Job β Delivery (Recipient Added)
Adding a recipient email shows it as a removable chip beneath the input, with the recipient count updating (e.g., 1/50).

πΈ New Scheduled Job β Delivery (PDF Format)
Selecting a different Headline format (e.g., PDF) updates the summary panel's Delivery line to reflect the new format.

πΈ Subscriber Scheduler List β Populated
Once created, the job appears in the list with its Job name, Job type, Scope, Schedule, Delivery (format badge, recipient count, and recipient email), and an Active toggle with a relative registration time.

πΈ Subscriber Scheduler β Row Actions
Each job's overflow menu offers Run now, Edit, Pause, and Delete, the latter styled in red as a destructive action.

πΈ Edit Scheduled Job β Type & Scope
Edit Scheduled Job reopens the same four-step wizard pre-filled with the job's current values, starting with Job type and Scope. Route: /settings/scheduled-jobs/:id/edit

πΈ Edit Scheduled Job β Schedule
Step 2 shows the job's existing Cadence, Time of day, Timezone, and Start/End date settings, editable in place with the same live preview of upcoming fires.

πΈ Edit Scheduled Job β Report Config
Step 3 shows the job's existing Period, Statuses, and Include Cancelled settings, editable the same way as on creation.

πΈ Edit Scheduled Job β Delivery
Step 4 shows the job's existing Recipients, Headline format, Job name, Description, and Active toggle, editable the same way as on creation, with the same review summary before saving.

πΈ Scheduled Job Detail
Opening a job from the list shows its full record. A header card repeats the name with an Active/Paused badge, the job type, scope, timezone, and headline format, alongside Run now, Pause/Resume, Edit, and Delete actions. Tiles beneath report Cadence, Window (start date through Indefinite or an end date), Recipients count, and Last registered with its relative time. Upcoming fires lists the next five occurrences computed from cadence and timezone; Delivery repeats the Headline format and the recipient list; Configuration shows the handler-specific options for this job type (e.g., the Statuses filter for a Booking Report); and Audit & scheduler records who created and last updated the job with timestamps, plus the internal Schedule ID and Recurrence ID used for ops debugging. Route: /settings/scheduled-jobs/:id

πΈ Scheduled Job Detail β Run Now Confirmation
Run now opens a Caution modal warning that this generates the report and emails it to every recipient immediately, without affecting the regular schedule. Close cancels; Run now confirms.

πΈ Subscriber Scheduler β Paused Job & Row Actions
Pausing a job (from the detail page or the row's overflow menu) flips its Status toggle off and shows Paused instead of Active on the list; scheduled fires stop until it's resumed. The overflow menu then offers Run now, Edit, Resume, and Delete in place of Pause.

πΈ Subscriber Scheduler β Delete Confirmation
Delete opens a Caution modal naming the job and warning that deleting cancels the recurrence and cannot be recovered. Close cancels; Delete removes the job.

πΈ Booking Report Email
When a Booking Report job fires, ZenSpace emails every recipient a summary: the organization, date, and timezone the report covers, headline metrics (Bookings, Gross, Discount Given, Charged, Refunded, Net Collected, Cancellation Fees, Currency, and Period), Download buttons for each supported format with the headline format highlighted as primary, direct download URLs for XLSX/CSV/PDF, and the three files attached directly to the email.

πΈ Booking Report PDF β Page 1
The PDF opens with the same headline metrics as the email, followed by a per-booking table: Booking ID, Organizer, Organizer Email, Meeting Space, Group, Start, End, Hours, Status, Payment, Total, Voucher, Cxl Fee, Refunded, Net, Currency, and Created.

πΈ Booking Report PDF β Page 2
The table continues onto further pages as needed, with the same columns repeated and a Page X of Y footer alongside the report's generation timestamp.

πΈ Email Branding β Branding
The Email Branding page controls how booking emails look for every group in the organization (groups can override these values). The Branding card sets the Logo (PNG or JPG, about 200 KB, shown 32 px high in the header), Header colour, Accent strip (thin strip under the header), Buttons and links colour, Host label, and Host name. Each field shows a Set on Organization badge with a Reset link, and the Preview β Approximate panel on the right updates as you type using sample booking data. Use Save changes to apply, or Reset all to restore defaults. Route: /settings/email-branding
Email Branding β Group Level Override

πΈ Email Branding β Wording, Buttons and Booking Details
Wording sets the Confirmation headline (confirmation email only) and the Space word (e.g. Pod, Room, Desk), which also sets the default row labels. Buttons controls which actions appear at the bottom of the email β Cancel booking and Make another booking β each set to Default, On, or Off. Booking Details shows or hides, and renames, the four rows in the details table: Space, When, Event, and Location.
π· Email Branding β Notes, Contact & Footer
Notes adds an optional Arrival note and Extra note to the email in plain text (line breaks are kept), each set to Default, On, or Off. Use Insert to add placeholders such as {space_name}, {space_word}, {space_word_lower}, {date}, {start_time}, {end_time}, {timezone}, {organization_name}, and {group_name}. Contact & Footer sets the Support email where replies go and an optional Footer tagline shown at the very bottom of the email. WiFi details, payment amounts, and the calendar invite are set by the system and canβt be customised.
π· Email Branding β Group Level Override
Email Branding can be set at two levels. Settings β Email Branding sets the organization-wide branding, which applies to all groups. To customise emails for one group only, open the group (Groups β select group) and click Email branding in the top-right. Values set on the group override the organizationβs branding for that group only; every other group keeps using the organization settings. On the group page, each field shows a From Organization badge when it is inherited and a Set on this Group badge when it has been overridden. Empty fields inherit the organization value, toggles offer Inherit / On / Off, and Reset (or Reset all) returns a field to the organization value. Route: /groups/{group}/email-branding
π· Employee Booking
Employee Booking lets office employees book rooms for free after verifying with a code sent to their work email, while guests always pay. When employee booking is On, employees can make complimentary bookings and guests make paid bookings at the standard rate. The Company card sets the default for every location and room set to Same as above: the Enable employee booking toggle (Off by default) and Daily limit per employee, the maximum free bookings per employee per day (1β100; leave empty for no limit), applied with Save. Locations & Rooms lists each location and its rooms, with a search field and Collapse all; each row can be set to Same as above, On, or Off, and changes save as soon as an option is picked. Same as above follows the level above (a room follows its location, a location follows the company), and the most specific setting wins: a room beats its location, and a location beats the company. Off on a room means guests only. Each row shows an Employees: Free badge with where the setting comes from (e.g. from Location), and a location shows how many of its rooms are free (e.g. 2/2 free).
