Services

FAQ and Documentation about the Forma Cloud services

FAQ - Billing and Presales

Plans

What’s the difference between Forma Cloud and Forma LMS?

Forma Cloud is based on Forma Lms, with the same core functionalities, plus preinstalled community plugins, and our exclusive extra features.
With the Forma Cloud service we will take care of 

How are Forma Cloud and Forma LMS integrated?

Forma Farm is a joint venture of two companies that founded the forma.lms project, and is now the major contributor in the Forma core development. Any bugfix and improvement developed on Forma Cloud will be added and released into forma.lms: by using Forma Cloud you'll be the first to benefit any forma.lms upgrade and improvement.

Can I move my Forma installation to Forma Cloud (FLY IN)?

Yes, any standard Forma LMS installation can be transfered to our dedicated cloud service, including courses, users, materials and tracking. We will take care of the migration from your hosting to our cloud infrastructure, including upgrade to the latest stable version. We can’t migrate or maintain any core code customization.

Can I upgrade or downgrade my plan?

Yes, in case of expected (or unexpected!) traffic peaks you can upgrade your plan even for a few months and then revert back to your original plan.

Can I add custom functionalities?

Yes, you can add any of the Forma Cloud extension, or approved third party plugins developed by the Forma LMS association partners.
We will take care of plugins inistallation and maintenance, direct installation of other plugins or customizations won't be allowed

What happens if I quit my cloud plan?

If you quit your Forma Cloud plan we can provide a copy of your platform database and you will be able to download all your user and course files. With these backups it will be possible to reinstall your platform with the same version of Forma LMS.
We won’t provide Forma Lms core files or any plugin code. Backups will be mantained for 60 days.

How do I estimate my active users before moving to Forma Cloud

If you are running an existing Forma LMS on your premises and wish to migrate to Forma Cloud, you can calculate your active users by running this query on your database:

SELECT 
    COUNT(DISTINCT learning_tracksession.idUser) AS user_count,
    MONTH(enterTime) AS month,
    YEAR(enterTime) AS year
FROM 
    learning_tracksession
GROUP BY 
    YEAR(enterTime),
    MONTH(enterTime)
ORDER BY 
    year,
    month;

The result will be a table showing a count of what we consider "active users" for each month/year in the whole history of your platform, so you will be able to choose the optimal plan for your needs


Users and Thresholds

What is an "ACTIVE USER"?

An active user is a unique user that enters a course in any given month. If the user just logs in to download the certificate but doesn’t enter a course, that user is not counted against the monthly threshold.

What's the cost for extra users?

The base cost for each billed extra user is 3,5 €. Discounts will be applied for large amounts of extra users.

What happens if I exceed my plan’s thresholds?

You will be notified if your platform exceeds your monthly active users threshold, then exceeding users will be billed quarterly. If your average monthly traffic over the previous 3 months will be higher than the plan threshold, all the users will be billed. If it will be lower, exceeding users won’t be billed.
Users will always be able to login and take courses.

Can I adjust plan thresholds?

Yes, you can increase any plan by steps of 25 users, to fit your exact training volumes. I.E., you could have a custom professional plan for 150 monthly active users, or a “Company” for 375 active users, and so on.

What are file and data storage?

We place limits on these resources to keep prices lower, but you can add more anytime, just the resources you need, with small upgrades. If your platform exceedes your file and data storage limits we will get in touch for a plan upgrade. Your platform will keep working with no limitation in any case.

Customization

Can I use a custom domain for my platform?

Yes, you can point any domain (i.e myacademy.com) to your forma cloud platform and send authenticated emails from email accounts on the same domain (i.e. training@myacademy.com). Some notes:

Check our configuration guide for details

Do you provide PhPMyadmin or any DB access?

NO, since Forma Cloud is a managed service we don't provide any direct access to the platform DB for security and mantainability reasons. Data reading and manipulating is possible with the provided API service. If direct access is required anyway we can provide a DB replica service at an extra yearly cost.



Helpdesk Support

Helpdesk & Maintenance

What's included

The assistance and maintenance service is provided through an exclusive versioning and deployment system (Forma DevOps), and includes the updating of the platform and the verification of all technical problems due to malfunctions of the services and applications offered.

  1. Tech Check: Analysis of any bugs or software malfunctions, and evaluation of possible corrective interventions. Support for changes to the standard application configuration, or provision of standard instructions and documentation for the reported needs
  2. Application Maintenance:
    1. Installation of release updates for standard features.
    2. Installing security patches and bugfixes available on community development repositories.
    3. BugFix: Functional bug fixes based on the chosen service level

Application update activities will always take place according to times and methods agreed with the customer, after checking any functional customizations developed for the customer.

Opening a support ticket

To open a support ticket just send an email to helpdesk@formafarm.com

This will automatically open a support ticket in our ticketing system, and our team will get back to you within 24/48hr (working days)

The following information, to the extent known and applicable, should be provided in any Support Request to address Incidents: 

  1. Be Clear and Specific
    Provide a detailed description of the issue. Include what you were trying to do, what you expected to happen, and what actually occurred.

  2. Include Relevant URLs
    Always include the exact URL(s) of the page(s) where the issue occurred.

  3. Mention details about affected users and courses
    Specify (if applicable):

    • the username and the role (e.g., administrator, teacher, learner) of the affected account

    • the exact title, code, edition of the affected course
    • the exact title of the affected learning object
  4. Add Screenshots or Videos
    Visuals help us understand the issue faster. Include clear screenshots or short screen recordings showing the problem.

  5. List the Steps to Reproduce the Issue
    Outline the exact steps taken before encountering the issue. This helps us replicate and identify the problem.

  6. Note the Date and Time
    Indicate when the issue occurred (date and time), especially for time-sensitive problems.

  7. Specify the Browser and Device
    Tell us which browser (Chrome, Firefox, etc.) and device (PC, Mac, tablet, mobile) you were using.

  8. Report One Issue per Ticket
    Submit separate tickets for different problems. This ensures each issue gets the proper attention.

  9. Avoid Urgency Tags Unless Critical
    Use "urgent" or "high priority" only when the issue severely impacts access or functionality for multiple users.

  10. Check Before Submitting
    If possible, verify whether other users can reproduce the issue or if it was a one-time occurrence.

Service Level Agreement

Definitions

Any malfunction reports will be verified according to a standard debugging procedure, classified and managed according to the following criteria and definitions.

Taking Charge: Registration of the Incident, assign the ticket number to the customer and saving the request in the help desk system.

Bug: a “bug” is considered an application error that generates an incorrect or unexpected result with respect to the expected behavior for any software functionality included and stable in the official releases of the forma.lms software.

