Corteza Admin Manual

Corteza Admin Panel


To access Corteza Admin Panel, click on a new tab and select it from the list of available applications.

You must have Administrator rights to access and edit this part of Corteza system.


In the dashboard section you can overview some basic statistics of the usage of the Corteza system:

  • Number of total active, suspended and deleted users

  • Number of total active, archived and deleted roles

  • Number of total active and deleted applications



A user is someone who can log in to the Corteza system.

Each user has Email, Full name and Nickname (handle). Additionally, each user has a username (=email) and password to enable them to log in to the system. In the list of users an admin can also see the timestamp when user was created and updated.

In the list of users an admin is allowed to:

  • Filter users by name or email using search input on the top

  • Filter deleted and suspended users

  • Edit existing users

  • Create new users

User Management

Create a new user

To create a new user click on "New" button on top right corner above the User list.

Fulfill the Basic information and hit submit. You can set a user a password to log in (but he’ll need to confirm his email after the first attempt to log in). Alternatively, a user can request a "Forgotten password" on login screen and set a password on his own.

Edit a user

To edit a user click on an "Edit" icon on the right side of the users list.

In this screen you can:

  • Change user’s basic information (email, full name, handle)

  • Delete or suspend a user

  • Set a user a new password

  • Add a user to a certain role



A role allow you to define groups of users with particular access rights. Role-Based Access Control (RBAC) is used for all applications across Corteza system.

The role is assigned to an individual user.

In the list of roles an admin is allowed to:

  • Filter roles by name using search input on the top

  • Filter deleted and suspended roles

  • Edit existing roles

  • Create new roles

Roles Management

Create a new role

To create a new role click on "New" button on top right corner above the Roles list.

Fulfill the Basic information and hit submit. Once a role is created, you can start assigning members to it.

Edit a role

To edit a role click on an "Edit" icon on the right side of the roles list.

In this screen you can:

  • Change role’s name and handle

  • Delete or archive a role

  • Add users to a selected role



You can create and manage applications inside Corteza One.

By default the following applications are included in the system:

  • Messaging

  • Low Code

  • CRM

  • Jitsi Video

  • Corteza Admin Area

  • Google Maps

In the list of applications an admin is allowed to:

  • Filter applications by name using search input on the top

  • Filter deleted applications

  • Edit existing applications

  • Create new applications

Applications Management

Create a new application

To create a new role click on "New" button on top right corner above the Applications list.

Set an application name and mark it as enabled so it becomes visible in the list of applications. In the next step you can add an URL to the favicon and logo and assign application URL.

You can add any Namespace as a separated application. Additionally, you can add as an application all external websites and web applications that don’t have iFrame access denied.

Edit an application

To edit an application click on an "Edit" icon on the right side of the applications list.

In this screen you can:

  • Change application’s name

  • Control application’s visibility in the list of applications

  • Delete an application

  • Update logo and favicon URLs

  • Change the application URL

System Settings

Internal Authentication

In this section you can control the following:

  • Internal authentication enabled

  • Password reset enabled (if unchecked, users won’t be able to reset their password)

  • Signup email confirmation required (if unchecked, users can log in to the system right after the registration, without confirming their email)

  • Signup enabled (if unchecked, admins will add users manually in the Admin panel and nobody will be able to register on their own)

Authentication Email Settings

