# freispace documentation > Documentation for the post-production scheduling and resource management software freispace. These pages provide detailed guides, API references, and user manuals for administrators and users of freispace. - [freispace documentation](https://docs.freispace.com/index.md) ## docs Welcome to freispace: freispace is a web application to schedule your post-production and manage your media projects. - [Welcome to freispace](https://docs.freispace.com/docs.md): Welcome to freispace: freispace is a web application to schedule your post-production and manage your media projects. ### api We offer a publicly accessible REST API to access your data on freispace. Find the most recent API documentation here. - [freispace REST API](https://docs.freispace.com/docs/api.md): We offer a publicly accessible REST API to access your data on freispace. Find the most recent API documentation here. ### billing freispace offers a powerful billing solution incl. offers and invoices that tightly integrates with our scheduling. - [Billing: Offers, invoices, etc.](https://docs.freispace.com/docs/billing.md): freispace offers a powerful billing solution incl. offers and invoices that tightly integrates with our scheduling. #### e-mails ##### custom-smtp In order to send e-mails through your own infrastructure, you may set up SMTP server for freispace to use. - [Setting up a custom SMTP server](https://docs.freispace.com/docs/billing/e-mails/custom-smtp.md): In order to send e-mails through your own infrastructure, you may set up SMTP server for freispace to use. ##### sending-practices freispace can automatically send billing documents such as invoices by e-mail. This also works with both regular and recurring invoices. - [Sending billing documents by e-mail](https://docs.freispace.com/docs/billing/e-mails/sending-practices.md): freispace can automatically send billing documents such as invoices by e-mail. This also works with both regular and recurring invoices. #### factur-x ##### en-16931-invoices freispace creates EN 16931-compatible invoices by default, which will be a legal requirement in EU member states by 2025, with a slow rollout. - [EN 16931 invoices](https://docs.freispace.com/docs/billing/factur-x/en-16931-invoices.md): freispace creates EN 16931-compatible invoices by default, which will be a legal requirement in EU member states by 2025, with a slow rollout. ##### validation-issue-causes If you encounter validation issues with EN 16931 invoices, usually the cause is incomplete or erroneous input. - [Common validation issues with EN 16931 invoices](https://docs.freispace.com/docs/billing/factur-x/validation-issue-causes.md): If you encounter validation issues with EN 16931 invoices, usually the cause is incomplete or erroneous input. #### general ##### reverse-charge Reverse Charge in Invoices: We sell a service to a business located in Italy, which is a member state of the EU. - [Reverse Charge in Invoices](https://docs.freispace.com/docs/billing/general/reverse-charge.md): Reverse Charge in Invoices: We sell a service to a business located in Italy, which is a member state of the EU. ##### rounding-differences Commercial rounding difference: In commercial practice, offer and invoice amounts are usually rounded to two decimal places. - [Commercial rounding difference](https://docs.freispace.com/docs/billing/general/rounding-differences.md): Commercial rounding difference: In commercial practice, offer and invoice amounts are usually rounded to two decimal places. #### invoices ##### header-footer Header & footer texts in Offers & Invoices: The header and footer texts allow you to enter any additional information. - [Header & footer texts in Offers & Invoices](https://docs.freispace.com/docs/billing/invoices/header-footer.md): Header & footer texts in Offers & Invoices: The header and footer texts allow you to enter any additional information. ##### invoice-numbers Here we show you how invoice numbers are assigned in draft mode and how continuous numbering is ensured. - [Invoice numbers](https://docs.freispace.com/docs/billing/invoices/invoice-numbers.md): Here we show you how invoice numbers are assigned in draft mode and how continuous numbering is ensured. ##### payment-status Here we show you how to mark an invoice as paid. Once you have finalized and locked an invoice, it will show up as unpaid. - [Marking an Invoice as Paid](https://docs.freispace.com/docs/billing/invoices/payment-status.md): Here we show you how to mark an invoice as paid. Once you have finalized and locked an invoice, it will show up as unpaid. #### templates ##### css-styles Template styling using CSS: We use Cascading Style Sheets (CSS) for designing the style of documents. - [Template styling using CSS](https://docs.freispace.com/docs/billing/templates/css-styles.md): Template styling using CSS: We use Cascading Style Sheets (CSS) for designing the style of documents. ##### html-code The PDF documents are rendered using HTML pages. Thus, templates should include HTML code for layouts and CSS for styling. - [Template layout using HTML](https://docs.freispace.com/docs/billing/templates/html-code.md): The PDF documents are rendered using HTML pages. Thus, templates should include HTML code for layouts and CSS for styling. ##### managing-templates You'll find a list of templates created for your team in the Team settings on the Billing tab. Templates can be edited, enabled, and disabled. - [Managing templates](https://docs.freispace.com/docs/billing/templates/managing-templates.md): You'll find a list of templates created for your team in the Team settings on the Billing tab. Templates can be edited, enabled, and disabled. ### calendars Synchronizing bookings from freispace can be especially useful for staff, resources and rooms/suites. - [Synchronizing freispace with calendars](https://docs.freispace.com/docs/calendars.md): Synchronizing bookings from freispace can be especially useful for staff, resources and rooms/suites. #### guides ##### google-calendar To automatically synchronize any resource from freispace (e.g. a project's bookings or a staff member's bookings) you will need to copy the provided iCal-Link… - [Synchronizing Google Calendar with freispace](https://docs.freispace.com/docs/calendars/guides/google-calendar.md): To automatically synchronize any resource from freispace (e.g. a project's bookings or a staff member's bookings) you will need to copy the provided iCal-Link… ##### microsoft-outlook To automatically synchronize any resource from freispace (e.g. a project's bookings or a staff member's bookings) you will need to copy the provided iCal-Link… - [Synchronizing Microsoft Outlook with freispace](https://docs.freispace.com/docs/calendars/guides/microsoft-outlook.md): To automatically synchronize any resource from freispace (e.g. a project's bookings or a staff member's bookings) you will need to copy the provided iCal-Link… ##### microsoft-outlook-for-web To automatically synchronize any resource from freispace (e.g. a project's bookings or a staff member's bookings) you will need to copy the provided iCal-Link… - [Synchronizing Outlook for Web with freispace](https://docs.freispace.com/docs/calendars/guides/microsoft-outlook-for-web.md): To automatically synchronize any resource from freispace (e.g. a project's bookings or a staff member's bookings) you will need to copy the provided iCal-Link… #### synch-problems Understanding calendar update intervals: Some users approach us regarding shared calendars not updating correctly or frequently enough. - [Understanding calendar update intervals](https://docs.freispace.com/docs/calendars/synch-problems.md): Understanding calendar update intervals: Some users approach us regarding shared calendars not updating correctly or frequently enough. ### category #### billing How invoice numbering, header and footer texts and payment statuses work in freispace invoicing. - [Invoices](https://docs.freispace.com/docs/category/billing.md): How invoice numbering, header and footer texts and payment statuses work in freispace invoicing. #### e-mails Send invoices and other billing documents by e-mail from freispace, including sending practices and custom SMTP servers. - [Billing E-mails](https://docs.freispace.com/docs/category/e-mails.md): Send invoices and other billing documents by e-mail from freispace, including sending practices and custom SMTP servers. #### factur-x--en-16931 Create EN 16931 and Factur-X compliant e-invoices with freispace and resolve common validation issues. - [Factur-X / EN 16931](https://docs.freispace.com/docs/category/factur-x--en-16931.md): Create EN 16931 and Factur-X compliant e-invoices with freispace and resolve common validation issues. #### general General billing topics in freispace, including reverse charge invoices and how rounding differences are handled. - [General Billing Topics](https://docs.freispace.com/docs/category/general.md): General billing topics in freispace, including reverse charge invoices and how rounding differences are handled. #### setup-guides Step-by-step guides for synchronising freispace bookings with Microsoft Outlook, Outlook for the web and Google Calendar. - [Calendar Sync Setup Guides](https://docs.freispace.com/docs/category/setup-guides.md): Step-by-step guides for synchronising freispace bookings with Microsoft Outlook, Outlook for the web and Google Calendar. #### setup-guides-1 Configure SAML2 single sign-on for freispace with Microsoft Entra, Google Workspace, Okta or authentik. - [SSO Setup Guides](https://docs.freispace.com/docs/category/setup-guides-1.md): Configure SAML2 single sign-on for freispace with Microsoft Entra, Google Workspace, Okta or authentik. #### templates Manage the invoice and quote templates of your freispace team and customise their layout with HTML and CSS. - [Invoicing Templates](https://docs.freispace.com/docs/category/templates.md): Manage the invoice and quote templates of your freispace team and customise their layout with HTML and CSS. ### cost-reports freispace offers a way of tracking internal costs using project cost reports and overall cost reports. - [Cost Reports](https://docs.freispace.com/docs/cost-reports.md): freispace offers a way of tracking internal costs using project cost reports and overall cost reports. #### notes Notes & FAQ on Cost Reports: When selecting a timeframe of "Last 30 days", the actual timeframe might be between 28 and 31 days. - [Notes & FAQ on Cost Reports](https://docs.freispace.com/docs/cost-reports/notes.md): Notes & FAQ on Cost Reports: When selecting a timeframe of "Last 30 days", the actual timeframe might be between 28 and 31 days. ### dashboards Build custom dashboards in freispace and populate them with widgets powered by Kusto Query Language (KQL). - [Dashboards](https://docs.freispace.com/docs/dashboards.md): Build custom dashboards in freispace and populate them with widgets powered by Kusto Query Language (KQL). #### kql-reference Reference for using Kusto Query Language (KQL) to query freispace data in dashboard widgets, including available tables and supported syntax. - [KQL Reference for freispace Dashboards](https://docs.freispace.com/docs/dashboards/kql-reference.md): Reference for using Kusto Query Language (KQL) to query freispace data in dashboard widgets, including available tables and supported syntax. ### departments You may mirror your company's structure and hierarchy using departments and roles within freispace. - [Departments](https://docs.freispace.com/docs/departments.md): You may mirror your company's structure and hierarchy using departments and roles within freispace. ### mcp-server Our freispace MCP server gives you the freedom to use any company-deployed AI model to query data within freispace. - [MCP Server - Integrate freispace with your own LLM](https://docs.freispace.com/docs/mcp-server.md): Our freispace MCP server gives you the freedom to use any company-deployed AI model to query data within freispace. #### add-freispace This guide shows you how to connect the freispace MCP server to the most common AI assistants, so you can ask your LLM questions about your freispace data. - [Add the freispace MCP server to your LLM](https://docs.freispace.com/docs/mcp-server/add-freispace.md): This guide shows you how to connect the freispace MCP server to the most common AI assistants, so you can ask your LLM questions about your freispace data. #### managing-access Admins control who on the team can use the freispace MCP server. Each team member gets an individual secret that they use as the APIKEY when connecting their… - [Manage MCP server access for your team](https://docs.freispace.com/docs/mcp-server/managing-access.md): Admins control who on the team can use the freispace MCP server. Each team member gets an individual secret that they use as the APIKEY when connecting their… ### roles-permissions Use Invite new members to add people, and give each member a role. The list shows everyone's role, permissions and join date. - [Roles & permissions](https://docs.freispace.com/docs/roles-permissions.md): Use Invite new members to add people, and give each member a role. The list shows everyone's role, permissions and join date. ### screens Generate public links for use on screens in hallways, in order to guide visitors to the correct suites. - [Hallway screens](https://docs.freispace.com/docs/screens.md): Generate public links for use on screens in hallways, in order to guide visitors to the correct suites. #### options When editing a screen, scroll to the bottom and open the "Detailed display settings". Upload an image or logo. It will be displayed on the top of the screen. - [Configuration options of screens](https://docs.freispace.com/docs/screens/options.md): When editing a screen, scroll to the bottom and open the "Detailed display settings". Upload an image or logo. It will be displayed on the top of the screen. #### styling In the screen settings, you may paste CSS styles to override the default stylesheets. We ensure consistent browser styling by using the following CSS reset. - [Override CSS styling of screens](https://docs.freispace.com/docs/screens/styling.md): In the screen settings, you may paste CSS styles to override the default stylesheets. We ensure consistent browser styling by using the following CSS reset. ### sso Single-Sign-On (SSO) with SAML2: freispace offers Flagship users the ability to set up Single-Sign-On (SSO) via SAML2. - [Single-Sign-On (SSO) with SAML2](https://docs.freispace.com/docs/sso.md): Single-Sign-On (SSO) with SAML2: freispace offers Flagship users the ability to set up Single-Sign-On (SSO) via SAML2. #### guides ##### authentik Setting up SSO with authentik: Sign in to freispace using authentik. freispace should now appear as an app for your users. - [Setting up SSO with authentik](https://docs.freispace.com/docs/sso/guides/authentik.md): Setting up SSO with authentik: Sign in to freispace using authentik. freispace should now appear as an app for your users. ##### google-workspace Setting up SSO with Google Workspace: Sign in to freispace using Google. - [Setting up SSO with Google Workspace](https://docs.freispace.com/docs/sso/guides/google-workspace.md): Setting up SSO with Google Workspace: Sign in to freispace using Google. ##### microsoft-entra Sign in to freispace using Microsoft Entra. A new application has now been created and its settings opened. - [Setting up SSO with Microsoft Entra](https://docs.freispace.com/docs/sso/guides/microsoft-entra.md): Sign in to freispace using Microsoft Entra. A new application has now been created and its settings opened. ##### okta Setting up SSO with Okta: Sign in to freispace using Okta. - [Setting up SSO with Okta](https://docs.freispace.com/docs/sso/guides/okta.md): Setting up SSO with Okta: Sign in to freispace using Okta. ### team-settings Team-wide configuration lives in your team's settings. Open the team switcher (your team name, top right) and choose Team settings. - [Team settings](https://docs.freispace.com/docs/team-settings.md): Team-wide configuration lives in your team's settings. Open the team switcher (your team name, top right) and choose Team settings. #### activities-and-absences Both activities and absence types can not be deleted once used for time tracking or bookings, but can be renamed or disabled. - [Activities & absence types](https://docs.freispace.com/docs/team-settings/activities-and-absences.md): Both activities and absence types can not be deleted once used for time tracking or bookings, but can be renamed or disabled. #### booking-settings Further down, Booking statuses let you define the statuses a booking can have (for example Confirmed or 1st Pencil) and their colour. - [Booking settings & statuses](https://docs.freispace.com/docs/team-settings/booking-settings.md): Further down, Booking statuses let you define the statuses a booking can have (for example Confirmed or 1st Pencil) and their colour. #### custom-fields Custom fields & number sequences: Add extra, structured fields to your bookings, projects, rooms, staff and resources (and more). - [Custom fields & number sequences](https://docs.freispace.com/docs/team-settings/custom-fields.md): Custom fields & number sequences: Add extra, structured fields to your bookings, projects, rooms, staff and resources (and more). #### public-holidays Click Add region and name it (for example Berlin). With the region selected, click Add year and add that year's public holidays. - [Public holidays](https://docs.freispace.com/docs/team-settings/public-holidays.md): Click Add region and name it (for example Berlin). With the region selected, click Add year and add that year's public holidays. ### time-tracking freispace allows to track individual's time via a time clock widget or by manually entering entries in a form. - [Time tracking](https://docs.freispace.com/docs/time-tracking.md): freispace allows to track individual's time via a time clock widget or by manually entering entries in a form. #### approval-workflows freispace offers the ability to set up multi-step approval workflows for absences, holidays and time records. - [Approval Workflows for Absences, Holidays, and Time Records](https://docs.freispace.com/docs/time-tracking/approval-workflows.md): freispace offers the ability to set up multi-step approval workflows for absences, holidays and time records. #### approval-workflows-edge-cases With multi-step approval workflows being dependent on a lot of factors and running for multiple days until completed, there are possible edge cases that may… - [Edge Cases with request workflows](https://docs.freispace.com/docs/time-tracking/approval-workflows-edge-cases.md): With multi-step approval workflows being dependent on a lot of factors and running for multiple days until completed, there are possible edge cases that may… #### month-report Month balance: Looking at a month's balance of working times, we display multiple values. These are as follows. - [Month balance](https://docs.freispace.com/docs/time-tracking/month-report.md): Month balance: Looking at a month's balance of working times, we display multiple values. These are as follows. #### setup freispace allows to track individual's time via a time clock widget or by manually entering entries in a form. - [Setting up time tracking](https://docs.freispace.com/docs/time-tracking/setup.md): freispace allows to track individual's time via a time clock widget or by manually entering entries in a form. ### webhooks Webhooks allow other third-party applications to be notified in real time whenever a change occurs within freispace. - [Webhooks - for automations with freispace](https://docs.freispace.com/docs/webhooks.md): Webhooks allow other third-party applications to be notified in real time whenever a change occurs within freispace. #### create-endpoint Set up an HTTPS endpoint function that can accept webhook requests with a POST method. Set up your endpoint function so that it. - [Create a webhook endpoint function](https://docs.freispace.com/docs/webhooks/create-endpoint.md): Set up an HTTPS endpoint function that can accept webhook requests with a POST method. Set up your endpoint function so that it. #### events Webhook Events Reference: Webhooks let you subscribe to freispace API events and receive notice when an event occurs. - [Webhook Events Reference](https://docs.freispace.com/docs/webhooks/events.md): Webhook Events Reference: Webhooks let you subscribe to freispace API events and receive notice when an event occurs. ##### absences Receive webhook notifications whenever absences are created, updated, deleted or requests are approved. - [Absence webhooks](https://docs.freispace.com/docs/webhooks/events/absences.md): Receive webhook notifications whenever absences are created, updated, deleted or requests are approved. ##### bookings Receive webhook notifications whenever bookings are created, updated or deleted. Booking webhooks can be used to trigger actions in your application whenever a… - [Booking webhooks](https://docs.freispace.com/docs/webhooks/events/bookings.md): Receive webhook notifications whenever bookings are created, updated or deleted. Booking webhooks can be used to trigger actions in your application whenever a… ##### invoices Receive webhook notifications whenever invoices are finalized or canceled. Invoice webhooks can be used to trigger actions in your application whenever an… - [Invoice webhooks](https://docs.freispace.com/docs/webhooks/events/invoices.md): Receive webhook notifications whenever invoices are finalized or canceled. Invoice webhooks can be used to trigger actions in your application whenever an… ##### projects Receive webhook notifications whenever projects are created, updated, archived, unarchived, or deleted. - [Project webhooks](https://docs.freispace.com/docs/webhooks/events/projects.md): Receive webhook notifications whenever projects are created, updated, archived, unarchived, or deleted. ##### quotes Receive webhook notifications whenever quotes are finalized or their status (accepted/declined) is updated. - [Quote Webhooks](https://docs.freispace.com/docs/webhooks/events/quotes.md): Receive webhook notifications whenever quotes are finalized or their status (accepted/declined) is updated. ##### storage-projects Storage project webhooks: Receive webhook notifications whenever storage projects are created, updated, or deleted. - [Storage project webhooks](https://docs.freispace.com/docs/webhooks/events/storage-projects.md): Storage project webhooks: Receive webhook notifications whenever storage projects are created, updated, or deleted. #### register-freispace Create a Webhook on freispace: To add a new webhook endpoint to your team's account, follow below steps. - [Create a Webhook on freispace](https://docs.freispace.com/docs/webhooks/register-freispace.md): Create a Webhook on freispace: To add a new webhook endpoint to your team's account, follow below steps. #### security To ensure a secure integration of webhooks with your custom implementation or the third-party provider, we propose the following safety measures. - [Webhook Security](https://docs.freispace.com/docs/webhooks/security.md): To ensure a secure integration of webhooks with your custom implementation or the third-party provider, we propose the following safety measures. ## user-guides freispace user guides - [freispace User Guides](https://docs.freispace.com/user-guides.md): freispace user guides ### analytics freispace offers a wide range of analytical features including comprehensive exports as CSV and Excel files. - [Analytics within freispace](https://docs.freispace.com/user-guides/analytics.md): freispace offers a wide range of analytical features including comprehensive exports as CSV and Excel files. #### dashboards Build a custom dashboard in freispace and add widgets powered by Kusto Query Language (KQL) queries. - [Dashboards](https://docs.freispace.com/user-guides/analytics/dashboards.md): Build a custom dashboard in freispace and add widgets powered by Kusto Query Language (KQL) queries. #### staff-overheads Analyse how much overheads your planning generates for internal staff. Our report shows you the amount of overheads on an hourly as well as internal cost basis. - [Analyse Staff Overheads](https://docs.freispace.com/user-guides/analytics/staff-overheads.md): Analyse how much overheads your planning generates for internal staff. Our report shows you the amount of overheads on an hourly as well as internal cost basis. ### billing An overview of our billing-related functionality, including Goods and Services, Quoting and Invoicing. - [Billing Module](https://docs.freispace.com/user-guides/billing.md): An overview of our billing-related functionality, including Goods and Services, Quoting and Invoicing. #### goods-services Goods & Services represent articles that you can add to quotes and invoices as line items. - [Goods & Services](https://docs.freispace.com/user-guides/billing/goods-services.md): Goods & Services represent articles that you can add to quotes and invoices as line items. #### invoicing Invoicing: Write invoices based on tracked costs, bookings, or by converting quotes into invoices. - [Invoicing](https://docs.freispace.com/user-guides/billing/invoicing.md): Invoicing: Write invoices based on tracked costs, bookings, or by converting quotes into invoices. #### quotes-invoices Billing Module Overview: Quotes, Invoices, Goods and Services All, Draft, Open, Accepted, or Declined. - [Billing Module Overview](https://docs.freispace.com/user-guides/billing/quotes-invoices.md): Billing Module Overview: Quotes, Invoices, Goods and Services All, Draft, Open, Accepted, or Declined. #### quoting freispace can create beautiful and comprehensive quotes and allows for any complete control of your quote design. - [Quoting](https://docs.freispace.com/user-guides/billing/quoting.md): freispace can create beautiful and comprehensive quotes and allows for any complete control of your quote design. ### planner freispace has a range of different planners that allow you to plan your resources, staff and rooms in a way that suits your needs. - [Planning in freispace](https://docs.freispace.com/user-guides/planner.md): freispace has a range of different planners that allow you to plan your resources, staff and rooms in a way that suits your needs. #### general The various planners in freispace share a common layout and set of features that make it easy to navigate and use them effectively. - [General layout of the planners](https://docs.freispace.com/user-guides/planner/general.md): The various planners in freispace share a common layout and set of features that make it easy to navigate and use them effectively. ### quick-start Quick Start Guides: Follow below guides to get an overview of the basics of freispace. - [Quick Start Guides](https://docs.freispace.com/user-guides/quick-start.md): Quick Start Guides: Follow below guides to get an overview of the basics of freispace. #### create-booking You can search for "Names", "Roles", "Groups" and "Sites" e.g. Typing "Editor" will bring up a list of any staff members that have the role of "Editor". - [Creating bookings](https://docs.freispace.com/user-guides/quick-start/create-booking.md): You can search for "Names", "Roles", "Groups" and "Sites" e.g. Typing "Editor" will bring up a list of any staff members that have the role of "Editor". #### gantt-project-planning Plan your projects with a full-fledged Gantt chart, including milestones, phases and dependencies. Double clicking a booking will open the editing window. - [Project Planning using Gantt Charts](https://docs.freispace.com/user-guides/quick-start/gantt-project-planning.md): Plan your projects with a full-fledged Gantt chart, including milestones, phases and dependencies. Double clicking a booking will open the editing window. #### manage-bookings The Planner page updates dynamically, displaying changes made by any user in real time without requiring a page refresh. - [Managing Existing Bookings](https://docs.freispace.com/user-guides/quick-start/manage-bookings.md): The Planner page updates dynamically, displaying changes made by any user in real time without requiring a page refresh. #### resource-planning This calendar can e show thorough clicking the "Months" button on the right, or selecting "Three month calendar" in the drop down. - [Navigation and Customisation in Planner](https://docs.freispace.com/user-guides/quick-start/resource-planning.md): This calendar can e show thorough clicking the "Months" button on the right, or selecting "Three month calendar" in the drop down. #### tasks-todos Creating Tasks and Subtasks in Freispace Dashboard: All personal tasks, and tasks assigned to you are displayed on your dashboard. - [Creating Tasks and Subtasks in Freispace Dashboard](https://docs.freispace.com/user-guides/quick-start/tasks-todos.md): Creating Tasks and Subtasks in Freispace Dashboard: All personal tasks, and tasks assigned to you are displayed on your dashboard. #### time-tracking Time Tracking + Absence Requests: Add other relevant such as "Break duration" or Comments. Click "Save". - [Time Tracking + Absence Requests](https://docs.freispace.com/user-guides/quick-start/time-tracking.md): Time Tracking + Absence Requests: Add other relevant such as "Break duration" or Comments. Click "Save". #### user-profile Welcome to freispace! This guide outlines how to customise freispace to your specific needs. Navigate to freispace at app.freispace.com to login. - [Set up your profile](https://docs.freispace.com/user-guides/quick-start/user-profile.md): Welcome to freispace! This guide outlines how to customise freispace to your specific needs. Navigate to freispace at app.freispace.com to login. ### workload freispace offers a Workload planner that helps you analyse th workload of people, rooms and resources over a period of one to six months. - [Workload & Capacity Planning](https://docs.freispace.com/user-guides/workload.md): freispace offers a Workload planner that helps you analyse th workload of people, rooms and resources over a period of one to six months. ## Optional - [freispace Website](https://freispace.com): Main website with product information and company details - [Support Request](https://freispace.com/support): Get personal support - [Live Status Page](https://status.freispace.com): Real-time system status and uptime monitoring - [Open REST API](https://api.freispace.com): REST API documentation for developers incl. OpenAPI spec --- # Full Documentation Content # Welcome to freispace [freispace](https://freispace.com) is a web application to schedule your post-production and manage your media projects. This documentation will help you through setup and configuration of freispace. ## Topics[​](#topics "Direct link to Topics") These docs cover, amongst others: * Setting up departments to mirror your company's hierarchy * Setting up time tracking and approval workflows * Synchronizing calendars with freispace * Creating views for hallway screens * Our invoicing feature * Setting up Single-Sign-On (SSO) with SAML2 * Using webhooks to automate tasks using freispace as a trigger --- # freispace REST API We offer a publicly accessible REST API to access your data on freispace. ## API documentation[​](#api-documentation "Direct link to API documentation") Find the most recent API documentation here: ## Authentication[​](#authentication "Direct link to Authentication") The API uses *Bearer Tokens* for authentication. You can create a token in your team settings on the "Integrations" tab. When sending requests to the API, you have to send the token in the `Authorization` header. ``` Authorization: Bearer ``` ## Content Types[​](#content-types "Direct link to Content Types") The REST API exclusively uses JSON (`application/json`) as content type. ## OpenAPI (Swagger) file[​](#openapi-swagger-file "Direct link to OpenAPI (Swagger) file") Our **OpenAPI 3.0** JSON definition file can be found here: ## Rate Limiting / Throttling[​](#rate-limiting--throttling "Direct link to Rate Limiting / Throttling") Rate limits specify the maximum number of requests (`GET`, `POST`, `PUT`, `PATCH` or `DELETE`) a user can make in a given time period. When you exceed a rate limit, the API request fails and returns the HTTP 429 status code. The HTTP 429 status code indicates that the user made too many requests in a given period of time ("rate limiting"). The API is throttled to **60 requests per minute per team**. When reaching too many requests, the API will return a HTTP `429 Too Many Requests` status. The following sample shows the API response for the status code 429. ``` HTTP/1.1 429 Too Many Requests Date: Tue, 17 Oct 2023 12:29:21 GMT X-Ratelimit-Limit: 60 X-Ratelimit-Remaining: 0 Retry-After: 60 X-Ratelimit-Reset: 1697545791 ``` --- # Billing: Offers, invoices, etc. freispace offers a powerful billing solution incl. offers and invoices that tightly integrates with our scheduling. --- # Setting up a custom SMTP server In order to send e-mails through your own infrastructure, you may set up SMTP server for freispace to use. ## Setting up a new server[​](#setting-up-a-new-server "Direct link to Setting up a new server") 1. Go to the **Team settings**. 2. Switch to the tab **Administration**. 3. Scroll down to the **SMTP servers** section and click **Add SMTP server**. 4. Enter an internal name followed by your SMTP server settings. * By default, we use freispace servers as a fallback if your SMTP server fails to accept our message three times. Although we strongly advise against it, you may disable this behaviour by activating **Deactivate fallback**. Doing so may result in e-mails such as invoices not being able to be sent. * You may **Enable debugging** for us to log interactions with your server. This may help diagnose connection issues. 5. Click **Add**. #### Testing your new server[​](#testing-your-new-server "Direct link to Testing your new server") Once you have created an SMTP server, you may test the connection by clicking the **Test** button. info You still need to enable sending through your newly added server. Follow the next steps to actually start sending e-mails. ## Enabling sending through your server[​](#enabling-sending-through-your-server "Direct link to Enabling sending through your server") Whilst you have now added your SMTP server, we still need to set up *when* to use it. You may use a different SMTP server for each Company entity you have set up. 1. Go to the **Team settings**. 2. Switch to the tab **Company entities**. 3. Edit the legal entity that should use your SMTP server. 4. Under **E-mail dispatch**, select your SMTP server. 5. Click **Save**. Whenever the Company entity is now selected for a billing document, we will use your SMTP server to deliver the document. --- # Sending billing documents by e-mail freispace can automatically send billing documents such as invoices by e-mail. This also works with both regular and recurring invoices. ## General setup[​](#general-setup "Direct link to General setup") freispace will send the e-mails on your behalf with your company name clearly visible. By default, freispace sends these messages from the e-mail address `e-invoice [at] freispace.com` and signs them using S/MIME. The e-mails will typically include the document (e.g. invoice) as an attachment. ### Recipients / CC & BCC[​](#recipients--cc--bcc "Direct link to Recipients / CC & BCC") Your e-mail will be delivered to the recipient e-mail addresses specified when creating the document. You may add an unlimited number of CC and BCC recipients that should be included in every outgoing e-mail in the settings: 1. Go to the **Team settings**. 2. Click the **Invoicing** tab. 3. Scroll down to **E-mail delivery**, add your CC and BCC recipients, and click **Save**. A great use case for this feature is to automatically BCC all outgoing invoices to your controlling department. ## Custom e-mail sender[​](#custom-e-mail-sender "Direct link to Custom e-mail sender") You can set up a custom SMTP server to send e-mails from. #### Benefits to setting up your own SMTP server for outgoing documents:[​](#benefits-to-setting-up-your-own-smtp-server-for-outgoing-documents "Direct link to Benefits to setting up your own SMTP server for outgoing documents:") * It allows you to ensure all e-mails are only handled by your infrastructure. * You can control the e-mail address of outgoing documents. * Your customers may have whitelisted your domain or e-mail address, leading to safer deliverability. #### Caveats to consider:[​](#caveats-to-consider "Direct link to Caveats to consider:") * freispace can no longer sign/verify e-mails using S/MIME * There may be potential delivery issues if your server is set up incorrectly. * Your SMTP server needs to be accessible to our servers. In case of issues, delivery will be delayed. * freispace can no longer assure correct delivery or warn you of failed deliveries. Follow [this guide](https://docs.freispace.com/docs/billing/e-mails/custom-smtp.md) to set up sending via your own SMTP server. ## Failover strategy[​](#failover-strategy "Direct link to Failover strategy") freispace will try three times to send an e-mail. If there are issues, we will notify the user of such issues. If you are using a custom SMTP server, we will try reaching and sending the e-mail three times. If your server fails to be reachable or accept our send request, depending on your settings, we will use the freispace servers as a fallback. --- # EN 16931 invoices freispace creates EN 16931-compatible invoices by default, which will be a legal requirement in EU member states by 2025, with a slow rollout. ## Compliance[​](#compliance "Direct link to Compliance") The invoices are also compliant to country-specific standards: * XRechnung / ZUGFeRD 2.2 / E-Rechnung (Germany) * Factur-X (France) ## Contents[​](#contents "Direct link to Contents") The EN 16931 standard defines an XML-based format with the invoice's contents in a machine-readable way. The generated PDF invoices contain the XML as an attachment. ## Handling in freispace[​](#handling-in-freispace "Direct link to Handling in freispace") Whenever possible, freispace will automatically create EN 16931-compatible invoices. If, however, the generation of such invoice fails (e.g. because of missing company data), freispace reverts back to classic PDF invoices without the attachment. ### Validation problems[​](#validation-problems "Direct link to Validation problems") Some of the most common validation problems are due to missing or erroneous input. Find a list of common causes of validation issues [on this page](https://docs.freispace.com/docs/billing/factur-x/validation-issue-causes.md). --- # Common validation issues with EN 16931 invoices If you encounter validation issues with EN 16931 invoices, usually the cause is incomplete or erroneous input. ## Incomplete company data[​](#incomplete-company-data "Direct link to Incomplete company data") Ensure to have filled in all relevant Company information in the **Team settings** at **Company entities**. | **Field name** | **Required** | **Notes** | **Example** | | --------------------- | ------------ | ----------------------------------------- | ------------------------ | | Name | **Yes** | Full company name incl. legal entity | `Test Company Ltd.` | | Address Line 1 | **Yes** | Street and number | `Pappelallee 21` | | Address Line 2 | No | Unit, Building, Floor | | | City | **Yes** | | `Berlin` | | State/Province/Region | No | Depending on locale | | | ZIP/Postal Code | **Yes** | | `13357` | | Country | **Yes** | | `Germany` | | VAT ID | **Yes** | either VAT ID or Tax ID is required | `DEDE999999999` | | Tax ID | **Yes** | either VAT ID or Tax ID is required | `123/456/7890` | | District court | **Yes**/No | Required depending on your country's laws | `Berlin-Charlottenburg` | | Company number | **Yes**/No | Required depending on your country's laws | `HRB 123456` | | Managing Director(s) | **Yes**/No | Managing Directors / CEOs | `Test Person` | | IBAN | **Yes** | | `DE75512108001245126199` | | BIC/SWIFT | **Yes** | | `COBADEHD055` | ## Reverse Charge, Exports, and other VAT rules[​](#reverse-charge-exports-and-other-vat-rules "Direct link to Reverse Charge, Exports, and other VAT rules") If you use VAT rules like Reverse Charge, make sure to include: * Company VAT ID * Set up in the **Team settings** at **Company entities**. * Client VAT ID * Set up when creating/editing a client. It will automatically be added to the invoice. Validation will fail if any of the two are missing. ## Missing/incomplete bank account numbers[​](#missingincomplete-bank-account-numbers "Direct link to Missing/incomplete bank account numbers") If either IBAN or BIC is missing in the company settings, the resulting XML invoices might be invalid. Set up in the **Team settings** at **Company entities**. --- # Reverse Charge in Invoices ## When to apply[​](#when-to-apply "Direct link to When to apply") We sell a service to a business located in Italy, which is a member state of the EU. Our customer provides us with their valid VAT identification number for invoicing. We issue our invoice to the customer in France without VAT and with the note "Reverse Charge". ## VAT Rule for Invoices[​](#vat-rule-for-invoices "Direct link to VAT Rule for Invoices") To apply reverse charge to your invoices, you might need to create a separate VAT rule. In most cases, you team should already have such a VAT rule in place, as freispace automatically generates it for you. To check whether it exists, navigate to the **Team settings**, head to the tab **Invoicing** and scroll down to **Taxation overrides**. ![Taxation Overrides Screenshot](/assets/images/overrides-447ff5cd727cf9bd3938eb315afb9ec3.png) If you see a rule called *Reverse Charge*, you don't need to do anything. Otherwise, create a new rule by clicking **Add new**. ![Reverse Charge Screenshot](/assets/images/reverse-charge-override-d0425560013865620374bc57173d1b2d.png) Enter `Reverse Charge` as the *Name* and *Text on documents*. For the *Override tax rate* field, set `0`. ## Creating Invoices with Reverse Charge[​](#creating-invoices-with-reverse-charge "Direct link to Creating Invoices with Reverse Charge") In the invoice, select the aforementioned VAT rule under **Additional options**. note You are required to list the client's VAT identification number on the invoice. Make sure it's valid. If you have added the VAT ID in the client's settings within freispace, it will automatically be printed on the invoice. If not, you can add the VAT ID in the **Recipient** field. --- # Commercial rounding difference ## The reason behind differences in the final amount of gross and net invoices[​](#the-reason-behind-differences-in-the-final-amount-of-gross-and-net-invoices "Direct link to The reason behind differences in the final amount of gross and net invoices") ### Horizontal vs. vertical calculation[​](#horizontal-vs-vertical-calculation "Direct link to Horizontal vs. vertical calculation") In commercial practice, offer and invoice amounts are usually rounded to two decimal places. This can lead to unexpected rounding differences in the cent range: Depending on whether the value-added tax amounts are rounded using the * horizontal method *or* * vertical method. Minor deviations between the final amount shown in the transaction and the expected result may occur. Both calculations comply with invoicing requirements (e.g. according to § 14 UStG in Germany) and are therefore accepted by the tax authorities. #### An example of the horizontal method[​](#an-example-of-the-horizontal-method "Direct link to An example of the horizontal method") Here, the value-added tax is calculated and rounded at the item level. In the example, individual net prices and individual VAT amounts are then added together, resulting in individual gross amounts. These together then constitute the total gross amount. | Description | Net Price | VAT (19%) | Gross Price | | ----------- | --------- | -------------- | ----------- | | Product A | $9.99 | **$1.90** \*\* | $11.89 | | Product B | $19.50 | **$3.71** \*\* | $23.21 | | Total | | $5,61 | $35.10 | \*\* Rounded from $1.8981 and $3.705 #### An example of the vertical method[​](#an-example-of-the-vertical-method "Direct link to An example of the vertical method") In this calculation, the net prices are first added together. Then the tax is determined from this. This calculated and rounded amount then yields the total gross amount. Although the amounts within the calculations are identical, we have a difference of one cent. Even though it might seem odd, this is not a calculation error. The different calculation methods lead to a slightly different result. | Description | Net Price | VAT (19%) | Gross Price | | ----------- | --------- | -------------- | --------------- | | Product A | $9.99 | $1.8981 | $11.8881 | | Product B | $19.50 | $3.705 | $23.205 | | Total | | **$5,60** \*\* | **$35.09** \*\* | \*\* Rounded from $5,6031 and $35,0931 info freispace uses the horizontal method for VAT calculation. This enables the use of multiple VAT rates in one document. # Calculation in freispace For the calculation of VAT, we use the horizontal method. With the horizontal method, VAT is calculated from the net unit price. The value is symmetrically rounded to two decimal places. Then the VAT is multiplied by the quantity of the invoice line. On a line item level (quantity × unit price), freispace uses banker's rounding (also known as round half to even). For the VAT calculation and totals, commercial rounding is used. --- # Header & footer texts in Offers & Invoices The header and footer texts allow you to enter any additional information. ## Header Text[​](#header-text "Direct link to Header Text") In the header text field, you can enter the introductory text of your offer or invoice. Alternatively, you can use a predefined text. freispace provides the ability to create and use additional **text snippets**, and use **variables**. Select a text snippet by clicking the **Snippets** button. ![Insert text snippet](/assets/images/text-snippet-modal-4897ef73493b7bec922fc2ca2cf8d365.png) You can select your created snippets or use one of the predefined ones by freispace. Additionally, use **Variables** to dynamically generate texts. Variables can be used in the following fields: * Subject * Header * Footer * Line item / inventory item name * Line item / inventory item text ## Footer Text[​](#footer-text "Direct link to Footer Text") The footer text is the counterpart to the header text. In the footer text field, you can enter the concluding text of your offer or invoice. Alternatively, you can use our predefined text. You have the option to write the text freely or use **text snippets** and **variables**. Select a text snippet by clicking the **Snippets** button. ![Insert text snippet](/assets/images/text-snippet-modal-4897ef73493b7bec922fc2ca2cf8d365.png) You can select your created snippets or use one of the predefined ones by freispace. Additionally, use **Variables** to dynamically generate texts. Variables can be used in the following fields: * Subject * Header * Footer * Line item / inventory item name * Line item / inventory item text ## Available variables[​](#available-variables "Direct link to Available variables") The following variables are available. ### Dates & time[​](#dates--time "Direct link to Dates & time") | Placeholder | Description | | --------------------- | ----------------------------------- | | `{DAY}` | Day | | `{WEEKDAY}` | Weekday | | `{DATE}` | Date | | `{WEEKNUMBER}` | Calendar week | | `{MONTH}` | Month (full name) | | `{MONTH.SHORT}` | Month (abbreviated) | | `{MONTH.NUMBER}` | Month (numeric) | | `{MONTH.DAYS}` | Number of days in the current month | | `{YEAR}` | Year | | `{YEAR.SHORT}` | Year (2-digit) | | `{LASTQUARTER}` | Last quarter | | `{QUARTER}` | Current quarter | | `{NEXTQUARTER}` | Next quarter | | `{DATE.YESTERDAY}` | Yesterday's date | | `{WEEKDAY.YESTERDAY}` | Yesterday's weekday | | `{LASTMONTH}` | Last month | | `{LASTMONTH.SHORT}` | Last month (abbreviated) | | `{LASTMONTH.NUMBER}` | Last month (numeric) | | `{NEXTMONTH}` | Next month | | `{NEXTMONTH.SHORT}` | Next month (abbreviated) | | `{NEXTMONTH.NUMBER}` | Next month (numeric) | | `{LASTYEAR}` | Last year | | `{LASTYEAR.SHORT}` | Last year (2-digit) | | `{NEXTYEAR}` | Next year | | `{NEXTYEAR.SHORT}` | Next year (2-digit) | ### Client / recipient[​](#client--recipient "Direct link to Client / recipient") | Placeholder | Description | | ----------------------- | ----------------- | | `{RECIPIENT.COMPANY}` | Company name | | `{RECIPIENT.NUMBER}` | Client number | | `{RECIPIENT.NAME}` | Client full name | | `{RECIPIENT.FIRSTNAME}` | Client first name | | `{RECIPIENT.LASTNAME}` | Client last name | ### Quote information[​](#quote-information "Direct link to Quote information") | Placeholder | Description | | ------------------------------- | ----------------------- | | `{OFFER.NUMBER}` | Offer number | | `{OFFER.DATE}` | Offer date | | `{OFFER.VALID.DATE}` | Offer valid until date | | `{OFFER.SERVICE.DATE}` | Service date | | `{OFFER.SERVICEPERIOD.ENDDATE}` | Service period end date | | `{OFFER.SUM.NET}` | Offer total (net) | | `{OFFER.SUM.GROSS}` | Offer total (gross) | | `{OFFER.SUM.DISCOUNT}` | Total discounts | | `{OFFER.SUM.SURCHARGE}` | Total surcharges | | `{CONTACTPERSON}` | Contact person | ### Invoice information[​](#invoice-information "Direct link to Invoice information") | Placeholder | Description | | --------------------------------- | ------------------------ | | `{INVOICE.NUMBER}` | Invoice number | | `{INVOICE.DATE}` | Invoice date | | `{INVOICE.DUEDATE}` | Due date | | `{INVOICE.SERVICE.DATE}` | Service date | | `{INVOICE.SERVICEPERIOD.ENDDATE}` | Service period end date | | `{INVOICE.SUM.NET}` | Invoice total (net) | | `{INVOICE.SUM.GROSS}` | Invoice total (gross) | | `{INVOICE.SUM.DISCOUNT}` | Total discounts | | `{INVOICE.SUM.SURCHARGE}` | Total surcharges | | `{CONTACTPERSON}` | Contact person | | `{OFFER.NUMBER}` | Offer number (if linked) | | `{OFFER.DATE}` | Offer date (if linked) | ### Order information (if linked)[​](#order-information-if-linked "Direct link to Order information (if linked)") If a quote or invoice is linked to an order, you may display the order number and, if the order is also linked to a project, the project name and number. | Placeholder | Description | | ------------------ | -------------- | | `{ORDER.NUMBER}` | Order number | | `{PROJECT.NUMBER}` | Project number | | `{PROJECT.NAME}` | Project name | --- # Invoice numbers Here we show you how invoice numbers are assigned in draft mode and how continuous numbering is ensured. When creating a new invoice, freispace always looks for the next available invoice number, which is then automatically inserted into your invoice. However, the invoice number is **not permanently assigned** at this stage. This only happens **upon finalizing and locking** an invoice. So, if you don't finalize your invoice immediately after creation, the invoice remains in draft mode. In each new invoice you create, the same invoice number is initially inserted as in first invoice in draft mode. The final assignment of invoice numbers occurs afterward, exactly in the order in which you finalize your invoices. The invoice numbers are thus rechecked before locking and updated to the next available number. ## Example[​](#example "Direct link to Example") Three invoices are in draft mode, and the next available invoice number is *IN-24-1088*, assuming no further invoices are created and finalized in the meantime. | Draft invoice | Finalized | Final invoice number | | ---------------------------------- | --------- | -------------------- | | IN-24-1088 - Client A - $2,500.00 | Monday | IN-24-1088 | | IN-24-1088 - Client A - $30,000.00 | Tuesday | IN-24-1089 | | IN-24-1088 - Client B - $15,000.00 | Wednesday | IN-24-1090 | The same applies to offers and other entities in freispace (like projects) that are assigned with continuous numbering. --- # Marking an Invoice as Paid Here we show you how to mark an invoice as *paid*. Once you have finalized and locked an invoice, it will show up as unpaid. ![Unpaid invoice in list](/assets/images/invoice-unpaid-list-a146010d516803fd6fa2ee15ac8a3124.png) To mark it as paid, either click on the *money* button or open the menu and select **Register payment**. Or open the corresponding invoice and click on the button **Add payment**. A window with the summary will then open. ![Payment modal](/assets/images/payment-modal-2fae3b8d826ebad877289ef7ac70efa6.png) Enter the payment date, amount and method. The payment method indicated on the invoice will be preselected. If you enter an amount above or below the outstanding balance, you will need to input the reason for the difference. Finally, click **Save**. --- # Template styling using CSS We use Cascading Style Sheets (CSS) for designing the style of documents. Your CSS code will be inserted into a ` ``` warning Do **NOT** include any ``, ``, `` or ` ``` ## Sample template[​](#sample-template "Direct link to Sample template") Please get in touch with our support team to receive a sample template to base your work on. We can also create a custom template for you upon request. --- # Managing templates You'll find a list of templates created for your team in the **Team settings** on the **Billing** tab. info freispace uses HTML pages to render PDF files. Thus, templates are constructed using HTML code for layouts and CSS for styling. Templates can be edited, enabled, and disabled. ## Creating a new template[​](#creating-a-new-template "Direct link to Creating a new template") 1. In the list of templates, found in the **Team settings** on the **Billing** tab, click the **Create template** button. 2. Enter a name. The name will be shown to your users when creating new documents. 3. Enter what the template should be used for. Example possibilities are *Credit notes*, *Offers* and *Invoices*. One template may be used for all document types simultaneously. 4. Enter your template's HTML and CSS codes. 5. Click **Save**. ## Selecting a template[​](#selecting-a-template "Direct link to Selecting a template") You may select the corresponding template when finalizing (locking) a document. ![Template selection](data:image/png;base64,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) The last selected template for the document type will be saved to the team. ## Company logo / image[​](#company-logo--image "Direct link to Company logo / image") If you select to show a company logo, freispace will first check if the document's selected issuing company has a logo attached. If no image is found, it will use your team image as a fallback. If no team image is found, the company name will be shown instead. --- # Synchronizing freispace with calendars ## Use Cases[​](#use-cases "Direct link to Use Cases") Synchronizing bookings from freispace can be especially useful for staff, resources and rooms/suites. Clients opt to synchronise their editing facility's calendars with freispace's bookings. This way, a freelance editor may be able to access the bookings of the current workstation they are on, without the need of a freispace account. ## Options[​](#options "Direct link to Options") You may synchronize any of the following. | Page | Description | | --------- | ------------------------------------------------ | | Projects | All bookings belonging to a project | | Sites | All bookings belonging to a site | | Rooms | All bookings belonging to a suite/room | | Staff | All bookings belonging to a staff member | | Resources | All bookings belonging to a resource | | Groups | All bookings associated with the group's members | --- # Synchronizing Google Calendar with freispace To automatically synchronize any resource from freispace (e.g. a project's bookings or a staff member's bookings) you will need to copy the provided iCal-Link into Google Calendar. ### Use Cases[​](#use-cases "Direct link to Use Cases") Synchronizing bookings from freispace can be especially useful for staff, resources and rooms/suites. Clients opt to synchronise their editing facility's calendars with freispace's bookings. This way, a freelance editor may be able to access the bookings of the current workstation they are on, without the need of a dedicated freispace account. ### Adding a calendar to Google Calendar[​](#adding-a-calendar-to-google-calendar "Direct link to Adding a calendar to Google Calendar") 1. Navigate to [Google Calendar](https://calendar.google.com/). 2. On the left sidebar, click the **+** button next to *Other calendars*, then select **From URL**. ![Google Calendar](data:image/png;base64,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) 3. **Paste the freispace URL** into the field. Click **Add calendar**. It is normal for the operation to take a while. ![Google Calendar](/assets/images/google-calendar-02-04fe6e1d08a808faae3b2561ddc0b0fa.png) 4. A message will appear that the calendar is being fetched in the background. Navigate back to the calendars by clicking the arrow on the top left. ![Google Calendar](data:image/png;base64,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) 5. 🥳 **All done!** The newly subscribed calendar feed will show up in the *Other calendars* section. You will now see all freispace bookings within Google Calendar. ![Google Calendar](data:image/png;base64,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) --- # Synchronizing Microsoft Outlook with freispace To automatically synchronize any resource from freispace (e.g. a project's bookings or a staff member's bookings) you will need to copy the provided iCal-Link into Microsoft Outlook for Web. ### Use Cases[​](#use-cases "Direct link to Use Cases") Synchronizing bookings from freispace can be especially useful for staff, resources and rooms/suites. Clients opt to synchronise their editing facility's calendars with freispace's bookings. This way, a freelance editor may be able to access the bookings of the current workstation they are on, without the need of a dedicated freispace account. ### Adding a calendar to Outlook[​](#adding-a-calendar-to-outlook "Direct link to Adding a calendar to Outlook") 1. In Microsoft Outlook, switch to the **Calendar View**. ![Microsoft Outlook](data:image/png;base64,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) 2. Right-click **My Calendars**, select **Add Calendar** and then **From Internet...** ![Microsoft Outlook](/assets/images/outlook-02-71bd8d5cb7ea527e64307710a1eeb956.png) 3. **Paste the freispace URL** into the field and click **OK**. ![Microsoft Outlook](/assets/images/outlook-03-6c8b93d91367d8796275aa58331a57d3.png) 4. Outlook will ask you if you wish to subscribe to this calendar. Confirm with **Yes**. ![Microsoft Outlook](/assets/images/outlook-04-91b29838efb27f625c0af870e441f6f4.png) 5. 🥳 **All done!** You will now see all freispace bookings within Outlook. --- # Synchronizing Outlook for Web with freispace To automatically synchronize any resource from freispace (e.g. a project's bookings or a staff member's bookings) you will need to copy the provided iCal-Link into Microsoft Outlook for Web. ### Use Cases[​](#use-cases "Direct link to Use Cases") Synchronizing bookings from freispace can be especially useful for staff, resources and rooms/suites. Clients opt to synchronise their editing facility's calendars with freispace's bookings. This way, a freelance editor may be able to access the bookings of the current workstation they are on, without the need of a dedicated freispace account. ### Adding a calendar to Outlook for Web[​](#adding-a-calendar-to-outlook-for-web "Direct link to Adding a calendar to Outlook for Web") 1. Navigate to . 2. On the left sidebar, click the **Add calendar** button. ![Microsoft Outlook for Web](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMoAAAAxCAYAAACbMDZyAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAonSURBVHhe7Zx/TJvHGce/LQVMIaYIAhlxxIqDAKdhJCSp2RCMhSaMHxJLjUbLNMGqDP4YWSNFRJugjQpZlC4SUaN2sGqDVkvF1GhBS1yRlCgCocXySiFsQBDDCeUNGT8yigcLCaLbnd8DjDHwGkxCx/ORXl7fc+f37nl9z93z3J14Kiws7L8gCGJJnhZ3giCWgAyFIBRAhkIQCiBDIQgFkKEQhALIUAhCAWQoBKEAMhSCUAAZCkEogAyFIBTgBkMpR0LlLaTl5Yu0MtR5ZuRUGqERaYJYz7h81kt1oBa7dmwSKY4/giKD4DUqYWDooZAtj2ewFqEBDzHSLWFCyDgTHb9B+9XLIkUQ6wOXDYXPBGl6tUi5H6vpND6pqRYpglgfrNBQhtFcmA7JJuGulwFqFzu4u55DEI8DN8QoEga7eyENDIu0Mh4NWNDXbZnndhHEesUNhlKJnop0l+OKyas5uFFRhFGR/vojL2rkHC8X6eWRFzTM0OmE4HGSamR1u74IsyboapC2XtqyCBSj2DAg6mQ5YgOBgfo8NNWZhNwVZNdRc/sCak+XCNnSyO8SaH9nHzo7hfBxwQ0lS7s+YkJuKEfYi1jHbvcKZxS+WtXLXCd3XiNPzg2LMyAi0IrR+0DoCwZ4CDFBzOCGYN5dPLlgPuDwTRyMaEXDXzRISVWhpTwBPS4rRzPKivn/nVEUIvzghFSRXo94liIixhvWzkaMNLZhAEEI/65BZBKEzNoayteBhN3Y5mnFHTMbyUYvoI/NJAGxBgSI7IVEwzfTiINnWeDOg3cehB6vQlCwyHbG1uPQlZjx8rty+eyKZsSl54pMF/DMQMiP5tedfdaMmDiRz/HJRVhRM9Lsyrx80oiw55WegeD6XUTKGYfvR0aLfIHdIOj57SoknJorn1lS4/x98PbnNcy17d2bSCk6A99nRL4jSnWZ15YaJFfwsmboIkW+G9jghqJH2Hei4WnthGRzfUyQ/s4sxS8aYfadb5YkaI7VIjNdC/WjXrRfu4wbTW0YD0xCytEDcLrEEVODg7/MR4zGG2O3GnHD+Ck6vgC2ZRYjPtJbFFJAcCn2nTqD5AQtfL7sQpuR1X3NBMsIoHpOlGFojpQifscmPOozwczKmE0SHgVqEf/zKoQubv0CDXMHP2D6RcNvXK7DbOrF2LPs+0c/gC7GibFtrcH3XtmFpy1ct0b0DD2Er0aPlJ9VQSWK2PDMh+4Ea79eAy+rePZf2bsOz0DqKzp4iWL2uKzLpnOI/7EeIT4i7cZgc2MbSoABYey3526XVYimbe6XN7SJpUJiR+LreHG7N6ZYHFJXnI7Oj4+h76McNBUXoPlLbyeGYkCEQY8ADyva30tHw7kC9F0qQmdFAurea2X1KzWUJIQX5CLc7yGkugLUnfgBbl1idX+cx+KpfTBfE8UYX91rw/UyVldFHiysjKUmBfVXWYdUaaE7kCFKLULiObykV0MyHputw1LDnnXqMqQpNWIMpfM7P0OzV4f+9w+h6X2uWwFa3jgC812WEaxHlN1gozr0GmIC2aTN4pC6N+yeXXwaXezNOT6X46ou6r0vwqftPOqORqG20L1xnxsNJQOhh41s5LG72OjBCdA7yA+XO30xjxtVuh6hGIHlul0AOXoWlttsAAzfjVBPIbPBZp9ENvtAwme/LcGUkMo0Qqo1LdwTijMgirkgEy2/R2c7+4HtaS/B37rF5+XQ5SNqKzDVfQHN9Y1C6JyBD3MweHd+XVO3JNtA4OWzWRY4RehnNaH9ksOe2NAx9PSwe7AWIfPeCTDZ9pGDbo3o6+Bpb/htmZmBChG1NwgYb4PZMVifqkbn1S6H9ynjqi7qqVY0VpZh8oEQuBE3GspmPBehZb6s3bVFHjF9tzjII9j0a8t5khjwzWj2493vwJ0+IbIhQbrZyywlGtuZIc2RhJAQdhvqxaCzXdK+4QXL26rtGviy+2B3pSyYh4Tx0Zl5bGk8ophLxO4D7WWyYEk08NhRivC8i4j/BfPvK24i+4je9n11iFYu4hShn1pv2/ybiQlmrmTbpqgavhH8PsdI/wXxaY7p/8iHY9WbX7LdodmFID/Wyb9odb7BPDgG533bNV2sPSZMis/uxo2GwkaGYj7l2V11rMMxpDoHeXHerKvzxLDtnbA7iy+yHDtGlvwjhO7MtXNzN8GLj6YTw4p/DC8fPhxYMc7iiNXgq+Zdw4qxe3J6UVgcEHHCiOyiXOyLC4faYwyjlla0NPcqaLPQb6iNxRos/nF6XYLk2IZph5nSGWpv28D4wDokp5WwAl2s/1y7peUNG6ME7I5mo/3iG6eD46zQ1l2ICJPLz+Ll72KMyDoJn1ZWwfRX/K8afmwCXArVD19DHJvFeYxRW/QtXClPx41zzL//fBiPRJmlmOZ/PCcxwuMfp1cZrKs4c+Sl8heflme1uribjWkoYu8E901ormA/gJPregOfDYMQnjxz/qgL/+KdJFizwE+3kbwD3HOxx9rPD4p6IyTS2b6MAaERC8N/Z0zcuWvz4UMiC2XBIgRt5ZbUizuOMUaQP2YWghbHhBE+4Acw/ZZdHXORTsnmcqm2RTuNTVW7t9vcKXtWp4v72ZiGYts7YXF716eLuyR86ZX1TvULB8WeynlYOpgPxWKXnbkOh/f40ucBHug70CQ/I2BPPjQO+wqeqfnYwV0/JTRdQS+b4XzjfoKYWIf9jAX4w89+FuRt+76Tti3gMvq5fiwu2PXT8gXlPWJrEJUsEi5TyWZpdgvUY09qkiyaIbgce/YsNlWuVBf3s7aGMsyP0jM3xrUT+GuObe+E+fz9ny8MRGeZqoZkYXe+p7JXFk3+8XdoZ0NjgP44st4yQpd9hgWaRqS8fRzR97oWHumZKkOrsRdTKi0S3jQj8XAVwjKrEFtiRlaWP/q7lUZqlWj70ITRaTV0hReRVlKLqMwzCMuuQRx71r79cql7n7G62CwY+3oz4l5l+a/WIvEka9uUsnN0k39i+t1n/fF5A7LebkAsfwarI/7ETRwq1CPIhW2f+UgYOH8B0qQ3NFlVs+2POtyAtDcNUFm6FsSsq9XF3aytobQU2dyYnhaRXifwvRPMbjIuBvtxW/iypTe0CWJPhS9lvlWGG6yDewRqEbM/A3GxmzHZUo0/v9Mhl3Fgqr4Axj+YMPBAjdC4JMSnJ2HbM3dhPp2DW674++15uPKrarTdtsLnG7GITc9A/H49tvkMY1AE2NPXClB/qRejTwUhIpHlx4czt4e1rfYfcvyxHFy/E8dw3SRhwkuDKP4MVkfos/+Gxcj0rhflVsJQCZp/XY12yQpfjdz+nZEqDH5ShoaGMVFojlXr4mbomD1BKMBlQ1n4zyXcC/1zCWI94rKhEMRGZMPuoxCEK5ChEIQCyFAIQgFkKAShADIUglAAGQpBKIAMhSAUQIZCEAogQyEIBZChEIQCyFAIQgFkKAShADIUglAAGQpBLAvwP3mTXk0IzTilAAAAAElFTkSuQmCC) 3. In the new modal window, select **Subscribe from web** in the left sidebar. ![Microsoft Outlook for Web](data:image/png;base64,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) 4. **Paste the freispace URL** into the field. Additional options will slide out. Specify a *name* for the calendar and select its *colour*, then click **Import**. ![Microsoft Outlook for Web](/assets/images/outlook-web-03-46d36662002ec201822802290ef0bdcf.png) 5. 🥳 **All done!** You will now see all freispace bookings within Outlook for Web. --- # Understanding calendar update intervals ## Overview: Reported synch issues[​](#overview-reported-synch-issues "Direct link to Overview: Reported synch issues") Some users approach us regarding shared calendars not updating correctly or frequently enough. In this article, we try to explain the background of these issues. ## Update mechanism[​](#update-mechanism "Direct link to Update mechanism") Within freispace, you can export shared iCal links. The links are then subscribed to by other services, meaning these *pull* the iCal link regularly to update the calendar entries. This means that Google and Microsoft retrieve the current calendar data themselves. freispace has no way of *pushing* changes to these services. Within the iCal, we specify an update value of once per hours. This value was intentionally chosen to ensure that the load on our system remains within normal limits. However, most services disregard the set limit, including Google and Microsoft. ## Update frequencies for different services[​](#update-frequencies-for-different-services "Direct link to Update frequencies for different services") ### Google Calendar[​](#google-calendar "Direct link to Google Calendar") * Typically updates iCal feeds **every 8 to 12 hours**. * This update frequency is independent of settings such as `REFRESH-INTERVAL` or `X-PUBLISHED-TTL` that we use within our iCals. * Currently, Google does not offer a way to accelerate this frequency. ### Outlook (Web Version)[​](#outlook-web-version "Direct link to Outlook (Web Version)") * Updates iCal feeds approximately **every 3 hours**. * Changes occasionally **can take longer than 24 hours** to become visible. * For more information, refer to [Outlook Support](https://support.microsoft.com/en-us/office/import-or-subscribe-to-a-calendar-in-outlook-com-or-outlook-on-the-web-cff1429c-5af6-41ec-a5b4-74f2c278e98c). ### Outlook (Local/Desktop Versions)[​](#outlook-localdesktop-versions "Direct link to Outlook (Local/Desktop Versions)") * There are no documented fixed intervals for updates. * Based on our experience, the behavior is similar to that of the web version. ## Limitations[​](#limitations "Direct link to Limitations") There are thousands of reports online from users expressing concerns regarding update intervals with Microsoft and Google. We understand that the update intervals can be frustrating, however **freispace does not have direct control over these retrieval intervals**. --- ## [📄️Numbering](https://docs.freispace.com/docs/billing/invoices/invoice-numbers.md) [Here we show you how invoice numbers are assigned in draft mode and how continuous numbering is ensured.](https://docs.freispace.com/docs/billing/invoices/invoice-numbers.md) --- ## [📄️Sending e-mails](https://docs.freispace.com/docs/billing/e-mails/sending-practices.md) [freispace can automatically send billing documents such as invoices by e-mail. This also works with both regular and recurring invoices.](https://docs.freispace.com/docs/billing/e-mails/sending-practices.md) --- ## [📄️EN 16931 Invoices](https://docs.freispace.com/docs/billing/factur-x/en-16931-invoices.md) [freispace creates EN 16931-compatible invoices by default, which will be a legal requirement in EU member states by 2025, with a slow rollout.](https://docs.freispace.com/docs/billing/factur-x/en-16931-invoices.md) --- ## [📄️Reverse Charge](https://docs.freispace.com/docs/billing/general/reverse-charge.md) [Reverse Charge in Invoices: We sell a service to a business located in Italy, which is a member state of the EU.](https://docs.freispace.com/docs/billing/general/reverse-charge.md) --- ## [📄️Microsoft Outlook](https://docs.freispace.com/docs/calendars/guides/microsoft-outlook.md) [To automatically synchronize any resource from freispace (e.g. a project's bookings or a staff member's bookings) you will need to copy the provided iCal-Link…](https://docs.freispace.com/docs/calendars/guides/microsoft-outlook.md) --- ## [📄️Microsoft Entra](https://docs.freispace.com/docs/sso/guides/microsoft-entra.md) [Sign in to freispace using Microsoft Entra. A new application has now been created and its settings opened.](https://docs.freispace.com/docs/sso/guides/microsoft-entra.md) --- ## [📄️Creating templates](https://docs.freispace.com/docs/billing/templates/managing-templates.md) [You'll find a list of templates created for your team in the Team settings on the Billing tab. Templates can be edited, enabled, and disabled.](https://docs.freispace.com/docs/billing/templates/managing-templates.md) --- # Cost Reports freispace offers a way of tracking internal costs using project cost reports and overall cost reports. In addition, these can be exported either as a **formatted Excel** or as a **flat, customisable file** (CSV or Excel). The latter allows you to select the fields that should be included and is perfect for further use in accounting or for creating custom reports. --- # Notes & FAQ on Cost Reports ## Reports[​](#reports "Direct link to Reports") ### Timeframe: last 30 days[​](#timeframe-last-30-days "Direct link to Timeframe: last 30 days") When selecting a timeframe of "Last 30 days", the actual timeframe might be between 28 and 31 days. The current day of last month will be selected, resulting in a few days difference depending on the current month. ## Exports[​](#exports "Direct link to Exports") ### Difference between `booking_end_date` and `booking_end_iso`[​](#difference-between-booking_end_date-and-booking_end_iso "Direct link to difference-between-booking_end_date-and-booking_end_iso") For *full-day bookings only*, a difference between `booking_end_date` and `booking_end_iso` like below is **normal and to be expected**. | booking\_end\_date | booking\_end\_iso | | ------------------ | ------------------- | | 2024-07-13 | 2024-07-14T00:00:00 | The reason being a difference in calculation of timeframes between how humans perceive and talk about time and how calendars work. While we *talk* about a time frame of two days when we say from **March 1st** until **March 2nd**, a calendar registers the same time frame as `2024-03-01T00:00:00` (start of day, March 1st) until `2024-03-03T00:00:00` (start of day, March 3rd). --- # Dashboards Dashboards let you build a custom overview of your freispace data. Each dashboard is made up of one or more **widgets**, and every widget is powered by a query written in [Kusto Query Language (KQL)](https://learn.microsoft.com/en-us/kusto/query/?view=microsoft-fabric). For a walkthrough of the dashboard editor itself (creating a dashboard, adding widgets, arranging your layout), see the [user guide on Dashboards](https://docs.freispace.com/user-guides/analytics/dashboards.md). This section documents the technical side: the query language, the tables you can query, and how query results turn into widgets. ## How widgets work[​](#how-widgets-work "Direct link to How widgets work") 1. You write a KQL query against one of the [queryable entities](https://docs.freispace.com/docs/dashboards/kql-reference.md#queryable-entities). 2. freispace runs the query against your team's data. 3. The result is rendered using the **visualization type** you choose for the widget: * Table * Number / KPI * Bar chart * Horizontal bar chart * Line chart * Donut chart The same query can usually be rendered as different visualization types — for example, a query that returns a single aggregated value works well as a Number/KPI widget, while a query grouped by a category (e.g. by client or by month) is a good fit for a bar, line or donut chart. ## Learn KQL[​](#learn-kql "Direct link to Learn KQL") * [KQL reference for freispace](https://docs.freispace.com/docs/dashboards/kql-reference.md) — available tables, supported syntax, and example queries. * [Microsoft's official KQL documentation](https://learn.microsoft.com/en-us/kusto/query/?view=microsoft-fabric) — the full language reference, since freispace supports the complete Kusto Query Language. --- # KQL Reference for freispace Dashboards Dashboard widgets use Kusto Query Language (KQL)-style queries over a curated freispace data catalogue. The catalogue exposes business entities, their documented fields and relations, and applies the current user's permissions automatically. Query the entity names and field names shown on this page; the underlying database table names are not queryable. info Already familiar with KQL? You can skip ahead to the [queryable entities](#queryable-entities) and start querying right away. ## Query basics[​](#query-basics "Direct link to Query basics") A query starts from an entity and passes the result through a pipeline. The most common pipeline operations are `where`, `project`, `extend`, `summarize`, `sort`, `take` and `join`. ``` bookings | where is_published == true | summarize booking_count = count() by project_id | sort by booking_count desc ``` Some of the operators you will use most often when building widgets: | Operator | Purpose | | ----------- | -------------------------------------------------------------------------------- | | `where` | Filter rows | | `project` | Select or compute specific columns | | `summarize` | Aggregate data (e.g. `sum`, `count`, `avg`) | | `sort by` | Sort results | | `top` | Limit to the top N rows | | `join` | Combine rows from two tables | | `bin` | Group values (e.g. dates) into fixed-size buckets, useful for time-series charts | Use the [Microsoft KQL documentation](https://learn.microsoft.com/en-us/kusto/query/?view=microsoft-fabric) for general operator and function syntax. The freispace catalogue and relation model described below determine which entities and fields are available to a dashboard query. ### Relations and joins[​](#relations-and-joins "Direct link to Relations and joins") Use a documented relation with `join` instead of joining database tables by hand. For example, this query counts bookings per project and returns the project name: ``` projects | join bookings on id == project_id | summarize booking_count = count() by id, name | sort by booking_count desc ``` Relation joins respect visibility on both sides. A left join keeps the parent row when no visible related rows exist; an inner join keeps only rows with a visible match. Link entities such as `booking_staff_links` are useful when the assignment itself has data, especially its own `starts_at` and `ends_at` window. ### Time, money and identifiers[​](#time-money-and-identifiers "Direct link to Time, money and identifiers") * Datetimes are stored in UTC. Date grouping and date-part functions use the calling user's timezone. Dates such as `issued_on`, `start` and `end` have no time or timezone. * Booking and assignment durations are calculated from `ends_at - starts_at`; there is no separate duration field. Assignment-level utilization must use the relevant link entity. * Invoice and offer amounts are integer cents. `1250` means `12.50` in the document currency. Sum first and convert only for display; use `todouble` before division. * Never add monetary values across currencies. Group by or filter on `currency` or `cost_currency` first. * UUIDs are stable identifiers, but names and numbers are not guaranteed to be unique. Group by IDs as well as display names where duplicate names are possible. * `NULL` values are meaningful. For example, a `NULL` project ID means that a booking is not attached to a project, and a `NULL` `locked_at` means that an invoice or offer is still a draft. ### Visibility and permissions[​](#visibility-and-permissions "Direct link to Visibility and permissions") Every query is tenant-scoped and filtered by the caller's permissions. Soft-deleted records and fixed entity filters are applied automatically. Counts can therefore differ from totals shown to another user or elsewhere in the application. In particular, unpublished bookings, restricted projects, clients, staff, resources and suites may be absent. The `staffs.number` field is additionally permission-gated. Without the relevant internal-staff permission, it is unavailable; with own-record access, other people's values may be returned as `NULL`. It cannot be filtered or sorted. ## Queryable entities[​](#queryable-entities "Direct link to Queryable entities") Only entities marked as queryable in the schema can be used as a query root. Related entities can also be reached through documented relations. ### Core entities[​](#core-entities "Direct link to Core entities") #### `bookings`[​](#bookings "Direct link to bookings") Bookings reserve crew, suites or resources for a time range. Use `starts_at < window_end and ends_at > window_start` for overlap logic; filtering only `starts_at` finds bookings that start in the window, not every booking that overlaps it. | Field | Type | Description | | ------------------------------------- | ------------------ | --------------------------------------------------------------------------------------------------- | | `id` | UUID | Stable booking identifier. | | `title` | string | Booking title; not unique. | | `byline` | string, nullable | Secondary text under the title. | | `description` | string, nullable | Free-text description. | | `starts_at`, `ends_at` | datetime | Booking interval, stored in UTC. | | `is_all_day` | boolean | Whether the booking is all day. For all-day bookings, compare calendar days rather than time parts. | | `is_optional` | boolean | Whether the booking is tentative and does not block availability. | | `is_published` | boolean | Whether the booking is published. Unpublished rows may already be hidden by permissions. | | `workload_percent` | integer | Whole percentage, such as `50` for 50%. | | `project_id`, `order_id`, `status_id` | UUID, nullable | Related project, order and team-defined booking status IDs. | | `created_at` | datetime, nullable | Creation timestamp in UTC. | Relations: `project`, `order`, `status`, `staffs`, `resources`, `suites`, `staff_links`, `resource_links`, `suite_links`, `offers` and `invoices`. Named filters: `overlapping` accepts `from`, `to` and an optional `basis` (`effective` or `booking`); `overlapping_booking` accepts `from` and `to` and checks only the booking interval. Both require `from` to be earlier than `to` and use a half-open interval `[from, to)`. #### `projects`[​](#projects "Direct link to projects") Projects group bookings and orders. Project visibility restrictions apply to query results and to related bookings. | Field | Type | Description | | -------------- | ---------------- | ------------------------------------------------------ | | `id` | UUID | Stable project identifier. | | `name` | string | Project name; not unique. | | `number` | string, nullable | Project number, treated as text. | | `start`, `end` | date, nullable | Planned calendar dates without timezone. | | `parent_id` | UUID, nullable | Parent project; only one hierarchy level is queryable. | | `status` | enum/integer | `1` = active, `0` = inactive/archived. | | `color` | string, nullable | Display color as a hex code. | Relations: `bookings`, `client_links` and `parent`. #### `clients`[​](#clients "Direct link to clients") Clients can be restricted to individual users. A user without access to a client may see only clients they created themselves. | Field | Type | Description | | --------- | ---------------- | ------------------------------------------- | | `id` | UUID | Stable client identifier. | | `name` | string | Company or person name; not unique. | | `number` | string, nullable | Client number, treated as text. | | `status` | boolean | `true` = active, `false` = deactivated. | | `starred` | boolean | Whether the client is marked as a favorite. | Relation: `project_links`. #### `staffs`[​](#staffs "Direct link to staffs") Staff members are available as people records. Staff cost, timezone and contract data are not exposed in this catalogue. | Field | Type | Description | | -------------- | ---------------- | -------------------------------------------------------------------------------------------------- | | `id` | UUID | Stable staff identifier. | | `display_name` | string | Calendar/list name; not guaranteed unique. | | `title` | string, nullable | Role or job title. | | `internal` | boolean | `true` = internal staff, `false` = freelancer or external. | | `status` | enum/integer | `1` = active, `0` = inactive. | | `number` | string, gated | Internal staff number; only available with the required permission and not filterable or sortable. | Relation: `booking_links` to `booking_staff_links`. Use that link entity for assignment windows and utilization. #### `resources`[​](#resources "Direct link to resources") Resources include equipment and other bookable items. A resource cost is a rate, not a spend total. | Field | Type | Description | | --------------- | ---------------- | -------------------------------------- | | `id` | UUID | Stable resource identifier. | | `name` | string | Resource name; not unique. | | `number` | string, nullable | Inventory number, treated as text. | | `status` | enum/integer | `1` = active, `0` = inactive/retired. | | `cost` | number, nullable | Internal cost rate per `cost_unit`. | | `cost_unit` | string, nullable | Unit such as `hour`, `day` or `piece`. | | `cost_currency` | string | ISO 4217 currency code. | Relation: `booking_links` to `booking_resource_links`. #### `suites`[​](#suites "Direct link to suites") Suites are rooms or studios that can be booked. Like resource cost, suite cost is a rate rather than a total. | Field | Type | Description | | --------------- | ---------------- | --------------------------------------------------------------------------- | | `id` | UUID | Stable suite identifier. | | `name` | string | Suite name; not unique. | | `room_number` | string, nullable | Room number as text; use `isempty()` to cover both `NULL` and empty values. | | `status` | enum/integer | `1` = active, `0` = inactive/out of service. | | `cost` | number, nullable | Internal cost rate per `cost_unit`. | | `cost_unit` | string, nullable | Unit such as `hour` or `day`. | | `cost_currency` | string | ISO 4217 currency code. | Relation: `booking_links` to `booking_suite_links`. ### Financial and commercial entities[​](#financial-and-commercial-entities "Direct link to Financial and commercial entities") #### `invoices`[​](#invoices "Direct link to invoices") Invoices expose integer-cent amounts. Recurring invoice templates are excluded automatically. Revenue means invoiced net amount by `issued_on`; payment receipts and payment-level cash flow are not exposed. | Field | Type | Description | | --------------------------------------------------- | ------------------ | ----------------------------------------------------------------------------------------------------------------- | | `id` | UUID | Stable invoice identifier. | | `number` | string, nullable | Invoice number; `NULL` while the invoice is a draft. | | `subject` | string | Invoice subject. | | `client_id`, `offer_id`, `order_id`, `issuer_id` | UUID, nullable | Related record IDs. | | `issued_on`, `due_on`, `payment_due_on`, `paid_on` | date | Invoice, service/due, payment deadline and payment dates. `due_on`, `payment_due_on` and `paid_on` may be `NULL`. | | `currency` | string | ISO 4217 currency code. | | `total_net_cents`, `total_gross_cents` | integer | Net and gross totals in cents. | | `outstanding_cents` | integer | Remaining balance in cents. `0` does not necessarily mean paid. | | `doc_type` | enum | `Invoice`, `Cancellation`, `Reminder`, `Partial` or `Final`. Recurring invoices are excluded. | | `locked_at`, `sent_at`, `canceled_at`, `created_at` | datetime, nullable | Finalization, sending, cancellation and creation timestamps in UTC. | Calculated fields: `is_canceled`, `is_locked`, `is_paid`, `outstanding_percentage`, `overdue` and `status`. `status` is one of `canceled`, `draft`, `paid`, `partially-paid`, `overdue` or `open`. For paid business documents, also exclude cancellation documents; cancellation bookkeeping can set `paid_on`. Relations: `client`, `offer`, `order`, `issuer`, `bookings` and `booking_links`. Named filter: `status` accepts `draft`, `locked`, `open`, `overdue`, `paid`, `partially-paid` or `canceled`. The named filter's `locked` category means `locked_at` is set; it is not the same as the displayed `status` value. #### `offers`[​](#offers "Direct link to offers") Offers are quotes sent to clients. Amounts are integer cents and must be grouped by currency before they are summed. | Field | Type | Description | | ------------------------------------------------------ | ------------------ | --------------------------------------------------------------------------------- | | `id` | UUID | Stable offer identifier. | | `number` | string, nullable | Offer number; `NULL` while the offer is a draft. | | `subject` | string | Offer subject. | | `client_id`, `order_id`, `issuer_id` | UUID, nullable | Related record IDs. | | `issued_on`, `valid_until` | date | Offer date and last valid date. | | `currency` | string | ISO 4217 currency code. | | `total_net_cents`, `total_gross_cents` | integer | Net and gross totals in cents. | | `outcome` | enum, nullable | `accepted` or `declined`; `NULL` can mean open or draft depending on `locked_at`. | | `outcome_set_at`, `locked_at`, `sent_at`, `created_at` | datetime, nullable | Outcome, finalization, sending and creation timestamps in UTC. | | `order_number` | string, nullable | Client purchase-order number, not the same as `order_id`. | Calculated fields: `is_locked`, `is_sent` and `status`. `status` is one of `draft`, `accepted`, `declined` or `open`. Relations: `client`, `order`, `issuer`, `invoices`, `bookings` and `booking_links`. Named filter `status` accepts `draft`, `locked`, `open`, `accepted` or `declined`. #### `orders`[​](#orders "Direct link to orders") Orders group offers, invoices and bookings. | Field | Type | Description | | -------- | ---------------- | --------------------------------------- | | `id` | UUID | Stable order identifier. | | `number` | string | Order number, treated as text. | | `name` | string, nullable | Order name. | | `status` | enum/integer | `1` = active, `0` = inactive/completed. | Calculated fields: `is_open` and `status_label` (`active` or `inactive`). Relations: `offers`, `invoices` and `bookings`. ### Link entities[​](#link-entities "Direct link to Link entities") Link entities represent an individual relationship and are queryable because the relationship itself has useful data. Their rows are visible only when both ends are visible. #### `booking_staff_links`[​](#booking_staff_links "Direct link to booking_staff_links") Fields: `id` (integer), `booking_id` (UUID), `staff_id` (UUID), `activity_id` (UUID, nullable), `starts_at` and `ends_at` (datetime, nullable), and `position` (integer, nullable). The assignment window is on this entity, not on `staffs`. If assignment times are `NULL`, use the related booking's times before measuring duration. Use `dcount(booking_id)` when counting bookings per staff member; `count()` counts assignments. Relations: `booking`, `staff` and `activity`. #### `booking_resource_links`[​](#booking_resource_links "Direct link to booking_resource_links") Fields: `id` (integer), `booking_id` (UUID), `resource_id` (UUID), `activity_id` (UUID, nullable), `starts_at` and `ends_at` (datetime, nullable), and `position` (integer, nullable). The assignment window is on this entity, not on `resources`; combine it with the related resource's `cost` and `cost_unit` when analyzing rates. Relations: `booking`, `resource` and `activity`. #### `booking_suite_links`[​](#booking_suite_links "Direct link to booking_suite_links") Fields: `id` (integer), `booking_id` (UUID), `suite_id` (UUID), `activity_id` (UUID, nullable), `starts_at` and `ends_at` (datetime, nullable), and `position` (integer, nullable). The assignment window is on this entity, not on `suites`. Relations: `booking`, `suite` and `activity`. #### `client_project_links`[​](#client_project_links "Direct link to client_project_links") Fields: `id` (integer), `client_id` (UUID) and `project_id` (UUID). Use this entity to bridge clients and projects, especially when rolling project bookings up to clients. Relations: `client` and `project`. #### `invoice_booking_links`[​](#invoice_booking_links "Direct link to invoice_booking_links") Fields: `id` (UUID), `invoice_id` (UUID) and `booking_id` (UUID). Use it as a bridge between invoices and bookings. An invoice linked to several bookings appears several times, so do not sum invoice totals at link grain; aggregate invoices at invoice grain first. Relations: `invoice` and `booking`. #### `offer_booking_links`[​](#offer_booking_links "Direct link to offer_booking_links") Fields: `id` (UUID), `offer_id` (UUID) and `booking_id` (UUID). Use it as a bridge between offers and bookings. Relations: `offer` and `booking`. ## Examples[​](#examples "Direct link to Examples") The following examples use the entity and field names from the schema. Choose the visualization after the query returns the desired result. ### Bookings per project[​](#bookings-per-project "Direct link to Bookings per project") ``` projects | join bookings on id == project_id | summarize booking_count = count() by id, name | sort by booking_count desc ``` ### Projects with no bookings[​](#projects-with-no-bookings "Direct link to Projects with no bookings") ``` projects | join kind=leftouter bookings on id == project_id | summarize booking_count = count() by id, name, number | where booking_count == 0 ``` ### Monthly finalized net revenue per currency[​](#monthly-finalized-net-revenue-per-currency "Direct link to Monthly finalized net revenue per currency") ``` invoices | where isnotnull(locked_at) | summarize revenue_net_cents = sum(total_net_cents) by month = bin(issued_on, 1mo), currency | sort by month asc ``` ### Overdue invoices[​](#overdue-invoices "Direct link to Overdue invoices") ``` invoices | where overdue == true | project id, number, status, payment_due_on, currency, outstanding_cents, outstanding_percentage ``` ### Offers per outcome[​](#offers-per-outcome "Direct link to Offers per outcome") ``` | summarize offer_count = count() by outcome ``` ### Staff assignment count[​](#staff-assignment-count "Direct link to Staff assignment count") ``` booking_staff_links | summarize assignment_count = count(), booking_count = dcount(booking_id) by staff_id | sort by booking_count desc ``` ### Resource rates by unit and currency[​](#resource-rates-by-unit-and-currency "Direct link to Resource rates by unit and currency") ``` resources | where status == 1 | summarize resource_count = count(), rate_total = sum(cost), rate_average = avg(cost) by cost_unit, cost_currency ``` ### Cross-entity calculations[​](#cross-entity-calculations "Direct link to Cross-entity calculations") For multi-step calculations, use a named intermediate query (`let`) and join its result back to the entity you want to display. For example, calculate resource rates per booking first, then roll them up by project: ``` let resource_rates = booking_resource_links | join kind=leftouter resources on resource_id == id | summarize booking_rate = sum(cost) by booking_id; bookings | join kind=leftouter resource_rates on id == booking_id | summarize project_rate = sum(booking_rate) by project_id | join kind=leftouter projects on project_id == id | project project_id, name, project_rate ``` The exact query editor representation may expose these operations as a structured pipeline. The entity names, field names, relation names and semantics remain those documented here. ## Widget-friendly results[​](#widget-friendly-results "Direct link to Widget-friendly results") | Visualization | Recommended result | | ---------------- | ------------------------------------------------------------------------------- | | **Table** | Detail rows or several columns, such as bookings with titles and dates. | | **Number / KPI** | One row with one aggregated value, such as `count()` or `sum(total_net_cents)`. | | **Bar chart** | A category and a measure, such as `status` and `count()`. | | **Line chart** | A date bucket and a measure, such as `bin(issued_on, 1mo)` and revenue. | | **Donut chart** | A small set of categories and their counts or totals. | ## From query result to widget[​](#from-query-result-to-widget "Direct link to From query result to widget") Once your query returns a result, choose a visualization type for the widget: | Visualization | Best suited for | | ---------------- | -------------------------------------------------------------------------- | | **Table** | Detailed, row-level results | | **Number / KPI** | A single aggregated value, e.g. `count()` or `sum()` | | **Bar chart** | Comparing values across categories | | **Line chart** | Trends over time, typically combined with `summarize ... by bin(Date, 1d)` | | **Donut chart** | Showing proportions between a small number of categories | ## Example queries[​](#example-queries "Direct link to Example queries") **Count of bookings per client in the last 30 days, as a bar chart:** ``` Bookings | where StartDate >= ago(30d) | summarize BookingCount = count() by Client | order by BookingCount desc ``` **Outstanding invoice total, as a Number/KPI widget:** ``` Invoices | where Status == "open" | summarize TotalOpen = sum(Amount) ``` **Accepted quotes per month, as a line chart:** ``` Offers | where Status == "accepted" | summarize AcceptedCount = count() by bin(CreatedDate, 30d) | order by CreatedDate asc ``` --- # Departments You may mirror your company's structure and hierarchy using departments and roles within freispace. Departments and roles may have approval workflows for time tracking attached to them. E.g. the post department could have a different approval process than production. ![Company Hierarchy with Departments in freispace](/assets/images/hierarchy-departments-08b8f624a12457682e7dd56ddd8b494b.png) ## Set up departments[​](#set-up-departments "Direct link to Set up departments") To set up departments: 1. Navigate to Staff > [Departments](https://app.freispace.com/staffs/departments) 2. Click **Add department** on the top right 3. **Name** the department * You may make the new department a child / sub-department of another department * Setting a department as *Default* will assign any new staff with enabled time tracking a member of that department (if the staff does not have any assigned departments yet) The hierarchy view will automatically be created as you create sub-departments. ## Defining roles[​](#defining-roles "Direct link to Defining roles") On any department: 1. Click **Add role** 2. **Name** the new role Role name may repeat within various departments, but not within a single department. E.g. you may set up a *Manager* role within each department, but a single department may only have one role with that name. note Multiple staff members can be assigned to each role. ## Assigning staff to departments and roles[​](#assigning-staff-to-departments-and-roles "Direct link to Assigning staff to departments and roles") To assign staff members to any department or role, click the appropriate **Manage staff** button to select and deselect assigned members. Staff may be members of multiple roles and department. note It is not possible for a staff to be assigned to both a department's role AND the same department. Trying to do so will unassign the staff member from either role or department. ### Notice: Staff and User Accounts[​](#notice-staff-and-user-accounts "Direct link to Notice: Staff and User Accounts") Staff may not always be linked to a user account. With no user account, these staff members can not receive notifications nor start or reply to approval requests. Staff that are referenced in departments and roles but have no associated account are highlighted with a yellow exclamation sign. ![Staff User Accounts](data:image/png;base64,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) ## Shown information / tags[​](#shown-information--tags "Direct link to Shown information / tags") Departments may show a number of different tags. ![Department information](data:image/png;base64,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) * `Default` highlights the default department that new staff members are automatically added to. There can only be one default department. * The `green tag with number` indicates the number of configured [approval workflows](https://docs.freispace.com/docs/time-tracking/approval-workflows.md) that are set up for a department or role. Hovering it shows more information. * A `yellow play tag` informs you that the department has [workflows](https://docs.freispace.com/docs/time-tracking/approval-workflows.md) that are currently in process (still requiring approval before completing). Changing workflow settings will only affect newly launched requests. --- # MCP Server - Integrate freispace with your own LLM Our freispace MCP server gives you the freedom to use any company-deployed AI model to query data within freispace. For example, if your company uses Google Gemini, you can use the MCP server to integrate it with freispace and ask Gemini questions relating to your freispace data. ## What is an MCP Server?[​](#what-is-an-mcp-server "Direct link to What is an MCP Server?") An MCP server is like a special API endpoint tailored towards the tool calling feature a lot of LLMs have. It allows your AI to interact with data in freispace. ## freispace MCP Server[​](#freispace-mcp-server "Direct link to freispace MCP Server") Our MCP is `@freispace/mcp-server-analytics` * NPM link: * Github link: ## Example integrations[​](#example-integrations "Direct link to Example integrations") Use the freispace MCP server to integrate with any LLM. For example: * [Google Gemini](https://geminicli.com/extensions/?name=freispacemcp-server-analytics) * Microsoft Copilot * ChatGPT * Anthropic Claude * Any self-hosted LLM that supports tool calling. For step-by-step setup instructions for each of these clients, see [Adding freispace to your LLM](https://docs.freispace.com/docs/mcp-server/add-freispace.md). Admins can control which team members have access to the MCP server and manage their secrets — see [Managing MCP Server Access](https://docs.freispace.com/docs/mcp-server/managing-access.md). --- # Add the freispace MCP server to your LLM This guide shows you how to connect the freispace MCP server to the most common AI assistants, so you can ask your LLM questions about your freispace data. ## Prerequisites[​](#prerequisites "Direct link to Prerequisites") Before you start, make sure you have: 1. **Node.js** installed (version 18 or later). The MCP server is started via `npx`, which ships with Node.js. 2. Your personal **freispace MCP secret**. Every team member has their own secret, which a team admin can provide from the team settings ([Managing MCP Server Access](https://docs.freispace.com/docs/mcp-server/managing-access.md)). Your secret will look similar to `ai-xxxx`. caution Treat your secret like a password. Anyone with it can query freispace data on your behalf. ## Configuration snippet[​](#configuration-snippet "Direct link to Configuration snippet") Most MCP-capable clients use the same JSON structure to register a server. This is the entry for freispace: ``` "freispace-analytics": { "command": "npx", "args": ["-y", "@freispace/mcp-server-analytics"], "env": { "API_KEY": "ai-xxxx" } } ``` Replace `ai-xxxx` with your own API key. The sections below show where this snippet goes for each client. ## Client setup[​](#client-setup "Direct link to Client setup") * Claude Desktop * Claude Code * Google Gemini (CLI) * Microsoft / GitHub Copilot * ChatGPT * Other LLMs 1. Open Claude Desktop and go to **Settings → Developer**. 2. Click **Edit Config**. This opens the `claude_desktop_config.json` file: * **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json` * **Windows:** `%APPDATA%\Claude\claude_desktop_config.json` 3. Add the freispace server under `mcpServers`: ``` { "mcpServers": { "freispace-analytics": { "command": "npx", "args": ["-y", "@freispace/mcp-server-analytics"], "env": { "API_KEY": "ai-xxxx" } } } } ``` 4. Restart Claude Desktop. You should now see *freispace-analytics* listed under the tools icon in the chat input. Try asking Claude a question about your freispace data. Run the following command in your terminal: ``` claude mcp add freispace-analytics --env API_KEY=ai-xxxx -- npx -y @freispace/mcp-server-analytics ``` Alternatively, add the server to a `.mcp.json` file in your project root to share it with your team: ``` { "mcpServers": { "freispace-analytics": { "command": "npx", "args": ["-y", "@freispace/mcp-server-analytics"], "env": { "API_KEY": "ai-xxxx" } } } } ``` Verify the connection with `claude mcp list`. Run the following command in your terminal: ``` gemini extensions install https://github.com/freispace/mcp-server-analytics ``` Alternatively, the Gemini CLI reads MCP servers from its settings file: * **Per user:** `~/.gemini/settings.json` * **Per project:** `.gemini/settings.json` in your project root Add the freispace server under `mcpServers`: ``` { "mcpServers": { "freispace-analytics": { "command": "npx", "args": ["-y", "@freispace/mcp-server-analytics"], "env": { "API_KEY": "ai-xxxx" } } } } ``` Restart the Gemini CLI and run `/mcp` to confirm that *freispace-analytics* is connected and its tools are available. GitHub Copilot in **VS Code** supports MCP servers in agent mode. 1. Create a file named `.vscode/mcp.json` in your workspace (or run the **MCP: Add Server** command from the Command Palette). 2. Add the freispace server. Note that VS Code uses a `servers` key instead of `mcpServers`: ``` { "servers": { "freispace-analytics": { "type": "stdio", "command": "npx", "args": ["-y", "@freispace/mcp-server-analytics"], "env": { "API_KEY": "ai-xxxx" } } } } ``` 3. Open the Copilot Chat view, switch to **Agent** mode, and click the tools icon to confirm the freispace tools are listed. The same configuration also works for Copilot in other JetBrains and Visual Studio setups that support MCP — check your IDE's Copilot settings for where the MCP configuration file lives. ChatGPT connects to MCP servers through **connectors**, which require a *remotely hosted* MCP server — it cannot launch a local `npx` process like the other clients. To use freispace with ChatGPT: 1. Expose the freispace MCP server over HTTP using an MCP gateway (for example [supergateway](https://www.npmjs.com/package/supergateway) or a similar stdio-to-HTTP proxy) hosted on infrastructure your company controls: ``` npx -y supergateway --stdio "npx -y @freispace/mcp-server-analytics" --port 8000 ``` Make sure the `API_KEY` environment variable is set in the environment where the gateway runs, and that the endpoint is only reachable by authorized users. 2. In ChatGPT, go to **Settings → Connectors**, enable **Developer mode** (requires an eligible plan), and add a new connector pointing to your gateway's URL. 3. Enable the connector in a chat to let ChatGPT query your freispace data. Any self-hosted LLM stack that supports the [Model Context Protocol](https://modelcontextprotocol.io) and tool calling can use the freispace MCP server. In most clients you register it with the standard configuration: ``` { "mcpServers": { "freispace-analytics": { "command": "npx", "args": ["-y", "@freispace/mcp-server-analytics"], "env": { "API_KEY": "ai-xxxx" } } } } ``` Consult your client's documentation for the exact location of its MCP configuration file. ## Troubleshooting[​](#troubleshooting "Direct link to Troubleshooting") * **Server does not start:** Check that Node.js 18+ is installed and `npx` is available on your `PATH`. Some desktop clients do not inherit your shell's `PATH` — using the absolute path to `npx` can help. * **Authentication errors:** Verify that the `API_KEY` value matches your current secret. If an admin has regenerated your secret or disabled your access, the old value will stop working — see [Managing MCP Server Access](https://docs.freispace.com/docs/mcp-server/managing-access.md). * **Tools do not appear:** Most clients only load MCP servers on startup. Fully restart the application after editing the configuration. --- # Manage MCP server access for your team Admins control who on the team can use the freispace MCP server. Each team member gets an **individual secret** that they use as the `API_KEY` when [connecting their AI tool to freispace](https://docs.freispace.com/docs/mcp-server/add-freispace.md). Because every user has their own secret, the MCP server only ever returns data that the user is allowed to see based on their role and permissions — and access can be revoked per user at any time. ## Where to find it[​](#where-to-find-it "Direct link to Where to find it") 1. Click on your team name on the top right and select **Team settings**. 2. Navigate to the **Integrations** tab. 3. Select **MCP server** from the menu on the left. You will see the **MCP server access** table listing your team members, their roles, their access status, and their (masked) secret. ## Enable or disable access for a user[​](#enable-or-disable-access-for-a-user "Direct link to Enable or disable access for a user") Use the enable/disable action on a user's row to control whether they can use the MCP server. When access is disabled, the user's secret stops working immediately. Any AI tool configured with it will no longer be able to query freispace data. ## Reveal a user's secret[​](#reveal-a-users-secret "Direct link to Reveal a user's secret") Click the **eye icon** on a user's row to reveal their secret. Secrets are masked by default (e.g. `ai-74…bc5e`). Share the secret with the user through a secure channel so they can set it as the `API_KEY` in their AI client configuration. ## Regenerate a secret[​](#regenerate-a-secret "Direct link to Regenerate a secret") Click the **regenerate icon** on a user's row to issue a new secret. caution Regenerating a secret immediately invalidates the old one. The user must update the `API_KEY` in their AI client configuration, otherwise their integration will stop working. Regenerate a secret whenever you suspect it has been exposed, for example if it was committed to a code repository or shared over an insecure channel. ## Export the access list[​](#export-the-access-list "Direct link to Export the access list") Use the **Export** button above the table to download a list of users and their secrets. This is useful for rolling out the MCP server to your team, for example when distributing secrets through your company's password manager. caution The exported file contains active secrets in plain text. Store it securely and delete it after distributing the secrets. ## Next steps[​](#next-steps "Direct link to Next steps") Once a user has their secret, they can follow the [Adding freispace to your LLM](https://docs.freispace.com/docs/mcp-server/add-freispace.md) guide to connect their AI tool. --- # Roles & permissions Team access is controlled by **roles**. Manage them from the team menu > **Team Members**. ![Team members and roles](/assets/images/members-5c2408c8bdf7cff47bf019ec125c252f.png) ## Team members[​](#team-members "Direct link to Team members") Use **Invite new members** to add people, and give each member a **role**. The list shows everyone's role, permissions and join date. ## Roles[​](#roles "Direct link to Roles") Under **Team roles**, click **Add role** to create a role and choose the **permissions** it grants — per module, e.g. bookings, projects, clients or analytics. Assign the role to members to give them that access. note **Superadmin** has full access. Otherwise, give people the narrowest role that still lets them do their job. tip Roles pair with [departments](https://docs.freispace.com/docs/departments.md), which model your org structure and drive [approval workflows](https://docs.freispace.com/docs/time-tracking/approval-workflows.md). --- # Hallway screens ## Use Cases[​](#use-cases "Direct link to Use Cases") Generate public links for use on screens in hallways, in order to guide visitors to the correct suites. ### Customisation[​](#customisation "Direct link to Customisation") Screens can be adjusted in various ways to suit your needs. * Create views with only the currently active bookings, all bookings of the day, or a weekly view * Generate links for touchscreen devices or static screens with no user interaction * Automatically refresh screens in a pre-defined interval * If many rooms are displayed, automatic scrolling of the view can be set up * Display messages & information * Customise colours, template and logo ## How it works[​](#how-it-works "Direct link to How it works") After setting up a screen in your team's settings, you will find a public shareable link. Copy and paste that link into any browser on your device. The screen will work immediately. warning The link will be publicly accessible on the internet. Make sure not to share it with other parties if your bookings contain sensitive information. ## Detailed customisation[​](#detailed-customisation "Direct link to Detailed customisation") Read the following guides for further information on setup and customisation. 1. [Setup options](https://docs.freispace.com/docs/screens/options.md). 2. [Override CSS styling](https://docs.freispace.com/docs/screens/styling.md). --- # Configuration options of screens ## Options[​](#options "Direct link to Options") | Setting | Description | | ------------------- | ---------------------------------------------------------------------------------------------------------- | | Name | The internal name for you to recognise the screen, e.g. `1st Floor` | | Title | The title to show on the screen. Will be used for `` tag and as a header when no image/logo is set. | | Time frame | The time frame to display | | Resources | The suites, staff and/or resources to display | | Automatic scrolling | Activate to make the screen automatically scroll the viewport. | | Refresh rate | How often the screen should refresh the displayed content, e.g. every 5 minutes. | | Status | Mark screen as active or disable it (making it inaccessible) | ## Show custom logo / icon[​](#show-custom-logo--icon "Direct link to Show custom logo / icon") When editing a screen, scroll to the bottom and open the "Detailed display settings". Upload an image or logo. It will be displayed on the top of the screen. ## Adjust colours[​](#adjust-colours "Direct link to Adjust colours") When editing a screen, scroll to the bottom and open the "Detailed display settings". You may set the background colour, text colour as well as the background colour of the message box. | Color | Default value | | ------------------ | ----------------- | | Background | `#333333` (gray) | | Text | `#ffffff` (white) | | Message background | `#ff0000` (red) | tip We recommend using a bright text colour on a dark background. This will reduce power consumption of your screen while enhancing legibility. --- # Override CSS styling of screens In the screen settings, you may paste CSS styles to override the default stylesheets. ## CSS Reset[​](#css-reset "Direct link to CSS Reset") We ensure consistent browser styling by using the following CSS reset: `normalize.css` v8 - MIT License - [github.com/necolas/normalize.css](https://github.com/necolas/normalize.css) ## Default stylesheet[​](#default-stylesheet "Direct link to Default stylesheet") * Day / Current View * Week View ``` /* General styles */ html { color-scheme: dark; /* dark browser & scrollbar mode */ } body { font-family: system-ui, sans-serif; font-weight: normal; background: #333333; /* Defined in screen settings */ color: #ffffff; /* Defined in screen settings */ font-size: 1.5em; line-height: 1.4; } img, svg { vertical-align: middle; } /* Header: Logo or Text */ header { display: flex; align-items: stretch; position: sticky; top: 0; background: #333333; /* Defined in screen settings */ padding: 1em 1.5em; } .header-date { width: 25%; font-size: 0.75em; opacity: 0.6; } .header-logo { width: 50%; font-weight: bold; margin: 0; text-align: center; white-space: nowrap; flex-grow: 1; } .header-logo h1 { margin: 0; } .header-corner { width: 25%; text-align: right; font-size: 14px; opacity: 0.6; line-height: 2; } .header-logo-image { background: transparent no-repeat center center url('url/to/image'); /* automatically links to uploaded image */ background-size: contain; width: 100%; height: 70px; } /* Wrapper */ main { margin: 1.5em; } /* Column grid layout */ .columns { columns: 1; column-gap: 4em; column-rule: solid 8px rgba(255, 255, 255, 0.1); } @media only screen and (orientation : landscape) { .columns { columns: 2; } } .row { display: flex; align-items: flex-start; break-inside: avoid; page-break-after: always; gap: 1em; margin: 0 0 1em; } /* Resources */ .suite, .resource, .staff { width: 280px; height: 60px; display: flex; align-items: center; gap: 0.5em; flex-shrink: 0; flex-grow: 0; box-sizing: border-box; } .suite, .resource { border-left: .3em solid transparent; padding: 0 0 0 0.5em; } .staff-image, .resource-image { width: 2em; height: 2em; background-size: cover; background-position: center; flex-shrink: 0; } .resource-image { border-radius: .2em; } .staff-image { border-radius: 50%; } .suite-text, .staff-text, .resource-text { min-width: 0; } .suite-text-name, .staff-text-name, .resource-text-name { font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .suite-text-room-number, .staff-text-byline, .resource-text-byline { font-size: 0.8em; font-style: italic; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* Bookings */ .bookings { width: 100%; } .booking + .booking { border-top: 4px solid rgba(255, 255, 255, 0.1); padding-top: .3em; margin-top: .5em; } .booking-time { display: inline-block; font-size: 0.8em; white-space: nowrap; padding: .05em .4em; border-radius: .3em; background: rgba(255, 255, 255, 0.1); } /* Projects */ .project { display: flex; align-items: center; } .project-color { width: .3em; height: 1em; margin-right: 0.5em; flex-shrink: 0; } .project-name { font-style: italic; font-size: 0.8em; } /* Message box */ footer { position: sticky; bottom: 0; background: #ff0000; /* Defined in screen settings */ z-index: 10; } .message { background: #ff0000; /* Defined in screen settings */ padding: 0.7em 1.5em; font-size: 0.95em; line-height: 1; } footer p { margin: 0; } /* Error information */ .text-error, .text-offline, .warning-icon, .warning-offline { display: none; } .reload-failed .text-error, .connection-lost .text-offline { display: inline; margin: 0 0 0 .5em; font-weight: bold; background: #ff0000; color: #ffffff; border-radius: .5em; padding: .1em .5em; } .reload-failed .warning-icon, .connection-lost .warning-offline { display: inline; color: #ff0000; margin: 0 0 0 .2em; } ``` ``` /* General styles */ html { color-scheme: dark; /* dark browser & scrollbar mode */ } body { font-family: system-ui, sans-serif; font-weight: normal; background: #333333; /* Defined in screen settings */ color: #ffffff; /* Defined in screen settings */ font-size: 1.5em; line-height: 1.4; } img, svg { vertical-align: middle; } /* Header: Logo or Text */ header { display: flex; align-items: stretch; position: sticky; top: 0; background: #333333; /* Defined in screen settings */ padding: 1em 1.5em; box-sizing: border-box; height: 120px; z-index: 10; } .header-date { width: 25%; font-size: 0.75em; opacity: 0.6; } .header-logo { width: 50%; font-weight: bold; margin: 0; text-align: center; white-space: nowrap; flex-grow: 1; } .header-logo h1 { margin: 0; } .header-corner { width: 25%; text-align: right; font-size: 14px; opacity: 0.6; line-height: 2; } .header-logo-image { background: transparent no-repeat center center url('url/to/image'); /* automatically links to uploaded image */ background-size: contain; width: 100%; height: 70px; } /* Wrapper */ main { margin: 0 1.5em 1.5em; } /* Table layout */ table { width: 100%; border-spacing: 0; } td { padding: .2em; vertical-align: top; } tr:nth-child(2n + 2) { background: rgba(255, 255, 255, 0.1); } .row-time-header { position: sticky; top: 120px; background: #333333; /* Defined in screen settings */ z-index: 10; } .cell-time-header { line-height: 1; text-align: center; width: 12%; padding: .3em .2em; } .cell-time-header-weekend { background: rgba(255, 255, 255, 0.05); } .cell-time-header-today { background: rgba(0, 125, 200, 0.5); } .time-header-weekday { font-weight: bold; } .time-header-date { font-size: 0.8em; opacity: 0.6; } .cell-resource { height: 3em; border-left: 0.3em solid transparent; padding: .2em .4em .2em .6em; vertical-align: middle; } .cell-day { padding: .2em .4em; } .cell-weekend { background: rgba(255, 255, 255, 0.05); } .cell-holiday { background: rgba(255, 0, 0, 0.4); } /* Resources */ .suite, .resource, .staff { break-inside: avoid; width: 100%; page-break-after: always; display: flex; align-items: center; gap: 0.5em; } .staff-image, .resource-image { width: 2em; height: 2em; background-size: cover; background-position: center; flex-shrink: 0; } .resource-image { border-radius: .2em; } .staff-image { border-radius: 50%; } .suite-text { max-width: 300px; } .staff-text, .resource-text { max-width: 250px; } .suite-text-name, .staff-text-name, .resource-text-name { font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .suite-text-room-number, .staff-text-byline, .resource-text-byline { font-size: 0.8em; font-style: italic; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* Bookings */ .booking + .booking { border-top: 4px solid rgba(255, 255, 255, 0.1); padding-top: .2em; margin-top: .5em; } .booking-time { display: inline-block; font-size: 0.8em; white-space: nowrap; padding: .05em .4em; border-radius: .3em; background: rgba(255, 255, 255, 0.1); } /* Projects */ .project { display: flex; align-items: center; } .project-color { width: .3em; height: 1em; margin-right: 0.5em; flex-shrink: 0; } .project-name { font-style: italic; font-size: 0.8em; opacity: 0.6; } /* Message box */ footer { position: sticky; bottom: 0; background: #ff0000; /* Defined in screen settings */ z-index: 10; } .message { background: #ff0000; /* Defined in screen settings */ padding: 0.7em 1.5em; font-size: 0.95em; line-height: 1; } footer p { margin: 0; } /* Error information */ .text-error, .text-offline, .warning-icon, .warning-offline { display: none; } .reload-failed .text-error, .connection-lost .text-offline { display: inline; margin: 0 0 0 .5em; font-weight: bold; background: #ff0000; color: #ffffff; border-radius: .5em; padding: .1em .5em; } .reload-failed .warning-icon, .connection-lost .warning-offline { display: inline; color: #ff0000; margin: 0 0 0 .2em; } ``` ## Your styles[​](#your-styles "Direct link to Your styles") The above default styling, incl. the normalize.css reset styles, are always loaded in the document body. Your custom styles will be inserted after the above stylesheet, allowing you to override any of the defaults. The use of `!important` should not be necessary. Adjustment of the overall font size is easily done by setting a different body font size, e.g. ``` body { font-size: 1.3em; } ``` ## Default DOM / available selectors & classes[​](#default-dom--available-selectors--classes "Direct link to Default DOM / available selectors & classes") The structure of the generated screen view is as follows. * Day / Current View * Week View ``` <html> <body> <header> <div class="header-date"></div> <div class="header-logo"> <!-- if a logo / image has been set: --> <div class="header-logo-image"></div> <!-- otherwise: --> <h1><!-- Title --></h1> </div> <div class="header-corner"></div> </header> <main> <div class="columns"> <!-- for each suite / staff / resource, a row is added --> <div class="row"> <div class="resource"> <div class="resource-name"> <div class="resource-color" style="background-color: #123456;"></div> <span><!-- resource name --></span> </div> <div class="resource-room-number"></div> </div> <div class="resource-bookings"> <!-- each booking as a separate div --> <div class="booking"> <div class="booking-name"></div> <div class="project"> <div class="project-color" style="background-color: #123456;"></div> <div class="project-name"></div> </div> </div> </div> </div> </div> </main> <!-- if a message has been set: --> <footer> <div class="message"></div> </footer> </body> </html> ``` ``` <html> <body> <header> <div class="header-date"></div> <div class="header-logo"> <!-- if a logo / image has been set: --> <div class="header-logo-image"></div> <!-- otherwise: --> <h1><!-- Title --></h1> </div> <div class="header-corner"></div> </header> <main> <table> <tr class="row-time-header"> <td><!-- empty --></td> <td class="cell-time-header cell-time-header-today"> <!-- additionally possible class: cell-time-header-weekend --> <span class="time-header-weekday"></span><br> <span class="time-header-date"></span> </td> <td class="cell-time-header"> <!-- additionally possible class: cell-time-header-weekend --> <span class="time-header-weekday"></span><br> <span class="time-header-date"></span> </td> <td class="cell-time-header"> <!-- additionally possible class: cell-time-header-weekend --> <span class="time-header-weekday"></span><br> <span class="time-header-date"></span> </td> <td class="cell-time-header"> <!-- additionally possible class: cell-time-header-weekend --> <span class="time-header-weekday"></span><br> <span class="time-header-date"></span> </td> <td class="cell-time-header"> <!-- additionally possible class: cell-time-header-weekend --> <span class="time-header-weekday"></span><br> <span class="time-header-date"></span> </td> <td class="cell-time-header"> <!-- additionally possible class: cell-time-header-weekend --> <span class="time-header-weekday"></span><br> <span class="time-header-date"></span> </td> <td class="cell-time-header"> <!-- additionally possible class: cell-time-header-weekend --> <span class="time-header-weekday"></span><br> <span class="time-header-date"></span> </td> </tr> <!-- for each selected suite --> <tr class="row-resource"> <td class="cell-resource" style="border-color: #123456"> <div class="suite"> <div class="suite-text"> <div class="suite-text-name"></div> <div class="suite-text-room-number"></div> </div> </div> </td> <td class="cell-day cell-today"> <!-- additionally possible classes: cell-weekend & cell-holiday --> <!-- for each booking: --> <div class="booking"> <div class="booking-time"></div> <div class="booking-name"></div> <div class="project"> <div class="project-color" style="background-color: #123456;"></div> <div class="project-name"></div> </div> </div> </td> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> </tr> <!-- for each selected staff --> <tr class="row-resource"> <td class="cell-resource"> <div class="staff"> <div class="staff-image" style="background-image: url('/url/to/image');"></div> <div class="staff-text"> <div class="staff-text-name"></div> <div class="staff-text-byline"></div> </div> </div> </td> <td class="cell-day cell-today"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> </tr> <!-- for each selected resource --> <tr class="row-resource"> <td class="cell-resource" style="border-color: #123456;"> <div class="resource"> <div class="resource-image" style="background-image: url('/url/to/image');"></div> <div class="resource-text"> <div class="resource-text-name"></div> <div class="resource-text-byline"></div> </div> </div> </td> <td class="cell-day cell-today"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> <td class="cell-day"></td> <!-- additionally possible classes: cell-weekend & cell-holiday --> </tr> </table> </main> <!-- if a message has been set: --> <footer> <div class="message"></div> </footer> </body> </html> ``` --- # Single-Sign-On (SSO) with SAML2 Flagship tier only ![Flagship tag](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKkAAAAkCAYAAADy+xopAAAFRGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpDb2xvclNwYWNlPSIxIgogICBleGlmOlBpeGVsWERpbWVuc2lvbj0iMTY5IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMzYiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMzYiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iMTY5IgogICB0aWZmOlJlc29sdXRpb25Vbml0PSIyIgogICB0aWZmOlhSZXNvbHV0aW9uPSI5Ni8xIgogICB0aWZmOllSZXNvbHV0aW9uPSI5Ni8xIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1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) This feature is only available to teams on the **Flagship** tier. freispace offers Flagship users the ability to set up Single-Sign-On (SSO) via SAML2. Once configured, any user of the company can login to freispace via their Identity Provider (IdP), without the need to register manually. As a company, you will no longer need to invite or manage users manually. ## Getting started[​](#getting-started "Direct link to Getting started") freispace supports multiple Identity Providers (tenants) per team. Some of the possible Identity Providers (IdP) are, amongst others: * Microsoft Entra - [Set-up Guide](https://docs.freispace.com/docs/sso/guides/microsoft-entra.md) * Google Workspace - [Set-up Guide](https://docs.freispace.com/docs/sso/guides/google-workspace.md) * Okta - [Set-up Guide](https://docs.freispace.com/docs/sso/guides/okta.md) Please note that *any* Identity Provider (IdP) with SAML2-support can be configured. tip If you require help setting up SSO for your company, feel free to contact us. ## Setting up Single-Sign-On (SSO)[​](#setting-up-single-sign-on-sso "Direct link to Setting up Single-Sign-On (SSO)") Head over to you **Team settings** (by opening your team menu and selecting the corresponding menu item) and switch to the last tab, **Administration**. ## Team Login URL[​](#team-login-url "Direct link to Team Login URL") The team login URL is the link to your team's login page. For users to login via SSO, they will require to always use that URL. tip Note down the URL and share it with all team members. SSO only works via your individual login URL. You may change the login URL to your liking. The old URL will, however, no longer be accessible. It is *not* recommended to change the URL once users are already using SSO. ## Configuring tenants[​](#configuring-tenants "Direct link to Configuring tenants") If you haven't set up any tenants yet, you will automatically see the form for adding your first Identity Provider. Otherwise, the configured Identity Providers will be displayed. In this case, click **Add tenant** at the bottom of the section. Depending on your Identity Provider, follow one of our integration guides: * Microsoft Entra - [Set-up Guide](https://docs.freispace.com/docs/sso/guides/microsoft-entra.md) * Google Workspace - [Set-up Guide](https://docs.freispace.com/docs/sso/guides/google-workspace.md) * Okta - [Set-up Guide](https://docs.freispace.com/docs/sso/guides/okta.md) You will need to fill in the following details. #### Connection name `required`[​](#connection-name-required "Direct link to connection-name-required") This can be any name you want to give this tenant. Ideally, use something descriptive like *Google*, *Microsoft* or *Okta*. Users may see this name when logging in and should recognise it. #### IdP Issuer ID `required`[​](#idp-issuer-id-required "Direct link to idp-issuer-id-required") The Identity Provider Issuer ID is usually a URL. (e.g. `https://sts.windows.net/xxx-yyy-zzz/` or `https://accounts.google.com/o/saml2?xxyyzz`) #### Login URL (SSO endpoint) `required`[​](#login-url-sso-endpoint-required "Direct link to login-url-sso-endpoint-required") This is the URL that freispace will redirect to for users to login. #### Logout URL (SLO endpoint) `optional`[​](#logout-url-slo-endpoint--optional "Direct link to logout-url-slo-endpoint--optional") Usually, you will want to redirect users to an endpoint to sign them out of all SSO-enabled applications. If you IdP provides an endpoint for this, enter it here. #### IdP X.509 Certificate `required`[​](#idp-x509-certificate-required "Direct link to idp-x509-certificate-required") Copy and paste your Identity Provider's X.509 Certificate in this field. The certificate usually has a format like this: ``` -----BEGIN CERTIFICATE----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDnhGkqd3M2VzeC [...] csEu4K06kcw4oMna9cnwyqGTDK6KFCg= -----END CERTIFICATE----- ``` Paste the entire certificate, including the start and end lines. ### Retrieving your users' names[​](#retrieving-your-users-names "Direct link to Retrieving your users' names") In order to import your staff's names to freispace, we recommend setting up the correct namespaces. Depending on your Identity Provider, you may either receive a namespace definition, represented as an URL, or may need to enter one. #### Namespace definition for given names `optional`[​](#namespace-definition-for-given-names-optional "Direct link to namespace-definition-for-given-names-optional") Enter you Identity Provider's namespace for first names. If you need to define one, we recommend using: ``` https://schemas.xmlsoap.org/ws/2005/05/identity/claims ``` #### Namespace definition for surnames `optional`[​](#namespace-definition-for-surnames-optional "Direct link to namespace-definition-for-surnames-optional") Enter you Identity Provider's namespace for last names. If you need to define one, we recommend using: ``` https://schemas.xmlsoap.org/ws/2005/05/identity/claims ``` --- # Setting up SSO with authentik Sign in to freispace using authentik. ### Get started in freispace[​](#get-started-in-freispace "Direct link to Get started in freispace") 1. In freispace, start by clicking **Add tenant** and entering a name for this connection, e.g. *Authentik*. ### Create application in authentik[​](#create-application-in-authentik "Direct link to Create application in authentik") 1. Head to Applications > **Application**. 2. Click **Create with Provider**. 3. Enter `freispace` as **Name**. The Slug is set to `freispace` automatically. 4. Open **UI Settings** and set the **Launch URL** to the **Team login URL** from freispace (e.g. *<https://app.freispace.com/login/your-company>*). ![Create SAML application in authentik](/assets/images/authentik-sso-freispace-01-5f9cc60c4830a833833247e99c36b183.png) 5. Click **Next** and select **SAML**. 6. Click **Next** and select an **Authorization flow**, e.g. *default-provider-authorization-explicit-consent* 7. Under *Protocol settings*, ensure to set: 1. **ACS URL** by copying the value from freispace of the field **Reply URL / Assertion Consumer Service URL (ACS)** (in the format of *<https://api.app.freispace.com/api/v1/saml2/xxx/acs>*). 2. **Issuer** may remain *authentik*. 3. **Service Provider Binding** must be set to **Post**. ![Set up authentik SSO in freispace](/assets/images/authentik-sso-freispace-02-2850a18a766ef4bfa4431154a8319109.png) 8. Open **Advanced protocol settings** and select a **Signing certificate** (e.g. *authentik Self-signed Certificate*) ![Use authentik SAML SSO with freispace](/assets/images/authentik-sso-freispace-03-ea9d1d2b7a6cd603dfef7a9e4e72253d.png) 9. Set any additional settings you may want, click **Next** to step through configuration and finally confirm with **Submit** at the end. 10. Navigate to Applications > **Providers** and select the appropriate one, likely *Provider for freispace*. ### Setting up freispace[​](#setting-up-freispace "Direct link to Setting up freispace") 1. Copy the provided data from Authentik into freispace. | Authentik name | freispace name | Example data | | ------------------ | ------------------------- | -------------------------------------------------------------------------------- | | Issuer | IdP Issuer ID | `authentik` | | SSO URL (Redirect) | Login URL (SSO endpoint) | `https://your.authentik.domain/application/saml/freispace/sso/binding/redirect/` | | SLO URL (Redirect) | Logout URL (SLO endpoint) | `https://your.authentik.domain/application/saml/freispace/slo/binding/redirect/` | 2. In Authentik, click **Download** unter *Download signing certificate*. 3. Open the downloaded file in any text editor, copy the entire contents (including `-----BEGIN CERTIFICATE-----` and `-----END CERTIFICATE-----`) and paste it into **IdP X.509 Certificate** in freispace. ![Authentik SSO settings for freispace](/assets/images/authentik-sso-freispace-45c40e91f13968e5e8375d1efe72e942.jpg) 4. In freispace, click **Save settings**. Ensure to **Activate** the new tenant. ### Done! 🎉[​](#done- "Direct link to Done! 🎉") freispace should now appear as an app for your users. --- # Setting up SSO with Google Workspace Sign in to freispace using Google. ### Create SAML app[​](#create-saml-app "Direct link to Create SAML app") 1. Open the [Google Workspace Admin Console](https://admin.google.com/) at [admin.google.com](https://admin.google.com/). 2. On the left menu, click **Show more** and navigate to **Apps** > **Web and mobile apps**. 3. Click **Add app** and select **Add custom SAML app**. ![Google Workspace screenshot](/assets/images/google-workspace-admin-sso-02-13e704438a3b7c85a1c66036f184eec6.png) 4. Enter the following data. | Field | Content | | -------- | ----------------------------------------------------------------------------------------------------------------------------------- | | App name | `freispace` | | App icon | Upload this file: [freispace-icon.png](https://docs.freispace.com/assets/files/freispace-icon-114714e39b85f02a4fee28fb61c57be2.png) | 5. Click **CONTINUE**. ### Get Google's settings[​](#get-googles-settings "Direct link to Get Google's settings") 1. On freispace, start by clicking **Add tenant** and entering a name for this connection, i.e. *Google*. 2. Then, copy the provided data from Google into freispace. | freispace name | Google name | Example data | | ------------------------ | ----------- | ------------------------------------------------------------------ | | Login URL (SSO endpoint) | SSO URL | `https://accounts.google.com/o/saml2/idp?idpid=xxxxx` | | IdP Issuer ID | Entity ID | `https://accounts.google.com/o/saml2?idpid=xxxxxx` | | IdP X.509 Certificate | Certificate | `-----BEGIN CERTIFICATE----- xxxxxxxxxx -----END CERTIFICATE-----` | ![Google Workspace screenshot](/assets/images/google-workspace-admin-sso-03-36ff947eb756620c2178686a205fb56b.png) 3. Additionally, enter the following data. | freispace field name | Data | | ------------------------------------ | ----------------------------------------------------------------- | | Namespace definition for given names | `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname` | | Namespace definition for surnames | `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname` | 4. Click **CONTINUE** on the Google setup page. 5. Click **Save settings** on freispace. ### Set settings on Google[​](#set-settings-on-google "Direct link to Set settings on Google") After saving the settings on freispace, you will now see two fields: Reply URL and Identifier. Google needs to know about these settings. 1. Copy over the settings from freispace into Google. | freispace | Google | Example data | | ---------------------- | --------- | --------------------------------------------------------- | | Reply URL | ACS URL | `https://api.app.freispace.com/api/v1/saml2/xxx/acs` | | Identifier (Entity ID) | Entity ID | `https://api.app.freispace.com/api/v1/saml2/xxx/metadata` | | Team Login URL | Start URL | `https://app.freispace.com/login/xxx` | 2. Ensure that *Signed response* is **not** checked. 3. Additionally, set **Name ID** to `Basic Information > Primary email`. (Leave *Name ID format* as *UNSPECIFIED*.) ![Google Workspace screenshot](/assets/images/google-workspace-admin-sso-04-fab85360162804a9f0ba3d93e096d272.png) 4. Click **CONTINUE** on the Google setup page. ### Attribute mapping[​](#attribute-mapping "Direct link to Attribute mapping") In order for freispace to automatically import your users' names, you will need to map attributes as described. 1. Click **ADD MAPPING** twice and add the following mappings. | Google Directory attributes | App attributes | | --------------------------- | ----------------------------------------------------------------- | | First name | `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname` | | Last name | `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname` | ![Google Workspace screenshot](/assets/images/google-workspace-admin-sso-05-2391092f25eaf2a65b980aef8f76880a.png) 2. Click **FINISH**. ### Activating the SAML app[​](#activating-the-saml-app "Direct link to Activating the SAML app") 1. On freispace, click **Activate**. 2. On Google Workspace, click the tile **User access**. ![Google Workspace screenshot](/assets/images/google-workspace-admin-sso-06-4020c60fad596bfa943c9f319d95e28b.png) 3. Set **Service Status** to **ON for everyone** and confirm with **SAVE**. ### Done! 🎉[​](#done- "Direct link to Done! 🎉") freispace should now appear as an app in the App drawer. ![Google Workspace screenshot](/assets/images/google-workspace-admin-sso-07-5dee10c924dfa08223f4f5b0bb8176e5.png) --- # Setting up SSO with Microsoft Entra Sign in to freispace using Microsoft Entra. ### Create Application[​](#create-application "Direct link to Create Application") 1. Open the [Microsoft Entra admin center](https://entra.microsoft.com/) at [entra.microsoft.com](https://entra.microsoft.com/) 2. In the left menu, navigate to **Applications** > **Enterprise applications**. (You might need to click *Show more*) ![Microsoft Entra admin center screenshot](/assets/images/microsoft-entra-sso-01-dff740ae7a7f3bd474457091ffb685bf.png) 3. Click **New application** 4. Click **Create your own application**. 5. Enter the following data. | Field | Content | | ------------------------------------------------- | ----------------------------------------------------------------------------- | | What's the name of your app? | `freispace` | | What are you looking to do with your application? | `Integrate any other application you don't find in the gallery (Non-gallery)` | 6. Click **Create**. A new application has now been created and its settings opened. 7. On the left sidebar, navigate to **Single sign-on**. 8. Select **SAML** as the single sign-on method. ![Microsoft Entra admin center screenshot](/assets/images/microsoft-entra-sso-02-a6d90911c44237cf2fae5c4785532873.png) 9. Head over to freispace, and start by clicking **Add tenant** and entering a name for this connection, i.e. *Microsoft*. freispace will generate and display an *Reply URL (ACS)* and *Identifier (Entity ID)* right away. ### Configuring Microsoft Entra[​](#configuring-microsoft-entra "Direct link to Configuring Microsoft Entra") 1. On Microsoft Entra, click the small **Edit** button on the top right. ![Microsoft Entra admin center screenshot](/assets/images/microsoft-entra-sso-03-a5e9f2e7e37caf756ae743488ea6f5fe.png) 2. Copy over the settings from freispace into Microsoft Entra. | freispace | Microsoft Entra | Example data | | ---------------------- | ------------------------------------------ | --------------------------------------------------------- | | Identifier (Entity ID) | Identifier (Entity ID) | `https://api.app.freispace.com/api/v1/saml2/xxx/metadata` | | Reply URL | Reply URL (Assertion Consumer Service URL) | `https://api.app.freispace.com/api/v1/saml2/xxx/acs` | | Team Login URL | Sign on URL | `https://app.freispace.com/login/xxx` | ![Microsoft Entra admin center screenshot](/assets/images/microsoft-entra-sso-04-7b0d8a1c25d172e842af45d1842e3733.png) 3. Click the small **Save** button on the top left and the close the menu. ### Configuring freispace[​](#configuring-freispace "Direct link to Configuring freispace") 1. On Microsoft Entra, scroll down to *SAML Certificates* and click **Download** to get the *Certificate (Base64)*. ![Microsoft Entra admin center screenshot](/assets/images/microsoft-entra-sso-05-11f10548eb7c49387d324dd14fa94969.png) 2. Open the downloaded `freispace.cer` file in a text editor. (On windows, right-click the file, select *Open with...*, select *Notepad* and confirm with *Just once*.) 3. Select the file's entire content and copy it. 4. On freispace, paste the certificate's file content into the field **IdP X.509 Certificate**. 5. On Microsoft Entra, scroll down further and copy the settings from *Set up freispace* into freispace. | freispace | Microsoft Entra | Example data | | ------------------------- | -------------------------- | --------------------------------------------- | | IdP Issuer ID | Microsoft Entra Identifier | `https://sts.windows.net/xxx/` | | Login URL (SSO endpoint) | Login URL | `https://login.microsoftonline.com/xxx/saml2` | | Logout URL (SLO endpoint) | Logout URL | `https://login.microsoftonline.com/xxx/saml2` | ![Microsoft Entra admin center screenshot](/assets/images/microsoft-entra-sso-06-fdf170a4c51adbf5fb1c153e8faf49f2.png) 6. Additionally, enter the following data. | freispace field name | Data | | ------------------------------------ | ----------------------------------------------------------------- | | Namespace definition for given names | `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname` | | Namespace definition for surnames | `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname` | 7. On freispace, click **Save settings**. 8. Now, click **Activate**. ### Final steps[​](#final-steps "Direct link to Final steps") 1. On Microsoft Entra, navigate to **Properties**. 2. For the **Logo**, download and then upload this file: [freispace-icon.png](https://docs.freispace.com/assets/files/freispace-icon-114714e39b85f02a4fee28fb61c57be2.png) ![Microsoft Entra admin center screenshot](/assets/images/microsoft-entra-sso-07-040e9bb78cccaa72bee2cfb4733b2eb5.png) 3. Click the **Save** button up top. 4. Nearly there! Navigate to **Users and groups**. 5. Finally, add any users or user groups that should have access to freispace. ![Microsoft Entra admin center screenshot](/assets/images/microsoft-entra-sso-08-37a5f08ae49fd1953f6a9c8900035025.png) ### Done! 🎉[​](#done- "Direct link to Done! 🎉") Users may now login to freispace via Microsoft Entra. --- # Setting up SSO with Okta Sign in to freispace using Okta. ### Create Application[​](#create-application "Direct link to Create Application") 1. Go to the Okta Admin Console at your-company.okta.com/admin/ 2. In the Admin Console, go to **Applications** > **Applications**. 3. Click **Create App Integration**. 4. Select **SAML 2.0** as the Sign-on method. 5. Click **Next**. 6. Enter the following data. | Field | Content | | -------- | ----------------------------------------------------------------------------------------------------------------------------------- | | App name | `freispace` | | App logo | Upload this file: [freispace-logo.png](https://docs.freispace.com/assets/files/freispace-logo-ffb4dc3815feb60a12200ffe0b4eb321.png) | 7. Click **Next**. ### Configuring SAML[​](#configuring-saml "Direct link to Configuring SAML") 1. For **Single sign-on URL** enter your **Team Login URL**, e.g. `https://app.freispace.com/login/xxx`. 2. As **Audience URI (SP Entity ID)**, enter `https://app.freispace.com` for now - we will change this later. 3. For **Application username** select **Email**. 4. Under **Attribute Statements**, add two definitions as follows. | Name | Name format | Value | | ----------------------------------------------------------------- | --------------- | ---------------- | | `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname` | `URI Reference` | `user.firstName` | | `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname` | `URI Reference` | `user.lastName` | ![Okta screenshot](/assets/images/okta-sso-02-0a08374a7133557943afc48880abcfd3.png) 5. Click **Next**. 6. Select **I'm an Okta customer adding an internal app**. 7. Check **This is an internal app that we have created**. 8. Click **Finish**. --- # Team settings Team-wide configuration lives in your team's settings. Open the **team switcher** (your team name, top right) and choose **Team settings**. The team page has multiple tabs in addition to the Settings (**Team Members**, **Activity Log**, **Integrations**, **CCPA & Privacy** and **Administration**). ![Team settings](/assets/images/settings-general-00733d52bb9781a16575b93e96b64e6f.png) The **Settings** tab has its own sub-navigation on the left: * **General**: Team name and logo, plus your **base business settings**: internal work hours (start/end of workday, break time) used when displaying working times in calendars, and team-wide time-unit definitions. * **Company entities**: The legal companies that issue your quotes and invoices. * **Regional**: [Public holidays](https://docs.freispace.com/docs/team-settings/public-holidays.md) per region. * **Time tracking**: Your [activities and absence types](https://docs.freispace.com/docs/team-settings/activities-and-absences.md). * **Bookings**: Defaults for [bookings and statuses](https://docs.freispace.com/docs/team-settings/booking-settings.md). * **Billing**: Invoicing settings such as tax rates, units and payment methods (see the [Billing](https://docs.freispace.com/docs/billing.md) section). * **Customization**: Team-wide [custom fields and number sequences](https://docs.freispace.com/docs/team-settings/custom-fields.md). note Most settings require an administrator role, see [Roles & permissions](https://docs.freispace.com/docs/roles-permissions.md). --- # Activities & absence types **Team settings** > **Time tracking** defines two lists used across time tracking and bookings. Both activities and absence types can not be deleted once used for time tracking or bookings, but can be renamed or disabled. Disabling them will hide them from the booking and time-tracking interfaces, but will not affect existing entries. ## Activities[​](#activities "Direct link to Activities") **Activities** (for example *Editing*, *Colour Grading*, *Conforming*) are what staff book and track their time against. Add, rename or remove them with the buttons on the right. ## Absence types[​](#absence-types "Direct link to Absence types") **Absence types** (for example *Business trip* or *Child ill*) are the kinds of absence people can request. Each type carries an optional icon and settings — including whether it requires a time-tracking entry. note Absence types feed the [approval workflows](https://docs.freispace.com/docs/time-tracking/approval-workflows.md) and the vacation / absence reports. --- # Booking settings & statuses **Team settings** > **Bookings** controls how new bookings behave across your team. ## Booking settings[​](#booking-settings "Direct link to Booking settings") * **Creating new bookings**: Set how new projects should behave by default. * **Optional bookings**: Whether optional bookings are ignored in collision checks and cost reports by default. * **Advanced billing integration**: Enable services as the basis for bookings, and the linking of [orders](https://docs.freispace.com/docs/billing.md). We disable these options by default to reduce visual clutter, as they are only relevant for some teams. ## Booking statuses[​](#booking-statuses "Direct link to Booking statuses") Further down, **Booking statuses** let you define the statuses a booking can have (for example *Confirmed* or *1st Pencil*) and their colour. Statuses drive how bookings are labelled and coloured in the planner. We provide a sample set that can be extended or replaced with your own as needed. There is no limit to the number of statuses you can create. You may select a default status for new bookings (e.g. *Pencil*). --- # Custom fields & number sequences **Team settings** > **Customization** holds two team-wide tools. ## Custom fields[​](#custom-fields "Direct link to Custom fields") Add extra, structured fields to your **bookings, projects, rooms, staff and resources** (and more). Pick the entity tab, click **Add new**, and the field then appears when editing those items. Custom fields can be **text, number, date, dropdown or checkbox**. They can be **required** or optional. These fields also appear in the public REST API and are great for integrations with other systems. ## Number sequences[​](#number-sequences "Direct link to Number sequences") Set the automatic numbering for projects, groups, clients, goods & services and documents such as invoices. Each type has a **format** (for example `P{NUMBER}` → *P100*) and a **next number**. note The same options are reachable from the **settings** gear on each module's list page. --- # Public holidays **Team settings** > **Regional** is where you define **regions** and their public holidays. A region can then be assigned to sites, staff and resources, so each one's availability reflects local holidays. ![Public holidays per region](/assets/images/settings-regional-897c54db0800740e2cc7c93e7553a4ce.png) 1. Click **Add region** and name it (for example *Berlin*). 2. With the region selected, click **Add year** and add that year's public holidays. 3. You can import the list of public holidays from our database automatically one year in advance, or add them manually. 4. Assign the region on a site, staff member or resource via the *public-holiday region* field on its page. note Add each upcoming year in advance, and review the dates — some public holidays move from year to year. Also, some cities or states have their own public holidays, so check the list for your region. --- # Time tracking freispace allows to track individual's time via a time clock widget or by manually entering entries in a form. ## Features[​](#features "Direct link to Features") *Some* of the included features are: * **Time recording** * manual & automatic records (e.g. one-click time recording) * optionally via clock / timer widget * tracking of additional costs * approval workflows * **Absence & leave management** * setup of company-specific absence types * approval workflows * cancellation workflows * **Holiday tracking** * quotas including modifiers (e.g. credit from previous year & forfeited days) * approval workflows * cancellation workflows * Public holidays * Working times and days depending on contract * Detailed settings for overtime handling * Yearly overview of work times & overtimes ## Setup guide[​](#setup-guide "Direct link to Setup guide") Follow [this guide](https://docs.freispace.com/docs/time-tracking/setup.md) to enable time tracking for a user. --- # Approval Workflows for Absences, Holidays, and Time Records freispace offers the ability to set up multi-step approval workflows for absences, holidays and time records. Workflows for both data entry and cancellation of entries are set up through departments. Frame and higher tiers only Approval workflows are only available to teams on **Frame** and higher tiers. **Flagship** users may set up multi-step workflows. Recommendation To set up department structures and approval workflows correctly we recommend booking a session with freispace support, as there are [edge cases](https://docs.freispace.com/docs/time-tracking/approval-workflows-edge-cases.md) to consider. ## Set up Departments & Roles[​](#set-up-departments--roles "Direct link to Set up Departments & Roles") If you have not yet done so, [set up your company structure using departments](https://docs.freispace.com/docs.md) and roles, assigning any staff members appropriately. ## Setting up Approval Workflows[​](#setting-up-approval-workflows "Direct link to Setting up Approval Workflows") 1. Navigate to Staff > [Departments](https://app.freispace.com/staffs/departments) 2. On any department or role, click on the **three-dots menu** and select **Workflow settings** 3. Click the buttons (e.g. `+ Holiday`, `+ Absence`) to create approval workflows for various time tracking-related entries. *Note: Tracked time workflows are only available to Flagship tier users.* ![Setting up approval workflows](/assets/images/approval-workflows-52678e0374aae64cd7fdd5c772ffa8e2.png) 4. Set up your workflows as required. <!-- --> 1. Create new sequence steps by clicking on **+ Add sequence step** * You may set whether **everyone** or just **one person** of a group of people need to approve each step. * On the first step of a workflow, you may also allow the requester to select who should receive the request. This might make sense if a department is run by multiple people, and depending on the current projects a different manager needs to approve the request. * You may select the pool of recipients of a request to be either a **department**, someone with a specific **role** of the current department (e.g. the manager), or **manually select recipients**. * *Flagship-tier teams may set up as many steps as required.* All steps will be processed sequentially after another. 2. Set up who should be notified at the end of a completed (approved) request via **Add notification**. This may usually be HR or the head of department. 3. For absences and holidays, **cancellation workflows** can be set up in the same way. 4. The **timeout** value sets how long the workflow waits for all approval steps to complete before timing out and cancelling the request. When setting this value, be mindful of time frames where managers might be unavailable for a longer period of time, e.g. bank holidays. ## Cascading of workflows[​](#cascading-of-workflows "Direct link to Cascading of workflows") Workflows cascade, and role workflows take precedence over departmental workflows. ``` Role > Department > No workflow ``` A person in a manager role will therefore inherit workflows of their department if no role-specific workflow is set up. ## Restrictions for users[​](#restrictions-for-users "Direct link to Restrictions for users") Depending on the workflows set up, team members will encounter the following, inherent restrictions. #### Time tracking[​](#time-tracking "Direct link to Time tracking") When approval of time tracking entries is enabled, users will face the following restrictions: * **Direct creation of entries is restricted.** Time tracking entries can only be saved as draft or submitted for approval. * **Converting bookings to time records is restricted.** Bookings can no longer be converted into time records directly. Instead, entries need to be reviewed and submitted for approval * **"Transfer all times" button is unavailable.** Transmitting the entire day in one go is no longer possible. * **Editing is disabled.** Instead, entries need to be deleted and new requests sent for approval, ensuring all changes go through an approval process. #### Holidays & Absences[​](#holidays--absences "Direct link to Holidays & Absences") When approval workflows of absences or holidays are enabled, users will face the following restrictions: * **Direct creation of entries is restricted.** Entries can only be saved as draft or submitted for approval. * **Editing entries is no longer possible.** Instead, deletion/cancellation of entries and re-entry is necessary. This ensures all changes to go through approval. * **Deletion may be prohibited.** Depending on the settings, deletion might be unavailable. Instead, a cancellation workflow may be in place, requiring approval for a cancellation. ## Bypassing workflows (depending on permissions)[​](#bypassing-workflows-depending-on-permissions "Direct link to Bypassing workflows (depending on permissions)") If you have permission to edit time tracking entries of behalf of another person, you may select whether to add entries via the approval workflow (and start the approval process on their behalf) or wether to input entries directly, bypassing the workflow entirely. ![Entering data as admin](/assets/images/admin-bypassing-workflows-d7071db62327d8a20bcfd10fc770d645.png) For example, this allows an HR department to input absences on behalf of staff members. Bypassing one's own workflows is always prohibited. --- # Edge Cases with request workflows With multi-step approval workflows being dependent on a lot of factors and running for multiple days until completed, there are possible edge cases that may occur when your company structure and staff change. This may not be a complete list. ## Status updates appear later[​](#status-updates-appear-later "Direct link to Status updates appear later") Approval workflows run asynchronously, meaning that any changes are sent to a queue on the server, and then worked on in their own time. While they will usually be processed within milliseconds, the changes might only be processed and visible shortly after. Thus, it might sometimes occur that **changes are not instantly reflected in the interface**. **This is expected behaviour**. In such a case, please try reloading the page. ## Multiple roles / departments[​](#multiple-roles--departments "Direct link to Multiple roles / departments") Users may have multiple roles or departments attached. freispace will handle the following cases: * If any department/role has a workflow for a specific entry (e.g. holiday), the submission of that entry via workflow will be enforced for the user * E.g. the user will not be able to enter absences directly, even though a specific role/department may not have a workflow * If the user has multiple departments/roles with workflows for a specific entry, a selection box will appear, allowing the user to select which department/role to use for submission * E.g. a user is in two departments, "Post" and "Studio". Both have holiday workflows. When the user wants to add a holiday, they can select as part of which department they want to submit the request. ## Workflow requires staff selection, but no staff is available[​](#workflow-requires-staff-selection-but-no-staff-is-available "Direct link to Workflow requires staff selection, but no staff is available") If a workflow is set up to require the user to select a recipient, but no eligible recipients are available (e.g. no staff members with an attached user), the user will not be able to create or launch the approval workflow. The following error will be shown to the user: ![Warning when launching workflow is restricted](/assets/images/warning-workflow-no-staff-af869cfd7bac61d9b90512b8ee8910f7.png) ## Workflow cannot be launched: `Workflow does not have any staff to approve`[​](#workflow-cannot-be-launched-workflow-does-not-have-any-staff-to-approve "Direct link to workflow-cannot-be-launched-workflow-does-not-have-any-staff-to-approve") If a workflow contains any steps with no users (e.g. staff exist, but are not linked to a user account), freispace will prevent starting/launching the request with the message `Workflow does not have any staff to approve`. ![Error message: Workflow does not have any staff to approve](/assets/images/approval-not-possible-94a1fe01ba7ad213fc46a24b146e01f4.png) This applies to *any* step in a multi-step workflow, e.g. if in step 3 of 5 no staff is available, the message will also be shown. This may primarily happen in two cases: 1. Staff exist, but are not linked to a user account <!-- --> * because they never were * or because the user left the team / was removed from the team. 2. A step just has the current requester as staff. The current person submitting the request is always filtered out in order to avoid scenarios where staff can approve requests themselves. ## Updating workflows[​](#updating-workflows "Direct link to Updating workflows") **Changing workflows only affects future request.** Any requests already submitted will not be affected by the change. ## Time-outs[​](#time-outs "Direct link to Time-outs") If no approval is submitted in any step, the workflow will wait for the period set up, after which it will time out. Users are notified of time-outs. ## Workflow members no longer exist[​](#workflow-members-no-longer-exist "Direct link to Workflow members no longer exist") A user submits a request. If none of the staff members are linked to a user account anymore (e.g. the only manager entered for approval has left the company), one of two scenarios might happen: * If the request was submitted while the user was still a member of the team, and has now left the team without approving the request, the request will run and await approval until it times out. * If the request is submitted and the user no longer exists, the user is skipped. If an entire step only consisted if one user (which now has left the team), the creation of the request is prohibited (and fails with a message). --- # Month balance Looking at a month's balance of working times, we display multiple values. These are as follows: | Name | Example value | Meaning | | --------------------- | ------------- | ----------------------------------------------------------------------------------------------------- | | **Recorded times** | `144h00` | Recorded total working times for the month | | **Subtotal** | `+32h00` | Target time (expected working time) for the month minus recorded times | | **Balance (month)** | `+22h00` | Subtotal after applying overtime regulation (e.g. 10h/month compensated: deducting 10h from subtotal) | | **Balance (overall)** | `+16h20` | Carried over balance including previous months | --- # Setting up time tracking freispace allows to track individual's time via a time clock widget or by manually entering entries in a form. The activation of time tracking for a team member relies on two settings: * The team member must be *linked to a staff*. * The linked staff must have time tracking *enabled*. ## Setting up time tracking for a user[​](#setting-up-time-tracking-for-a-user "Direct link to Setting up time tracking for a user") 1. Go to the [staff list](https://app.freispace.com/staffs). 2. Search the list for a staff member corresponding to the team member. <!-- --> 1. If a staff exists for the user already, click the **Edit** button. 2. Otherwise, click **Add staff** and enrer the user's first and last name. 3. Navigate to the **Settings** tab. 4. Click **Select team member**. 5. Select the team member and confirm the selection by clicking **Select**. 6. Still on the **Settings** tab, activate the option **Time tracking**. 7. Save the staff. ![Creating staff members](/assets/images/staff-time-tracking-86f2847d934ea1134c8b70bc4d9217c5.png) ## Setting up admin access to time tracking reports[​](#setting-up-admin-access-to-time-tracking-reports "Direct link to Setting up admin access to time tracking reports") 1. Navigate to the team member list. 2. Scroll down to the roles. 3. **Edit** the corresponding role. 4. In the *Staff* section, you may assign **View working times** and **Edit working times** for individual staff members or all of them. Viewing allows accessing and downloading a list view of entries, editing allows adding new records on a staff member's behalf. 5. In the *Analytics* section, you may allow the **Evaluation of working time recording** 6. Save the updated role. --- # Webhooks - for automations with freispace ## Use Cases[​](#use-cases "Direct link to Use Cases") Webhooks allow other third-party applications to be notified in real time whenever a change occurs within freispace. In addition to sending a notification to the third-party, a payload containing all event-related data is sent, allowing for automations. ### Examples[​](#examples "Direct link to Examples") A few ways you can use webhooks include: * Create notifications in your preferred application when an event occurs. <!-- --> * If a project information changes. * If a booking changes. * When a new project is created. * Trigger automations on your server or computers. <!-- --> * Prepare server space for a new project. * Copy project files to the correct editing suite where the edit is going to happen. * Triggering other applications to respond to an event. ## How it works[​](#how-it-works "Direct link to How it works") The notification URL must do the following: * Expect JSON data from a POST request and respond with a 2xx HTTP status code to freispace as soon as possible to acknowledge the successful receipt of the event notification. If your application fails to acknowledge the notification in a timely manner, a duplicate event is sent that your application. Applications need at least one reachable notification URL to receive and process webhook events from freispace. Notification URLs are specified on the Integrations page of your team settings. For a list of all freispace API events that you can subscribe to, see [Webhook Events Reference](https://docs.freispace.com/docs/webhooks/events.md). ## How to set up your webhook integration[​](#how-to-set-up-your-webhook-integration "Direct link to How to set up your webhook integration") To start receiving webhook events in your application, create and register a webhook endpoint by following the steps below. You can register and create one endpoint to handle several different event types at once, or set up individual endpoints for specific events. 1. [Identify which events you want to monitor](https://docs.freispace.com/docs/webhooks/events.md). 2. [Develop a webhook endpoint function to receive event data POST requests](https://docs.freispace.com/docs/webhooks/create-endpoint.md). 3. [Register your endpoint within freispace](https://docs.freispace.com/docs/webhooks/register-freispace.md). 4. [Secure your webhook endpoint](https://docs.freispace.com/docs/webhooks/security.md). ## Requirements and limitations[​](#requirements-and-limitations "Direct link to Requirements and limitations") The notification URL must do the following: * Respond with a 2xx HTTP status code to freispace within 10 seconds to acknowledge the receipt of the event notification. * The URL endpoint must require that a connection uses HTTPS. * You must properly set up the webhook event subscription on the integrations page of your team settings. freispace can not guarantee a timely delivery of notifications: * In most cases, event notifications arrive in well under 60 seconds of the associated event. * There's no guarantee of the delivery order of event notices. ## Mode of Operation[​](#mode-of-operation "Direct link to Mode of Operation") freispace allows you to notify URL endpoints when specified events happen. The endpoints will be notified asynchronously. ### Signed Requests[​](#signed-requests "Direct link to Signed Requests") All requests are signed with `HMAC` using the `sha256` algorithm. The secret is provided during setup and can be seen in the team settings. ### Failed Webhooks[​](#failed-webhooks "Direct link to Failed Webhooks") When the receiving end fails to send a response with a `2xx` HTTP status code, we will will consider the call as failed. Failed webhooks will be retried a maximum of two additional times, with a timeout in order to avoid too many calls in a short amount of time. --- # Create a webhook endpoint function Set up an HTTPS endpoint function that can accept webhook requests with a POST method. Set up your endpoint function so that it: 1. Handles POST requests with a JSON payload consisting of an event object. 2. Quickly returns a successful status code (2xx) prior to any complex logic that could cause a timeout. For example, you must return a 200 response before sending a Slack notification. ## Example endpoint[​](#example-endpoint "Direct link to Example endpoint") This code snippet is a webhook function configured to check that the event type was received, to handle the event, and return a 200 response. * PHP * Python * Ruby ``` <?php // The following example uses PHP to verify a webhook request: // The freispace webhook secret, viewable from the Webhook details page. In a production environment, set the secret as an environment variable to prevent exposing it in code. define('FREISPACE_SECRET', 'webhook_secret_key'); // Get the raw POST data $data = file_get_contents('php://input'); // Get the HMAC signature from the request header $signature_header = $_SERVER['HTTP_X_FREISPACE_SIGNATURE']; // Return if the signature header is missing if (!$signature_header) { http_response_code(400); echo json_encode(['message' => 'Missing signature']); exit(); } // Compute the HMAC signature of the request payload $computed_signature = hash_hmac('sha256', $data, FREISPACE_SECRET); // Verify the computed signature with the signature in the request header if (!hash_equals($computed_signature, $signature_header)) { http_response_code(403); echo json_encode(['message' => 'Invalid signature']); exit(); } http_response_code(200); echo json_encode(['message' => 'Webhook processed successfully']); // Process the webhook payload $payload = json_decode($data, true); ?> ``` ``` # The following example uses Python and the Flask framework to verify a webhook request. # Ensure that you have Flask installed in your environment using pip install Flask before running the above code. import hashlib import hmac from flask import Flask, request, jsonify app = Flask(__name__) # The freispace webhook secret, viewable from the Webhook details page. # The FREISPACE_SECRET should be stored securely and must never be exposed. FREISPACE_SECRET = b'webhook_secret_key' @app.route('/webhook', methods=['POST']) def handle_webhook(): # Get the HMAC signature from the request header signature_header = request.headers.get('X-Freispace-Signature') # Check if the signature header is missing if not signature_header: return jsonify({'message': 'Missing signature'}), 400 # Compute the HMAC signature of the request payload signature = hmac.new(FREISPACE_SECRET, request.data, hashlib.sha256).hexdigest() # Verify the computed signature with the signature in the request header # We use hmac.compare_digest instead of a simple comparison (==) because it provides protection against timing attacks. if not hmac.compare_digest(signature, signature_header): return jsonify({'message': 'Invalid signature'}), 403 # Process the webhook payload # Do your logic here payload = request.json print(payload) return jsonify({'message': 'Webhook processed successfully'}), 200 if __name__ == '__main__': app.run() ``` ``` # The following example uses Ruby to verify a webhook request. require 'sinatra' require 'openssl' require 'json' FREISPACE_SECRET = 'webhook_secret_key' post '/webhook' do request_body = request.body.read # Get the HMAC signature from the request header signature_header = request.env['HTTP_X_FREISPACE_SIGNATURE'] # Return if the signature header is missing halt 400, { message: 'Missing signature' }.to_json unless signature_header # Compute the HMAC signature of the request payload digest = OpenSSL::Digest.new('sha256') computed_signature = OpenSSL::HMAC.hexdigest(digest, FREISPACE_SECRET, request_body) # Verify the computed signature with the signature in the request header halt 403, { message: 'Invalid signature' }.to_json unless Rack::Utils.secure_compare(computed_signature, signature_header) # Process the webhook payload payload = JSON.parse(request_body) puts payload { message: 'Webhook processed successfully' }.to_json end ``` --- # Webhook Events Reference Webhooks let you subscribe to freispace API events and receive notice when an event occurs. For more information about how to set up a webhook subscription, see [freispace Webhooks Overview](https://docs.freispace.com/docs/webhooks.md). ## Events[​](#events "Direct link to Events") ### [Bookings](https://docs.freispace.com/docs/webhooks/events/bookings.md)[​](#bookings "Direct link to bookings") * `booking.created` - Occurs whenever a new booking is created. * `booking.updated` - Occurs whenever any booking's information or resources is updated. * `booking.deleted` - Occurs whenever a booking is deleted. ### [Projects](https://docs.freispace.com/docs/webhooks/events/projects.md)[​](#projects "Direct link to projects") * `project.created` - Occurs whenever a new project is created. * `project.updated` - Occurs whenever a project's information has changed. * `project.archived` - Occurs whenever a project is archived. * `project.unarchived` - Occurs whenever a project is re-activated. * `project.deleted` - Occurs whenever a project is deleted. ### [Absences](https://docs.freispace.com/docs/webhooks/events/absences.md)[​](#absences "Direct link to absences") * `absence.created` - Occurs whenever an absence is created directly or an absence request is approved. * `absence.updated` - Occurs whenever any absence's information is updated. * `absence.deleted` - Occurs whenever an absence is deleted directly or a cancellation request is approved. ### [Quotes](https://docs.freispace.com/docs/webhooks/events/quotes.md)[​](#quotes "Direct link to quotes") * `quote.finalized` - Occurs whenever a new quote is finalized. * `quote.status_updated` - Occurs whenever any quote's status is updated. ### [Invoices](https://docs.freispace.com/docs/webhooks/events/invoices.md)[​](#invoices "Direct link to invoices") * `invoice.finalized` - Occurs whenever a new invoice is finalized. * `invoice.canceled` - Occurs whenever an invoice is canceled. ### [Storage Projects](https://docs.freispace.com/docs/webhooks/events/storage-projects.md)[​](#storage-projects "Direct link to storage-projects") * `storage_project.created` - Occurs whenever a new storage project is created. * `storage_project.updated` - Occurs whenever any storage project is updated (`is_active` flag or `storage_size_estimated`) * `storage_project.deleted` - Occurs whenever a storage project is deleted. --- # Absence webhooks Receive webhook notifications whenever absences are created, updated, deleted or requests are approved. Absence webhooks can be used to trigger actions in your application whenever an absence is changed, for example to keep an external HR or scheduling system up to date. ## Events[​](#events "Direct link to Events") | Event | Description | | ----------------- | ------------------------------------------------------------------------------------- | | `absence.created` | Occurs whenever an absence is created directly or an absence request is approved. | | `absence.updated` | Occurs whenever any absence's information is updated. | | `absence.deleted` | Occurs whenever an absence is deleted directly or a cancellation request is approved. | ## Example Payload[​](#example-payload "Direct link to Example Payload") We return JSON-formatted content with the following structure. | Name | Example content | Description | | ------- | -------------------------------------------------------------------------------------- | ---------------------------------------------------------- | | `type` | `absence` | Resource type | | `event` | `absence.created` | Event that triggered the webhook, lowercase, dot-separated | | `url` | `https://app.freispace.com/staffs/a247dce0-6215-4ca4-bc1c-42a69a078d85/presences/2026` | URL to the time tracking overview of the staff member | | `data` | `{}` | The absence block information | ``` { "type": "absence", "event": "absence.created", "url": "https://app.freispace.com/staffs/a247dce0-6215-4ca4-bc1c-42a69a078d85/presences/2026", "data": { "staff_id": "a247dce0-6215-4ca4-bc1c-42a69a078d85", "absence_type_id": "a247dcde-dbe2-4bae-af3f-b24725d9cf3c", // null if the absence is a holiday/vacation "start": "2026-08-06", // First day of the absence block "end": "2026-08-06", // Last day of the absence (inclusive) "length": 1, // Total length in days "is_holiday": false, // Whether the absence is a holiday/vacation "comment": null, "status": "approved", "days": [ // Per-day breakdown of the absence block { "id": "a24800a6-584c-425c-9ac1-d6bb3d70d0c4", "date": "2026-08-06", "is_half_day": false, "half_day_daytime": null, // "morning" or "afternoon" if this is a half-day absence "length": 1 // 0.5 for half-day absences, 1 for full-day absences } ], "created": "2026-07-17T15:15:22+00:00", "updated": "2026-07-17T15:15:22+00:00" } } ``` info `start`, `end` and the entries in `days` are calendar dates without a time component. The `created` and `updated` timestamps are in UTC. --- # Booking webhooks Receive webhook notifications whenever bookings are created, updated or deleted. Booking webhooks can be used to trigger actions in your application whenever a booking is changed, for example to keep an external calendar or scheduling system up to date. ## Events[​](#events "Direct link to Events") | Event | Description | | ----------------- | ------------------------------------------------------------------ | | `booking.created` | Occurs whenever a new booking is created. | | `booking.updated` | Occurs whenever any booking's information or resources is updated. | | `booking.deleted` | Occurs whenever a booking is deleted. | ## Example Payload[​](#example-payload "Direct link to Example Payload") We return JSON-formatted content with the following structure. | Name | Example content | Description | | ------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------- | | `id` | `90fffd9c-6f31-43f5-84ce-264c7ca8be37` | UUID of the booking | | `type` | `booking` | Resource type | | `event` | `booking.updated` | Event that triggered the webhook, lowercase, dot-separated | | `url` | `https://app.freispace.com/dashboard?booking=90fffd9c-6f31-43f5-84ce-264c7ca8be37` | URL to the updated booking | | `data` | `{}` | The booking's information | ``` { "id": "90fffd9c-6f31-43f5-84ce-264c7ca8be37", "type": "booking", "event": "booking.updated", "url": "https://app.freispace.com/dashboard?booking=90fffd9c-6f31-43f5-84ce-264c7ca8be37", "data": { "id": "90fffd9c-6f31-43f5-84ce-264c7ca8be37", "name": "E01 - Fine Cut", "start": "2023-08-08T00:00:00", // UTC "start_timezone": "Europe/Berlin", "end": "2023-08-18T00:00:00", // UTC "end_timezone": "Europe/Berlin", "all_day": true, // Boolean, whether this is a full-day booking. A full-day booking on Monday the 3rd would have a start datetime of `2023-01-03T00:00:00` and an end of `2023-01-04T00:00:00` "byline": null, "description": null, // may contain HTML "color": null, // If given, colours are a HEX colour value (e.g. `#00ff00`). "optional": false, "status": { "id": "afcd1a07-ec58-4393-b808-a452a5a09e6b", "name": "Confirmed", "description": null, "icon": "check-circle", "color": "#057a55" }, "project": { "id": "9d526060-599b-4e29-b9b6-cc5bcc20dacb", "name": "E01", "byline": null, "number": "P156-1", }, "resources": { "suites": [ { "id": "6478ecaf-1fc5-4266-831e-fcd96a4bc098", "name": "Avid 01", "byline": "Z420", "description": null, "color": "#a200ad", "site": { "id": "0537b566-7bed-4aae-9544-f5ae01547c7b", "name": "Berlin", "description": "<p>HQ</p>" } } ], "resources": [ { "id": "08e22f05-41e5-41df-8df8-d7d3404f5035", "name": "Notebook 01", "number": null, "cost": 0, "cost_unit": "day", // Cost units may generally be `minute`, `hour`, `day`, `week`, `month` or `usage` "byline": null, "description": null, "color": "#e6de00", "email": null, "photo_url": "https://assets.app.freispace.com/freispace-public/resource_photos/08e22f05-41e5-41df-8df8-d7d3404f5035.svg" } ], "staffs": [ { "id": "a893354c-ce2c-407d-b893-278bead7aa4c", "name": "Jane Doe", "title": "Editor", "number": null, "cost": 0, "cost_unit": null, "photo_url": "https://assets.app.freispace.com/freispace-public/staff_photos/a893354c-ce2c-407d-b893-278bead7aa4c.svg" } ] } } } ``` info `start` and `end` datetimes are always in UTC. You can use `start_timezone` and `end_timezone` to convert them to the user's local time. --- # Invoice webhooks Receive webhook notifications whenever invoices are finalized or canceled. Invoice webhooks can be used to trigger actions in your application whenever an invoice is changed, for example to keep an external invoicing or accounting system up to date. ## Events[​](#events "Direct link to Events") | Event | Description | | ------------------- | ------------------------------------------- | | `invoice.finalized` | Occurs whenever a new invoice is finalized. | | `invoice.canceled` | Occurs whenever an invoice is canceled. | info When an invoice is canceled, a webhook for the original invoice is triggered with the `invoice.canceled` event and the payload includes `canceled_at` and `cancellation_invoice_id`. We do NOT send a separate webhook for the cancellation invoice itself. ## Example Payload[​](#example-payload "Direct link to Example Payload") We return JSON-formatted content with the following structure. | Name | Example content | Description | | ------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------- | | `id` | `a19e6168-3863-42a4-9454-48a2737d4ece` | UUID of the trigger resource | | `type` | `invoice` | Resource type | | `event` | `invoice.finalized` | Event that triggered the webhook, lowercase, dot-separated | | `url` | `https://app.freispace.com/invoicing/invoices/a19e6168-3863-42a4-9454-48a2737d4ece/view` | URL to the updated resource | | `data` | `{}` | The invoice's information | ``` { "id": "a19e6168-3863-42a4-9454-48a2737d4ece", "type": "invoice", "event": "invoice.finalized", "url": "https://app.freispace.com/invoicing/invoices/a19e6168-3863-42a4-9454-48a2737d4ece/view", "data": { "id": "a19e6168-3863-42a4-9454-48a2737d4ece", "number": "IN-26-1003", "date": "2026-04-24", "due_date": "2026-05-24", // nullable "due_days": 30, // nullable "subject": "Invoice IN-26-1003", "service_period_from": null, "service_period_to": null, "order": { "id": "a19e6172-0225-40cc-b453-a14e685412a0", "number": "OR-1000" }, // nullable "cost_center": null, "issuer": { "id": "a19e5d30-a5e8-4e0a-863f-505ed95980cf", "name": "Post House" }, "recipient": { "client_id": "a19d6036-bfe7-4976-878c-ebc9be05fd52", "client_address_id": "a19d6036-d2f3-47d3-85f9-278890d3e094", "client_contact_id": null, "address": "BBC One\n2nd Floor Egton Wing\nBBC Broadcasting House\nLONDON\nW1A 1AA" }, "billing_email_addresses": [], "currency": "GBP", "total_sum_net": 32000, // in cents "total_sum_gross": 38400, // in cents "payment_due_at": "2026-05-24", "cancellation_invoice_id": null, "canceled_at": null // format: "2026-04-24T07:52:52+00:00" (UTC) } } ``` --- # Project webhooks Receive webhook notifications whenever projects are created, updated, archived, unarchived, or deleted. Project webhooks can be used to trigger actions in your application whenever a project is changed, for example to provision resources for a new project or to keep an external project management system up to date. ## Events[​](#events "Direct link to Events") | Event | Description | | -------------------- | ---------------------------------------------------- | | `project.created` | Occurs whenever a new project is created. | | `project.updated` | Occurs whenever a project's information has changed. | | `project.archived` | Occurs whenever a project is archived. | | `project.unarchived` | Occurs whenever a project is re-activated. | | `project.deleted` | Occurs whenever a project is deleted. | ## Example Payload[​](#example-payload "Direct link to Example Payload") We return JSON-formatted content with the following structure. | Name | Example content | Description | | ------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | | `id` | `882a3ceb-319a-4cca-a6e7-65ead0760726` | UUID of the trigger resource | | `type` | `project` | Resource type | | `event` | `project.updated` | Event that triggered the webhook, lowercase, dot-separated | | `url` | `https://app.freispace.com/planning/projects/882a3ceb-319a-4cca-a6e7-65ead0760726/overview` | URL to the updated resource | | `data` | `{}` | The project's information | ``` { "id": "882a3ceb-319a-4cca-a6e7-65ead0760726", "type": "project", "event": "project.updated", "url": "https://app.freispace.com/planning/projects/882a3ceb-319a-4cca-a6e7-65ead0760726/overview", "data": { "id": "882a3ceb-319a-4cca-a6e7-65ead0760726", "name": "Climate", "number": "P156", "byline": "ZDFinfo, 2x43'", "description": null, // (1)! "start": "2024-05-30", "end": "2024-10-30", "color": "#0062ff", "clients": [ { "id": "9d4c9eda-c600-4d67-9796-43a16f001eaa", "name": "Production Company", "byline": null, "number": "C001", } ], "status": "active", // (2)! "children": [ { "id": "9d526060-599b-4e29-b9b6-cc5bcc20dacb", "name": "E01", "number": "P156-1", "status": "active", // (2)! } ], "parent" : null, "custom_fields": [ { "title": "Material", "value": "DNxHD" } ], "global_fields": [ { "id": "e62b7570-a3ce-4480-96e5-39447cb77006", "title": "Deadline", "description": null, "value": "2023-01-01", } ] } } ``` 1. Description may be `null` or contain HTML. 2. `active` or `archive` --- # Quote Webhooks Receive webhook notifications whenever quotes are finalized or their status (accepted/declined) is updated. Quote webhooks can be used to trigger actions in your application whenever a quote is changed, for example to keep an external invoicing or accounting system up to date. ## Events[​](#events "Direct link to Events") | Event | Description | | ---------------------- | -------------------------------------------------------------------- | | `offer.finalized` | Occurs whenever a new quote is finalized. | | `offer.status_updated` | Occurs whenever a quote's status was changed (accepted or declined). | ## Example Payload[​](#example-payload "Direct link to Example Payload") We return JSON-formatted content with the following structure. | Name | Example content | Description | | ------- | -------------------------------------------------------------------------------------- | ---------------------------------------------------------- | | `id` | `a19e5d48-cbb6-4011-b023-5a5919ef5e15` | UUID of the trigger resource | | `type` | `offer` | Resource type | | `event` | `offer.finalized` | Event that triggered the webhook, lowercase, dot-separated | | `url` | `https://app.freispace.com/invoicing/offers/a19e5d48-cbb6-4011-b023-5a5919ef5e15/view` | URL to the updated resource | | `data` | `{}` | The quote's information | ``` { "id": "a19e5d48-cbb6-4011-b023-5a5919ef5e15", "type": "offer", "event": "offer.finalized", "url": "https://app.freispace.com/invoicing/offers/a19e5d48-cbb6-4011-b023-5a5919ef5e15/view", "data": { "id": "a19e5d48-cbb6-4011-b023-5a5919ef5e15", "number": "OF-1000", "date": "2026-04-24", "subject": "Quote OF-1000", "service_period_from": null, "service_period_to": null, "order": { "id": "a19e6172-0225-40cc-b453-a14e685412a0", "number": "OR-1000" }, // nullable "cost_center": null, "issuer": { "id": "a19e5d30-a5e8-4e0a-863f-505ed95980cf", "name": "Post House" }, "recipient": { "client_id": "a19d6036-bfe7-4976-878c-ebc9be05fd52", "client_address_id": "a19d6036-d2f3-47d3-85f9-278890d3e094", "client_contact_id": null, "address": "BBC One\n2nd Floor Egton Wing\nBBC Broadcasting House\nLONDON\nW1A 1AA" }, "billing_email_addresses": [], "currency": "GBP", "total_sum_net": 32000, // in cents "total_sum_gross": 38400, // in cents "offer_valid_until": null, "status": null, // "accepted", "declined" or null "status_set_at": null // format: "2026-04-24T07:52:52+00:00" (UTC) } } ``` --- # Storage project webhooks Receive webhook notifications whenever storage projects are created, updated, or deleted. Storage project webhooks can be used to trigger actions in your application whenever a storage project is changed, for example to provision servers. ## Events[​](#events "Direct link to Events") | Event | Description | | ------------------------- | --------------------------------------------------------------------------------------------- | | `storage_project.created` | Occurs whenever a new storage project is created. | | `storage_project.updated` | Occurs whenever any storage project is updated (`is_active` flag or `storage_size_estimated`) | | `storage_project.deleted` | Occurs whenever a storage project is deleted. | info You may need to watch for `updated` and `deleted` events to watch for both deletions and archivals (deactivating project storages = changing `is_active` flag). info We do NOT send webhooks when `storage_size_current` changes. ## Example Payload[​](#example-payload "Direct link to Example Payload") We return JSON-formatted content with the following structure. | Name | Example content | Description | | ------- | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | | `id` | `90fffd9c-6f31-43f5-84ce-264c7ca8be37` | UUID of the storage project | | `type` | `storage_project` | Resource type | | `event` | `storage_project.updated` | Event that triggered the webhook, lowercase, dot-separated | | `url` | `https://app.freispace.com/server-storage/90fffd9c-6f31-43f5-84ce-264c7ca8be37/overview` | URL to the updated storage (**!** link to the storage, not storage project) | | `data` | `{}` | The storage project's information | ``` { "id": "90fffd9c-6f31-43f5-84ce-264c7ca8be37", "type": "storage_project", "event": "storage_project.updated", "url": "https://app.freispace.com/server-storage/90fffd9c-6f31-43f5-84ce-264c7ca8be37/overview", "data": { "id": "90fffd9c-6f31-43f5-84ce-264c7ca8be37", "storage_size_estimated": 21990232555519, // in bytes, may be null "storage_size_current": 4617948836659, // in bytes, may be null "is_active": true, "storage": { "id": "90fffd9c-6f31-43f5-84ce-264c7ca8be37", "name": "E01 Storage", "byline": null, "type": "on-prem", // on-prem, cloud or hybrid "size": 21990232555519, // in bytes, or null for unlimited "size_allocated": 21990232555519, // in bytes, may be null "size_occupied": 4617948836659, // in bytes, may be null "is_active": true, }, "project": { "id": "9d526060-599b-4e29-b9b6-cc5bcc20dacb", "name": "E01", "byline": null, "number": "P156-1", } } } ``` --- # Create a Webhook on freispace To add a new webhook endpoint to your team's account, follow below steps. 1. Go to your team's settings by clicking on your team name on the top right and then **Team settings**. 2. Navigate to the **Integrations** tab. 3. Navigate to **Webhooks**. 4. Click **Add webhook**. 5. Enter the webhook's *Endpoint URL*, an optional description of the webhook, and select the required **Trigger events**. 6. Click **Save webhook** Your webhook endpoint was added to freispace. The *Secret* will be revealed and can now be copied over into your application. --- # Webhook Security To ensure a secure integration of webhooks with your custom implementation or the third-party provider, we propose the following safety measures. ## Only allow HTTPS requests[​](#only-allow-https-requests "Direct link to Only allow HTTPS requests") freispace will only send webhook requests over `HTTPS` and check that endpoints have a valid SSL certificate. Ensure to block any non-secure `HTTP` requests on the receiving end. ## Ensure validity using HMAC[​](#ensure-validity-using-hmac "Direct link to Ensure validity using HMAC") All requests are signed with `HMAC` using the `sha256` algorithm. Check any incoming webhook's validity using the pre-shared key. * PHP * Python * Ruby ``` <?php // The following example uses PHP to verify a webhook request: // The freispace webhook secret, viewable from the Webhook details page. In a production environment, set the secret as an environment variable to prevent exposing it in code. define('FREISPACE_SECRET', 'webhook_secret_key'); // Get the raw POST data $data = file_get_contents('php://input'); // Get the HMAC signature from the request header $signature_header = $_SERVER['HTTP_X_FREISPACE_SIGNATURE']; // Return if the signature header is missing if (!$signature_header) { http_response_code(400); echo json_encode(['message' => 'Missing signature']); exit(); } // Compute the HMAC signature of the request payload $computed_signature = hash_hmac('sha256', $data, FREISPACE_SECRET); // Verify the computed signature with the signature in the request header if (!hash_equals($computed_signature, $signature_header)) { http_response_code(403); echo json_encode(['message' => 'Invalid signature']); exit(); } http_response_code(200); echo json_encode(['message' => 'Webhook processed successfully']); // Process the webhook payload $payload = json_decode($data, true); ?> ``` ``` # The following example uses Python and the Flask framework to verify a webhook request. # Ensure that you have Flask installed in your environment using pip install Flask before running the above code. import hashlib import hmac from flask import Flask, request, jsonify app = Flask(__name__) # The freispace webhook secret, viewable from the Webhook details page. # The FREISPACE_SECRET should be stored securely and must never be exposed. FREISPACE_SECRET = b'webhook_secret_key' @app.route('/webhook', methods=['POST']) def handle_webhook(): # Get the HMAC signature from the request header signature_header = request.headers.get('X-Freispace-Signature') # Check if the signature header is missing if not signature_header: return jsonify({'message': 'Missing signature'}), 400 # Compute the HMAC signature of the request payload signature = hmac.new(FREISPACE_SECRET, request.data, hashlib.sha256).hexdigest() # Verify the computed signature with the signature in the request header # We use hmac.compare_digest instead of a simple comparison (==) because it provides protection against timing attacks. if not hmac.compare_digest(signature, signature_header): return jsonify({'message': 'Invalid signature'}), 403 # Process the webhook payload # Do your logic here payload = request.json print(payload) return jsonify({'message': 'Webhook processed successfully'}), 200 if __name__ == '__main__': app.run() ``` ``` # The following example uses Ruby to verify a webhook request. require 'sinatra' require 'openssl' require 'json' FREISPACE_SECRET = 'webhook_secret_key' post '/webhook' do request_body = request.body.read # Get the HMAC signature from the request header signature_header = request.env['HTTP_X_FREISPACE_SIGNATURE'] # Return if the signature header is missing halt 400, { message: 'Missing signature' }.to_json unless signature_header # Compute the HMAC signature of the request payload digest = OpenSSL::Digest.new('sha256') computed_signature = OpenSSL::HMAC.hexdigest(digest, FREISPACE_SECRET, request_body) # Verify the computed signature with the signature in the request header halt 403, { message: 'Invalid signature' }.to_json unless Rack::Utils.secure_compare(computed_signature, signature_header) # Process the webhook payload payload = JSON.parse(request_body) puts payload { message: 'Webhook processed successfully' }.to_json end ``` --- # freispace User Guides [freispace](https://freispace.com) is a web application to schedule your post-production and manage your media projects. These guides are designed to help new users navigate their setup and the basic functionality of freispace. ## Quick start[​](#quick-start "Direct link to Quick start") 1. [Setting up your profile](https://docs.freispace.com/user-guides/quick-start/user-profile.md) 2. [The planner](https://docs.freispace.com/user-guides/quick-start/resource-planning.md) 3. [Creating bookings](https://docs.freispace.com/user-guides/quick-start/create-booking.md) 4. [Updating bookings](https://docs.freispace.com/user-guides/quick-start/manage-bookings.md) 5. [Project planning with Gantt charts](https://docs.freispace.com/user-guides/quick-start/gantt-project-planning.md) 6. [Tracking time and absences](https://docs.freispace.com/user-guides/quick-start/time-tracking.md) 7. [Tasks and to-dos](https://docs.freispace.com/user-guides/quick-start/tasks-todos.md) ## Billing Module[​](#billing-module "Direct link to Billing Module") * [Overview](https://docs.freispace.com/user-guides/billing/quotes-invoices.md) * [Goods & Services](https://docs.freispace.com/user-guides/billing/goods-services.md) * [Creating a Quote](https://docs.freispace.com/user-guides/billing/quoting.md) * [Creating an Invoice](https://docs.freispace.com/user-guides/billing/invoicing.md) --- # Analytics within freispace freispace offers a wide range of analytical features including comprehensive exports as CSV and Excel files. <!-- --> ## [📄️Dashboards](https://docs.freispace.com/user-guides/analytics/dashboards.md) [Build a custom dashboard in freispace and add widgets powered by Kusto Query Language (KQL) queries.](https://docs.freispace.com/user-guides/analytics/dashboards.md) ## [📄️Staff Overheads](https://docs.freispace.com/user-guides/analytics/staff-overheads.md) [Analyse how much overheads your planning generates for internal staff. Our report shows you the amount of overheads on an hourly as well as internal cost basis.](https://docs.freispace.com/user-guides/analytics/staff-overheads.md) --- # Dashboards Dashboards let you build your own overview of freispace data, tailored to what matters to you or your team. A dashboard is made up of **widgets** — each widget shows the result of a query as a table, chart or KPI number. ## Creating a dashboard[​](#creating-a-dashboard "Direct link to Creating a dashboard") 1. Go to **Analytics** > **Dashboards** and click **+ Add New**. 2. Give your dashboard a name. 3. Click **+ Add widget** to add your first widget. Depending on your freispace tier, you may be limited to a single, share dashboard or able to create as many dashboards as you like, for example one for yourself and separate ones to share with your team. ## Adding a widget[​](#adding-a-widget "Direct link to Adding a widget") Each widget is built from a query written in [Kusto Query Language (KQL)](https://learn.microsoft.com/en-us/kusto/query/?view=microsoft-fabric) — the same query language used by Microsoft Fabric and Azure Data Explorer. 1. Click **+ Add widget** on your dashboard. 2. Choose the data you want to query, e.g. bookings, invoices, quotes, staff, resources, suites or clients. 3. Write your KQL query in the query editor. A live preview of the result is shown as you type. 4. Choose a **visualization type** for the result: <!-- --> * **Table** — a detailed, row-level list * **Number / KPI** — a single, prominent value * **Bar chart** — compare values across categories * **Line chart** — show a trend over time * **Donut chart** — show proportions between categories 5. Give the widget a title and save it. tip New to KQL? Start with a simple query such as `Bookings | count` and build it up step by step. Every time you add a new line, the preview updates so you can see the effect immediately. ## Arranging your dashboard[​](#arranging-your-dashboard "Direct link to Arranging your dashboard") Once you have added a few widgets, click **Edit layout** to drag them to reorder or resize them so the most important information stands out. ## Learn more about KQL[​](#learn-more-about-kql "Direct link to Learn more about KQL") This guide covers the basics of building a widget. For the full list of tables you can query, supported syntax and example queries, see the [KQL reference](https://docs.freispace.com/docs/dashboards/kql-reference.md). --- # Analyse Staff Overheads ## Report[​](#report "Direct link to Report") Analyse how much overheads your planning generates for internal staff. Our report shows you the amount of overheads on an hourly as well as internal cost basis. ![Staff Overheads in Post-Production](/assets/images/staff-overheads-postproduction-65037a0b8da7b8af374b29f2e149927a.png) You may export the report as Excel or CSV. ### Timeframe[​](#timeframe "Direct link to Timeframe") Select any timeframe to analyse, future and past. ![Personnel Overheads reporting](/assets/images/report-timeframe-6c688ab4e6e1519d51937694b0802854.png) Either select a pre-defined time range, or enter you custom start and end date. ### Settings[​](#settings "Direct link to Settings") In the top right, you may adjust the display and calculation settings for the overheads. ![Settings for overheads report](/assets/images/settings-overheads-report-cd139e986368f832eef6f2da8f544f4a.png) * **Show absences**: Displays absences as overheads, e.g. a vacation day might incur 8h of overheads. * **Show detailed statistics**: Show or hide the detailed day-by-day breakdown of the overheads. ### Calculation[​](#calculation "Direct link to Calculation") We calculate the *planned* staff overheads according to your planning data (public holidays, absences, vacations, bookings, working times). The staff's working times are taken as a base for the daily amount of hours a person has available. Public holidays are always taken into account. If you have "Show Absences" active, vacations and absences (e.g. parental leave) will show up in the list and the overheads of such absences are taken into account. If inactive, absences are deducted from the staff working times/days. For the remaining available time of a person, the workload from bookings are deducted. Workloads on bookings (e.g. 20% workload) is taken into account. Example: | Booking | Length | Workload | Booking Sum | | ------- | -------------------- | -------- | ----------- | | #1 | 4h | 100% | 4h | | #2 | 8h (all-day booking) | 25% | 2h | | | | **Sum:** | **6h** | A **total of 2h overheads** (`8h - 6h = 2h`) would show on the report for that day. info The report is about overheads resulting from planning. It does **not** take time tracking into account, as a person would still have to be present and track time, even though no planned work was done. ### Currencies[​](#currencies "Direct link to Currencies") Staff with different internal cost currencies will show the incurred cost as their set currency. At the bottom of the page, you will find the sum of costs per currency. ### Column Calculations[​](#column-calculations "Direct link to Column Calculations") At the bottom of the table, you will see the aggregated data. ![Staff Overheads calculation](/assets/images/staff-overheads-project-planning-calculation-a861959f60677e9dc605e6011e668e3d.png) Click on any number to change the display value. You can select between: * Sum * Average * Minimum * Maximum * Range (minimum and maximum) ## Exports[​](#exports "Direct link to Exports") You may export both Excel spreadsheets (xslx) and comma-separated value (CSV) files. For use with LLMs, the CSV export is recommended, as it will use up less tokens. --- # Billing Module An overview of our billing-related functionality, including [Goods and Services](https://docs.freispace.com/user-guides/billing/goods-services.md), [Quoting](https://docs.freispace.com/user-guides/billing/quoting.md) and [Invoicing](https://docs.freispace.com/user-guides/billing/invoicing.md). <!-- --> ## [📄️Overview](https://docs.freispace.com/user-guides/billing/quotes-invoices.md) [Billing Module Overview: Quotes, Invoices, Goods and Services All, Draft, Open, Accepted, or Declined.](https://docs.freispace.com/user-guides/billing/quotes-invoices.md) ## [📄️Goods & Services](https://docs.freispace.com/user-guides/billing/goods-services.md) [Goods & Services represent articles that you can add to quotes and invoices as line items.](https://docs.freispace.com/user-guides/billing/goods-services.md) ## [📄️Invoicing](https://docs.freispace.com/user-guides/billing/invoicing.md) [Invoicing: Write invoices based on tracked costs, bookings, or by converting quotes into invoices.](https://docs.freispace.com/user-guides/billing/invoicing.md) ## [📄️Quoting](https://docs.freispace.com/user-guides/billing/quoting.md) [freispace can create beautiful and comprehensive quotes and allows for any complete control of your quote design.](https://docs.freispace.com/user-guides/billing/quoting.md) --- # Goods & Services Goods & Services represent articles that you can add to quotes and invoices as line items. In addition, these can be referenced in bookings and when time tracking. ![Goods and services overview showing building blocks for quotes and invoices](/assets/images/goods-services-overview-4d9943d98ccb59c4f45704613dd8f612.jpeg) ## Creating a Good/Service[​](#creating-a-goodservice "Direct link to Creating a Good/Service") 2. To add a new good or service, navigate to the goods and services page. And click "Add Item". ![Add item button for creating new goods and services entries](/assets/images/goods-services-add-item-button-f82f0965144c1ac717eaaf8b300ab945.jpeg) 3. Define what type of item you'd like to add. ![Item type selection interface for choosing service or product categories](/assets/images/goods-services-item-type-selection-beed900b6a7f1d5204b66e803c4d3034.jpeg) 4. Fill in the details for the tax rate, ![Tax rate field configuration for goods and services pricing](/assets/images/goods-services-tax-rate-field-325cd5a1d04ce79e8a7c4bdd378573ef.jpeg) 5. define a regular "Selling price" ![Selling price field for setting standard product or service rates](/assets/images/goods-services-selling-price-483fd0cdd6e57e6f3d2e79e5c665c492.jpeg) 6. A "Purchase price" can also be defined. ![Purchase price field for tracking cost of goods and services](/assets/images/goods-services-purchase-price-fc5b28e4c1b3b313455ba7b570b852f5.jpeg) 7. Fill in the "Name" , "Description", and "Item Text" fields as required. ![Name, description, and item text fields for detailed product information](/assets/images/goods-services-name-description-fields-c1cb5c8164d6dace240ff631fc567bef.webp) 8. If you're working in a multi multilingual environment, you can also add translations. ![Multilingual translation options for international goods and services](/assets/images/goods-services-multilingual-translations-9d9d8567b25a5944f5472a9038492e3f.webp) 9. There's an option to make the item selectable during time tracking. ![Time tracking option checkbox for billable services integration](/assets/images/goods-services-time-tracking-option-f0b4e486129d7d52f4e7e9a148c8a440.jpeg) 10. You can add searchable metadata terms. ![Metadata terms field for adding searchable keywords and tags](/assets/images/goods-services-metadata-terms-0be2f58fa7919f58a60fccc6451cdd3f.webp) 11. Items can be organised into groups. ![Item organization groups for categorizing goods and services](/assets/images/goods-services-item-groups-757fa22e6d1394ba8f820140cb8eddcd.webp) 12. Once you've fill out this basic information, click "save" ![Save button to store goods and services configuration](/assets/images/goods-services-save-button-9e6c6dbe051a70e22263b849716ae23b.jpeg) ## Client Prices / Rate Card Prices[​](#client-prices--rate-card-prices "Direct link to Client Prices / Rate Card Prices") 13. Once the basic details for an item have been entered, view the item. ![View item interface for accessing detailed goods and services settings](/assets/images/goods-services-view-item-e4449e2087b104f43d9e49fb0813177e.jpeg) 14. Click the "Client prices" tab ![Client prices tab for managing customer-specific pricing schemes](/assets/images/goods-services-client-prices-tab-6dc6ebe47ac3532fc7b9e4bd715583c7.jpeg) 15. Click "Create new price" ![Create new price button for adding client-specific pricing rules](/assets/images/goods-services-create-new-price-25bfc51908f0a0d53e57555179a4b93e.jpeg) 16. Client prices can be set up by individual "client", "client groups", the "company" from which the invoice or quote is issued, or a combination of Issuing company and client/Client group. ![Client price setup interface with options for clients, groups, and companies](/assets/images/goods-services-client-price-setup-a9dcd270cc50a0d11e04e9f87e857912.webp) 17. The price and currency can be adjusted for each "client price" instance ![Price and currency adjustment fields for client-specific pricing](/assets/images/goods-services-price-currency-adjustment-ed375de06e54c35ab89b0010841f7b8f.jpeg) 18. Add as many Client prices as required ![Multiple client prices list showing various pricing configurations](/assets/images/goods-services-multiple-client-prices-5c7779bc9b5095ac59c4faa2426528ef.jpeg) ## Defining Components[​](#defining-components "Direct link to Defining Components") 19. Click on and Item to view details <br /> <!-- --> Click "Components" ![Components tab for managing item breakdown and sub-components](/assets/images/goods-services-components-tab-6feb139e8e458bebbe9a48ae3f200f49.webp) 20. Click "Add component" ![Add component button for creating item sub-components and parts](/assets/images/goods-services-add-component-a2f0f023904614db54b14f6c12b15f04.jpeg) 21. Define each component from your setup as required ![Component definition interface for configuring detailed item specifications](/assets/images/goods-services-define-components-031dc86d1c24c9ea26f5039a1f5050e3.webp) --- # Invoicing Write invoices based on tracked costs, bookings, or by converting quotes into invoices. freispace allows for granular control over your invoice's design, contents and legal specifics. ## Creating a new invoice[​](#creating-a-new-invoice "Direct link to Creating a new invoice") 1. Navigate to the "Invoices" tab. ![Invoices tab navigation for accessing invoice management interface](/assets/images/invoicing-tab-navigation-937cb989de9cae8291ce68aaef35e288.jpeg) 2. Select "New Invoice" or "New recurring invoice" from The drop-down menu as required. ![New invoice dropdown menu with options for standard and recurring invoices](/assets/images/invoicing-new-invoice-dropdown-cdf0923327cdeba04bfaf80e8f87ab3a.webp) ## Invoice recipient[​](#invoice-recipient "Direct link to Invoice recipient") 3. Either manually type the address in the "Recipient" box. <br /> <!-- --> Or click "Select" to choose a client from your list. ![Recipient selection interface with manual entry option and client list selection](/assets/images/invoicing-recipient-selection-ab7a57d4c79ed3553ac0f0c098652f48.webp) ## Invoice details[​](#invoice-details "Direct link to Invoice details") 4. Fill out required details, such as the "Invoice date", Due date" or "service period" through the checkboxes on the right. ![Invoice details checkboxes for date, due date, and service period configuration](/assets/images/invoicing-details-checkboxes-835020b8212a3e5b43022ac6a2a09324.webp) 5. Adjust the "Subject" field as required. ![Subject field for customizing invoice title and reference information](/assets/images/invoicing-subject-field-2cfcb6ef374bfc277f992de7e91f73ff.jpeg) 6. Use the "Header" text box for adding unformatted information to the beginning of your invoice, such as a greeting. ![Header text box for adding greetings and unformatted information to invoice top](/assets/images/invoicing-header-text-box-d4fafadc92a92fc136626370ad12b989.jpeg) 7. Text snippets can be saved as templates. <br /> <!-- --> "Variables" can e inserted for automating information about the "date and time", "the recipient", or details from the invoice directly. ![Snippets and variables interface for automating invoice text and information](/assets/images/invoicing-snippets-variables-26376352c0dde66e4c184b7293661367.webp) ## Building an invoice from scratch[​](#building-an-invoice-from-scratch "Direct link to Building an invoice from scratch") ### Add invoice line items[​](#add-invoice-line-items "Direct link to Add invoice line items") 8. Use the blue options to add lines to the invoice. <br /> <!-- --> The "+Add Goods/service" option allows you to access access Items within your list of services. ![Add goods and services button for inserting predefined items into invoice](/assets/images/invoicing-add-goods-services-077afc05d15f6091aa3190cc63268a87.webp) tip Using predefined "Goods and services" allows for automating individual pricing and currency options based on issuing company, Client, or Client groups. 9. Click "+add line item" to add custom entries. ![Add line item button for creating custom invoice entries and charges](/assets/images/invoicing-add-line-item-8a62c9a6b060febffe03f33ce7bdc29c.webp) 10. "Overall discounts or surcharges" can be applied as required. ![Discounts and surcharges options for applying overall invoice adjustments](/assets/images/invoicing-discounts-surcharges-56e9c0c27200233c00c9d5db8dc751c9.webp) 11. At the bottom of the invoice is a "footer" where unformatted text can be added to the end of the quote. ![Footer text box for adding closing information and terms to invoice bottom](/assets/images/invoicing-footer-text-box-85eed9cc12d1274e5962ebadd3f4bf4b.jpeg) 12. There are also additional options to change to the currency, language, or payment method as required. <br /> <!-- --> Taxation rules can also be adjusted as defined by your company. ![Currency, language, and payment method options with taxation rule settings](/assets/images/invoicing-currency-language-options-83b4a4807aa2782d3481c3226bdc6b94.webp) ## Convert quotes to invoices[​](#convert-quotes-to-invoices "Direct link to Convert quotes to invoices") 13. Navigate to the Quotes tab ans select a finalised quote. ![Quotes tab selection interface for choosing finalized quotes to convert](/assets/images/invoicing-quotes-tab-selection-9179145a0a1c41fe1d26d569b837881a.webp) 14. Click on the further options button and select "Create invoice". ![Create invoice option in quote actions menu for conversion process](/assets/images/invoicing-create-invoice-option-e559f005a49d312ea334f92ff5770909.webp) 15. Select which elements from the quote you would like to transfer to the invoice. ![Quote elements transfer selection for choosing items to include in invoice](/assets/images/invoicing-quote-elements-transfer-e63381ca99ff2923acbbe71e183a49db.webp) 16. Choose whether to create a single invoice, or split the total into multiple invoices. ![Single or multiple invoice choice for splitting quote into separate invoices](/assets/images/invoicing-single-multiple-invoice-choice-6c5d643428e3857c1973181c321e4f7e.webp) 17. Click "Create invoice" <br /> <!-- --> You'll be transferred to the invoice tab with a new draft invoice containing the items from the quote. ![Create invoice button to finalize quote conversion and generate draft invoice](/assets/images/invoicing-create-invoice-button-2af502f46bfeb3cf3da3453d9cd04479.webp) ## Invoice preview[​](#invoice-preview "Direct link to Invoice preview") 18. Activate the "Preview" button to view your Invoice while building. <br /> <!-- --> Use the arrow to navigate between pages. Zoom and refresh as required. ![Preview mode interface for viewing invoice layout with navigation and zoom controls](/assets/images/invoicing-preview-mode-c766430e6b68cb58fafcd0eb2b9301d0.webp) ## Finalize invoices[​](#finalize-invoices "Direct link to Finalize invoices") 19. Once content: click the finalize button. <br /> <!-- --> Adjust document options as required. ![Finalize button with document options for completing invoice preparation](/assets/images/invoicing-finalize-button-0faea07ae9adb6bd8beb34320b69013f.webp) 20. Then select how you wish to distribute your Invoice ![Invoice distribution options for sending, downloading, or printing completed invoices](/assets/images/invoicing-distribution-options-0126aa98f2d42784ca26c6394014fa15.jpeg) --- # Billing Module Overview 1. The billing module is split into 3 parts. <br /> <!-- --> Quotes, Invoices, Goods and Services ![Billing module overview showing quotes, invoices, and goods/services sections](/assets/images/billing-module-overview-76c04c12a3c11032b9d90bb43db59a1a.webp) ## Quotes[​](#quotes "Direct link to Quotes") 2. Quotes can be easily sorted by clicking the tabs. <br /> <!-- --> All, Draft, Open, Accepted, or Declined ![Quote status tabs for sorting by all, draft, open, accepted, or declined](/assets/images/quotes-status-tabs-229cfa393e1abf81536b85cf9f02a3a3.webp) 3. Quotes can also be filtered by number, client, date range, or quote value. ![Quote filter options for searching by number, client, date range, or value](/assets/images/quotes-filter-options-22b860ff45518c1934dc265caaca0f69.webp) 4. Use the buttons on the right to edit or finalize a draft quote, and to view or send a finalized quote ![Quote action buttons for editing, finalizing, viewing, and sending quotes](/assets/images/quotes-action-buttons-f73646ccdfaa9c308d78f488b91f4519.webp) ## Invoices[​](#invoices "Direct link to Invoices") 5. Invoices can also be quickly sorted into: all invoices, drafts, open, overdue, paid, partially paid, canceled or locked. ![Invoice status sorting options for all, drafts, open, overdue, paid, and more](/assets/images/invoices-status-sorting-d16127db004f8fa006fb0b1f26380d5a.webp) ## Goods & Services[​](#goods--services "Direct link to Goods & Services") 6. The "Goods & Services" landing page gives you an overview of the goods and services within your system. ![Goods and services landing page overview showing system inventory](/assets/images/goods-services-landing-overview-8648e6ec3e860f1ecb760dbeb8b8e230.jpeg) 7. These can be filtered by number, type, name, or groups. ![Goods and services filter options for number, type, name, or groups](/assets/images/goods-services-filter-options-47d6ea9a3a6b97782f62080b09cde959.jpeg) 8. Click "View" on and item to see detailed information. View "Components", or "Client prices" ![View details button for accessing components and client prices information](/assets/images/goods-services-view-details-5839e1e99ee75619d439c6e08a189a45.webp) --- # Quoting freispace can create beautiful and comprehensive quotes and allows for any complete control of your quote design. ## Creating a New Quote[​](#creating-a-new-quote "Direct link to Creating a New Quote") 1. Navigate to the "Quotes" tab 2. Click "New quote" on the top right. ![New quote button in the top right corner of the quotes tab](/assets/images/quotes-new-quote-button-9a6aae71a97c01cbbcee2a215d92e4cf.webp) ## Quote Recipient[​](#quote-recipient "Direct link to Quote Recipient") Either enter details in the "Recipient" field manually, or click "Select" to choose from your list of clients. ![Recipient field with manual entry option and select button for client list](/assets/images/quotes-recipient-selection-eba9667bbfd77c2db2a0c2d4aec14ffa.webp) tip Clients can be used for automating for automating currency changes and pricing variations for "Goods and Services". ## Quote Details[​](#quote-details "Direct link to Quote Details") 1. Amend details on the top right as required. ![Quote details form with editable fields in the top right section](/assets/images/quotes-details-form-2953b9c778cc8e741d96f3305fa86d08.webp) 2. There is a text box for adding details or greetings. <br /> <!-- --> The "Snippets" button can used for creating and accessing text templates. ![Text box with snippets button for creating and accessing text templates](/assets/images/quotes-text-snippets-button-b19dbcfa9bcacf5358effe411c1e6660.webp) 3. Use the "Variables" button for adding automated detailed elements such "Date and Time" , "Recipient", "Quote" ![Variables button for inserting automated elements like date, recipient, and quote details](/assets/images/quotes-variables-button-602d47b0ca8cc76ca6947a1ec280e3c8.webp) ## Building your quote - adding line items[​](#building-your-quote---adding-line-items "Direct link to Building your quote - adding line items") 1. Click "Block header" to start a new block of line items. ![Block header button to create new section for organizing line items](/assets/images/quotes-block-header-button-bcc349b0df341856328957aee855f433.jpeg) 2. Click "Add goods/service" to add predefined items from your list of goods and services. ![Add goods and services button for inserting predefined items with pricing](/assets/images/quotes-add-goods-services-714b755522557d1443a1d1cf89715f1c.webp) tip Using Predefined "Goods and Services" allows for automating pricing and currency variations based on issuing company, client or client group. 3. Click "Add line item" to enter a custom item. <br /> <!-- --> Adjust "unit(s)" and pricing options as required. ![Add line item interface with custom fields for units and pricing options](/assets/images/quotes-add-line-item-8b88bb26765f540f0b6666738879a08e.webp) 4. Click and drag the arrows on the left to rearrange the position of the items within a quote. ![Drag arrows on the left side for reordering quote items by position](/assets/images/quotes-reorder-items-drag-d5064b10b4de6b028113e079c726b99c.jpeg) 5. Add other items such as "Subtotals", "Dividers", "Overall discount/surcharge" as required. ![Options to add subtotals, dividers, and overall discounts or surcharges](/assets/images/quotes-add-subtotals-discounts-4f9c8d4633a7dd38414edf254f6213d2.webp) 6. At the end of the quote is another text box for adding unformatted information. Once again snippets and variables can be used for automated formatting. ![Final text box at quote bottom with snippets and variables support](/assets/images/quotes-final-text-box-eb3acbe57a2f3461f48f4ed876844923.webp) ## Quote Preview[​](#quote-preview "Direct link to Quote Preview") Activate the "Preview" button for a live view print preview while building.<br /><!-- -->Use the arrows to navigate between pages, and the zoom and refresh buttons as required. ![Preview mode with live print preview and navigation controls](/assets/images/quotes-preview-mode-ce7266419d5295691145b9efd1ec1544.webp) ## Finalize and Distribute[​](#finalize-and-distribute "Direct link to Finalize and Distribute") When complete click "Finalize" and adjust document options as required. ![Finalize button with document options for completing the quote](/assets/images/quotes-finalize-button-694705397bb2cf501b436720692e9e7e.webp) Use one of the following options to distribute the final quote: * "Send" : Email the quote to the recipient directly through freispace * "Download PDF": Generates a PDF file for distribution * "Print": For direct printing * "Save (commit only)": Commit quote, no distribution. ![Quote distribution options including send, download PDF, print, and save](/assets/images/quotes-distribution-options-5485c180d61d8ca725d290be43cd49f9.webp) tip Duplicate and edit existing quotes, rather than building each quote from scratch to save time. --- # Planning in freispace freispace has a range of different planners that allow you to plan your resources, staff and rooms in a way that suits your needs. Whether you want to plan on a day-to-day basis, or get an overview of the next few months, there is a planner for you. ## Overview of planners[​](#overview-of-planners "Direct link to Overview of planners") <!-- --> The following types of planners are available. Select one to see more details about its features and how to use it. ### ∞ Continuous[​](#-continuous "Direct link to ∞ Continuous") Main, default view. Provides a continuous timeline that allows you to plan across days, weeks and months without interruption. The timeline can be zoomed in and out to show more or less detail as needed. Unlike the other planners, the ∞ Continuous planner does not have a fixed time range. Instead, it allows you to scroll infinitely in either direction, giving you the flexibility to plan as far into the past or future as needed. Depending on the zoom level, the timeline will show different time increments, ranging from hours to days to weeks to months. ### Month[​](#month "Direct link to Month") A monthly planner that shows an overview of the entire month. This is useful for getting a high-level view of your bookings and availability. ### Week / Work Week[​](#week--work-week "Direct link to Week / Work Week") A weekly planner that shows a week at a time. The work week view is similar but only shows Monday to Friday, which can be useful for office environments. ### Day[​](#day "Direct link to Day") A daily planner that shows a single day in detail. This is useful for planning out the schedule for a specific day. ### Vertical Day[​](#vertical-day "Direct link to Vertical Day") A variation of the day planner that shows the resources in columns and the time in rows, allowing for easier comparison of resource availability throughout the day. ### Gantt[​](#gantt "Direct link to Gantt") A Gantt-style chart view of one or multiple projects, including phases, milestones and dependencies. This is useful for project planning and management. ### Milestone[​](#milestone "Direct link to Milestone") A planner that focuses on milestones, showing them in a timeline view. Great for tracking important dates and deadlines. ## Key combinations / shortcuts[​](#key-combinations--shortcuts "Direct link to Key combinations / shortcuts") <!-- --> #### Navigation[​](#navigation "Direct link to Navigation") | Windows | Mac | Action | | --------- | -------------- | --------------------------------------------------- | | `Alt`+`←` | `⌥ option`+`←` | Move to previous time period (e.g. one day earlier) | | `Alt`+`→` | `⌥ option`+`→` | Move to next time period (e.g. one day later) | | `↑` & `↓` | `↑` & `↓` | Zoom in & out | #### Dragging and resizing bookings[​](#dragging-and-resizing-bookings "Direct link to Dragging and resizing bookings") The following work only when holding down the respective key while dragging or sizing a booking, and allow you to perform additional actions: | Windows | Mac | Action | | ------- | ----------- | ------------------------------------------------------------------------ | | `Ctrl` | `⌃ control` | Duplicate (& move) | | `Alt` | `⌥ option` | Move in smaller increments (works only with hourly bookings when zoomed) | #### Selection[​](#selection "Direct link to Selection") | Windows | Mac | Action | | ------- | ----------- | --------------------------------- | | `Ctrl` | `⌃ control` | Select/deselect multiple bookings | | `Esc` | `Esc` | Deselect all | | `⌫` | `⌦` | Delete selected bookings | --- # General layout of the planners The various planners in freispace share a common layout and set of features that make it easy to navigate and use them effectively. This section provides an overview of the general layout and key features that are consistent across all planners. ## General layout and features[​](#general-layout-and-features "Direct link to General layout and features") ![freispace planner](/assets/images/freispace-planner-53d6277cd707c68a520604190436eb7e.png) 1. **Type switch**: Change the planner type, e.g. from month to week or Gantt. 2. **Layout-dependent area**: Changes depending on the selected view. In the ∞ Continuous view, you can adjust the zoom level. 3. **Live users**: See who else is currently viewing the planner or Gantt chart. The little cloud symbol indicates whether you have a live connection. 4. **Views**: Views influence the resources shown as well as the colouring and information displayed. 5. **Timezone**: Change the timezone to view the planner in a different time context. New bookings will be created in the selected timezone. 6. **Today**: Jump back to today. 7. **Filter**: Filter either the bookings or the resources shown in the planner. (Change between resources and booking using the dropdown on the right of the field.) 8. **Display settings**: User settings to influence how the planner looks and behaves. Options change depending on planner type. 9. **Month overview**: A way to quickly jump to a specific date. Highlights the currently displayed date range. 10. **Collapse buttons**: Quickly collapse or expand all resource groups. 11. **Resource list**: The list of resources shown in the planner. Depending on the view, this can be all resources or a subset of them. Right-click on a resource for some options. tip The freispace planner is always **LIVE**, meaning all changes are immediately visible to all users viewing the same planner. This allows for seamless collaboration and coordination among team members. ## Time header[​](#time-header "Direct link to Time header") ![schedule time header](/assets/images/scheduler-header-746dcab499631a7981b8e06e77451ae3.png) The time header displays the time increments for the planner. The exact format and increments depend on the zoom level and planner type. For example, in the ∞ Continuous view, you might see hours when zoomed in and days or weeks when zoomed out. tip Click on any date to quickly change planner types. Below the time header, you see a basic **utilisation** statistic. This merely shows the percentage of bookings in comparison to the total available resources. --- # Quick Start Guides Follow below guides to get an overview of the basics of freispace. <!-- --> ## [📄️1. Set up your profile](https://docs.freispace.com/user-guides/quick-start/user-profile.md) [Welcome to freispace! This guide outlines how to customise freispace to your specific needs. Navigate to freispace at app.freispace.com to login.](https://docs.freispace.com/user-guides/quick-start/user-profile.md) ## [📄️2. The planner](https://docs.freispace.com/user-guides/quick-start/resource-planning.md) [This calendar can e show thorough clicking the "Months" button on the right, or selecting "Three month calendar" in the drop down.](https://docs.freispace.com/user-guides/quick-start/resource-planning.md) ## [📄️3. Creating bookings](https://docs.freispace.com/user-guides/quick-start/create-booking.md) [You can search for "Names", "Roles", "Groups" and "Sites" e.g. Typing "Editor" will bring up a list of any staff members that have the role of "Editor".](https://docs.freispace.com/user-guides/quick-start/create-booking.md) ## [📄️4. Updating bookings](https://docs.freispace.com/user-guides/quick-start/manage-bookings.md) [The Planner page updates dynamically, displaying changes made by any user in real time without requiring a page refresh.](https://docs.freispace.com/user-guides/quick-start/manage-bookings.md) ## [📄️5. Project planning](https://docs.freispace.com/user-guides/quick-start/gantt-project-planning.md) [Plan your projects with a full-fledged Gantt chart, including milestones, phases and dependencies. Double clicking a booking will open the editing window.](https://docs.freispace.com/user-guides/quick-start/gantt-project-planning.md) ## [📄️6. Tracking time & absences](https://docs.freispace.com/user-guides/quick-start/time-tracking.md) [Time Tracking + Absence Requests: Add other relevant such as "Break duration" or Comments. Click "Save".](https://docs.freispace.com/user-guides/quick-start/time-tracking.md) ## [📄️7. Tasks & to-dos](https://docs.freispace.com/user-guides/quick-start/tasks-todos.md) [Creating Tasks and Subtasks in Freispace Dashboard: All personal tasks, and tasks assigned to you are displayed on your dashboard.](https://docs.freispace.com/user-guides/quick-start/tasks-todos.md) --- # Creating bookings 1. To create a new booking: * either click on the "Add booking" button that appears on numerous pages at the top right, ![Add booking button located at top right for creating new resource bookings](/assets/images/create-booking-add-button-013318db1a295042565bb446b45b0c93.webp) * or click\&drag directly on a resource within the "Planner" page. ![Click and drag interface on planner resource for direct booking creation](/assets/images/create-booking-click-drag-resource-ff6bb0e609c38cf7828e6f6a939ae046.jpeg) 2. In the new booking dialog window, name the booking. ![Booking name assignment field in new booking dialog window](/assets/images/create-booking-name-assignment-c12aebb1451846dd962d012c2c2cd00b.jpeg) 3. Select or adjust date and time. You can choose whether the entire rage should be one booking, or if days are to be skipped. ![Date and time range selection with options for continuous or skip-day booking](/assets/images/create-booking-date-time-range-40f44fccec1ca77c1db3230708a9127a.jpeg) 4. Select a Project. ![Project field selection for assigning booking to specific project](/assets/images/create-booking-project-field-a5aaa78ab049d3be618949c7e804644a.jpeg) 5. Assign resources: Click the "Suites, staff and resources" field. Text can be entered to filter results. You can search for "Names", "Roles", "Groups" and "Sites"<br /><!-- -->e.g. Typing "Editor" will bring up a list of any staff members that have the role of "Editor" ![Resource assignment interface with filtering for names, roles, groups, and sites](/assets/images/create-booking-resource-assignment-491eaf05ec73d578b7f64536d3672676.jpeg) Warnings are displayed when a resources are pre-booked, or when employee is absent. ![Booking conflict warnings for pre-booked resources and employee absences](/assets/images/create-booking-conflict-warnings-b55bdd98ad7610821a9824ad585955d1.jpeg) 6. The "Details" tab can be used to add further information to the booking such as, assigning a status, or writing a description. ![Details tab for adding booking status and description information](/assets/images/create-booking-details-tab-9b34382030253a688468499eedc4dd91.jpeg) 7. Create your booking by clicking "Add booking". ![Add booking save button to finalize and store new booking](/assets/images/create-booking-save-button-e6c3d5701ea1b8be07880a15ba06b33e.jpeg) --- # Project Planning using Gantt Charts Plan your projects with a full-fledged Gantt chart, including milestones, phases and dependencies. ## Navigation[​](#navigation "Direct link to Navigation") 1. Navigate to the "Planning" Tab of the project you want to work on. ![Planning tab navigation for accessing project gantt chart interface](/assets/images/gantt-planning-tab-navigation-06909904c935f00b932a36c03b2d326d.webp) 2. To adjust the time range click on "Display settings" move the slider as required. ![Display settings slider for adjusting gantt chart time range view](/assets/images/gantt-display-settings-slider-25ec54b3384d40a3d88cbc81528a46be.webp) 3. Use the buttons on the top left to show or hide "Subprojects" or "Phases" ![Toggle buttons for showing or hiding subprojects and phases in gantt view](/assets/images/gantt-subprojects-phases-toggle-e993d745dac5b7edc1546beab4853069.webp) 4. Clicking a booking will open the details overview. <br /> <!-- --> Double clicking a booking will open the editing window. ![Booking click interaction showing details overview and double-click editing](/assets/images/gantt-booking-click-details-eb24eb929191753117ed167094be16e4.webp) 5. Bookings can also be accessed by clicking the name on the right. ![Booking name access method for alternative gantt chart navigation](/assets/images/gantt-booking-name-access-72d076299c2ab0ce57ed1957fd69fd76.webp) ## Adding new entries[​](#adding-new-entries "Direct link to Adding new entries") 6. New bookings can be entered by clicking the "Add booking" button at the top right. ![Add booking button in top right for creating new gantt chart entries](/assets/images/gantt-add-booking-button-2a1b05af616faa525d62bd57ebc12668.webp) 7. New "Items", "Phases" and "Milestones" can be added using the field at the top center. <br /> <!-- --> Enter a name for the new entry, select the type of element and click "Add" ![Add items, phases, and milestones interface at top center of gantt chart](/assets/images/gantt-add-items-phases-milestones-0df11cd148d42f4fcdf7f2efa809b00c.webp) 8. Items ca be rearranged within the gantt chart by clicking and dragging the three dots to the left of the name. ![Item rearrangement using drag handles with three dots for gantt organization](/assets/images/gantt-rearrange-items-drag-5210815d52eda79b397107209b91f85e.webp) ### Items vs. Bookings[​](#items-vs-bookings "Direct link to Items vs. Bookings") 9. Items are similar to bookings but do not allocate any resources. They can be used for example to add non-actionable information to a schedule, such as a "Blocker." or for drafting schedules <br /> <!-- --> If required, an item can be converted to a booking at a later time. <br /> <br /> <!-- --> To do this open the edit dialog on the Item, Click "Convert to booking" assign relevant "Suites, staff and resources" and Click "Add booking" ![Convert item to booking interface with resource assignment options](/assets/images/gantt-convert-item-to-booking-6a566f9070667c5934f743961d09d976.webp) ### Phases[​](#phases "Direct link to Phases") 10. "Phases" can be added within the gantt chart to organise project information. ![Phase organization feature for structuring project information in gantt](/assets/images/gantt-phases-organization-952b53ce73b6cd4ab674410854096d33.webp) 11. Once a new "Phase" has been added to the chart, the location can be changed. <br /> <!-- --> Bookings can be added into a Phase by dragging and dropping. <br /> <!-- --> A Phase can be added within another Phase to build layers. <br /> <!-- --> Click on the arrow next to the Phase to hide or show the encapsulated bookings. ![Phase management with drag-drop bookings and layered organization structure](/assets/images/gantt-phase-management-layers-d0a2fe715875851a55fb4caa4a9f2736.webp) ### Milestones[​](#milestones "Direct link to Milestones") 12. Add a new "Milestone" through the field at the top. ![Add milestone feature for marking important project deadlines in gantt](/assets/images/gantt-add-milestone-9ae686a2044d755858469c5545683b98.webp) 13. Once added adjust the colour, date, and other fields as required. ![Milestone configuration options for color, date, and field customization](/assets/images/gantt-milestone-configuration-c908acdaac1d475e33076626b3fa6d9c.webp) 14. Milestones can be connected with other steps in the gantt chart for clarity ![Milestone connections linking project steps for improved gantt chart clarity](/assets/images/gantt-milestone-connections-aff04ec72aaf14a81a81961ea91e238d.webp) ## Milestone-only view[​](#milestone-only-view "Direct link to Milestone-only view") 15. Navigate to the planner tab. ![Planner tab header navigation for accessing gantt planning features](/assets/images/gantt-planner-tab-header-beb5889cae070d9a656c77cac33ae986.jpeg) 16. Select "Project Gantt" or "Milestones" as required from the drop down menu on the top left. ![View type dropdown for selecting project gantt or milestones display mode](/assets/images/gantt-view-type-dropdown-fd9c3ce418fd97ee18850f10a9a15353.webp) 17. Select any projects you wish to view or work on from the drop down on the top right. ![Project selection dropdown for choosing specific projects to view in gantt](/assets/images/gantt-project-selection-dropdown-fead54a142c8fdb5905a322471bad0fa.webp) --- # Managing Existing Bookings #### Managing Bookings[​](#managing-bookings "Direct link to Managing Bookings") 1. In most cases existing bookings are most easily managed from with the planner page. <br /> <!-- --> The Planner page updates dynamically, displaying changes made by any user in real time without requiring a page refresh. ![Planner interface showing dynamic booking management with real-time updates](/assets/images/manage-bookings-planner-interface-5e45595f003b02ab9b05ac975e59f6cd.jpeg) 2. You can "Click & Drag" Bookings to assign them to different resources, or change the booked time and date. ![Click and drag functionality to move bookings between resources and time slots](/assets/images/manage-bookings-click-drag-move-75748dc7879ef365e87d4ff4804cbfa0.webp) 3. Use "CNT+Click\&Drag" to duplicate a booking to a new time, or resource. ![Control click and drag to duplicate bookings to new time slots or resources](/assets/images/manage-bookings-ctrl-click-duplicate-41b1cae850d7889cfd18764ed84f62e3.webp) 4. "Shift+Click\&Drag" can be used to draw a box and select multiple bookings. ![Shift click and drag to select multiple bookings with box selection](/assets/images/manage-bookings-shift-drag-select-50e95a3188f913e392dcfea5857228cc.jpeg) 5. You can also hold "Shift" while clicking to select multiple individual bookings. ![Shift click to select multiple individual bookings for batch operations](/assets/images/manage-bookings-shift-click-multiple-8ff134d91fd0ddbff356d22893511d2f.jpeg) 6. Once selected you can "Click and drag" to change the date and time of multiple bookings. ![Drag multiple selected bookings to change their date and time simultaneously](/assets/images/manage-bookings-drag-multiple-9f16d0168e402a957b725f443ee810d1.webp) 7. Single click on a booking will open up the full details. <br /> <!-- --> A double click will open the editing dialog to make changes. ![Single click for booking details and double click for editing dialog](/assets/images/manage-bookings-single-double-click-82d1433db0e49f7a62a97cac59130dd6.webp) 8. A number of tools can be accesses directly through a right click on the booking. ![Right-click context menu showing booking management tools and options](/assets/images/manage-bookings-right-click-menu-14b0346866c3cbfcc93cc73d9e8733fe.jpeg) 9. Remove days can be used to cut out days that shouldn't be included in the booking. ![Remove days feature to exclude specific days from booking duration](/assets/images/manage-bookings-remove-days-f794d324723f4f3a9da1b8c3ae7b1285.jpeg) 10. The "Status" of the booking can be changed ![Booking status change options for updating project phase or completion](/assets/images/manage-bookings-change-status-3372487e1781c7b24389bfa48936f6a7.jpeg) 11. "Split booking here" separates the booking into two parts that can be edited separately. ![Split booking feature to divide booking into two separate editable parts](/assets/images/manage-bookings-split-booking-16edca136125deef5cffc705a337451d.jpeg) 12. "Detach day" will separate one day of the booking. ![Detach day option to separate single day from multi-day booking](/assets/images/manage-bookings-detach-day-9a2e08783472c65764e64581a480e229.jpeg) 13. "Split into days" will split the entire booking into individual days. ![Split into days feature to convert booking into individual daily bookings](/assets/images/manage-bookings-split-into-days-0565809633cb76bd07bc4db6831db77a.jpeg) 14. With multiple bookings selected "Right-Click" and select "Edit..." to make bulk updates. ![Bulk edit option for making changes to multiple selected bookings](/assets/images/manage-bookings-bulk-edit-ba6f3e0d22426de435a5946a32087142.jpeg) 15. Change to bookings, and bulk updates can also be carried out through the "Bookings" tab in the project pane. ![Project tab bookings view for managing and updating booking information](/assets/images/manage-bookings-project-tab-00d798442648eb41be810f664287226a.webp) 16. To make bulk updates, select the checkboxes next to the bookings you wish to modify, then select the edit symbol. ![Checkboxes for selecting bookings and edit symbol for bulk updates](/assets/images/manage-bookings-bulk-update-checkboxes-e763068b2b5e0b71988a5423b7944ea6.webp) #### Linked Bookings[​](#linked-bookings "Direct link to Linked Bookings") 17. When a new booking is created with weekdays removed, these bookings will display a chain symbol to show that they are linked together. ![Chain symbol indicating linked bookings with weekdays removed](/assets/images/manage-bookings-linked-chain-symbol-b244a9411fdc154097c99f80deabdf92.jpeg) 18. When splitting an existing booking you can choose whether the separate parts should remain linked or not. Click "Split & link" ![Split and link option to maintain connection between separated booking parts](/assets/images/manage-bookings-split-link-option-d314bc0de99bdb763f109852320b7ed4.webp) 19. When editing a linked booking, you can choose to edit just the single booking, or all of the linked bookings. ![Edit options for single booking or all linked bookings in the chain](/assets/images/manage-bookings-edit-linked-options-7b113e9d6da6f162fbf0280f73448e1f.webp) 20. If the "Edit all bookings" option is selected, any changes made will effect all of the bookings in the chain. 21. Tasks added to a booking in a chain will be applied across the chain.<br /><!-- -->If the task is checked off on one booking, it will be checked off for the entire chain. ![Chain task management showing tasks applied across linked bookings](/assets/images/manage-bookings-chain-tasks-db72c1cdca0c2e874162b32a6789cc53.webp) 22. Click this icon. ![Icon reference for booking management interface navigation](/assets/images/manage-bookings-icon-reference-981f8261dd769c8c85b53e27823a91cc.jpeg) --- # Navigation and Customisation in Planner #### Planner Navigation[​](#planner-navigation "Direct link to Planner Navigation") 1. Click the button on the top left to change time viewing modes. ![Time viewing modes button for switching planner display periods](/assets/images/planner-time-viewing-modes-5d4b9826548f39053b10b528d6d603f5.webp) 2. In the "Continuous" mode, clicking on the slider alters the time frame shown. ![Continuous mode slider for adjusting planner time frame display](/assets/images/planner-continuous-mode-slider-a603bd8769f30a826030b1dcf5e858a1.webp) 3. You can switch between resource lists, or create new new ones, through the dropdown menu on the right. ![Resource lists dropdown menu for switching between and creating new views](/assets/images/planner-resource-lists-dropdown-83d1fb6995a483c444a7c6b4d5417dd6.webp) #### Display Settings[​](#display-settings "Direct link to Display Settings") 4. When viewing the planner on a large timescale you can use the "Enforce minimum visual booking width" option to display short bookings more visibly. ![Minimum booking width option for improving visibility of short bookings](/assets/images/planner-minimum-booking-width-a6dcc0536eb50bd773c02000229dd776.webp) 5. Fullscreen can be toggled using the button on the right of the planner ![Fullscreen toggle button for expanding planner to full browser view](/assets/images/planner-fullscreen-toggle-64fa206ace5df8558c0a9faa96ec940c.webp) 6. A calendar can displayed for quickly navigating to a specific date. <br /> <!-- --> This calendar can e show thorough clicking the "Months" button on the right, or selecting "Three month calendar" in the drop down. ![Calendar navigation interface for quick date selection and three-month view](/assets/images/planner-calendar-navigation-0aaab7653809cfab9c38d4b8f28374ad.webp) 7. The "Condensed view" can be activated to bring more resources with limited information on one screen. ![Condensed view option for displaying more resources with simplified information](/assets/images/planner-condensed-view-81de43b0079c6e0a9723a48a5d56385a.webp) 8. Toggle "Weekdays" and "Week numbers" to show and hide this information. ![Weekdays and week numbers toggle controls for calendar display options](/assets/images/planner-weekdays-week-numbers-b22631df5481e2ac5b9fa2a07b016e25.webp) 9. Use the "Collapse bookings" option to merge the display of concurrent bookings. <br /> <!-- --> Clicking a concurrent booking will display the individual bookings and the "+" & "-" buttons next to the resource name can be used to show or hide the bookings. ![Collapse bookings feature for merging concurrent booking displays with expand controls](/assets/images/planner-collapse-bookings-f24742dc52242674c5ec934fd3f2af24.webp) 10. Toggle the "Show times on drag" option to display times while dragging a booking. ![Show times on drag toggle for displaying time information during booking moves](/assets/images/planner-show-times-on-drag-a3f3f0239128d87a37ee999340565b66.webp) #### Custom Views[​](#custom-views "Direct link to Custom Views") 11. To create a new resource list view in the planner "Create new\...", then select and rooms, people, or resources you wish to see in the view. <br /> <!-- --> Give the list a name and decide if it should be private or to share it with your team. ![Custom resource list creation interface for selecting rooms, people, and resources](/assets/images/planner-custom-resource-lists-f9cd9423ca9aaf025e443729b471244a.webp) 12. To customise the Information displayed within a view, click on the gear symbol next to the name. <br /> <!-- --> Navigate to "Display settings", open the list of "Available Options". <br /> <!-- --> Copy and past the required options, including the brackets, to the relevant fields then select update. ![Display settings customization interface with available options and field configuration](/assets/images/planner-display-settings-customization-1cbfde52dbf2b4fca8af29e3339bdb80.webp) 13. The colours bookings are displayed in can also be customised. <br /> <!-- --> Click the gear symbol next to the name. <br /> <!-- --> Navigate to "Display settings", in the "Booking colours" panal open the "available options" tab. <br /> <!-- --> Copy and past the required options, including the brackets, to the relevant fields then select update. ![Booking colors customization panel with available options for visual styling](/assets/images/planner-booking-colors-customization-752cbb0eecff8ea7a3efe5fb9d0043dd.webp) #### Project Gantt[​](#project-gantt "Direct link to Project Gantt") tip For a comprehensive overview of Gantt planning, visit the Project Gantt page. 14. Access Gantt-style planning by selecting "Project Gantt" in the drop dow menu on the top left. <br /> <!-- --> Select the projects you wish to view in the drop down on the top right. ![Project gantt access through dropdown menu with project selection options](/assets/images/planner-project-gantt-access-e1065c893890fc9bdfab4cd4b603a21c.webp) #### Milestone Overview[​](#milestone-overview "Direct link to Milestone Overview") 15. For an overview of Milestones, select "Milestones" from the drop down menu on the top left. <br /> <!-- --> Select the Projects you wish to view from the drop down on the right. ![Milestone overview access with dropdown menu for project milestone viewing](/assets/images/planner-milestone-overview-2d88958a691b1b4cbd19f6dbc6892e21.webp) --- # Creating Tasks and Subtasks in Freispace Dashboard ## Tasks Overview[​](#tasks-overview "Direct link to Tasks Overview") 1. There are three different ways the task be created in freispace. Personal Tasks, Project tasks, and Bookings tasks. <br /> <!-- --> All personal tasks, and tasks assigned to you are displayed on your dashboard. ![Dashboard overview showing personal tasks, project tasks, and booking tasks](/assets/images/tasks-dashboard-overview-26145385379a42cbc856511c09bd6cd9.jpeg) 2. Completed tasks can be checked off on the left. ![Task completion checkbox for marking tasks as finished](/assets/images/tasks-completion-checkbox-14508969a5e1acda53d628cb4c00c917.jpeg) 3. The settings option can be used to show or hide completed tasks, or collapse subtasks by default. ![Task settings options for hiding completed tasks and collapsing subtasks](/assets/images/tasks-settings-options-fff9e6ec1514efd9b7b87bf6c2ee22b8.webp) ## Personal Tasks[​](#personal-tasks "Direct link to Personal Tasks") 4. Personal tasks can be created directly on the dashboard. Click "Add task". Enter a name and click enter. ![Personal task creation interface with add task button on dashboard](/assets/images/tasks-personal-add-task-5760db76b9a0968af85a7528cad8e2cc.jpeg) 5. Once a task has been added, it can be assigned a due date, a priority, or a subtask can be added by accessing the menu button on the right. ![Task menu options for setting due dates, priorities, and adding subtasks](/assets/images/tasks-menu-options-3bba1d3cd7f19fdd0458b042ce4196e9.webp) ## Project Tasks[​](#project-tasks "Direct link to Project Tasks") 6. Tasks can also be added directly to a project. to do this first navigate to the "Overview" tab of the desired project. ![Project overview tab for accessing project-specific task management](/assets/images/tasks-project-overview-tab-48f80fd94f68f86423fbc307131bbe6c.jpeg) 7. Click "Add task" in the "To do" field. ![Add task button in project to-do field for creating project tasks](/assets/images/tasks-project-add-task-6691646f9f4efd3f238fa7e1f0255aa5.jpeg) 8. Once a task has been created, you can add sub-tasks, Set a due date, priority, or assign the task to a team member through the menu button on the right. ![Project task menu options for subtasks, due dates, priorities, and assignments](/assets/images/tasks-project-menu-options-31482338adafe2652d4f32e43b6fe370.webp) ## Add Tasks to a booking[​](#add-tasks-to-a-booking "Direct link to Add Tasks to a booking") 9. the third way to add a task is by adding a task to a booking. First click the desired booking to open the info tab. ![Booking info tab interface for accessing booking-specific task creation](/assets/images/tasks-booking-info-tab-98a58da26c4cdc570f4cf30eb68fcfd4.jpeg) 10. Select "Add task" from the bottom of the tab. ![Add task button at bottom of booking tab for creating booking tasks](/assets/images/tasks-booking-add-task-defc79de7c6d1a4868360f7a8a46a7d3.jpeg) 11. Give the task a name, then use the menu button to add subtasks, a due date, Priority, and assignee as required. ![Booking task management with options for subtasks, due dates, and assignees](/assets/images/tasks-booking-task-management-be1e18d21af33fb0a88bd3c46a37a08e.webp) --- # Time Tracking + Absence Requests ## Time Tracking Entries[​](#time-tracking-entries "Direct link to Time Tracking Entries") 1. If time tracking has been activated for your account, you can use the clock at the top right to track time while working. Just click on the clock and select "Start" to activate. ![Clock icon at top right with start button to begin time tracking](/assets/images/time-tracking-start-button-e818cdb5bfb8c56724fa4e7272feb262.webp) 2. Once you have completed you a task click on the clock again, select "Save" and fill out the "Project" and "Activity" fields then save. ![Time tracking save form with project and activity field completion](/assets/images/time-tracking-save-form-01a11e1d2b7c12c097c76b9e305335d5.webp) 3. Time can also be manually input through the "Time tracking" module. ![Time tracking module interface for manual time entry](/assets/images/time-tracking-module-interface-a6ddc69e3756770354c740633b8f84fd.jpeg) 4. Within the "Time Tracking" window there are three ways to add an entry: 5. "Click\&Drag" in the "Tracked Time" Window to select a duration. 6. Manually input a "Start" and "End" time 7. Input a "Duration" with no defined start or end time. ![Three time entry methods: click and drag, start/end times, or duration input](/assets/images/time-tracking-entry-methods-ff5f4e266e481fb723532d1bc6905614.webp) 5. Fill in the mandatory "Project" and "Activity" fields. <br /> <!-- --> Add other relevant such as "Break duration" or Comments. <br /> <!-- --> Click "Save" ![Project and activity fields form with optional break duration and comments](/assets/images/time-tracking-project-activity-fields-28b6a50d3a69249a9ee06de0b9f4d957.webp) 6. To add an entry for a previous date, choose "Yesterday" or click "Select..." and pick the date from the calendar. ![Date selection interface with yesterday option and calendar picker](/assets/images/time-tracking-date-selection-fc04ffb57ee787280afe2cc07837eb1c.jpeg) ## Adding Additional Services[​](#adding-additional-services "Direct link to Adding Additional Services") 7. When configured additional billable services can be added while time tracking. <br /> <!-- --> Select the services you wish to add, specify values for each of the units and click "save". ![Additional billable services selection with unit value specifications](/assets/images/time-tracking-billable-services-48f614a6dd8a8ab666ef1b5478549360.webp) ## Entering Holidays and Absences[​](#entering-holidays-and-absences "Direct link to Entering Holidays and Absences") 8. To enter a new holiday request click the "Holidays" tab. <br /> <!-- --> Enter "Start" and "End" date and select "Save" ![Holiday request form with start and end date fields](/assets/images/time-tracking-holidays-form-7be3c3266e3d81bf29a9a6950ee42e61.webp) 9. On the right hand side you can view your booked holidays and your yearly holiday allowance. ![Holiday allowance display showing booked holidays and yearly allocation](/assets/images/time-tracking-holiday-allowance-dd3893e9db71d6f9b8e61cbff2ce1768.webp) 10. To add other types of absence select the "Absence" tab. <br /> <!-- --> Select the "Type of absence" you require from the drop down menu. <br /> <!-- --> Fill in the "Start" and "End" fields. <br /> <!-- --> Click "Save" ![Absence request form with type dropdown and start/end date fields](/assets/images/time-tracking-absence-form-c22b5f4600fab5fccb65f3f8da20d9a3.webp) ## Overview[​](#overview "Direct link to Overview") 11. Click "Overview" to view your time tracking details. ![Overview button to access comprehensive time tracking details](/assets/images/time-tracking-overview-button-7919df2d52030aa36fac2c8918e47c76.jpeg) 12. At the top left of the calendar you can see your time and holiday, balances. ![Calendar display showing time and holiday balance information](/assets/images/time-tracking-balance-display-f3fb3db99f24ce54b55963c5d3791760.jpeg) 13. Clicking on a day will bring up open a window with details of absences or time tracked. ![Daily details popup window showing absences and tracked time information](/assets/images/time-tracking-daily-details-0338df959f0aba3562ff374fbd7c8dc9.webp) 14. Entries can be added or removed from within the details tab. ![Entry management interface for adding or removing time tracking entries](/assets/images/time-tracking-entry-management-985fce1f933f7b3639e96db5e683da2c.webp) 15. Click on the "Monthly balance" to view your time balance. ![Monthly balance view displaying comprehensive time tracking summary](/assets/images/time-tracking-monthly-balance-c75a5f2a6e52d069c00b50df33f6fe52.webp) 16. Click "List view" to view a list of all time tracking entries <br /> <!-- --> This list can be filtered by "Project", "Activity" or "Date" by selecting "Filters" ![List view interface with filtering options for project, activity, and date](/assets/images/time-tracking-list-view-filters-966468deb3412f262f4e8318719146c3.webp) --- # Set up your profile Welcome to freispace! This guide outlines how to customise freispace to your specific needs. ## Login[​](#login "Direct link to Login") Navigate to freispace at app.freispace.com to login. info Depending on your team settings, you might have a team-specific link to login. This is usually the case if your team uses Single-Sign-On, meaning you sign in using your company credentials, e.g. your Microsoft or Google account. ## Light/Dark Mode[​](#lightdark-mode "Direct link to Light/Dark Mode") To switch between "Auto", "Dark" or "Light" mode use the button on the bottom left of the screen, within the navigation. ![Light/Dark mode toggle button in the bottom left navigation](/assets/images/light-dark-mode-toggle-6f9f77ce23ba67fc4621d8dd8e234671.jpeg) info "Auto" uses your system settings to determine light or dark mode. ## Hiding sensitive information[​](#hiding-sensitive-information "Direct link to Hiding sensitive information") Especially when working in a shared office space, you might not always want to reveal sensitive data like personal absences, financial data and others. freispace offers a handy toggle switch to blur sensitive information, at the bottom of the navigation bar. ![Option to hide sensitive information](/assets/images/hide-sensitive-information-183bdbff640af62aca4496a8b4bf337b.png) Some areas won't be blurred for logical reasons. Such areas include form fields and viewing or editing quotes and invoices. info For accessibility reasons, form fields will never be blurred. ## User Settings[​](#user-settings "Direct link to User Settings") To access user settings click on the user icon at the top right. ![User icon in the top right corner for accessing settings](/assets/images/user-icon-click-140f4f52efa11a0d244411ba9127788a.jpeg) ### Update name and profile image[​](#update-name-and-profile-image "Direct link to Update name and profile image") Update your personal information on the "Profile" tab. ![Profile tab showing personal information fields](/assets/images/profile-tab-8e73ffa965d39f92852d4259f2e90f55.jpeg) ### Change language and formatting of numbers/dates[​](#change-language-and-formatting-of-numbersdates "Direct link to Change language and formatting of numbers/dates") Language and regional settings can be accessed through the "Settings" tab. ![Settings tab with language and regional preferences](/assets/images/settings-tab-afe7e4d2eb70b789b39ebc6f209d257c.jpeg) While the **Language** setting controls the UI language, the **Locale** determines how numbers, dates and currencies are formatted. Example: | Locale | Date | Weekday | Time | Number | | ------ | ---------- | ------- | ------- | -------- | | en-GB | 25/10/2025 | Monday | 14:00 | 1,000.00 | | en-US | 10/25/2025 | Monday | 2:00 PM | 1,000.00 | | de-DE | 25.10.2025 | Montag | 14:00 | 1.000,00 | freispace tries to determine the correct locale when you first create your account based on your browser's setting, however this might be off in case that you set your computer to a different language or region. ## Updating your password[​](#updating-your-password "Direct link to Updating your password") Use the "Account" tab to change your password or delete your account. ![Account tab with password change and account deletion options](/assets/images/account-tab-fe6209e56c7b56f039196d6b3e62e53f.jpeg) --- # Workload & Capacity Planning freispace offers a Workload planner that helps you analyse th workload of people, rooms and resources over a period of one to six months. The view is great to get a quick overview over times of idle times as well as overload phases. ## Visualisation[​](#visualisation "Direct link to Visualisation") freispace shows you a visual indication of the daily workload, absences, vacations and public holidays of any of your staff members and resources, all within one view. ![Staff Workload Planning for Post-production](/assets/images/staff-workload-planner-cc51b5297ec813539b593f57184c022b.png) By expanding a resource, you can see a preview of any bookings causing the workload. ![Post-production workload and bookings](/assets/images/staff-workload-and-bookings-5b344c49debf104fa21c78db1aa33288.png) Please note this is a view-only mode, and thus no changes can be made to bookings. ### Display methodology[​](#display-methodology "Direct link to Display methodology") #### Colouring[​](#colouring "Direct link to Colouring") Workload is shown as a graph. Blue highlights any workload between 0% and 119%. Any workload above 120% is shown with a red graph. | Workload | Colour | Reasoning | | ---------------------------- | ------ | ---------------------------------------------------------------------- | | `< 120 %` (below 120 %) | blue | No overload, or on the slightly high note that may be okay temporarily | | `>= 120 %` (120 % and above) | red | Overload that could lead to problems | #### Values[​](#values "Direct link to Values") On working days for staff and on any day for resources, we display the workload in percent. For days that staff are not expected to work (e.g. weekends, public holidays, vacations), we will display the amount of planned work hours instead. | Type | Day type | Display type | | ------------ | ---------------------------------------------- | ------------ | | Suites/rooms | any | Percentage | | Resources | any | Percentage | | Staff | Working days | Percentage | | Staff | Non-working days (as per Working hour setting) | Hours | | Staff | Full-day vacations & absences | Hours | | Staff | Public holidays | Hours | Half-day absences for staff count as working days, so a percentage will be shown. Only absences that do not require time tracking (e.g. sick days) are taken into account. Absences where staff would still be available (e.g. home office) will *not* appear in this view, as they do not have an impact on workload. ### Calculation of values[​](#calculation-of-values "Direct link to Calculation of values") #### Case 1: All-day bookings[​](#case-1-all-day-bookings "Direct link to Case 1: All-day bookings") All-day bookings use the following calculation basis: | Type | Hours | Workload | | -------------------- | ------------------------------------- | -------- | | Staff | as per staff working hours (e.g. 8 h) | `100 %` | | Other resource types | `24 h` | `100 %` | ##### Staff members[​](#staff-members "Direct link to Staff members") On staff members, all-day bookings are assumed to consume a staff's full work day. ##### Rooms & Resources[​](#rooms--resources "Direct link to Rooms & Resources") For any resource type other than people, a full-day booking is assumed to consume the entire day, and is calculated as being 24h. #### Case 2: Multi-day hourly bookings[​](#case-2-multi-day-hourly-bookings "Direct link to Case 2: Multi-day hourly bookings") Hourly bookings that span more than 24 hours will typically be calculated based on the start and end time of a booking. Example: **Mon 10am - Tue 4pm** ⇒ 6 hours *per day* | Type | Hours | Workload | Workload calculation basis | | -------------------- | ----- | -------- | ---------------------------------------- | | Staff | `6 h` | `75 %` | Staff working hours (8h in this example) | | Other resource types | `6 h` | `25 %` | 24 hours | #### Case 3: Hourly bookings[​](#case-3-hourly-bookings "Direct link to Case 3: Hourly bookings") Hourly bookings are calculated based on their actual booking length. #### Staff members[​](#staff-members-1 "Direct link to Staff members") Quick note on staff members: * If a staff member has working times set up, these will be used for any calculation * Should a staff member not have working times (e.g. freelancers), the team default settings will apply: <!-- --> * `Workday duration` from the general team settings * applied to *Monday to Friday*, with weekends being `0 h` #### Individual resource times[​](#individual-resource-times "Direct link to Individual resource times") If resources have specific times attached, those will always override booking start & end times. In addition, when a resource has individual times, the calculation will always assume hourly bookings. A resource on an all-day booking would therefore be treated as outlined in Case 2 or Case 3. #### Timezones[​](#timezones "Direct link to Timezones") When viewing the workload report in a different timezone than the individual booking timezone, the times are shifted accordingly. This may result in skewed workload for staff members and resources that reside in a different time zone than the one you're looking at the planner in. ## Exports[​](#exports "Direct link to Exports") You may export both Excel spreadsheets (xslx) and PDFs. ![Export workload as Excel](/assets/images/export-staff-workload-bd4809c7aee83b15ac601dedf8f199bc.png) You may select whether the workload within the export should be in percent or hours. Within exported Excel files, cells with a high workload will have a red highlighted background. ---