Issue Types:

  1. Not a bug: you do not find a technical bug, but a usage or process problem. Standard troubleshooting documentation or instructions will be provided, while customized support interventions can be requested by activating a helpdesk service.

  2. Forma Lms Bug: native bug of the open source application. Fixes will be applied if already available on the community repository. If a fix is not available, the bug will be solved based on the priority of the problem and the activated service level.

  3. Data Error: Errors or service requests on the DB, typically user-generated, which may require a restore from backup

  4. Performance Issue: The software is slow or inaccessible due to problems in the cloud infrastructure.

  5. Client Specific Bug: The error is specific to the client installation, it could be caused by:

    1. infrastructure problems

    2. errors in automatic deployment procedures

    3. errors on third-party plugins or custom code

  6. Change Request: the system is working correctly, functional or graphic customization is required

Severity and Priority

  1. Available Fix: The bug is known and a fix is already available on the community repository
  2. High: The error is blocking for fundamental operations of the platform, no manual or configuration alternative is available
  3. Medium: The error is blocking, but a workaround is available to achieve the expected result
  4. Low: the reported bug is not blocking
Severity First Response Follow Up Response Time
Available Fix 8 Business Hours Upgrade scheduled with client
High 8 Business Hours As promptly as technically and commercially feasible.
Medium 16 Business Hours As promptly as technically and commercially feasible.
Low 16 Business Hours As determined by Forma Cloud Learning & Support Team. 

Support availability

Helpdesk and support service will be available with the following schedule:

9AM - 6PM CET Mon / Fri
9AM - 6PM EST Mon / Fri

Exclusions and conditions of service

The following are always excluded from the maintenance service:

  1. Fixes for plugin errors, third-party custom code, and change requests, which may be assessed and quoted separately at the discretion of the vendor

  2. Interventions related to native forma.lms features released at a “beta” or declared unstable development level

  3. Custom interventions related to design and graphic customization of the template

  4. Errors and problems related to the use and tracking of specific learning objects

  5. Data recovery from backup for manual errors in application management (e.g. incorrect deletion of users, additional fields, courses, etc.)

These interventions can be carried out on a post-payment basis based on the current daily rate.

It is not possible to schedule upgrades in the last month of the contract, unless renewed.

Forma Cloud Services

Forma Cloud Services

Client Control Panel

Forma Factory

"Forma Factory" is a Client Control Panel to keep all your Forma Cloud platforms under control

Main Dashboard

image.png

This page provides some basic information about your platforms status and main stats

Click on the project name to access a more datailed dashboard for a specific platform

Platform Dashboard

Thresholds, Version, Plugins

image.png

Recent and Yearly stats

image.png

Monthly stats

image.png

Data and file Storage

image.png

Reclaimable Space

image.png

Environment Status

image.png

Click on the "Status Monitor" button for the service status of your platform:

image.png

Associated Domains

image.png

FTP Users

This block provides all the available SFTP data and user credentials:

  1. Host and port to be set for any of your SFTP users
  2. User and password for the available SFTP users

image.png

API & SSO

image.png

Forma Cloud Services

Infrastructure and Security Standards

Disclaimer: The information contained herein reflects the infrastructure and security standards in effect at the time of publication. Such standards are subject to change without prior notice in order to comply with evolving legal, regulatory, and security requirements. Accordingly, this documentation may be modified or updated at any time.

Infrastructure

Cloud Architecture

The Forma Cloud service is delivered through a modern, resilient, and fully managed cloud infrastructure built on Amazon Web Services (AWS). The platform is deployed in AWS data centers located within the European Union (Ireland), with optional database mirroring available in Italy when required.

Physical Security