In this section you can set:

  • Sender email address (i.e.

  • Sender name (i.e. Organization Ltd.)`

Email templates:

Email templates used for authentication purposes are the following:

Email confirmation HTML template
  <h2 style="color: #1397CB;text-align: center;">Confirm your email address</h2>
  <p>Follow <a href="{{ .URL }}" style="color:#1397CB;">this link</a> to confirm your email address.</p>
  <p>You will be logged-in after successful confirmation.</p>
Password reset HTML template
<h2 style="color: #1397CB;text-align: center;">Reset your password</h2>
<p>Follow <a href="{{ .URL }}" style="color:#1397CB;">this link</a> and reset your password.</p>
<p>You will be logged-in after successful reset.</p>

We recommend using Codepen or similar browser-based tools to preview the layout of the template before changing the template.

  • {{.EmailHeaderEn}} has to be at the beginning of each template

  • {{.EmailFooterEn}} has to be at the end of each template

  • {{ .URL }} is used as a href parameter for the confirmation link.

Email Settings

In this section you can control the header and the footer template which are wrapped around all emails sent from the system.

Email Header HTML Template
<div style="width:100%;min-height:100%;margin:0;padding:0;color:#3a393c;font-size:12px;line-height:18px;font-family:Verdana,Arial,sans-serif">
  <table width="100%" align="center" style="width:100%;height:100%;border-collapse:collapse;border:0;padding:60px" border="0" cellspacing="0" cellpadding="0" summary="">
        <td valign="top" align="center" style="padding: 20px 0;">
          <table width="800" cellspacing="0" cellpadding="0" border="0">
                <td width="800" bgcolor="#ffffff" style="color:#3a393c;font-size:14px;line-height:20px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;text-align:left">
                  <table width="800" cellspacing="0" cellpadding="0" border="0">
                      <tr style="background-color:#ffffff;height:50px;">
                        <td style="border-bottom:2px solid #1397CB;">
                          <a href="{{ .BaseURL }}" style="text-decoration:none" target="_blank">
                            <img src="{{ .Logo }}" style="display: block;margin: 0 auto;padding: 10px;">
                        <td width="800" style="padding:40px 30px">
Email Footer HTML Template
                        <td style="padding:30px;border-top: 1px solid #F3F3F5">
                          <p>If you have any questions, please contact <a href="mailto:{{ .SignatureEmail }}" style="color:#1397CB;">{{ .SignatureEmail }}</a>.</p>
                          <p>We hope you enjoy using Corteza!</p>
                          <p>Best regards, <br>
                          {{ .SignatureName }}</p>

We recommend using Codepen or similar browser-based tools to preview the layout of the template before changing the template. Pay attention to variables used in the default template(i.e. {{.BaseURL}}, {{.SignatureEmail}}, …​)

External Authentication

Check the "Enable external authentication" box if you wish to allow your users to register and log in using external providers. Currently, we support Google, Facebook, Github and LinkedIn authentication.


To enable Google authentication you need to create a client ID:

  1. Go to Google Sign-in Guide and click on "Configure a project" button

  2. Select and existing project or create a new one

  3. Set a product name (i.e. Corteza)

  4. https://)

  5. Copy and paste both Client ID and Client Secret fields to Corteza Admin panel and hit submit


To enable Facebook authentication you need to create Facebook app to receive Client key and Secret:

  1. Go to Facebook for developers website, click on "Add a new app" and choose a name of the app (i.e. Corteza) or select and existing app

  2. In the list of available products search for "Facebook Login" and click on "Set Up" button

  3. Select "Web" platform and paste the URL where your Corteza system is running

  4. Go to "Settings" and then "Basic" in the left sidebar

  5. Copy and paste "App ID" to "Client key" inside Corteza Admin panel

  6. Copy and paste "App Secret" to "Secret" inside Corteza Admin panel and hit Submit


To enable Github authentication you need to register Github application to get unique Client ID and Client Secret:

  1. Go to this link and create a new OAuth application

  2. Copy and paste both Client ID and Client Secret fields to Corteza Admin panel and hit submit.


To enable LinkedIn authentication you need crete a LinkedIn application:

  1. Go to this form, fill out the form and click on "Create app"

  2. Go to Auth section and copy and paste both Client ID and Client Secret fields to Corteza Admin panel and hit submit.

Other Settings

Low Code Settings

User Interface

In this section you can select:

  • To show a list of all available namespaces in alphabetical order in the left sidebar of the Low Code

  • If you wish the left sidebar to be open by default or minimized

File Upload

In this section you can set a maximum file upload size (default is 10 MB) and file type whitelist for Low Code pages and records.

Messaging Settings

User Interface

In this section you can select:

  • To allow users to use emoji

  • To enable Messaging notifications

  • If notifications are enabled you can set a template for notification header (default ${user} in ${channel}) and what is the maximum number of characters visible in the notification (default is 200)


In this section you can select:

  • If you allow users to upload attachments

  • If users can upload images from gallery or from camera

  • What is a maximum file upload size (default is 10 MB)

  • Which file types are whitelisted



Corteza uses Role-based access control (RBAC) as a method of restricting access based on the roles of individual users within the system. RBAC lets users have access rights only to the parts of the system/application they need and prevents them from accessing information that doesn’t pertain to them.

Permissions setting is fine-grained, meaning the system administrator can control permissions on several layers, for example:

  • which role can access applications

  • which role can read the data

  • which role can edit the data

  • which role can access admin area, etc.

By default, a user is assigned to "Everyone" role which is very limited due to security (in case someone uninvited registers to your system, they won’t see any data, Messaging channels, list of applications, etc.). The first registered user is granted admin rights by default.

Working with permissions in Admin Panel

Each user can be a member of multiple roles. We suggest having "modular" approach, so creating multiple smaller roles (i.e. Messaging admin, CRM admin) and then stacking them to cover all the parts of the system where a user needs access.

Admin can create unlimited amount of roles. Permissions system in the Admin Panel is a playground, where you bring each role on the table, adjust the permissions and save it. More details in the following chapters.

  • Click on a permission/role cell set permission to "Allow"

  • Using ALT + click on permission/role cell set permission to "Deny"

Permissions check in the System

The overall flow of verifications if a role has access to perform an operation on a resource is the following:

  • Can this combination of roles perform an operation on this specific resource

  • Can this combination of roles perform an operation on any resource of the type (wildcard)

  • Can anyone/everyone perform an operation on this specific resource

  • Can anyone/everyone perform an operation on any resource of the type (wildcard)

Permissions in the Admin Panel are general and can be overridden per individual application/namespace/etc. For a better overview, we suggest you first set permissions on this level and then go lower on the hierarchy.

Inherit value

Inherit value always checks the setting in the layer above. For example: if an individual application has access permissions set to "Inherit", it will use the permission set for All applications (default: "Deny"). Explicit "Allow" or "Deny" always override the Inherit value.

In practice, that means that check verifies if any of given roles has permission to perform an operation over a resource

  • Will return Inherit when:

    • No roles are given

    • More than 1 role is given and one of the given roles is Everyone

  • Will return Deny when:

    • There is one rule with Deny value

  • Will return Allow when:

    • There is at least one rule with Allow value (and no Deny rules)

System Permissions

To access System Permissions, go to Admin Panel and click on "Permissions" in the "System" section.

System Service

In this section you control overall access settings and usage of Admin Panel.

You can set permissions to:

  • Create new role/user/application/automation scripts

  • Allow reminder assignment

Corteza Elements
  • Access/update/delete any application

    You can set rights to access any application to everyone and explicitly forbid it per few applications in the list of applications.

  • Access/update/delete any user

    If a user doesn’t have access to read any user, they’ll see their IDs instead of a name in surname (for example in Messaging application)

  • Suspend/un-suspend any user

  • Access/update/delete any role

  • Manage members for any role

  • Read/update/delete any automation script

  • Run any trigger on any automation script

Any access you grant in this section can be overridden per individual element.

Low Code Permissions

To access System Permissions, go to Admin Panel and click on "Permissions" in the "Low Code" section.

Low Code Service

In this section you can control who can access Low Code, who can manage settings and who can create namespaces.

Please note that permissions are fine-grained, meaning if you allow users to access namespaces, they still need explicit allowance to read pages, modules and fields.


In this section you can control which role can:

  • Have read access to any namespaces

  • Update/delete/manage any namespace

  • Create modules/charts/pages/automation scripts

Any access you grant in this section can be overridden per individual namespace.


In this section you define which roles can:

  • Read/update/delete modules

  • Create/read/update/delete records under any modules

  • Manage any automation trigger

Any access you grant in this section can be overridden per individual module.

Low Code Elements

Here you can control permissions for main Low Code elements:

  • Read/update/delete charts

  • Read/update/delete pages

  • Read/update/delete automation scripts

Any access you grant in this section can be overridden per individual element.

Messaging Permissions

To access System Permissions, go to Admin Panel and click on "Permissions" in the "Messaging" section.

Messaging Service

In this section, you can control who can access Messaging app, manage Messaging settings and who can create public/private/direct channels.

We recommend this permissions to be allowed to Administrators and Messaging Admins only.


In this section, you have full control over which role can to the following:

  • Update/View/Join/Leave any channel

  • Delete/un-delete/archive/un-archive any channel

  • Manage members and attachments of any channel

  • Send/Embed messages, Reply in threads

  • Send attachments to channels (if they’re enabled in the Messaging settings)

  • Update/delete own/all messages

If no explicit "Allow" or "Deny" rules are set, we use a set of business logic rules as well.

If a user doesn’t have explicit allowance to delete any channel, but they can create a public channel, they we’ll still be capable of deleting this channel as they’re the owner of it.

Corteza Low Code


What is Corteza Low Code?

Corteza Low Code is a low-code platform development platform. It provides an environment where you can create your own applications with mostly graphical interfaces instead of code. Its main benefits are that it reduces development time and you don’t need advanced programming knowledge to use it.

The Corteza Low Code development platform is web-based and specifically built for records-based business applications. In fact, Corteza CRM is built with it.


A namespace is an records-based application.

Creating an application with Corteza Low Code takes only a handful of steps. First, you create modules with fields, followed by pages to visualize the modules. This creates the basic data model of your application, after which you can add charts, automation and workflow rules, and role-based permissions.

What can you build?

You can build any namespace (application) with Corteza Low Code, such as:

  • Customer Relationship Management

  • Enterprise Resource Planning

  • Case management

  • Expense management

  • Event management

  • Support desk

  • Knowledge base

  • Logistics management

  • Employee onboarding

  • Leave tracker

  • Volunteer portal

  • Donor management

  • Franchise management

  • Hotel management

  • Construction management

  • Restaurant management

  • Travel management

  • Fleet hub

  • Inventory management

  • And a lot more

Create a namespace

To enter Corteza Low Code, first, you need to enter Corteza. Once you’re inside Corteza, you have several options for opening Corteza Low Code:

Open Corteza Low Code

  • Open it in a new tab by clicking on the + button close to the top of the page, which opens the application menu;

  • Open it in a new panel by selecting the grid icon on the top right (the icon with four squares); or

  • Open it in a new window by selecting open in a new window when hovering over the Low Code icon in the application menu.

The first thing you see is the Corteza Low Code Namespaces menu. This shows all the applications you have installed (if any) and an option to create new applications.

If you cannot see Corteza Low Code, your existing applications, or the Create a new namespace button, you might not have the permissions you need. In this case, contact the administrator of your Corteza platform.

Create an application

Each Low Code application lives in its own unique namespace. This feature allows you to have an unlimited number of Corteza Low Code applications.

To create a new application, you need to fill out the following fields:

  • Full namespace name (mandatory): The name of your application, which will be shown in the Low Code Namespaces menu. This name does not have to be unique, but it’s best practice to give each application a unique and descriptive name. For example: Donations.

  • Subtitle (optional): The subtitle is shown below the name of the application in the Low Code Namespaces menu. For example: Donor Management for the Development Department.

  • Namespace description (optional): A longer description that appears when hovering over the namespace in the Low Code Namespaces menu. For example: In this Donations application, our organization tracks contributors and contributions.

  • Slug (mandatory): A short name for the namespace that is used in the URL. It’s best to only use letters, numbers, and characters like the dash or underscore. For example: donation-management.

  • Enabled (mandatory in order to enter the application): By checking the Enabled checkbox, the application will be available in the Low Code Namespaces menu.

  • Set namespace permissions (optional): By clicking on Set namespace permissions, you can define the access permissions to the namespace for each role. Other access permissions for your application will be created later because they depend on the type of application you build.

Try it out by following these steps to create an example namespace to manage donations.

  • First, click on the Create namespace button. It’s the last block on the Corteza Low Code Namespaces menu. This opens the Create namespace form.

  • For the donation application, fill in the following data: Corteza_createdonationnamespace.png

  • Hit Save and close. You’ve created an application in Corteza!

Modify a namespace

To edit the main data of a namespace you need to click on the edit icon that appears when you over over the namespace in the namespace menu.

To edit modules, fields, pages, etc inside a namespace, you need to enter the namespace first. Detailed information of how to edit each area can be found in the next chapters.


Modules and fields exist inside your namespace. (In programming terminology, they are "locally defined.") Modules and fields define places where data is stored in your namespace. Without modules and fields, your namespace has no memory nor anything to work with, so defining them is the next step when creating a new app.

Enter the namespace’s admin area

To enter the admin area of an namespace, you first need to open the namespace inside Corteza Low Code. Once inside, you’ll see an Admin panel link on the right. Click on it to enter the namespace’s admin area.

In the admin area there are four menu items:

  • Modules: Create or edit modules and fields

  • Pages: Define the visual part of your namespace

  • Charts: Create charts to add to pages

  • Automation: Add automation rules to automate business processes and workflows

The Public pages link takes you back to your namespace.

Create modules and fields

Modules and fields define what data you need to store in your namespace and how that data links to other data. If you’ve ever built a database before, this might feel familiar, but you don’t need any database experience to work with Corteza.


A module is like a table in a database. A simple namespace typically has a few modules, while bigger namespaces have many more. Corteza CRM, for example, has over 35. The number of modules an namespace can have is unlimited.

A new namespace does not have any modules. You can create one by using the form on top or by importing an existing module from a different namespace using an export file. You can import and export individual modules or all modules at the same time.

When you create a module, best practice is to give it a descriptive name without spaces and using capital letters on different words, e.g., Lead, Account, or CaseUpdate.


Each module consists of a set of fields that define what data you want to store and in what format.

You can add new fields to a module by using the Add new field button. This adds a new row with the following fields:

  • Name: It must be unique and cannot have spaces, e.g., "firstname." This is not shown to the end user.

  • Title: This is the field’s label—the field name the end users see when they view or edit a record. It can contain any character, including spaces. Although it’s best practice to keep this title unique, it’s not mandatory. An example is "First name."

  • Type: This is where you set the field type. The wrench icon on the right allows you to set more detailed data for the field type.

  • Multiple values: This checkbox is available when you want a field type to allow multiple value entries.

  • Required: This makes the field mandatory for the end user when creating or editing a record.

  • Sensitive: This allows you to mark data that is sensitive, such as name, email, or telephone number, so your namespace is compliant with privacy regulations such as the GDPR.

At the end of the row, you can find a Delete button (to remove a field) and a Permission button (to set read permissions and update field permissions per role).

Field types

You can select from the following field types. The wrench icon beside the field type provides further options for each case.

  • Checkbox (Y/N): This field shows a checkbox to the end user when editing a record. When you click on the wrench icon, you can select what checked and unchecked represent. For example: Yes/No, Active/Inactive, etc.

  • DateTime: This makes a date field. You can select:

    • Date only

    • Time only

    • Past values only

    • Future value only

    • Output relative value (e.g., three days ago)

    • Custom output format (see Moment.js for formatting options)

  • Email: This field auto-validates whether the input is an email and turns it into a clickable email link in record-viewing mode. You can select the Don’t turn email into a link option to remove the auto-link feature.

  • Select: When you click on the wrench icon, you can use the Add button to add as many Select options as you need. You can also set whether the end user can select multiple values at once.

  • Number: This field gives you the option to add a prefix (for example a $ for values in dollars), a suffix (for example % for a number that represents a percentage), and the decimal precision (e.g., zero for whole numbers or two for values like 1.13, 2.44, 3.98). You can use the Format Input field to create more complex formats.

  • Record: This field allows you to link the current module to another module. It will show as a Select to the end user. You can select the module in the Module name field and choose the field to use to load the Select options. In Query fields on search, you can define what fields you want the user to be able to search on. As with the Select field type, you can set whether the user can select multiple values at once.

  • String: By default, a String field is a single-line text-input field, but you can choose to make it multi-line or even a rich text editor.

  • URL: The URL field automatically validates whether the field is a link to a site. You can select the following options for this field:

    • Trim # from the URL

    • Trim ? from the URL

    • Only allow SSL (HTTPS) URLs

    • Don’t turn URL into a link

  • User: This creates a Select field that loads with all users in Corteza. You can preset the value to the current user.

  • File: This creates a File Upload button for the end user.


Pages is the HTTP web layer of Corteza Low Code. For comfort of design and to ensure your namespace is responsive and mobile-ready by default, Pages are built-in blocks. Each block can be resized and dragged wherever you desire. In all blocks, you can define the title, the description, and the layout.

There are two types of pages: Record pages (which show data for or related to a single record) and List pages (which show a searchable list of multiple records). Each type is described below.

Record pages

A module without a Record page cannot do anything. To store data inside a module, you need to create a Record page and add it to a module by selecting the appropriate Page builder button on the Modules page. This opens the drag-and-drop page editor.

Record blocks

The Record block is the most important block for a Record page. You can select the block’s layout and the fields you want to show. For example, a Contact record page would need to show: Name, Email, Phone, and Address. Select those fields, hit Save and close, and the block will be added.

When you view a record, the values of these fields are shown as strings, and when you add or edit a record, these fields turn into form-input fields.

You can drag-and-drop the fields and place them in any order you prefer.
Record list blocks

To show a list of related records you need to select the Record list block with prefilter.

The Prefilter records field allows simplified SQL "Where" conditions, and variables like ${recordID}, ${ownerID}, and ${userID} are evaluated (when available). If you are editing a "company" record, and you want to show all the employees in that company, you would need to fill in: ${recordID} = companyId (companyId would need to be a field of the Record type inside the Employee module in this example).

You can also Presort records field by inserting for example createdAt DESC. This shows the list of record by creation date. This field supports simplified SQL Order by condition syntax.

You can also select to hide or show the New record button and Search box, and you can define the number of records shown. A best practice is to adjust this number to the size of the block.

To save the block and add it to the page, hit Save and close. Now the second block has been added to the page.

Other block types

Other block types are:

  • Content: This block allows you to add fixed text, which you can create with a rich text editor. This is ideal for "help" texts or links to resources, such as the sales handbook on an intranet.

  • Chart: Inserts charts that have been created with the chart builder. This is very useful when you are creating dashboards.

  • Social media feed: You can show live content from Twitter here—either a fixed Twitter feed (which is shown in all records) or from a Module field that represents a Twitter link (which enables each record to have his own feed).

  • Automation: In this block, you can add automation rules that have a manual trigger and that are available for the module, as well as automation rules with no primary module. They are shown to end users as buttons. You can format the automation rule buttons by inserting custom text and selecting a style, and you can change the order of them (when you have multiple buttons) with a drag-and-drop.

  • Calendar: This block inserts a calendar. The source of the calendar is a list of records from one or multiple modules. For each source, you can select which field represents the title, start date, and end date of the event. The calendar can be shown in the following formats:

    • Month

    • Month agenda

    • Week agenda

    • Day agenda

    • Month list

    • Week list

    • Day list

  • File: You can upload a file and show it on the page. Just like the Content block, the content of this block will be the same for all records. To have files that are related to a record, you need to use the File field type when creating fields in a module.

Change the page layout

After adding blocks to pages you can resize and position them to create the layout you want.

Corteza Low-Code is responsive by default, so the blocks will resize and reposition automatically on devices with small screens.

List pages

List pages are not related to any single record; rather, they show lists of records. This page type is used to create a home page, list of contacts, list of projects, dashboards, etc. List pages are important because you can’t enter new records without viewing a list because the Add new record button is shown on lists.

To create a List page, you need to go to the Pages administrative page and enter a title in the Create a new page box at the top. When you submit this form, it opens the Edit page form, which allows you to add a page description (for internal use; the end user will not see it), and you can set the page to Enabled so it can be accessed.

You can drag-and-drop pages in the page-tree to rearange them. This pages makes it easier to maintain the namespace. It also allows you to generate the namespace menu structure because List pages (but not Record pages) are shown as menu items.

Adding content to each List page is exactly the same as adding blocks to Record pages. The only difference is that you cannot select the Record block type (because it is related to a single record).

Create a menu

The menu in a Corteza Low Code namespace is automatically generated by the tree of pages on the admin page Pages. It only shows List pages and ignores Record pages.

To reorder the menu, simply drag-and-drop the pages in the desired order within the tree of pages.


Corteza Low Code comes with a chart builder that allows you to build line, bar, pie, and donut charts.

Create a new chart

To create a new chart, use the Create a new chart field.

Inside the chart builder, you will find the following fields:

  • Name: Enter a name for the chart; e.g., Donations.

  • Module: This is the module that provides the data to the chart.

  • Filters: You can select one of the predefined filters, such as Records created this year, or add any custom filter (such as status = "Active").

  • Dimensions: These can be Datetime and Select fields. Datetime fields allow grouping (e.g., by day, by week, by month). The Skip missing values option is handy to remove values that would return null (e.g., records with incomplete data), and Calculate how many labels can be shown can avoid overlapping labels (which is useful for charts with many dates on the X-axis).

  • Metrics: Metrics are numeric fields and have a predefined count option. You can add multiple metric blocks and give each a different label, field (source), function (COUNTD, SUM, MAX, MIN, AVG, or STD, if possible), output (line or bar), and color.

Add a chart to a page

The final step is to add a chart to a page. To add this chart to the follow the steps below:

  • Enter Pages in the admin menu.

  • Click on the Page builder link of the page where you want to add the chart.

  • Add a page block of the type Chart, add a block title, and select the chart.

  • Resize and reposition the block (or blocks) to make the layout look nice.


Automation can make your Corteza Low Code application more efficient. With the Automation tool, you can create business logic that evaluates records automatically when they are created, updated, or deleted, or you can execute a rule manually. Automation consists of automation scripts and automation triggers.

Automation script

Automation scripts are written in JavaScript, one of the most used programming languages in the world, enabling you to write simple code that can evaluate, calculate, and transform data (such as numbers, strings, or dates). Corteza provides some extra functions that help you to access, create, save, or delete records, find users, send notifications via email, use Corteza Messaging, and more. These functions can be accessed via <ServiceName>.<functionName> from inside automation scripts.

Available helpers:
  • Compose.<functionName>:

    Provides helper functions to work with Corteza Low Code, such as accessing, creating and deleting records.

  • ComposeUI.<functionName>:

    Provides helper functions to work with user interface for Corteza Low Code, such as opening record pages and showing notifications.

  • Messaging.<functionName>: Provides helper functions to work with Corteza Messaging, such as finding channels, creating channels and creating messages.

  • System.<functionName>:

    Provides helper functions to work with Corteza core system, such as finding and creating users and managing role membership.

Scripts that interact with the user interface (page redirects, success/error messages, …​) must be ran inside the client’s browser. You can find this setting under automation script’s Settings tab - Run in browser.

To make automation scripts as flexible as possible, we provide settings for extra configuration. These settings can be found under automation’s script’s Settings tab.

Supported settings:
  • Enabled:

    If this automation script should be executed.

  • Critical script:

    Critical scripts must be executed entirely and without any errors. If an error occurs, it’s execution is canceled and all upcoming automation scripts are ignored.

  • Run this script asynchronously:

    Asynchronous scripts are ran in the background and their results are ignored.

  • Run in browser:

    Executes this script inside the client’s browser (user-agent). This should only be used for scripts that require user interaction, since this form of execution is not reliable.

  • Script execution timeout:

    Specifies the duration in milliseconds, an automation script can execute for before aborting it’s execution.

  • Security:

    Specifies what user will be used when the script is executed; defaults to current user

Security setting comes in handy when we want to execute some operations that not all users have access to; creating/updating records, creating users and their roles, …​

Automation trigger

Automation triggers connect automation scripts with resources, allowing the script to run when a specified event happens. We currently support record triggers and scheduled triggers.

Record triggers

Record triggers can be created on any module that is available for this namespace. You can find record triggers under automation script’s Record triggers tab.

Currently supported events:
  • Before create:

    Before a record is created; you can use this trigger to do some validation, generate values, …​

  • After create:

    After a record is created; you can use this trigger to send notifications, update related records, …​

  • Before update:

    Before a record is updated; you can use this trigger to do some validation, generate values, …​

  • After update:

    After a record is updated; you can use this trigger to send notifications, update related records, …​

  • Before delete:

    Before a record is deleted; you can use this trigger to do some validation, remove related records, …​

  • After delete:

    After a record is deleted; you can use this trigger to remove related records, notify users, …​

  • Manual:

    Trigger requires user interaction (a button press) in order to execute; you can use this trigger to convert a lead to a client, remove stale leads, …​

When using before update/create automation triggers with an intent to change values for the record that triggered script execution; you don’t need to explicitly save the record; this is done automatically when the script finishes it’s execution.

When using before update/create automation triggers with an intent of data validation, you can cancel execution by either throwing an Abort error (throw new Abort()) or by simply returning false (return false).

Scheduled triggers

Scheduled triggers are executed at a specified time or in an interval. They are mainly used for periodic tasks, such as batch record updates, aggregation, updating records based on an external source, …​ You can find scheduled triggers under automation script’s Scheduled tab.

To use scheduled triggers, you must provide a user that is used for script execution as scripts will be executed on their own. This option is available under automation script’s Settings tab - Security. Make sure, that this user’s permissions allow all required operations that the automation script performs.

Corteza CRM has an extensive set of automation scripts that can be used as examples. Some of them are:

  • Account: Create new case

  • Account: Create new opportunity

  • Case: Insert case number

  • Contract: Send contract to custom email

  • Lead: Convert a lead into an account and opportunity

  • Opportunity: Apply price book

  • Opportunity: Generate new quote

  • Quote: Submit quote for approval

Automation script development

For easier development, we recommend using our corteza-corredor-sdk repository as a starting point. It provides standardjs code linting (eslint), unit testing (mochajs + chaijs) and mocking (sinon) out of the box. You are also free to use the already provided code editor available under automation script’s Code tab.

A complete manual on how to use the automation module, together with code examples, is in development.


In Corteza Low Code you have full control over which role has access to what information.

You can set the following permissions to "Allow", "Inherit" or "Deny":

All namespaces

In the main namespaces menu you can set the following permissions for all namespaces by clicking on the "lock" icon:

  • Read any namespace

  • Update any namespace

  • Delete any namespace

  • Manage any namespace: Allow access to namespace’s admin pages

  • Create modules under any namespace

  • Create charts under any namespace

  • Create pages under any namespace

  • Create automation scripts under any namespace

Single namespace

When you enter the edit page of a namespace (via the namespaces menu), you can click on the "lock" icon to set the permissions of a single namespace. These settings overwrite the ones set in "All namespaces".

  • Read namespace "(namespace name)"

  • Update namespace "(namespace name)"

  • Delete namespace "(namespace name)"

  • Manage namespace "(namespace name)": Allow access to namespace’s admin pages

  • Create modules under namespace "(namespace name)"

  • Create charts under namespace "(namespace name)"

  • Create pages under namespace "(namespace name)"

  • Create automation scripts under namespace "(namespace name)"

Permissions inside a namespace

After setting permission to an entire namespace, you can further define permissions inside a namespace. You can define it for: * Modules ** Fields * Pages * Chart * Automation rules.

To do so, you need to go to the admin area of the namespace.

All modules

On the top you can click on the "lock" icon to set permissions for all modules. You can set the following permissions:

  • Read any module

  • Update any module

  • Delete any module

  • Create record of any module

  • Read records of any module

  • Update records of any module

  • Delete records of any module

  • Can manage automation triggers on any module

Single module

You can set permissions for a single module by clicking on the "lock" icon at the end of the module row. Like this you can for example hide complete modules for certain roles. You can define per role the following:

  • Read module "(module name)"

  • Update module "(module name)"

  • Delete module "(module name)"

  • Create record of module "(module name)"

  • Read record of module "(module name)"

  • Update record of module "(module name)"

  • Delete record of module "(module name)"

  • Can manage automation triggers on module "(module name)"

Fields inside a module

If you enter a module, you can define the following permissions per field. Like this you can create a role that has access to a certain module, but don’t not have access to see and/or edit certain fields.

  • Read "(field name)" record fields

  • Update "(field name)" record fields

All pages

On the top you can click on the "lock" icon to set permissions for all pages. You can set the following permissions: * Read any page * Update any page * Delete any page

Single page

Per page you can set the following permissions for a role:

  • Read page "(page name)"

  • Update page "(page name)"

  • Delete page "(page name)"

All charts

On the top you can click on the "lock" icon to set permissions for all charts. You can set the following permissions: * Read any chart * Update any chart * Delete any chart

Single chart

Per chart you can set the following permissions for a role:

  • Read chart "(chart name)"

  • Update chart "(chart name)"

  • Delete chart "(chart name)"

All scripts

On the top you can click on the "lock" icon to set permissions for all scripts. You can set the following permissions: * Read any script * Update any script * Delete any script

Single script

Per script you can set the following permissions for a role:

  • Read script "(script name)"

  • Update script "(script name)"

  • Delete script "(script name)"