The Forma Cloud Services relies on AWS who is responsible, in accordance with the AWS Shared Responsibility Model (available at https://aws.amazon.com/compliance/shared-responsibility-model), for implementing controls for the physical security of data center facilities, backup media, and other physical systems, providing comprehensive and state-of-the-art security capabilities (available at https://aws.amazon.com/compliance/data-center/controls).

Information Protection and Security Standards

Backup

Infrastructure

Backup Policies

Backup Status

Access Control

Data Storage, Localization and Segregation

Geographic Location

Redundancy

Backup Vault

Data Segregation

Forma Cloud implements logical tenant isolation across application, storage, and database layers.

Data Deletion and Disposal

Customer data is deleted or rendered inaccessible through controlled procedures aligned with AWS storage lifecycle and secure deletion mechanisms. Backup data is retained according to the applicable backup retention schedule and subsequently managed according to AWS service policies.

Post-contract retention and final deletion timelines are governed by the applicable contractual documentation and legal requirements.

Data Encryption

Encryption at Rest

Encryption in Transit

TLS Certificates Management

To ensure secure communications, TLS certificates are fully provisioned, deployed, and managed through AWS Certificate Manager (ACM). This integration eliminates manual handling and human error during certificate generation and renewal.

Monitoring & Uptime

The infrastructure is equipped with the following service monitoring procedures and mechanisms:

Uptime SLA

MetricValueNote
Granted Uptime99,9%Excluding scheduled maintenance events

Disaster Recovery

Data RPO (Recovery Point Objective): 5 minutes
Filesystem RPO (Recovery Point Objective): 24 hours
Data RTO (Recovery Time Objective): 72 hours
Disaster Recovery Assessment

Disaster recovery procedures are tested on an annual basis to ensure business continuity and validate the reliability of restoration procedures. These tests include restoring database snapshots to a temporary test environment, validating successful system recovery, and verifying data integrity.

The recovery assessment includes a full database restore, startup of a temporary Aurora test cluster, application connectivity checks, execution of queries on critical tables, and data consistency validation. These controls confirm that systems can be effectively recovered in the event of a failure and that the declared RTO/RPO objectives are supported by operational recovery procedures.

Last test performed

Verification steps performed

Remote Administrative Access

Remote administrative access to systems processing customer data is restricted to authorized personnel only, protected by multi-factor authentication and conducted over encrypted channels.

Secure SDLC and Change Management

FormaFarm applies a controlled software delivery lifecycle designed to govern software development, configuration, maintenance, and production changes.

Incident Management

FormaFarm maintains procedures for the identification, escalation, containment, resolution, and post-event analysis of incidents affecting service continuity, confidentiality, integrity, or availability of customer data.

Confirmed security breaches are notified without undue delay in accordance with applicable contractual commitments and legal requirements.

Vulnerability Assessment and Penetration Testing (VAPT)

Forma Cloud is subject to periodic Vulnerability Assessment and Penetration Testing (VAPT) activities conducted by qualified third-party security firms. These assessments are carried out in accordance with industry-standard methodologies (e.g., OWASP Testing Guide, PTES) and cover both the application layer and the underlying infrastructure.

VAPT Management Process

Application Security Controls

Multiple layers of security controls are implemented at both infrastructure and application level to proactively mitigate common web vulnerabilities and address findings from VAPT assessments.

Web Application Firewall (WAF)

All incoming traffic passes through an AWS Web Application Firewall (WAF) that provides protection against common attack vectors, including:

WAF rules are regularly reviewed and updated in response to newly identified threats and VAPT findings.

Where appropriate based on the service profile and operational needs, additional AWS-native security services such as Amazon Inspector, AWS Security Hub, and Amazon GuardDuty may be evaluated or adopted to strengthen vulnerability management, posture monitoring, and threat detection capabilities.

Content Security Policy (CSP)

A comprehensive Content Security Policy is enforced via HTTP response headers at the Nginx reverse proxy level. The CSP configuration is dynamically generated at container startup based on environment variables managed through the deployment infrastructure (factory), enabling per-tenant customization without code changes.

HTTP Security Headers

In addition to CSP, the following security headers are enforced on all responses:

HeaderValuePurpose
`Strict-Transport-Security``max-age=31536000`Enforces HTTPS connections for one year (HSTS)
`X-Content-Type-Options``nosniff`Prevents MIME-type sniffing attacks
`Referrer-Policy``strict-origin-when-cross-origin`Limits referrer information leakage
`Permissions-Policy`Restrictive policy disabling geolocation, camera, microphone, payment, etc.Reduces the browser API attack surface

Server Fingerprint Mitigation

Server identification headers are actively suppressed to reduce the information available during reconnaissance:

Sensitive File Protection

The web server is configured to deny access to files and paths that should never be publicly accessible, including:

These rules are enforced at the Nginx level, ensuring that even in case of misconfigurations or accidental file placement, sensitive content is not served to external clients.

Session Security

Session management is hardened through multiple mechanisms:

Brute-Force Protection

The platform includes application-level protection against brute-force login attacks:

Forma Cloud Services

Email & DNS settings

Setup a custom domain on Forma Cloud

Forma Cloud platforms come with a default domain name like "myproject.forma.cloud", but you may want to use:

How to set a custom DOMAIN

To allow this you will need to configure some "DNS Records" with your domain registrar.

  1. Register the domain or subdomain with your service provider
  2. Open a ticket writing to helpdesk@formafarm.com, indicate the domain name you wish to use
  3. We will add the certificate, and send you the records to be configured on your domain provider service within 24 hours
  4. Insert the records and check with a tool like GoogleDig
  5. Let us know for a final check

Always backup your existing DNS settings before making any changes.

How to set a custom SUB-DOMAIN

Once your main domain is configured, it will be possible to add more subdomains like client1.myacademy.com, client2.myacademy.com

Since the main domain is already configured on both your DNS and our services, it will be way easier:

  1. Create the subdomain on your provider control panel
  2. Open a ticket writing to helpdesk@formafarm.com, indicate the subdomain domain name you wish to add

About DNS for Forma Cloud

What are DNS Records?

DNS records are like the internet's "phone book" that tells browsers and email services where to find your website and how to manage your email. Each record has a name, type, and value that indicates where to point.

Why Are These Records Needed?

Your web infrastructure is hosted on Amazon Web Services (AWS), one of the most secure and reliable clouds in the world. These DNS records are used to:

✅ Authorize AWS to manage your domain
✅ Verify that you actually own the domain
✅ Allow Amazon to activate security and email services

In essence, you're "telling" AWS, "Yes, I own this domain and I authorize you to manage it." Without this authorization, Amazon cannot activate the SSL certificate or email services for security reasons.

Required DNS Records

In order to have everything working fine with your custom domain and email addresses, you will need to configure the following DNS records on your domain service provider

1. SSL  Certificate - For website security

What it does: Allows your site to have "the green padlock" (HTTPS protocol) in the browser address bar for security

Examples:

Record Name

Type

Value

_bbb9ea10b0856de6ba586e6207dc19a2.yourproject.forma.cloud

CNAME

_5b1f9e0e8346d90ac6b87db19db7c2dc.xlfgrmvvlj.acm-validations.aws

2. WEBSITE POINTING - Where Your Website Is Located

What it does: Tells browsers where to find your website when someone types in your domain.

Examples:

Record Name

Tipo

Valore

yourdomain.com

A

75.2.77.19

yourdomain.com

A

99.83.139.159

Note: we are providing 2 different IP addresses to grant maximum service reliability through our balancer

3. EMAIL VALIDATION - To Send Authenticated Emails from your platform

What it does: Allows your system to send emails that don't end up in spam.

Examples:

Nome Record

Tipo

Valore

kkctvw3mrh2v7h3gzaoqf34t3dl4xybh._domainkey.yourdomain.com

CNAME

kkctvw3mrh2v7h3gzaoqf34t3dl4xybh.dkim.amazonses.com

j4qlk6qmjatfrrx2s2dvljosxleqs7wf._domainkey.yourdomain.com

CNAME

j4qlk6qmjatfrrx2s2dvljosxleqs7wf.dkim.amazonses.com

sabrml264bh5b4map5crcjq327z7ifgk._domainkey.yourdomain.com

CNAME

sabrml264bh5b4map5crcjq327z7ifgk.dkim.amazonses.com

Further (important) Information

Propagation and verification time

DNS changes can take 4 to 48 hours to take effect worldwide.

After 24 hours, verify that the site is reachable and displays the SSL padlock in the browser.

This is the recommended order to follow when setting up Forma Cloud DNS records on your provider service:

  1. First A records (site points)
  2. Then CNAME records for SSL
  3. Finally DKIM records for email

Unavailability of the custom domain

In any case your custom domain should not work for some reason (issues with your provider, misconfigurations, expired domain) the default *.forma.cloud domain will always be available

Still having trouble with DNS records?

Most DNS providers (Aruba, Register, GoDaddy, OVH, etc.) offer free support for configuring DNS records. Open a support ticket from your control panel and attach this guide—they'll usually do it in minutes!

Migrating a domain to another provider

In case you are changing your domain registrant or hosting provider for an alias domain associated to Forma Cloud, nothing has to be changed on our side: just regongfigure the same DNS recods on the new provider.

You can always download your DNS records from your client control panel. We cannot provide direct assistance on your providers control panel.

Forma Cloud Services

Fly-in: Migrating to Forma Cloud

So you finally decided to move your existing Forma LMS to Forma Cloud! We're glad you've chosen our service to host your e-learning platform. To ensure a fast, secure, and seamless migration, we've prepared this guide to help you provide all the necessary information.

Migrating your platform to FormaCloud is a structured process that typically takes 2–5 business days, depending on the size and complexity of your installation.

Here's what will happen during the process:

  1. You provide us with the required data
  2. You configure the DNS records for SSL certificates and email (SES)
  3. You put your platform in maintenance mode
  4. We transfer files and databases
  5. We upgrade and test installation
  6. We validate and attach SSL certificates to our infrastructure
  7. We give you the green light to update DNS pointing records
  8. You perform final testing

Required Information

To proceed with the migration and activation of your platform, we ask you to send us the following data.

**Required Data** **Description**
Platform Name Used as the project name and as part of the default domain (e.g., `https://[platformname].forma.cloud`).
URL Alias The web address that will be used to access the platform (e.g., `learning.yourdomain.it`).

Note: During the migration process, you will need to configure DNS records in two separate phases. See the **Migration Steps** section below for details.

Email Sender Address The email used for notifications, confirmations, and password resets (e.g., `info@yourdomain.it`). It must belong to the same domain as the URL alias.
Superadmin Access to the Platform An account with superadmin rights to access your current platform.
SSH/FTP Access to the Current Server Required to transfer files. Include:
  • Host/Server
  • Username
  • Password
  • Port (22 for SSH, 21 for FTP)

SSH transfer protocol is required for safer and faster data transfer, allowing direct transfer and avoiding the risk of data loss or corruption

Warning: if only FTP is available, we won't be able to check and guarantee file integrity after the migration to Forma Cloud, and won't take any responsibility for possible data loss or corruption. Please ask your IT or provider for SSH access

Database Access Host, Username, Password. Alternatively, you may send us the database file directly or provide a download link (e.g., via WeTransfer or similar services).

---

Sending the Data

You can send us all the required information via email. For maximum security, you may:


Migration Steps

The migration follows a precise sequence. Each step must be completed before moving to the next.

Step 1 — You configure DNS records for SSL certificates and email (SES)

Once we receive your data, we will provide you with a set of DNS records to add to your domain. These records serve two purposes:

Important: At this stage, you must only ADD the new records we provide. Do NOT modify or remove any existing DNS records — your current platform must continue to work normally while we prepare the migration.

What you need to do: Add all the CNAME and TXT records we send you to your domain's DNS configuration. If you're unsure how, ask your IT team or domain provider for assistance. Check our full DNS documentation for further details.

Step 2 — You put your platform in maintenance mode

Once all DNS records from Step 1 have been added and propagated, set your current platform to maintenance mode. This ensures that no new data is generated while we transfer your content, guaranteeing an accurate and complete copy.

Plan the migration: to reduce inconvenience for your users, we can agree on specific dates for the intervention based on the availability of our team (during standard business hours, Monday to Friday).

Step 3 — We transfer data and database

With the platform in maintenance mode, our team will:

Step 4 — We upgrade and test the installation

After the transfer, our team will:

Step 5 — We validate and attach SSL certificates to our infrastructure

Once the installation is verified, our team will:

We will notify you once everything is ready and your instance is live on our infrastructure.

Step 6 — You update DNS pointing records

Once we give you the green light, you need to modify your existing DNS pointing records (typically an A record or CNAME) so that your alias domain (e.g., learning.yourdomain.it) points to our infrastructure instead of your old server.

Important: Only proceed with this step after receiving explicit confirmation from our team. Changing the pointing records too early will result in downtime for your users.

What you need to do: EDIT the existing A or CNAME record for your alias domain to point to the address we provide. The certificate and SES records you added in Step 1 should remain in place. Check our full DNS documentation for the exact values.

Once DNS propagation is complete (usually a few minutes to a few hours), all traffic to your domain will be served by Forma Cloud.

Step 7 — Final testing

After updating the DNS, access your migrated platform and:

Important: Leave maintenance mode active on your old installation. This prevents users from accidentally accessing the old server during DNS propagation.


DNS Configuration Summary

Here's a quick reference of the DNS actions required during the migration:

When Action Records Purpose
Step 1 (before migration) ADD new records CNAME records for SSL certificate validation; TXT/CNAME records for SES (DKIM, SPF, domain verification) Certificate issuance and email authentication
Step 6 (after our OK) EDIT existing records A record or CNAME for the alias domain (e.g., `learning.yourdomain.it`) Point traffic to Forma Cloud

Security and Data Protection

The security of your data is our priority. During the migration process:


Plugins, Custom Modules, and Customizations

If your platform contains custom elements:

Please inform us when submitting your data. This will allow us to:

Important: We cannot maintain unrecognized plugins or platform customizations, but we will work with you to find the best possible solution to ensure continuity with your current version.


After the Migration

Once the migration is complete and your platform is finally running on Forma Cloud, please keep your previous service active and maintain a backup of your files and database for at least 6 months.


FAQ – Frequently Asked Questions

Will the platform be offline during the migration?

It will be online but closed for user access (Maintenance Mode).

How long does the migration take?

On average, between 2 and 5 business days.

Can the migration be scheduled at specific days?

Yes, let us know and we'll find the most suitable time slot.

What happens if I don't have some of the required data?

We'll help you retrieve it and, if necessary, we can work with backups provided by you.

Will my data be deleted from the previous server?

No, unless you remove it manually. We copy the data; we do not delete it.

What happens with the login and tracking data of my users and courses?

Nothing! After the migration, your users will be able to log in again with the same credentials, all tracking data will be retained, and all your courses and their configurations will be maintained, compatible with the version of Forma implemented.

When should I change my DNS records?

DNS changes happen in two phases. Before the migration, you add the certificate and email (SES) records we provide — these don't affect your current platform. After the migration, once we confirm everything is ready, you update the pointing records (A or CNAME) so your domain points to Forma Cloud. Never change the pointing records before receiving our explicit confirmation.

How long does DNS propagation take?

Usually between a few minutes and a few hours, depending on your DNS provider and TTL settings. During this time, some users may still reach the old server — that's why we recommend leaving maintenance mode active on the old installation.


Support

If you have questions or difficulty retrieving the required information, our team is here to help. Don't hesitate to contact us!

Integrating Forma Cloud

Integrate with other applications and automate users maintennce

Integrating Forma Cloud

I/O Task Integration

When to use IO Task Integration

IO Task Integration is designed to connect Forma LMS with external business systems through asynchronous file exchange (e.g., CSV, XML) on a shared SFTP folder.

This approach is particularly suitable when:

When real-time interaction or event-driven logic is required, API-based integrations are recommended instead.

Use Cases

Typical use cases for IO Task Integration include:

Check the official documentation for a full guide to the available connectors

Custom I/O activities may be analyzed and implemented upon request


Integration Flow

The typical IO Task integration flow works as follows:

  1. The external business system generates a data file
  2. The file is placed in a shared folder
  3. Forma LMS processes the file through the configured IO Task
  4. Data is imported or updated within the platform

File Management and Shared Folders

Shared Folder

File Upload to Forma Cloud

All files used for data exchange must be placed in a shared SFTP folder provided by Forma Cloud with the following pathhtml/files/common/iofiles

Your SFTP credentials are published in your client area, or you can ask our helpdesk team 

Please verify that your systems can:
- automatically generate files in the required format
- transfer them to the shared folder (e.g., via SFTP or similar services)

File Retrieval from client system

If your system cannot automatically send files to the Forma Cloud shared folder, it is possible to:

⚠️ This additional service involves extra cost.


File format

The data file must comply with the following requirements:

- The file format must be .csv (mandatory)  
- There are no strict constraints on the column separator (e.g., comma, semicolon, etc.), as long as it is consistent within the file  
- Additional columns are allowed and will be ignored if not mapped in the IO Task configuration 
- The column order is not strictly required during the initial setup  

Once the integration procedure has been configured and activated, separator type and column structure must remain consistent over time. Changes to separators, column order or structure may cause errors in data processing.

Scheduling

The I/O task cron job is usually processed nightly at 2 am


Data Specifications

Users import and update

Creating and updating users

Managing Node assignment

Suspending users

The IO Task feature will only suspend and won't remove any user

The update procedure can't reactivate suspended users: this is to avoid conflicts with manual users management

Export of users status on courses

This connector will generate a CSV file containing a list of users and their status on courses, and can be integrated with other user information from custom fields.

Enroll users to courses

Upload a CSV file containing a list of users and course codes to automatically enroll users

Integrating Forma Cloud

API Integration

Integrating with Forma Cloud APIs and Postman

Overview

Forma Cloud provides a complete set of REST APIs that allow you to perform the most common operations on users, courses, enrollments, certificates, and reporting.

Forma Cloud uses the standard APIs of Forma LMS.

Official Forma LMS API Documentation:
https://docs.google.com/document/d/1bbNL7AR_2gbescLkgBIL3Cu7BZ9tZLky9spM3bfkZjA/edit?tab=t.0

Common Use Cases

The APIs can be used to integrate the platform with other corporate systems.

HR System Synchronization

HSE Management Integration

Business Intelligence & Reporting

Corporate Portal Integration

In multi-tenant installations, it is strongly discouraged to grant API access to individual sub-clients. Doing so may expose sensitive data across different tenants, increasing the risk of privacy breaches and unauthorized access. To ensure proper data isolation and security, API usage should be restricted to controlled and centralized contexts.

Enabling the APIs in Forma Cloud

APIs can be enabled and configured directly from your platform.

Configuration Path:

Admin > System Configuration > Settings > API & SSO

image.png

Here you can:

Forma LMS official system configuration guide: https://docs2.formalms.org/books/reference-guide/page/system-configuration

Exporting the Postman Collection from Forma Factory

Once your platform's API are activated and configured, From your Client Control Panel you can:

image.png

This avoids manual configuration and speeds up testing.

What is Postman?

It is available as a desktop application and as a web application.

How to Use Postman with Forma Cloud

1. Import the Collection
2. Configure the Environment

Set the main variables:

3. Authenticate

Use the authentication endpoint to obtain an access token as described in the official documentation.

Execute API Calls

Select the desired endpoint (e.g., users, courses, enrollments) and send the request.

API response standard: the mantained format is JSON. Most API still provide also the legacy XML format, but is now deprecated and will be removed in future releases.

Security & Best Practices

Official Resources

Integrating Forma Cloud

SSO Features

SSO Integration with Forma Cloud

1. What is Forma Cloud SSO?

The FormaLMS SSO system allows the generation of automatic login links that authenticate the user securely through a temporary cryptographic token. This is a common solution for:

This guide explains how to correctly implement Single Sign-On (SSO) authentication with FormaLMS, allowing users to access the platform directly from external systems without entering their credentials.


2. How SSO Works

The SSO login process is based on three elements:

  1. login_user – The username of the user who must be authenticated

  2. time – A Unix timestamp representing when the link was generated

  3. token – An MD5 hash that validates the authenticity of the request

The token is calculated using the username, timestamp, and a shared secret key (SSO Secret).


3. SSO URL Structure

A valid SSO URL follows this structure:

https://PLATFORM/index.php?r=adm/homepage/sso&login_user=USERNAME&time=TIMESTAMP&token=TOKEN

Parameters

Example

https://forma.example.com/index.php?r=adm/homepage/sso&login_user=mario.rossi&time=1729681425&token=A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6

4. Generating the SSO Token

Step 1: Generate the Unix Timestamp

The Unix timestamp represents the number of seconds elapsed since Jan 1st, 1970 (UTC).

Examples:

Important: The timestamp must be generated dynamically at the moment of the SSO request.


Step 2: Calculate the Token

The token is an uppercase MD5 hash of a specific concatenated string:

token = MD5_UPPERCASE(login_user + "," + time + "," + sso_secret)

Where:

Example (PHP)

$loginUser = "mario.rossi";
$time = 1729681425;
$ssoSecret = "mia_chiave_segreta_123";
// Build the string
$stringToHash = $loginUser . ',' . $time . ',' . $ssoSecret;
// Result: "mario.rossi,1729681425,mia_chiave_segreta_123"
// Calculate MD5 and convert to UPPERCASE
$token = strtoupper(md5($stringToHash));
// result: "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6"

 Requirements:
- Commas must match exactly
- No extra spaces
- Final hash must be uppercase


Step 3: Build the Final URL

Once the timestamp and token are ready, construct the final SSO URL:

Example (PHP):

$platformUrl = "https://forma.example.com";

$ssoUrl = $platformUrl . "/index.php"
    . "?r=adm/homepage/sso"
    . "&login_user=" . urlencode($loginUser)
    . "&time=" . $time
    . "&token=" . $token;

5. Configuration in FormaLMS

Before using SSO, configure the secret key inside FormaLMS:

  1. Log in as admin

  2. Navigate to Administration → Configuration → SSO

  3. Enter the SSO Secret Key (must match the one used in your code)

  4. Save settings


Characteristics:

Best practices:


7. Implementation Checklist

Configuration

Token Generation

URL


8. Testing and Verification

Manual Token Test

Verify the token by hashing a test string in the exact format:

username,timestamp,secret

Use any MD5 generator to confirm the result.

Access Test

  1. Generate a valid SSO URL

  2. Open it in a browser within 5 minutes

  3. Confirm the user is logged in

  4. Confirm redirection to the homepage


9. Troubleshooting

"Invalid token" or "Access denied"

Check:

Check:

Redirects to login page

Check:


10. Security

Protecting the SSO Secret

Monitoring


11. SSO Variants

FormaLMS supports two SSO endpoints:

1. Standard SSO (username-based)

?r=adm/homepage/sso&login_user=USERNAME&time=TIME&token=TOKEN

Token: MD5(username,time,secret)

2. Custom SSO (email-based)

?r=adm/ssologin/show&email=EMAIL&time=TIME&token=TOKEN

Token: MD5(email,time,secret)

Check which one your installation uses.

12. Full Implementation examples

PHP

<?php

/**
 * Generates a valid SSO URL for FormaLMS
 *
 * @param string $loginUser   The username of the user
 * @param string $ssoSecret   Secret key configured in FormaLMS
 * @param string $platformUrl Base platform URL
 * @return array              Generated SSO data
 */
function generateSSOUrl($loginUser, $ssoSecret, $platformUrl)
{
    // STEP 1: Generate current Unix timestamp
    $time = time();

    // STEP 2: Calculate the token
    $stringToHash = $loginUser . ',' . $time . ',' . $ssoSecret;
    $token = strtoupper(md5($stringToHash));

    // STEP 3: Build the URL
    $url = rtrim($platformUrl, '/') . "/index.php"
         . "?r=adm/homepage/sso"
         . "&login_user=" . urlencode($loginUser)
         . "&time=" . $time
         . "&token=" . $token;

    return [
        'url' => $url,
        'login_user' => $loginUser,
        'time' => $time,
        'token' => $token,
        'valid_until' => date('Y-m-d H:i:s', $time + 300)
    ];
}

// Example usage
$ssoData = generateSSOUrl(
    'mario.rossi',                    // Username
    'my_secret_key_123',              // SSO Secret
    'https://forma.example.com'       // Platform URL
);

echo "SSO URL: " . $ssoData['url'] . "\n";
echo "Valid until: " . $ssoData['valid_until'] . "\n";
?>

JavaScript (Node.js)

const crypto = require('crypto');

/**
 * Generates a valid SSO URL for FormaLMS
 */
function generateSSOUrl(loginUser, ssoSecret, platformUrl) {

    // STEP 1: Unix timestamp
    const time = Math.floor(Date.now() / 1000);

    // STEP 2: Calculate token
    const stringToHash = `${loginUser},${time},${ssoSecret}`;
    const token = crypto
        .createHash('md5')
        .update(stringToHash)
        .digest('hex')
        .toUpperCase();

    // STEP 3: Build URL
    const baseUrl = platformUrl.replace(/\/$/, '');
    const url = `${baseUrl}/index.php?r=adm/homepage/sso`
              + `&login_user=${encodeURIComponent(loginUser)}`
              + `&time=${time}`
              + `&token=${token}`;

    return {
        url: url,
        login_user: loginUser,
        time: time,
        token: token
    };
}

// Example usage
const ssoData = generateSSOUrl(
    'mario.rossi',
    'my_secret_key_123',
    'https://forma.example.com'
);

console.log('SSO URL:', ssoData.url);
console.log('Token:', ssoData.token);

Python

import hashlib
import time
from urllib.parse import quote

def generate_sso_url(login_user, sso_secret, platform_url):
    """
    Generates a valid SSO URL for FormaLMS
    """

    # STEP 1: Unix timestamp
    current_time = int(time.time())

    # STEP 2: Calculate token
    string_to_hash = f"{login_user},{current_time},{sso_secret}"
    token = hashlib.md5(string_to_hash.encode()).hexdigest().upper()

    # STEP 3: Build URL
    base_url = platform_url.rstrip('/')
    url = (f"{base_url}/index.php?r=adm/homepage/sso"
           f"&login_user={quote(login_user)}"
           f"&time={current_time}"
           f"&token={token}")

    return {
        'url': url,
        'login_user': login_user,
        'time': current_time,
        'token': token
    }

# Example usage
sso_data = generate_sso_url(
    'mario.rossi',
    'my_secret_key_123',
    'https://forma.example.com'
)

print('SSO URL:', sso_data['url'])
print('Token:', sso_data['token'])

C# (.NET)

using System;
using System.Security.Cryptography;
using System.Text;
using System.Web;

public class FormaSSO
{
    public static string GenerateSSOUrl(string loginUser, string ssoSecret, string platformUrl)
    {
        // STEP 1: Unix timestamp
        long time = DateTimeOffset.UtcNow.ToUnixTimeSeconds();

        // STEP 2: Calculate token
        string stringToHash = $"{loginUser},{time},{ssoSecret}";
        using (MD5 md5 = MD5.Create())
        {
            byte[] hashBytes = md5.ComputeHash(Encoding.UTF8.GetBytes(stringToHash));
            string token = BitConverter.ToString(hashBytes).Replace("-", "").ToUpper();

            // STEP 3: Build URL
            string baseUrl = platformUrl.TrimEnd('/');
            string url = $"{baseUrl}/index.php?r=adm/homepage/sso"
                        + $"&login_user={HttpUtility.UrlEncode(loginUser)}"
                        + $"&time={time}"
                        + $"&token={token}";

            return url;
        }
    }
}

// Example usage
string ssoUrl = FormaSSO.GenerateSSOUrl(
    "mario.rossi",
    "my_secret_key_123",
    "https://forma.example.com"
);

Console.WriteLine($"SSO URL: {ssoUrl}");

Integrating Forma Cloud

SAML/OIDC Integration

Integration Between Azure Active Directory and Forma Cloud via SAML or OIDC

1. Introduction

The integration between Forma LMS and MS Entra (Formerly Azure Active Directory - AAD) allows users to authenticate into the learning platform using their corporate Office 365 credentials.
Access is managed through standard federation protocols — SAML 2.0 or OpenID Connect (OIDC) — ensuring security, centralized user management, and Single Sign-On (SSO).


2. Prerequisites


3. Choosing the Authentication Protocol

Protocol Description Typical Supported IdPs
SAML 2.0 XML-based standard protocol widely used for enterprise Single Sign-On. Azure Active Directory, Microsoft ADFS, Google Identity, Auth0, SimpleSAMLphp
OIDC (OpenID Connect) OAuth 2.0–based protocol, more lightweight and modern, ideal for cloud integrations. Azure Active Directory, Salesforce, Auth0

Note: For Microsoft 365 environments, either SAML or OIDC may be used depending on corporate security policies. Both protocols are supported by the Forma LMS authentication plugin.


4. Configuration via SAML

4.1 Creating the Application in Azure AD

  1. Log in to the Azure portal with an administrator account.

  2. Navigate to Azure Active Directory → Enterprise Applications → New Application.

  3. Select Create your own applicationNon-gallery application.

  4. Enter a name, e.g., “Forma LMS SAML.”

  5. Once created, go to the Single Sign-On section and select SAML as the authentication method.


4.2 SAML Configuration

Within the SAML configuration page, set the following parameters:

User Attributes Mapping

In the Azure AD application, configure the following attribute mappings:

SAML Attribute Name Azure AD Source Attribute Description
username user.userprincipalname Unique username
givenName user.givenname First name
surname user.surname Last name
email user.mail Email address

Additional attributes can be sent, but only those listed above are natively managed by the Forma LMS plugin.


4.3 User Management


4.4 Assigning Users or Groups

In the Azure portal, within the SAML application:


5. Configuration via OIDC

5.1 Creating the OIDC Application in Azure AD

  1. Log in to the Azure portal.

  2. Go to Entra/Azure Active Directory → App Registrations → New Registration.

  3. Configure:

    • Name: “Forma LMS OIDC”

    • Supported account types: “Accounts in this organizational directory only.”

    • Redirect URI: https://yourportal/formalms/oidc/callback.php.

  4. After creation, note the following values:

    • Client ID

    • Tenant ID

    • Client Secret (generated under Certificates & Secrets)


5.2 Configuration in Forma LMS

In the Forma LMS OIDC plugin, enter the following parameters:

Parameter Example Value
Client ID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Client Secret ****************
Issuer URL https://login.microsoftonline.com/<tenant-id>/v2.0
Redirect URL https://yourportal/formalms/oidc/callback.php
Scopes openid profile email

As with SAML, automatic account creation and user data synchronization can be enabled at login.


6. Compatibility

Protocol Identity Providers Tested with Forma LMS
SAML Microsoft Azure AD, Microsoft ADFS, Google Identity, Auth0, SimpleSAMLphp
OIDC Microsoft Azure AD, Salesforce, Auth0

7. Useful Resources


Privacy & GDPR

Privacy & GDPR

Data Processing Agreement (DPA) (IT)

Accordo e Nomina a Responsabile per il trattamento dei dati personali (versione standard)

1. Ruolo delle parti

Il Cliente agisce in qualità di Titolare del trattamento dei dati personali.
Il Fornitore agisce in qualità di Responsabile del trattamento ai sensi dell’art. 28 del Regolamento (UE) 2016/679 (GDPR), limitatamente ai dati trattati nell’ambito dell’erogazione del servizio.

1.1 Dati del responsabile

Forma Farm S.r.l. Indirizzo: via Savona 10 – 20144 Milano Nome, qualifica e dati di contatto del referente: Alberto Pastorelli, Amministratore Delegato Indirizzo mail amministrazione@formafarm.com

1.2 Data Protection Officer (DPO)

Forma Farm non è soggetta all’obbligo di nomina del Data Protection Officer (DPO) ai sensi dell’art. 37 del Regolamento (UE) 2016/679 (GDPR) e non ha proceduto alla sua designazione.

1.3 Modello organizzativo e governance della sicurezza

Forma Farm adotta un assetto organizzativo interno per la gestione della sicurezza delle informazioni e della protezione dei dati personali. Tale assetto include la definizione di ruoli, responsabilità e processi operativi finalizzati a garantire la conformità al Regolamento (UE) 2016/679 (GDPR) e la gestione sicura dei servizi erogati.

In particolare, il Fornitore ha implementato un insieme strutturato di procedure e controlli organizzativi che disciplinano:

Tali misure costituiscono il framework organizzativo interno di sicurezza del Fornitore e sono documentate nel presente DPA e nella documentazione tecnica “Infrastructure & Security Standards”.

1.4 Conformità art. 40–42 GDPR

Forma Farm non aderisce attualmente a un codice di condotta ai sensi dell'art. 40 del GDPR né dispone di una certificazione ai sensi dell'art. 42.


2. Personale autorizzato al trattamento

Il Fornitore si avvale di personale interno e collaboratori esterni autorizzati al trattamento dei dati personali ai sensi dell’art. 29 del GDPR.

Tali soggetti:

L’accesso ai dati è limitato ai soli soggetti autorizzati e avviene secondo il principio di minimizzazione.

L’elenco aggiornato dei soggetti autorizzati è mantenuto internamente dal Fornitore ed è reso disponibile al Titolare su richiesta.

2.1 Assistenza al Titolare del trattamento

Il Responsabile presta al Titolare, tenuto conto della natura del trattamento e delle informazioni a sua disposizione, l’assistenza ragionevolmente necessaria per consentire l’adempimento degli obblighi previsti dagli articoli da 32 a 36 del GDPR, nonché per la gestione delle richieste degli interessati ai sensi degli articoli 15–22 del GDPR.

In particolare, il Responsabile supporta il Titolare nella gestione di:

sicurezza del trattamento e misure tecniche e organizzative (art. 32) notifiche di violazioni dei dati personali all’autorità di controllo (art. 33) comunicazioni di data breach agli interessati (art. 34) valutazioni di impatto sulla protezione dei dati (DPIA) (art. 35) consultazioni preventive con l’autorità di controllo (art. 36) richieste di esercizio dei diritti da parte degli interessati


3. Sub-responsabili del trattamento

Per l’erogazione dei servizi, il Fornitore può avvalersi di sub-responsabili del trattamento ai sensi dell’art. 28 GDPR.

3.1 Sub-responsabili principali

Il Fornitore garantisce che i sub-responsabili:

Il Fornitore si impegna a mantenere aggiornato l’elenco dei sub-responsabili e a comunicarne eventuali modifiche al Titolare su richiesta o tramite pubblicazione nella presente documentazione.


4. Misure tecniche e organizzative (Art. 32 GDPR)

Il Fornitore adotta un insieme di procedure e misure tecniche e organizzative per la gestione della sicurezza delle informazioni e della protezione dei dati personali.

Tali misure disciplinano ruoli e responsabilità, gestione degli accessi, sviluppo sicuro, gestione delle vulnerabilità, incident response, backup, business continuity e controllo dei fornitori.

Nel dettaglio, il Fornitore adotta misure adeguate per garantire un livello di sicurezza proporzionato al rischio, tra cui:

Per maggiori dettagli sulle misure tecniche implementate si può fare riferimento al documento apposito: Infrastructure & Security Standards


5. Gestione degli incidenti e data breach

Il Fornitore adotta procedure interne per la gestione degli incidenti di sicurezza e delle violazioni dei dati personali.

In caso di violazione dei dati personali, il Fornitore:


6. Trasferimenti di dati

I dati personali sono trattati all’interno dello Spazio Economico Europeo.

Eventuali trasferimenti verso paesi terzi avvengono nel rispetto del Capo V del GDPR e mediante adeguate garanzie (es. clausole contrattuali standard), ove applicabili.


7. Durata del trattamento

Il trattamento dei dati personali è limitato alla durata del servizio erogato dal Fornitore.

Al termine del rapporto contrattuale i dati saranno restituiti al Titolare su richiesta, o cancellati secondo i tempi di retention dichiarati nella documentazione di "Infrastructure & Security Standards", salvo obblighi di legge.


8. Descrizione del trattamento dei dati personali

8.1 Tipologia di servizio

Il servizio consiste nell’erogazione di una piattaforma LMS (Learning Management System) in modalità SaaS, comprensiva di hosting, manutenzione applicativa e supporto tecnico.


8.2 Categorie di interessati

I dati personali trattati possono riguardare:


8.3 Categorie di dati personali

A seconda della configurazione del Cliente, possono essere trattati:


8.4 Dati particolari (se presenti)

Il servizio non è progettato per il trattamento di categorie particolari di dati personali.

Tuttavia, il Cliente può caricare contenuti che includano dati particolari. In tal caso:


8.5 Natura del trattamento

Il trattamento consiste in:

Il trattamento è effettuato esclusivamente per finalità tecniche e operative connesse all’erogazione del servizio.


8.6 Finalità del trattamento

I dati personali sono trattati per:


8.7 Conservazione e cancellazione dei dati

I dati sono trattati per tutta la durata del rapporto contrattuale con il Cliente.

Alla cessazione del servizio:


8.8 Ambito del trattamento da parte dei sub-responsabili

I sub-responsabili del trattamento trattano i dati esclusivamente per:

Non effettuano trattamenti per finalità proprie.

9. Audit e verifiche

Il Fornitore mette a disposizione del Titolare le informazioni necessarie per dimostrare il rispetto degli obblighi previsti dal GDPR.

Il Titolare può richiedere verifiche o attività di audit, che saranno concordate preventivamente tra le parti e svolte secondo modalità tali da non compromettere la sicurezza dei sistemi e la riservatezza di altri clienti.

In particolare:

Il Fornitore si impegna a collaborare in buona fede e a fornire evidenze documentali delle misure tecniche e organizzative adottate.

Privacy & GDPR

Data Processing Agreement (DPA) (EN)

Agreement and Appointment as Data Processor for Personal Data Processing (Standard Version)

1. Role of the parties

The Client acts as Data Controller of the personal data.
The Provider acts as Data Processor pursuant to Art. 28 of Regulation (EU) 2016/679 (GDPR), limited to the data processed in the context of service delivery.

1.1 Processor details

Forma Farm S.r.l. Address: via Savona 10 – 20144 Milan
Referent Name, Title and Contact: Alberto Pastorelli, CEO
Administration Email: amministrazione@formafarm.com

1.2 Data Protection Officer (DPO)

Forma Farm is not subject to the obligation to appoint a Data Protection Officer (DPO) pursuant to Art. 37 of Regulation (EU) 2016/679 (GDPR) and has not appointed one.

1.3 Organizational model and security governance

Forma Farm adopts an internal organizational structure for the management of information security and personal data protection. This structure includes the definition of roles, responsibilities, and operational processes aimed at ensuring compliance with Regulation (EU) 2016/679 (GDPR) and the secure delivery of services.

In particular, the Provider has implemented a structured set of procedures and organizational controls governing:

These measures constitute the Provider’s internal security organizational framework and are documented in this DPA and in the technical documentation “Infrastructure & Security Standards”.

1.4 Compliance with Arts. 40–42 GDPR

Forma Farm does not currently adhere to any code of conduct pursuant to Art. 40 GDPR nor holds any certification pursuant to Art. 42.


2. Personnel authorized to process data

The Provider uses internal personnel and external collaborators authorized to process personal data pursuant to Art. 29 GDPR.

Such subjects:

Access to data is restricted to authorized personnel only and is granted according to the principle of data minimization.

An updated list of authorized personnel is maintained internally by the Provider and made available to the Data Controller upon request.

2.1 Assistance to the Data Controller

The Processor shall provide the Controller, taking into account the nature of the processing and the information available to it, with reasonably necessary assistance to enable compliance with obligations under Articles 32 to 36 of the GDPR, as well as to handle data subject requests pursuant to Articles 15–22 of the GDPR.

In particular, the Processor supports the Controller in managing:


3. Sub-processors

For service delivery, the Provider may engage sub-processors pursuant to Art. 28 GDPR.

3.1 Main sub-processors

The Provider ensures that sub-processors:

The Provider undertakes to keep the list of sub-processors updated and to communicate any changes to the Data Controller upon request or through publication within this documentation.


4. Technical and organizational measures (Art. 32 GDPR)

The Provider adopts a set of procedures and technical and organizational measures for information security and personal data protection management.

These measures govern roles and responsibilities, access management, secure development, vulnerability management, incident response, backup, business continuity, and supplier control.

In detail, the Provider implements appropriate measures to ensure a level of security proportional to the risk, including:

For further details on implemented technical measures, please refer to the dedicated document: Infrastructure & Security Standards


5. Incident and data breach management

The Provider adopts internal procedures for managing security incidents and personal data breaches.

In the event of a personal data breach, the Provider:


6. Data transfers

Personal data are processed within the European Economic Area (EEA).

Any transfers to third countries are carried out in compliance with Chapter V of the GDPR and subject to appropriate safeguards (e.g. Standard Contractual Clauses), where applicable.


7. Duration of processing

Personal data processing is limited to the duration of the service provided by the Provider.

Upon termination of the contractual relationship, data will be returned to the Controller upon request or deleted according to the retention periods stated in the “Infrastructure & Security Standards” documentation, unless otherwise required by law.


8. Description of personal data processing

8.1 Type of service

The service consists of providing an LMS (Learning Management System) platform in SaaS mode, including hosting, application maintenance, and technical support.


8.2 Categories of data subjects

The personal data processed may relate to:


8.3 Categories of personal data

Depending on the Client’s configuration, the following may be processed:


8.4 Special categories of data (if any)

The service is not designed to process special categories of personal data.

However, the Client may upload content including special categories of data. In such cases:


8.5 Nature of processing

Processing consists of:

Processing is carried out exclusively for technical and operational purposes related to service delivery.


8.6 Purposes of processing

Personal data are processed for:


8.7 Data retention and deletion

Data are processed for the entire duration of the contractual relationship with the Client.

Upon termination of the service:


8.8 Scope of processing by sub-processors

Sub-processors process data exclusively for:

They do not carry out processing for their own purposes.


9. Audit and verification

The Provider makes available to the Data Controller the information necessary to demonstrate compliance with GDPR obligations.

The Controller may request audits or verification activities, which shall be agreed in advance between the parties and carried out in such a way as not to compromise system security and the confidentiality of other clients.

In particular:

The Provider undertakes to cooperate in good faith and to provide documentary evidence of the technical and organizational measures implemented.

Privacy & GDPR

Default Cookie Policy

Cookie Policy – Forma Cloud

Cookies are small text files stored on a user’s device or browser during navigation. They are commonly used to ensure the proper operation of web applications, maintain authenticated sessions, remember user preferences, and support security-related features.

By default Forma Cloud uses exclusively technical and functional first-party cookies, and may use analytics cookies if optionally set by an administrator. The platform does not use third-party cookies, advertising cookies, or profiling technologies.

Types of Cookies Used

Forma Cloud uses three categories of technical cookies:

Session Cookies

Session cookies are temporary cookies that are automatically deleted when the browser is closed. These cookies are required to maintain active user sessions and ensure secure navigation throughout the platform.

Functional Cookies

Functional cookies are persistent cookies used to remember user preferences and improve usability. Examples include accessibility settings or interface preferences selected by the user.

Optional Tracking Cookies (Google Analytics)

The platform allows administrators to optionally integrate Google Analytics for usage analysis and reporting. This feature is provided as an optional tool and is not required for the core operation of the service.

Default Cookies Used by Forma Cloud

Additional Notes

Managing Cookies

Users can manage cookie preferences through their browser settings. Typical options include:

Disabling technical cookies may prevent parts of the platform from functioning correctly.

Browser-specific documentation is available from:

Updates to This Policy

The latest version published on the platform is always considered the current one.

For more information about personal data processing, please refer to the Forma Cloud Privacy Policy.