# Error Responses
Source: https://docs.lighton.ai/en/administration/advanced-administration/error-responses
During the use of Paradigm or the API, errors may occur.
During the use of Paradigm or the API, errors may occur.
This section lists and groups all recorded error messages.
# Group Results
Source: https://docs.lighton.ai/en/administration/advanced-administration/group-results
In Paradigm, Celery is used as a background task runner, managing various processes such as parsing data, sending emails, and other asynchronous operations. The admin panel provides a way to monitor and manage these tasks effectively.
In Paradigm, Celery is used as a background task runner, managing various processes such as parsing data, sending emails, and other asynchronous operations. The admin panel provides a way to monitor and manage these tasks effectively.
## Understanding Celery and Task Management in Paradigm's Admin Panel
The Group Results section is designed to manage tasks that are grouped together and need to be executed as a whole.
This feature is not used yet, but it will provide a way to handle more complex workflows where multiple tasks must be completed together.
By using the Celery task management features, administrators can ensure that all background processes are running smoothly, identify potential problems, and maintain the overall performance and reliability of the platform.
# ML Completions
Source: https://docs.lighton.ai/en/administration/advanced-administration/ml-completions
Represents a single machine learning (ML) completion object. Each completion contains exactly one output from the language model (LLM).
Represents a single machine learning (ML) completion object. Each completion contains exactly one output from the language model (LLM).
Every interaction with the platform or API generates a completion (user query + model response). All generated completions/responses are listed in the admin panel.
# ML Requests
Source: https://docs.lighton.ai/en/administration/advanced-administration/ml-requests
API request sent by a user, which may include multiple prompts.
API request sent by a user, which may include multiple prompts.
Every user request made through the platform or API is recorded and listed in this section.
# ML Responses
Source: https://docs.lighton.ai/en/administration/advanced-administration/ml-responses
The corresponding API response from the LLM to the user. If a request includes multiple prompts, there will be multiple completions.
The corresponding API response from the LLM to the user. If a request includes multiple prompts, there will be multiple completions.
Every response generated by the platform or API is recorded and listed in the admin panel.
# Task Results
Source: https://docs.lighton.ai/en/administration/advanced-administration/task-results
In Paradigm, Celery is used as a background task runner, managing various processes such as parsing data, sending emails, and other asynchronous operations. The admin panel provides a way to monitor and manage these tasks effectively.
In Paradigm, Celery is used as a background task runner, managing various processes such as parsing data, sending emails, and other asynchronous operations. The admin panel provides a way to monitor and manage these tasks effectively.
## Understanding Celery and Task Management in Paradigm's Admin Panel
The Task Results section displays a list of all executed background tasks along with their current status, any errors encountered, and their results. This allows administrators to keep track of what tasks have been performed, identify any issues, and review the outcomes of these tasks.
By using the Celery task management features, administrators can ensure that all background processes are running smoothly, identify potential problems, and maintain the overall performance and reliability of the platform.
# Agents Settings
Source: https://docs.lighton.ai/en/administration/agent-management/agent-settings
The Agent section in the administration interface allows administrators to configure and manage the Agents available to their organization.
A default Agent is automatically created when a company is set up, ensuring that users immediately have a functional assistant available.
> **Naming history**: Starting with the Victorious Vicuna release (January 2026), "Chat Settings" was renamed to "Agent Settings." With the Wise Wolf release, the **Multi-Agent** feature now enables creating and managing multiple Agents per organization.
## Creating and Configuring an Agent
An administrator (System Admin, Account Manager, or Company Admin) can create Agents from the administration panel with the following settings:
### General Settings
* **Name and description**: identify the Agent in the user interface and the discovery page.
* **Instruction (system prompt)**: defines the Agent's behavior for all users who have access to it.
* **Default model**: specifies which AI model is used by this Agent.
* **Company**: the company linked to this Agent.
* **Support email**: the email address where bug reports will be sent when users encounter issues and submit reports.
### Tools and Capabilities
* **Agent Tools**: manage the tools available for this Agent (e.g., Search Documents, Search Visual).
* **Agent MCP Servers**: configure the MCP servers available for this Agent (e.g., Web Search Linkup).
### Agent Ownership
When creating an Agent, an administrator must choose its **ownership**, which determines who can access it. Ownership is set at creation and **cannot be changed** afterwards.
| Ownership | Who can access it | Team required? |
| :----------- | :---------------------------- | :--------------------------------------- |
| **Personal** | The creator only | No |
| **Company** | All users in the organization | No |
| **Team** | Members of a specific team | Yes — select the target team at creation |
Regular users can only create **Personal** Agents.
The `ownership` field (Personal, Company, Team) was introduced in **Xenial Xerus** (March 2026) as a shorthand to simplify agent creation. On earlier versions, the same access control is achieved by passing the appropriate `group_id` directly: a user's personal group for a personal agent, the company-wide group for a company agent, or a specific team's group for a team agent.
### Document Scope
* **Documents and Workspaces**: select the document sources the Agent can access to search and cite information.
#### Workspace Restriction
By default, a shared Agent (Company or Team) can access **all workspaces belonging to its team**. You can optionally restrict this to a specific subset of workspaces using the **Workspace Restriction** setting, configurable after the Agent has been saved.
When a workspace restriction is set, the Agent will only search and cite documents from those workspaces — regardless of what users pass in their queries.
Workspace Restriction is available from **Xenial Xerus** (March 2026). On earlier versions, agents always access all workspaces of their associated group.
### Access Control
* **Teams**: automatically determined by the ownership chosen at creation. Defines which users can view and use this Agent — a central element of **data governance**.
## Viewing Agents
The **Agent Settings** page in the administration displays all Agents associated with the organization. Administrators can view and manage all Agents, regardless of which teams they are assigned to.
> **On the user side**: Users only see the Agents they have access to through their teams, from the chat interface and the Agent discovery page.
## Default Agent vs Specialized Agents
Each organization has a **default Agent** ("My Assistant") that is automatically selected when creating a new session. Additional Agents created by administrators are **specialized Agents** that users can select manually.
## Permissions Summary
| Action | User | Administrator |
| :----------------------------------------------------- | :--- | :------------ |
| Create a Personal Agent | ✅ | ✅ |
| Create a Company Agent (entire organization) | ❌ | ✅ |
| Create a Team Agent (specific group) | ❌ | ✅ |
| Configure tools, MCP, documents, workspace restriction | ❌ | ✅ |
| Use an Agent (if access via ownership/group) | ✅ | ✅ |
| Manage favorites | ✅ | ✅ |
| View Agents you have access to (chat interface) | ✅ | ✅ |
| View all organization Agents (admin) | ❌ | ✅ |
## Best Practices
* **Name your Agents clearly**: an explicit name and description help users choose the right Agent (e.g., "HR Assistant — Leave & Payroll", "Regulatory Watch — Banking Sector").
* **Limit the document scope**: an Agent with access to a targeted set of documents will produce more relevant responses than one with access to everything.
* **Use teams for governance**: assign each Agent to the relevant teams to ensure only authorized users can access the associated documents.
# MCP Servers Integration
Source: https://docs.lighton.ai/en/administration/agent-management/mcp-servers
Extend the scope of Paradigm by connecting third-party MCP servers.
**Current Status:** Generally Available (as of **Victorious Vicuna**).
With the **Victorious Vicuna** release, Paradigm fully supports the ability to connect to external MCP servers. This feature greatly extends the platform’s scope by allowing customers to call any MCP server of their choice directly from Paradigm.
> **⚠️ Note on Agents:** This functionality requires the **Agent feature** to be enabled on your environment.
## What is an MCP server?
An **MCP (Model Context Protocol) server** provides external knowledge, data, or tools that Paradigm agents can query. It allows customers to connect Paradigm with their own systems or third-party providers.
### Limitations & Quality
* **Dependency on MCP quality:** Performance and accuracy depend entirely on the search/retrieval mechanisms of the configured MCP server.
* **Data Integration:** Responses from an MCP server are not indexed into Paradigm’s internal database. Paradigm relies on the MCP’s own search engine. Results may vary depending on the configuration and reliability of the chosen provider.
***
## Step 1: Configure an MCP Server
Configuration is managed in **Admin > MCP Servers**.
### Visibility & Security Rules (New in Victorious Vicuna)
To ensure strict data segregation between companies, visibility of MCP details is now scoped based on your role (System Admin vs. Company Admin) and the ownership of the MCP server.
| **Role** | **MCP Ownership / Scope** | **Visibility Details** |
| :---------------- | :------------------------------------- | :------------------------------------------------------------------------------------------------------ |
| **System Admin** | Owned by my company OR "All Companies" | **Full Access:** Can see and edit all fields. |
| **System Admin** | Not owned by my company | **Restricted:** Only the **Name** is visible (Read-only). The URL and configuration details are hidden. |
| **Company Admin** | Owned by my company | **Edit Access:** Can modify Name, URL, and Token. Availability Scope is read-only. |
| **Company Admin** | Scope set to "All Companies" (Public) | **Read-Only:** Can only see the **Name**. URL and details are hidden. |
### How to Add a New Server
1. Go to **Admin > MCP Servers**.
2. Click **New**.
3. Fill in the following information:
* **Name:** A human-readable name for the MCP server (e.g., `paradigm-docs`).
* **URL:** The endpoint of the MCP server (e.g., `https://lighton.mintlify.app/mcp`).
* **Bearer token (optional):** Authentication token if required (stored encrypted).
* **Enabled:** Toggle to enable/disable this server.
4. **Availability Scope:** Define which companies can access this server.
5. Click **Save**.
*Once saved, the server is registered in Paradigm but must be associated with a chat setting to be used.*
## Step 2: Manage Tools & Chat Settings
Once the MCP server is configured, it appears in the **Tools** list.
### Managing the Tools List
Go to the **Tools** admin page.
* **System Admins** can now filter MCP tool groups by **Owner Company**.
* **Security Note:** You will not be able to view the URLs of MCP servers included in tool groups that do not belong to your company.
### Enable in Chat Settings
To make the MCP active for end-users:
1. Go to **Chat Settings** and select the desired configuration.
2. Enable **Agent mode** ("Enable agent functionality for this chat setting").
3. Under **Agent Tools**, add the configured MCP server to the list of chosen tools.
The MCP server will now be available to the agent during chats in this specific configuration.
***
## Example MCP Servers
Here are some existing MCP servers you could integrate:
* **Arxiv MCP** (`https://arxiv-mcp.replit.app`)
* *Use case:* Query scientific publications and preprints from arXiv.
* **Wikipedia MCP** (`https://wiki-mcp.replit.app`)
* *Use case:* Retrieve knowledge from Wikipedia for general-purpose enrichment.
* **GitHub Issues MCP** (`https://github-issues-mcp.replit.app`)
* *Use case:* Query issues from GitHub repositories.
* **Weather MCP** (`https://weather-mcp.replit.app`)
* *Use case:* Provide real-time weather data for travel or logistics.
* **File System MCP** (`https://fs-mcp.replit.app`)
* *Use case:* Access and retrieve documents from a specified file system.
# Access the Admin Panel
Source: https://docs.lighton.ai/en/administration/getting-started/access-admin-panel
Paradigm admin panel is accessible by clicking on your name and then clicking on Admin.
Paradigm admin panel is accessible by clicking on your name and then clicking on Admin.
If *Admin* does not appear in the drop down, it means that you don't have sufficient permissions.
# API keys
Source: https://docs.lighton.ai/en/administration/iam/authentication/api-keys
You can use the search bar to easily find the API key you're looking for
## Search an API key
You can use the search bar to easily find the API key you're looking for
## List of API Keys
In the Admin/Document section, you can view a comprehensive list of all API keys with the following details:
* **Prefix**: A sequence of characters that identifies the type, origin, or scope of the API key.
* **Unique Name**: The unique name associated with the API key.
* **Created**: The date the API key was created.
* **Expires**: The expiration date of the API key.
* **Has Expired**: Indicates whether the API key is still active. (Red = - Key is still active; Green = Expired)
* **Revoked**: Indicates if the API key has been disabled. (Red = Key is active; Green = Key has been revoked)
You can delete one or multiple API keys using the "Action" dropdown menu.
## Viewing API Key Details
When you access the details of a specific API key, you will see the following information:
* **Roles**: Choose from three roles that determine the permissions for the API key: Standard API Key, Admin API Key, Project API Key
* **Permitted Models**: Specify whether the API key can access one or multiple models from the available list.
* **Permitted Skills**: This feature is not yet active.
* **Opt-In**: A privacy setting that determines whether API usage is tracked. If the opt-in checkbox is unchecked, no usage data will be recorded.
* **User**: Each API key is linked to a specific user. You can reassign the API key to a different user if needed.
* **Prefix**: A sequence of characters that identifies the type, origin, or scope of the API key (automatically generated during creation and not editable).
* **Name**: A unique name for the API key, generated during creation and non-editable.
* **Revoked**: Indicates if the API key has been revoked. Once revoked, it cannot be reactivated.
* **Expires**: Indicates the expiration date of the API key. Once expired, the key is no longer usable.
## Editing/revoking an API key
To edit or revoke an API key, click on its prefix in the list. You can modify its expiration date and time, name, role, permissions (including models and skills), and associated user.
### Deleting an API Key
You can permanently delete an API key from its detail page. Note that this action is irreversible.
## Creating a New API Key
To create a new API key, click the "Add API Key" button and fill in the following details:
* **Expire**: Set the expiration date and time for the API key (optional; non-editable after creation).
* **Name**: A user-defined name for the API key (50 characters max; need not be unique).
* **Roles**: Select one of three roles impacting the API key's permissions: Standard API Key (use stand alone), Admin API Key (admin access), Project API Key (Application/webservice)
* **Permitted Models**: Specify whether the API key can call one or multiple models from the available list.
* **Permitted Skills**: This feature is not yet active.
* **Opt-In**: A privacy setting to determine whether the API key's usage is tracked. If the opt-in checkbox is unchecked, no usage data will be recorded.
* **User**: The API key must be associated with a user, and you can assign it to another user as needed.
To create a new API key, click on the "Add API Key" button at the top right corner or directly on "Add" next to "API Keys" in the left sidebar of the admin panel. After setting your desired parameters and clicking save, remember to save the displayed API key from the banner at the top of your screen; it will not be visible again.
Remember to save the displayed API key from the banner at the top of your screen after creation; it will not be visible again.
# Configure LDAP Authentication
Source: https://docs.lighton.ai/en/administration/iam/authentication/ldap-configuration
LDAP authentication lets users log in to Paradigm using their corporate directory credentials, without needing a separate Paradigm password.
LDAP (Lightweight Directory Access Protocol) authentication lets users log in to Paradigm using their corporate directory credentials. Unlike SAML and OIDC, Paradigm connects directly to your LDAP server to verify credentials.
## Step 1: Enable LDAP instance-wide
Go to **Paradigm administration > Settings > Config Key Values** and set:
* **`IS_LDAP_ON`**: `True`
The application must be restarted after enabling LDAP. Authentication will not work until the restart is complete.
## Step 2: Configure LDAP for a company
Go to **Paradigm administration > Authentication > Social Applications** and click **Add**.
### Basic information
* **Provider**: `ldap`
* **Name**: A descriptive name for the admin (e.g., `Acme Corp LDAP`)
* **Company**: Select the company this configuration applies to
### Login URL configuration
Choose one of the following options, or configure both for redundancy:
**Option A — Custom domain**
* **Custom domain**: `login.yourcompany.com`
* Login URL: `https://login.yourcompany.com/login`
* **Required Environment Variable:**
The `DOMAIN` environment variable must be set for constructing LDAP authentication URLs:
```bash theme={null}
# For production (set in .env or deployment config)
DOMAIN=login.yourcompany.com
# For local development (default)
DOMAIN=localhost:8000
```
* Requires DNS configuration (see [DNS setup](#dns-setup) below)
**Option B — Client ID fallback**
* **Client ID**: A lowercase slug with no spaces (e.g., `yourcompany`)
* Login URL: `https:///login/ldap/yourcompany`
* No DNS configuration required
### LDAP settings
In the **Settings** field, enter a JSON object with your LDAP server configuration:
```json theme={null}
{
"server_uri": "ldaps://ldap.company.com:636",
"bind_dn": "CN=ldap-service,OU=ServiceAccounts,DC=company,DC=com",
"bind_password": "your-secure-password",
"user_search_base": "OU=Users,DC=company,DC=com",
"user_search_filter": "(mail=%(user)s)",
"attr_email": "mail",
"attr_first_name": "givenName",
"attr_last_name": "sn",
"use_tls": true,
"connection_timeout": 5
}
```
| Field | Description |
| -------------------- | ---------------------------------------------------------------------- |
| `server_uri` | LDAP server URL. Use `ldaps://` (port 636) for encrypted connections. |
| `bind_dn` | Distinguished Name of the service account used to query the directory. |
| `bind_password` | Password for the service account. |
| `user_search_base` | Base DN where user accounts are located. |
| `user_search_filter` | Filter to find users. `%(user)s` is replaced with the login username. |
| `attr_email` | LDAP attribute containing the user's email address. |
| `attr_first_name` | LDAP attribute for the user's first name. |
| `attr_last_name` | LDAP attribute for the user's last name. |
| `use_tls` | Whether to use TLS. Recommended: `true`. |
| `connection_timeout` | Connection timeout in seconds. |
## Step 3: Update Company Login Method
**Django Admin → Authentication → Companies → Select Company**
* Set **Login method** to:
* `LDAP` (LDAP only)
## Step 4: Verify CNAME Configuration (For Custom Domains)
After the having configured the DNS:
1. **Wait 5-30 minutes** for DNS propagation
2. **In Django Admin** → Social Applications → Open the Social Application
3. **View detailed diagnostics**:
* Scroll to "CNAME Test Results" section
* See detailed DNS, HTTP, and middleware checks
4. **Bulk test**: Select multiple apps → Actions → "Test CNAME Configuration"
## DNS setup
If you chose the custom domain option, your client must create a DNS CNAME record pointing their login subdomain to the Paradigm application domain:
```
login.yourcompany.com → CNAME → app.
```
DNS propagation may take up to 48 hours. Users will not be able to log in via the custom domain until propagation is complete.
## Security recommendations
* Use a **dedicated read-only service account** for LDAP queries. Do not use an admin account.
* Always use **LDAPS** (`ldaps://`, port 636) rather than plain LDAP (port 389) to encrypt credentials in transit.
* Ensure **TLS/SSL** is enabled (`"use_tls": true`).
## Testing the LDAP Configuration
### 1. Test Company Detection
```bash theme={null}
# Test custom domain
curl -H "Host: login.yourcompany.com" https://app.paradigm.com/api/v3/auth/check-company
# Test client_id fallback (from URL path)
curl https://app.paradigm.com/api/v3/auth/check-company
```
**Expected Response**:
```json theme={null}
{
"company": {
"id": 123,
"name": "Your Company"
},
"auth_method": "ldap",
"custom_domain": "login.yourcompany.com",
"slug": "yourcompany"
}
```
### 2. Test LDAP Connection
Use `ldapsearch` command to verify connectivity:
```bash theme={null}
ldapsearch -H ldaps://ldap.company.com:636 \
-D "CN=service,DC=company,DC=com" \
-w "password" \
-b "OU=users,DC=company,DC=com" \
"(mail=user@company.com)"
```
**Check**:
* Connection succeeds
* User is found
* Attributes (mail, givenName, sn) are returned
### 3. Test Login Flow
1. Visit login URL (custom domain or slug)
2. Enter LDAP username/email
3. Enter LDAP password
4. Verify:
* User is authenticated
* User is auto-provisioned (if new)
* User lands on the chat interface or the policy acceptance
### 4. Check Audit Logs
**Django Admin → Audit Log**
* Filter by user
* Look for:
* "User logged in" with method="ldap"
* "User created" with method="ldap\_auto\_provision" (for new users)
# Security and Authentication on Paradigm: Our Approach to MFA
Source: https://docs.lighton.ai/en/administration/iam/authentication/security-mfa-authentication
LightOn takes security requirements seriously and has designed Paradigm to support flexible and robust authentication methods.
LightOn takes security requirements seriously and has designed Paradigm to support flexible and robust authentication methods. Here's how we handle MFA today.
## What Paradigm Offers Today
Paradigm supports two main authentication modes, each with its own approach to MFA:
### 1. **SSO-Based Authentication with External MFA**
If your organization uses a Single Sign-On (SSO) provider such as **Google Workspace, Azure AD, Okta**, or another identity platform, Paradigm integrates seamlessly with it.
🔐 In this setup, **authentication is fully delegated** to your SSO provider — including enforcement of security policies such as password complexity, session expiration, and, of course, **MFA**.
✅ **MFA is therefore already supported today via your identity provider.**\
This is our **recommended setup for enterprise clients**, especially those with strong security and compliance requirements.
### 2. **Password-Based Authentication (Without SSO)**
In scenarios where SSO is not used, Paradigm falls back to its own password-based authentication.
🚫 Currently, **this mode does not include built-in MFA**, but...
## What's Coming: Native MFA in Paradigm
The good news is that Paradigm is built on top of an authentication library that **natively supports MFA** (e.g., via TOTP or WebAuthn). The functionality is already present in the framework — it simply needs to be integrated into our application layer.
🔧 Our engineering team estimates that **native MFA can be implemented in one release cycle** (approximately 4 weeks).\
This means that **if a customer requires it**, we can deliver native MFA support very quickly.
# Activate the SSO Service in Paradigm
Source: https://docs.lighton.ai/en/administration/iam/authentication/sso-activation
Single Sign-On (SSO) is a feature that allows users to connect to multiple applications using the same credentials, without having to re-enter their Paradigm username and password.
Single Sign-On (SSO) is a feature that allows users to connect to multiple applications using the same credentials, without having to re-enter their Paradigm username and password.
Paradigm supports SSO via two protocols:
* **SAML** (Security Assertion Markup Language)
* **OpenID Connect (OIDC)**
For directory-based authentication, see [LDAP Configuration](/en/administration/iam/authentication/ldap-configuration).
In this article, we'll explain how to enable SSO functionality in Paradigm for a global and per-company instance via Paradigm admin.
## SAML
There are 4 steps to setting up SAML SSO:
1. **Activate the SSO service for the entire Paradigm instance**
2. **Retrieving information from the Identity Provider (IdP)**
3. **SSO configuration on the Paradigm Service Provider (SP) side**
4. **SSO configuration on identity provider side**
### Step 1: Enable SSO for the full Paradigm instance
To activate SSO, you must go to the page Config Key from the administration and configure the following two fields:
1. **`is_sso_on: True`**\
For SSO to be active, the value of this field must be equal to `True` (pay attention to case). If this value is `False`, SSO is disabled for the entire instance.
2. **`default_sso_permissions_for_company_admins`**: This field allows you to define whether by default "Company admin" type users can configure their company's SSO or not. If the value is `True` (pay attention to case), then by default the "company admin" can configure SSO. If this box is `False`, then by default "company admin" cannot configure their company's SSO.
**Important note**: `default_sso_permissions_for_company_admins` affects the "Allow company admins to manage sso" field available on the page **Company** for newly created companies.
If `default_sso_permissions_for_company_admins` is at `True`, the "Allow company admins to manage sso" field will be enabled by default for new companies.
If `default_sso_permissions_for_company_admins` is at `False`, the "Allow company admins to manage sso" field will be disabled by default for new companies. Existing companies are not affected by this setting, their SSO configuration will remain unchanged.
### Step 2: Retrieve Identity Provider Information
To continue, the following information from your identity provider is required:
* **Entity ID**: The ID used to identify your identity provider.
You can then either retrieve:
* **SSO URL**: The URL of your identity provider to which Paradigm should send its SAML requests.
* **Certificate**: The certificate allowing a secure exchange of information between the SP and the IdP.
Or:
* **Metadata URL**: url redirecting to the configuration of your Identity Provider including the SSO URL and the Certificate.
### Step 3: Paradigm Service Provider Side SSO Configuration
For each company, the implementation of SSO requires the creation of a **Social Application**.
To create a new SSO configuration, go to **Paradigm administration > Authentication > Social Applications**.
Finally click on add and fill in the fields with the following information:
* **Provider**: SAML
* **Provider ID**: You should enter the **Entity ID** of your Identity Provider retrieved in step 2.\
(ex: `https://accounts.google.com/o/saml2?idpid=F482izkcy`)
* **Name**: Name that will appear in the admin.\
(ex: `My SAML Configuration`)
* **Client ID**: Unique identifier of the SAML configuration across Paradigm.\
This field is automatically populated with a UUID.\
Cannot be modified by company admins.\
(ex: `3fde0dd3-6457-489a-88e3-cdf413c48a62`)
* **Settings**: Additional information in json format.\
Accepted structures are shown below.
* **Company**: Allows you to define which company you wish to link this SSO configuration to.
#### Social application settings - With SSO URL and Certificate
```json theme={null}
{
"sp": {
"entity_id": "paradigm-mycompany-saml-config"
},
"idp": {
"entity_id": "",
"sso_url": "",
"x509cert": ""
}
}
```
* the Entity ID of the desired service provider for the Paradigm instance (ex: `paradigm-mycompany-saml-config`)
* the SSO URL of your identity provider [retrieved in step 2](#step-2-retrieve-identity-provider-information),
* the Entity ID of the identity provider [retrieved in step 2](#step-2-retrieve-identity-provider-information),
* the identity provider certificate [retrieved in step 2](#step-2-retrieve-identity-provider-information).
#### Social application settings - With Metadata URL
```json theme={null}
{
"sp": {
"entity_id": "paradigm-mycompany-saml-config"
},
"idp": {
"entity_id": "",
"metadata_url": ""
}
}
```
* the Entity ID of the desired service provider for the Paradigm instance (ex: `paradigm-mycompany-saml-config`)
* the Entity ID of the identity provider [retrieved in step 2](#step-2-retrieve-identity-provider-information),
* the Metadata URL [retrieved in step 2](#step-2-retrieve-identity-provider-information).
### Step 4: Configure SSO on the identity provider side
To configure SSO for Paradigm on the side of your identity provider, 2 ways are possible:
* [Via metadata XML file](#configuration-via-metadata-xml-file)
* [Via manual configuration](#manual-configuration)
#### Configuration via metadata XML file
If your identity provider requires a metadata XML file to be configured, you can retrieve this file at the following URL:
`https:///auth/saml//metadata/`
with:
* `` the domain name of the Paradigm instance you are using.\
For our SaaS offer, this field will therefore be `paradigm.lighton.ai`.
* `` the ID defined in Paradigm and allowing you to know which SAML configuration to use (because there can be one SAML configuration per **company**)
A metadata example could be: `https://paradigm.lighton.ai/auth/saml/3fde0dd3-6457-489a-88e3-cdf413c48a62/metadata/`
#### Manual configuration
If your Identity Provider requires manual configuration, you can use the following information:
* **ACS URL**: `https:///auth/saml//acs/`\
ACS URL example: `https://paradigm.lighton.ai/auth/saml/3fde0dd3-6457-489a-88e3-cdf413c48a62/acs/`
* **Entity ID**: Entity ID of the service provider defined in the SAML configuration settings\
(ex: `paradigm-mycompany-saml-config`)
* **Name ID**: Set this field to "Primary Email"
Make sure to define a NameID in your configuration.
Paradigm should be able to find the user email in ``
**Attribute matching**
The email address of your users must be included in the attributes of your SAML responses.
The following application attributes are supported by default in Paradigm to map the user email:
* `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`
* `urn:oid:0.9.2342.19200300.100.1.3`
If those default keys do not fit your Identity Provider configuration, you can enter whatever key fits your needs and specify it in the Social Application settings as shown below:
```json theme={null}
{
"sp": {
...
},
"idp": {
...
},
"attribute_mapping": {
"email": ""
}
}
```
The value of `` in your SAML responses will then be mapped to the Paradigm users email.
**User access**
You can then assign this SAML configuration to the user group of your choice.
## OpenID Connect (OIDC)
### Step 1: Enable SSO for the full Paradigm instance
OIDC uses the same instance-level toggle as SAML. Follow [Step 1 above](#step-1-enable-sso-for-the-full-paradigm-instance) if you haven't done so already.
### Step 2: Retrieve information from your OIDC provider
From your OIDC provider, you will need:
* **Server URL**: The base URL of your OIDC provider (used to discover the authorization, token, and userinfo endpoints).
* **Client ID**: The OAuth 2.0 client ID assigned to Paradigm by your provider.
* **Client Secret**: The OAuth 2.0 client secret assigned to Paradigm by your provider.
### Step 3: Configure the Social Application in Paradigm
Go to **Paradigm administration > Authentication > Social Applications** and click **Add**.
Fill in the following fields:
* **Provider**: `openid_connect`
* **Provider ID**: A unique slug identifier for this configuration (e.g., `mycompany-oidc`). This value appears in the login URL.
* **Name**: A display name for the admin (e.g., `My Company OIDC`)
* **Company**: Select the company this configuration applies to
* **Client ID**: The OAuth 2.0 Client ID retrieved in step 2
* **Secret**: The OAuth 2.0 Client Secret retrieved in step 2
* **Settings**: JSON containing the OIDC server URL:
```json theme={null}
{
"server_url": "https://your-oidc-provider.com"
}
```
### Step 4: Configure the redirect URI in your OIDC provider
Your OIDC provider will require you to allowlist the following redirect URI for Paradigm:
`https:///auth/oidc//login/callback/`
where `` is the value you set in the **Provider ID** field of the Social Application.
### User journey to log in via OIDC
You can send users directly to the OIDC login page with the following URL:
`https:///auth/oidc//login/`
where `` is the value you set in the **Provider ID** field of the Social Application.
## User journey to log in via SSO (SAML)
Once the SSO is activated for your company, the users will have to follow the steps below to login to the platform:
1. The user must go to the authentication page `https:///login`.
2. The user must enter their email address and click on "Connect"
3. The user will be redirected to your Identity Provider and be asked to login there.
4. Once authorized by the Identity Provider, the user will be redirected and granted access to Paradigm.
However, if you don't want your users to enter their email addresses twice, you can send them directly to the following URL: `https:///auth/saml//login/`
Example: `https://paradigm.lighton.ai/auth/saml/64c0ff68-98e1-406b-9e4a-eeaba6a5083d/login/`
Your users will then be directly sent to step 3 above.
If the user wants to switch to login/password mode, they can click on the dedicated button.
If the email used to log in via SSO does not exist in the Identity Provider side or if the user account is deactivated, they may be redirected to an error page from their provider.
## Help setting up your SSO from your provider
As an example, here are different guides for configuring your SSO:
* [Google](https://support.google.com/a/answer/6087519?hl=en\&sjid=14990308594823464734-EU#zippy=%2C%C3%A9tape-ajoutez-lapplication-saml-personnalis%C3%A9e)
* [Microsoft](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/add-application-portal-setup-sso)
## Debugging advice
If you were to face any issue with your SSO configuration, we advice to use a debugging tool such as SAML-tracer which can give you information about the SAML requests and responses between Paradigm and your Identity Provider.
SAML-tracer extension links:
* [Chrome extension](https://chromewebstore.google.com/detail/saml-tracer/mpdajninpobndbfcldcmbpnnbhibjmch?hl=fr)
* [Firefox extension](https://addons.mozilla.org/fr/firefox/addon/saml-tracer/)
1. First, make sure your SAML requests are sent to your Identity Provider
2. Then, you can verify that the SAML response includes a NameID in the Subject
3. Finally, check that the user email is correctly included in the SAML response with an expected attribute name (either the default ones or the one you defined in the "attribute\_mapping" setting)
We hope this article helped you understand how to enable SSO functionality in Paradigm. If you have any questions or problems, do not hesitate to contact us.
# Best Practices To Use Groups
Source: https://docs.lighton.ai/en/administration/iam/group-management/groups-best-practices
Understand how use groups the best way in your organization
## Group Organization Strategies
### **By Department**
**Best for**: Traditional organizational structures
```
Company Groups:
├─ Engineering
├─ Product
├─ Sales
├─ Marketing
├─ Customer Success
└─ Operations
```
### **By Project**
**Best for**: Project-based work with temporary groups
```
Company Groups:
├─ Project Phoenix - Core
├─ Project Phoenix - Extended
├─ Project Atlas - Development
└─ Project Atlas - QA
```
### **Hybrid (Recommended)**
**Best for**: Most organizations
```
Company Groups:
├─ Engineering - Backend
├─ Engineering - Frontend
├─ Engineering - DevOps
├─ Product - Platform
├─ Product - Mobile
├─ Project Phoenix - All
└─ Security Committee
```
## Good Naming Practices
### Recommended format
```
[Department/Function] - [Specific Group/Purpose]
```
### Good examples
```
✅ Excellent names (descriptive and clear):
• "Engineering - Backend Group"
• "Sales - Enterprise"
• "Product - iOS App"
• "Project Phoenix - Core Group"
• "Security Committee"
• "Customer Success - EMEA"
✅ Good names (clear purpose):
• "Engineering Group"
• "Marketing"
• "Data Science"
❌ Avoid (too vague or generic):
• "Group 1"
• "Temp"
• "Test"
• "Misc"
• "Group A"
```
## Group Lifecycle
### Creation checklist
1. ✅ Define clear purpose and scope
2. ✅ Choose descriptive name following conventions
3. ✅ Write comprehensive description
4. ✅ Identify initial members
5. ✅ Document which workspaces group will access
6. ✅ Create group in Admin Panel
7. ✅ Add members
8. ✅ Associate with workspaces
9. ✅ Notify group members
### Regular maintenance
**Monthly**:
* Review group membership for joiners/leavers
* Verify SCIM sync status (if applicable)
**Quarterly**:
* Audit group purpose and membership
* Review workspace associations
* Clean up inactive members
**Annually**:
* Comprehensive group structure review
* Validate all group purposes still relevant
* Consolidate similar or overlapping groups
### Deletion
**Before deleting a group**:
1. ✅ Verify group is no longer needed
2. ✅ Check workspace associations
3. ✅ Notify all group members
4. ✅ Migrate members to other groups if needed
5. ✅ Document reason for deletion
6. ✅ Delete through Admin Panel
## Security Best Practices
### Principle of least privilege
* Only add users who need access to group resources
* Create specific groups for sensitive workspaces
* Regularly audit group memberships
* Remove members promptly when they leave projects
### Access review procedures
```
Monthly:
- Review new members added
- Verify member removals processed
Quarterly:
- Full group membership audit
- Cross-reference with HR systems
- Validate workspace access patterns
Annually:
- Comprehensive access recertification
- Group structure optimization
- Security and compliance review
```
# Group Management: Solving Common Issues
Source: https://docs.lighton.ai/en/administration/iam/group-management/groups-troubleshooting
Explore effective strategies and practical solutions to identify, address, and resolve common challenges in group management, fostering collaboration and productivity.
## User cannot see group
**Symptoms**:
* Group doesn't appear in user's group list
* User cannot access group workspaces
**Check**:
1. Is the user a member of the group?
2. Has the group been created successfully?
3. Is the user's account active?
**Solutions**:
1. **Add user to group** (Admin Panel):
* Navigate to Groups → Select group → Add member
2. **Verify account status**:
* Check user is active in company
* Ensure not marked for deletion
***
## User cannot access workspace
**Symptoms**:
* User is group member but can't access workspace
* Workspace doesn't appear in user's workspace list in Chat UI
**Check**:
1. Is the workspace associated with the user's group?
2. Is the workspace active (not deleted)?
3. Does user have required role for workspace access?
**Solutions**:
1. **Associate workspace with group** (Admin Panel):
* Navigate to Workspaces → Select workspace → Set group
2. **Verify workspace status**:
* Ensure workspace not archived or deleted
3. **Check user role**:
* Verify user has appropriate permissions
***
## Cannot delete group
**Symptoms**:
* Delete button grayed out or missing
* Error when attempting to delete
**Check**:
1. Is this a Company or Private group? (Cannot be deleted)
2. Do you have admin permissions?
3. Is group still associated with workspaces?
**Solutions**:
1. **Only Custom groups can be deleted**:
* Company groups: Automatic, cannot delete
* Private groups: One per user, cannot delete
2. **Remove workspace associations first**:
* Reassign workspaces to other groups
* Then delete group
3. **Verify admin permissions**:
* Ensure you have Admin, Sys Admin, Account Manager, or Company Admin role
# How to Manage Groups?
Source: https://docs.lighton.ai/en/administration/iam/group-management/managing-groups
Step-by-step guide to creating Custom Groups, adding and removing members, updating group details, and managing group lifecycle in the Admin Panel.
### **Prerequisites**
**Who can manage groups:**
* Admin
* SysAdmin
* Account Manager
* Company Admin
**Who can view groups:**
* All users that can access to the admin panel
**What groups can be managed:**
* Only **Custom Groups** (Company and Private groups are automatic)
**Where groups can be managed:**
* Only within **Admin Panel**
***
### **Create a Group**
**Step 1: Navigate to group creation**
1. Log in the Administration
2. Navigate to **Groups** in the admin menu
3. Click on "**+ Add Group**" to open the group creation form
**Step 2: Configure group properties**
1. Fill in the **Name** field (mandatory)
* Choose a descriptive and unique name
* Examples:
* "Engineering - Backend Group"
* "Sales - Enterprise"
* "Project Phoenix - Core Group"
* Avoid generic names like "Group 1" or "Temp"
2. Fill in the **Description** field (optional)
* Describe the group's purpose and scope
* Example: "Backend engineering group responsible for API development and infrastructure"
3. Select the **Company** (mandatory)
* Choose the company this group belongs to
* Pre-filled if you are Company Admin
4. Set **Category** to "Custom" (automatic)
**Step 3: Add group members**
1. Go to the **Members** section
2. Click "**+ Add another Group Member**"
3. Search for users in the dropdown
4. Select users to add to the group
5. Users appears immediately in the group list
6. Repeat to add multiple members
**Step 4: Save the group**
1. Click "**Save**" to create the group and return to the group list
2. Or click "**Save and continue editing**" to add more members or configure further
**💡 Tip**: After creating a group, you can associate it with workspaces through the Workspace admin interface.
***
### **Update a Group**
**Step 1: Navigate to group editing**
1. Log in with appropriate admin credentials
2. Navigate to **Groups** in the admin menu
3. Click on the group name to open the editing interface
**Step 2: Update group properties**
1. Modify **Name** and/or **Description** as needed
2. Cannot change **Company** after creation
3. Cannot change **Category** (always "Custom" for manually created groups)
**Step 3: Manage group members**
**Add members**:
1. Go to the **Members** section
2. Click "**+ Add another Group Member**"
3. Search and select users to add
**Remove members**:
1. Go to the **Members** section
2. Click the "**×**" button next to a member to remove them
**Step 4: Save changes**
1. Click "**Save**" to apply changes and return to group list
***
### **Delete a Group**
**Important considerations**
⚠️ **CAUTION**: Deleting a group is IRREVERSIBLE and will:
* Remove all group memberships
* Affect workspace access for all group members
* Potentially impact users' ability to access documents
**Only Custom groups can be deleted**. Company and Private groups cannot be deleted.
**Step 1: Navigate to group editing**
1. Log in with appropriate admin credentials
2. Navigate to **Groups** in the admin menu
3. Click on the group name to open the editing interface
**Step 2: Delete the group**
1. Verify this is a **Custom** group (Company and Private cannot be deleted)
2. Click "**Delete Group**" button at the bottom
3. Confirm deletion when prompted
4. Click "**Yes, I'm sure**" to permanently delete
**⚠️ Warning**: Before deleting a group:
* Check which workspaces use this group
* Notify group members about the change
* Consider reassigning workspace access to another group**Removing Members from a Group**
# Understanding Groups Fundamental Concepts
Source: https://docs.lighton.ai/en/administration/iam/group-management/understanding-groups
Learn what groups are in Paradigm, how they control resource access, and the three group types: Company, Custom, and Private groups.
Groups are the fundamental organizational units in Paradigm that control access to workspaces and resources.
***
## What are Groups?
A **Group** in Paradigm is a **group of users** that :
* Determine resource access (workspaces, agents, tools)
* Could link users and give access to workspaces through group membership
***
## Architecture
```
Users
↓
Groups (member : controls access)
↓
Workspace (organizational container)
↓
Collection (document storage)
↓
Documents
```
***
## Key relationships
1. **Group → Members**: A group contains users
2. **Group → Workspaces**: A group grants access to one or more workspaces
3. **Workspace → Group**: Each workspace is associated with exactly one group
4. **User → Multiple Groups**: Users can be members of multiple groups
**Key Concept:** Instead of granting workspace access to individual users one-by-one, you add users to groups, then give groups access to workspaces. When a user joins a group, they automatically inherit access to all workspaces that group can access.
**Why Groups Matter:**
* **Scalability:** Manage access for groups instead of individuals
* **Maintainability:** Update once (group membership) instead of updating every workspace
* **Organization:** Mirror your company structure (departments, projects, functions)
***
## Group Types
Paradigm has three distinct group types, each with specific creation rules and use cases:
### 1. Company Group
**Automatic group including all company members**
**Characteristics**:
* **Automatically created** when a company is created
* **Includes ALL company users** automatically
* **Cannot be deleted** - exists as long as the company exists
* **Membership is automatic** - users added when they join the company
* **Exactly one per company**
**Use cases**:
* Company-wide shared resources
* General documentation accessible to all employees
### 2. Private Group
**Personal group for individual user resources**
**Characteristics**:
* **Automatically created** when a user joins
* **Single member only** - the user who owns it
* **Cannot be deleted** - exists while user account exists
* **Cannot add other members** - strictly personal
* **Exactly one per user**
**Use cases**:
* Private agent configurations
* Personal workspace isolation
### 3. Custom Group
**Manually created groups for specific groups**
**Characteristics**:
* **Manually created** by Admins through Admin Panel
* **Custom membership** - Admins explicitly add/remove members
* **Can be deleted** by Admins
* **Flexible membership** - any number of users
* **Can be SCIM-synced** with external groups
**Use cases**:
* Project groups ("Project Phoenix Group")
* Departmental groups ("Engineering", "Sales", "Product")
* Cross-functional workgroups ("Security Committee")
* Client-specific groups ("Client ABC Group")
* Temporary collaboration groups
### Type comparison
| Type | Creation | Members | Management | Deletion |
| ----------- | -------------- | ------------------- | ----------- | ----------- |
| **Company** | Automatic | All company users | Automatic | Never |
| **Private** | Automatic | Single user (owner) | Automatic | Never |
| **Custom** | Manual (Admin) | Selected users | Admin Panel | Yes (Admin) |
# Identity & Access Management Overview
Source: https://docs.lighton.ai/en/administration/iam/overview
Understanding how users, groups, and workspaces control access in Paradigm
## Understanding Paradigm's Access Control Architecture
Paradigm's security model is built on a three-tier hierarchy that controls who can access what content:
```
👤 Users (Identity)
↓
👥 Groups (Grouping)
↓
📁 Workspaces (Content Scope)
↓
📄 Documents (Actual Content)
```
This architecture ensures that access control is:
* **Scalable**: Manage hundreds of users through group memberships
* **Secure**: Clear boundaries between different content scopes
* **Flexible**: Fine-grained control from company-wide to private access
* **Auditable**: Track who has access to what and when
***
## The Three Core Components
### 1. Users - Your Identity Layer
**Users** are individual accounts in Paradigm. Each user:
* Has a unique email and authentication
* Belongs to exactly **one company**
* Can be assigned multiple **roles** that define their permissions
* Automatically gets a **Private Group** for personal workspace access
**Key Concept**: Users never directly access documents. Access is always mediated through group membership and workspace associations.
**Learn more**: [User Management →](/en/administration/iam/user-management/user-roles)
***
### 2. Groups - Your Grouping Layer
**Groups** are the central mechanism for organizing users and controlling access. There are three types:
#### Company Group (Automatic)
* **Automatically created** for each company
* **All users** in the company are automatically members
* Controls access to company-wide workspaces
* Cannot be deleted or modified
#### Custom Groups
* **Manually created** by administrators
* Used for departments, projects, or any grouping you need
* Members are explicitly assigned
* Example: "Engineering Group", "Sales EMEA", "Project Phoenix"
#### Private Groups (Automatic)
* **Automatically created** for each user
* Only that user is a member
* Controls access to that user's private workspace
* Cannot be deleted or modified
**Critical Understanding**: Groups are how you control workspace access. When you add a group to a workspace, all group members get access to that workspace's documents.
**Learn more**: [Group Management →](/en/administration/iam/group-management/understanding-groups)
***
### 3. Workspaces - Your Content Scope Layer
**Workspaces** are containers that organize documents and control access through group membership. Each workspace:
* Contains a **Collection** of documents
* Has one or more **Groups** as members
* Defines the **scope** of document accessibility
* Can be linked to external data sources
There are three workspace types that mirror the three group types:
| Workspace Type | Linked Group | Access Level | Use Case |
| -------------- | --------------- | ---------------------- | ------------------------- |
| **Company** | Company Group | All company users | HR policies, general docs |
| **Custom** | Custom Group(s) | Specific group members | Projects, departments |
| **Private** | Private Group | Individual user only | Personal notes, drafts |
**The Key Relationship**: Workspace access is determined by group membership. If you're a member of a group that's associated with a workspace, you can access that workspace's documents.
**Learn more**: [Workspace Fundamentals →](/en/administration/knowledge-management/workspaces/understanding-workspaces)
***
## How Access Control Works in Practice
### Example 1: Department Access
```
Scenario: Engineering group needs access to technical documentation
1. Create Custom Group: "Engineering Group"
2. Add engineers as group members
3. Create Custom Workspace: "Engineering - Technical Docs"
4. Associate "Engineering Group" with the workspace
5. Upload documents to the workspace
Result: All engineering group members can now access these documents
```
### Example 2: Project-Based Access
```
Scenario: Cross-functional project needs temporary access
1. Create Custom Group: "Project Phoenix"
2. Add members from different departments
3. Create Custom Workspace: "Project Phoenix - Documentation"
4. Associate "Project Phoenix" group with workspace
5. When project ends, remove group members
Result: Only project group members have access during project lifecycle
```
### Example 3: Company-Wide Policy
```
Scenario: HR policies need to be accessible to everyone
1. Use existing Company Group (automatic)
2. Use existing Company Workspace (or create new company workspace)
3. Upload HR documents to company workspace
Result: All company employees automatically have access
```
***
## Permission Model
### User Roles Define Actions
User roles control **what actions** a user can perform:
| Role | Create Workspaces | Upload Documents | Manage Members | View All Docs |
| -------------------- | ----------------- | ---------------- | --------------- | --------------- |
| **Admin** | ✅ All companies | ✅ All Workspaces | ✅ All companies | ✅ All companies |
| **SysAdmin** | ✅ All companies | ❌ | ✅ All companies | ✅ Where member |
| **Account Manager** | ✅ All companies | ❌ | ✅ All companies | ✅ Where member |
| **Company Admin** | ✅ Own company | ❌ | ✅ Own company | ✅ Where member |
| **Document Manager** | ❌ | ✅ Where member | ❌ | ❌ |
| **Standard User** | ❌ | ❌ | ❌ | ❌ |
### Group Membership Defines Scope
Group membership controls **what content** a user can access:
```
User's Accessible Documents =
Documents in workspaces whose member groups include the user
```
**Important**: All roles can only see documents in workspaces where they're a member (directly or through groups), unless they explicitly have cross-company access.
***
## Security Principles
### 1. Principle of Least Privilege
Users should only have access to:
* The **minimum role** needed to perform their job
* The **minimum group memberships** needed for their work
* The **minimum workspaces** needed for their projects
### 2. Segregation of Duties
Different roles have different capabilities:
* **Admins** manage structure (users, groups, workspaces)
* **Document Managers** manage content (upload, delete documents)
* **Users** consume content (read, query documents)
### 3. Audit Trail
All access-related events are logged:
* User creation and role changes
* Group membership changes
* Workspace access attempts
* Document uploads and deletions
***
## Common Access Patterns
### Pattern 1: Departmental Structure
```
Marketing (Custom Group)
└── Marketing Workspace
└── Campaign docs, brand assets
Sales (Custom Group)
└── Sales Workspace
└── Playbooks, proposals
Engineering (Custom Group)
└── Engineering Workspace
└── Technical docs, specs
```
### Pattern 2: Project-Based Structure
```
Project Alpha Group (Custom Group)
└── Project Alpha Workspace
└── All project documentation
Project Beta Group (Custom Group)
└── Project Beta Workspace
└── All project documentation
```
### Pattern 3: Mixed Structure (Recommended)
```
Company Group
└── Company Workspace → HR policies, general info
Engineering Group
└── Engineering Workspace → Shared technical docs
Project Phoenix Group
└── Project Phoenix Workspace → Project-specific docs
Each User's Private Group
└── Each User's Private Workspace → Personal drafts
```
***
## Decision Framework
### When to Create a New Group
✅ Create a new custom group when:
* A distinct group needs access to specific content
* The group will persist over time
* Members need to collaborate on shared documents
❌ Don't create a group if:
* It's for a one-time document share (use existing group)
* Only one person needs access (use private workspace)
* Everyone in company needs access (use company group)
### When to Create a New Workspace
✅ Create a new workspace when:
* Content has different access requirements
* Documents form a coherent knowledge domain
* You need to isolate sensitive information
❌ Don't create a workspace if:
* Documents can fit in existing workspace
* Same group needs access
* It's just for organization (use folders instead)
***
## Next Steps
Now that you understand the architecture, dive into each component:
Create users, assign roles, and manage permissions
Organize users into groups for access control
Create and manage content containers
Understand how documents are secured
***
## Quick Reference
### Access Control Flow
```mermaid theme={null}
graph TD
A[User logs in] --> B{What groups am I in?}
B --> C[Company Group - automatic]
B --> D[Custom Groups - explicit]
B --> E[Private Group - automatic]
C --> F[Company Workspaces]
D --> G[Custom Workspaces]
E --> H[Private Workspace]
F --> I[Can access these documents]
G --> I
H --> I
```
### Key Relationships
* **1 User** → **1 Company** (fixed)
* **1 User** → **Many Groups** (flexible)
* **1 Group** → **Many Workspaces** (flexible)
* **1 Workspace** → **Many Groups** (flexible)
* **1 Workspace** → **1 Collection** (fixed)
* **1 Collection** → **Many Documents** (flexible)
# Authentication and Password Management
Source: https://docs.lighton.ai/en/administration/iam/user-management/authentication-and-password-management
Learn how LightOn’s authentication system works, which password security rules are enforced, and how SSO helps meet your organization’s specific security and compliance requirements.
### Password security rules
When creating or resetting a password, the following rules apply:
* Your password **cannot be too similar to your other personal information**.
* It must contain **at least 8 characters**.
* It cannot be a **commonly used password**.
* It cannot be **entirely numeric**.
* It must include **at least one lowercase letter**, **one uppercase letter**, **one digit**, and **one special character**.
👉 You are free to choose a longer password (12, 16 characters or more), but the above rules are **not customizable**.\
👉 If your organization requires specific policies (e.g. longer length, rotation, advanced complexity), you will need to use **SSO**.
### Features not natively supported
At this stage, our authentication system does **not** include:
* **Two-Factor Authentication (2FA/MFA)**.
* **Automatic password expiration**.
These features are **not planned in the roadmap**.\
Our strategy is to focus on our core product features and delegate identity management to specialized providers via SSO.
### SSO support in Paradigm
The Paradigm platform supports SSO via the following protocols:
* **SAML** — Available in all our plans. Compatible with major providers (Keycloak, Okta, Ping, Azure AD, etc.) → [see documentation](/en/administration/iam/authentication/sso-activation).
* **OpenID Connect (OIDC)** — Available in all our plans → [see documentation](/en/administration/iam/authentication/sso-activation).
* **LDAP** — Directory-based authentication for corporate environments → [see documentation](/en/administration/iam/authentication/ldap-configuration).
👉 [Activate SSO in Paradigm](/en/administration/iam/authentication/sso-activation)
### User management and compliance
* User account management can be automated using **SCIM** (create, delete, deactivate) → [see documentation](/en/administration/iam/user-management/scim-user-provisioning#what-is-scim).
* Account deletion and deactivation are **immediate** and tracked in an **audit log**.
* The system is **GDPR-compliant**. For other standards (ISO 27001, NIST, etc.), compliance depends on your SSO infrastructure.
**In summary**:
* Without SSO: a robust but non-customizable system.
* With SSO: full flexibility to align Paradigm with your security policies.
# How to Manage Multiple Paradigm Accounts with the Same Email Address
Source: https://docs.lighton.ai/en/administration/iam/user-management/multiple-accounts
In this guide, we explain how you can use the same email address to create multiple accounts on the Paradigm platform, allowing you to manage different companies efficiently.
In this guide, we explain how you can use the same email address to create multiple accounts on the Paradigm platform, allowing you to manage different companies efficiently.
Since a user can only be linked to one company at a time through the Paradigm interface, we offer two solutions for users who need a multi-company view.
## Understanding Company Access Restrictions
By default, each Paradigm user account is associated with only one company. This means that when you log in to the Paradigm interface, you can only access the information and tools for that specific company. If you need to manage multiple companies, you won't be able to do so directly through a single user interface.
## Solutions for Multi-Company Access
We offer two options for users who need to access multiple companies: Super Admin access and creating multiple user accounts using email aliases.
### Option 1: Super Admin Access
A Super Admin user can access the Paradigm interface associated with a single company, but they have the unique ability to manage information for multiple companies through the admin interface.
This option is ideal for users who need administrative control over several companies without logging in and out repeatedly.
### Option 2: Multiple User Accounts with Email Aliases
If you need to access the front-end interface of Paradigm and use it as a company-specific user, you must have a separate user account for each company.
Here's how it works:
1. **Create an Email Alias**: Most email providers allow you to create aliases by adding a "+" sign and additional text to your email address. For example, if your email is [benoit@lighton.ai](mailto:benoit@lighton.ai) and you need access to another company, you can create an alias like [benoit+obs@lighton.ai](mailto:benoit+obs@lighton.ai).
2. **Register the Alias on Paradigm**: Use this alias to create a new user account for the additional company. In example:
* [benoit@lighton.ai](mailto:benoit@lighton.ai) would be associated with the company LightOn.
* [benoit+othercompany@lighton.ai](mailto:benoit+othercompany@lighton.ai) could be associated with the company Other company.
**Login and Logout:**\
To switch between companies, you will need to log out of one account and log in to another. While this requires additional login steps, it allows you to maintain distinct access credentials for each company.
We hope this guide helps you navigate your multi-company responsibilities on the Paradigm platform. For further assistance, feel free to contact our support team.
Happy managing!
# SCIM Configuration: Microsoft Entra ID
Source: https://docs.lighton.ai/en/administration/iam/user-management/scim-configuration-entra-id
Here are the different steps to follow in Paradigm in order to configure the automatic user provisioning in Paradigm from Microsoft Entra ID (formerly Azure Active Directory).
### Paradigm side
* Activate SCIM feature instance-wise: Put the config key `SCIM_INSTANCE_ACTIVATION` to `True`
* Have a user with the permissions to manage users in the desired company
* Create an API key linked to that user
### Microsoft side
* From the Microsoft Admin interface, go to the Identity Administration area (Entra ID)
* Create a new application in the Identity administration site
* Select `Create your own application`, give the name you want and select the 3rd option `Integrate any other application you don't find in the gallery (Non-gallery)` and click on `Create`.
* Once the application has been created, click on `Provisioning`
* Click on `+ New configuration`
* Configure the provisioning to use the desired Paradigm instance:
* `Tenant URL`:
It should follow the pattern
`https:///scim/v2/?aadOptscim062020`.
The `` should be replaced by `paradigm.lighton.ai` to use the LightOn SaaS solution or by the client domain name for on-premise solutions
⚠️ The `?aadOptscim062020` flag is currently necessary to fix bugs on Microsoft side. Microsoft is actively working on implementing the related behavior modifications in the default behavior.
[More information can be found here](https://learn.microsoft.com/en-us/entra/identity/app-provisioning/application-provisioning-config-problem-scim-compatibility#flags-to-alter-the-scim-behavior)
* `Secret token`: Put the created Paradigm API key in this field.
* Click on `Test connection` to verify the Paradigm instance can be reached and has the SCIM feature available / activated.
* Click on `Create` once the test is successful
* Go to the `Users and groups` area to assign users or a group of users to the application
* Go to the `Attribute mapping` area and set the `Provision Microsoft Entra ID Groups` to `No` (disabled)
💡 The mapping of groups is currently not supported in Paradigm. The provisioning can only be used to manage users not the groups they are part of, so in our case the `LightOn Paradigm authorized users` group will not be created in Paradigm. The request will be refused if Microsoft Entra ID tries to.
* In the `Attribute mapping` area, check what is used for the `emails[type eq "work"].value` attribute, we advise to use the `userPrincipalName` to avoid forgetting to fill the `mail` microsoft field when creating a user (used by default for SCIM in Entra ID)
You can find the suggested attributes configuration for users in the image below
* Go back to the `Overview` and click on `Start provisioning`
### Expected behavior with this configuration
Here is a table summarizing the expected behaviors in Paradigm following an action in Microsoft Entra ID:
| Microsoft Entra ID action | Paradigm behavior |
| -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| **create** a new user and assign him/her to the group assigned to Paradigm | creates the related account in Paradigm |
| **modify** an information about the user in Microsoft Entra ID | the change will be forwarded to Paradigm if it touches to an attribute which is used by Paradigm |
| **delete** a user from the Entra ID administration panel | it will deactivate the user in Paradigm as well as modifying the username and email to be restored if needed |
| **permanently delete** a user from the Entra ID administration panel | the user will be deactivated and anonymized in Paradigm |
# Can Paradigm automatically provision users?
Source: https://docs.lighton.ai/en/administration/iam/user-management/scim-user-provisioning
This article explains how Paradigm implements the SCIM (System for Cross-domain Identity Management) protocol to enable transparent provisioning and management of users between systems.
This article explains how Paradigm implements the SCIM (System for Cross-domain Identity Management) protocol to enable transparent provisioning and management of users between systems.
## What is SCIM?
SCIM (System for Cross-domain Identity Management) is an open standard that simplifies user management in multi-domain scenarios. It provides a standardized schema and API for creating, reading, updating, and deleting identity data between identity providers and service providers.
Please note that modifications on the users are still possible from the Paradigm admin panel even if you have user provisioning with SCIM activated for your company.
## SCIM Implementation Details
### Supported SCIM Version
Paradigm supports SCIM 2.0 ([RFC 7642](https://datatracker.ietf.org/doc/html/rfc7642), [RFC 7643](https://datatracker.ietf.org/doc/html/rfc7643) and [RFC 7644](https://datatracker.ietf.org/doc/html/rfc7644)).
### Tested Identity Providers
Our SCIM implementation has been tested with:
* Microsoft Entra ID
### Base URL
All SCIM endpoints are accessible via:
```
https://[paradigm-domain]/scim/v2/
```
With `[paradigm-domain]` being the domain name under which is hosted Paradigm. For the Saas platform of LightOn, its value would be `https://paradigm.lighton.ai/scim/v2/`.
### Authentication
To secure the SCIM API, we implemented a token-based authentication using our API key authentication backend.
Each request must include an authorization header:
```
Authorization: Bearer {your-paradigm-api-key}
```
You can generate and manage API keys in the Admin Panel under API Settings.
A Paradigm API key can only be used to manage users part of the same company as the API key owner, no matter the role of the user.
### Supported Endpoints
Here are the SCIM endpoints supported by Paradigm together with their HTTP methods:
| Endpoint | HTTP Method | Description |
| ------------- | ----------- | ------------------------------------------ |
| `/Users` | GET | List/search users |
| `/Users` | POST | Create a user |
| `/Users/{id}` | GET | Get a specific user |
| `/Users/{id}` | PUT | Replace a user's attributes |
| `/Users/{id}` | PATCH | Update a user's attributes |
| `/Users/{id}` | DELETE | Delete a user (Anonymization for Paradigm) |
| `/Groups` | GET | List/search groups |
It is currently not possible to manage groups through the `/Groups` endpoint.
### Supported user SCIM attributes
The SCIM implementation of Paradigm supports the following user attributes:
**Core Attributes**
| Attribute | Description | Required |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| `userName` | Unique identifier for the user | Yes |
| `name.givenName` | First name | No |
| `name.familyName` | Last name | No |
| `title` | The user's title, such as "Vice President" | No |
| `preferredLanguage` | Indicates the User's preferred written or spoken language | No |
| `active` | Boolean indicating if user is active | No |
| `emails` | Email addresses, Paradigm only supports one email address per user | Yes |
| `password` | The User's cleartext password. This attribute is intended to be used as a means to specify an initial password when creating a new User or to reset an existing User's password. | No |
### Group Schema
The SCIM implementation of Paradigm supports the following group attributes:
| Attribute | Description | Required |
| ------------- | ------------------------- | -------- |
| `displayName` | Name of the group | Yes |
| `members` | List of member references | No |
### Error Handling
The Paradigm SCIM API endpoints return standard HTTP codes [following the SCIM error format](https://datatracker.ietf.org/doc/html/rfc7644#section-3.7.3):
| Status Code | Description |
| ----------- | ----------------------------------- |
| 200 | Successful operation |
| 201 | Resource created successfully |
| 400 | Bad request (validation error) |
| 401 | Unauthorized (authentication error) |
| 403 | Forbidden (authorization error) |
| 404 | Resource not found |
| 409 | Conflict with existing resource |
| 500 | Internal server error |
Here is an example of error response:
```json theme={null}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
"status": "400",
"detail": "Attribute 'userName' is required"
}
```
## Provisioning Workflow
### User Provisioning
1. The Identity Provider (IdP) initiates a SCIM request to create a user on the `/Users` endpoint
2. Paradigm validates the request and user data
3. A new user account is created with default permissions
4. A success response is returned to the IdP
### User Deprovisioning
1. The Identity Provider (IdP) sends a request to deactivate or delete a user
2. Paradigm validates the request
3. **For deactivation**: User's `active` status is set to `false`
4. **For deletion**: User account is anonymized (Any user data is removed but the behavioral data)
5. A success response is returned to the IdP
Any further SCIM request on the anonymized user will return a `404 Not Found` HTTP response.
## API request/response examples
### User Creation
Request data example:
```http theme={null}
POST /scim/v2/Users
Authorization: Bearer {your-paradigm-api-key}
Content-Type: application/json
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"userName": "john.doe@example.com",
"externalId": "ccb1c352-d321-4027-9d17-de03d8d28b2f",
"name": {
"givenName": "John",
"familyName": "Doe"
},
"emails": [
{
"value": "john.doe@example.com",
"primary": true
}
],
"password": "fake-password-value",
"title": "Software Engineer",
"preferredLanguage": "fr-Latn-CA"
}
```
Related response:
```json theme={null}
{
'schemas': ['urn:ietf:params:scim:schemas:core:2.0:User'],
'id': '4',
'externalId': 'ccb1c352-d321-4027-9d17-de03d8d28b2f',
'userName': 'john.doe@example.com',
'name': {
'givenName': 'John',
'familyName': 'Doe',
'formatted': 'John Doe'
},
'displayName': 'John Doe',
'emails': [
{
'value': 'john.doe@example.com',
'primary': True
}
],
'active': True,
'title': 'Software Engineer',
'preferredLanguage': 'fr',
'groups': [],
'meta': {
'resourceType': 'User',
'created': '2025-04-18T08:43:17.679804+00:00',
'lastModified': '2025-04-18T08:43:17.679804+00:00',
'location': 'http://testserver/scim/v2/Users/4'
}
}
```
### Update a User
Request data example:
```http theme={null}
PATCH /scim/v2/Users/a1b2c3d4
Authorization: Bearer {your-paradigm-api-key}
Content-Type: application/json
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "name.givenName",
"value": "Jonathan"
},
{
"op": "replace",
"path": "title",
"value": "Senior Software Engineer"
}
]
}
```
## Troubleshooting
### Authentication Failures
* Verify your API key is valid and not expired
* Verify the owner of the API key has permissions to manage users.
* Ensure the Authorization header is formatted correctly
## Good Practices
1. **Implement Incremental Updates**: Use PATCH operations instead of PUT when possible
2. **Handle API Failures Gracefully**: Implement retry logic with exponential backoff
3. **Maintain IdP Synchronization**: Schedule regular full syncs to ensure consistency
4. **Secure Your API keys**: Rotate tokens regularly and store them securely
# Managing User Limits per Company
Source: https://docs.lighton.ai/en/administration/iam/user-management/user-limits
As an Admin, you can set a maximum number of users per company in the admin settings to control the number of users associated with each company.
As an Admin, you can set a maximum number of users per company in the admin settings to control the number of users associated with each company.
This feature allows you to manage and limit the number of users per company, ensuring that your platform remains organized and efficient. User limits help with resource planning and license management.
## How do I set the default maximum number of users per company?
To set the maximum number of users per company, navigate to the admin settings and look for the company page. As an Admin, you can modify the maximum number of users for each company from this page. The default maximum number of users is set to 10, but you can adjust this limit as needed.
## What happens when I reach the maximum number of users for a company?
When you try to create a new user and the maximum number of active users is reached, an alert message will be displayed. This message will inform you that you need to delete an existing user before creating a new one, as the maximum user limit has been reached.
Reaching the user limit will prevent new user creation. Plan ahead by monitoring your current user count and requesting limit increases before reaching capacity to avoid service disruptions.
## Can Company Admins modify the maximum number of users per company?
No, Company Admins can only view the maximum number of users per company, but they cannot modify it. If a Company Admin needs to increase the user limit, they should contact their Super Admin to request the change.
Company Admins should regularly review their user count and anticipate growth needs. Submit user limit increase requests well in advance of reaching capacity to ensure uninterrupted service for your organization.
# User Operations Guide
Source: https://docs.lighton.ai/en/administration/iam/user-management/user-operations
This guide provides step-by-step instructions for managing users on Paradigm. Whether you need to create a single user, import multiple users, or manage existing accounts, you'll find all the necessary procedures here.
This guide provides step-by-step instructions for managing users on Paradigm. Whether you need to create a single user, import multiple users, or manage existing accounts, you'll find all the necessary procedures here.
As an administrator, you have various tools at your disposal to efficiently manage your user base. Before proceeding with any user management tasks, ensure you have the appropriate administrative permissions. If you need information about roles and permissions, please refer to our "Understanding Access Control" guide.
***
## 1. Creating a Single User
* This action requires administrative privileges
* Available to: System Administrators, Account Managers, and Company Administrators
* Each user can only be associated with one company
### Step-by-Step Guide
Log in to Paradigm Admin and click on "Add User" button and enter the following details:
1. **Username** (Required) Must be unique *Email address recommended*
2. **Email Address:** Can be identical to username
3. **First Name & Last Name** (Required)
4. **Company Name** (Required) Cannot be changed after user creation / Single company assignment only
5. **Default Language** (Affects: Onboarding & interface language)
6. **Select appropriate user roles** (depends on your administrative level)
7. **Click "Save" to create the user** (System automatically sends invitation email)
**Important Notes**
* Company assignment is permanent and cannot be modified later
* SSO configuration impacts authentication process
***
## 2. Creating Multiple Users (Import a CSV List of Users)
* This action requires administrative privileges
* Available to: System Administrators, Account Managers, and Company Administrators
* Each user can only be associated with one company
The Bulk User Creation feature allows you to create multiple users simultaneously on the Paradigm platform by importing a CSV file. Follow the steps below to successfully create users in bulk.
1. **Create a CSV File**: Before you start, it's essential to ensure that your CSV file meets the required format and constraints. You can download a sample CSV file to use as a template.
2. **Add Workspace Information (Optional)**: You can associate users with workspaces by adding a "Workspace" column to your CSV file. You can specify multiple workspaces by separating them with semicolons (;).
3. Log in to your Paradigm admin account. Navigate to the "Users" section in the admin dashboard.
4. Click the Import Button
5. Browse and select the CSV file you prepared in Step 1.
6. From the available options, select the file type of your uploaded file (CSV, XLS, or XLSX).
7. Choose the company where these users should be created from the provided list.
8. After uploading the file and selecting the file type and company, you will see a preview of the users being created. If you specified workspaces, you will also see the workspace associations.
9. **Finalize User Creation**: Once you confirm everything is correct, finalize the user creation process.
The users will be created, and they will receive an invitation email.
During bulk creation, all users are assigned the default role of "User"
***
## 3. Deactivating a User
* This action requires administrative privileges
* Available to: System Administrators, Account Managers, and Company Administrators
To deactivate a user, uncheck the 'Active' box in their profile in the admin panel.
***
## 4. Deleting a User
Currently, user deletion requires contacting your Paradigm administrator to process the request.
**Coming Soon!** We are excited to announce that direct user deletion capabilities will be available in the next platform update. This feature will allow administrators to permanently remove users directly through the admin panel.
# Understanding User Roles and Permissions in Paradigm
Source: https://docs.lighton.ai/en/administration/iam/user-management/user-roles
Paradigm implements a comprehensive role-based access control system to ensure secure and efficient management of user permissions. This article explains the different user roles available and their associated permissions.
Paradigm implements a comprehensive role-based access control system to ensure secure and efficient management of user permissions. This article explains the different user roles available and their associated permissions.
## Role Structure Overview
Paradigm's Role-Based Access Control (RBAC) structure is organized into 3 distinct levels:
1. Platform level (turquoise) for multi-company administration,
2. Company level (gray) for single-company management,
3. and User level (light gray) for end-users.
The lines represent creation permissions, where higher-level roles can create subordinate roles - with System Admin having the broadest creation rights. This hierarchical structure ensures proper access control while maintaining clear organizational boundaries.
**Key Principles:**
* Permissions are cumulative - users can combine multiple roles
* Access is hierarchical - higher roles include lower-level permissions
* Segregation of duties ensures security and compliance
## 1. Administrative Roles
### 1.a System Administrator
The System Administrator is Paradigm's highest-level technical role, focused exclusively on platform administration and multi-company configuration. This role operates at the tenant level with complete administrative control while maintaining strict data privacy - System Administrators cannot access customer-specific data.
| ✅ **Has Access To** | ❌ **Does Not Have Access To** |
| ------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------- |
| • System-wide settings
• Multi-company management features (Users, Company, Workspaces, Chat settings, themes, SSO) | • View customer usage data: (Chat conversations, prompt)
• Company, personal document content |
### 1.b Account Manager
The Account Manager is a central administrative role focused on customer environment management and day-to-day platform operations. Operating at the platform level, this role supports multiple companies while having specific limitations to maintain security and data integrity.
| ✅ **Has Access To** | ❌ **Does Not Have Access To** |
| ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| • Multi-company management features (Users, Company, Workspaces, Chat settings, themes, SSO)
• Manage API keys
• Monitor system usage | • System-wide settings
• View customer usage data: (Chat conversations, prompt)
• View Company, personal document content |
### 1.c DPO Admin (Data Protection Officer)
The DPO Admin is a specialized compliance oversight role with comprehensive read-only access to all platform data. This role ensures GDPR compliance and data protection standards across the entire platform, with the ability to monitor but not modify any sensitive information.
| ✅ **Has Access To** | ❌ **Does Not Have Access To** |
| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
| • Multi-company view usage data: (Chat conversations, prompt)
• Can request access to the documents | • Edit, create anything
• System-wide settings |
***
## 2. Company-Level Roles
### 2.a Company Admin
The Company Administrator manages all aspects of Paradigm within their specific company scope. This role has full administrative control over their company's environment while being strictly limited to their organization's boundary.
| ✅ **Has Access To** | ❌ **Does Not Have Access To** |
| --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| • Single company management features (Users, Company, Workspaces, Chat settings, themes, SSO)
• Manage company API keys
• Monitor company usage | • Access other companies' data or settings
• System-wide settings
• Single-company view documents
• Single-company view usage data: (Chat conversations, prompt) |
### 2.b Company DPO
The Company DPO oversees data protection and GDPR compliance specifically within their organization's scope on Paradigm. This role has comprehensive read-only access to all company data for compliance monitoring, without any administrative capabilities.
| ✅ **Has Access To** | ❌ **Does Not Have Access To** |
| --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| • Single-company view usage data: (Chat conversations, prompt)
• Single-company view documents | • Access other companies' data or settings
• Create or modify delete any company data |
***
## 3. User-Level Roles
### Basic User
The Basic User represents the everyday Paradigm user looking to enhance their daily productivity. This default role enables them to collaborate with AI assistants through their authorized documents and workspaces. While they don't have access to administrative features, they can fully leverage AI capabilities to optimize their daily tasks and improve their workflow.
| ✅ **Has Access To** | ❌ **Does Not Have Access To** |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| • Chat with all agents connected to their own account
• View and manage documents within their assigned workspaces
• Manage their personal document
• Access their own chat history and statistics
• Set individual preferences for agent interactions | • Admin |
### Document Manager
Oversees document operations (upload/delete) strictly through the front-end interface within their authorized company workspaces.
They cannot modify workspace settings or access unauthorized areas - these permissions remain with Company Admins. Company-wide document visibility is restricted to Company DPOs only.
### API Key User
This role enables users to manage their own API keys through their personal settings, strictly limited to creating and deleting personal API keys. It does not grant any additional administrative privileges or access to other users' API settings.
## Group and Permissions List
You can find the detailed permissions matrix in our comprehensive spreadsheet:
* x: Permission granted
* Empty cell: Permission not granted
# Datasources in Paradigm
Source: https://docs.lighton.ai/en/administration/knowledge-management/data-sources/datasources
Datasources allow your organization to sync external knowledge bases within Paradigm without end-user interaction or management.
Datasources allow your organization to sync external knowledge bases within Paradigm without end-user interaction or management.
## Datasource Management
**Creation, Deletion and Updates**: go to the admin panel and locate the Datasource Section.
You can create several types of Datasources:
### ServiceNow
ServiceNow datasources enable you to integrate your ServiceNow knowledge base directly into Paradigm, providing seamless access to your organization's service management information.
For detailed setup instructions, see: [Manage a ServiceNow Datasource in Paradigm](/en/administration/knowledge-management/data-sources/servicenow-datasource)
### Google Drive
Google Drive datasources allow you to connect your Google Drive folders and documents to Paradigm, making your stored files searchable and accessible through the chat interface.
For detailed setup instructions, see: [Manage a Google Drive Datasource in Paradigm](/en/administration/knowledge-management/data-sources/google-drive-datasource)
## Benefits of Using Datasources
Datasources provide several key advantages for your organization:
**Automated Synchronization**
* Content is automatically synced from external systems without manual intervention
* Changes in the source system are reflected in Paradigm automatically
* Reduces administrative overhead for keeping information up-to-date
**Centralized Knowledge Access**
* Users can access information from multiple external systems through a single interface
* Eliminates the need to switch between different applications
* Provides a unified search experience across all connected data sources
**Real-time Information**
* Data stays current with automatic synchronization schedules
* Users always have access to the latest information
* Reduces the risk of outdated or stale content
## Managing Datasource Access
When setting up datasources, consider the following access and security aspects:
* **Permissions**: Ensure that the datasource connection has appropriate read permissions for the content you want to sync
* **Content Filtering**: Configure which folders, document types, or content areas should be included
* **Update Frequency**: Set appropriate synchronization schedules based on how frequently your source content changes
* **User Access**: Control which Paradigm users can access information from specific datasources
## Troubleshooting Datasources
If you experience issues with your datasources:
1. **Check Connection Status**: Verify that the datasource connection is active and authenticated
2. **Review Permissions**: Ensure that the connected account has proper access to the source content
3. **Monitor Sync Logs**: Check the synchronization logs for any error messages or warnings
4. **Test with Sample Content**: Try syncing a small subset of content to isolate potential issues
For additional support with datasource configuration and troubleshooting, contact your administrator or LightOn support team.
# Google Drive Datasource
Source: https://docs.lighton.ai/en/administration/knowledge-management/data-sources/google-drive-datasource
Configure and manage the synchronization between a Google Drive content and Paradigm.
Configure and manage the synchronization between a Google Drive content and Paradigm.
This page contains the setup guide and reference information for the Google Drive source connector.
The Google Drive source connector pulls data from a folder in Google Drive. Subfolders are recursively included in the sync. All files in the specified folder and all sub folders will be considered, excluding filetypes that are not supported or too large.
## Prerequisites
* Drive folder link - The link to the Google Drive folder you want to sync files from (includes files located in subfolders)
* A GCP project
* Enable the Google Drive API in your GCP project
* Service Account Key with access to the Google Drive folder you want to synchronize
## Setup guide
The Google Drive source connector supports authentication Service Account Key Authentication.
## Set up the service account key
### Create a service account
1. Open the [Service Accounts page](https://console.cloud.google.com/projectselector2/iam-admin/serviceaccounts) in your Google Cloud console.
2. Select an existing project, or create a new project.
3. At the top of the page, click **+ Create service account**.
4. Enter a name and description for the service account, then click **Create and Continue**.
5. Under **Service account permissions**, select the roles to grant to the service account, then click **Continue**. We recommend the **Viewer** role.
### Generate a key
1. Go to the [API Console/Credentials](https://console.cloud.google.com/apis/credentials) page and click on the email address of the service account you just created.
2. In the **Keys** tab, click **+ Add key**, then click **Create new key**.
3. Select **JSON** as the Key type. This will generate and download the JSON key file that you'll use for authentication. Click **Continue**.
### Enable the Google Drive API
1. Go to the [API Console/Library](https://console.cloud.google.com/apis/library) page.
2. Make sure you have selected the correct project from the top.
3. Find and select the **Google Drive API**.
4. Click **ENABLE**.
If your folder is viewable by anyone with its link, no further action is needed. If not, give your Service account access to your folder. Check out [this video](https://youtu.be/GyomEw5a2NQ) for how to do this.
## In the Paradigm admin
### Datasource Configuration
1. Navigate to the DATASOURCES section in your Paradigm admin interface
2. Create a new Datasource with Datasource type = **Google Drive**
3. Add your Google Cloud service account key in JSON format:
```json theme={null}
{
"type": "service_account",
"project_id": "YOUR_PROJECT_ID",
"private_key_id": "YOUR_PRIVATE_KEY",
...
}
```
4. For **Folder Link**, enter the link to the Google Drive folder. To get the link, navigate to the folder you want to sync in the Google Drive UI, and copy the current URL.
5. Configure the optional **Start Date** parameter that marks a starting date and time in UTC for data replication. Any files that have *not* been modified since this specified date/time will *not* be replicated. Use the provided datepicker (recommended) or enter the desired date programmatically in the format `YYYY-MM-DDTHH:mm:ssZ`. Leaving this field blank will replicate data from all files that have not been excluded by the **Path Pattern** and **Path Prefix**.
6. Click **Set up source** and wait for the tests to complete.
## Authentication Method
### Service Account Key Authentication
* Uses JSON key file generated from Google Cloud Console
* Provides secure access to Google Drive folders
* Requires proper role assignment (Viewer role recommended)
* Service account must have access to the target Google Drive folder
## File Synchronization Details
### Included Content
* All files in the specified folder
* Files in all subfolders (recursive sync)
* Only supported file types are processed
* Files within size limits are included
### Excluded Content
* Unsupported file types are automatically excluded
* Files that exceed size limits are skipped
* Files can be filtered using Path Pattern and Path Prefix settings
## Troubleshooting
### Common Issues
**Authentication Errors**
* Verify the service account JSON key is correctly formatted
* Ensure the service account has the necessary permissions
* Check that the Google Drive API is enabled for your project
**Access Denied Errors**
* Confirm the service account has access to the target folder
* For private folders, explicitly share the folder with the service account email
* Verify folder permissions and sharing settings
**Sync Issues**
* Check the folder link format is correct
* Verify the Start Date parameter if used
* Review file type and size limitations
For additional support with Google Drive datasource configuration, contact the development team.
# ServiceNow Datasource
Source: https://docs.lighton.ai/en/administration/knowledge-management/data-sources/servicenow-datasource
Configure and manage the synchronization between ServiceNow content and Paradigm.
Configure and manage the synchronization between ServiceNow content and Paradigm.
## Prerequisites
A working ServiceNow instance is required, with the following elements:
* Instance URL
* Credentials
* username
* password
* client ID
* client secret
## Setup guide
The ServiceNow connector supports basic authentication (not recommended in production) and OAuth authentication.
Username and password are given at the instance creation, and they only allow basic authentication.
To set up and enable the OAuth authentication, a client ID and client secret are necessary.
## Generate credentials for OAuth in ServiceNow
1. In the ServiceNow instance, navigate to System OAuth > Application Registry
2. Create a new entry by selecting "Create an OAuth API endpoint for external clients"
3. Name it and save it
4. Click on the newly created OAuth application to retrieve the client ID and client secret
## Create a new Datasource in Paradigm admin
1. Navigate to the DATASOURCES section in your Paradigm admin interface
2. Create a new Datasource with Datasource type = **ServiceNow**
3. Select the Company you would like to associate the Datasource to
4. Fill in the instance url field (e.g. `https://dev280517.service-now.com`)
5. Add your credentials:
* **username**: your ServiceNow tenant username
* **password**: your ServiceNow tenant password
* **client id**: your OAuth application client ID (recommended)
* **client secret**: your OAuth application client secret (recommended)
6. Save the Datasource
7. From now on, you can click on the "Test connection" button at the upper right of the Datasource detail page to check if the ServiceNow is accessible
8. In case of a failed health check, please review your credentials. If the problem persists, do not hesitate to contact the development team
## Create a new Import configuration
1. On the newly created Datasource, you can add a new Import in the "IMPORTS" section
2. Add a new filter in the **Filter criteria** field, by completing the key/value inputs. For instance, to retrieve knowledge articles, fill in **doc\_type** as key and **knowledge** as value
💡 At least one filter is required → **doc\_type** It is necessary to identify what type of records are to be synchronized in this import
3. Other filters can be selected for the import, to narrow the documents selection
4. Select the Workspace where the documents will be synchronized in your Paradigm application
5. Select the synchronization frequency between your ServiceNow instance and Paradigm
6. Adjust the import priority if necessary, relatively to other imports
7. Save the Datasource
8. From now on, you can click on the "Trigger import" button at the right of the newly created Import, on the Datasource detail page, to launch a first synchronization!
9. Following synchronizations will pursue, with respect to the frequency
## Authentication Methods
### Basic Authentication
* Uses username and password directly
* Not recommended for production environments
* Simpler to set up but less secure
### OAuth Authentication (Recommended)
* Uses client ID and client secret
* More secure for production environments
* Requires additional setup in ServiceNow but provides better security
## Troubleshooting
### Connection Issues
* Verify your ServiceNow instance URL is correct and accessible
* Check that your credentials are valid and have appropriate permissions
* Ensure the ServiceNow instance is running and accessible from Paradigm
### Import Issues
* Verify that the doc\_type filter is correctly configured
* Check that the selected workspace exists and is accessible
* Review the import logs for specific error messages
For additional support with ServiceNow datasource configuration, contact the development team.
# SharePoint and Teams Datasource
Source: https://docs.lighton.ai/en/administration/knowledge-management/data-sources/sharepoint-teams-datasource
Synchronize content from your MS SharePoint and Teams document libraries to Paradigm.
This page contains the setup guide and reference information for the **Microsoft SharePoint** source connector. [Video Tutorial](https://drive.google.com/file/d/1E8QM2oWB9r4fEzgTGJTwk_tg6WgTSGyr/view?t=565)
The Microsoft SharePoint source connector pulls data from a specified SharePoint Document library and folder. If configured with the recursive option, it will include all subfolders in the sync. All files in the specified folder and subfolders will be considered.
## Prerequisites
* Tenant ID - Azure AD tenant identifier
* Client ID - Azure AD application identifier
* Client Secret - Azure AD application secret
* Site Name - Name of the SharePoint site
* Folder Path - Url to the folder you want to sync
## Setup Guide
The Microsoft SharePoint source connector supports authentication through the application-level OAuth client credentials flow (Microsoft's equivalent to Google's service account approach).
### Step 1: Create an Azure AD Application
1. Login to the [Azure Portal](https://portal.azure.com/)
2. Click the upper-left menu icon and select **Azure Active Directory**
3. Select **App Registrations**
4. Click **New registration**
5. Register an application:
* Name: Enter a name for your application
* Supported account types: Select **Accounts in this organizational directory only**
* Click **Register**
6. Record the **Application (client) ID** and **Directory (tenant) ID** which will be used for authentication
### Step 2: Generate a Client Secret
1. From your registered application page, select **Certificates & secrets**
2. Click **New client secret**
3. Provide a description and select an expiry period (e.g., 1 year)
4. Click **Add**
5. **IMPORTANT:** Copy the generated client secret value immediately - you won't be able to see it again
### Step 3: Assign API Permissions
1. From your registered application page, select **API permissions**
2. Click **Add a permission**
3. Select **Microsoft Graph**
4. Select **Application permissions**
5. Add the following permissions:
* **Sites.Read.All**
* **Files.Read.All**
6. Click **Add permissions**
7. Click **Grant admin consent for \[your organization]** to activate the permissions
### Step 4: Configure the SharePoint Connector in Paradigm Admin
1. Navigate to the Datasource section in your Paradigm admin interface
2. Create a new datasource of type **SharePoint**
3. Add your credentials in the required fields:
* **tenant\_id**: Your Azure AD tenant identifier
* **client\_id**: Your Azure AD application identifier
* **client\_secret**: Your Azure AD application secret
* **site\_name**: Name of your SharePoint site
The site name is basically the title of your SharePoint site
4. Click on **`New import`** to configure a new import configuration.
1. In the **Filter criteria**, specify the following:
* **folder\_path**: Paste the **URL** of the SharePoint folder you want to sync.
```
// should look like something like that:
```
(To synchronize an entire document library, set "`root`" in the folder\_path)
* **recursive**: Enable or disable subfolder syncing (defaults to `True`)
2. **Workspace**: Select the workspace where the files will be synced ( should be a `sync `type workspace)
3. **Frequency**: Set how often synchronization should occur
4. **Priority**: Set the relative importance compared to other import configurations
5. Click **`SAVE`** and wait for the tests to complete.
You're All Set! ✅
## Key Features of the SharePoint Connector
### Incremental Synchronization
The connector uses Microsoft's delta API to efficiently sync only changed files between runs. This approach:
* Reduces bandwidth and processing requirements
* Captures all file changes (creations, updates, deletions)
* Maintains state between synchronization runs via a delta token
### Authentication & Access
* Uses application-level authentication (not user-specific)
* Captures changes made by all users within the SharePoint site
* Automatically handles token renewal for continuous operation
### Limits and Considerations
* The connector respects configured document limits (DATASOURCES\_MAX\_DOC\_PER\_IMPORT)
* Checks file size limits before connecting (MAX\_DOCUMENT\_SIZE)
* Filters by supported MIME types
* The recursive option determines whether subfolders are included (default to yes)
## Troubleshooting
If you encounter connection issues:
1. Verify that all credentials (tenant\_id, client\_id, client\_secret) are correct
2. Ensure the application has been granted admin consent for the required permissions
3. Confirm the site\_name is correct and accessible to the application
4. Check that the folder\_path exists within the specified site
5. For specific error messages, consult the `import session page` for detailed information
For persistent issues, please contact the development team with specific error messages and timestamps.
# Web Scraping Datasource
Source: https://docs.lighton.ai/en/administration/knowledge-management/data-sources/webscraping-datasource
The WebScraping datasource is a powerful tool for automatically extracting content from websites and importing it into your workspace.
The WebScraping datasource is a powerful tool for automatically extracting content from websites. This guide will walk you through configuring and using WebScraper to collect data from websites and import it into your workspace.
## Getting Started
### 1. Creating a New WebScraper Import
To create a new import:
1. Navigate to the Datasources section
2. Click "Add New Datasource" or select an existing WebScraper datasource
3. Click "+ New Import" to configure a new import
## Basic Configuration
### URL Configuration
* **Start URL**: The specific URL where crawling will begin. This is the entry point for the scraper.
* Example: `https://en.wikipedia.org/wiki/Artificial_intelligence`
### Crawling Parameters
* **Max Crawl Depth**: Controls how deep the crawler will navigate from the starting URL.
* **0**: Only crawls the starting URL
* **1**: Includes pages directly linked from the starting URL
* **2**: Includes links from those direct links
* **3**: Goes three levels deep (maximum)
## Advanced Configuration
* **Max Pages**: Limits the total number of pages crawled.
* Enable "Limit Max Pages" to set a specific limit
* Recommended for large websites to prevent excessive crawling
### Content Relevance
* **Relevance Keywords**: Keywords that determine which pages are more important to crawl.
* Pages containing these keywords receive higher priority
* Separate multiple keywords with commas
* Example: `AI, machine learning, neural networks`
* **Keywords Weight**: How strongly to prioritize pages with keywords.
* **0.0**: Ignore keywords completely
* **1.0**: Prioritize keywords above all other factors
* **0.7**: (Default) Balances keyword matching with other factors
### URL Patterns
* **URL Patterns to Include**: Restricts which URLs will be crawled based on patterns.
* Use `*` as a wildcard
* Example: `/products/*` matches all pages in the products directory
* Use `*` alone or leave empty to include all URLs
* Separate multiple patterns with commas
* **URL Patterns to Exclude**: Specify URL patterns that should NOT be crawled.
* Example: `/admin/*, /login/` excludes admin pages and login page
* Separate multiple patterns with commas
### Content Selection
* **Content CSS Selector**: CSS selector that defines which content to extract from pages.
* This limits both crawling and content extraction scope—any content outside these selectors will be ignored.
* Example: `article.content,.main,.data-container`
* **Elements to Exclude**: CSS selector for elements to remove from processing.
* This works like the Content CSS Selector but in reverse—specified elements will be excluded from both markdown generation and crawling.
* Example: `#ads, .cookies` to remove ads and cookies
* **Target Elements**: CSS selectors for specific content extraction.
* These elements will be used for markdown generation while still allowing the crawler to process all page links and media.
* Example: `article.content,.main,.data-container`
* **Tags to Exclude**: HTML tags to skip during content extraction.
* These tags will be ignored during markdown generation but still checked for crawlable links.
* Example: `nav`
### Proxy Settings
* **Enable Proxy**: Toggle to use a proxy server for web scraping requests
* When enabled, additional proxy configuration fields will appear
## Import Settings
* **Workspace**: Select the workspace where the scraped content will be imported
* **Frequency (minutes)**: Set how often the scraper should run
* Set to 0 for manual triggering only
## Best Practices
1. **Start Small**: Begin with a shallow crawl depth and limited pages to test
2. **Refine Gradually**: Expand your configuration after confirming initial results
3. **Use Content Selection**: Apply HTML and CSS selectors to specify which content to extract and process from pages
4. **Use Relevance Keywords**: For large sites, use keywords to prioritize content
5. **Respect Website Rules**: Avoid aggressive crawling that might overload sites
6. **Check Results**: Regularly review imported content to ensure quality
## Troubleshooting
* **Empty Results**: Check URL patterns and content selectors
* **Too Much Content**: Reduce max depth or pages, or add selection/exclusion patterns
* **Irrelevant Content**: Refine CSS selectors to target specific content areas
* **Import Failures**: Check the site's robots.txt rules or try using a proxy
## Example Configuration
For crawling Wikipedia articles about AI:
* **Start URL**: `https://en.wikipedia.org/wiki/Artificial_intelligence`
* **Max Crawl Depth**: 1
* **Max Pages**: 20
* **Relevance Keywords**: `machine learning, neural network, deep learning`
* **Keywords Weight**: 0.7
* **Content CSS Selector**: `main`
* **Element to Exclude**: `.sidebar,.vector-column-end,.vector-page-toolbar,.vector-body-before-content,.navigation-not-searchable`
# Document Access Management in the Admin Tool
Source: https://docs.lighton.ai/en/administration/knowledge-management/documents/document-access-management
Document confidentiality is a top priority. For this reason, the platform's admin tool and API are designed to ensure that users can only see and interact with documents they are explicitly authorized to access.
🔒 Document confidentiality is a top priority. For this reason, the platform's admin tool and API are designed to ensure that users can only see and interact with documents they are explicitly authorized to access.
## 🧭 Document Access Rules: Who Can See What?
Regardless of a user's role or group, access to documents in **clear text** within the admin tool is strictly conditioned by their relationship to a **company** and specific **workspaces**.
### ✅ A user can only see a document in clear text if it is in:
* **The "Company" workspace of their own organization**\
→ The user can access all documents in the company workspace linked to their company (each user belongs to one and only one company).\
→ "Company" workspaces from other organizations are **entirely anonymized**.
* **Their own personal workspace**\
→ The user can view documents in clear text only in **their own personal space**.\
→ Documents in other users' personal workspaces are **completely anonymized**.
* **A shared workspace the user is explicitly a member of**\
→ The user has clear access to documents in workspaces they are associated with.\
→ In all other workspaces of their company, documents are **anonymized** (only the ID is shown, no name or content).
***
## 👁️🗨️ What Happens When a User Doesn't Have Access?
If a user **does not have access rights** to a document:
* They can see that the document exists within the workspace structure (e.g., in a team workspace).
* The document is displayed with:
* **Only its unique identifier (ID)**.
* **No visible metadata** (title, content, snippets).
* **No available actions** to consult or open the document.
This approach ensures **structural transparency** without ever compromising **data confidentiality**.
***
## ⚙️ Technical Behavior in the Admin Tool
Each model linked to documents applies **conditional filtering functions** ("redact functions") based on the rules above. These functions dynamically determine what each logged-in user is allowed to see.
| Model / Admin | Display Rule |
| ------------------------ | ------------------------------------------------------------------------ |
| **Chat response** | Filters chunk links based on access rights to linked documents |
| **Chat session** | Shown only if the user has access to the linked documents (M2M relation) |
| **Chat message** | Message text shown only if the user has proper rights |
| **Chunk response links** | Filtered based on access to `Document Chunk` or `Vision Chunk` |
| **Document extract** | Displayed only if the user has access to the parent document |
| **Collections** | Displayed if at least one document is accessible, internal docs filtered |
| **Document chunk** | Visible only if the user can access the parent document |
| **Document** | Shown in clear text only if access conditions are met |
| **Pipeline event** | Displayed only if linked to an accessible document |
| **Vision chunks** | Filtered based on access to the source document |
| **Query suggestions** | Generated only from documents the user can access |
***
## 🔐 Extended API Security
The **same filtering rules** apply strictly at the **API level**. A user cannot:
* Access the content of a document they are not authorized to see.
* View metadata of documents they don't have access to.
* Indirectly query data using unauthorized endpoints.
Any unauthorized request returns either an **authorization error** or an **empty response**. This is enforced across **all endpoints** without exception.
***
## 🧱 Database Storage: A Controlled Necessity
To support platform features like search, agents, and indexing, documents must be **stored in the database**.
All access rights are strictly enforced at the **UI level**, within the **admin tool**, and via the **API**:\
🔒 A user can **never** access a document unless explicitly permitted.
👉 However, **direct access to the database** bypasses these application-level protections.\
This is **outside the scope of the platform**: it is the client's responsibility to **strictly limit database access to a small group of trusted administrators**.
***
## ✅ Summary
| Document Location | Clear Access Condition |
| ---------------------------------------- | ---------------------- |
| Company workspace (same company) | ✅ Yes |
| User's own personal workspace | ✅ Yes |
| Shared workspace the user belongs to | ✅ Yes |
| Workspace of same company (not a member) | ❌ Anonymized (ID only) |
| Workspace from another company | ❌ Completely hidden |
* 📄 Documents are filtered in real time based on the rules above.
* 👁️🗨️ Inaccessible documents appear anonymized (ID only).
* 🔐 The API enforces the same access logic as the admin tool.
* 🧱 Document storage is required, but **DB access must be tightly restricted by the client**.
# Document Chunks
Source: https://docs.lighton.ai/en/administration/knowledge-management/documents/document-chunks
Paradigm analyzes all documents and creates these excerpts to justify the model's response. This page provides detailed information about the generated excerpts, including the identified content and associated metadata.
Paradigm analyzes all documents and creates these excerpts to justify the model's response. This page provides detailed information about the generated excerpts, including the identified content and associated metadata.
Document Chunks are excerpts generated when a user asks a question using the "chat with doc" feature.
# Document Extracts
Source: https://docs.lighton.ai/en/administration/knowledge-management/documents/document-extracts
Details the excerpts from documents that are used when a user asks a question with the "search in my document" option selected.
Details the excerpts from documents that are used when a user asks a question with the "search in my document" option selected.
The model responds by providing relevant document excerpts to justify the generated answer.
# Documents
Source: https://docs.lighton.ai/en/administration/knowledge-management/documents/documents
This information helps understand how the model qualifies the document and provides in-depth insights into it.
This information helps understand how the model qualifies the document and provides in-depth insights into it.
For each document, you can view detailed information such as the document title, textual content, document owner, associated company/workplace, word count, status, format, and the number of times it has been used to answer a question.
# Workspaces - Managing Document Access
Source: https://docs.lighton.ai/en/administration/knowledge-management/workspaces/managing-workspaces
Step-by-step guide to creating Custom Workspaces, adding and removing members, updating workspace details, view and upload document, and managing workspace lifecycle in the Admin Panel.
A workspace is a designated area or environment designed to facilitate productivity, collaboration, and focus. Its purpose is to provide the necessary tools, resources, and conditions for individuals or teams to efficiently complete tasks and achieve their goals.
Workspace configuration directly impacts data security and compliance. Carefully review access permissions before creating or modifying workspaces to prevent unauthorized document exposure.
## Prerequisites
To manage workspaces, you must have an admin access and one of the following roles:
* **Super Admin** (Admin) - Full access to all workspaces and settings
* **Sys Admin** - System-level administration capabilities
* **Account Manager** - Account-level administration capabilities
* **Company Admin** - Company-level administration
### **Workspace Roles and Permissions**
In Paradigm, workspace members are assigned one of three roles: **Viewer**, **Editor**, or **Owner**. These roles define what actions a user can perform within the workspace and on its documents.
| **Role** | **Permissions at Workspace Level** | **Permissions on Documents** |
| ---------- | ---------------------------------------------------------------- | ------------------------------ |
| **Owner** | - Update members\
- Remove members\
- Delete the workspace | - Upload, delete, read, update |
| **Editor** | No specific permissions at workspace level | - Upload, delete, read, update |
| **Viewer** | No specific permissions at workspace level | - Read only |
> **\_⚠️ Important Exception: \_***The Document Manager role grants the ability to upload and delete documents in any workspace, regardless of the user’s workspace role (Viewer, Editor, or Owner). This is a global permission that overrides workspace-level document access restrictions.*
### What You Can Do in the Admin Panel
### **Core workspace operations**:
* ✅ Create new workspaces with full configuration
* ✅ Update workspace properties (name, description, company)
* ✅ Manage workspace members (add/remove users and teams)
* ✅ View complete workspace details and metadata
* ✅ Delete workspaces (with proper warnings)
### **Unique capabilities**:
* ✅ **Direct team management** - Add both individual users AND teams as workspace members (not possible via API v2)
* ✅ **Complete visibility** - See all workspaces in the company (based on your role)
* ✅ **Advanced configuration** - Access to all workspace settings and properties
### Common Journeys
### Create a workspace
* **Step 1: Go to the workspace creation page**
1. Log in with an Admin, Sys Admin, Account Manager or Company Admin account
2. Navigate to **Workspaces** in the menu
3. Click on "+ Add" in the menu to display the workspace creation form
* **Step 2: Create a workspace**
1. Fill in the **Name** field (mandatory)
* Choose a descriptive and unique name
* Example: "Project Phoenix - Documentation
* Avoid ambiguous acronyms
2. Fill in the **Description** field (optional)
* Describe purpose and content
* Example: "Technical documentation and specifications for Project Phoenix".
* Facilitates search and understanding
3. Fill in the **Company** field (mandatory)
* Select the associated company
* Pre-filled if you are Company Admin
4. Click on "Save" to finish and return to the workspace list page or "Save and continue editing" to add members
* **Step 3: Add members to a workspace (Custom and Private workspace only)**
1. Go to the **Team** section
2. Click on the "+ Add another Workspace Member" button
3. Select users or teams to add
1. Search for the user or team to add in the drop-down list
2. Select the user or team
3. Assign a role: **Viewer**, **Editor**, or **Owner**
4. Click on "Save" to finish and return to the workspace list page
Members are managed at Team level, not Workspace level. To add/remove members, edit the associated Team.
### Update a workspace
* **Step 1: Go to the workspace editing page**
1. Log in with an Admin, Sys Admin, Account Manager or Company Admin account
2. Navigate to **Workspaces** in the menu
3. Click on\*\*"Workspaces\*\*" in the menu to display the workspace table
* **Step 2: Update a workspace**
1. Select the workspace to update
2. (option) Modify name and/or description
* **Step 3: Update members to a workspace (Custom and Private workspace only)**
1. Add workspace members
1. Go to the **Workspace Members** section
2. Click on the "+ Add another Workspace Member" button to add
3. Select users or teams and assign roles (Viewer, Editor, Owner)
2. Remove workspace members
1. Go to the **Workspace Members** section
2. Click on "x" to the right of a workspace member to delete it
3. Click on "Save" to finish and return to the workspace list page
### Delete a workspace
* **Important considerations**
⚠️ **CAUTION**: Deleting a workspace is IRREVERSIBLE and also deletes :
* The associated collection
* All contained documents
* All generated embeddings
* **Step 1: Go to the workspace editing page**
1. Log in with an Admin, Sys Admin, Account Manager or Company Admin account
2. Navigate to **Workspaces** in the menu
3. Click on\*\*"Workspaces\*\*" in the menu to display the workspace table
* **Step 2: Delete a workspace**
1. Select the workspace to be deleted
2. Click on "Delete workspace" at bottom right of form
3. Click "Yes, I'm sure" to confirm deletion
***
# Understanding Workspaces Fundamental Concepts
Source: https://docs.lighton.ai/en/administration/knowledge-management/workspaces/understanding-workspaces
Learn what workspaces are in Paradigm and how they control document access.
## What is a workspace?
A workspace is an **organizational space** that :
* Allows documents to be organized by project, theme or period
* Contains a Collection of documents
* Can be linked to a Datasource in order to synchronize with it
* Can have Teams and/or individual users as members
* Only workspace members can access workspace content
* Only workspace members with a Document Manager role can upload or delete workspace documents
***
## Architecture
```jsx theme={null}
Users + Teams (members)
↓
Workspace (organize and control access)
↓
Collection (contains the documents)
↓
Documents (individual files)
↓ (optional)
Datasource (external synchronization)
```
## Workspace relationships
**Key relationships**:
1. **Workspace → Members**: A workspace can have as members :
* Individual users
* Complete teams
* A combination of both
2. **Workspace → Collection**: Each workspace contains a Collection of documents.
3. **Workspace → Datasource** (optional): A workspace can be linked to a Datasource to automatically synchronize documents from external sources (SharePoint, Google Drive, etc.)
***
## Permissions and Roles
**Document access**:
* Only members of a workspace (direct users or via Teams) can access workspace content
**Actions on documents**:
* All members can consult documents.
* Only members with a **Document manager** role can upload or delete documents.
***
## Document access levels
Paradigm allows you to define the accessibility of each document at three levels:
### 1. Company Workspace
**Global access**
* Documents accessible by all company users
* Corresponds to **Company Team** (automatic)
* Use for: general documentation, policies, common resources
**Use cases**
* HR policies and internal procedures
* General technical documentation
* Templates and shared resources
* Official communications
**Security considerations**
Access is determined by whether a user belongs to the company.
⚠️ Enterprise-level access should be restricted to general information only. Sensitive documents should be stored on a dedicated custom workspace.
⚠️ It is possible to create several company spaces with custom workspaces associated with **Company Team.**
### 2. Organization level (Custom Workspace)
**Restricted access**
* Documents accessible only to workspace members
* Corresponds to **Custom Teams**
* Use for: specific projects, departments, teams
**Use cases**
* Project documents
* Departmental resources
* Cross-functional collaboration
* Specialized technical documentation
**Access control**
⚠️ Access is determined by the user's membership or membership of a member team.
### 3. Private Workspace
**Private access**
* Documents accessible only by owner
* Corresponds to **Private Team** (automatic)
* Use for: drafts, personal notes, confidential documents
**Use cases**
* Drafts in progress
* Personal notes
* Experiments
* Individual confidential documents
**Access control**
⚠️ There is only one Private Workspace per person
## ⚠️L access is only possible for the user who owns the space
## Choosing the right level of access
### Decision matrix
| Criteria | Company | Organization | Staff |
| ----------------- | ----------- | ----------------- | -------- |
| **Audience** | All | Specific team | Me alone |
| **Sensitivity** | Low | Medium to High | Personal |
| **Collaboration** | Broad | Targeted | None |
| **Lifespan** | Long term | Variable | Variable |
| **Examples** | HR policies | Project documents | Drafts |
### Questions to ask
**Before choosing the level of access :**
1. **Who needs to see this document?**
* Everyone → Company
* A specific team → Workspace
* Just me → Personal
2. **How sensitive is the document?**
* Internal public information → Company
* Project information → Workspace
* Confidential information → Personal
3. **What is the document's life cycle?**
* Permanent / Reference → Company
* Project duration → Workspace
* Temporary → Personal
# Best Practices for Organizing and Using Workspaces in Paradigm
Source: https://docs.lighton.ai/en/administration/knowledge-management/workspaces/workspaces-best-practices
Learn how to structure, manage, and utilize workspaces effectively to enhance collaboration, streamline workflows, and boost productivity across your enterprise.
## Main function: Parsed RAG collections
Paradigm workspaces are designed to **organize and make accessible all types of unstructured documentation** using a **parsed RAG (Retrieval-Augmented Generation) collection** architecture.
**Important reminder**
The workspace description in Paradigm is currently **not used** by the RAG system. It serves only as documentation for administrators. The RAG system relies solely on the content of the documents themselves.
### What is a Parsed RAG Collection?
Each workspace contains a collection that :
* **Automatically parses** uploaded documents, whatever their format (PDF, DOCX, XLSX, images, etc.)
* **Extracts and structures** unstructured content to make it comprehensible to AI
* **Generates embeddings** for advanced semantic search
* **Contextualizes** answers based on all workspace documents
**Key benefit**
Thanks to RAG parsing, Paradigm can understand and query any technical, commercial, legal or operational documentation, even if it's heterogeneous and unstructured. The system automatically transforms your documents into a searchable knowledge base.
**Note**: The workspace description is currently **not used** by the system and serves only as documentation for administrators.
### Supported documentation types
RAG collections can parse and include:
* **Technical documentation**: specifications, API docs, architecture, code
* **Business documents**: procedures, guides, training, playbooks
* **Legal resources**: Contracts, NDAs, policies, compliance
* **Customer data**: Specifications, deliverables, communications
* **Miscellaneous knowledge**: Wikis, notes, presentations, spreadsheets
***
## Organization Strategies
### Recommended Approach: Organization by Knowledge Area
Since workspaces function as RAG collections, organize them by **coherent knowledge domain** rather than by organizational structure:
```jsx theme={null}
Exemples of optimal workspace organization :
✅ By technical field :
• "Engineering - Platform Architecture"
• "Engineering - API Documentation"
• "Engineering - DevOps & Infrastructure"
✅ By business area :
• "Product - User Research & Insights"
• "Product - Product Specifications"
• "Sales - Sales Playbooks & Methodologies"
✅ By regulatory area :
• "Compliance - GDPR Documentation"
• "Compliance - SOC2 Evidence"
• "Legal - Contracts & Agreements"
❌ Avoid (too generic) :
• "Documents"
• "Fichiers 2025"
• "Misc"
```
### Principle of Thematic Coherence
**Why it's important**: RAG works best when documents in the same workspace are thematically related. This enables :
1. **Better contextualization**: AI better understands relationships between similar documents
2. **More precise responses**: Semantic search is more effective in a coherent corpus
3. **Less noise**: Avoids irrelevant results from different domains
**Rule of thumb**: if you're asking "Will these documents be queried together in the same context?", they must be in the same workspace.
### Examples by Organization Type
### ▶**1. Organization by Project (with thematic consistency)**
```jsx theme={null}
Engineering Team
├─ Project Phoenix - Technical Docs
│ └─ Architecture, specs, API docs, test plans
├─ Project Phoenix - User Documentation
│ └─ User guides, tutorials, FAQs
└─ Infrastructure - Runbooks
└─ Procedures, configurations, monitoring
```
**When to use**: Large projects with voluminous documentation and different types of audience
### ▶2. Organization by Functional Area
```jsx theme={null}
Product Organization
├─ Product Requirements
│ └─ PRDs, specs, roadmaps
├─ User Research
│ └─ Interviews, personas, insights
├─ Design System
│ └─ Components, guidelines, patterns
└─ Analytics & Metrics
└─ Dashboards, reports, KPIs
```
**When to use**: Teams with distinct areas of expertise and specialized documentation
### ▶3. Hybrid Organization (Recommended)
```jsx theme={null}
Company Knowledge Base
├─ Technical - Backend APIs (domaine)
├─ Technical - Frontend Components (domaine)
├─ Project Phoenix - All Docs (projet)
├─ Customer Success - Playbooks (domaine)
├─ Sales - Methodologies (domaine)
└─ Compliance - All Documentation (domaine)
```
**Advantages**: Combines project flexibility with thematic domain consistency
***
## Good Naming Practices
### Recommended format
```jsx theme={null}
[Domain] - [Subdomain or Content Type]
```
### Examples
```jsx theme={null}
✅ Excellent naming (descriptive and thematic) :
• "Engineering - Platform API Documentation"
• "Product - Feature Specifications"
• "Sales - Enterprise Playbooks"
• "Compliance - Security Policies"
• "Customer Success - Implementation Guides"
✅ Good naming (clear and consistent) :
• "Technical Documentation - Backend"
• "User Research 2025"
• "Legal - Vendor Contracts"
❌ À éviter (trop vagues pour une recherche efficace) :
• "Documents"
• "Workspace 1"
• "Misc Files"
• "Archive"
• "tmp"
```
***
## Size and Number of Workspaces
### Recommendations
| Size Organization | Number of Workspaces | Principle |
| ------------------------- | -------------------- | ------------------------- |
| Small team (\< 10) | 3-5 workspaces | Per large area |
| Medium team (10-50) | 5-15 workspaces | Per area and sub-area |
| Large organization (> 50) | 10-30 workspaces | By area, team and project |
### When to create a new workspace
```jsx theme={null}
✅ Create a workspace when:
• The topic area is distinct
• The documents will not be searched together
• The members/permissions are different
• The content requires isolation (confidentiality)
❌ Do not create a workspace if:
• It is just to "organize" similar documents
• The same people access it
• The documents are thematically related
• A simple tag/folder would suffice
```
***
## Practical Use Cases
### 1. Consistent Multi-Project Documentation
**Scenario**: Several projects sharing the same technical stack
**Solution**:
```jsx theme={null}
Engineering
└─ Backend API Documentation (single workspace)
├─ Common patterns (files)
├─ Project A APIs (files)
├─ Project B APIs (files)
└─ Project C APIs (files)
```
**RAG advantage**: The system can respond to common patterns by drawing on all projects.
### 2. Customer Knowledge Base
**Scenario**: Agency managing several customers
**Solution**:
```jsx theme={null}
Client Services
├─ Client A - All Documentation
│ └─ Contracts, deliverables, communications
├─ Client B - All Documentation
│ └─ Contracts, deliverables, communications
└─ Internal - Service Methodologies
└─ Processes, templates, best practices
```
**RAG advantage**: Perfect isolation by customer + reusable methodologies
### 3. Compliance Documentation
**Scenario**: Multiple regulatory requirements
**Solution**:
```jsx theme={null}
Compliance
├─ GDPR - Complete Documentation
│ └─ Policies, audits, DPIAs, procedures
├─ SOC2 - Evidence & Controls
│ └─ Controls, tests, reports, evidence
└─ ISO 27001 - Documentation
└─ Policies, procedures, audits
```
**RAG Advantage**: Precise search by regulatory framework
### 4. Onboarding and Training
**Scenario**: Training documentation by role
**Solution**:
```jsx theme={null}
HR - Learning & Development
├─ Engineering Onboarding
│ └─ Setup guides, tech stack, processes
├─ Sales Onboarding
│ └─ Product training, methodologies, tools
└─ General Company Onboarding
└─ Culture, policies, benefits, tools
```
**RAG Advantage**: Customized responses by user role
***
## Workspace Lifecycle
### Creation
1. **Define a** clear and coherent **knowledge domain**
2. **Identify members** working in this area
3. **Create with a descriptive name** for the thematic content
4. **Document purpose** (even if not used by the system, useful for admins)
5. **Start uploading** or **Sync with Datasource** thematically-related documents
### Maintenance
1. **Review members**: Quarterly for standard workspaces
2. **Monitor consistency**: Ensure that new documents remain thematically linked
3. **Clean up regularly**: Remove obsolete documents to improve RAG quality
4. **Check usage**: Identify under-used workspaces
### Offboarding
1. Inactivate user
2. Remove the user's membership from all their custom workspaces
3. Transfer ownership of workspaces if necessary
***
## Audit and Traceability
### **Workspace events** :
* Creation
* Modification (name, description)
* Add/remove members
* Delete
### **Documents events** :
* Upload
* Consult through tools (docsearh, etc.)
* Delete
### **Access events**:
* Access attempts denied
* Permission changes
* Data export
# Mastering Workspace Storage Limits in Paradigm
Source: https://docs.lighton.ai/en/administration/knowledge-management/workspaces/workspaces-storage-limits
This feature allows administrators to control the volume of documents stored in the workspace, ensuring that your company's storage needs are met without compromising performance.
This feature allows administrators to control the volume of documents stored in the workspace, ensuring that your company's storage needs are met without compromising performance.
## Understanding Workspace Storage Limits
Workspace storage limits enable administrators to set default storage capacities for workspaces within their company. This feature is particularly useful for managing large volumes of documents across multiple workspaces. With storage limits in place, admins can prevent individual workspaces from consuming excessive storage, ensuring that the entire organization's storage needs are balanced.
## Admin Configuration: Setting Default Storage Limits
As an administrator, you can set default storage limits for all new companies created within your Paradigm instance. To do this:
1. Navigate to the **Config Keys** page.
2. Locate the **Workspace Storage Limits** section.
3. Set the desired default storage limit for new companies.
This will ensure that all new companies created within your Paradigm instance have the specified storage limit applied.
## Modifying Workspace Storage Limits
Administrators can also modify workspace storage limits during company creation or edit them after the company has been created. To do this:
1. Create a new company or edit an existing one.
2. In the **Company Settings** page, locate the **Workspace Storage** section.
3. Adjust the storage limit as needed.
## User Experience: Viewing Storage Limits and Utilization
As a user, you can easily view the available and utilized storage space for your workspace. To do this:
1. Navigate to the **Document List** page.
2. Look for the **Storage** section, which displays the available and utilized storage space.
Additionally, when adding new documents to your workspace, you'll be notified if the storage limit is approaching or has been exceeded.
## Understanding the Storage Limit Calculation Mechanism
The storage limits within a workspace are calculated by summing the storage used in the "Personal" and "Custom" categories. To ensure compliance with the company's storage limit, the combined usage of these categories must not exceed the maximum storage limit set for the company.
# Audit Log
Source: https://docs.lighton.ai/en/administration/monitoring-and-analytics/audit-log
To ensure traceability of actions performed by users and admins, the Paradigm platform provides an "Audit Log" section accessible to Admins. This guide will help you navigate and utilize this feature.
To ensure traceability of actions performed by users and admins, the Paradigm platform provides an "Audit Log" section accessible to Admins. This guide will help you navigate and utilize this feature.
## How to Access the Audit Log
1. **Log in as Admin**
2. **Navigate to the Audit Log Section**
3. **Consult the Logs**: In the Audit Log section, you will see a comprehensive list of all actions performed on the platform. Each log entry includes details such as:
* The user who performed the action
* The time and date of the action
* A description of the action
4. **Use the available search bar** to narrow down the logs
5. **Exporting Logs**: If needed, you can export the log data for further analysis or record-keeping
By following these steps, Super Admins can effectively monitor and trace all actions performed on the Paradigm platform, ensuring transparency and accountability.
# Add Custom Tracking Scripts — No Code Deployment Required
Source: https://docs.lighton.ai/en/administration/monitoring-and-analytics/custom-scripts
System administrators can now add custom JavaScript tracking tags (e.g. Google Analytics 4, Pendo, Hotjar, etc.) directly at the tenant level, without requiring any code deployment or engineering intervention.
### **More flexibility for personalization, onboarding, and analytics**
This feature gives every organization the freedom to **monitor usage**, **measure satisfaction**, and **tailor user experiences** with maximum autonomy and compliance.
## Built-in User Onboarding and Analytics Script
By default, each tenant includes a **built-in user onboarding and analytics script** designed to enhance the user experience from day one.
It allows you to:
1. **Announce product updates** — share new releases or feature launches directly within the interface.
2. **Guide new users** — offer interactive onboarding flows to help users explore and adopt the platform.
3. **Collect user feedback** — through lightweight surveys such as NPS (Net Promoter Score).
4. **Track overall usage** — to better understand adoption and engagement patterns.
> 🔒 **Full GDPR compliance:**\
> All data collected through the default script is **fully anonymized**, and **no personal or identifiable information** is stored or shared.
## Add Your Own Custom Script
Administrators can replace or extend the default setup by inserting their **own analytics or experience tracking scripts**, tailored to their organization’s tools and needs.
### How to do it:
1. Go to the **Configuration** page in the admin console.
2. Open the **Custom Scripts** section.
3. Paste your **JavaScript snippet** (e.g. GA4, Pendo, Hotjar, etc.) in the provided field.
4. Save your changes — the script will be applied instantly, **without any code deployment**.
## Security & Compliance
* Scripts are executed **only within the tenant’s scope**, ensuring strict data separation.
* All analytics data is **anonymized** and **never shared with third parties** without explicit consent.
* The platform’s built-in mechanisms ensure **full GDPR compliance**.
* Custom scripts are **entirely controlled and managed by the administrator**.
# Debugging Temporary Access Requests (Sessions & Docs)
Source: https://docs.lighton.ai/en/administration/monitoring-and-analytics/debugging-access-requests
This article explains how to troubleshoot and resolve issues with the Ask for Access feature, which allows DPO Admins or Company DPOs to request temporary access to documents and sessions.
This article explains how to troubleshoot and resolve issues with the Ask for Access feature, which allows DPO Admins or Company DPOs to request temporary access to documents and sessions.
## Feature Overview
* **Who can request:** DPO Admins or Company DPOs.
* **How it works:**
1. Request made via the Admin Panel.
2. Owner receives an email with approval link.
3. Access is granted once approved.
4. Access expires automatically (default: 336h, configurable via the [config key](https://paradigm.lighton.ai/admin/settings/configkeyvalue/) 'ACCESS\_GRANT\_DURATION\_HOURS').
***
## How to request access?
**Requester (DPO Admin / Company DPO)**
* Opens the [Admin Panel](https://paradigm.lighton.ai/admin/).
* Navigate to the [documents](https://paradigm.lighton.ai/admin/embeddings/document/) page or [chat session](https://paradigm.lighton.ai/admin/chat/chatsession/) page
* Selects one or more documents **or** sessions.
* In the Actions dropdown menu, choose Request access.
## Owner (Document / Session Owner)
1. Receives an **email notification** containing:
* Requester identity
* List of requested items
* An approval link
2. Chooses one of two options:
* **Accept** → Temporary access is granted for the configured duration.
* **Refuse** → No access is granted.
3. In both cases:
* The system records the decision in logs.
* The requester receives an **email confirmation** with the outcome (approved or refused).
4. If access is approved, it expires automatically once the time window ends.
***
**Limitations**\
The email content and branding are not customizable.\
Emails are sent only in English.
# How to investigate chat flags
Source: https://docs.lighton.ai/en/administration/monitoring-and-analytics/investigate-chat-flags
We'll explore the underlying reasons behind these unexpected responses and provide practical tips to resolve these issues and improve your interactions with Paradigm.
We'll explore the underlying reasons behind these unexpected responses and provide practical tips to resolve these issues and improve your interactions with Paradigm.
In this guide, we'll dive into scenarios where the Paradigm model doesn't respond as expected when asked a question based on a document database.
## Understanding Chat Response Issues
When working with Paradigm's chat interface, you may occasionally encounter responses that don't meet your expectations or seem inappropriate given the context of your documents. This can happen for several reasons:
* **Document relevance**: The model might not be finding the most relevant documents for your query
* **Context limitations**: The retrieved context might not contain sufficient information to answer your question accurately
* **Query formulation**: The way your question is phrased might not align well with how information is structured in your documents
* **Document quality**: Issues with the source documents themselves, such as poor formatting or incomplete information
## Investigating Flagged Responses
When a chat response is flagged or doesn't meet expectations, follow these investigation steps:
### 1. Review the Query Context
* Check if your question is clearly formulated and specific
* Consider whether the query aligns with the content in your document database
* Try rephrasing the question using different keywords or terminology
### 2. Examine Document Retrieval
* Verify that relevant documents exist in your workspace
* Check if the documents are properly indexed and accessible
* Review document formatting and structure
### 3. Analyze Response Quality
* Compare the response against the source material
* Identify any gaps between the retrieved context and the generated answer
* Look for potential misinterpretations or hallucinations
### 4. Test Alternative Approaches
* Try asking more specific or focused questions
* Break complex queries into smaller, more targeted questions
* Experiment with different phrasing or keywords
## Improving Chat Interactions
To enhance the quality of your chat interactions with Paradigm:
**Document Optimization:**
* Ensure documents are well-formatted and clearly structured
* Use consistent terminology and clear headings
* Remove or fix corrupted or poorly formatted content
**Query Optimization:**
* Be specific and clear in your questions
* Use terminology that matches your document content
* Provide context when asking follow-up questions
**Workspace Management:**
* Regularly review and update your document collection
* Remove outdated or irrelevant documents
* Organize documents logically within your workspace
## Reporting Issues
If you continue to experience problems with chat responses:
1. Use the flag feature to report problematic responses
2. Provide specific details about what was expected versus what was received
3. Include relevant context about your query and document setup
4. Contact support for persistent issues that affect your workflow
By following these investigation and improvement strategies, you can enhance the quality of your interactions with Paradigm and get more accurate, helpful responses from the system.
# Reporting and Usage Tracking
Source: https://docs.lighton.ai/en/administration/monitoring-and-analytics/reporting
Track platform and API usage with reporting endpoints, and build custom dashboards and KPIs tailored to your business needs
## Background
Until the **Sunny Seal** release, the platform included a built-in *Analytics* page.\
This page allowed customers to track metrics such as:
* request volume,
* user satisfaction,
* overall usage statistics.
Over time, however, we realized that **every customer had very different reporting needs**. A single, one-size-fits-all dashboard could not satisfy everyone. That’s why we decided to **deprecate the Analytics page** starting with Sunny Seal.
## New Strategy: Flexibility through the API
Instead of enforcing a generic interface, we shifted to a more flexible approach.\
Now, usage tracking is enabled through a series of **API endpoints** that expose raw data.
This choice has two main benefits:
1. **Total flexibility** – each customer can build dashboards and reports tailored to their needs.
2. **Easy integration** – data can be plugged directly into existing systems (BI tools, CRM, internal monitoring, etc.).
## Available Endpoints
The following endpoints are available for reporting:
* [Get Chat Sessions Report](https://lighton.mintlify.app/api-reference/reporting/get-chat-sessions-report)
* [Get Chat Feedbacks Report](https://lighton.mintlify.app/api-reference/reporting/get-chat-feedbacks-report)
* [Get Tools Report](https://lighton.mintlify.app/api-reference/reporting/get-tools-report)
* [Get Used Documents Report](https://lighton.mintlify.app/api-reference/reporting/get-used-documents-report)
* [Get User Activities Report](https://lighton.mintlify.app/api-reference/reporting/get-user-activities-report)
***
# How to Use the Endpoints
### Authentication
Each request requires an **API token** passed as a Bearer token in the header:
```
Authorization: Bearer
```
### Common Parameters
* `start_date` *(required)*: start date in `YYYY-MM-DD` format.
* `end_date` *(optional)*: end date, defaults to today.
* Depending on the endpoint, additional filters may be available (e.g., user ID, model ID).
***
## Example: Get Chat Sessions Report
### cURL
```
curl --request GET \
--url "https://paradigm-preprod.lighton.ai/api/v2/reporting/chat-sessions/?start_date=2023-12-01&end_date=2023-12-31" \
--header "Authorization: Bearer "
```
### Python
```
import requests
url = "https://paradigm-preprod.lighton.ai/api/v2/reporting/chat-sessions/"
params = {"start_date": "2023-12-01", "end_date": "2023-12-31"}
headers = {"Authorization": "Bearer YOUR_API_TOKEN"}
response = requests.get(url, headers=headers, params=params)
data = response.json()
print(data["reporting"][0]["dates"][0]["sessions"])
```
### Example JSON Response
```
{
"metadata": {
"sessions_count": {"description": "Total number of sessions", "unit": "integer"},
"average_session_length": {"description": "Average session length", "unit": "seconds"}
},
"reporting": [
{
"company": {"name": "ACME Corp", "id": 123},
"dates": [
{
"date": "2023-12-25",
"sessions": {
"sessions_count": 45,
"unique_models_count": 3,
"average_session_length": 120
},
"chats": {
"user_queries_count": 200,
"model_responses_count": 190,
"last_model_response_date": "2023-12-25T22:30:00Z"
}
}
]
}
]
}
```
***
## Example Use Cases
* **BI dashboards**: integrate with PowerBI, Looker, or Tableau to track adoption.
* **Internal alerts**: trigger notifications (e.g., threshold exceeded).
* **Product insights**: monitor which tools or documents are most used.
***
# FAQ
### What filters are available?
All endpoints support date filters, and some accept additional filters (e.g., user ID, document ID). See the API reference for details.
### How often can I call the API?
You can query as often as needed, but we recommend **aggregating data daily or weekly** to reduce load.
### Do you still provide a built-in reporting interface?
No. Our strategy is **API-only** for maximum flexibility and scalability.
### Can I combine multiple endpoints?
Yes. For example:
* Sessions + Feedbacks = adoption & satisfaction tracking.
* Documents + Tools = resource usage monitoring.
# Telemetry & Diagnostics
Source: https://docs.lighton.ai/en/administration/monitoring-and-analytics/telemetry-overview
This module enables proactive maintenance and accelerates incident resolution. Disabled by default, it relies on a purely technical and anonymized data collection process, guaranteeing the absolute confidentiality of your data through strict local scrubbing before secure transmission to servers hosted in the EU.
**Feature introduced in:** Unique Urchin
## 1. Why activate this module?
Until now, analyzing a technical incident often required manual log extractions and long investigation times.
By consenting to the activation of telemetry, you allow our support teams to receive technical metadata in real-time.
**Your immediate benefits:**
* **Proactive Support:** We can identify and fix technical bugs before your users even notice them.
* **Accelerated Resolution:** Drastic reduction in Mean Time To Resolve (MTTR) thanks to immediate technical context.
* **Total Confidentiality:** Diagnostics are performed without ever needing access to your documents or search content.
## 2. Security & Privacy (Privacy by Design)
We are fully aware that you operate in sensitive industries. The architecture of this module has been designed to guarantee that **no business data leaves your infrastructure**, even when telemetry is enabled.
### What is STRICTLY EXCLUDED from collection
Our system integrates a **local scrubbing** mechanism. The following data is **deleted at the source** before any transmission occurs:
* ❌ **Document Content:** No text, images, or indexed data is collected.
* ❌ **Prompts and Queries:** Questions asked by your users remain private (conversation content is not transmitted to the telemetry module).
* ❌ **Personal Data (PII):** Any data detected as PII (e.g., email address, IP address, name, payment details) is automatically filtered out.
* ❌ **Full Logs:** We do not retrieve raw logs, only specific error traces.
### What is COLLECTED (Technical Scope)
Telemetry focuses solely on software health:
* ✅ **Stack Traces:** The specific technical line of code that generated the error.
* ✅ **Environment Context:** Library versions (Python, Django), OS.
* ✅ **Performance Metadata:** Technical response times.
* ✅ **Technical Identifiers:** A Company ID and a User ID (only if you check the specific option, see Section 4).
## 3. Architecture & Data Flow
The transmission process is secure and follows the strictest standards:
1. **Local Filtering (Sidecar):** A "relay" module located within your infrastructure intercepts the error and performs sensitive data scrubbing.
2. **Encrypted Transmission:** Anonymized data is transmitted via **HTTPS over port 443** (Outbound/Egress).
3. **Protocol:** Use of **TLS 1.2+** to guarantee flow integrity.
4. **Hosting:** Diagnostic data is stored exclusively on **servers hosted in the European Union**.
## 4. Control & Activation (Opt-in)
In accordance with our security commitments, this module operates on an **explicit consent** model. By default, no data is transmitted.
Activation requires **two strict steps**:
### Step 1: Global Technical Activation (System Admin)
The System Administrator must first authorize the module's capability at the instance level via the global configuration (`Admin/configkey`).
* **Variable:** `TELEMETRY_ENABLED`
* **Action:** Set value to `True`.
* *Note:* This action alone **does not send any data**. It simply unlocks the ability for each entity to provide consent in Step 2.
### Step 2: Entity Consent (Company Admin)
Once the module is technically enabled globally, the administrator of each company must explicitly activate collection for their specific scope.
**Path:** `Authentication > Companies > [Your Entity]`
You have two options:
1. **Check "Technical telemetry enabled" (Essential)**
* *Action:* Authorizes the sending of anonymized error reports (Stack traces).
* *Guarantee:* If this box is checked alone, no user data is collected.
2. **Check "Technical telemetry IDs allowed" (Recommended)**
* *Action:* Allows the inclusion of the technical Company ID and User ID in the report.
* *Advantage:* Allows our teams to immediately know if a bug is isolated to a single user or affects the entire company, significantly speeding up diagnosis.
> **Note:** You can revoke this consent at any time by unchecking these options. The cessation of data transmission is immediate.
## Summary for SecOps Teams
| **Criteria** | **Specification** |
| :----------------- | :---------------------------------------------------- |
| **Network Flow** | Outbound only (Egress), HTTPS (TCP/443) |
| **Encryption** | TLS 1.2 minimum |
| **Destination** | SaaS Infrastructure hosted in the EU (GDPR Compliant) |
| **Content** | Technical metadata and Stack Traces only |
| **Sensitive Data** | Filtered locally (On-premise) before emission |
For any questions regarding the updated Data Processing Agreement (DPA) including this technical sub-processor, please contact your dedicated CSM.
# Conversation (Thread) Management and Auditing
Source: https://docs.lighton.ai/en/administration/monitoring-and-analytics/thread
This section of the administration panel allows you to monitor overall Paradigm activity, diagnose technical errors, and—under strict procedures—audit conversation content.
## **Who can access this page?**
Access is strictly limited to roles with high-level supervision rights:
* **Instance level (Global):** System Admin, Account Manager, DPO Admin
* **Organization level:** Company Admin, DPO Company (limited to their company’s data only)
***
## **Confidentiality and Data Protection**
Paradigm is designed to ensure the confidentiality of user interactions. By default, no administrator can read conversation content or view user documents.
* **Hidden by default:** In both the list view and the detail view, prompts, AI responses, and conversation names are replaced with **\[HIDDEN INFORMATION]**
* **Purpose:** This ensures users are not being monitored in real time and protects business confidentiality
***
## **How to access content when needed (Audit & Debug)**
If intervention is required (e.g., technical debugging, compliance auditing, or suspected abuse), an administrator cannot “force” access alone. They must initiate a formal process:
1. Select the relevant thread(s)
2. Use the action **“Request access to selected threads”**
This triggers an authorization request to access the decrypted content of conversations and associated documents.
***
## **1. Filtering and Search (List View)**
The main page displays a chronological list of all interactions. To find a specific conversation among thousands, use the filters in the right-hand column:
* **Status:** Isolate failures (**Failed**) for debugging or successes (**Completed**)
* **Creation source:** Distinguish chats created via the interface (**WEB**) from API calls (**API**)
* **Tools used:** Filter conversations that used specific tools (e.g., `document_search`, `code_execution`, `web_search`) to analyze advanced feature usage
* **Time period:** Filter by creation or update date (Today, Last 7 days, This month, etc.)
* **User / Company:** Search for conversations from a specific user
***
## **2. Bulk Actions**
By selecting multiple rows in the list, the **“Action”** menu allows you to perform grouped operations:
* **Request access:** Request decryption of content (see Confidentiality section)
* **Delete:** Permanently remove logs from the database (useful for the right to be forgotten)
***
## **3. Conversation Details (Detailed View)**
By clicking on a thread ID, you can access its detailed technical record.
### **A. Basic Information and Relationships**
This section provides technical context without revealing content:
* **ID & Status:** Unique identifier and request status (useful for support)
* **User:** The author of the conversation
* **ML Model:** The AI model used (e.g., `alfred-sv5`)
* **Chat Setting:** The system configuration active during the interaction
### **B. Messages (Technical Logs)**
Here you can see the structure of the exchange (User vs Assistant) and the timeline.
* **Content:** Remains hidden (**\[HIDDEN INFORMATION]**) until access has been requested and approved
* **View ML Request:** Allows technical administrators to view the raw payload sent to the model (without decrypted content if not authorized) to investigate formatting or timeout errors
* **Reasoning Content:** If the model uses a chain-of-thought, its presence is indicated here
### **C. Single-thread deletion**
A red **“Delete thread”** button at the bottom of the page allows you to remove this specific record from history.
# Companies
Source: https://docs.lighton.ai/en/administration/organization-setup/companies
In Paradigm, a 'Company' is a crucial organizational entity. It defines the scope of document access and analytics within our chat-with-documents platform.
In Paradigm, a 'Company' is a crucial organizational entity. It defines the scope of document access and analytics within our chat-with-documents platform.
Changing company settings affects all users within that organization. Users can only access documents belonging to their company, so careful planning is essential before making modifications.
Paradigm integrates Large Language Models (LLMs) with Retrieval-Augmented Generation (RAG), and users interact with company-specific embedded documents.
## Company Specifics
* **Document Access**: Users can only interact with documents belonging to their associated company.
* **User Activity and Analytics**: User activities, such as feedback and the number of requests, are monitored and compiled into an aggregated analytics view at the company level, viewable by the company owner.
* **Company Theme**: Allows customization of company-specific themes, including color schemes and logos.
Company-level analytics provide insights into usage patterns, user engagement, and system performance across your organization. This data helps administrators make informed decisions about resource allocation and user training needs.
## Managing Companies
### Creating a Company
1. **Navigate** to the Paradigm admin panel.
2. **Click the plus sign or the add company button**
3. **Create a new company** by filling in the company name, the company owner and saving.
### User Management
Add or remove users by selecting / unselecting them in the dropdown menu in the Company's page.
When adding multiple users to a company, consider using the bulk user import feature available in the User Operations section for more efficient management.
Removing users from a company will immediately revoke their access to all company documents and workspaces. Ensure you have proper data backup procedures before removing users.
# Themes Management
Source: https://docs.lighton.ai/en/administration/organization-setup/themes-management
The Paradigm theme customization feature allows you to personalize the Paradigm interface by changing its colors and uploading your company's logo.
The Paradigm theme customization feature allows you to personalize the Paradigm interface by changing its colors and uploading your company's logo.
## Who Can Access Theme Management?
Only Admin and Company Admin roles have access to the admin panel to modify themes. Both roles have the same permissions, except that the Admin can define the default theme and manage every theme. This ensures that theme customization is securely managed by authorized personnel.
## Where to Access Theme Management?
You can access the theme management feature in the admin panel, under Settings > Visual Theme.
## How to Use Theme Management?
On the theme management page, you can define your brand assets and key interface colors.
Changes in Company Theme Configuration with Wise Wolf
**Placement in Paradigm Academy Navigation:** Administration > Organization Setup > Themes Management
**Summary:**\
The Wise Wolf release introduces significant changes to company theme configuration. These changes aim to simplify the visual theme model by removing unused color fields and adding a neutral color palette field aligned with Tailwind palettes. This article describes the technical changes, the reasons behind them, and how users can adapt their configuration.
#### **What Changed?**
1. **Removed 7 unused color fields** from the `VisualTheme` model:
* `primary_content`
* `secondary`
* `secondary_content`
* `homepage`
* `homepage_light`
* `light`
* `second_light`
These fields were not being used in the application, causing confusion and maintenance overhead.
2. \*\*Added the \*\*`neutral`**field** to support configurable neutral color palettes (slate, gray, zinc, neutral, stone).
### 1. Define Illustrations per Theme:
| **Field Name** | **Description/Constraints** | **Status** |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| **Logo login** | Logo displayed on the login page.
- Shape: Rounded or square.,
- Size: Approximately 80x80 pixels.
- Formats: JPEG and PNG. | FUNCTIONAL
Customize as needed. |
| **Logo header** | Logo displayed in the top navigation bar (visible on all primary pages)..
- Maximum height of 40 pixels.,
- Shape: Can accommodate a rectangular shape.,
- Aspect Ratio: Approximately 1:3 (width to height), ,
- Formats: JPEG and PNG. | FUNCTIONAL
Customize as needed. |
| **Icon** | Upload a default image because the field is required, but it will not be displayed. | OBSOLETE |
| **Favicon** | Icon displayed in the browser tab. | FUNCTIONAL
Customize as needed. |
#### 2. Choose Colors for Your Theme:
The color options available directly affect key elements of the interface:
| **Field Name** | **Description** | **Status** |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| **Primary** | The main background color of primary buttons (e.g., "New Chat" button, "Submit Query" button, "Save" button) and selected elements (e.g., the background color of the selected session link). | FUNCTIONAL
Customize as needed. |
| **Primary content** | The text color that appears on top of the elements defined by the Primary element. | FUNCTIONAL
Customize as needed. |
| **Secondary** | Enter a default value (e.g., `#FFFFFF`) as this field is still required by the system. | OBSOLETE |
| **Secondary content** | Enter a default value (e.g., `#FFFFFF`) as this field is still required by the system. | OBSOLETE |
| **Homepage** | Changes the background color of the left-hand navigation bar. | FUNCTIONAL
Customize as needed. |
| **Homepage light** | Enter a default value (e.g., `#FFFFFF`) as this field is still required by the system. | OBSOLETE |
| **Light** | Enter a default value (e.g., `#FFFFFF`) as this field is still required by the system. | OBSOLETE |
| **Second light** | Enter a default value (e.g., `#FFFFFF`) as this field is still required by the system. | OBSOLETE |
## Color Generator
Here is a tool you can use to help get the correct color values.
Edit any format to update the color
Click color swatches to copy HEX value
## Impact of Theme Management
Your custom theme will be applied to the entire interface, as well as automatic emails (such as user invitations and password reset emails). This ensures a consistent brand experience across all touchpoints.
## Limitations
The login page is not customizable and retains a default theme. This limitation ensures security and consistency in the initial user access interface.
# Adding new languages to Paradigm
Source: https://docs.lighton.ai/en/administration/system-configuration/adding-new-languages
This page allows for the creation of additionnal languages in Paradigm.
# How to Add New Languages to the Platform
## Prerequisites
To add new languages, you need one of the following roles:
* **System Administrator (SYS\_ADMIN)**
* **Account Manager (ACCOUNT\_MANAGER)**
* **Super Admin (SUPERADMIN)**
***
## Step-by-Step Guide
### 1. Access Django Admin
1. Navigate to the platform's admin panel
2. Log in with your admin credentials
### 2. Navigate to Languages
1. In the left sidebar, find the **"Translations"** section
2. Click on **"Languages"**
### 3. Add a New Language
1. Click the **"Add Language"** button in the top-right corner
2. Fill in the required fields:
**Language Code** (required)
* Enter the ISO 639-1 language code (2-3 letters) or chose it from the dropdown
* Examples: `es` (Spanish), `pt` (Portuguese), `it` (Italian), `zh` (Chinese)
* ⚠️ Must be unique - you cannot add the same code twice
**Name** (required)
* Enter the display name of the language
* Examples: `Spanish`, `Portuguese`, `Italian`, `Chinese`
* This is what users will see in the language selector
**Direction** (required)
* Select the text direction:
* **ltr** (left-to-right) - For most languages like English, Spanish, French
* **rtl** (right-to-left) - For Arabic, Hebrew, Persian, Urdu
**Is Active** (checkbox)
* ✅ **Checked** (default): Language appears in the platform
* ☐ **Unchecked**: Language is hidden from users (useful for testing)
3. Click **"Save"** or **"Save and add another"**
### 4. Verify the Language Appears
1. Navigate to your profile page
2. Go to the **Language** dropdown in your profile settings
3. Confirm the new language appears in the list
***
## What Happens Automatically
Once you save a new language, the following happens **automatically** without any code deployment:
✅ **Frontend:**
* Language appears in the profile page dropdown
* Text direction is automatically applied when the language is selected
✅ **Admin:**
* Language can be managed (edited/deleted) by authorized users
* All changes are immediately reflected
***
## Adding Translation Strings
After adding a language, you need to provide translations for the UI strings:
### Method 1: Django Admin
1. Go to **Translations** → **Translation Strings**
2. Click **"Add Translation String"**
3. Fill in:
* **Language**: Select your new language code
* **Key**: The translation key (e.g., `common.save`, `profile.language`)
* **Value**: The translated text
4. Click **"Save"**
### Method 2: Import/Export (Bulk Upload)
1. Go to **Translations** → **Translation Strings**
2. Click the **"Export"** button to download existing translations as a template
3. Add rows for your new language code
4. Click **"Import"** to upload the file
5. Format: CSV with columns `language`, `key`, `value`
***
## Managing Existing Languages
### Editing a Language
1. Go to **Translations** → **Languages**
2. Click on the language you want to edit
3. Make your changes
4. Click **"Save"**
Changes take effect immediately.
### Deactivating a Language
To temporarily hide a language without deleting it:
1. Go to **Translations** → **Languages**
2. Click on the language
3. **Uncheck** the "Is Active" checkbox
4. Click **"Save"**
The language will be hidden from users but translation strings remain in the database.
### Deleting a Language
1. Go to **Translations** → **Languages**
2. Select the language(s) to delete
3. Choose **"Delete selected languages"** from the Actions dropdown
4. Click **"Go"**
5. Confirm the deletion
# Config Keys
Source: https://docs.lighton.ai/en/administration/system-configuration/config-key
By utilizing these configuration key values, administrators can tailor the Paradigm instance.
The **Config Key (Settings) ‘admin/settings/’** section in Paradigm's admin panel allows **syst administrators** to modify parameters that impact all companies and users connected to the instance.
## **General**
### **DEFAULT\_LANGUAGE**
Specifies the default language for the system interface and communications.\
This affects:
* The language of the invitation emails sent to new users
* The password creation and login pages
* The entire Paradigm user interface\
\
**Default Value:** en
### **DEFAULT\_SUPPORT\_EMAIL**
Defines the **instance-level default support email address**.\
This email is **automatically pre-filled** when a new company is created (in the admin **Chat settings**).
**Properties**
* **Default value:** `support@lighton.ai`
* **Required:** Yes
* **Overridable:** Yes, at **company level** by a company admin
**How it works**
1. A system admin sets the support email in the instance configuration.\
→ This value becomes the default support email.
2. Whenever a new company is created, this email is pre-filled in the Company admin page.
3. When is it used?\
When a user clicks “Flag a bug” in the chat UI, the full bug report (context + details) is sent to the email defined in Chat settings.
4. Company override (confidentiality use case)\
If a customer does not want bug reports to be sent to LightOn, a company admin can override the support email for their company.\
→ In that case, bug reports are sent to the company-defined email instead of LightOn’s support address.
### **SUPPORT\_URL**
Specifies the URL where users can access help articles, tutorials, and documentation.
**Default Value:**[ ](https://paradigm-academy.document360.io/)[https://lighton.mintlify.app/en](https://lighton.mintlify.app/en)
🧭 **Note:** This support portal is powered by **Mintlify**, which provides a seamless documentation and onboarding experience.\
You can **replace or remove** this integration at any time through this configuration page if your organization uses another documentation platform. By default, Mintlify adheres to industry-standard compliance regulations, ensuring data security and privacy for your documentation.
### **LOG\_RETENTION\_PERIOD\_DAYS**
Determines the number of days log data is retained before being anonymized to comply with data retention policies.
**Default Value:** 180
### **THEME**
Defines the current theme or branding for the system interface.\
Affects colors, fonts, and general visual presentation.
**Default Value:** Paradigm New Branding
## **Agent**
IS\_AGENT\_ON
Enables or disables the agentic mode functionality at the instance level. When enabled, the model can execute multiple sequential requests across different tools to accomplish complex tasks, rather than being limited to a single tool call per interaction.
Default Value: True
🧭 Note: Activating this configuration key makes the agent mode available at the instance level. Once enabled, you must navigate to the chat settings of your choice to activate agent mode for a specific company.
## **API**
### **DEFAULT\_API\_KEY\_DURATION**
Sets the default expiration duration for API keys created via the Paradigm interface.
**Default Value:** 180 days
### **HEALTHCHECK\_ALERTING\_COOLDOWN**
Defines the minimum interval between two health check alerts to prevent alert fatigue.
**Default Value:** 240 days
### **HEALTHCHECK\_ALERTING\_EMAIL**
Specifies the email address receiving health check failure notifications.
### **IS\_API\_ON**
Indicates whether the API functionality is enabled for programmatic access.
**Default Value:** Yes
***
## **Authentication**
### **ACCESS\_GRANT\_DURATION\_HOURS**
Specifies the validity period for temporary debug access to anonymized data.
**Default Value:** 336 hours
### **DEFAULT\_SSO\_PERMISSIONS\_FOR\_COMPANY\_ADMINS**
Determines whether company admins can configure their own SSO by default.
**Default Value:** False
### **IS\_SSO\_ON**
Enables or disables Single Sign-On (SSO) at the instance level.
**Default Value:** False
### **SCIM\_INSTANCE\_ACTIVATION**
Toggles the System for Cross-domain Identity Management (SCIM) feature.
**Default Value:** False
### **SESSION\_IDLE\_TIMEOUT**
Defines the inactivity duration (in seconds) before automatic logout.
**Default Value:** 1440 seconds
***
## **Chat**
### **DOCANALYSIS\_V2\_BATCH\_SIZE**
Defines how many documents are processed per batch for DocAnalysis.
**Default Value:** 5
### **DOCANALYSIS\_V2\_STRATEGY**
Sets the processing strategy for document analysis (speed vs. accuracy).
**Default Value:** large\
**Before Sunny Seal release:** small
### **DOCANALYSIS\_V2\_VERBOSE\_IN\_TOOL\_CALL\_ADMIN**
Enables detailed logging for DocAnalysis in the admin dashboard.
**Default Value:** False
### **DOCANALYSIS\_V2\_VISUAL\_ON**
Enables or disables Visual Language Model (VLM) completions in DocAnalysis.
**Default Value:** False
### IS\_CHAT\_RESPONSE\_SHARING\_ON
Enables or disables the chat response sharing functionality at the instance level. When enabled, users can share AI-generated responses through sharing icons displayed in the chat interface. This feature is useful for collaboration, knowledge sharing, and highlighting valuable insights within organizations.
Default Value: True
🧭 **Note**: Activating this configuration key makes the response sharing feature available at the instance level. Once enabled, you must navigate to the chat settings of your choice to activate response sharing for a specific company.
⚠️ **Privacy Consideration**: Shared responses may contain sensitive information. Ensure your organization has appropriate policies in place regarding what content can be shared externally or within teams.
### IS\_EPHEMERAL\_MODE\_ON
Enables or disables ephemeral mode functionality globally. Ephemeral mode allows users to create private chat sessions that are not recorded in conversation history and are automatically deleted 10 minutes after creation, ensuring confidentiality and privacy for sensitive use cases within organizations.
Default Value: True
🧭 **Note**: Activating this configuration key makes ephemeral mode available at the instance level. Once enabled, you must navigate to the chat settings of your choice to activate ephemeral mode for a specific company.
### **IS\_KG\_DOCUMENT\_TAGGING\_ON**
Toggles automatic Knowledge Graph tagging during document ingestion.
**Default Value:** False
### **IS\_KG\_QUERY\_SUGGESTION\_ON**
Enables suggested queries based on the Knowledge Graph.
**Default Value:** False
### **IS\_KG\_TOOL\_ROUTING\_ON**
Activates keyword-based tool routing to improve tool usage efficiency.
**Default Value:** False
### **IS\_MODELS\_CHOICE\_ON**
Allows users to select different models for processing.
**Default Value:** No
### **KG\_SUMMARY\_LANGUAGES**
Specifies available languages for Knowledge Graph summaries.
**Default Value:** en
***
## **Data**
### **LOG\_RETENTION\_PERIOD\_DAYS**
Determines the number of days that system log data is retained before being automatically anonymized to comply with data retention and privacy policies. This ensures that user activity logs and system events are managed in accordance with data protection regulations such as GDPR.
Default Value: 180 days
🧭 **Note**: After the specified retention period, logs are anonymized rather than deleted, allowing continued system monitoring and troubleshooting while protecting user privacy. Organizations with specific compliance requirements may need to adjust this value based on their regulatory obligations.
## Datasources
### **DATASOURCES\_DOWNLOAD\_LIMIT**
Maximum number of data sources imported in parallel.
**Default Value:** 10 documents
### **DATASOURCES\_MAX\_DOC\_PER\_IMPORT**
Maximum number of documents imported in one batch.
**Default Value:** 500
### **DATASOURCES\_MAX\_DOCS\_PER\_PAGE**
Maximum number of files downloaded per page during scraping.
**Default Value:** 100
### **DATASOURCES\_MAX\_PAGES\_PER\_SCRAPE**
Maximum number of pages crawled in one scraping session.
**Default Value:** 750
### **DATASOURCES\_MAX\_RETRIES**
Maximum number of retries for failed imports.
**Default Value:** 5
### **DATASOURCES\_SUCCESS\_RATE\_THRESHOLD**
Defines the threshold for considering an import successful.
**Default Value:** 0.5
### **DATASOURCES\_UPLOAD\_SESSION\_LIMIT**
Maximum number of data sources uploaded in parallel.
**Default Value:** 10
***
## **Documents**
### **AUDIO\_INGESTION\_URL**
URL to the audio ingestion service.
### **IS\_DOC2QUERY\_ON**
Toggles the doc2query feature for query expansion.
**Default Value:** False
### **IS\_OFFLINE\_INGESTION\_ON**
Activates offline ingestion and tasks system, needed for document visual analysis and long-running processing during ingestion.\
🧭 **Note:** This will unlock two addtionnal actions for Instance DPOs and Company DPOs in the admin's Document Page :
* Run text pipeline : on documents **with a status other than embeded** : retriger parsing and embedding with the current default parsing and embeddings configuration
* Run vision pipeline : on documents \*\*with a vision status other than embeded \*\*: retriger vision parsing and embedding with the current vision pipeline configuration
**Default Value:** True
### **IS\_VISUAL\_INGESTION\_ON**
Activates the processing of visual elements during document ingestion.
**Default Value:** True
### **MAX\_DOCS\_LIBRARY\_SIZE**
Maximum number of documents stored in the library.
**Default Value:** 1000
### **MAX\_DOCUMENT\_SIZE**
Maximum allowed size per document.
**Default Value:** 100 MB
### **STORAGE\_LIMIT\_COMPANY / CUSTOM / PERSONAL / RANGE**
Defines storage limits (in MB or number of documents) per company, user, or data type.
**Default Values:**
* Company: 102400 MB
* Custom: 10240 MB
* Personal: 10240 MB
* Range: 1–10000000 documents
### **UPLOAD\_SESSION\_MAX\_CONCURRENT\_UPLOADS**
Maximum concurrent uploads per session.
**Default Value:** 20
### **UPLOAD\_SESSION\_QUEUE\_COOLDOWN\_PERIOD**
Cooldown time (in minutes) between queue checks during uploads.
### **UPLOAD\_SESSION\_QUEUE\_MAX\_PARALLEL\_PROCESSING\_DOCS**
Maximum number of documents processed simultaneously in an upload session.
**Default Value:** 10
***
## **Pipeline**
### **DEFAULT\_PIPELINE**
Specifies the default document ingestion pipeline version.
\*\*Default Value:\*\*v2.1.1
### DEFAULT\_PARSER\_MODEL
Default vision model used for parsing when vision parsing is active (2.2.x parsers).
Must be a valid parser model technical name, the VLM must have been declared with the parser attribute set to true to be selectable.
\*\*Default Value:\*\* LightOnOCR
### VLM\_SLIDING\_WINDOW\_SIZE
Vision parsing parameter : Maximum number of pages per document that can be sent and kept active in the parsing queue simultaneously (sliding window).
\*\*Default Value:\*\* 25
### EMBEDDING\_MODEL\_MIGRATION\_IN\_PROGRESS
Indicates whether an embedding model migration is currently in progress. When enabled, the system is actively migrating document embeddings to a new model version, which may temporarily affect search performance and document processing capabilities. During migration, users can continue to use the platform, but some RAG and search functionalities may experience reduced performance.
Default Value: False
🧭 **Note**: This parameter is typically managed by LightOn administrators during platform upgrades. When a migration is active, avoid uploading large volumes of documents or performing intensive search operations. Users will be notified when the migration is complete and full performance is restored.
⚠️ **Warning**: Do not manually enable this flag unless instructed by LightOn support, as it is automatically managed during embedding model updates.
## Custom Script
Allows administrators to add or replace custom scripts in the HTML content of the Paradigm instance.\
By default, this functionality integrates **Product Fruits**, a user onboarding and engagement platform.
### Description
By default, LightOn includes **Product Fruits**, that:
* Provides **interactive onboarding** for new users
* **Notifies users** about **new releases** or **maintenance periods**
* Offers **contextual help** to guide users during their first steps
* Performs **anonymous usage tracking** to improve user experience and platform performance
Product Fruits is **100% compliant** with industry data protection standards.\
It can be **customized with your organization’s branding**, and you will have access to an **admin account** to manage the onboarding flows and in-app communications.
> 💡 **Recommendation:** We strongly recommend keeping the default Product Fruits integration to support continuous platform improvement and user enablement.
**Default Value:** `Enabled (Paradigm instance key)`
> 🧭 You can **disable or replace** this script at any time via the **Config Keys** page if your organization uses a different onboarding or analytics tool.
***
***
# Legal Documents
Source: https://docs.lighton.ai/en/administration/system-configuration/legal-documents
This page is designed to help you understand the importance and functionality of managing legal links within Paradigm.
This page is designed to help you understand the importance and functionality of managing legal links within Paradigm.
## Why is Access to Terms and Conditions and Privacy Policy Important?
Legal compliance is a critical aspect of using any digital platform. It is essential that users have access to the Terms and Conditions and Privacy Policy of an application to understand their rights and obligations. On the Paradigm platform, users must accept these legal documents to gain access. This ensures that all interactions on the platform are governed by clear rules and regulations.
## Customizing Legal Documents
How Can a Super Admin Customize Terms and Conditions and Privacy Policy?
Super admins have the ability to customize the links to the Terms and Conditions and Privacy Policy through the administration interface.
Here's how it works:
1. **Navigate to Settings**: Log in to the admin interface and go to the 'Settings' section.
2. **Access Legal Document Page**: Within 'Settings', find the 'Legal Document' page.
3. **Customize Links or Upload PDF**: By default, Paradigm redirects to URLs managed by LightOn. However, super admins can personalize these links or upload a custom PDF document.
This customization allows organizations to ensure that users are agreeing to documents that are specific to their operational and legal requirements.
# Automated retention of logs and response data
Source: https://docs.lighton.ai/en/administration/system-configuration/log-retention-system
The log retention system ensures that audit logs are automatically anonymized after the configured retention period, helping maintain GDPR compliance while preserving essential historical records.
## **Who Can Manage It**
Only syst. admins can configure and adjust the data retention period through configuration keys (`/admin/settings/configkeyvalue/` URL of your instance) . Regular admins or end-users have no access to this setting.
## **What It Applies To**
The configuration key `LOG_RETENTION_PERIOD_DAYS` defines how long **audit logs (LogEntry objects)** are kept in their original, identifiable form before being anonymized.
✔️ **Impacted data:**
* **Audit logs** that may contain personal information (e.g. user identifiers, metadata linked to actions in the system).
❌ **Not impacted:**
* ML logs (requests, completions, responses)
* Pipeline events
* Task results
* User chat history or conversations
Those elements are **not deleted or anonymized** by this configuration.
## **How It Works**
1. **Default Retention**:
* By default, `LOG_RETENTION_PERIOD_DAYS` is set to **180 days**.
* After this period, audit log entries are anonymized.
2. **Anonymization Process**:
* A scheduled daily job (`schedule_all_companies_anonymization`) runs across all companies.
* It triggers the `anonymize_company_logs_task()`.
* This calls the `CompanyDataLogAnonymizationService`, which anonymizes old `LogEntry` objects.
* The event record is kept, but personal data is replaced with anonymous values.
3. **Important Note**:
* **No data is deleted.**
* The database size does not decrease, since anonymization only replaces values without removing rows.
* The benefit is **compliance with data protection regulations (e.g. GDPR)**, not storage optimization.
## **Version Information**
* The anonymization mechanism has been present in the system for several releases.
* In the **Rapid Rabbit** release, related fixes improved the overall reliability of scheduled tasks, ensuring anonymization runs consistently.
# Managing Models in Paradigm's Admin Panel
Source: https://docs.lighton.ai/en/administration/system-configuration/managing-models
The Models section in Paradigm allows you to integrate any model into the platform, enabling users to interact with them.
You have the flexibility to configure open-source models hosted by yourself or a provider, or to use paid models accessible via API.
Model configuration affects all users in your organization. Choose models that balance performance requirements with cost considerations and compliance needs.
## Viewing the List of Models
The list of models displays the following information:
* **Name**: The public name displayed in Paradigm for users.
* **Model Type**: You can integrate Vision (VLMs) or Large Language Models (LLMs). They will be used qt different stages of interaction with the platform (answer generation, agentic reasoning, query rewriting, offline enrichment tasks etc.).
You can also declare embedding models. Embedding models are used to convert text into numerical representations to understand semantic similarity.
You can declare them and call them through the API to get your own embeddings, but the ones that will be used during ingestion and querying within our pipelines will remain the ones we provide with Paradigm.
* **Deployment Type**: Indicates where the model is deployed (e.g., Sagemaker, OpenAI, or Self-hosted).
* **Enabled**: Shows whether the model is available for users through the interface or API (green = accessible, red = not accessible).
## Viewing Model Details
By clicking on the model's name, you can view or modify its details:
* **Name**: The public name of the model displayed in the Paradigm interface for end users (this field can be edited).
* **Technical Name**: A technical identifier used by various APIs (this field should not be modified).
Changing the Technical Name can break existing API integrations and cause service disruptions. Only modify this field if you fully understand the consequences.
* **Model Type**: You can integrate VLMs, LLMs or embedding models.
* **Deployment Type**: The model's deployment type (e.g. OpenAI, Self-hosted).
* **LoRA Model Name**: Specify the name if you are using a LoRA (Low-Rank Adapter) model, a specific fine-tuning technique. We recommend using [vLLM](https://docs.vllm.ai/en/latest/) to serve your models. If you've fine-tuned a model with LoRA (a specific finetuning technique) and want to use it in Paradigm, we suggest deploying it using vLLM and providing the Lora Model Name that matches the --lora-modules flag you used when starting the vLLM server.
* **Model URL**: Used when your model is self-hosted. Think of it like a virtual address where your model is being served. For example, let's say you want to deploy a model called Llama-405 on a machine with the IP address 123.150.117.199. In this case, the Model URL would be [http://123.150.117.199](http://123.150.117.199). You can also map this IP address to a domain name like [https://llama-405b.lighton.ai](https://llama-405b.lighton.ai) for easier access.
* **Start Message Template**: This field defines a list of messages added at the beginning of a conversation with the model to customize interaction. It follows the Jinja templating style and allows for conditional operations and the use of variables. Available variables include:
* `{{ date }}`: The current date.
* `{{ company_instructions }}`: Instructions from the chat settings.
* `{{ user_instructions }}`: Instructions set by the user.
* `{{ user_first_name }}`: The user's first name.
* `{{ user_last_name }}`: The user's last name.
* Only these variables are available for now; using any other will result in an error when setting the start\_messages\_template field.
* **Instruction**: Describes how the final model is going to be called.
* i.e. for rewriter: "rephrase this question "
* for gen model: "answer this according to this "
## Using a Custom Model
In Paradigm, you can deploy and expose custom models tailored to specific needs and benefit from Paradigm's API and chat interface.
For deploying custom models, we recommend using the [vLLM library](https://docs.vllm.ai/en/latest/index.html). vLLM is designed for efficient model deployment and can significantly optimize the performance of your custom models. It supports a variety of model types and deployment scenarios, making it a versatile choice for integrating custom models into Paradigm.
vLLM offers significant performance improvements over standard model serving solutions, especially for high-throughput scenarios. Consider using it for production deployments to optimize resource usage and response times.
To link your custom models to the Paradigm admin interface, follow these steps:
1. Go to the admin interface, and click the `API > Models` section on the left.
2. Click on "Add +" and provide the necessary details: public name, model type, and deployment type of your model.
3. Specify the URL for self-hosted models, ensuring that the URL points to the service serving the model.
4. *(Optional)* Customize the model instructions to define how the model should be called, for example, "Rephrase this question " for a rewriter or "Answer this according to this " for a generative model.
5. Ensure that the `is_models_choice_on` key is enabled in the `Settings > Config Keys` section in the admin. This is essential for the model to be recognized and integrated properly.
Test your custom model configuration in a development environment before deploying to production. This helps identify potential issues without affecting your users.
Once your custom models are set up, navigate to the chat interface and select the custom models from the available options, or send requests to the model through API. By following these steps, you can effectively integrate and use custom models within Paradigm, enhancing the platform's capabilities to meet your specific needs.
# Tool Management
Source: https://docs.lighton.ai/en/administration/system-configuration/tools
This page allows System Administrators to configure the agent’s functional capabilities at the global instance level. Tools are the functions the AI model can call to answer user requests (e.g., searching the web, analyzing a document, executing code). This section focuses on Native Tools, developed by LightOn and integrated by default into Paradigm.
## **1. Overview and Tool List**
The main **“Tools”** page displays the full inventory of available capabilities on your instance.
### **List organization**
Tools are grouped by origin:
* **Global / Native Tools:** The 8 core tools provided by LightOn (e.g., `code_execution`, `web_search`, `document_search`)
* **MCP Tools:** Tools connected via external **MCP (Model Context Protocol)** servers (e.g., Zendesk connectors, Mail, etc.)
### **Quick indicators**
For each tool, two key columns indicate its status:
* **Included in routing:** (Green check) Indicates whether the agent is allowed to choose this tool on its own
* **User selectable:** (Green check) Indicates whether the end user can manually force the use of this tool in the chat interface
### **Filters**
A right-side panel allows you to filter the list by name, by company, or by properties (e.g., show only tools marked as **“Included in routing”**).
## **2. Configuring a Native Tool**
By clicking on a tool name (e.g., `document_search`), you access its detailed configuration. These settings define how and when the tool can be used.
### **A. Basic settings and constraints**
* **Require document:** Defines whether the tool requires a document to be uploaded by the user in order to work (e.g., `True` for document analysis)
* **Accepted file types:** Lists the file extensions supported by this tool (e.g., `pdf`, `ppt`, `docx`, `md`, `jp`)
### **B. Activation rules (Routing & Selection)**
Three checkboxes determine the tool’s accessibility:
* **Included in routing:** If checked, the model (“the brain”) can autonomously decide to use this tool to answer a question
* **User selectable:** If checked, the tool will appear in the user interface, allowing the user to explicitly select it
* **Enabled by default:** If checked, the tool will be enabled by default in new chat settings (**Chat Settings**)
### **C. Sequencing policy (Policy)**
This advanced section controls tool chaining (“What is the agent allowed to do after using this tool?”):
* **Allowed Tools:** Whitelist of tools allowed to run after this one
* **Disallowed Tools:** Blacklist of tools forbidden after this one
* **Should Exit Reasoning:** Forces the agent to stop reasoning and generate a final response after running this tool
## **3. List of Standard Native Tools**
Here are the main native tools you can administer:
| Tool | Description |
| :--------------------------- | :-------------------------------------------------------------------------------------- |
| **web\_search** | Allows the agent to search for real-time information on the Internet. |
| **document\_search** | Semantic search within documents uploaded by the user. |
| **document\_analysis** | In-depth analysis and full reading of files. |
| **code\_execution** | Generates and executes code (often Python) for complex calculations or data processing. |
| **adaptive\_clarification** | Allows the agent to ask the user questions to clarify an unclear request. |
| **in\_context** | Uses the immediate context of the conversation. |
| **vision\_document\_search** | Specialized search for documents containing images or visual elements. |
### **Admin note**
Changes made here (especially **“Enabled by default”**) affect the baseline configuration of all new conversations, or the default **Chat Settings** for companies within the instance.
# Translation Strings
Source: https://docs.lighton.ai/en/administration/system-configuration/translation-strings
This page allows administrators to manage and customize all interface content translations. These settings apply at the tenant level — all companies associated with a tenant share the same translation strings. LightOn updates the default translation strings with every Paradigm release.
**Supported languages** Paradigm natively supports four languages out of the box: English (`en`), French (`fr`), German (`de`), and Arabic (`ar`).
**Permissions** Only users with the **System Admin** or **Account Manager** role can create, edit, or import translation strings.
***
**Initializing the interface**
When accessing Paradigm for the first time without prior configuration, menu items will display as raw keys (e.g., `login.login`, `login.title`). To initialize your instance:
1. Go to **Paradigm Admin** and log in with administrator credentials.
2. In the left sidebar, select **Translation Strings** under *Translations*.
3. Click **Import** (top right), select `CSV` format, and import the translation file provided by your CSM.
***
**Modifying a single translation string**
1. Use the search field to find the target label.
2. Edit the value directly.
3. Save your changes.
***
**Bulk modification via export/import**
1. Click **Export** to download all existing translation strings. The export includes strings with empty values, which helps identify missing translations.
2. Edit entries in the `value` column of the exported file.
3. Re-import the updated file via the **Import** button.
***
**Adding a new language**
To add a language not included by default:
1. Go to `Admin > Translations > Languages` (`/admin/translations/language/`).
2. Create the new language entry.
3. Add translation strings for that language either via the admin interface or via bulk import.
# Tracking User Legal Acceptance
Source: https://docs.lighton.ai/en/administration/system-configuration/user-legal-acceptance
How to See Which Users Accepted the Terms and Conditions
How to See Which Users Accepted the Terms and Conditions
To maintain a record of who has accepted the Terms and Conditions, admins can:
Go to **User Legal Acceptance**: This page lists all users who have accepted the Terms and Conditions. By clicking on a user's name, you can see the exact date they accepted.
**Revoke and Reaccept**: If an acceptance record is deleted for a user, they will be required to accept the Terms and Conditions again upon their next login.
**Important Note:**
Whenever a new file or link is added to the Terms and Conditions by an admin, all users will be required to revalidate the Terms and Conditions upon their next login to the interface. This ensures that all users are aware of and agree to any changes made to the legal documents.
## User Experience
**Initial Acceptance**: Upon their first login, users must accept the Terms and Conditions to access the platform. During this process, users can click on a dedicated link to review the Terms and Conditions.
**Ongoing Access**: After initial acceptance, users can always find links to the Terms and Conditions and Privacy Policy in the footer of all pages on the platform.
# Agents
Source: https://docs.lighton.ai/en/developer-resources/agents-and-threads/agents
Perform task efficiently by using and creating specialized agents
Agents are available for the **Wise Wolf** release (February 2026) and later, if you are on **Unique Urchin** (December 2025) or **Victorious Vicuna** (January 2026), please refer to [the legacy agentic threads documentation](/en/developer-resources/chat-and-ai-models/agent-api).
## Motivation
Agents are the evolution of the legacy ChatSettings system, there can be several within the same company and allows you to create and use a specialized prompt as wess as set of tools, MCP servers and scoped workspaces to achieve a specific task.
The agents are linked to [Groups](/en/administration/iam/group-management/understanding-groups) which controls who can access them and which workspaces can be accessed with them.
## Quickstart
Create an agent using the [POST /api/v3/agents](/api-reference-v3/agents/create-a-new-agent) endpoint. The `ownership` field determines who can access the agent:
```python theme={null}
import os
import requests
api_key = os.getenv("PARADIGM_API_KEY")
base_url = os.getenv("PARADIGM_BASE_URL", "https://paradigm.lighton.ai/api/v3")
response = requests.post(
f"{base_url}/agents",
headers={"Authorization": f"Bearer {api_key}"},
json={
"name": "My HR Agent",
"company_id": 123,
"ownership": "team", # "personal" | "company" | "team"
"group_id": 456, # required only when ownership is "team"
"description": "An agent that processes HR documents",
"instructions": "Transform the user input into a specific query, perform a document search and display relevant data to the user",
"native_tool_ids": ["4b247d97-2d87-4181-9590-c6aaea2785aa"],
"mcp_server_ids": ["5af81947-271b-4611-a8de-9b064ddc95bd"],
"scoped_workspace_ids": [789, 790] # optional: restrict to specific workspaces
}
).json()
```
You can list native tools available within your company using [GET /api/v3/tools](/api-reference-v3/tools/list-native-tools) and the MCP servers available within you company using [GET /api/v3/mcp](/api-reference-v3/mcp/list-mcp-servers) endpoint.
Now your agent is created and you can use it with the [Threads API](/en/developer-resources/agents-and-threads/threads).
## Default agent
Every company has a default agent linked to the company's default **company-wide group** of which every company's users are member of. When using the [Threads API](/en/developer-resources/agents-and-threads/threads), if you don't specify an `agent_id` field, the default agent will be used implicitely.
## Agent ownership
The `ownership` field controls who can access an agent. It is set at creation and **cannot be changed** afterwards.
| `ownership` | Who can access it | `group_id` required? |
| ------------ | ----------------------------- | -------------------- |
| `"personal"` | The creator only | No |
| `"company"` | All users in the organization | No |
| `"team"` | Members of the specified team | Yes |
Only **Company Admin** and **System Admin** can create agents with `ownership` set to `"company"` or `"team"`. Regular users can only create `"personal"` agents.
The `ownership` field and `scoped_workspace_ids` are available from **Xenial Xerus** (March 2026). On earlier versions, use `group_id` with `scope_workspaces_by_group` — refer to the [legacy workspace scoping behavior](#workspace-scoping) below.
## Access control
Agents can only be viewed and used by users who have access through the agent's ownership:
* `"personal"`: only the creator.
* `"company"`: all users in the company.
* `"team"`: members of the team specified by `group_id`.
## Workspace scoping
By default, an agent accesses **all workspaces belonging to its team**. You can restrict this to a specific subset using the `scoped_workspace_ids` field (a list of workspace IDs) when creating or updating an agent.
| | No restriction (default) | `scoped_workspace_ids` set |
| -------------------- | ----------------------------- | ------------------------------- |
| **Workspaces** | All group workspaces | Only the listed workspaces |
| **Files** | All files in group workspaces | Only files in listed workspaces |
| **Tags** | All tags in group workspaces | Only tags in listed workspaces |
| **Varies per user?** | No | No |
When `scoped_workspace_ids` is set, the restriction applies regardless of which user calls the agent. You can retrieve the effective workspace list for an agent using [GET /api/v3/agents/:id](/api-reference-v3/agents/retrieve-a-single-agent) and inspecting the `workspaces` field.
When [scoping a thread turn on specific files, workspaces or tags](/en/developer-resources/agents-and-threads/threads#scoping-by-file-workspaces-or-tags), you are only permitted to reference resources that fall within the agent's effective workspace scope:
* **workspaces**: list available ones via [GET /api/v3/agents/:id](/api-reference-v3/agents/retrieve-a-single-agent)
* **files**: list available ones via [GET /api/v3/agents/:id/files](/api-reference-v3/agents/list-files-scoped-to-an-agent)
* **tags**: list available ones via [GET /api/v3/agents/:id/tags](/api-reference-v3/agents/list-tags-used-in-workspaces-for-an-agent)
**Before Xenial Xerus (March 2026)**: The `ownership` field and `scoped_workspace_ids` do not exist. Use `group_id` to associate an agent with a team and `scope_workspaces_by_group` (boolean, default `true`) to control workspace access. When `true`, the agent accesses only the team's workspaces; when `false`, it accesses all workspaces the requesting user has access to. `scope_workspaces_by_group` is still accepted in Xenial Xerus and later for backwards compatibility but is deprecated.
# Threads
Source: https://docs.lighton.ai/en/developer-resources/agents-and-threads/threads
Perform agentic tasks using the threads system
This documentation is for **Wise Wolf** release (February 2026) and later.
If you are on **Unique Urchin** (December 2025) or **Victorious Vicuna** (January 2026), please refer to [the legacy agentic threads documentation](/en/developer-resources/chat-and-ai-models/agent-api).
## Motivation
The Thread API, allows you to engage in conversations leveraging multi-tool reasoning capabilities and using specialized [agents](/en/developer-resources/agents-and-threads/agents). It is the recommended way to interact with Paradigm tools.
## Terminology
### Turn
A single interaction between a user and the model, comprising a user query, multi-steps reasoning, tool calls and the model's final answer.
### Thread
A conversation comprising a sequence of turns.
### Parts
A component of the conversation turn's answer, it can be of type `reasoning`, `tool_call` or `text` (final answer to the user).
The parts in an agent message within a turn are structured in the following sequence:
* a `reasoning` part explaining the reasoning about wether the agent will choose tyo use a tool or return the final answer.
* a `tool_call` part containing information about the tool called as well as the tool's raw result.
* repeat the 2 first steps until the agent choose to return the final answer or the reasoning budget is reached.
* a `text` part containing the final answer.
### Message
A set of parts corresponding to, within a turn, either the agent answer or the user query. A **turn is thus primarily composed of a list of 2 messages**: the user query and the agent answer.
### Source
A source used by a tool to generate the turn's final answer, it can either of type `web` or `document`.
### Artifact
A file generated by a tool, attached to a turn.
## Quickstart
You can initialize a new conversation thread using the [POST /api/v3/threads/turns](/api-reference-v3/threads/create-a-conversation-thread-with-initial-turn) endpoint.
The payload field `chat_setting_id` has been deprecated and now the use of `agent_id` is preffered, for back compatibility issues `chat_setting_id` is still supported. Note that if you specify both `agent_id` and `chat_setting_id`, the `agent_id` field will take precedence.
```py theme={null}
import os
import requests
# Get API key from environment
api_key = os.getenv("PARADIGM_API_KEY")
# Get base URL from environment (defaults to public instance)
base_url = os.getenv("PARADIGM_BASE_URL", "https://paradigm.lighton.ai/api/v3")
response = requests.post(
f"{base_url}/threads/turns",
headers={"Authorization": f"Bearer {api_key}"},
json={
"agent_id": 1,
"query": "What is the capital of France?"
}
).json()
```
While specifying:
* `agent_id` (*optional*): the ID of the [Agent](/en/developer-resources/agents-and-threads/agents) to use to perform this query, if left blank, your company's default agent will be used. You can list the available agents using the \[GET /api/v3/agents]\([api-reference-v3/threads/](/api-reference-v3/agents/list-all-agents) endpoint.
* `query`: the user query.
```json theme={null}
{
"id": "9339cf12-8530-421d-8dda-79cd3016a182",
"object": "turn",
"thread": "783b089b-0ecc-496b-b0c3-70d0f327d9b8",
"status": "completed",
"messages": [
{
"id": "2951681d-9477-4e8d-889b-0f63bef890f6",
"object": "message",
"role": "user",
"parts": [
{
"type": "text",
"text": "What is the capital of France?"
}
],
"created_at": "2025-12-16T16:01:53.806331Z"
},
{
"id": "5ec22b40-ba6c-40ab-b94d-97fc05d5c142",
"object": "message",
"role": "assistant",
"parts": [
{
"type": "reasoning",
"reasoning": "Basic factual question - no tools needed."
},
{
"type": "text",
"text": "La capitale de la France est Paris."
}
],
"created_at": "2025-12-16T16:01:56.210968Z"
}
],
"created_at": "2025-12-16T16:01:53.804779Z"
}
```
In this case the agent answer on this turn is made of of two parts:
* a **reasoning** part explaining the reasoning behind the answer.
* a **text** part containing the final answer.
Note that **the last part of the agent answer is always of type `text` and consitute the final answer**
and that **the agent answer is always the second and last message**.
If the turn takes too long to generate you will receive an **HTTP 202** response with the created
**thread ID** (`tread`) and the **turn ID** (`turn_id`) in the payload. You can then use the [GET /api/v3/threads/:id/turns/:turn\_id](/api-reference-v3/threads/retrieve-a-conversation-thread) endpoint
to poll for the `status` until it is in state `completed` and then retrieve the final answer.
Alternatively you can skip the waiting and use [Background Mode](#background-mode) to generate the turn in the background.
You can access the agent final answer like this:
```py theme={null}
# Minimal structure example to illustrate access pattern
response = {
"messages": [
{"parts": []},
{"parts": [{"type": "text", "text": "Paris"}]}
]
}
answer: str = response["messages"][-1]["parts"][-1]["text"]
```
You can also retrieve the `thread_id` like this:
```py theme={null}
response = {"thread": "783b089b-0ecc-496b-b0c3-70d0f327d9b8"}
thread_id: str = response["thread"]
```
And then you can follow-up on the same conversations using the [POST /api/v3/threads/:id/turns](/api-reference-v3/threads/create-a-conversation-turn-in-a-thread) endpoint
to create a new conversation turn.
## Recipes
For the following recipes, you can either use:
* the [POST /api/v3/threads/turns](/api-reference-v3/threads/create-a-conversation-thread-with-initial-turn) endpoint to create a turn a new conversation thread.
* the [POST /api/v3/threads/:id/turns](/api-reference-v3/threads/create-a-conversation-turn-in-a-thread) endpoint to create a turn in an existing conversation thread, thus benefiting from the context already there if needed.
While the [POST /api/v3/threads/turns](/api-reference-v3/threads/create-a-conversation-thread-with-initial-turn) endpoint provides a shortcut to directly create a thread with a turn, **it does not support streaming mode**, if you want to use streaming then create a thread using the [POST /api/v3/threads](/api-reference-v3/threads/create-a-conversation-thread) endpoint and then create a turn in this thread using the [POST /api/v3/threads/:id/turns](/api-reference-v3/threads/create-a-conversation-turn-in-a-thread) while specifying `stream=true`.
In those examples we will use the method involving using a new thread, but both endpoints take the same payload and return the same response schema.
It will also be assumed that you parse the API response into a Python dictionary, like done in the [Quickstart](#quickstart) section.
For single call usage in workflows it is recommented to use the first endpoint, creating a fresh thread per turn.
### Scoping by file, workspaces or tags
You can scope a query within a list of **Worspkaces** and/or **Tags** or **Files** (documents) using the `workspace_ids`, `tag_ids` or `file_ids` parameters in the payload. For instance, using the [POST /api/v3/threads/turns](/api-reference-v3/threads/create-a-conversation-thread-with-initial-turn) endpoint for scoping for files within workspaces of id `1` **or** `2` **and** that are attached to tags of id `4` **or** `5`:
```json theme={null}
{
"agent_id": 1,
"query": "What is the conclusion of the last quaterly meeting note?",
"workspace_ids": [1, 2],
"tag_ids": [4, 5],
}
```
Same here for scoping a query to files of id `8` and `9`:
```json theme={null}
{
"agent_id": 1,
"query": "What is the conclusion of the last quaterly meeting note?",
"file_ids": [8, 9],
}
```
While you can mix `workspace_ids` and `tag_ids`, you **cannot mix either of these with** `file_ids`.
The `agent_id` field is optional, if omitted the default agent of your company will be used. You can list available [agents](/en/developer-resources/agents-and-threads/agents) using the [GET /api/v3/agents](/api-reference-v3/agents/list-all-agents) endpoint.
It is recommended to not force a tool when scoping, as the automatic routing will ensure the optimal tool for
your type of file(s) is used.
* You can retrieve the list of **workspaces** available for you when using a specific agent by calling the [GET /api/v3/agents/:id](http://localhost:3001/api-reference-v3/agents/retrieve-a-single-agent) endpoint and use the `workspaces` field of the component.
* You can retrieve the list of **files** available for you when using a specific agent by calling the [GET /api/v3/agents/:id/files](http://localhost:3001/api-reference-v3/agents/list-files-scoped-to-an-agent) endpoint.
* You can retrieve the list of **tags** available for you when using a specified agent by calling the [GET /api/v3/agents/:id/tags](/api-reference-v3/agents/list-tags-used-in-workspaces-for-an-agent) endpoint.
If you are not specifying a particular agent then you are using your company's default agent, you can retrieve it by calling the [GET /api/v3/agents?is\_default=true](/api-reference-v3/agents/list-all-agents) endpoint (if you are sys-admin you might want to use the additional query parameter filter `&company_id=:id` with your company id).
### Using a specific tool
Call the [POST /api/v3/threads/turns](/api-reference-v3/threads/create-a-conversation-thread-with-initial-turn) endpoint,
while specifying the tool name to use in the payload like this:
```json theme={null}
{
"agent_id": 1,
"query": "What is the conclusion of the last quaterly meeting note?",
"force_tool": "document_search"
}
```
The `agent_id` field is optional, if omitted the default agent of your company will be used. You can list available [agents](/en/developer-resources/agents-and-threads/agents) using the [GET /api/v3/agents](/api-reference-v3/agents/list-all-agents) endpoint.
Forcing a tool when working with documents is not recommended, prefer scoping files/workspaces to your query
and let the automatic routing decides which tool is the best for your file(s).
You can list the available native tools available for the agent you are using through the [GET /api/v3/agents/:id/tools]() endpoint.
Ensure the selected native tool is enabled for the agent you are using, you can check by calling the [GET /api/v3/agents/:id]() endpoint, if you are not specifying any agent then you can check using the [GET api/v3/agents?is\_default=true]() endpoint (if you have a sys-admin role you might want to use the `?company_id=:id` with your company id).
As seen in the [Quickstart](#quickstart) section, the agent answer is the last message of the turn.
You can then retrieve the final answer like this:
```py theme={null}
# Minimal structure example to illustrate access pattern
response = {
"messages": [
{"parts": []},
{"parts": [{"type": "text", "text": "Paris"}]}
]
}
answer: str = response["messages"][-1]["parts"][-1]["text"]
```
In this scenario the first part of the agent answer is a **tool\_call** part. It contains information about
the tool called as well as the tool's raw result.
Note that since the tool was forced to a specific value, this turn won't contain a reasoning part.
You can retrieve it like this:
```
tool_call: dict = response["messages"][-1]["parts"][0]
```
### Using a specific MCP server
If you want to restrict tool routing to the tools provided by a specific MCP server,
call the the [POST /api/v3/threads/turns](/api-reference-v3/threads/create-a-conversation-thread-with-initial-turn) endpoint, while specifying the MCP server name in the payload like this:
Ensure the selected tool is enabled in the **Agent MCP Servers** section of your [Chat Settings](/en/administration/agent-management/agent-settings).
```json theme={null}
{
"agent_id": 1,
"query": "What are the latest news about LightOn ?",
"force_mcp_server": "websearch-linkup"
}
```
The `agent_id` field is optional, if omitted the default agent of your company will be used. You can list available [agents](/en/developer-resources/agents-and-threads/agents) using the [GET /api/v3/agents](/api-reference-v3/agents/list-all-agents) endpoint.
It will restrain the tool routing to the tools provided by the MCP server named `websearch-linkup` attached to the company
linked to the API key used.
Note that even when forcing a specific MCP server, the model can still choose to use none of its tools if it believes it knows the answer.
### Extending the system prompt
You can extend the system prompt during one query and pass specific instructions using the `system_prompt_suffix`
parameter of the payload. For instance, using the [POST /api/v3/threads/turns](/api-reference-v3/threads/create-a-conversation-thread-with-initial-turn) endpoint:
```json theme={null}
{
"agent_id": 1,
"query": "What is the conclusion of the last quaterly meeting note?",
"force_tool": "document_search",
"system_prompt_suffix": "Rephrase technical term into more accessible language."
}
```
The `agent_id` field is optional, if omitted the default agent of your company will be used. You can list available [agents](/en/developer-resources/agents-and-threads/agents) using the [GET /api/v3/agents](/api-reference-v3/agents/list-all-agents) endpoint.
Using this method rather than adding more instructions in your query allow to tune the agent behaviour while ensuring
an optimal search accuracy for your query in the case of `document_search` or `document_analysis` tools.
### Requesting structured output
You can request structured output from the agent by specifying the `response_format` parameter in the payload.
For instance, using the [POST /api/v3/threads/turns](/api-reference-v3/threads/create-a-conversation-thread-with-initial-turn) endpoint:
```json theme={null}
{
agent_id: 1,
"query": "What is the capital of France?",
"response_format": {
"type": "object",
"properties": {
"capital": {
"type": "string"
},
"country": {
"type": "string"
}
},
"required": [
"capital",
"country"
]
}
}
```
The `agent_id` field is optional, if omitted the default agent of your company will be used. You can list available [agents](/en/developer-resources/agents-and-threads/agents) using the [GET /api/v3/agents](/api-reference-v3/agents/list-all-agents) endpoint.
For more information about `response_format`, please consult the [Guided JSON](/en/developer-resources/chat-and-ai-models/structured-output#guided-json) documentation.
### Generating artifacts
Some tools like `code_execution` can generate artifacts that can be downloaded afterwards. For instance, when using
the [POST /api/v3/threads/turns](/api-reference-v3/threads/create-a-conversation-thread-with-initial-turn) endpoint:
```json theme={null}
{
"agent_id": 1,
"query": "Draw me a graph of a sinusoidal function.",
"force_tool": "code_execution"
}
```
The `agent_id` field is optional, if omitted the default agent of your company will be used. You can list available [agents](/en/developer-resources/agents-and-threads/agents) using the [GET /api/v3/agents](/api-reference-v3/agents/list-all-agents) endpoint.
It will result into an agent answer consisting of 2 parts:
* a `tool_call` part in which you can find the generated artifacts.
* a `text` part containing the final answer.
You can then retrieve the artifacts like this:
```python theme={null}
artifacts: list[dict] = response["messages"][-1]["parts"][0]["tool_call"]["result"]["file_artifacts"]
```
Each file artifact contains the following fields:
* `id`: the ID of the artifact.
* `thumbnail_base64`: a base64 encoded 256x256 webp thumbnail of the artifact if the artifact is an image.
Once you have the artifact ID you can retrieve the artifact content using
the [GET /api/v3/artifacts/:id/content](/api-reference-v3/artifacts/retrieve-an-artifact-content) endpoint.
## Background mode
For heavy query that needs to be handled asynchronously, you can use the [POST /api/v3/threads/turns](/api-reference-v3/threads/create-a-conversation-thread-with-initial-turn) endpoint
with the `background` parameter set to `true`. For instance:
```json theme={null}
{
"agent_id": 1,
"query": "What is the capital of France?",
"background": true
}
```
The `agent_id` field is optional, if omitted the default agent of your company will be used. You can list available [agents](/en/developer-resources/agents-and-threads/agents) using the [GET /api/v3/agents]() endpoint.
You will receive an **HTTP 200** response with the thread object but containing only the user query, notice how the `status` field
is set to `running`:
```json theme={null}
{
"id": "6d0d54c3-a87b-4c66-8af2-8ef59418358e",
"object": "turn",
"thread": "12df8e86-e8b0-49ee-8634-f5ce8944591c",
"status": "running",
"messages": [
{
"id": "22461762-afd8-4533-8cf2-2e7d516a38d6",
"object": "message",
"role": "user",
"parts": [
{
"type": "text",
"text": "What is the capital of France?"
}
],
"created_at": "2025-12-17T14:46:00.703903Z"
}
],
"created_at": "2025-12-17T14:46:00.702207Z"
}
```
You can then retrieve the thread id in the following way:
```python theme={null}
thread_id: str = response["thread"]
```
You can now poll periodically the [GET /api/v3/threads/:id](/api-reference-v3/threads/retrieve-a-conversation-thread) endpoint
until the `status` field is set to `completed`.
When the thread is back in its `completed` status, you can fetch its turns using
the [GET /api/v3/threads/:id/turns](http://localhost:3001/api-reference-v3/threads/list-conversation-turns-in-a-thread) endpoint.
To only retrieve the last turn, you can set the `limit` query parameter to `1`.
# OpenAI SDK Compatibility
Source: https://docs.lighton.ai/en/developer-resources/api-fundamentals/openai-compatibility
Use the OpenAI Python SDK with our API
Our API is compatible with the OpenAI Python SDK for specific endpoints, allowing you to integrate our service with minimal code changes for your tests.
## Installation
Install the OpenAI Python SDK:
```bash theme={null}
pip install openai
```
## Configuration
Configure the client to point to our API:
```python theme={null}
from openai import OpenAI
client = OpenAI(
api_key="your-paradigm-api-key",
base_url="https://paradigm.lighton.ai/api/v2"
)
```
## Compatible Endpoints
### Chat Completions
Create chat completions using the same interface as OpenAI's API.
```python theme={null}
response = client.chat.completions.create(
model="your-model-name",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
],
temperature=0.7,
max_tokens=150
)
print(response.choices[0].message.content)
```
## Streaming response
Stream responses for real-time output:
```python theme={null}
stream = client.chat.completions.create(
model="your-model-name",
messages=[{"role": "user", "content": "Tell me a story"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
```
### Completions
Generate text completions using the legacy completions endpoint.
```python theme={null}
response = client.completions.create(
model="your-model-name",
prompt="Once upon a time",
max_tokens=100,
temperature=0.7
)
print(response.choices[0].text)
```
## Streaming response
```python theme={null}
stream = client.completions.create(
model="your-model-name",
prompt="Write a poem about",
stream=True
)
for chunk in stream:
if chunk.choices[0].text:
print(chunk.choices[0].text, end="")
```
### Embeddings
Generate embeddings for text:
```python theme={null}
response = client.embeddings.create(
model="your-embedding-model",
input="Text to embed"
)
embedding = response.data[0].embedding
print(embedding)
```
### List Models
Retrieve a list of all available models.
```python theme={null}
# List all models
models = client.models.list()
for model in models.data:
print(f"{model.name}: {model.technical_name=} / {model.model_type}")
```
### Upload Files
Upload files for use with assistants or other endpoints.
```python theme={null}
# Upload a file
with open("document.pdf", "rb") as file:
response = client.files.create(
file=file,
purpose="assistants"
)
file_id = response.id
print(f"File uploaded: {file_id}")
```
**Supported Parameters:**
* `file` (required) - File object to upload
### List Files
Retrieve a list of all uploaded files.
```python theme={null}
# List all files
files = client.files.list()
for file in files.data:
print(f"{file.id}: {file.filename} ({file.bytes} bytes)")
```
### Retrieve File
Get information about a specific file.
```python theme={null}
# Get file details
file = client.files.retrieve(file_id="file-abc123")
print(f"Filename: {file.filename}")
print(f"Size: {file.bytes} bytes")
print(f"Created: {file.created_at}")
```
### Delete File
Delete a file from your account.
```python theme={null}
# Delete a file
response = client.files.delete("file-abc123")
if response.deleted:
print("File deleted successfully")
```
## Differences from OpenAI
While our API maintains compatibility with the OpenAI SDK, note the following differences:
Important Differences:
* Model names are specific to our platform
* Some advanced parameters may not be supported
* Rate limits differ from OpenAI's limits
## Error Handling
Handle errors using standard try-except blocks:
```python theme={null}
from openai import OpenAIError
try:
response = client.chat.completions.create(
model="your-model-name",
messages=[{"role": "user", "content": "Hello"}]
)
except OpenAIError as e:
print(f"Error: {e}")
```
## Migration Guide
To migrate from OpenAI to our API:
1. Update the `base_url` parameter in your client configuration
2. Replace OpenAI model names with our model identifiers
3. Update your API key to use our platform's key
4. Test your implementation with our endpoints
```python theme={null}
# Before (OpenAI)
client = OpenAI(api_key="sk-...")
# After (LightOn API)
client = OpenAI(
api_key="your-paradigm-api-key",
base_url="https://paradigm.lighton.ai/api/v2"
)
```
# Using the Paradigm API via a Proxy in Python
Source: https://docs.lighton.ai/en/developer-resources/api-fundamentals/proxy-configuration
Learn how to configure your requests to work with the Paradigm API when your company uses a proxy.
If your company uses a proxy to access external APIs, you need to specify its configuration in your requests to allow connection to our API's Python client.
Three methods are available to configure proxy usage:
* At the request level
* At the session level
* At the environment level
## Configuration Examples
Here is a configuration example for each method mentioned above.
```python theme={null}
import requests
import ssl
import os
api_key = os.getenv("PARADIGM_API_KEY")
base_url = os.getenv("PARADIGM_BASE_URL", "https://paradigm.lighton.ai/api/v2")
# Proxy configuration
proxies = {
'http': 'http://proxy.example.com:port',
'https': 'https://proxy.example.com:port'
}
# Request example
response = requests.post(
f"{base_url}/chat/completions",
headers={"Authorization": f"Bearer {api_key}"},
json={"model": "alfred-ft5", "messages": [{"role": "user", "content": "Hello"}]},
proxies=proxies,
verify=False
)
print(response.json())
```
```python theme={null}
import requests
import os
api_key = os.getenv("PARADIGM_API_KEY")
base_url = os.getenv("PARADIGM_BASE_URL", "https://paradigm.lighton.ai/api/v2")
# Proxy configuration
proxies = {
'http': 'http://proxy.example.com:port',
'https': 'https://proxy.example.com:port'
}
session = requests.Session()
session.proxies.update(proxies)
session.verify = False
# Request example
response = session.post(
f"{base_url}/chat/completions",
headers={"Authorization": f"Bearer {api_key}"},
json={"model": "alfred-ft5", "messages": [{"role": "user", "content": "Hello"}]},
)
print(response.json())
```
| Parameter | Description |
| :--------------------------: | ----------------------------------------------------------- |
| `"HTTP_PROXY" "HTTPS_PROXY"` | Address and port of the proxy used for HTTP(S) connections. |
| `NO_PROXY` | List of addresses that should bypass the proxy. |
```python theme={null}
import requests
import os
api_key = os.getenv("PARADIGM_API_KEY")
base_url = os.getenv("PARADIGM_BASE_URL", "https://paradigm.lighton.ai/api/v2")
# Proxy configuration
os.environ["HTTP_PROXY"] = "http://proxy.example.com:port"
os.environ["HTTPS_PROXY"] = "https://proxy.example.com:port"
os.environ["NO_PROXY"] = "localhost,127.0.0.1"
# Request example
response = requests.post(
f"{base_url}/chat/completions",
headers={"Authorization": f"Bearer {api_key}"},
json={"model": "alfred-ft5", "messages": [{"role": "user", "content": "Hello"}]},
verify=False
)
print(response.json())
```
## TLS Certificate
The examples above have TLS certificate verification disabled, which should only be used for testing purposes.
When the `verify` parameter is set to `False`, requests will accept any TLS certificate presented by the server and ignore hostname mismatches and/or expired certificates, which makes your application vulnerable to man-in-the-middle (MitM) attacks. Setting `verify` to `False` may be useful during development or local testing.
The `verify` parameter can also be a string, in which case it must be a path to a CA bundle to use. The default value is `True`.
# Chat API Endpoint Quick Guide
Source: https://docs.lighton.ai/en/developer-resources/api-fundamentals/quick-guide
Welcome to our guide on the Paradigm public API. This powerful interface provides developers with flexible access to our services, enabling seamless integration of our advanced features into your applications.
**The Paradigm API is used to complement its visual interface. It enables the creation of intelligent applications, drawing on the power of LLM to interact with users in an intuitive way. It is an additional tool for developers wishing to customize their LLM calls by playing with the parameters used, to call external tools, or to integrate automatic LLM calls within existing business applications.**
## Getting started
### Set up
First, set up your environment with your API key and our endpoint URL.
This is used to connect your requests to our service.
**Authentication & Instance Configuration**
Please note that while exploring the documentation doesn't require authentication, you'll need valid API credentials to make actual requests to our services. If you do not have the rights to create an API key, ask your company admin to give you those; if you have, you can create one in your Paradigm profile!
For private instances, ensure you configure the correct base URL.
```python theme={null}
import os
# Get API key from environment
api_key = os.getenv("PARADIGM_API_KEY")
# Get base URL from environment (defaults to public instance)
base_url = os.getenv("PARADIGM_BASE_URL", "https://paradigm.lighton.ai/api/v2")
```
### Crafting Messages
The core of your request is the messages array, where each item has a role ("*system*", "*user*", "*assistant*" or "*tool*") and the message content.
* **System**: Sets the conversation's context or provides instructions to the AI, guiding its responses. Ideal for initializing the chat with necessary background or rules.
* **User**: Inputs from the human user engaging with the AI. This role is used for the questions, statements, or commands that users input into the chat.
* **Assistant**: Responses from the AI designed to assist, answer, or interact with the user. This role is for the AI-generated content in reply to the user or system prompts.
* **Tool**: Insights from the external tools to provide the LLM with external information (more on this later).
You can have follow-up conversations by providing a list of messages, such as in the code below:
```python theme={null}
import requests
messages = [
{"role": "system", "content": "You are a helpful AI assistant answering to user's question"},
{"role": "user", "content": "Hello, my name is Tom, how are you?"},
{"role": "assistant", "content": "I'm Tom, I'm here to help. What can I do for you?"},
{"role": "user", "content": "What is my name?"},
]
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
response = requests.post(
url,
headers=headers,
json={
"model": "alfred-ft5",
"messages": messages,
"temperature": 0.7,
"max_tokens": 150
}
)
data = response.json()
assistant_reply = data["choices"][0]["message"]["content"]
print(assistant_reply)
```
When using the LightOn API, developers can customize several key parameters of LLMs to adapt the model's behavior to specific use cases.
These include:
* `temperature`: controls the randomness of the output. Lower values (e.g. 0.2) make the response more focused and predictable, while higher values (e.g. 0.8 or 1.0) encourage more creative and diverse responses.
* `max_tokens`: sets the maximum number of tokens the model can generate in the response. Useful to control the output length and avoid overly long answers.
* `top_p` (nucleus sampling): limits the next-token choices to a cumulative probability p. For example, with top\_p=0.9, only the most likely tokens that add up to 90% probability are considered. Often used as an alternative or complement to temperature.
* `frequency_penalty`: applies a penalty to tokens that have already appeared, reducing repetition. Values range from 0.0 (no penalty) to 2.0 (strong penalty). Useful for preventing redundant answers.
* `presence_penalty`: encourages the model to introduce new topics by penalizing tokens that have already been mentioned, increasing content diversity. Also ranges from 0.0 to 2.0.
* `stop`: a list of token sequences where generation should stop. For example, setting `stop=["\n\n", "User:"]` can prevent the model from continuing into a new prompt or section.
### Streaming example
Streaming allows for immediate, incremental delivery of responses, perfect for live interactions. With `stream=True`, the API sends parts of the response as they're generated. The example below prints each part upon arrival.
```python theme={null}
import requests
import json
messages = [
{"role": "system", "content": "You are a helpful AI assistant answering to user's question"},
{"role": "user", "content": "Hello, my name is Tom, how are you?"},
{"role": "assistant", "content": "I'm Tom, I'm here to help. What can I do for you?"},
{"role": "user", "content": "What is my name?"},
]
payload = {
"model": "alfred-ft5",
"messages": messages,
"temperature": 0.7,
"max_tokens": 150,
"stream": True
}
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
with requests.post(f"{base_url}/chat/completions", headers=headers, json=payload, stream=True) as r:
for line in r.iter_lines():
if not line:
continue
line = line.decode("utf-8").strip()
if line.startswith("data: "):
# Remove "data: " prefix
json_str = line[6:]
# Check for end marker
if json_str == "[DONE]":
break
try:
data = json.loads(json_str)
content = data["choices"][0]["delta"].get("content", "")
if content:
print(content, end="", flush=True)
except (json.JSONDecodeError, KeyError, IndexError):
continue
```
### Best Practices
* **Keep Context Relevant**: Only include messages that help the conversation.
* **Use Streaming for Live Chats**: Set `stream=True` for ongoing interactions.
* **Match Model to your infra**: The models that you choose should reflect the ones deployed on your infrastructure.
* **Balance Temperature and Tokens**: Adjust for creativity vs. precision and response length.
## Conclusion
This guide is your starting point for integrating chat functionalities. With the right settings and understanding, you can craft engaging AI conversations. Happy coding!
# Paradigm usage data
Source: https://docs.lighton.ai/en/developer-resources/api-fundamentals/usage-data
The Paradigm API can be used by company or instance administrators to track usage of the platform.
Monitor and analyze platform usage with comprehensive reporting endpoints. Track user activity, chat sessions, and tool usage to gain insights into how your organization uses Paradigm.
Below is a possible use of the:
* latest connections,
* active users,
* chat sessions,
* tool usage.
## Retrieve chat sessions
```python theme={null}
import requests
import os
# Get API key and base URL from environment
api_key = os.getenv("PARADIGM_API_KEY")
base_url = os.getenv("PARADIGM_BASE_URL", "https://paradigm.lighton.ai/api/v2")
url = f"{base_url}/reporting/chat-sessions/"
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
params = {
"company_id": 2,
"start_date": "2025-01-01", # Required
# "end_date": "2025-04-01" # Optional, defaults to today
}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
try:
data = response.json()
except requests.JSONDecodeError:
print("Received non-JSON response:", response.text)
else:
print("Error:", response.status_code, response.text)
```
If you have a private Paradigm instance, please replace your base URL by your company's instance.
## Structure chat session data in a Pandas dataframe
```python theme={null}
import pandas as pd
# Flatten the structure
flattened_data = []
for entry in data["reporting"][0]["dates"]:
flat_entry = {
'date': entry['date'],
'nb_sessions': entry['sessions']['sessions_count'],
'unique_models': entry['sessions']['unique_models_count'],
'average_session': entry['sessions']['average_session_length'],
'user_queries': entry['chats']['user_queries_count'],
'model_responses': entry['chats']['model_responses_count'],
'model_responses_with_docs': entry['chats']['model_responses_with_docs_count'],
}
flattened_data.append(flat_entry)
# Create DataFrame
df_sessions = pd.DataFrame(flattened_data)
```
## Going further with more endpoints
The same approach can be done with:
* the feedbacks endpoint: `/reporting/chats-feedback/`
* the tools usage endpoint: `/reporting/tools/`
Then, merging everything into the same dataframe allows a complete data analysis on the usage of the platform.
# Asynchronous API Requests with aiohttp
Source: https://docs.lighton.ai/en/developer-resources/chat-and-ai-models/async-requests
By using aiohttp with the Paradigm API, you can leverage the power of asynchronous programming in Python to improve the speed of your API requests.
By using `asyncio` and the `aiohttp` library, you can send multiple requests simultaneously, significantly reducing wait time and improving response time for batch operations.
**Efficiency and Scalability**
Asynchronous requests enable non-blocking operations, making your application more efficient and scalable, especially when making multiple simultaneous API calls.
## Prerequisites
* Ensure you have the `aiohttp` library installed: `pip install aiohttp`
* An API key stored securely, preferably in a `PARADIGM_API_KEY` environment variable.
## Asynchronous Programming with `asyncio`
`asyncio` is a Python library that provides a framework for writing concurrent code using the `async` and `await` syntax. It is particularly useful for high-level structured network code and I/O-bound operations. You can find more information about Asyncio [here](https://docs.python.org/3/library/asyncio.html).
## Configuring the Asynchronous HTTP Client
To use asynchronous features, use `aiohttp.ClientSession`. Initialize the session with your API key and the appropriate endpoint.
```python theme={null}
import aiohttp
import asyncio
import os
# Retrieve authentication information
api_key = os.getenv("PARADIGM_API_KEY")
base_url = os.getenv("PARADIGM_BASE_URL", "https://paradigm.lighton.ai/api/v2")
names = ["Alice", "Bob", "Charlie", "David", "Emma", "Frank", "Grace", "Hannah", "Ian", "Jessica", "Kevin", "Linda", "Michael", "Nancy", "Olivia", "Peter", "Quincy", "Rachel", "Samuel", "Tiffany"]
# as an example we will use this batch of messages
messages_batch = [[{"role": "user", "content": f"Say hello to the new user on Paradigm! Give a short one-sentence highly personalized welcome to: {name}"}] for name in names]
```
## Asynchronous API Calls
Here's how to implement asynchronous API calls:
Create an `async` function that sends a message to the API and awaits the response.
```python theme={null}
async def send_message(session, messages, model="alfred-ft5", temperature=0.7, max_tokens=150):
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
payload = {
"model": model,
"messages": messages,
"temperature": temperature,
"max_tokens": max_tokens
}
async with session.post(f"{base_url}/chat/completions", headers=headers, json=payload) as response:
data = await response.json()
return data
```
Use `asyncio.gather` to send multiple requests simultaneously. This function waits for all futures (asynchronous operations) to complete.
```python theme={null}
async def main():
start_time = time.time()
async with aiohttp.ClientSession() as session:
tasks = [send_message(session, messages, model="alfred-ft5", temperature=0.4) for messages in messages_batch]
responses = await asyncio.gather(*tasks)
duration = time.time() - start_time
print(f"Asynchronous execution took {duration} seconds.")
for response in responses:
print(response["choices"][0]["message"]["content"])
return responses
```
Use `asyncio.run()` to execute the `main` function, which handles all asynchronous operations.
```python theme={null}
if __name__ == "__main__":
asyncio.run(main())
```
### Complete Example
Here is the complete example code:
```python theme={null}
import aiohttp
import asyncio
import time
import os
# Retrieve authentication information
api_key = os.getenv("PARADIGM_API_KEY")
base_url = os.getenv("PARADIGM_BASE_URL", "https://paradigm.lighton.ai/api/v2")
names = ["Alice", "Bob", "Charlie", "David", "Emma", "Frank", "Grace", "Hannah", "Ian", "Jessica", "Kevin", "Linda", "Michael", "Nancy", "Olivia", "Peter", "Quincy", "Rachel", "Samuel", "Tiffany"]
# as an example we will use this batch of messages
messages_batch = [[{"role": "user", "content": f"Say hello to the new user on Paradigm! Give a short one-sentence highly personalized welcome to: {name}"}] for name in names]
async def send_message(session, messages, model="alfred-ft5", temperature=0.7, max_tokens=150):
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
payload = {
"model": model,
"messages": messages,
"temperature": temperature,
"max_tokens": max_tokens
}
async with session.post(f"{base_url}/chat/completions", headers=headers, json=payload) as response:
data = await response.json()
return data
async def main():
start_time = time.time()
async with aiohttp.ClientSession() as session:
tasks = [send_message(session, messages, model="alfred-ft5", temperature=0.4) for messages in messages_batch]
responses = await asyncio.gather(*tasks)
duration = time.time() - start_time
print(f"Asynchronous execution took {duration:.2f} seconds.")
for response in responses:
print(response["choices"][0]["message"]["content"])
return responses
if __name__ == "__main__":
asyncio.run(main())
```
## Comparison with Synchronous Execution
When comparing asynchronous execution with traditional synchronous (sequential) execution, asynchronous operations generally complete in much less time, with potential for even greater improvement depending on the length of different requests. This is particularly true for I/O-bound tasks like API requests. The efficiency gains from asynchronous execution come from its non-blocking nature, which allows other tasks to continue without waiting for I/O operations to complete.
**Best Practices**
* Always use `await` with async functions to avoid runtime errors.
* Reuse the same `ClientSession` for multiple requests to improve performance.
* Always close the session properly using the `async with` context manager.
* For Jupyter notebooks, run asynchronous code via a separate Python script using the magic command `!python file_to_execute.py` in a cell to avoid event loop issues.
By incorporating asynchronous requests into your application, you can achieve greater efficiency and scalability, particularly when handling a large number of API calls.
## Complete Comparison Example
To compare synchronous and asynchronous API calls in a practical scenario, you can use the following snippet. This snippet will create a Python file, `speed_test.py`, implementing synchronous and asynchronous API requests, respectively. You can then run this script to observe the difference in execution time, demonstrating the efficiency of asynchronous programming for batch requests.
```python speed_test.py theme={null}
import os
import time
import requests
import aiohttp
import asyncio
# Configuration
api_key = os.getenv("PARADIGM_API_KEY")
base_url = os.getenv("PARADIGM_BASE_URL", "https://paradigm.lighton.ai/api/v2")
names = ["Alice", "Bob", "Charlie", "David", "Emma", "Frank", "Grace", "Hannah", "Ian", "Jessica", "Kevin", "Linda", "Michael", "Nancy", "Olivia", "Peter", "Quincy", "Rachel", "Samuel", "Tiffany"]
# Synchronous function to send messages
def sync_send_message(name):
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
messages = [{"role": "user", "content": f"Say hello to the new user on Paradigm! Give a short one-sentence highly personalized welcome to: {name}"}]
payload = {
"model": "alfred-ft5",
"messages": messages,
"temperature": 0.4,
"max_tokens": 150
}
response = requests.post(f"{base_url}/chat/completions", headers=headers, json=payload)
return response.json()
# Asynchronous function to send messages
async def async_send_message(session, messages, model="alfred-ft5", temperature=0.4, max_tokens=150):
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
payload = {
"model": model,
"messages": messages,
"temperature": temperature,
"max_tokens": max_tokens
}
async with session.post(f"{base_url}/chat/completions", headers=headers, json=payload) as response:
data = await response.json()
return data
def sync_main():
responses = []
start_time = time.time()
for name in names:
response = sync_send_message(name)
responses.append(response)
duration = time.time() - start_time
print(f"Synchronous execution took {duration:.2f} seconds.")
async def async_main():
start_time = time.time()
async with aiohttp.ClientSession() as session:
tasks = [
async_send_message(
session,
[{"role": "user", "content": f"Say hello to the new user on Paradigm! Give a short one-sentence highly personalized welcome to: {name}"}],
model="alfred-ft5",
temperature=0.4
)
for name in names
]
responses = await asyncio.gather(*tasks)
duration = time.time() - start_time
print(f"Asynchronous execution took {duration:.2f} seconds.")
if __name__ == "__main__":
async_start_time = time.time()
asyncio.run(async_main())
async_times = time.time() - async_start_time
sync_start_time = time.time()
sync_main()
sync_times = time.time() - sync_start_time
improvement_factor = sync_times / async_times
print(f"Improvement factor: {improvement_factor:.2f}")
```
To run the comparison:
1. Execute the code snippet above in a Jupyter notebook cell to create `speed_test.py`.
2. Run the script in the Jupyter notebook or a terminal using the command `!python speed_test.py`.
This script will first run the asynchronous version, displaying the total execution time. It will then run the synchronous version, doing the same. Comparing the two execution times will illustrate the efficiency gains achievable with asynchronous API calls.
In our case, we obtained the following output:
```
Asynchronous execution took 1.86 seconds.
Synchronous execution took 10.33 seconds.
Improvement factor: 5.55
```
## Error Handling and Timeout
It's important to add robust error handling for asynchronous API calls:
```python theme={null}
async def send_message_with_retry(session, messages, model="alfred-ft5", temperature=0.7, max_tokens=150, max_retries=3):
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
payload = {
"model": model,
"messages": messages,
"temperature": temperature,
"max_tokens": max_tokens
}
for attempt in range(max_retries):
try:
async with session.post(
f"{base_url}/chat/completions",
headers=headers,
json=payload,
timeout=aiohttp.ClientTimeout(total=30)
) as response:
response.raise_for_status()
data = await response.json()
return data
except (aiohttp.ClientError, asyncio.TimeoutError) as e:
if attempt == max_retries - 1:
raise
await asyncio.sleep(2 ** attempt) # Exponential backoff
```
## Conclusion
Leveraging asynchronous API requests via `aiohttp` can significantly improve application performance and scalability. As demonstrated, asynchronous execution can be nearly 5 times faster than synchronous methods, offering significant efficiency gains. This approach is essential for handling high-volume API interactions, ensuring application efficiency.
# Embeddings endpoint
Source: https://docs.lighton.ai/en/developer-resources/chat-and-ai-models/embeddings
The embeddings API endpoint allows you to easily convert some text into embedding vectors. This feature gives you the possibility to manage your own vector database while keeping the advantages of Paradigm.
Convert text into numerical vector representations that capture semantic meaning. This is essential for building search systems, recommendation engines, and similarity detection features.
Embeddings are high-dimensional vectors (typically 384 to 1536 dimensions) that encode semantic meaning. Similar texts will have similar embeddings, making them perfect for semantic search and clustering tasks.
## Prerequisites
* A **Paradigm API key**: if you do not have one, go to your Paradigm profile (`/settings/api-key` in your instance) and generate a new API key.
* The desired **embedding model available in Paradigm**: By default the embedding model used for the chat with docs should be available. If you want to use another embedding model, you must add it to Paradigm from the admin interface.
Use the same embedding model consistently across your application. Mixing embeddings from different models will produce unreliable similarity results.
## Usage methods
There are several ways to call the endpoint:
1. With the **python `requests` package**
2. Through a **curl request**: for quick testing or first-time use
## Python `requests` package
You can directly send request to the API endpoint through the `requests` package.
```python theme={null}
import requests
import os
# Get API key and base URL from environment
api_key = os.getenv("PARADIGM_API_KEY")
base_url = os.getenv("PARADIGM_BASE_URL", "https://paradigm.lighton.ai/api/v2")
response = requests.request(
method="POST",
url=f"{base_url}/embeddings",
headers={
'accept': "application/json",
'Authorization': f"Bearer {api_key}"
},
json={
"model": "multilingual-e5-large",
"input": "This a test string"
}
)
print(response.json())
```
You would then get a JSON answer as a dictionary:
```json theme={null}
{
"object": "list",
"data": [
{
"object": "embedding",
"embedding": [
0.0071225623,
-0.008990367,
"...",
-0.023343408,
0.016777039
],
"index": 0
}
],
"model": "multilingual-e5-large",
"usage": {
"prompt_tokens": 6,
"total_tokens": 6
},
"id": "fe922faf-50bd-4f5f-90a0-4abd0de10a78"
}
```
## cURL request
If you would prefer sending a request to Paradigm with a simple cURL command, here is an example:
```shell theme={null}
curl --request POST \
--url $PARADIGM_BASE_URL/embeddings \
--header "Authorization: Bearer $PARADIGM_API_KEY" \
--header 'accept: application/json' \
--data '{
"model": "multilingual-e5-large",
"input": "This a test string"
}'
```
# Get the list of models
Source: https://docs.lighton.ai/en/developer-resources/chat-and-ai-models/models-list
In order to know which models you can have access to through Paradigm, a dedicated endpoint is available for you to get the list of available models.
This endpoint allows you to retrieve all AI models available for your API key. Use this to discover which models you can access for chat completions, embeddings, and other AI operations.
**Model visibility**
Please note that the listed models are the models accessible for your API key.
If your API key has not been granted access to a model, you will not find this model in the response coming from the API endpoint.
If you don't find a specific model in the response, from the admin interface please check that:
* The model exists in Paradigm
* Your API key has access to this model
## Prerequisites
* A **Paradigm API key**: if you do not have one, go to your Paradigm profile (`/settings/api-key` in your instance) and generate a new API key.
## Usage methods
There are several ways to call the endpoint:
1. With the **python `requests` package**
2. Through a **curl request**: for quick testing or first-time use
## cURL request
If you would prefer sending a request to Paradigm with a simple cURL command, here is an example:
```shell theme={null}
curl --request GET \
--url $PARADIGM_BASE_URL/models \
--header 'Authorization: Bearer $PARADIGM_API_KEY'
```
# Regex-Powered Template Filling via API
Source: https://docs.lighton.ai/en/developer-resources/chat-and-ai-models/regex-templates
Our API now supports regex-based template filling, enabling precise formatting in generated content. Ideal for data that must conform to specific patterns like credit card numbers, phone numbers, or custom identifiers.
## Introduction to Regex Template Filling
Regex, or Regular Expression, defines a search pattern for text. Using regex for template filling ensures the generated content follows a specific format, crucial for data validation and usability.
## Use Case: Formatted Data Generation
This feature is very useful when generating data that must fit a particular structure, such as for example structured data extraction, ensuring consistency and ease of parsing for tools and systems.
### Example: Structured Log Message Generation
Imagine the need to extract information from a financial report. A regex template can be used to structure this information in a specific format.
```python theme={null}
# Regex pattern for structured financial report messages
financial_regex = "\\[Year: (\\d{4})\\] \\[Quarter: (Q[1-4])\\] \\[Revenue: \\$(.*?)\\] \\[Net Profit: \\$(.*?)\\] \\[Expense: \\$(.*?)\\]."
# Example of financial report and instruction
financial_report_content = """
Based on this text, you should extract the key figures :
'''
During the 2023 fiscal year, our company continued to demonstrate remarkable growth and resilience in a challenging market environment. The first quarter was marked by intense competition, yet thanks to our innovative strategies, we managed to increase our market share.
Revenue for the first quarter amounted to $4.7 million, up from $4.3 million in the same period last year. This increase was largely attributed to our successful expansion into new market segments.
As for expenses, the first quarter saw a slight increase to $2.5 million, compared to $2.3 million the previous year. This rise is mainly due to our investments in research and development, as well as marketing to support our growth.
The second quarter was even more promising, with revenue reaching $5.2 million, highlighting the effectiveness of our new marketing initiatives and diversified product strategy. The net profit for this quarter was impressive, amounting to $1.4 million.
Our operational expenses for the second quarter were kept at $3 million, reflecting our ongoing efforts to optimize our operations and improve efficiency.
As we move into the third quarter, the outlook remains positive, with revenue projections exceeding $5.5 million. Our commitment to innovation and excellence continues to bear fruit, positioning the company for sustained growth in the future.
It's also important to note that our corporate social responsibility initiatives have been strengthened throughout the year, contributing positively to our brand image and relationship with the communities in which we operate.
In summary, 2023 has been a year of significant growth and strategic development for our company so far. We remain focused on achieving our long-term objectives and delivering value to our shareholders.
'''
Now give me the information and key figures related to Q1 :
"""
# Generate a structured financial report message
response = client.chat.completions.create(
model="alfred-40b-1123",
messages=[{"role": "user", "content": financial_report_content}],
temperature=0.5,
max_tokens=90,
extra_body={"regex": financial_regex},
)
# Print the AI-generated structured financial report message
print(response.choices[0].message.content)
```
**Precise Content Formatting**
Incorporating regex in your API requests allows you to dictate the output format, ensuring it meets specific standards. Use `extra_body` for regex parameters.
### Sample Output
```
[Year: 2023] [Quarter: Q1] [Revenue: $4.7 million, an increase from $4.3 million in Q1 of the previous year] [Expenses: $2.5 million, an increase from $2.3 million in Q1 of the previous year] [Growth attributed to: Successful expansion into new market segments, innovative strategies]
```
**Attention to Regex Syntax**
Correctly formulating your regex pattern is crucial. Ensure you escape special characters and use quantifiers accurately to prevent errors or unexpected results.
## Advantages of Regex in Data Structuring
Using regex for template filling ensures data generated by the model adheres to formats required by external systems, improving data consistency and integration.
Leverage regex within your API requests to generate precisely formatted outputs, enhancing the utility and accuracy of the content for your specific needs.
# Get Structured Output Generation
Source: https://docs.lighton.ai/en/developer-resources/chat-and-ai-models/structured-output
Enhance your applications with high-quality, structured output using our API's dedicated parameters. This feature is key for creating or parsing structured data, ensuring it meets specific format and validation rules.
Starting from the **Victorious Vicuna** release (January 2026) and later, using the [Agent API](/en/developer-resources/chat-and-ai-models/agent-api)
is the preferred way of achieving this task, please refer to the [Requesting structured output](/en/developer-resources/chat-and-ai-models/agent-api#requesting-structured-output) section of that page instead.
## Supported parameters
Several parameters are avaible to better fit your needs, which must be added in your request payload:
* `guided_choice`: the output will be exactly one of the choices.
* `guided_regex`: the output will follow the regex pattern.
* `guided_json`: the output will follow the JSON schema.
The following sections will give you example on how to use each of those parameters.
## Guided Choices
Use the `guided_choice` parameter to force a model to choose one of the choices you define.\
Here is an example below.
```python theme={null}
import requests
import os
paradigm_api_key = os.environ.get("PARADIGM_API_KEY", None)
url = "https://paradigm.lighton.ai/api/v2/chat/completions"
headers = {
"Authorization": f"Bearer {paradigm_api_key}",
"Content-Type": "application/json",
}
payload = {
"model": "alfred-ft5",
"messages": [
{"role": "user", "content": "Classify this sentiment: Alfred is wonderful!"}
],
"guided_choice": ["positive", "negative"]
}
response = requests.post(url, json=payload, headers=headers)
data = response.json()
print(data["choices"][0]["message"]["content"])
```
For this example, the output should show the text `positive`.
## Guided Regex
Use the guided\_regex parameter to generate text following a regex pattern.\
Here is an example below.
```python theme={null}
import requests
import os
paradigm_api_key = os.environ.get("PARADIGM_API_KEY", None)
url = "https://paradigm.lighton.ai/api/v2/chat/completions"
headers = {
"Authorization": f"Bearer {paradigm_api_key}",
"Content-Type": "application/json",
}
payload = {
"model": "alfred-ft5",
"messages": [
{
"role": "user",
"content": "Generate an example email address for Alan Turing, who works in Enigma. End in .com. Example result: alan.turing@enigma.com\n"
}
],
"guided_regex": r"\w+@\w+\.com",
}
response = requests.post(url, json=payload, headers=headers)
data = response.json()
print(data["choices"][0]["message"]["content"])
```
The output should then suggest an email address following the regex pattern as `alan_turing@enigma.com` for instance.
## Guided JSON
**Data Integrity and Validation**
JSON Schema maintains high data quality by enforcing a predefined structure and validation rules, minimizing the need for additional checks.
### Create your JSON Schema
You have 2 possibilities to create your JSON schema:
* Manually create a [JSON schema](https://json-schema.org/): you can find a [step-by-step guide here](https://json-schema.org/learn/getting-started-step-by-step).
* Define a [Pydantic model](https://docs.pydantic.dev/latest/) and extract the JSON schema from it.
### The Role of Stop Sequences
Stop sequences are critical in structured data tasks, marking the end of model responses to keep outputs within your schema's structure.
**Mandatory Stop Sequence**
Always use an appropriate stop sequence of a model (default for `mistral` is `stop=[""]`) to ensure precise model output termination, aligning with your JSON Schema.
### Code example
The next examples shows how to use the `guided_json` parameter with an exmplicit JSON Schema as well as with a Pydantic model.
```python theme={null}
import requests
import json
import os
# Get the Paradigm API key from the environment
paradigm_api_key = os.environ.get("PARADIGM_API_KEY", None)
# Define the JSON Schema for data generation
json_schema = """{
"$defs": {
"CarType": {
"enum": [
"sedan",
"SUV",
"Truck",
"Coupe"
],
"title": "CarType",
"type": "string"
}
},
"properties": {
"brand": {
"title": "Brand",
"type": "string"
},
"model": {
"title": "Model",
"type": "string"
},
"car_type": {
"$ref": "#/$defs/CarType"
}
},
"required": [
"brand",
"model",
"car_type"
],
"title": "CarDescription",
"type": "object"
}"""
url = "https://paradigm.lighton.ai/api/v2/chat/completions"
headers = {
"Authorization": f"Bearer {paradigm_api_key}",
"Content-Type": "application/json",
}
payload = {
"model": "alfred-ft5",
"messages": [
{
"role": "user",
"content": "Generate a JSON with the brand, model and car_type of the most iconic car from the 80's",
}
],
"guided_json": json_schema
}
response = requests.post(url, json=payload, headers=headers)
response_data = response.json()
print(json.dumps(json.loads(response_data["choices"][0]["message"]["content"]), indent=2))
```
```python theme={null}
from pydantic import BaseModel
from enum import Enum
import requests
import json
import os
paradigm_api_key = os.environ.get("PARADIGM_API_KEY", None)
class CarType(str, Enum):
sedan = "sedan"
suv = "SUV"
truck = "Truck"
coupe = "Coupe"
class CarDescription(BaseModel):
brand: str
model: str
car_type: CarType
json_schema = CarDescription.model_json_schema()
url = "https://paradigm.lighton.ai/api/v2/chat/completions"
headers = {
"Authorization": f"Bearer {paradigm_api_key}",
"Content-Type": "application/json",
}
payload = {
"model": "alfred-ft5",
"messages": [
{
"role": "user",
"content": "Generate a JSON with the brand, model and car_type of the most iconic car from the 80's",
}
],
"guided_json": json_schema
}
response = requests.post(url, json=payload, headers=headers)
response_data = response.json()
print(json.dumps(json.loads(response_data["choices"][0]["message"]["content"]), indent=2))
```
Here is an output example you can get:
```json theme={null}
{
"brand": "Delorean",
"model": "DMC-12",
"car_type": "sedan"
}
```
**Harnessing Pattern Matching**
Use the `pattern` attribute in JSON Schema to define regular expressions (regex) for matching specific text formats. The `(.+)` regex is especially useful for capturing varied text segments, enabling precise extraction of desired information from texts. This feature is key for parsing specific data points from unstructured or semi-structured text.
## Using Extracted Data
Leverage the structured data from your extractions to enhance databases, CRM systems, or automate workflows, boosting operational efficiency.
**Accurate Pattern Matching**
Verify that your JSON Schema's regex patterns align with your text's expected formats. Mismatches can lead to data extraction errors or inaccuracies.
By employing JSON Schema, you can efficiently transform unstructured text into structured, actionable data, offering a scalable solution for data processing needs.
## Conclusion
Structured outputs enrich the user experience with detailed content and ensuring application-wide data consistency. It's crucial for applications reliant on structured data integrity.
**Common Pitfalls**
* Excluding necessary schema properties might result in partial data outputs.
* Imposing too strict constraints can restrict the AI's ability to produce relevant content.
* Neglecting to include stop sequences in API calls may cause processing issues.
# Tokenize endpoint
Source: https://docs.lighton.ai/en/developer-resources/chat-and-ai-models/tokenize
The tokenize API endpoint allows you to easily convert some text into a list of tokens for a specific model.
Break down text into individual tokens to understand how a model will process your input. This is useful for debugging, token counting, and understanding model behavior.
**Embedding models**
It is currently not possible to use the tokenize endpoint on embedding models.
Only Large Language Models are supported.
## Prerequisites
* A **Paradigm API key**: if you do not have one, go to your Paradigm profile and generate a new API key.
* The desired **LLM available in Paradigm**: If you want to use a new model, you must add it to Paradigm from the admin interface.
## Usage methods
There are several ways to call the endpoint:
1. With the **python `requests` package** (recommended)
2. Through a **curl request**: for quick testing or first-time use
## Python `requests` package
You can directly send request to the API endpoint through the `requests` package.
```python theme={null}
import requests
import os
# Get API key and base URL from environment
api_key = os.getenv("PARADIGM_API_KEY")
base_url = os.getenv("PARADIGM_BASE_URL", "https://paradigm.lighton.ai/api/v2")
response = requests.post(
url=f"{base_url}/tokenize",
headers={
'accept': "application/json",
'Authorization': f"Bearer {api_key}"
},
json={
"model": "alfred-4",
"prompt": "This a test string"
}
)
print(response.json())
```
You would then get a JSON answer as a dictionary:
```json theme={null}
{
"id": "8c0d73b9-b18a-4893-a38e-a4338a7d4e0e",
"tokens": [
{"This": 1182},
{"Ġa": 241},
{"Ġtest": 1318},
{"Ġstring": 3821}
],
"text": "This a test string",
"n_tokens": 4,
"model": "alfred-4"
}
```
## cURL request
If you prefer sending a request to Paradigm with a simple cURL command, here is an example:
```shell theme={null}
curl --request POST \
--url $PARADIGM_BASE_URL/tokenize \
--header "Authorization: Bearer $PARADIGM_API_KEY" \
--header 'content-type: application/json' \
--data '{
"model": "alfred-4",
"prompt": "This a test string"
}'
```
# Upload Files to Paradigm
Source: https://docs.lighton.ai/en/developer-resources/files/add-document
Upload documents to Paradigm using the V3 Files API - simplified one-step process with support for single files and batch uploads.
## Overview
The V3 Files API provides a **simple, one-step upload process** for adding documents to your Paradigm workspace. Upload a file with a single API call, and Paradigm handles the rest - parsing, indexing, and making your documents searchable.
**Key features:**
* **Asynchronous processing** - Files are queued and processed in the background, so uploads return immediately
* **Automatic upload sessions** - Files are automatically grouped into sessions for efficient batch processing
* **Direct tag assignment** - Organize documents by applying tags during upload
* **Flexible configuration** - Override parser selection or use automatic detection (default)
* **Progress tracking** - Monitor processing status via GET endpoints
## Prerequisites
### Required
* **Paradigm API key**: Generate one at `/settings/api-key` in your Paradigm instance
* **Workspace ID**: The ID of the workspace where documents will be stored
### How to Get Your Workspace ID
You can find your workspace ID in several ways:
1. **From the admin panel**: Navigate to your workspace in the admin interface and check the URL or workspace details
2. **From the API**: List the workspaces you have access to with `GET /api/v3/workspaces`
```bash theme={null}
curl $PARADIGM_BASE_URL/api/v3/workspaces \
-H "Authorization: Bearer $PARADIGM_API_KEY"
```
### File Requirements
* **Maximum file size**: 25MB per file by default (or custom with MAX\_DOCUMENT\_SIZE config key of your instance)
* **Supported formats**: PDF, DOCX, DOC, PPTX, PPT, TXT, MD, Markdown, HTML, XLSX, XLS, CSV, RTF, ODT, ODS, ODP and more
## Quick Start
The simplest upload requires just a file and workspace ID:
### Python
```python theme={null}
import requests
import os
api_key = os.getenv("PARADIGM_API_KEY")
base_url = os.getenv("PARADIGM_BASE_URL", "https://paradigm.lighton.ai")
response = requests.post(
f"{base_url}/api/v3/files",
headers={"Authorization": f"Bearer {api_key}"},
files={"file": open("document.pdf", "rb")},
data={"workspace_id": 42}
)
print(response.json())
```
### cURL
```bash theme={null}
curl $PARADIGM_BASE_URL/api/v3/files \
-H "Authorization: Bearer $PARADIGM_API_KEY" \
-F "file=@document.pdf" \
-F "workspace_id=42"
```
### Response
```json theme={null}
{
"id": 12345,
"filename": "document.pdf",
"workspace": {"id": 42, "name": "My Workspace", "workspace_type": "custom"},
"summaries": [],
"title": "document",
"extension": "pdf",
"status": "pending",
"status_vision": null,
"created_at": "2025-03-01T10:30:00Z",
"updated_at": "2025-03-01T10:30:00Z",
"total_pages": 0,
"tags": [],
"created_by": {"id": 1, "first_name": "Jane", "last_name": "Doe", "username": "jdoe"},
"upload_session_uuid": "550e8400-e29b-41d4-a716-446655440000",
"external_metadata": null,
"message": "File queued for processing"
}
```
## Upload Parameters
### Required Parameters
| Parameter | Type | Description |
| -------------- | ------- | ------------------------------------------- |
| `file` | binary | The file to upload |
| `workspace_id` | integer | Workspace where the document will be stored |
### Optional Parameters
| Parameter | Type | Description |
| ---------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `title` | string | Custom title for the document (defaults to filename without extension) |
| `filename` | string | Override the uploaded filename |
| `parser` | string | Specify ingestion pipeline (e.g., "v2.2.1", "v2.1") - defaults to automatic selection |
| `tags` | array of integers | Tag IDs to assign to the document on upload (tags must belong to your company and you must have permission to use them) |
### Examples with Optional Parameters
**Custom title and tags:**
```python theme={null}
response = requests.post(
f"{base_url}/api/v3/files",
headers={"Authorization": f"Bearer {api_key}"},
files={"file": open("Q4_report.pdf", "rb")},
data={
"workspace_id": 42,
"title": "Q4 Financial Report 2025",
"tags": [1, 2] # Tag IDs
}
)
```
**Custom parser:**
```python theme={null}
response = requests.post(
f"{base_url}/api/v3/files",
headers={"Authorization": f"Bearer {api_key}"},
files={"file": open("technical_doc.pdf", "rb")},
data={
"workspace_id": 42,
"parser": "v2.2.1"
}
)
```
## Tracking Upload Status
After uploading, files are processed asynchronously. Track their progress using the file ID.
### Check Individual File Status
```python theme={null}
file_id = 12345
response = requests.get(
f"{base_url}/api/v3/files/{file_id}",
headers={"Authorization": f"Bearer {api_key}"}
)
status = response.json()["status"]
print(f"Processing status: {status}")
```
### Understanding Status Values
| Status | Description |
| ---------- | --------------------------------------------------------- |
| `pending` | File uploaded, waiting to be processed |
| `parsing` | Currently being parsed and processed |
| `embedded` | Successfully processed and available for search |
| `failed` | Processing failed (check `status_detail` field for error) |
## Batch Upload: Multiple Files
When uploading multiple files, Paradigm automatically creates an **upload session** to group your files together. Files are queued and processed asynchronously in the background, allowing you to upload large batches without waiting for processing to complete.
Each file upload returns an `upload_session_uuid` that you can use to track all files in the batch. The upload session handles rate limiting and ensures efficient processing of your documents.
For uploading many files efficiently, use the provided batch upload script or implement your own concurrent upload logic.
### Track All Files in a Batch Upload
After uploading multiple files, you can filter by the `upload_session_uuid` returned in each upload response:
```python theme={null}
upload_session_uuid = "550e8400-e29b-41d4-a716-446655440000"
response = requests.get(
f"{base_url}/api/v3/files",
headers={"Authorization": f"Bearer {api_key}"},
params={"upload_session_uuid": upload_session_uuid}
)
files = response.json()["results"]
for file in files:
print(f"{file['filename']}: {file['status']}")
```
This is particularly useful when monitoring the progress of batch uploads.
### Using the Batch Upload Script
Production-ready async batch upload script with concurrent uploads, progress tracking, and resume capability.
**Requirements:**
* Python 3.10 or higher
* [uv](https://docs.astral.sh/uv/) — dependencies are installed automatically when running with `uv run`
**Basic usage:**
```bash theme={null}
uv run batch_upload_v3.py \
--api-key="your_api_key" \
--base-url="https://paradigm.lighton.ai" \
--files-dir="/path/to/documents" \
--workspace-id=42
```
**With options:**
```bash theme={null}
uv run batch_upload_v3.py \
--files-dir="/path/to/documents" \
--workspace-id=42 \
--batch-size=20 \
--max-fails=5 \
--tags=1,2,3 \
--state-file="upload_state.json"
```
**Upload only specific file types:**
```bash theme={null}
# Only upload PDFs and Word documents
uv run batch_upload_v3.py \
--files-dir="/path/to/documents" \
--workspace-id=42 \
--include-extensions=pdf,docx,doc
# Upload all files except temporary files and system files
uv run batch_upload_v3.py \
--files-dir="/path/to/documents" \
--workspace-id=42 \
--exclude-extensions=tmp,log,.DS_Store,.gitkeep
```
### Script Arguments
| Argument | Description | Default |
| ---------------------- | --------------------------------------------------------------------------- | ----------------------------- |
| `--api-key` | Paradigm API key (or set `PARADIGM_API_KEY` env var) | Required |
| `--base-url` | Paradigm instance URL (or set `PARADIGM_BASE_URL` env var) | `https://paradigm.lighton.ai` |
| `--files-dir` | Directory containing files to upload (scans recursively) | Required |
| `--workspace-id` | Workspace ID where files will be stored | Required |
| `--batch-size` | Number of concurrent uploads (max: 50) | `10` |
| `--max-fails` | Stop after N failures (must be >= 1) | `1` |
| `--tags` | Comma-separated tag IDs to apply to all files | None |
| `--state-file` | JSON file to track progress and enable resume | None |
| `--include-extensions` | Only upload files with these extensions or filenames (e.g., `pdf,docx,txt`) | None (all files) |
| `--exclude-extensions` | Skip files with these extensions or filenames (e.g., `tmp,log,.DS_Store`) | None |
### Script Features
* **High throughput** - concurrent uploads optimized for speed (default: 10 concurrent, max: 50)
* **Recursive scanning** - automatically finds all files in subdirectories
* **Progress tracking** - real-time progress bar with upload statistics
* **Error resilience** - stops after first failure by default (configurable with `--max-fails`)
* **Smart error handling** - automatically skips files with unsupported extensions and files >100MB (doesn't count as failures)
* **Resume capability** - use `--state-file` to resume interrupted uploads
* **Bulk tagging** - apply tags to all uploaded files automatically
### Example: Resume After Interruption
If your upload was interrupted, resume using the state file:
```bash theme={null}
# First attempt (interrupted)
uv run batch_upload_v3.py \
--files-dir="/path/to/documents" \
--workspace-id=42 \
--state-file="upload_state.json"
# Resume (skips already uploaded files)
uv run batch_upload_v3.py \
--files-dir="/path/to/documents" \
--workspace-id=42 \
--state-file="upload_state.json"
```
## Migration from API V2
If you're currently using the V2 upload API, here's what changed:
### What's Different
**V2 required two steps:**
1. Create an upload session: `POST /api/v2/upload-session`
2. Upload files to the session: `POST /api/v2/upload-session/{uuid}`
**V3 is a single step:**
* Just upload directly: `POST /api/v3/files`
### What Was Removed
The following concepts from V2 are no longer needed:
* **Upload session management** - Sessions are created automatically in the background
* **Collection types** - Simply use `workspace_id` instead of `collection_type` and `collection`
* **OCR configuration** - Processing settings are applied automatically (or override with `parser` parameter)
* **Session activation/deactivation** - Handled automatically
* **`purpose field`** - No longer needed
### What's New
V3 adds new capabilities not available in V2:
* **Direct tag assignment** - Use the `tags` parameter to tag documents on upload
* **Simplified status tracking** - Filter files by `upload_session_uuid` to track batch uploads
### Tracking Progress
**V2:** Track session status with `GET /api/v2/upload-session/{uuid}`
**V3:** Filter files by upload session UUID:
```python theme={null}
# Get upload session UUID from upload response
upload_session_uuid = response.json()["upload_session_uuid"]
# Track all files in this batch
files = requests.get(
f"{base_url}/api/v3/files",
headers={"Authorization": f"Bearer {api_key}"},
params={"upload_session_uuid": upload_session_uuid}
).json()["results"]
```
The V3 API is more intuitive and requires less code while maintaining the same reliability and performance as V2.
# Alfred Frontier 5
Source: https://docs.lighton.ai/en/developer-resources/lighton-models/alfred-ft5
LightOn introduces Alfred-ft5, the latest high‑performance model built for organizations that prioritize raw quality, advanced reasoning, and best‑in‑class tool usage.
## **A high-performance model, optimized for real-world enterprise workloads**
Alfred-ft5 is designed for teams that **want the very best performance** LightOn can deliver today. It is built on top of a modern **32-billion-parameter vision–language architecture**, **fine-tuned by LightOn** to excel in production RAG and agentic workflows.
Beyond raw benchmark scores, Alfred-ft5 focuses on **robustness, reliability, and tool-centric behavior**: the model is trained and evaluated in realistic enterprise scenarios involving long contexts, multiple tools, and complex task decomposition.
Where Alfred-sv5 prioritizes **European origin and sovereignty**, Alfred-ft5 targets organizations whose primary concerns are **quality and capability**.
## **Technical elements**
In line with LightOn’s philosophy, the LLM is **one component** of a broader RAG and agentic stack. The real value lies in orchestration and retrieval. Still, for teams that need technical anchors, Alfred-ft5 offers:
* a **context window of up to 32,768 tokens** enabling rich, multi-document prompts while keeping latency under control,
* a **32B-parameter, vision–language architecture** capable of understanding both text and images for advanced multimodal workflows,
* **strong instruction-following** behavior tuned for enterprise documentation, procedures, and compliance scenarios,
* optimized **reasoning and planning** for multi-step tasks, including breaking down complex problems into actionable steps.
LightOn's toolset ensures the context passed to the LLM is as high-quality as possible, with state-of-the-art parsing models and information retrieval stack, complementing these strengths and making sure Alfred-ft5 shines in RAG-centric and agentic use cases.
## **Best-in-class tool use and agentic behaviors**
One of Alfred-ft5’s main differentiators is its **tool-calling performance**, particularly in **agentic setups powered by LightOn**: indeed, it offers improved **tool selection and argument construction**, reducing failed or ambiguous calls, as well as better **multi-tool coordination**, where the model must call several tools in sequence or in parallel.
The model is **fine-tuned specifically to support and enhance LightOn’s tool ecosystem**. This includes RAG pipelines, function-calling interfaces, and higher-level agents, so that Alfred-ft5 behaves as a reliable, predictable decision-making core instead of a generic chat assistant.
## **Frontier vs Sovereign: two complementary product lines**
LightOn structures its offering around two complementary model families:
* **Alfred-ft5**: for organizations that prioritize **top-tier performance, reasoning, and tool use**, independent of model origin.
* **Alfred-sv5**: for teams that must meet **European-origin** or similar sovereignty requirements, sometimes at the expense of using the single most capable global model.
Both families benefit from the same **LightOn R\&D expertise and evaluation pipelines**. This separation lets organizations choose a model line that aligns with their **risk, compliance, and performance priorities**, while keeping the rest of their RAG and agentic stack unchanged.
# Alfred Sovereign 5
Source: https://docs.lighton.ai/en/developer-resources/lighton-models/alfred-sv5
LightOn introduces Alfred-sv5, the latest iteration of its model designed for organizations where the European origin of the LLM is a requirement.
## **A European model, optimized for enterprise workloads**
Alfred-sv5 is built on a modern **24-billion-parameter architecture**, **fine-tuned by LightOn** to better align with the retrieval and orchestration pipeline.
The result is improved stability, more reliable outputs on enterprise data, and seamless integration within search, retrieval, and enterprise agent workflows.
Compared to Alfred 4.2, Alfred-sv5 5 improves upon an issue that could occasionally cause instabilities or looping behaviours. It now offers significantly **enhanced stability**, particularly for long, complex or highly structured queries.
## **Technical elements**
In line with LightOn’s philosophy, the LLM is **one component** of a broader RAG and agentic stack. The real value lies in retrieval and orchestration. Still, for teams who need technical touchpoints, Alfred-sv5 offers:
* a **context window of up to 32,768 tokens** enabling rich, multi-document prompts while keeping latency under control,
* improved **instruction-following** capabilities and reduced repetitive or looping outputs,
* strong support for **function calling and structured outputs**, enabling tighter integration with tools, agents, and enterprise systems.
These capabilities complement rather than replace the upstream work: indexing, embeddings, retrieval, filtering, and context composition.
## **Frontier vs Sovereign: two complementary product lines**
Alfred-sv5 addresses organizations that specifically require a **European-origin LLM**, even when other open-source models already provide complete confidentiality.
LightOn structures its offering around two complementary model families:
* **Alfred-ft5**: for organizations that prioritize **top-tier performance, reasoning, and tool use**, independent of model origin.
* **Alfred-sv5**: for teams that must meet **European-origin** or similar sovereignty requirements, sometimes at the expense of using the single most capable global model.
Both families benefit from the same **LightOn R\&D expertise and evaluation pipelines**. This separation lets organizations choose a model line that aligns with their **risk, compliance, and performance priorities**, while keeping the rest of their RAG and agentic stack unchanged.
## **A component of a RAG system, not the destination**
In a fully operational RAG system, the LLM is just **one component** among many: indexing, embeddings, retrieval, guardrails, agent workflows, and post-processing all play decisive roles.\
Alfred-sv5 positions itself as the **sovereign core model** within this broader pipeline without pretending to be the sole driver of system performance.
This combination—a well-designed RAG pipeline, a model fine-tuned for enterprise use, and a choice between sovereign or high-performance options—allows organizations to balance political requirements, regulatory constraints, and real-world impact.
# First Login and Interface Navigation
Source: https://docs.lighton.ai/en/getting-started/first-login
Learn how to access Paradigm for the first time and navigate the main interface elements.
Use your company's SSO or the activation link received via email with the subject *Welcome to Paradigm*.
If you can't find the activation email, check your spam folder. The email contains important login credentials and may take a few minutes to arrive.
The Paradigm interface consists of several key elements:
## Central Area: Conversation Space with the Assistant
* Input field at the bottom to ask your questions
* Tool buttons to access advanced features (see Tools section)
* Option to import documents directly into the conversation
## Left Sidebar: Access to Main Features
* *+ new chat* button
* Discussion history
* Analytics (usage statistics)
* Documents
* Chat settings (pre-prompts, see dedicated section)
* User profile (to modify your personal information)
## Top Dropdown Menu: Select the Model to Use
By default, only one model is available: the latest version of Alfred offered by LightOn.
The available models depend on your organization's configuration. Contact your administrator if you need access to additional models.
# Welcome to LightOn Paradigm Documentation
Source: https://docs.lighton.ai/en/index
Your comprehensive guide to mastering LightOn Paradigm - the enterprise AI platform that transforms how your team collaborates with artificial intelligence.
**Paradigm** is LightOn's enterprise AI platform designed to revolutionize how your organization leverages artificial intelligence. This comprehensive documentation will guide you from your first login to advanced AI-powered workflows.
## Get Started Based on Your Role
Start here for your first login, interface overview, and essential setup steps
Master the tools and workflows that will boost your daily productivity
Configure users, manage data sources, and oversee your Paradigm deployment
Integrate Paradigm's AI capabilities into your applications via our powerful APIs
## What is Paradigm?
Paradigm combines cutting-edge large language models with your organization's knowledge base, enabling intelligent document analysis, contextual conversations, and powerful automation workflows - all within a secure, enterprise-grade environment.
Whether you're a new user, administrator, or developer, our documentation provides clear paths to unlock Paradigm's full potential for your specific role.
## Core Capabilities
Discover what makes Paradigm the ideal AI platform for your enterprise:
Context-aware conversations powered by advanced AI models with your organizational knowledge
AI-driven analysis, summarization, and insights from your document repositories
Connect Google Drive, SharePoint and ServiceNow seamlessly
Auto-provisioning accounts, SSO integration, and granular access controls for your peace of mind
Automated document processing and analysis thanks to our API
Comprehensive usage analytics, audit trails, and performance monitoring
## Popular Getting Started Guides
Complete walkthrough from login to your first successful AI conversation
Learn to organize, upload, and manage documents for optimal AI interactions
Understand when and how to use each AI tool for maximum effectiveness
Pro tips, common solutions, and optimization strategies from our experts
## Need Help?
Find troubleshooting guides, report issues, or contact our support team for personalized assistance
***
**Pro Tip**: Bookmark this page and use it as your navigation hub. Each section is designed to get you productive quickly, whether you're exploring features or implementing advanced configurations.
# Releases
Source: https://docs.lighton.ai/en/releases/index
Product updates and announcements
# Xenial Xerus
This release introduces Workspaces API V3, a new API surface for managing teams and membership at the instance and company level. Retrieval is now more accurate, and directly accessible via a new `POST /api/v3/retrieve` endpoint. The Agent gains a Document Finder tool for targeted file lookup mid-conversation.
### Agent & Chat
* Document Finder tool — agents can now search for and surface specific documents during a conversation.
* `X-Skip-Final-Answer` header — skip LLM answer generation and return tool results directly, useful for programmatic pipelines.
* Per-step execution timings on tool calls for better observability.
* Group owners can manage agents scoped to their groups.
### Retrieval & Search
* Improved reranking with multi-signal fusion for higher-quality results.
* Improved lexical preprocessing for better hybrid queries results
* Improved reranking speed
### Document Processing & OCR
* OCR V3 endpoint with improved VLM prompts and a 16-page-per-request limit.
* New markdown chunker optimized for VLM output, with hierarchical chunking by default.
* VLM loop detection with automatic retry on malformed parsing.
* Chunks are now stream-processed in fixed-size windows to prevent out-of-memory issues on large documents.
* Upload flow simplified — manual parser selection has been removed.
### Authentication & SSO
* LDAP authentication support, including blocking password changes for LDAP-managed accounts.
* OpenID Connect (OIDC) single sign-on with improved login flow reliability.
### MCP & Tools
* MCP servers can now be scoped to specific user groups.
* Pattern filtering on automatic web source registrations from MCP servers.
### Content Types & Attributes
* Document attributes are now included in generation context and chunk responses.
### Connectors & Data Sources
* Sharepoint and All connectors now emit a standardized `full_path` metadata field.
* New API endpoints for listing imports and upload sessions, with automated daily failure reports.
* Proper file deletion handling during connector sync updates.
### Workspaces
* Full workspace management via the V3 API: create, update, list workspaces and manage workspace memberships.
* Separate workspace scopes for instance-level and company-level administration.
* Configurable `allow_user_workspace_creation` policy.
* Users can list the workspaces they belong to; workspace owners can list their members.
* Deleting a workspace returns 410 Gone for clear client-side handling.
### UI Improvements
* Document Finder UI with responsive tool result display.
* File details slideover with integrated document viewer and tabbed navigation.
* Light / dark / system color mode selector.
* Improved PDF viewer with per-page aspect ratios for mixed-size documents.
* New agent context selector in the chat prompt bar.
### API Consistency
* Files V3 field renames: `uploaded_at` → `created_at`, `filename` → `name`, `file_size` → `size`.
* V3 endpoints for chat completions and embeddings (V2 is now deprecated).
* Separate OpenAPI schemas for `/instance` and `/company` V3 endpoints.
* Standardized error classes, error codes, and OpenAPI error responses across all endpoints.
### Bugfixes & Performance Improvements
* Faster document deletion via pre-deletion of related rows and nightly batch scheduling for vector cleanup.
* Debounced storage recalculation on bulk deletes.
* Paginated vector inserts with increased gRPC timeout for large ingestions.
* Signal-based cache invalidation for slow endpoints.
* Optimized SQL on the collection detail endpoint.
* Reduced redundant Redis calls through permission caching on user objects.
* Skip unnecessary filter clauses on full-collection queries.
* Async HTTP client scoped per context to prevent cross-loop errors in background workers.
# Wise Wolf
Paradigm ships a new OCR model for document parsing, a Multi-Agent system to route conversations to specialized assistants, and tag-based filtering in chat. On the admin side: SSO auto-provisioning, granular authentication controls, and tighter security defaults. Developers get a full Agents API and document-level signatures for duplicate detection.
### **For Users (Chat & Search)**
*Clearer navigation, more relevant search, and smarter interactions.*
* **Parsing** : The LightOnOCR v2 model is now in charge of parsing during ingestion, delivering SOTA understanding of your documents whether they are handwritten, scanned or natively digital
* **Multi-Agent: choose the right assistant for every task.** You can now select from multiple specialized Agents when starting a conversation. Browse available Agents, check their details, add favorites for quick access, or start a conversation directly from the discovery page. [Learn more](https://paradigm-academy.lighton.ai/en/user-guides/chat-features/agents)
* **Filter documents by tags during conversations:** You can now filter documents by tags during a conversation, making it easier to find and use the most relevant information in each turn. [Learn more](https://paradigm-academy.lighton.ai/en/user-guides/chat-features/workspace-chat-scope)
* **Content deduplication in Document Search results :** by default strict-duplicates documents are discarded in the answering pipeline to allow for more relevant content being used in the answers
* **Seamless external tool integration:** Compatibility with external AI tools using OpenAI-style tool calling is now fixed, enabling models to autonomously choose and execute tools based on context, improving automation and responsiveness.
* **Modernized chat interface:** We've refreshed the chat interface for a cleaner, more intuitive experience: the side panel now features a streamlined design with improved button visibility, a dedicated search section, and easier access to agents. Prompt buttons are now clearer with labels and better visual feedback, while follow-up suggestions and reasoning buttons are more consistent and easier to use.
* **Practical Improvements:** Improved workspace selector (alphabetical sorting + search), fixed text overflow when copying code, and hidden '+' icon in groups to prevent accidental user creation.
### **For Admins**
*Simplified management, enhanced security, and clearer configuration.*
* **Multi-Agent management:** Create and configure multiple Agents per organization, each with its own instruction, model, tools, MCP servers, and document scope. Assign Agents to specific groups to control who accesses which documents — a key lever for data governance. [Learn more](https://paradigm-academy.lighton.ai/en/administration/agent-management/agent-settings)
* **SSO auto-provisioning for new users:** New users logging in via SSO for the first time will now be automatically created and assigned to their company, streamlining access without manual setup.
* **Authentication method control:** Enterprise admins can now control authentication methods for their company—choosing between Password, SSO, or both—based on security policies.
* **Upload Session management :** you can now access upload sessions statistics in the admin (status, number of docs etc.) and manage them at this granularity.
* **Security:** API access is immediately revoked upon account deactivation. Additionally, users are now assigned the MEMBER role in their private groups instead of OWNER, aligning with the principle of least privilege.
* **User management:** User management: You can now activate users directly when creating them via the API, and see a user's effective role (Viewer, Editor, or Owner) per workspace directly in the user page from the admin panel.
* **Simplified configuration:** Companies are now always displayed in alphabetical order in the Admin, and missing descriptions for 4 storage configuration keys have been added to reduce confusion and [new theme management](https://paradigm-academy.lighton.ai/en/administration/organization-setup/themes-management).
### **For Developers (Tech & Integration)**
*More robust API, smoother integration, and improved performance.*
* **Agents API:** Specify which Agent to use when creating a session via a dedicated endpoint. List available Agents and manage favorites programmatically. Learn more →
* **API & Management:** You can now update your personal settings directly through the API (preferred language, agent instructions, compliance preferences) and create multiple API keys with the same name without errors. The user profile endpoint has been improved to return a clearer, more detailed response.
* **Document-level signatures** are now available through the API, allowing for external duplicate or near duplicate detection use-cases.
* **Backend/Performance:** Improved performance for external AI models by using their native reasoning format, and fixed pagination issues on the files API to avoid 404 errors.
### **Bug Fixes**
* **Interface:** Fixed text overflow when copying code, hidden empty sections on the Config Key page, and fixed the user groups dropdown in the Admin Dashboard.
* **System:** Fixed 500 error during API key creation, and improved translation detection to avoid incorrectly flagging empty strings or sample entries as untranslated.
# Victorious Vicuna
This release marks a major turning point for the user experience with the default deployment of our **new interface** and the **Reasoning Agentic Chatflow**.
## For Users (Chat & Search)
*The chat experience becomes more transparent and fluid.*
* **New Unified Interface**: Enjoy a modernized design (updated typography, prompt area) and clear error displays for better readability.
* **DocFinder & Semantic Search**:
* **Natural Language Understanding**: The document list now integrates the power of LightOn’s search engine. Move beyond basic title searches: ask your questions in natural language to find your files.
* **Proof of Relevance**: The interface now displays the exact text snippets that justify why a document appears in your results.
* (Note: *This feature requires activation by an admin via Config Keys*).
* **Multilingual Experience**: Query suggestions are now more robust, diverse, and better adapted to your language.
* **Practical Improvements**:
* **Clipboard**: Fixed image pasting in the chat.
* **Web Sources**: Better display management with "view more/less" buttons for cited sources.
## For Admins
*More control, enhanced security, and simplified management.*
* **Admin Interface Restructuring**: The structure has been redesigned with a dedicated section for V2 Agents and a clear separation for V1 (Legacy).
* **Advanced Management**:
* **Access Audit**: Visualize inherited access (via groups) directly on a user's profile.
* **Document Deletion**: The process is smoother and no longer generates permission errors.
* **Enhanced Security**:
* **Authentication**: Improved session and token management, plus added security headers (CSP/HSTS).
* **MCP Tools**: Increased security with masked sensitive URLs and strict isolation of MCP tools between different Companies.
## For Developers (Tech & Integration)
*Performance, stability, and new endpoints.*
* **API V3 & Programmatic Management**:
* New secure REST endpoints for full management of Companies, Users, and Groups.
* User Roles and Tags management is now possible directly via the API.
* **Knowledge & Embeddings**:
* **Reliability**: More robust embedding migration with automatic retry attempts and status tracking.
* **Accuracy**: Improved semantic search thanks to an expanded context window.
## Bug Fixes
* **Interface**: "Vision" images display correctly; Error messages are now displayed in black (less alarming); Redacted text is clearly visible in Light Mode.
* **System**: Automatic cleanup of orphaned sessions and Git history to lighten the backend; Fixed the document download button.
This release introduces major improvements to the Chatflow V2 experience, powered by two new models Alfred-Frontier 5 and Snowflake Artic L v2, significant advancements in AI reliability with the new Adaptive Clarification Tool, and a dedicated focus on API maturity for developers. We have also refined the administration interface for better governance and security.
## Reasoning Mode (Chatflow V2)
The reasoning mode has been significantly upgraded for stability, usability, and international support.
* **Adaptive Clarification (Zero-Hallucination Policy):**
* We are introducing a new cognitive safety mechanism. When the model detects ambiguity or missing information, it triggers the **Adaptive Clarification** tool instead of generating a potentially incorrect answer.
* **Self-Reflection:** The model pauses to analyze why it is blocked.
* **Clarification:** It proactively asks the user for details rather than guessing.
* **Manual Reasoning Cancellation:** Users can now stop an ongoing reasoning process directly from the UI with clear confirmation messages.
* **Structured Output:** The Chatflow V2 API now supports structured output for predictable and robust integrations.
* **Persistent Context:** Follow-up questions now maintain the original context and manually attached documents.
* **Permissions & Safety:**
* **Alignment:** V2 now honors the same Agent Admin permissions as V1 (MCP Servers, Threads, Tools, Tool Calls, Answer Flags).
* **Drafts & Upload Safety:** Chat drafts and document uploads are preserved across page refreshes.
* **Long Query Protection:** The UI prevents submission of messages exceeding the length limit.
* **User Interface Enhancements:**
* **Visuals:** Added automatic thumbnail generation for image file artifacts.
* **Clickable URLs:** Model responses now render URLs as clickable links.
* **Reasoning UI:** Enhanced the display of MCP Tool names for clarity.
* **Bi-directional Text:** Improved handling of threads containing multiple text directions (LTR/RTL).
* **Error Management:** Replaced red error triangles with orange warning triangles for non-critical errors and improved upload error handling (toasts).
***
## Admin
We have refined the administration interface to streamline delegation and enforce stricter security policies.
* **New "Team Owner" Role:** Users with this role gain access to the admin panel specifically to manage the teams they own, streamlining delegation without compromising system-wide security.
* **Security & Access Control:**
* **MCP Restrictions:** System Admins can now restrict Third-Party Tools (MCP) visibility to specific companies.
* **SSO Enforcement:** New option to prevent SSO-enabled users from authenticating with passwords.
* **Profile Restrictions:** Admins can now restrict users from editing their own first and last names.
* **Workspace Management:**
* **Linking:** Custom workspaces can now be linked to Company Teams during the edition process.
* **Creation Control:** Restricted workspace creation to "Custom" types only.
* **Deletion:** Admins can now permanently delete workspaces via the API.
* **Upload Control:** New `document_upload_method` setting to restrict manual uploads in workspaces synchronized with datasources.
* **System Administration:**
* **Company Page:** Reorganized for readability with tooltips and added a "Team Count" indicator linking to a filtered list.
* **User Roles:** Renamed "UserGroups" to **"UserRoles"**.
* **Translations:** Exported files now include string keys with no values to ensure complete localization.
* **ML Admin UI:** Now displays a "Parser" column and improved Healthcheck Gateway status.
***
## Models & Knowledge
We are expanding our model capabilities and improving how knowledge is ingested and retrieved.
* **New Model: Alfred-Frontier 5:** Added support for **Alfred-ft5**, our latest Vision Language Model (VLM), providing better raw quality, advanced reasoning, and best-in-class tool usage.
* **New Model: Snowflake Artic L v2:** Added a new text embedding model to improve retrieval performance and ensure higher quality context is supplied to our VLMs.
* **Search & Parsing:**
* **Search API:** Improvements to the Document Finder v3 API allow for listing documents matching more criteria, including semantic query search.
* **Document Filtering:** Users can now filter documents by tags in the management view.
* **Ingestion Resilience:** Improved fault tolerance for PDF conversion and file chunking to prevent system crashes during ingestion failures.
***
## API
A focus on maturity and documentation to help developers integrate Paradigm more effectively.
* **LLM-Ready Documentation:** Comprehensive update to API docs (Mintlify) with detailed examples and best practices.
* **Thread Component V3:** Threads migrated to a standalone component with a REST-first design.
* **SCIM Support:** SCIM component endpoints are now fully visible and documented in V2/V3 Swagger.
* **Tags API:** New endpoints for tag discovery and listing with document counts.
***
## Backend
* **SMTP Configuration:** Added support for SMTP connections without authentication.
* **Celery & Config:** Updated Celery workers to use standard K8s ConfigMaps and `supervisord.conf`. Sentry context propagation has been added to enterprise squad Celery tasks.
* **LiteLLM:** Updated LiteLLM version for better compatibility with fallback mechanisms.
***
## Bug Fixes
* **Audit Logs:** Fixed a 503 error that occurred when exporting audit logs to CSV.
* **Team Selection Scope:** Fixed an issue where editing a team member showed all instance users; the selection is now correctly scoped to company users only.
* **Admin Activation:** Fixed a bug allowing activation of expired user accounts.
* **Permission Selector:** Restored the missing permission type selector in the Team Members section.
* **API:** Fixed an issue where some 401 responses were incorrectly transformed into 403s.
The Tender Tiger release introduced a new Teams feature as the new foundation for resource access control, and brings powerful improvements across Chat, and Admin features — with a strong focus on usability, governance, and robustness.
Let’s dive in. 👇
## Teams & Groups Management
We've introduced Teams as the new foundation for access control and making workspace management clearer, more scalable, and more secure.
* Three Team Types:
* Company Team: Automatically includes all company members
* Private Team: Personal team for each user's private workspace
* Custom Team: Manually created teams for departments, projects, or groups
* 🔄 Team-Based Access Model: Users now access workspaces through team membership instead of direct assignment — enabling better governance at scale.
* 🧩 Assign Workspaces to Teams: Admins can assign workspaces to entire teams, ensuring consistent access control across user groups.
* 📄 Document Manager Role: Users with the Document Manager role can upload and delete documents in any workspace they have access to — whether through team membership or direct assignment.
* 🔒 Enhanced Private Workspace Controls: Private workspaces remain strictly personal with automatic team management.
* 👥 Streamlined Permissions: Simplified team member management with "Member" as the default role for clarity.
## Chat Experience
This release takes the chat experience to the next level — smoother, smarter, and more reliable.
* 🗂️ Unified Workspace Labels: Personal and company workspaces now share a consistent label structure.
* 🧭 Improved Session Handling:
* “New Chat” now starts a clean session — no more unwanted document carry-over.
* All previously attached documents are now properly recognized as toolcall attachments.
* ⚙️ Admin Controls: Added a toggle to enable/disable the “Share” option in chat responses.
* 🔡 Chat Input Enhancements: Input box auto-resizes with your text for a fluid writing experience.
* 💾 Error Resilience: Clear, user-friendly error messages now appear when the backend is temporarily unavailable.
* 📜 Session Sidebar Improvements:
Removed session icons and history when the navbar is collapsed.
* 🗃️ Workspace Sorting: Custom workspaces are now listed alphabetically.
* 💬 ChatFlow V2 (Beta):
* Introduced multi-tool Agent mode.
* Sessions can now be searched, renamed, or archived directly from the sidebar.
* Implemented drag & drop and copy-paste of documents.
* Added suggested follow-up questions and scoping to specific workspaces.
* Reimplemented V1’s admin invisibility mechanism for sessions and documents.
* Selecting a document from the Documents page no longer auto-scopes the new chat.
* Added the ability to select different models directly in the chat interface.
* Clickable URLs now appear in model responses.
* MCP servers are now separated in a dedicated section of the tool dropdown.
## 📚 Knowledge
* 🧹 Model Type Cleanup: Simplified and standardized model parsing types.
* 🔄 Knowledge Graph Tasks: Major orchestration refactor for improved reliability and performance.
## 🛠️ Admin & System
This release brings significant security, observability, and compliance updates.
* 🧮 MLRequest Maintenance:
* Fixed MLRequest admin page.
* Added regular background job to clean up old MLRequests.
* ⚠️ User Activation Guardrails: Prevent activation of expired accounts with clear error messages.
* 🧑💼 SSO Management: Fixed an issue preventing SysAdmin/DPO Admins from deleting SSO users.
* 📊 Audit Logs:
* Hidden logs remain hidden in Excel exports, respecting data segregation.
* Fixed export errors (503) and ensured company-level filtering for DPO exports.
* 🔧 API Key Expiration: Added configuration options to set default expiration at both instance and company levels.
* 🏗️ Company Admin Page: Complete reorganization for better clarity and efficiency.
* 🔍 Fix MCP failure with Mintlify.
* ⚙️ Observability: Added monitor\_celery for enhanced visibility into Django and Celery logs.
## ⚙️ API & Documentation
* 🧾 Endpoint Coverage Completed:
* Added full documentation for Files, ChatFlow, AI Model, and FileSearch endpoints.
Completed Feedbacks endpoints description.
* 🔐 Security Enforcement: The system now prevents cross-company document uploads via unauthorized API keys.
* 📡 Proxy Documentation: Updated “Using the Paradigm API through a Proxy in Python” (FR/EN) to remove OpenAI SDK dependency.
* 🗂️ DocSearch API: Added an option to bypass query reformulation.
* 🧰 OpenAPI: Fixed multiple warnings and validation errors for cleaner developer experience.
* 📄 Review of “Get the list of uploaded documents” (FR/EN) to align with new SDK-free structure.
## 🧠 New Models
* 🧭 Alfred Sovereign 5 (LLM): Introducing the newest generation of our flagship model — faster, smarter, and fully sovereign.
* 🖋️ LightOnOCR: New OCR engine with improved parsing accuracy and multilingual support.
## 🐛 Other Fixes
* Fixed minor UI inconsistencies across modals and permission menus.
* General stability, performance, and accessibility improvements throughout the platform.
## New Features
### Automatic Tool Routing Improvement
Tool routing modification for an even more relevant tool choice for each query when documents are attached.
### DocAnalysis Performance Improvement
Direct document manipulation for extraction, synthesis or summary is easier, faster and more reliable.
### Arabic Language Support
The user interface now fully supports Arabic, including RTL layout, menus, and labels.
### Custom Digital Adoption Platform Tag
System administrators can now insert a tag at the tenant level without requiring access. [Documentation](/en/administration/monitoring-and-analytics/custom-scripts)
### Structured Output for RAG API Endpoint
The document search endpoint has been updated to allow specifying instructions for answer formatting and structured output, including JSON and Regular Expression constraints. [Documentation](https://paradigm.lighton.ai/api/schema/swagger-ui/#/Files/api_v2_chat_document_search_create)
## Improvements
### **Chat Interface**
* **Chat Tools Menu Redesign**: More compact, intuitive and visually consistent.
* **Document Preview from Chat**: Documents attached above the input box are now clickable to display a preview.
* **Analytics Page Removal**: Removal of the Analytics page in favor of a comprehensive set of API endpoints allowing clients to build their own integrated dashboards. [Documentation](/en/administration/monitoring-and-analytics/reporting)
* **Share Button Improvement**: The share functionality now copies only the response content, without including the URL
* **Traffic Overload Information Banner**: An information banner now displays in case of traffic overload to inform users.
* **Session Expiration Improvement**: Users are now automatically redirected to the login page with an explicit message when their session expires
* **Web Sources Security Improvement**: Links to web sources no longer open URLs directly. A click now displays a warning popup inviting the user to verify the URL and offering the ability to copy it.
* **Password Creation**: Improved validation and error messages.
### **Admin**
* **MLRequest Admin Page**: Improved performance and eliminated access errors.
* **Workspace Deletion**: Deleting a workspace automatically removes associated collections and documents.
* **Ephemeral Mode**: Addition of a tenant-level setting allowing system admins to globally disable ephemeral mode for all companies
* **Support and Debug Improvements**: Several improvements have been made to the admin interface to facilitate diagnosis and accelerate problem resolution:
* **Parser Visibility**: The parser used for each document is now directly displayed in the session detail page.
* **Session Detail Page**: Content reorganized for better readability and more efficient support responsiveness.
## Fixes and Security Enhancements
* **Icons Integration**: Interface icons are now integrated directly into the application rather than loaded via external Iconify servers, eliminating external calls.
* **ML Logs Isolation Improvement**: Strengthened record isolation for better data segmentation.
* **Audit Logs Export Optimization**: Switched to asynchronous export with temporary download links to avoid 503 errors on large volumes.
* **API Authentication Consistency**: Fixed inconsistent authentication behavior across JSON endpoints.
## Documentation
* Full Product & API Documentation migrated to a new, centralized documentation platform.
* Paradigm Academy redesigned with interactive learning modules.
## New Features
### Temporary Access Requests for Anonymized Documents & Sessions
Support can now request **temporary access** to anonymized documents or sessions for debugging.
* A **Request Access** button is available in the admin interface.
* Data owners are notified by email and must approve the request.
* If approved, the document/session is de-anonymized for a defined time (e.g., 48 hours).
* Access automatically expires and the content is re-anonymized, with optional reminders before expiry.
[Learn more](/en/administration/monitoring-and-analytics/debugging-access-requests)
### Workspace-Level Scoping for Search
You can now scope your assistants and searches to **workspaces**, rather than selecting documents.
* In the chatbox, a new **workspace scoping button** lets you quickly restrict searches and answers to specific workspaces.
[Learn more](/en/user-guides/chat-features/workspace-chat-scope)
### Automatic Document and Workspace Summaries
Every newly uploaded document is now automatically summarized asynchronously.
* Summaries are visible in the **document/workspaces list**.
* This feature improves **search quality** and **model responses**.
* Workspaces summaries also give you an overview of each workspace content at a glance.
[Learn more](/en/user-guides/documents-management/automatic-summaries)
### Enhanced Document List with Filtering & Columns
The **document list** has been redesigned for greater flexibility:
* Filter by **owner** and **status**.
* Customize which columns are displayed (document name, owner, upload date, usage count).
* Use the sidebar to filter by **workspace name**.
[Learn more](/en/user-guides/documents-management/documents-workspaces)
### Work with Selected Document(s)
From the document list, users can now select one or multiple documents and click the **"Explore Selected Document(s)"** button.
* Opens a new chat session preloaded with the chosen documents.
* Allows users to directly ask questions, explore content, or analyze the selected material.
* Simplifies the workflow from document selection to conversational exploration.
[Learn more](/en/user-guides/documents-management/documents-workspaces)
### Complete UX Redesign for Document Import & Selection
The file upload and selection flow has been completely rebuilt for a smoother experience:
* Drag & drop files, paste from clipboard, or select via the paperclip button.
* Upload progress is displayed directly in the chatbox, with **file previews**.
* The **send button** is disabled until all files are processed.
* Click on files to view details in a **side drawer**.
* Attach existing files seamlessly from the same interface.
[Learn more](/en/user-guides/chat-features/upload-documents-chat)
### Company-Level Auto-Tagging of Documents
A new **asynchronous tagging mechanism** runs during off-peak hours:
* Company admin scan give a list of tags and their description
* The system flags your documents according to their content and these descriptions.
* This is configurable at **Company level**.
### Suggested Follow-Up Questions Based on Source Documents
When you ask a question and the model uses documents to generate the response, Paradigm now **suggests relevant follow-up questions** based on those documents.
* Suggestions appear under the model's answer.
* They are tailored to the **specific content of the documents**.
* This helps users dig deeper, uncover additional insights, and improve knowledge exploration.
[Learn more](/en/user-guides/chat-features/suggested-queries)
***
## Improvements
* **Longer Pre-Prompt Instructions**: Increased character limit from **500 → 1,500** for user chat instructions.
* **Faster /documents Endpoint**: Reduced page load time for a smoother user experience.
* **Audit Logging for Permission Changes**: Expanded logging for **user role and permission updates**, improving security and accountability.
* **Chat Response Exports**: "Session UID" and "Chat Type" fields now populate correctly.
* **Clickable Cards in Attach Files Modal**: Entire cards are now selectable, not just checkboxes.
* **`Refactored /api/v1/user/profile/`**:
* Returns `404` instead of `403` for unauthenticated users.
* Endpoint usage at login step reviewed for better design.
* Switched to `POST` to avoid caching issues.
* **Improved Forgot Password Flow**: Email addresses are no longer visible in reset URLs; replaced with hashed IDs for privacy.
* **Cancel Long-Running Document Analysis**: Users can now stop document analysis tasks that take too long.
***
## Bug Fixes
* **Chat Session Display for Company Admin + DPO**: Fixed missing chat messages when accessing workspaces, aligning behavior with System Admins.
* **Legal Document Link**: Terms and Conditions link now redirects correctly instead of showing a 404.
* **Duplicate New Chat Entry**: Fixed duplicated session entries when starting a new chat with no existing sessions in the current period.
* **Select All / Deselect All Behavior**: Now correctly applies to the full document list in the file selector.
* **Theme Visibility Restriction**: Themes are now visible only within a client's infrastructure, ensuring proper isolation across instances.
* **Log Retention Period Days**: Fix Log retention period update to delete logs in accordance.
* **Inconsistent User Role Verification in Admin Console**: Fix to make user role permission displayed in the admin console are now consistent across different accounts.
* **Error 500 When Accessing/Editing Company Theme in Production**: Fix to access or edit the company theme through the admin console.
* **Incorrect User List Display When Adding a Workspace**: The system now displays only the users belonging to the company where the Workspace is being created.
* **Password creation general error message**: The backend now sends appropriate error messages if password rules are not followed when creating a new user.
## 1. Document Handling Enhancements
### 🌐 Web Scraping Datasource (Beta)
Users can now ingest website content as a structured knowledge source. Core features include:
* Intelligent crawling and markdown extraction.
* Configurable by users via URL input and webpage specific parameters.
* Detect and retrieve linked files of supported filetypes.
* All extracted content is ingested for availability across tools in the platform.
### 📄 HTML, XHTML, TXT Format Support
Uploading `.html`, `.xhtml`, `.txt` documents is now fully supported. This resolves previous compatibility gaps, especially for legacy or low-footprint document pipelines.
* Error handling for unsupported formats has been improved.
* Datasources automatically syncs new format type
### 🧠 Smart Parsing
Document ingestion now automatically selects the optimal parser based on file type. This provides better extraction results while reducing manual intervention.
* `.pdf`, `.docx` default to legacy parser with fallback logic.
* `.html`, `.pptx`, `.png`, `.jpg`, `.jpeg` use specialized vision-based parsers.
* `.md`, `.csv`, `.xlsx` routed through dedicated text pipelines.
* Behavior is configurable for benchmarking or debugging.
***
## 2. Privacy and Confidential Sessions
### 🔒 Ephemeral Mode — Full Session Privacy
A new "Ephemeral Mode" allows users to start private sessions where no user inputs, document links, or feedback are stored. This is ideal for sensitive or exploratory conversations.
* Ephemeral Mode can be toggled at company level by system admins.
* When enabled: Sessions & Documents are not persisted or visible to admins.
* Sessions are automatically deleted after 15 minutes of inactivity.
***
## 3. Additional Improvements
* **Bug reporting UX has been improved:**
* Comments are now mandatory.
* Users can optionally preview and share associated documents.
* Flags are hidden when in Private Mode.
* Chat sessions can now visually indicate long-running background tasks in the UI.
* A disclaimer ("Alfred may make mistakes") is now permanently shown below the chat input for transparency.
***
## 4. Alfred 4.2: Visual Language Model (VLM)
🧠 **Alfred Goes Multimodal** Version 4.2 of Alfred introduces a major upgrade: it is now a **Visual Language Model (VLM)**. This means it can interpret visual elements within documents—significantly improving its understanding of complex, hybrid formats.
### Key Highlights:
* 🖼️ Smart interpretation of **embedded images**: photos, diagrams, charts.
* 📊 Improved analysis of **tables and visually structured data**.
* 🧭 Enhanced contextual comprehension for documents mixing text and visuals.
* 🛠️ Fully integrated into the automatic parser selection system (see Section 1.3).
## 1. Major Product Updates
### 🔧 Tools & Platform
* **Data Analysis Tool** An initial implementation is now available for customers with self-hosted deployments that will allow codegen/codeexecution tool to manipulate .csv and .xlsx file to output analysis and visualizations.
* **New front library** No, your eyes are not deceiving you: a new front library has been introduced for more consistent, modern UI components across the platform.
* **SCIM & Auth Optimization**
* SQL requests to `auth_group` significantly reduced.
* `SocialAccount` model is now shown inline in the admin for better SSO debugging.
* **DPO Document Access Control** DPOs now only see documents within their workspace memberships, reinforcing data access boundaries. ([more info](https://paradigm-academy.lighton.ai/en/document-access-rules-who-can-see-what))
* **Security & API Improvements**
* Secure storage of `APIKey` for MLModel objects.
* Added `ensure_ascii=False` to MLRequest JSON storage.
* Removed unused `prompt_template` fields from storage schema.
### 🧠 Knowledge & Document Handling
* **Improved Document Ingestion Pipeline** Faster VLM-based parsers and sturdier task management are now available for smoother ad more resilient ingestion workflows.
* **Frontend Upload refactoring** Users can now upload larger batches of documents through the UI, improving bulk operations.
* **Document Deletion Performance** UI-triggered document deletions have been optimized to prevent long waits and improve UX.
### 🔍 Search, Chat & UX Enhancements
* **Sticky Tool & Document Selections** Tool and document selections now persist during the same chat session (until you start a new chat. This improves workflow continuity and reduces repetitive setup steps.
* **Improved Company Instructions UX** Admin users configuring company chat instructions now see helpful examples for tone, language, and model behavior to guide customization.
* **Better Error Feedback in Chat** Generic `[ERROR]` messages are now replaced by clearer, user-friendly explanations for improved transparency and UX.
* **Chat Admin Enhancements**
* Links to `ChatResponse` objects are now embedded in `ResponseFeedback` admin views.
* `ChatResponseFlag` views include direct links to related `MLRequest` objects for better traceability.
* **Analytics Page Fix** Feedback bales (positive/negative) are no longer clickable, avoiding confusion with unrelated categories.
* **Chat: Document Selection Scroll Fix** Infinite scroll in the document modal now works even at high resolutions with no initial scrollbar.
### 🛠 Admin & Backend Improvements
* **Admin Pagination & Display Enhancements**
* Pagination added to document chunks.
* Improved labeling for parsers and overlapping spans.
* **Download Support for ML Requests** Selected MLRequests and their associated media can now be exported directly from the admin.
* **Default Theme Restriction Fix** Users with high-level roles (e.g., Sys Admin, DPO Admin) can now correctly set a default theme without being blocked by "Only Admin" errors.
***
## 2. Performance & Optimization
* **MLRequest Search & Filtering** Backend optimization to improve responsiveness when filtering and searching in the MLRequest list.
* **API Group Migration Bug Fix** Addressed a critical failure in database migration 83/84 caused by outdated foreign key references to deprecated user groups.
* **User Anonymization** SocialAccount records are now correctly deleted when anonymizing a user, improving compliance.
* **Database Cleanup** Dependencies between Django permissions and the underlying DB have been decoupled to simplify role management.
***
## 3. Bug Fixes
* **Theme Management** Resolved restriction preventing theme updates from high-privileged users.
* **Firefox Document Viewer Issue** Fixed document visualization issues reported on Firefox 115.4.0esr (64-bit), aligning behavior with Chrome and Edge.
* **Forgotten Password UX** Empty email submissions on the reset password page now show appropriate error messages, avoiding ugly fallback forms.
* **Admin Feedback Navigation** Response Feedback objects in the admin now support direct linking to related content, streamlining moderation.
## 1. Major Product Updates
### Knowledge
* **SharePoint Datasource Integration** – Workspaces in Paradigm can now be connected directly to **SharePoint Sites** to leverage stored organizational knowledge. All content supported by Paradigm is then available for Augmented Search and direct usage in the platform.
* As a tech preview, text-heavy `.xlsx` and `.csv` files content is parsed and available for Augmented Search
### Parsing
* Iteration on parsers are available to both broader and faster parsing
* Parser choice at upload in the API
* Parser choice at upload in the application
### Content Sharing & Chat Enhancements
* **Enhanced Content Sharing Capabilities**: Users can now directly share generated content through email, Slack, Teams, LinkedIn, and Twitter via a new share icon on each model response. This allows for seamless content reuse and review before publication.
* **Chat Feedback Flexibility**: Users can now **undo or modify previously submitted feedback** (like/dislike) on model responses, improving transparency and usability.
* **Improved Chat Flag Modal**: The flag response interface has been streamlined:
* Chat UID has been removed.
* Instead of the last response, a copyable summary including relevant session details is shown.
* Unnecessary instructions have been removed for a cleaner UI.
* **Chat Response Metadata**: Added **"Model Used" and "Document Name"** fields in both Chat Response List and Detail pages, with export support for audits and quality reviews.
* **Offline Tool Support**: Tools like **WebSearch** have been adapted for offline mode, ensuring stream continuity and reducing dependency on external services.
### Tools & Infrastructure
* **Improved Tool Routing**: Tool routing was improved resulting in better automated tool selection based on user's query intent and attached filetype
* **Frontend: New PDF Viewer**: The redesigned viewer for PDF documents is now also available on the **Documents Page**, enhancing browsing and readability.
### Administrative Improvements & Controls
* **Accessibility Report Link in Admin Help**: Admins can now add a link to the platform's accessibility report in the Help section, improving transparency and compliance.
* **Bring Back Feedback Admin Page**: The previously hidden admin interface for user feedback has been restored.
* **User ID Display in Profile**: Users can now view and copy their unique User ID in the Profile section.
* **SCIM Support Expansion**: Admins can now handle SCIM-based:
* User creation
* User deactivation
* Anonymization and modification
* Expiration-based user deactivation
* **Usage API Enhancements**:
* **Copy Action Tracking**: Monitor how often content is copied by users.
* **Like/Dislike Tracking**: Daily tracking of user feedback on responses.
* **Most Used Documents**: Retrieve the most accessed documents per day.
* **Company DPO Features**:
* Company DPOs now have **view access to company-level data**.
* Data exports include the **model used** and **associated document names**.
* **User and Workspace Management Improvements**:
* Alphabetized lists and search functionality when assigning users to workspaces or vice versa.
* Workspace count and user count displayed on relevant admin views.
* **Document Source Linking**: When a document comes from a datasource, users can now access both the Paradigm-rendered version and the **original source document** link directly.
### Security, API & Backend Enhancements
* **Company Document Segmentation** *(Security Fix)*: Documents are now stored in **company-isolated directories** to reduce security risk surface.
* **Chatflow API Public Exposure**: The previously private **Chatflow endpoint** is now publicly accessible and fully documented (including test coverage for all tool configurations).
* **Datasource Actionable Links**: Answers based on synced documents now link directly to the **external datasource document**, when available.
* **Tools Descriptions Rework**: All tool descriptions have been revised for clarity and enhanced retrieval relevance, based on internal validation.
* **Scalability and performance Improvements**: Internal components configurations have been updated and optimized.
***
## 2. Bug Fixes
* **Office docs upload stability**: Fixed a bug causing some `.pptx` or `.docx` files to fail during import.
* **Tool List Scroll Bug**: Resolved an issue that prevented scrolling in long tool lists.
* **Legal Document Popup Fix**: Ensured that required legal acceptance popups trigger correctly for all PDF types.
* **Response Feedback Admin Improvements**: Admins can now click through from feedback entries to the associated Chat Response, improving traceability.
## 🏋️ Major Product Updates
### Document Processing & Retrieval Enhancements
* **Image Analysis in chat**: Users can now upload and interact with **.jpg** and **.png** images within a chat session, enabling AI-driven analysis and task execution based on visual elements.
* **Improved document parsing and embedding**: Ensures clearer references in AI-generated responses.
* **Optimized document chunking methods** to refine Retrieval-Augmented Generation (RAG) precision.
### API & Data Management Enhancements
* **Vision Search API**: Our Vision RAG Tool, released in Beta earlier this year, is now available through the API
* **Image Analysis API**: The image analysis tool is now available through the API, allowing for quick and easy automation use cases needing this capability
* **Bulk Documents Upload**: Introduces batch file uploading with async parsing and progress tracking for efficient large-scale document management.
* **DELETE /api/v2/files Fix**: Resolved an issue where deleted files were not fully removed from storage.
* **Company Management API**: New endpoints for creating, modifying, and retrieving company data.
* **Storage Management Improvements**: Storage limits are now measured in megabytes (MB) instead of gigabytes (GB), allowing more granular control.
* **Usage API - Active Users**: Admins can now export a list of all active users to monitor platform engagement.
* **Usage API - Chat Sessions**: Tracks the number of chat sessions created per day and their average duration for better insights into user behavior.
* **Usage API - Tool Usage**: Monitors the frequency of each tool's usage per day to understand feature adoption trends.
* **Usage API - Like/Dislike Metrics**: Allows admins to track user feedback volume.
* **Usage API - Copy Action Tracking**: Enables monitoring of how often users copy model-generated responses.
### Chat & User Experience Improvements
* **Updated chat warning system**: The notification for long chat sessions now appears after 15 questions.
* **Session list auto-refresh**: Now updates in real-time when starting a new session.
* **LaTeX Support for Mathematical Formulas**: Improved chat response readability for mathematical expressions using LaTeX rendering.
* **Chat Tools UI Update**: Icons now dynamically represent their respective functions (e.g., 📚 for document search, 🌐 for web search) to enhance clarity.
* **No Tool Mode**: Users can now opt to disable tool assistance, forcing responses to be generated exclusively by the model.
* **Persistent Tool Selection**: The selected tool remains active throughout a session.
* **Bulk Remove Attachments**: Users can now remove all attached documents in chat with a single action.
* **PDF Viewer Redesign**: The document viewer experience in chat has been rethought for better navigation.
* **Refined Like/Dislike & Copy Actions**: These actions now appear only when hovering over the dedicated section, ensuring a cleaner interface.
* **Tool DocAnalysis UI Update**: The inline document analysis viewer now opens automatically when a result is received.
### Security, GDPR & Access Control Updates
* **Restricted API Section Visibility**: Unauthorized users no longer have access to API-related settings.
* **Fixed Unauthorized Delete Options**: Prevents non-admin users from selecting delete actions in the multi-action menu.
* **Company Document Segmentation**: Improved security by ensuring that company documents are stored in isolated directories, reducing exposure in case of vulnerabilities.
* **User Data Download**: LightOn users can now download a complete record of their data stored in the system.
* **DPO-Controlled Data Retention**: Company DPOs can now configure data deletion policies after a set period.
* **Accessibility Report Link**: Admins can now configure and display a link to the accessibility report in the platform's help section.
***
## 🐞 Bug Fixes
* **Fixed Document Analyzer Output Issues**: Ensures consistency across different sessions.
* **Corrected Mobile UI Display Issues**: Improved rendering for better user experience on smaller screens.
* **Fixed Response Evaluation Buttons**: Like/Dislike buttons now highlight correctly.
* **Resolved Token Validation Issue**: Fixes inconsistencies in the Terms & Conditions acceptance process.
* **Fixed Email Authentication Case Sensitivity**: Users can now log in regardless of email case variations.
* **Session List Refresh Fix**: The chat session list updates correctly when a new conversation starts.
* **Language Setting Fix**: Resolved an issue where the interface language sometimes did not match user preferences.
* **Chat Loader Fix**: The loading animation now stops immediately when a user cancels a response.
## 4 Main Product Updates
### 1. Visual Capabilities Integration (Beta state)
* Extended multimodal RAG capabilities to support images, charts, and diagrams for enhanced data analysis
* New Vision based parsing for txt RAG
* Added support for .pptx files with page-level highlighting
### 2. Simplified Chat Interface
**Enhancements (5)**
* Redesigned interface to display essential information for improved usability
* More intuitive tool forcing UX
* Separated Assistant response generation from Chat name generation
* Source cards fully clickable with hover state
* Added warning message display for long chat sessions
**Bug Fixes (5)**
* Fixed model selection dropdown menu visibility issue in mobile mode
* Resolved "like/dislike" button highlighting issue for response evaluation
* Fixed document analyzer output appending issue across different sessions
* Corrected long URL display issues in chat box
* Resolved left menu display issue in mobile mode
### 3. Enhanced API
**New Features (4)**
* **Users (CRUD) API**:
* Enables administrators to programmatically manage users within companies
* Supports Create, Read, Update, and Delete operations
* **Workspace (CRUD) API**:
* Allows programmatic management of workspaces within companies
* Enables automated scaling for business unit asset repositories
* **RAG API**:
* Supports question-based queries with optional workspace/file scoping
* Returns relevant answers with source document tracing
* **Usage API**:
* Tracks total unique users connected within specific timeframes
* Monitors daily chat session creation by users
**Bug Fixes (1)**
* Ensured API documentation sends requests to the correct host instance
### 4. User & Permissions Management
**New Features (3)**
* Implemented fixed group hierarchy with three levels:
* Platform level
* Company level
* User level
* Isolated DPO user data at platform and company levels
* Created streamlined interface for role assignment with clear permission dependencies
**Enhancements (3)**
* Added current user count display on company admin page
* Improved group page display with permission categorization
* Implemented user permission change confirmation system
**Bug Fixes (4)**
* Fixed automatic user rights changes affecting doc manager permissions
* Implemented user capability restrictions
* Enhanced user deletion permissions for system admins
* Resolved SSO-related issues with email address changes
## Additional Features
**New Feature (1)**
* Introduced code execution capability in ALPHA restricted to LightOn Sovereign offer
**Enhancements (4)**
* Added company deletion functionality for system administrators
* Implemented DPO email display in user profiles
* Improved performance of MLResponse database calls
* Enhanced session history loading for administrators
**Bug Fixes (3)**
* Resolved email case sensitivity login issues
* Fixed MLModels "All" button functionality
* Corrected token validation for Terms & Conditions
## Decommissioned Features
* Removed Task factory functionality
* Discontinued model comparison feature
* Removed legacy tool functionality from chat settings
* Simplified feedback system to basic like/dislike options
## Deployment Specifications
* Provided deployment support package including:
* Frontend test form
* Test data set
* Implementation checklist
* Added configurable visual model feature (requires additional GPU)
## New Model: Introducing Alfred 4
* Supports hundreds of users with minimal resources
* Improved language matching for accurate responses
* Personalized answers based on user context
* Supports 32k tokens per request and delivers more context-rich answers
### Agentic Behavior
* Alfred 4 autonomously selects the best tool for the task
* Specify tools directly in queries (e.g., "search in my document what is Paradigm")
* Rapid tool selection using keyboard shortcuts like "/"
* Admins can control tool activation through the admin interface for greater flexibility
***
## Chat Interface Enhancements
### 1. Improved Scrolling Management
Auto-scroll now pauses when users scroll up and resumes only when users return to the bottom. This allows seamless review of previous content while new content is generated.
### 2. Search Document Preview
Document previews now appear in a right panel instead of a modal, providing a seamless and intuitive user experience.
### 3. Question Reformulation Improvements
Enhanced question reformulation for tools like Search Doc, Web Search, and Doc Analysis ensures more precise and context-aware queries.
### 4. Display and UI Fixes
* **Improved display for bulleted and numbered lists**, resolving previous line-break issues
* **Clearer Layout**: Distinction between questions and chat responses
* **Centralized Interaction Box**: Simplified input and response management
* **Improved source Card Design**: Harmonized fonts and updated source presentation
***
## New Tools
### Web Search Tool
* Enhanced web search now delivers:
* Fast, accurate responses with links to relevant web sources
* Real-time access to market trends, financial updates, and other business-critical information
* Automatic or manual activation using shortcuts like "/web search"
* Admins can manage tool activation for enhanced flexibility
### Doc Analysis Tool (Beta)
* Generate concise summaries/report for quick overviews
* Highlight key differences and similarities in documents
* Extract keywords for actionable insights
* Automatic or manual activation using shortcuts like "/AnalyseDoc"
***
## Admin Controls
**User Deletion**: Admins can now delete one or multiple users from either the user list or detail page.
**Third-Party Tool Management**: Admins can enable or disable third-party tools at the company level.
**Tool Management by Company**: Tools can now be activated or deactivated per chat settings, offering company-specific configurations.
### Simplified User Upload Process
* Company details are no longer required in CSV uploads
* Clear error messages are displayed for invalid file formats
### User Access Expiration
Administrators can specify an expiration date for user accounts during or after user creation.
***
## Performance Optimizations
**Query Optimization**: Faster loading for the "Document Extract" detail page, improving overall performance.
***
## Other Topics
### 1. Account Deletion
Users can now permanently delete their accounts and all associated data directly from their profile page.
**2. Document Name Update**: Renaming a document now correctly updates the name displayed in chat.
**3. Session Security**: Automatic logout after 24 hours (1,440 minutes) of inactivity ensures secure session termination.
## 🆕 New Features
1. **Dynamic Language Support for Authentication Page**
* The authentication page now dynamically displays content in the browser's preferred language or the user-defined language.
* Fallback support to English is added for unsupported languages, ensuring a seamless user experience.
2. **Forced Tool Execution in Chat**
* Users can now execute specific tools (e.g., `/websearch` or `/documentsearch`) via chat commands, offering greater control and flexibility in interactions.
***
## 🏋️ Enhancements
1. **Improved Document Search Behavior**
* When no documents are available in a company's collection, a descriptive error message is displayed: *"Hello! It looks like you haven't added any documents yet. To start using the 'Chat with Docs' feature, please upload your first document."*
* This improvement avoids displaying system errors and provides actionable feedback.
2. **Admin Panel Simplification Project**
* **Standardized Permission Groups**: Introduced clear, pre-defined roles to simplify user management.
* **User List Enhancements**: The admin panel now defaults to showing only active users, improving usability and reducing unnecessary clutter.
* **User Page**: Admins can now view and manage user workspace associations directly from the user detail page.
* **API Key List**: Enhanced filtering options for API keys, with active keys displayed by default for quicker monitoring.
* **Document List**: Added the workspace name as an attribute in the admin/document view for better document organization and management.
* **Chat Response Export**: Included the "Created At" field and the associated company name in export files, enhancing reporting capabilities.
3. **Legal Mentions Accessibility**
* The "?" button for accessing legal mentions is now consistently displayed on all pages, ensuring legal information is always accessible.
4. **Add German Language**
* Added support for German as a language option for the Paradigm interface
***
## 🐞 Bug Fixes
1. **Chat Interface**
* Fixed issues with document extracts not rendering during answer generation.
* Corrected mislabeled sessions in the left menu.
* Improved consistency in reformulation display across chat sessions.
2. **Session Management**
* Resolved an issue where new sessions could not be created after reducing the left menu.
3. **Translation String Updates**
* Automated detection and sanitization of translation strings is now integrated into Mission-Control.
4. **Websearch tool**
* Fixed issue with the Websearch tool displaying a red error message during search operations
***
## 🔄 Deprecations
1. **User Group Creation & Custom Permissions**
* Removed the ability for customers to create or modify custom user groups. Only LightOn-defined groups are now supported.
* Discontinued support for assigning custom permissions to individual users, simplifying permission management and reducing complexity.
2. **Company Owner Field**
* Eliminated the "Company Owner" field across all forms to streamline data access and permissions.
* Regardless of their role or group, users now see only their own usage data in the dashboard reporting section.
## Translation String Updates
| Key | Language | Value |
| ------------------------------------- | -------- | --------------------------------------------------------------------- |
| chat.tools.failed1 | EN | The tool |
| chat.tools.failed1 | FR | L'outil |
| chat.tools.failed2 | EN | encountered an error |
| chat.tools.failed2 | FR | a rencontré une erreur |
| documents.public | EN | Public documents |
| documents.public | FR | Documents publics |
| task.creation.errorEmptyContextFields | EN | Please fill in all context fields |
| task.creation.errorEmptyContextFields | FR | Veuillez remplir tous les champs de contexte |
| task.creation.errorRequirement | EN | Please enter a requirement before continuing |
| task.creation.errorRequirement | FR | Veuillez saisir une exigence avant de continuer |
| chat.feedback.additionalDefaultText | EN | Share your specific thoughts about this response... |
| chat.feedback.additionalDefaultText | FR | Partagez vos impressions spécifiques sur cette réponse... |
| task.creation.errorSaving | EN | An error occurred while saving. Please try again. |
| task.creation.errorSaving | FR | Une erreur est survenue lors de l'enregistrement. Veuillez réessayer. |
| documents.search | EN | Search in documents |
| documents.search | FR | Rechercher dans les documents |
***
## 🆕 New Features
### Visual Ingestion for Tables
A newly introduced visual ingestion system enables the parsing and retrieval of advanced tables, allowing them to be utilized in responses. This enhancement significantly expands the range of questions that Paradigm can address.
### SSO Integration (SAML)
Allow enterprises to enable Single Sign-On (SSO) for their users and manage user deactivation.
### Document Understanding Evaluation
Inform users about document compatibility with embeddings, helping them assess if their document will function effectively with the system.
### Websearch Tool (Beta)
Empower users to conduct internet searches seamlessly within the application, enhancing their access to information and resources.
### Set Default User Language
Enable administrators to specify a default language for new users during account creation, simplifying the user onboarding process.
### Display Current Application Version
Enable users to easily view the current version of the application, ensuring they stay informed about updates and enhancements.
***
## 🏋️ Enhancements
### Streamline User-Workspace Association
Simplify the association of multiple users with multiple workspaces during bulk import by allowing workspaces to be specified directly in the user injection process.
[More info](/en/administration/iam/user-management/user-operations)
### Multi-Select Document Deletion
Allow users to select and delete multiple documents simultaneously, improving document management efficiency.
### Enhanced User Journey for Agent (Beta)
Improve agent response displays, allowing users to refine questions and view source documents before seeing final answers.
### Company-Based Document Quota Restriction Management
Display storage usage and volume information for users while managing or importing documents, enhancing document management.
### Easier Model Management in the Admin
Streamlined and user-friendly model creation and management in the admin panel for platform administrators.
### Change in Company Affiliation Policy
To prevent potential misuse and avoid analytics issues, users can no longer change their company affiliation.
***
## 🐞 Bug Fixes / Corrections
1. ### Fallback Mode Error in Document Query
Display a configurable fallback message instead of an error.
2\. ### Horizontal Scrolling for Code Generation
Enable horizontal scrolling to allow full code visibility.
3\. ### Redirect Authenticated Users from Login Page
Redirect authenticated users away from the login page to improve the user experience.
4\. ### Restrict Access to Password Creation for Logged-In Users
Restrict access to this page for logged-in users to streamline password management.
5\. ### Restrict Theme Selection for Company Admins
Prevent company admins from changing the default theme to avoid unintentional override of themes set by the primary administrator.
## Jumbo-Jaguar-postfix
* Bug fix in the API key validation cache logic
* Added further validation of files at upload
* Chat with docs toggle is now enabled by default when tools are not enabled
***
## 🌐 New Translation Strings
This new version is related to 147 new elements listed below. You can download the [full list here](https://drive.google.com/file/d/1xTyDw6FqoukqcJ7B4NtBJ9TTNGxwJH1J/view?usp=sharing).
## For Administrators
### Storage Space Management
Administrators can define the available space per company and per workspace. This feature allows better control of used disk resources.
## For Users
### Simplified Navigation
Introduction of tabs by workspace in the document list facilitates searching and accessing files and easier navigation between different workspaces.
### Document Selection Saving
Ability to save a selection of documents for reuse in different chat sessions, thus simplifying work continuity and efficiency.
***
## Introduction of Agents in Paradigm (Beta)
A beta version agent is now available on the Paradigm platform.
### Features
* **MVP Agent**: Integration with the SearchMyDoc tool
* **Enhanced search**: The agent performs searches in indexed documents or in its training corpus depending on the context
* **Future developments**: Additional features are planned for upcoming versions
* **Activation**: To activate this feature, [follow the procedure](/en/user-guides/chat-features/agents) in the product documentation
***
## Other Improvements and Fixes
1. Improvement of the new company creation process
2. Logging of execution times for upload and enrichment pipeline components
3. Improved robustness of configuration keys
4. Total deletion of files from the disk when deleting a document
5. Management of user migration from one workspace to another
## Paradigm Version: Illuminated-Impala-postfix 102124
* **Bug fix**: Solved an issue that would cause intermediate events for the chat with docs workflow to not be shown to users
* **Bug fix**: Solved an issue that would cause the fallback response to disappear when using chat with docs and fallback enabled
## New Features
### Prompt Assistant Simplification
We have removed the "Suggest Example" button to make the user experience smoother and easier to use.
### Better Analytics Data Organization
We have removed the "More Detail" column from the analytics page to make it more intuitive and easier to understand.
### Document Import Help
We have added explanatory text to help users understand how to import new documents or attach documents to their question.
### Enhanced Navigation
We have implemented an automatic scroll system to facilitate navigation when asking a new question.
## Bug Fixes
### Improved Chat Visibility
We have fixed an issue that caused the model response text to overlap with the chat field. Now, the text is properly displayed.
### Document Renaming Error
We have fixed a bug that prevented users from renaming documents.
### Hidden Content on Firefox
We have resolved an issue that caused certain content to be hidden on Firefox.
### Translation Updates
We have translated many elements that were not available in French and English.
### Model Icon Inconsistency
We have resolved an issue that caused the chat icon to be different between the "Report Bug" popup and the chat interface.
## New Features
### Upload New Documents From Chat Interface
Users can now upload documents directly from the attachment icon in the chat interface, making it easier to use new documents in their queries.
### Document Selection to Continue Conversation
When relevant documents are identified to justify a response, users now have the option to select which of these documents they want to use to continue the conversation.
### New Sidebar and Removal of Top Navigation Bar
To simplify navigation, the top navigation bar has been removed. All navigation elements are now grouped in the left menu for a more streamlined experience.
### Analytics Pages Grouping
Analytics pages have been regrouped to improve navigation and user experience.
### "Select All Documents" Option
When a user wants to specify one or more documents, they can now use the "Select All Documents" function to automatically select all documents identified after a search, avoiding the need to select them individually.
### Permission-Based API Key Management
Creation and deletion of API keys are now limited by specific user permissions. Users without the required permissions must contact an administrator to manage API keys, ensuring enhanced security and better control of token management.
### Deprecation of API V1
API V1 has been deprecated and is no longer accessible. Please ensure your integrations are using the most recent version of the API to guarantee optimal functionality.
***
## Bug Fixes and Security Improvements
### Various Security Improvements
Several fixes have been made to strengthen the platform's security, including updates to prevent potential vulnerabilities.
## Improvements made to glorious-giraffe-20240828-postfix 12/09/24
### Document List
An infinite scrolling feature has been integrated into the document list, allowing continuous loading of different pages with a loading indicator to signal the loading of the next page.
### Dynamic Support Email in Automated Emails
System administrators can now dynamically configure the support email address in automatically sent emails using the `DEFAULT_SUPPORT_EMAIL` configuration key. The custom customer support email address set in the admin interface is now correctly displayed in email templates.
### Password Creation When Inviting a User
Fixed a bug preventing a new user from creating their password.
## Improvements made to glorious-giraffe-20240828-postfix 20/09/24
### Prompt Templates
In the task builder are now filtered to the set created by the user, it is no longer possible to see prompt templates created by others.
## New Features
### Updated Icon for "Specify Doc" Feature
The icon for the "Specify Doc" feature has been replaced with a new icon, offering better visual clarity.
### Removal of Columns in the Tasks Table
The "Models", "Task Type", and "Language" columns have been removed from the tasks table to simplify the display and focus on the most relevant information.
### API Creation Limitation
A new configuration parameter, `IS_API_ON`, has been introduced to control API activation. By default, the API is enabled (Yes). If this parameter is changed to No (or any value other than Yes), the API is disabled. Users belonging to the full "Admin" group can manage this configuration via the Settings > Config keys section of the admin panel. When the API is disabled, all requests using API keys for authentication are denied with a 503 SERVICE NOT AVAILABLE return code and an error message "API is disabled. Please contact support for more information."
***
## Bug Fixes
### Permissions and Behavior for 'Company Admin' Role
The "Company Admin" role now allows access to the admin panel without requiring the "Admin" role. The user interface has been updated to add the admin link in the user profile if they are a company admin.
### Error When Changing Language Settings
The bug that caused an error when changing language settings has been fixed. You can now change your language without encountering any issues.
### XSS Bug Fix
An XSS bug has been fixed, the fix involves cleaning the markdown content before sending it to the frontend.
This update brings new features, important security updates, and several bug fixes aimed at improving the overall functionality and security of the platform. Here's a detailed overview of the updates:
## New Features
### Document-Specific Chat Queries
You can now select specific documents for chat, allowing for more targeted and relevant queries within a particular set of documents instead of querying all available collections.
### Enhanced Bug Report Fields
New fields have been added to the bug report form to capture more detailed information, improving the ability to diagnose and resolve issues quickly.
* `dual_session` (true/false)
* `model name`
* `company instructions` (preprompt)
* `user instructions` (preprompt)
* `start messages template`
### New Unit Tests
Additional unit tests have been implemented to ensure better code coverage and increased reliability.
### CI Improvements
Continuous integration (CI) processes have been improved for more efficient and automated testing, enhancing the overall quality and stability of the platform.
### New Value for DJANGO\_ENVIRONMENT Variable
Introduction of a new value for the `DJANGO_ENVIRONMENT` variable to identify on-premise client environments, ensuring better customization and support.
## Vulnerability Fixes
### Improved Admin Permission Management
Administrative permissions have been revised by creating a new specific user role for company admins. This modification enhances security by allowing better permission separation.
### Fixed Document Name Leak
A document name leak issue in the administrative interface filters has been fixed, ensuring information confidentiality.
### Company List Filtering
A fix has been applied to resolve an issue where the company list was not properly filtered when importing users by a company admin. This improvement strengthens data protection.
### Secured User CRUD Operations
User creation, read, update, and delete operations have been secured to prevent unauthorized access and protect data integrity.
### Document Download Protection
Security has been enhanced to prevent unauthorized access when downloading documents, ensuring optimal protection of resources.
### Security Package Upgrades
As part of our ongoing security audits, several packages have been upgraded to improve the platform's overall security.
## Bug Fixes
### Password Reset View
Fixed issues with the password reset view and improved security and error handling for a smoother user experience.
### Test Fixes
Several fixes have been applied to test cases to improve their accuracy and reliability.
### Chat History Fix
Resolved chat history issues during discussions without documents, ensuring consistent and reliable chat interactions.
### Migration Fix for Automatic Theme Creation
Fixed the migration for automatic theme creation so that it is ignored in on-premise client environments, based on environment variable settings.
# How to submit a report to the Support team
Source: https://docs.lighton.ai/en/support-legal/getting-help/reporting-guide
On this page, you will find the official methods to report a bug, submit a feature request, or ask a question to our team.
## Contact us by email
[support@lighton.ai](mailto:support@lighton.ai)
This method is recommended if you cannot access the interface or if you need to provide a large amount of detail. Please do not hesitate to send us a screenshot of what you see.
## Report a bug via the flag button in Paradigm
This method is recommended when the issue is directly related to a conversation or a document. It also allows you to report an issue without leaving the application during your use.
* Click on the **flag** icon in the relevant conversation
* Fill in all the required information
* Check the box allowing you to **share the associated document(s)**, if possible
* Validate the submission of the report
## Optimal content of a request
Regardless of the channel used (email, Zendesk, or flag), we invite you to provide **as much information** as possible to enable better analysis and resolution of the reported issue.
## For an issue, please provide:
* A **clear and detailed description of the issue**
* The **steps you followed to reproduce the issue**
* The **expected result**: what you think should happen when following the reproduction steps
* The **observed result**: what you actually observe when following the reproduction steps
* **Screenshots** and/or a **video showing the issue and/or an error message**
* Any **information** you can give us is **relevant** for exemple:
* **Operating system** (Windows, Mac, Linux, …)
* **Browser** and **version**
* **Paradigm version**
* If applicable, the **Paradigm environment** (*Pre-production, Production*)
* Approximate **date and time**
**Console errors:** If you are comfortable with technical details, you can check your browser console (F12 key on Chrome or Firefox):
* Right-click on the web page
* Select “Inspect” or “Inspect Element”
* Click on the “Console” tab
* Capture any error messages
## For a feature request, please provide:
* An **exhaustive description of the expected feature**
* The **need or objective** that this feature would address
* A **concrete use case**
## Track your requests on Zendesk
A Zendesk account is required to submit and track a request.
Zendesk centralizes all requests and bug reports. Creating an account allows you to track their status.
* [Click here](https://lighton.zendesk.com/hc/en-us/requests) to access your requests tracker
# GDPR Compliance
Source: https://docs.lighton.ai/en/support-legal/legal-and-compliance/gdpr-compliance
Understand how Paradigm complies with GDPR regulations and your rights regarding personal data processing.
## Overview
The General Data Protection Regulation (GDPR) is a European Union regulation that governs how organizations collect, process, and protect personal data of EU residents. Paradigm is committed to full GDPR compliance and transparency in our data handling practices.
## Your Rights Under GDPR
As a data subject under GDPR, you have the following rights regarding your personal data:
### Right of Access
* You can request information about what personal data we process about you
* You can obtain a copy of your personal data in a structured format
### Right to Rectification
* You can request correction of inaccurate personal data
* You can request completion of incomplete personal data
### Right to Erasure (Right to be Forgotten)
* You can request deletion of your personal data under certain circumstances
* This applies when data is no longer necessary for the original purpose
### Right to Restrict Processing
* You can request limitation of processing under specific conditions
* Data can be stored but not actively processed during restriction periods
### Right to Data Portability
* You can receive your personal data in a machine-readable format
* You can request direct transfer to another data controller where technically feasible
### Right to Object
* You can object to processing based on legitimate interests
* You can object to direct marketing at any time
## Data Processing Lawful Basis
We process your personal data based on:
* **Contractual necessity**: To fulfill our service obligations
* **Legitimate interests**: For system security and service improvement
* **Legal compliance**: To meet regulatory requirements
* **Consent**: Where explicitly provided for specific processing activities
## Data Protection Measures
### Technical Safeguards
* End-to-end encryption for data in transit
* Encryption at rest for stored personal data
* Access controls and authentication systems
* Regular security assessments and updates
### Organizational Measures
* Privacy by design principles in system development
* Regular staff training on data protection
* Data processing impact assessments
* Incident response procedures
## Data Retention
* Personal data is retained only as long as necessary for the stated purposes
* Retention periods are clearly defined and regularly reviewed
* Automated deletion processes ensure timely data removal
* Special categories of data have enhanced protection measures
## International Data Transfers
When transferring personal data outside the EU:
* We ensure adequate protection through appropriate safeguards
* Standard contractual clauses or adequacy decisions are used
* Recipients are contractually bound to maintain data protection standards
## Exercising Your Rights
To exercise your GDPR rights:
1. **Contact our Data Protection Officer**:
* Email: [privacy@lighton.ai](mailto:privacy@lighton.ai)
* Include clear identification and specific request details
2. **Response Timeline**:
* We respond within 30 days of receiving your request
* Complex requests may require up to 60 additional days with notification
3. **Verification Process**:
* Identity verification may be required for security
* Additional information may be requested to locate your data
## Complaints and Remedies
If you believe your data protection rights have been violated:
* **Internal Resolution**: Contact our Data Protection Officer first
* **Supervisory Authority**: File a complaint with your local data protection authority
* **Judicial Remedy**: Pursue legal remedies through competent courts
## Data Protection Officer
Our appointed Data Protection Officer oversees GDPR compliance and serves as your point of contact for data protection matters.
**Contact Information**:
* Email: [privacy@lighton.ai](mailto:privacy@lighton.ai)
* Role: Independent oversight of data processing activities
* Responsibilities: Monitoring compliance, conducting impact assessments, serving as point of contact
## Regular Updates
This GDPR compliance documentation is regularly reviewed and updated to reflect:
* Changes in data processing activities
* Updates to legal requirements
* Improvements in data protection measures
* Feedback from data subjects and authorities
# Privacy Policy
Source: https://docs.lighton.ai/en/support-legal/legal-and-compliance/privacy-policy
Privacy policy governing data processing and protection for LightOn's Paradigm AI platform and services.
**Privacy Policy**
April 21, 2026
\
LightOn's services and websites are intended for professional use only and are not intended for use by minors. If you are not a professional user or if you are a minor, you must not use this site or any of LightOn's services.\
LightOn is a company specializing in the creation of so-called "artificial intelligence" software programs, and more specifically in the creation of AI systems based on "LLMs" (large language models). It is the publisher of the website [www.lighton.ai](http://www.lighton.ai) and the services provided by this website, as well as the Paradigm and Console software.\
LightOn's headquarters are located 2 rue de la Bourse, 75002 Paris, France. Our company is registered in the SIREN directory under number 821100690.\
The privacy and personal data of our service users are of paramount importance to us. At LightOn, we have fundamental principles regarding confidentiality and the protection of personal data:
* We ask for or process your personal information only if it is essential or if you have given us your consent to do so.
* We do not share your personal data with anyone, except to comply with the law, assist you, or protect our rights, or if you have given us your explicit consent to do so.
Below you will find our privacy policy, which outlines these principles.
LightOn develops software designed to implement artificial intelligence services and may operate or use certain digital tools accessible via the Internet, including email tools and this website (hereinafter, the Sites, or individually, a Site). LightOn's policy respects the confidentiality of any information we may collect in connection with the operation of the digital communication services we use or the services—particularly IT services—we offer to our clients and users (hereinafter "the Services"), the Sites, our commercial management, our internal management (human resources, accounting, etc.) and the processing of requests made to our company. LightOn is committed, within the scope of its activities and in accordance with the laws in force in France and Europe, to ensuring the protection, confidentiality, and security of the personal data of users of its services, as well as to respecting their privacy.
To make this policy easier to read, the text has been written on two levels: a legally binding level ("legal text") and "In a nutshell" frames, with text in italics, that are non-binding. Our goal in doing this is to help you better understand what we mean, how your data is processed, what you can expect from us, and what we expect from you.
**In a nutshell**: We have written these "in a nutshell" sections to help you better understand our practices. However, the text that is legally binding, if necessary, is the text written outside the "in a nutshell" sections.
We know you care about how your personal data is used and shared, and we appreciate the trust you place in us by providing it. Please be assured that we will treat it with the utmost care. By using our Services, visiting our websites, contacting us, filling out a form, responding to our requests and surveys, and, more generally, interacting with us, you agree to the practices described in this privacy policy.
**In a nutshell**: By using LightOn's services, continuing to browse the site, providing information to contact us, etc., you acknowledge that you have read and accepted this policy.
# **1 Data Controller**
LightOn is the data controller for the processing of [personal data](https://www.cnil.fr/en/personal-data-definition) it carries out on its own behalf.
In this context, LightOn has, where applicable, completed all necessary administrative formalities with the competent authorities. In general, LightOn complies with all laws and regulations relating to the protection of personal data in force in the countries where it operates, including but not limited to:
* European Regulation 2016/679 of April 27, 2016, on the protection of natural persons with regard to the processing of personal data and on the free movement of such data, and repealing Directive 95/46/EC (General Data Protection Regulation, often referred to as the GDPR);
* French Law No. 78-17 of January 6, 1978, on Information Technology, Data Files, and Civil Liberties, and its amendments.
**In a nutshell**: We are responsible for the data you entrust to us for the processing we carry out on our own behalf. We provide you with our contact information so that you can reach us. For our part, we have done everything required of us by the regulations.
# **2 Data Processor**
Similarly, as a data processor for our clients who use the web applications and software provided by LightOn, we have completed all necessary administrative formalities with the relevant authorities, including European Regulation 2016/679 of April 27, 2016, on the protection of natural persons with regard to the processing of personal data and on the free movement of such data, and repealing Directive 95/46/EC (General Data Protection Regulation, often referred to as the GDPR).
It should be noted that data processed through the use of LightOn Services is encrypted. A Service subscriber may explicitly grant access to certain data that they have provided and stored via the Services or that is processed within the Services, in particular to employees, service providers, or partners, various stakeholders, as well as to LightOn teams, specifically for technical support purposes.
In any event, it is the LightOn customer who decides to store personal data—which belongs to them—through the use of one of the Services, to grant access to their data, and who has full control over it, including with respect to the documents that are uploaded, which only the persons to whom they have granted access may view.
Each user of the Services provided by LightOn (hereinafter a "User" and in the plural "Users"), whether a casual visitor, a free user, a customer, or a guest—including one invited by a customer—is responsible for the data they provide through the use of the Services and, as such, is responsible, where applicable, for providing data in compliance with regulations.
**In a nutshell**: Users of the solutions offered by LightOn are responsible for the data they have provided and that is processed through the use of LightOn's Services, including when these Services are implemented on behalf of third parties, in particular on behalf of LightOn's customers.
## **2.1 Specific Provisions — LightOn Console and Paradigm APIs**
When the Customer submits personal data to the Paradigm APIs via Paradigm, the Console, or directly, LightOn acts as a processor within the meaning of Article 28 of the GDPR and processes such data solely in accordance with the Customer's instructions and the provisions of the Data Protection Agreement (DPA).
LightOn specifically guarantees that:
* **Stateless inference**: in SaaS inference mode or in any mode where the inference nodes are under LightOn's control, input data (prompts, documents, etc.) is not stored persistently on the compute nodes beyond the time strictly necessary to execute the request. Persistent storage (indexed document databases, conversation history) is enabled only when the Customer explicitly activates these features.
* **No use for training purposes**: LightOn does not use the input and output data (prompts and completions) submitted or provided via the APIs to train, fine-tune, or improve its AI models, except upon the Customer's explicit written request.
**In a nutshell**: When you use LightOn's systems, your data does not belong to us—you retain control over it. We use it only to provide you with the requested service, and we do not use it to improve our models unless you have explicitly asked us to.
# **3 Purposes**
## **3.1 As Data Controller**
LightOn processes personal data on its own behalf for one or more of the following purposes, including but not limited to:
* To enable you to use our online services
* To improve our services
* Handling requests for information, particularly regarding the services offered (pricing, quotes, terms, etc.)
* Managing relationships with our customers, prospects, website visitors, and more generally with our contacts
* Sales prospecting
* Providing support to customers and prospects
* Managing disputes
* Recruitment management
* Providing relevant information (general, technical, or other)
* Management of contribution programs aimed at developing new products or services or improving existing ones
* Managing relationships with our partners and additional services offered to our customers
* Optimizing our profitability and the commercial success of the products and offers we provide
* Monitoring the technical quality of web interfaces: error detection, performance tracking, and, with prior consent, session replay for debugging purposes (see [Section 12.1](#121-technical-monitoring--sentry-console-and-paradigm-web-interfaces) below)
Thus, LightOn processes your personal data within the framework of the contractual or pre-contractual relationship between you and LightOn, or within the framework of LightOn's legitimate interests in processing your personal data (see below), or when you have given us your consent to process your personal data.
A contractual or pre-contractual relationship, governed by the terms of the contractual documents signed or accepted by you and by us, by our general terms and conditions (of sale, use, or service), and any specific terms and conditions attached thereto, exists when you have ordered a product from us, submitted a request to our services, used one of our services, particularly online, or have requested to be put in touch with a professional from our company or our network; when you have expressed an explicit interest in a LightOn offer; when you have used one of our websites; when you have requested information from us regarding an offer, a service, or a product; or when you have applied for a job opening.
The legitimate interests that LightOn has in processing your data on its own behalf include the following:
* Optimizing our profitability and the commercial success of the products and offers we provide
* Ensuring our commercial success
* Better understanding:
* The usage, queries, and interests related to our offers, products, and services
* The users of the products and services offered by LightOn, in particular through studies, analyses, and statistics, as well as through our contribution programs
* Protecting ourselves against disputes, litigation, and fraud
* Identifying the individuals best suited to effectively fill vacant positions within our facilities
**In a nutshell**: When you provide us with your data for a specific purpose, we process that data to achieve that purpose. We may also process certain data to conduct analyses and studies to improve our services, to attract or retain our customers and users, and to manage disputes. For all of these purposes, we need personal data. As for other data concerning you, we process it only if you have consented to it.
## **3.2 As a Data Processor**
When you use a LightOn application or Service on behalf of a LightOn client, the relationship between you and LightOn is governed by the commercial and contractual relationship with said Client, as well as by any applicable General and Special Terms and Conditions.
The Services provided by LightOn enable LightOn's clients to perform processing operations that generally pursue at least one of the following objectives, without being limited to them:
* Providing a chatbot system that uses the client's documents and resources to generate responses.
* Providing the logic to enable users to register, configure, and use the application.
LightOn may also use its expertise to conduct studies and analyses of the use of the Services, in particular for the purposes of establishing indicators, identifying trends, performing predictive processing, proposing new services, as well as improving its own productivity and that of Users.
**In a nutshell**: When you use one of LightOn's services, both you and we have certain obligations and responsibilities, which, where applicable, are detailed in the Terms and Conditions governing the services provided by LightOn.
The Services are intended to provide certain services to LightOn's clients, who retain control over the data they provide or that is provided by users of the applications that LightOn's clients have authorized to access the applications.
# **4 Data Protection Service**
LightOn has designated a dedicated Data Protection Office. You may contact the person or department responsible for this function at the email address [rgpd\_rssi@lighton.ai](mailto:rgpd_rssi@lighton.ai) or at LightOn's mailing address, addressing your correspondence to the attention of the Data Protection Office.
# **5 Retention Period for Personal Data**
Personal data collected by LightOn on its own behalf is retained only for as long as necessary to fulfill the purpose for which it was collected or to comply with legal and regulatory requirements.
More specifically, the retention periods for the following data are:
* **Data collected when purchasing a product or service**: for the duration of the contractual relationship and 3 years after the end of the contract (interim archiving in accordance with legal or regulatory obligations and liabilities, up to 10 years after the end of the business relationship, particularly with regard to billing data).
* **Data collected when requesting information, making contact, etc.**: up to 3 years after the last positive interaction between LightOn and the data subject.
* **Connection data collected in connection with the use of our online applications and services** (IP address, browsing history, etc.): up to 6 months.
* **Usage metrics (billing and capacity)** — API call volumes, processed tokens, storage space, and aggregated timestamps, excluding the content of requests, prompts, or completions: retained for the duration of the contract and up to 13 months after its expiration, for billing, accounting reconciliation, and capacity planning purposes.
* **Access logs and technical logs (security and reliability)** — timestamp, API key ID, endpoint called, source IP address, HTTP status code, latency, request headers, and error traces, excluding request content, prompts, or completions: retained for up to 90 days for the purposes of abuse detection, fraud prevention, quota enforcement, security incident investigation, and audit trail maintenance in accordance with our legal, regulatory, and contractual obligations.
* **Sentry error reports (Error Reporting) and sessions recorded upon error detection (Session Replay)**: 90 days, with automatic rotation on Sentry servers. This data is collected only if the corresponding options are enabled.
* **Data processed during recruitment management** (including unsolicited applications): 2 years after the last contact with the candidate, unless there is an express request to shorten this period.
**In a nutshell**: We do not retain your data longer than necessary or as required by law. For example, the law requires that we retain invoices for your purchases, quotes, purchase orders, etc., for 10 years. For technical tools such as Sentry, data is automatically deleted after 90 days.
The retention periods for data collected by LightOn on behalf of its clients are determined by the client for whom the data was collected.
# **6 Scope of Data Collected**
In order to use LightOn's Sites and Services, we may collect and process the following personal data:
* Title, last name, and first name of individuals who have purchased a product from LightOn and those who have contacted us, job applicants, visitors to our websites, participants in one of our games or contests, etc.
* Where applicable, the employer of individuals who have purchased a product from LightOn when that employer is a LightOn customer.
* Title, last name, first name, and email address of users of the Services.
* Email address of individuals who have contacted us via a digital channel and individuals who subscribe to our newsletters.
* Email address of job applicants.
* Last name, first name, phone number, and/or mailing address of individuals who have contacted us and/or placed an order.
* Connection data (IP address, browsing history, technical details of devices, browser language and characteristics, etc.).
* Data contained in the resumes and cover letters of job applicants.
* Data provided by individuals during data processing carried out through the Services.
* **LightOn account data**: professional email address, name, organization, billing information (credit card data is transmitted directly to the payment provider and is not stored by LightOn).
* **Usage metrics**: API call volumes, processed tokens, storage space, and aggregated timestamps—excluding the content of requests, prompts, or completions.
* **Access logs and technical logs**: timestamp, API key ID, endpoint called, source IP address, HTTP status code, latency, request headers, and error traces—excluding the content of requests, prompts, or completions.
Connection data is collected and processed, including the IP address used for the connection: this is necessary to provide you with support, to implement our security measures, and to comply with our legal obligations, particularly regarding the traceability of access and usage.
**In a nutshell**: We need your contact information and email address to manage your purchases and requests, to inform you as a buyer and/or user and as a visitor to our websites as well as a prospective customer, to contact you and/or respond to your requests, to process your applications for our job openings, your phone number to contact you, and connection data to assist you and fulfill our obligations, particularly regarding traceability.
## **6.1 Location of Processing**
The processing that LightOn may perform on personal data is primarily carried out in data centers hosted by its service providers, in France or in Europe. Certain processing operations may be performed by LightOn's subcontractors, who may be located in various places.
LightOn strives to work with service providers, suppliers, and subcontractors that process data within the European Union or in a country listed as having adequate safeguards (for example, by adopting programs such as the Data Privacy Framework, or by implementing Binding Corporate Rules (BCRs), standard contractual clauses, data processing agreements, etc.). If this were not the case, the contractual relationship between LightOn and these third parties would require the implementation of appropriate safeguards. LightOn works with third parties that provide all necessary safeguards, and in particular with those with whom LightOn has signed the [European Commission's standard contractual clauses](https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX:32021D0914).
In all cases, and particularly in the event of regulatory changes, LightOn takes all necessary measures to regulate cross-border data transfers and establishes, if necessary, data protection agreements (DPAs) to ensure data transfers comply with applicable law, particularly pursuant to Article 46 of the GDPR.
Furthermore, LightOn may use the services of Sentry Inc. to monitor the Console and Paradigm web interfaces. Data transmitted to Sentry, if telemetry and/or error monitoring are enabled, is subject to the Standard Contractual Clauses (SCCs) adopted by the European Commission, as well as a Data Processing Agreement (DPA) available at [https://sentry.io/legal/dpa/](https://sentry.io/legal/dpa/). LightOn has also implemented Sentry Relay within its systems to filter personal data before it is transmitted to Sentry.
**In a nutshell**: The data you have entrusted to us is processed in France or in a country whose laws require compliance with the basic principles of fairness, transparency, and confidentiality, or by a recipient who provides all necessary and legal guarantees to ensure that both you and we can be confident.
## **6.2 Recipients of Processed Data**
LightOn may transmit the personal data you have provided or that it has collected to its employees, service providers, partners, or affiliated organizations that:
1. Need to know this information in order to process it on behalf of LightOn or to provide services for the purposes mentioned above, and
2. Have agreed not to disclose it to third parties.
These potential recipients include, in particular, the companies that host LightOn's websites (see legal notices) and the companies that provide technical services enabling the implementation of the Services.
LightOn may use the services of providers that offer messaging, accounting, opportunity management, email delivery, marketing, remote payment, monitoring, and web interface debugging services (see [Section 12.1](#121-technical-monitoring--sentry-console-and-paradigm-web-interfaces)), as well as the services of companies specializing in research, analysis, and satisfaction surveys, which may need to use your personal data to carry out the tasks entrusted to them.
The complete list of these data recipients can be provided upon request. The list of processors is referenced in the DPA, available upon request at [compliance@lighton.ai](mailto:compliance@lighton.ai).
Regarding the transfer of telemetry and error monitoring data, the user or customer can find detailed information on the LightOn documentation site, specifically via the following link: [Telemetry overview](/en/administration/monitoring-and-analytics/telemetry-overview).
LightOn will not rent or sell personal data to third parties without the explicit consent of the individuals concerned or following an explicit action on the part of the individual concerned.
Apart from its employees, service providers, partners, and affiliated organizations, as indicated above, LightOn discloses personal data only in the event of a subpoena, court order, or other government order, or when LightOn believes that such disclosure is necessary to protect the property or rights of LightOn, a third party, or the general public.
If you are a registered user on a LightOn website or have access to the Services, have provided your email address, and have not opted out of receiving communications from LightOn, LightOn may occasionally send you an email to inform you of new features, solicit your feedback, or keep you updated on LightOn news and offers. We may also use blogs to communicate this type of information.
LightOn takes all reasonable and necessary measures to protect your personal data against unauthorized access, use, modification, or improper destruction of personal (or potentially personal) data.
**In a nutshell**: The data you have entrusted to us is only shared if necessary or if you have given your consent. The recipients of your data, including us, provide all necessary safeguards to ensure your peace of mind.
## **6.3 Transfer of Processed Data to Third Parties**
The data you provide or that is collected by LightOn or on its behalf is not transferred to third parties, except, potentially, to the recipients mentioned above.
**In a nutshell**: We do not share your data, except in the cases we have already mentioned.
## **6.4 Transfer of Data to a Third Country Outside the European Union**
Some of the data you provide or that is collected by LightOn or on its behalf may be transferred to third parties operating outside the European Union. These third parties all provide sufficient safeguards to ensure the security, confidentiality, and protection of personal data.
**In a nutshell**: We do not transfer your data, except in the cases we have already mentioned. When we do transfer it, it is to recipients operating in a country whose laws require compliance with the basic principles of fairness, transparency, and confidentiality, or to service providers who provide all necessary guarantees to ensure your and our peace of mind.
## **6.5 Sales prospecting**
If you have already used our Services or ordered a product or service from us, and if you have not opted out of receiving our communications via SMS or email, LightOn may send you emails or text messages to alert you to offers for goods or products similar to those you have already ordered or purchased from us, to let you take advantage of our offers, to announce new features, to ask for your opinion, or simply to keep you informed of LightOn's latest news and offers. You always have the option to opt out of any such communications by following the unsubscribe links in our email communications, using a "STOP SMS" function if we have sent you a text message, clicking on an unsubscribe link in an email you have received, via your customer account on one of our websites, etc.
Every digital communication from LightOn for commercial or informational purposes (email, SMS, etc.) contains a link or instructions allowing you to opt out of future similar communications.
**In a nutshell**: If you have not opted out of receiving our digital communications related to your professional relationship with us, or if you are one of our customers, we may send you informational or promotional emails and text messages. You may opt out of receiving such emails and text messages at any time.
### **6.5.1 Newsletters and Digital Messages**
You may receive communications from LightOn, such as emails, newsletters, text messages, etc., because your contact information is included in our subscriber list. Your contact information is included in this list either due to the context of your professional activity (B2B communications related to your professional activities) or as a registered LightOn user, or because your contact information was submitted to this list either directly by you, via a visible form on the LightOn website, or based on public information such as your LinkedIn profile and various other publicly available data.
If you wish to update your email preferences or unsubscribe from one or more of our mailing lists, please click on the link provided at the end of any of the emails we send for business development purposes or use our email notifications and preferences form.
# **7 Procedures for Exercising Rights of Access, Rectification, and Objection**
As a customer or user of our Sites and Services, you have the right:
* To request that the data processed about you be deleted from our files. This is known as the right to be forgotten. That said, we cannot delete your data as long as there is a business relationship between us (such as an order that has not been fully processed), a warranty related to one of your purchases, or as long as there is a dispute between you and us, or, more generally, as long as we need your data to perform a contract or fulfill one of our obligations.
* To object to the collection and processing of data concerning you when it is not strictly necessary. If you are a customer or user of LightOn Services:
* We need your email address so that we can send you information, confirmation emails, password recovery or activation emails, and other communications necessary to access the app, etc.
* Your profile data is required to create and manage your profile and to provide the Services, including by identifying your interests and providing you with suggestions that best match your use of the Services.
* To access the data collected about you and retrieve it in a standard electronic format.
* To have it corrected.
* To request a restriction on their processing—for example, by refusing any use for sales prospecting purposes, or by requesting that a retention period be extended (e.g., for a recorded conversation) to manage a potential dispute or litigation.
* To withdraw your consent at any time to the use of optional trackers or features such as Sentry Session Replay, without this withdrawal affecting the lawfulness of processing carried out prior to the withdrawal or your access to the Services. This withdrawal can be made through your account settings.
Furthermore, as a candidate who has applied for a job at our company, you have the right:
* To request that the data you provided during your application, including your resume and cover letter, be deleted from our records. Until a candidate makes such a request, and for up to two years after the last contact with the candidate, it is in our legitimate interest to retain the candidate's data in order to ensure the best match between available positions and the individuals qualified to fill them.
These rights may be exercised by sending an email to [rgpd\_rssi@lighton.ai](mailto:rgpd_rssi@lighton.ai) or by contacting us at the contact information listed above or available on our website.
You also have the right to file a complaint with a supervisory authority and to seek judicial remedy, particularly if your requests to exercise your rights have not been processed within one month of being submitted. In France, the supervisory authority is the CNIL, which can be contacted via the appropriate forms on its website [cnil.fr](http://cnil.fr).
**In a nutshell**: You have control over the data you have entrusted to us. You can request access to it or to retrieve it, request that it be deleted, or that it be used only for certain purposes and not for others—for example, that it not be used to send you information or commercial offers. To the extent possible, we will strive to fulfill your requests as quickly as possible.
# **8 Disposition of Data**
You may provide instructions regarding the retention, deletion, and disclosure of your personal data after your death in accordance with Articles 84 and 85 of French Law No. 78-17 of January 6, 1978, as amended. These instructions may be general or specific.
You may submit your advance directives by contacting us via email at [rgpd\_rssi@lighton.ai](mailto:rgpd_rssi@lighton.ai).
**In a nutshell**: You have control over the data you have entrusted to us, and you can provide us with instructions to be followed after your death, should we still hold data about you at that time—which we hope will be as late as possible. For example, you may ask us to delete your data or to transfer it to a specific person.
# **9 Data Security**
LightOn takes all reasonable and necessary measures to protect the data we process against unauthorized access, use, modification, or destruction of personal (or potentially personal) data.
**In a nutshell**: The data you have entrusted to us is handled with care, and we take numerous measures to protect and safeguard it. For example, we may encrypt your data, grant access to this data only to those who need it, monitor the computers that store and process it, perform regular backups, and so on.
We are committed to the security of our services and have implemented physical, administrative, and technical measures to prevent unauthorized access to your data. Our security policies cover security management for internal operations and our services. These policies govern all security areas applicable to the services and apply to all LightOn employees as well as our service providers and subcontractors who need access to this data.
**In a nutshell**: We take the security of the data you entrust to us very seriously.
We assess and respond quickly to incidents that raise suspicions of unauthorized data manipulation. Our teams are notified of these incidents and, depending on the nature of the activity, define processes and response procedures to address them. If we determine that your data has been misappropriated or otherwise improperly obtained by a third party and that this poses a significant risk to your rights or freedoms, we will inform you as soon as possible and notify the supervisory authority (the CNIL in France) within a maximum of 72 hours in accordance with Article 33 of the GDPR.
**In a nutshell**: Our teams monitor and oversee all suspicious activity and are committed to minimizing such incidents as much as possible.
# **10 Subcontracting**
LightOn only uses processors who provide sufficient guarantees regarding the implementation of appropriate technical and organizational measures to ensure that processing meets the requirements of European regulations and safeguards the rights of the data subject.
**In a nutshell**: When we need subcontractors—for example, to host your data or process your orders—we select only those who have provided us with sufficient guarantees to ensure that both you and we can feel confident.
# **11 Transfer of Assets**
If LightOn, or substantially all of its assets, is sold, or in the unlikely event of LightOn's cessation of business or bankruptcy, the information of users, prospects, and customers would be among the assets transferred to or acquired by a third party. You acknowledge that such transfers may occur and that any acquirer of LightOn may continue to use your personal data in accordance with this privacy policy.
**In a nutshell**: If our company is sold or transferred, your data will be transferred to the new owner, as it is among our most valuable assets. But we guarantee that this data will then be handled by the new owner with at least the same level of care as we provide.
# **12 Trackers and Cookies**
Please refer to the "Cookie Policy" document for complete information on cookies and trackers.
## **12.1 Technical Monitoring — Sentry (Console and Paradigm web interfaces)**
**Scope of this section**: The provisions below apply exclusively to the LightOn Console and Paradigm web interfaces. They do not apply to calls made via the Console or Paradigm APIs.
LightOn uses the services of Sentry Inc. (132 Hawthorne Street, San Francisco, CA 94107, United States — [sentry.io](https://sentry.io)) to ensure the technical quality of the Console web interface. There are two levels of processing.
### **12.1.1 Sentry Error Reporting (error detection)**
*Disabled by default on the interfaces.*
Sentry Error Reporting automatically detects errors and performance issues on the web interface.
* **Data collected**: error type and message, stack trace, browser and operating system, page URL, recent activity trail (breadcrumbs: navigation, HTTP request statuses, anonymized DOM interactions).
* **What is not collected**: the content of prompts or API requests, API keys, billing data. `BeforeSend` filters are applied on the client side before any data is transmitted to Sentry.
* **Legal basis**: LightOn's legitimate interest (Article 6(1)(f) GDPR) in maintaining the technical quality of its interface. Sentry Error Reporting is configured without setting persistent identifying cookies and is classified as a technically necessary tracker, requiring no prior consent.
### **12.1.2 Sentry Session Replay**
*Disabled by default — subject to prior consent.*
Sentry Session Replay allows for the visual reconstruction of a user's navigation on the Console for the sole purpose of technical debugging. This is not a video recording of the screen but a reconstruction of changes to the browser's DOM.
* **Recorded data**: DOM changes (without field content), clicks, scrolling, page navigation, console logs, network request statuses.
* **Protective measures**: LightOn applies `maskAllText: true` and `blockAllMedia: true` — all displayed or entered text and all images are masked (replaced by asterisks or opaque blocks) on the browser side before any transmission to Sentry. This measure applies without exception to Console fields, including API keys, billing information, and all user content.
* **Legal basis and consent**: In accordance with the CNIL's draft recommendation on session replay tools (public consultation conducted in the first half of 2026), Session Replay is subject to the prior consent of the client and/or user under Article 82 of the French Data Protection Act. Consequently:
* Sentry Session Replay is only enabled upon explicit consent obtained through the user's or client's account settings in the Console interface.
* The user and/or client may withdraw their consent at any time via the account settings, without this withdrawal affecting the quality of or access to the service.
* **Retention period**: 90 days on Sentry servers, with automatic deletion. Individual recordings may be deleted upon request sent to [rgpd\_rssi@lighton.ai](mailto:rgpd_rssi@lighton.ai).
**In a nutshell**: To improve and debug our Console interface, we use two separate Sentry tools. The first (error detection) does not collect any information identified as personal. The second (session replay, which allows us to "replay" your browsing to find a bug) is only enabled if you give us your consent. In all cases, your entered text is masked before being sent to Sentry.
# **13 Recording of Phone Calls and Online Chats**
LightOn may record some of the calls made to its services. These recordings are used in our legitimate interest and, unless you object, for the following purposes:
* Employee training and development;
* Monitoring the quality of advice and customer service;
* Gathering factual evidence for the prevention and resolution of disputes, litigation, and pre-litigation matters;
* Protecting employees in the event of verbal abuse or incivility directed at them;
* Conducting experiments related to management and quality monitoring objectives, as well as analyzing conversations using artificial intelligence techniques.
They may also be used in connection with our legal obligations to:
* Manage requests to exercise your rights;
* Implement control measures, particularly regarding the fight against fraud and corruption.
Telephone recordings are intended solely for authorized personnel and may be transmitted to and/or accessed by individuals involved in the setup and analysis of telephone conversations. They are retained for a maximum of 30 days, except in the event of a dispute, in which case they are retained for the duration of the dispute and until all avenues of appeal have been exhausted.
When you communicate with our services via online chat (internal messaging chatbox), the entirety of your communications may be retained for a maximum of 2 months. The purposes of this data retention are:
* Improving the chatbot service, particularly through machine learning technologies;
* Enhancing employee skills;
* Monitoring the quality of advice and customer service;
* Gathering factual evidence for use in the prevention and resolution of disputes, litigation, and pre-litigation matters;
* Protecting employees in the event of verbal abuse or incivility directed at them;
* Conducting experiments related to management and quality monitoring objectives, as well as analyzing conversations using artificial intelligence techniques.
This data is intended solely for authorized personnel and may be transmitted to and/or accessed by individuals involved in the setup and analysis of conversations conducted via instant messaging (chat). We recommend that you never enter confidential information through this process. All data you provide to us may be retained in an anonymized form to the greatest extent possible. Since anonymization techniques are generally at least partially automated, it is recommended that you do not provide personal data (and certainly not sensitive data) via online chat tools. In particular, it is recommended that you never provide payment information such as credit card numbers.
# **14 Advertising**
We do not display advertising on our websites.
# **15 Changes to Our Privacy Policy**
We may update—and, more importantly, improve—this privacy policy from time to time, while ensuring that we never reduce the level of protection already provided. Although most changes are likely to be minor, LightOn may modify its privacy policy at its sole discretion. LightOn encourages its customers, service users, job applicants, and website visitors to check this page frequently to stay informed of any changes to its privacy policy. Your use of a LightOn website, any of the Services, a mobile app provided by LightOn, a contact request, an order, or any other provision of personal data following any changes to the privacy policy constitutes your acceptance of those changes.
**In a nutshell**: We may make changes to how we process your data, but with a level of protection that will be at least equivalent to that outlined in this policy. These changes are mostly minor. We don't routinely bother you with our new privacy policies by asking you to accept them again, but we'd appreciate it if you'd check the current policy from time to time. And remember that if you ever disagree with our policy, or if you have a question, or if you wish to exercise any of your rights, simply write to us at [rgpd\_rssi@lighton.ai](mailto:rgpd_rssi@lighton.ai).
# **16 Intellectual Property**
Our websites are published by LightOn. LightOn holds all intellectual property rights related thereto. It is prohibited to copy or download all or part of its content without the prior and express authorization of the owners or rights holders of said parts and said content.
This website and all of its content (including documents, photos, logos, trademarks, and information of any kind appearing on it) are protected by various rights, including copyright. LightOn grants users of the Sites and Services permission to view the content, specifically excluding the reuse of all or part of the content of the Sites or Services for any reason whatsoever. The reuse of all or part of the Sites or Services, including this document, is strictly prohibited. This document was drafted based on materials provided by [SysStreaming](https://sysstreaming.com), which has granted LightOn the necessary rights to use them. Any unauthorized reuse of all or part of the content of this document would thus violate the rights of LightOn and SysStreaming, which reserve the right to seek compensation for any damages incurred.
All reproduction rights are reserved, including for downloadable documents (PDFs as well as logos, photos, information of any kind, etc.). Any downloadable documents are also protected by copyright. We may ask for your email address to allow you to access this content, in particular to track access and any unauthorized reuse of our downloadable content, which is our legitimate interest.
Any total or partial reproduction of the Sites, or any reuse of any content from the Sites or Services, by any organization whatsoever, without the express authorization of LightOn or the rights holders where applicable, is prohibited and would constitute an infringement punishable under Articles L.335-2 et seq. of the French Intellectual Property Code. The databases used by LightOn are protected by the provisions of the law of July 1, 1998, transposing into the Intellectual Property Code the European Directive of March 11, 1996, on the legal protection of databases.
Similarly, any recording, broadcasting, translation, or adaptation, in whole or in part, of any element of the Sites or Services is prohibited without the express prior authorization of LightOn.
**In a nutshell**: Everything found on our websites, our services, our applications, or in our documents is our property or that of third parties who have granted us a right of use and may not be reused without first obtaining our explicit consent.
# **17 Hyperlinks**
The Sites and Services may provide access to other web pages or websites, including those of partners or corresponding to search results that may have their own legal notices, which should be consulted and respected.
The creation of hyperlinks pointing to the content of the Sites is permitted provided that they open in a new window. Under no circumstances may any content from the Sites be included within another site or imply or suggest that the content is not that of LightOn. LightOn reserves the right to request the removal of any link it deems non-compliant.
LightOn cannot under any circumstances be held liable for information published on websites with which hyperlinks have been established, nor for any damages of any kind resulting in particular from access to such websites.
LightOn is not liable for any hyperlinks on the Site that direct users to other websites.
**In a nutshell**: Links to our site are permitted provided you notify us, do not attempt to misrepresent the content as your own, and we do not object.
# Terms of Service
Source: https://docs.lighton.ai/en/support-legal/legal-and-compliance/terms-of-service
These Terms of Service govern access to and use of the LightOn Console platform and its associated APIs.
*Effective date: 28/05/2026*
*Version 1.0*
These Terms of Service ("Terms") govern access to and use of the LightOn Console platform and its associated APIs ("Console" or "Service"). By creating an account or using the Service, you accept these Terms in full. If you do not agree, you must not use the Service.
## **Article 1 – Definitions**
For the purposes of these Terms, the following terms shall have the meanings set out below:
**"Console"** or **"Service"**: The LightOn developer platform accessible at [https://console.lighton.ai](https://console.lighton.ai) (or any successor URL), including the web portal, REST APIs, playgrounds, usage dashboards, and any related tools or documentation made available by LightOn.
**"LightOn"** or **"Provider"**: LightOn SA, a French company (*société anonyme*) registered in the Paris Trade and Companies Register (*Registre du Commerce et des Sociétés de Paris*) under number 821 100 690 00014, with its registered office at 2 Rue de la Bourse, 75002 Paris, France, represented by its President.
**"Customer"** or **"you"**: Any natural person or legal entity that creates an account on the Console and uses the Service, whether under a Free Tier, a paid subscription, or an Enterprise arrangement. An account created by a natural person acting on behalf of a legal person is deemed to have been created by that legal person.
**"User"**: Any natural person authorised by the Customer to access the Console under the Customer's account.
**"API Key"**: A unique credential generated by the Console allowing the Customer or its applications to authenticate to and call the Console APIs.
**"AI Features"**: The artificial intelligence capabilities made available through the Console APIs, including but not limited to: text generation and completion (LLM inference), embeddings, retrieval-augmented generation (RAG), semantic and hybrid search, document indexation, optical character recognition (OCR), vision and multimodal analysis or generation, and any additional features published in the Documentation.
**"Input Data"**: Text, documents, images, or any other content submitted by the Customer to the Service for processing.
**"Output Data"**: Text, embeddings, vectors, parsed documents, search results, or other content generated or returned by the Service in response to the Customer's requests.
**"Customer Data"**: Input Data and Output Data, collectively, as well as any metadata, configuration data, and other information associated with the Customer's account and usage.
**"Documentation"**: The technical documentation, API reference, integration guides, and any other materials published by LightOn at [https://docs.lighton.ai](https://docs.lighton.ai) or through the Console interface.
**"Free Tier"**: A no-charge access level providing limited API call volumes and feature access as described in Article 6 – Free Tier and in the current Pricing Page.
**"Paid Plan"**: A subscription or usage-based plan, as described on the Pricing Page and in Article 7 – Paid Plans and Billing.
**"Enterprise Deployment"**: Any deployment mode other than the standard multi-tenant SaaS, including but not limited to On-Premises, Managed Mono-Tenant SaaS, or Hybrid deployments, governed by separate Special Terms appended to or associated with these Terms.
**"Pricing Page"**: The page available at [https://lighton.ai/pricing](https://lighton.ai/pricing), as updated from time to time, setting out the rates, quotas, and available plans.
**"DPA"**: LightOn's Data Processing Agreement, governing personal data processing where LightOn acts as a data processor, provided upon request at [compliance@lighton.ai](mailto:compliance@lighton.ai).
**"AUP"**: LightOn's Acceptable Use Policy, set out in Article 10 – Acceptable Use Policy (AUP) of these Terms.
**"EU AI Act"**: Regulation (EU) 2024/1689 of the European Parliament and of the Council on artificial intelligence.
**"GDPR"**: Regulation (EU) 2016/679 of the European Parliament and of the Council on the protection of natural persons with regard to the processing of personal data.
**"SLA"**: The Service Level Agreement specifying availability and support commitments, are available upon request at [compliance@lighton.ai](mailto:compliance@lighton.ai) or appended to the relevant plan or Enterprise arrangement.
**"Effective Date"**: The date on which the Customer completes account registration or, in the case of Enterprise Deployments, the date of signature of the applicable Purchase Order or Enterprise Agreement.
## **Article 2 – Contractual Documents**
### **2.1 Order of precedence**
The contractual relationship between LightOn and the Customer is governed, in descending order of priority, by:
1. Any signed Purchase Order or Enterprise Agreement (for Enterprise Deployments);
2. Any applicable Special Terms and Conditions (for Enterprise Deployments);
3. These Terms of Service and their appendices;
4. The applicable SLA;
5. The DPA (where personal data processing applies);
6. The Documentation.
In the event of a conflict between documents of different ranks, the higher-ranking document prevails.
### **2.2 Entire agreement**
Except as specified in section 2.4 below, these Terms, together with the documents listed above, constitute the entire agreement between LightOn and the Customer (hereinafter “the Parties”) and supersede all prior representations, negotiations, and agreements relating to the Service. Any general purchasing conditions or standard terms of the Customer are expressly excluded.
### **2.3 Amendments**
LightOn reserves the right to amend these Terms in accordance with Article 20 – Modifications to the Terms. Amendments to Enterprise Agreements require a written addendum signed by both Parties.
### **2.4 Special conditions, prior and specific agreements**
Where a Customer (or any of its affiliates) is party to a separate signed agreement with LightOn governing the use of any LightOn product (including Paradigm enterprise deployments), that agreement governs the relationship for that product. These Terms govern only the Customer’s use of the Console. In case of conflict between the two, the separate signed agreement prevails for the products it covers.
## **Article 3 – Eligibility and Account Registration**
### **3.1 Eligibility**
The Service is intended exclusively for professional use by businesses, developers, and organisations ("Business Users"). By registering, you represent and warrant that:
* You are at least 18 years of age;
* You have the authority to bind the entity on whose behalf you are registering;
* You are acting for professional or commercial purposes, not as a consumer;
* Your use of the Service will comply with all applicable laws and regulations, including those of France and the European Union.
The Service is not intended for consumers within the meaning of the French *Code de la consommation*.
### **3.2 Account creation**
To access the Service, the Customer must create an account via the Console registration page by providing accurate and complete information, including, where applicable:
* A valid professional email address;
* First and family name of the person creating the account on behalf of the Customer;
* Customer’s legal information: legal name and registered address;
* Customer’s tax information: VAT identification number;
* Acceptance of these Terms, the DPA, and the AUP.
LightOn reserves the right to refuse registration at its sole discretion, including where the requested use would violate these Terms or applicable law.
### **3.3 Account security**
The Customer is solely responsible for:
* Maintaining the confidentiality of its account credentials;
* All activities occurring under its account;
* Promptly notifying LightOn at [security@lighton.ai](mailto:security@lighton.ai) of any suspected unauthorised access or breach.
LightOn shall not be liable for any loss or damage arising from the Customer's failure to safeguard its credentials.
### **3.4 Organisational accounts**
Where the Customer is a legal entity, the person completing registration is deemed to have authority to bind that entity. Multiple Users may be authorised under a single account, subject to the plan's seat limits. The Customer remains fully responsible for all Users' compliance with these Terms.
## **Article 4 – API Keys**
### **4.1 Generation and use**
Upon account creation, the Customer may generate API Keys through the Console dashboard. Each API Key:
* Is unique to the Customer's account;
* Must not be shared with unauthorised third parties;
* May be revoked by the Customer or by LightOn at any time.
### **4.2 Security obligations**
The Customer must treat API Keys as confidential credentials and must:
* Store them securely (e.g., using secret management services, environment variables) and not embed them in public source code repositories;
* Rotate keys promptly upon any suspected compromise;
* Implement appropriate access controls to limit key exposure to authorised systems and personnel.
### **4.3 Responsibility**
Any API call made using the Customer's API Key is deemed to originate from the Customer. The Customer is responsible for all charges, data submitted, and Outputs generated through its API Keys, regardless of whether the call was authorised.
### **4.4 Revocation**
LightOn may revoke an API Key immediately, without prior notice, if it reasonably suspects misuse, a security incident, or a violation of these Terms.
## **Article 5 – Description of the Service**
### **5.1 Console features**
The Console provides access to the following core capabilities:
* **Account management**: registration, profile management, team and user management, API key lifecycle management;
* **Playground**: interactive testing environment for AI Features;
* **AI API endpoints**: programmatic access to AI Features as described in the Documentation, including for instance generation, embeddings, RAG, search, indexation, OCR, and Vision;
* **Usage dashboard**: real-time and historical metrics on API consumption, storage, and billing;
* **Documentation and SDK access**: guides, API reference, and developer tools.
### **5.2 AI Features**
The AI Features accessible through the Console include, without limitation:
* **Text generation**: completion and chat-style LLM inference over available models;
* **Embeddings**: dense vector representations of text and documents;
* **RAG (Retrieval-Augmented Generation)**: combined retrieval and generation pipelines over indexed knowledge bases, documents, data, etc.;
* **Document search and indexation**: ingestion, parsing, chunking, and semantic indexing of documents;
* **OCR**: extraction of text and structured data from scanned documents and images;
* **Vision**: multimodal analysis combining textual and visual inputs.
The specific models, features, and capabilities available depend on the Customer's plan and are documented on the Pricing Page and/or in the Documentation. LightOn reserves the right to update, deprecate, or replace AI Features upon reasonable notice.
### **5.3 Deployment modes**
The standard Console offering operates in **multi-tenant SaaS mode**, hosted by LightOn or its sub-processors on infrastructure located in the European Union. Enterprise Customers may additionally access the Service under the following deployment modes, governed by the applicable Special Terms:
* **Dedicated mono-tenant SaaS**: a dedicated, logically or physically isolated instance hosted and managed by LightOn;
* **Managed On-Premises**: the Console software is deployed on the Customer's own infrastructure and managed by LightOn;
* **On-Premises (customer-operated)**: the Console software is deployed on and operated by the Customer on its own infrastructure;
* **Hybrid On-Premises**: the back-end logic is operated by the Customer on its infrastructure, while LightOn provides stateless GPU nodes for inference computation on a shared basis.
Specific terms, security obligations, SLAs, and pricing for Enterprise Deployments are set out in the applicable Special Terms and/or Purchase Order.
## **Article 6 – Free Tier**
### **6.1 Free Tier offering**
LightOn offers a Free Tier allowing eligible Customers to access a limited version of Console at no charge, as described on the Pricing Page. Free Tier access can be subject to the following conditions:
* Monthly call quotas and storage limits as defined on the Pricing Page;
* Rate limits and throttling as described in the Documentation;
* Availability on a best-efforts basis, without any SLA commitments;
* Access to a limited set of models and features;
The actual features and limitation applicable to Free Tier are available on the Pricing Page and/or in the Documentation.
### **6.2 No SLA on Free Tier**
The Free Tier is provided "as is" and "as available." LightOn provides no uptime guarantees, no support commitments, and no data retention guarantees under the Free Tier, except as required by applicable law.
### **6.3 Transition to paid plans**
If the Customer exceeds Free Tier limits, API calls may be throttled or rejected, specifically for the feature or subset for which the limit has been reached. To access higher volumes or additional features, the Customer can upgrade to a Paid Plan. LightOn may, at its discretion, notify the Customer when approaching Free Tier limits.
### **6.4 Free Tier modifications**
LightOn reserves the right to modify, reduce, or discontinue the Free Tier at any time, with 30 days' prior notice by email or through the Console dashboard.
## **Article 7 – Paid Plans and Billing**
### **7.1 Plans**
Paid access to the Service is available under the plans described on the Pricing Page, which may include:
* **Usage-based plans**: the Customer is billed periodically based on actual consumption (API calls, tokens processed, documents indexed, storage used, etc.);
* **Subscription plans**: flat-rate monthly or annual subscriptions providing agreed quotas;
* **Enterprise plans**: custom pricing and terms, as set out in a Purchase Order.
The actual types, features and limitations applicable to Paid Plans are available on the Pricing Page and/or in the Documentation.
### **7.2 Prices**
Prices are set out on the Pricing Page. Unless otherwise stated, prices are:
* Exclusive of all applicable taxes (including VAT);
* Denominated in euros (€);
* Subject to revision as set out in Article 7.7.
### **7.3 Payment methods and payment service provider**
All payments under self-serve Plans are processed by Stripe, Inc. ("Payment Processor"), subject to Stripe's applicable terms of service. LightOn accepts payment by credit card. Additional payment methods may be made available at LightOn's discretion.
Invoices are denominated in euros (EUR). For Customers paying from accounts held in another currency, Stripe applies its standard foreign exchange conversion at the time of the transaction; LightOn bears no liability for exchange rate fluctuations or conversion costs incurred by the Customer.
For self-serve Plans, payment is processed automatically at the end of each billing cycle. The Customer is responsible for maintaining valid and up-to-date payment information in the Console dashboard.
### **7.4 Billing cycle and invoicing**
Billing cycles and invoice issuance are as follows:
* **Monthly usage-based plans**: billed in arrears at the end of each calendar month;
* **Annual subscriptions**: billed in advance at the start of each annual term, unless otherwise agreed;
* **Enterprise plans**: in accordance with the applicable Purchase Order.
Invoices are issued electronically and may be made available in the Console dashboard and sent by email to the registered address. The Customer is responsible for providing accurate billing and tax information.
Invoices are due upon receipt for monthly usage-based plans and annual subscriptions.
### **7.5 Prepaid credits**
LightOn may offer prepaid credit packages. Credits:
* Are non-refundable once purchased, except as required by applicable law;
* Have a validity period as specified at the time of purchase;
* Are non-transferable.
### **7.6 Non-payment and suspension**
In the event of failed payment or non-payment:
* LightOn may suspend access to the Service after providing written notice (email) and a cure period of 7 business days;
* Late payment shall bear interest at three (3) times the legal interest rate, plus a flat-rate collection indemnity of €40, in accordance with Articles L.441-6 and D.441-5 of the French *Code de commerce*;
* Persistent non-payment for more than 60 days may result in termination of the account pursuant to Article 18.
### **7.7 Price revisions**
For subscription plans in force, prices may be revised anytime with prior 30 days notice. Existing customers may cancel their subscription at any time during the interim period, in accordance with clause 18.2.
### **7.8 Disputes**
The Customer must raise any billing dispute within 15 days of receiving the invoice, by contacting [support@lighton.ai](mailto:support@lighton.ai). Undisputed amounts remain due and payable.
## **Article 8 – License and Intellectual Property**
### **8.1 License to use the Service**
Subject to the Customer's full compliance with these Terms and payment of applicable fees, and except as mentioned in Purchase Orders or other contractual documents, LightOn grants the Customer a limited, non-exclusive, non-transferable, non-sublicensable, revocable license to:
* Access and use the Console and its AI Features via the APIs and web interface;
* Integrate the API outputs into the Customer's own applications and workflows;
* Make copies of the Documentation strictly necessary for the Customer's internal use.
This license is granted solely for the Customer's internal professional purposes and for integration into Customer-built products or services.
### **8.2 Restrictions**
The Customer must not, and must ensure its Users do not:
* Reproduce, copy, decompile, reverse engineer, disassemble, or attempt to extract the source code of the Console or any AI model made available or used through the Console, except to the extent expressly permitted by applicable law;
* Modify, adapt, translate, or create derivative works of the Console software or LightOn's models;
* Sublicense, rent, sell, resell, lease, or otherwise transfer access to the Service to third parties, other than as part of the Customer's own products or services that consume the APIs;
* Use the Service to train, fine-tune, or distil competing AI models, or to benchmark the Service against competitors for public commercial purposes, without LightOn's prior written consent;
* Circumvent or attempt to circumvent any technical access controls, rate limits, or usage restrictions;
* Use the Service in a manner that would infringe any third party's intellectual property rights.
### **8.3 LightOn's intellectual property**
All intellectual property rights in and to the Console, the AI Features, LightOn's models, the Documentation, and any related technology remain the exclusive property of LightOn. Nothing in these Terms transfers any intellectual property right to the Customer other than the limited license granted in Article 8.1.
LightOn's trademarks, logos, and branding may not be used without prior written authorisation.
### **8.4 Customer Data and outputs**
As between the Parties:
* **Customer Data (Input)**: the Customer retains full ownership of all Input Data submitted to the Service.
* **Output Data**: the Customer owns Output Data generated in response to its inputs, subject to any third-party rights and to the limitations described in 8.6 License granted to LightOn below.
### **8.5 Copyright and output similarity**
The Customer acknowledges that the AI models provided via the Console are trained on large corpora of text and data, which may include material protected by third-party intellectual property rights. As a result:
* Output Data may reflect patterns, phrasing, or structures statistically derived from such training material, and may, in certain cases, bear similarity to pre-existing copyrighted works, without LightOn necessarily being aware of this at the time of generation;
* Due to the statistical nature of generative AI, Output Data produced in response to similar or identical inputs may be substantially similar or identical across different customers. LightOn makes no warranty of exclusivity or uniqueness with respect to any Output Data.
The Customer is solely responsible for reviewing Output Data before any use, publication, or commercial exploitation, and for conducting any intellectual property clearance it deems necessary. LightOn disclaims all liability arising from any third-party intellectual property infringement claim relating to Output Data, where such claim results from the Customer's use, reproduction, or distribution of that Output Data. The Customer shall indemnify LightOn against any such third-party claim pursuant to Article 17.5.
Nothing in this clause limits LightOn's obligations under the EU AI Act, including its transparency obligations regarding training data under Article 53(1)(d) of Regulation (EU) 2024/1689.
### **8.6 License granted to LightOn**
To provide the Service, the Customer grants LightOn and its authorised sub-processors a non-exclusive, worldwide, royalty-free, limited license to host, process, store, cache, and transmit Customer Data solely to the extent necessary to deliver the Service, enforce these Terms, and comply with applicable law. This license terminates upon deletion of Customer Data as provided in Article 12 – Data Portability and Deletion.
LightOn does not use Customer Data to train, fine-tune, or improve any general-purpose AI models, except where the Customer has expressly opted into such use in writing or through a clearly presented consent mechanism in the Console.
### **8.7 Feedback**
Where the Customer provides LightOn with feedback, suggestions, or ideas regarding the Service ("Feedback"), LightOn may freely use such Feedback to improve its products and services without any obligation of confidentiality or compensation, unless a separate written agreement provides otherwise.
## **Article 9 – AI-Specific Provisions**
### **9.1 Nature of AI outputs**
The AI Features are probabilistic systems. Output Data is generated based on statistical patterns and may be:
* Inaccurate, incomplete, or inconsistent;
* Similar or identical to output generated for other customers (due to model generality);
* Subject to hallucinations, biases, or errors.
The Customer must review Output Data before relying on it for any consequential purpose and must not treat it as professional advice (legal, medical, financial, or otherwise).
### **9.2 Customer as deployer under the EU AI Act**
Where applicable, the Customer acts as a **deployer** of AI systems within the meaning of the EU AI Act. As such, the Customer is responsible for:
* Assessing whether its intended use of the AI Features falls within any prohibited or high-risk use case category under the EU AI Act;
* Ensuring that its deployment complies with all obligations applicable to deployers, including transparency, human oversight, and data governance requirements;
* Refraining from using the Service for purposes prohibited under Article 5 of the EU AI Act, including without limitation: social scoring systems, real-time remote biometric identification in public spaces (except as permitted by law), or systems designed to exploit psychological vulnerabilities.
LightOn makes no representations regarding the suitability of the AI Features for any particular use case, including high-risk use cases.
### **9.3 Non-use for prohibited AI applications**
The Customer expressly agrees not to place on the market, put into service, or use the Service for any AI practice prohibited under Article 5 of the EU AI Act, as that Article may be amended or supplemented from time to time, including any practice falling within points (a) to (h) of Article 5(1).
### **9.4 AI transparency obligations**
Where required by applicable law, the Customer is responsible for informing its own end-users that content has been generated or assisted by an AI system, and for providing any required disclosures regarding automated decision-making.
### **9.5 Model availability and changes**
LightOn may update, replace, or retire AI models made available through the Console, with reasonable prior notice. LightOn will endeavour to maintain backward compatibility of API interfaces; however, model-level changes (e.g., updated weights, altered output characteristics) may affect Customer integrations.
## **Article 10 – Acceptable Use Policy (AUP)**
### **10.1 General obligations**
The Customer agrees to use the Service only for lawful purposes and in compliance with all applicable laws and regulations. The Customer must not use the Service to process, generate, transmit, or store content that:
* Is illegal, fraudulent, defamatory, threatening, harassing, or abusive;
* Infringes any third party's intellectual property, privacy, or other rights;
* Constitutes or facilitates discrimination based on race, ethnic origin, religion, disability, gender, sexual orientation, nationality, or any other protected characteristic;
* Promotes terrorism, extremism, or violence;
* Contains or distributes malware, viruses, or other malicious code;
* Involves the non-consensual collection or processing of personal data;
* Is designed to deceive or manipulate users in harmful ways.
### **10.2 API abuse**
The Customer must not:
* Conduct load tests, stress tests, or security assessments of the Service without prior written consent from LightOn;
* Attempt to probe, scan, or test the vulnerability of the Service or its infrastructure without prior written consent from LightOn;
* Use automated bots or scripts in a manner that creates a disproportionate load or disrupts the Service for other customers;
* Attempt to access data or accounts belonging to other customers.
### **10.3 Security and sovereignty-sensitive uses**
For public sector, defence, or critical infrastructure uses subject to specific security or sovereignty requirements (e.g., ANSSI SecNumCloud qualification, NATO classifications, NIS2 obligations, etc.), the Customer must notify LightOn prior to onboarding and must use an Enterprise Deployment mode specifically validated for such purposes. Multi-tenant SaaS mode is not validated for classified or Restricted (DR/TF) workloads.
### **10.4 Enforcement**
LightOn may investigate suspected AUP violations and may, at its sole discretion, issue a warning, throttle access, suspend the API Key(s) concerned, or terminate the Customer's account in accordance with Article 18 – Term and Termination. LightOn may also report violations to competent law enforcement authorities where required by law.
## **Article 11 – Data Protection and Privacy**
### **11.1 General**
LightOn processes personal data in accordance with applicable data protection law, including the GDPR and French *Loi n° 78-17 du 6 janvier 1978 relative à l'informatique, aux fichiers et aux libertés* ("Loi Informatique et Libertés"). LightOn's Privacy Policy, available at [https://docs.lighton.ai/en/support-legal/legal-and-compliance/privacy-policy](https://docs.lighton.ai/en/support-legal/legal-and-compliance/privacy-policy), describes how LightOn processes personal data for which it acts as controller (e.g., Customer account data, billing information).
### **11.2 LightOn as data processor**
Where the Customer submits Input Data containing personal data to the Service for processing, LightOn acts as a **data processor** within the meaning of Article 28 GDPR. In such cases:
* The Parties' respective obligations are governed by the DPA, which is incorporated into these Terms by reference;
* The Customer, as data controller, is responsible for ensuring it has a valid legal basis to process such personal data and to transfer it to LightOn for processing;
* The Customer must not submit special-category data (Article 9 GDPR) or personal data of minors to the Service without a documented lawful basis and prior notification to LightOn.
* LightOn must assist the Customer for relevant matters mentioned in the GDPR and/or the DPA (data subjects rights, privacy impact assessment, data breaches, etc.).
### **11.3 Data residency**
For the standard multi-tenant SaaS deployment, Customer Data is processed and stored on infrastructure located in the European Union, using sub-processors listed in the DPA. The Customer may request a specific data residency zone as part of an Enterprise Deployment, subject to availability and additional charges.
### **11.4 Data minimisation and retention**
LightOn applies data minimisation principles to usage and telemetry data. The specific retention periods applicable to Input Data, Output Data, logs, and usage data are set out in the DPA and the applicable SLA.
In the SaaS modes where LightOn manages the inference nodes, inference and compute instances operate in a **stateless** manner: Input Data is not persistently stored on compute or inference nodes after a request is completed.
### **11.5 Customer obligations**
The Customer is responsible for:
* The lawfulness of all personal data submitted to the Service;
* Providing appropriate notices and obtaining necessary consents from data subjects;
* Responding to data subject rights requests in respect of data processed through the Service;
* Maintaining its own records of processing activities as required by Article 30 GDPR.
## **Article 12 – Data Portability and Deletion**
### **12.1 Export**
During the term of the Customer's subscription, the Customer may export its Customer Data (indexed documents, stored outputs, configuration data, etc.) via the Console interface or API, in standard formats as documented. LightOn will maintain export functionality for the duration of the subscription.
### **12.2 Deletion upon termination**
Following termination or expiry of the Customer's account:
* LightOn will delete or anonymise Customer Data within 30 days of the termination date, except where retention is required by applicable law or for legitimate legal purposes;
* Backups containing Customer Data will be purged with backups rotation and overwriting;
* The Customer will receive a confirmation of deletion upon request.
### **12.3 Portability for Enterprise Deployments**
Where applicable, specific data portability and transition assistance obligations for Enterprise Deployments are set out in the applicable Special Terms.
## **Article 13 – Security**
### **13.1 LightOn's security measures**
LightOn implements technical and organisational measures designed to protect Customer Data against unauthorised access, disclosure, alteration, or destruction, including, without limitation:
* Encryption of data in transit (TLS 1.2 or higher) and at rest (AES-256 or equivalent);
* Logical isolation of Customer environments in multi-tenant infrastructure;
* Role-based access controls and privileged access management;
* Audit logging of administrative access and API key usage;
* Regular vulnerability assessments and penetration testing;
* Business continuity and disaster recovery procedures;
* Certifications as specified in [LightOn’s trust center](https://trust.lighton.ai).
### **13.2 Security incident notification**
In the event of a personal data breach within the meaning of Article 4(12) GDPR, LightOn will notify the Customer without undue delay and, in any case, within 72 hours of becoming aware, in accordance with the Customer’s obligations under Article 33 GDPR and the DPA.
### **13.3 Customer's security obligations**
The Customer is responsible for:
* Implementing appropriate security measures in its own environment and applications integrating the APIs;
* Protecting API Keys and ensuring they are rotated regularly;
* Reporting suspected security incidents or vulnerabilities to LightOn at [security@lighton.ai](mailto:security@lighton.ai) promptly.
### **13.4 Security for Enterprise Deployments**
Security requirements, penetration testing rights, audits, and specific certifications applicable to Enterprise Deployments (including on-premises modes) are governed by the applicable Special Terms and, where applicable, Security Addenda forming part of the Enterprise Agreement.
## **Article 14 – Service Levels and Availability**
### **14.1 SaaS availability commitments**
For Paid Plans, LightOn commits to the availability levels, maintenance windows, and support response times set out in the applicable SLA available upon request at [support@lighton.ai](mailto:support@lighton.ai).
### **14.2 Free Tier and best-efforts basis**
No SLA applies to the Free Tier. The Service is provided on a best-efforts basis under the Free Tier, and LightOn reserves the right to perform maintenance or impose throttling at any time.
### **14.3 Scheduled maintenance**
LightOn will endeavour to provide advance notice of scheduled maintenance affecting the Service, in accordance with the applicable SLA.
### **14.4 Enterprise SLAs**
Custom SLAs, including dedicated uptime commitments, incident escalation procedures, and premium support arrangements, may be agreed for Enterprise Deployments in the applicable Purchase Order or SLA addendum.
## **Article 15 – Confidentiality**
### **15.1 Obligations**
Each Party ("Receiving Party") agrees to keep confidential all non-public information disclosed by the other Party ("Disclosing Party") in connection with the Service ("Confidential Information"), and to use such information solely for the purposes of performing or receiving the Service.
Customer Data is considered the Customer's Confidential Information. LightOn's models, code, algorithms, infrastructure, pricing, and roadmap are LightOn's Confidential Information.
### **15.2 Exclusions**
The confidentiality obligation does not apply to information that:
* Is or becomes publicly available through no fault of the Receiving Party;
* Was already known to the Receiving Party prior to disclosure;
* Is independently developed by the Receiving Party without reference to the Confidential Information;
* Is required to be disclosed by applicable law or court order, provided the Receiving Party gives the Disclosing Party prompt prior notice where legally permitted.
### **15.3 Duration**
Confidentiality obligations survive termination of these Terms for a period of five (5) years, except for trade secrets, which remain protected for as long as they qualify as such under applicable law.
## **Article 16 – Warranties and Disclaimers**
### **16.1 LightOn's warranties**
LightOn warrants that:
* It has the right to grant the licenses set out in 8.1 License to use the Service;
* The Service will perform substantially in accordance with the Documentation under normal use and operating conditions;
* It will implement the security measures described in Article 13 – Security.
### **16.2 Disclaimers**
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW:
* THE SERVICE IS PROVIDED "AS IS" AND "AS AVAILABLE". LIGHTON MAKES NO ADDITIONAL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
* LIGHTON DOES NOT WARRANT THAT OUTPUT DATA WILL BE ACCURATE, COMPLETE, RELIABLE, OR FREE FROM ERRORS OR BIASES.
* LIGHTON DOES NOT WARRANT THAT THE SERVICE WILL BE UNINTERRUPTED, ERROR-FREE, OR FREE FROM SECURITY VULNERABILITIES.
* LIGHTON IS NOT RESPONSIBLE FOR THE SUITABILITY OF THE SERVICE FOR THE CUSTOMER'S SPECIFIC USE CASE, INCLUDING ANY HIGH-RISK AI APPLICATION.
## **Article 17 – Limitation of Liability**
### **17.1 Exclusion of indirect damages**
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, NEITHER PARTY SHALL BE LIABLE TO THE OTHER FOR ANY INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES (INCLUDING LOSS OF PROFITS, LOSS OF DATA, LOSS OF BUSINESS, OR REPUTATIONAL DAMAGE), ARISING OUT OF OR IN CONNECTION WITH THE SERVICE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
### **17.2 Cap on liability**
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, LIGHTON'S TOTAL AGGREGATE LIABILITY TO THE CUSTOMER, ARISING OUT OF OR RELATED TO THESE TERMS OR THE SERVICE, WHETHER IN CONTRACT, TORT, OR OTHERWISE, SHALL NOT EXCEED THE GREATER OF:
(a) THE TOTAL AMOUNTS PAID BY THE CUSTOMER TO LIGHTON IN THE SIX (6) MONTHS IMMEDIATELY PRECEDING THE EVENT GIVING RISE TO THE CLAIM; OR
(b) TEN THOUSAND EUROS (€10,000).
### **17.3 Free Tier**
NOTWITHSTANDING ARTICLE 17.2, LIGHTON'S TOTAL LIABILITY IN RESPECT OF THE FREE TIER IS LIMITED TO ONE HUNDRED EUROS (€100).
### **17.4 Exceptions**
Nothing in these Terms excludes or limits liability for: death or personal injury caused by negligence, fraud or fraudulent misrepresentation, or any other liability that cannot be excluded or limited under applicable French or EU law.
### **17.5 Customer indemnity**
The Customer shall indemnify, defend, and hold harmless LightOn and its officers, directors, employees, and agents from and against any third-party claims, damages, or costs (including reasonable legal fees) arising from: (i) the Customer's use of the Service in violation of these Terms; (ii) the Customer's Input Data, including any infringement of third-party rights or data protection violations; (iii) the Customer's end-users' use of Customer-built applications powered by the Service.
## **Article 18 – Term and Termination**
### **18.1 Term**
These Terms take effect on the Effective Date and remain in force until terminated as provided herein or, for Enterprise Deployments, for the term specified in the applicable Purchase Order.
### **18.2 Termination by the Customer**
The Customer may terminate its account:
* **Free Tier**: at any time by deleting the account through the Console interface;
* **Monthly plans**: at any time, effective at the end of the current billing cycle;
* **Annual subscriptions**: at any time, with written notice to [support@lighton.ai](mailto:support@lighton.ai); early termination of an annual subscription does not entitle the Customer to a refund of prepaid fees except if LightOn notified the Customer of a price increase. In that case, the prepaid amount will be refunded on a pro rata basis from the date the price change takes effect;
* **Enterprise Deployments**: subject to the notice and termination provisions of the applicable Purchase Order (generally three (3) months' notice at the end of the initial term or any renewal term).
### **18.3 Termination by LightOn**
LightOn may terminate the Customer's account:
* Immediately, without notice, if the Customer materially breaches the AUP or engages in fraudulent, abusive, or unlawful conduct;
* With 30 days' notice, for any other material breach of these Terms that the Customer fails to cure within such period;
* With 90 days' notice, for the discontinuation of the Service;
* Immediately, in the event of non-payment exceeding 60 days after the due date.
### **18.4 Effect of termination**
Upon termination:
* All licenses granted to the Customer immediately cease;
* The Customer must immediately cease all use of the Service and API Keys;
* All amounts due and payable as of the termination date remain due, and no refunds are owed except as required by applicable law;
* LightOn will delete Customer Data as set out in Article 12 – Data Portability and Deletion.
### **18.5 Survival**
The following provisions survive termination: Article 1 – Definitions, 8.3 LightOn's intellectual property, 9.1 Nature of AI outputs, Article 15 – Confidentiality, Article 16 – Warranties and Disclaimers, Article 17 – Limitation of Liability, 18.4 Effect of termination, Article 19 – Governing Law and Dispute Resolution, and Article 21 – Miscellaneous.
## **Article 19 – Governing Law and Dispute Resolution**
### **19.1 Governing law**
These Terms and any disputes arising from or in connection with them shall be governed by and construed in accordance with French law, without regard to its conflict of laws rules.
### **19.2 Amicable resolution**
In the event of a dispute, the Parties agree to use their best efforts to resolve it amicably. Either Party may initiate the amicable resolution process by giving written notice to the other Party describing the dispute in reasonable detail. The Parties shall negotiate in good faith for a period of 30 days from the date of such notice.
### **19.3 Jurisdiction**
If the Parties fail to resolve the dispute amicably, the courts of Paris, France, shall have exclusive jurisdiction, subject to any mandatory jurisdictional rules applicable under French or EU consumer protection law.
### **19.4 Mediation**
Without prejudice to the foregoing, the Parties may at any time agree to submit the dispute to mediation before a mediator appointed by mutual agreement or under the rules of the Centre de Médiation et d'Arbitrage de Paris (CMAP).
## **Article 20 – Modifications to the Terms**
LightOn reserves the right to modify these Terms at any time. Modifications will be notified to the Customer by:
* Email to the registered account address; and/or
* A prominent notice in the Console dashboard.
For **material changes**, LightOn will provide at least 30 days' advance notice. The Customer's continued use of the Service after the effective date of the modification constitutes acceptance of the modified Terms.
If the Customer does not accept the modified Terms, it may terminate its account before the effective date of the modification, in which case:
* For paid annual subscriptions: LightOn will provide a pro-rata refund of prepaid fees for the unused period;
* For monthly and usage-based plans: no refund is owed for charges already incurred.
## **Article 21 – Miscellaneous**
### **21.1 Entire agreement**
These Terms (together with the documents referred to herein) constitute the entire agreement between the Parties with respect to the Service and supersede all prior agreements and representations.
### **21.2 Severability**
If any provision of these Terms is held to be invalid, illegal, or unenforceable, that provision shall be modified to the minimum extent necessary to make it enforceable. The remaining provisions shall continue in full force.
### **21.3 Waiver**
The failure of either Party to enforce any provision of these Terms shall not constitute a waiver of that Party's right to enforce such provision in the future.
### **21.4 Assignment**
The Customer may not assign or transfer any of its rights or obligations under these Terms without LightOn's prior written consent. LightOn may assign its rights and obligations under these Terms to a successor entity in the event of a merger, acquisition, or sale of substantially all of its assets, provided it gives the Customer notice and the successor entity assumes all obligations under these Terms.
### **21.5 Force majeure**
Neither Party shall be liable for delays or failures in performance resulting from circumstances beyond its reasonable control, including but not limited to: acts of God, natural disasters, epidemics, pandemics, war, terrorism, government orders, cyberattacks not attributable to the Party's negligence, or failures of third-party infrastructure providers. The affected Party must promptly notify the other and use its best efforts to mitigate the impact.
### **21.6 Sub-processors and third parties**
LightOn may use sub-processors to deliver the Service, as listed in the DPA. LightOn remains responsible for the acts and omissions of its sub-processors to the same extent as for its own acts and omissions under these Terms.
### **21.7 Export controls**
The Customer must comply with all applicable export control laws and regulations, including EU dual-use regulations and any applicable sanctions. The Customer represents that neither it nor any User is the subject of any applicable trade restriction.
### **21.8 Accessibility**
LightOn will make its best efforts to ensure that the console generally complies with the applicable digital accessibility standards RGAA / EN 301 549.
### **21.9 Communications and notices**
All notices under these Terms must be sent in writing:
* **To LightOn**: by email to [compliance@lighton.ai](mailto:compliance@lighton.ai) and/or by registered post with acknowledgment of receipt to LightOn SA, 2 Rue de la Bourse, 75002 Paris, France;
* **To the Customer**: by email to the registered account address.
Notices sent by email are deemed received on the business day following transmission (absent proof of non-delivery). Notices sent by registered post are deemed received three (3) business days after dispatch.
Last updated: 28/05/2026 — LightOn SA, 2 Rue de la Bourse, 75002 Paris, France
# Terms of use
Source: https://docs.lighton.ai/en/support-legal/legal-and-compliance/terms-of-use
These Conditions of Use govern access and use of the Services made available by LightOn.
*Effective date: 28/05/2026*
## **1. Definitions**
“**Data Protection** Agreement” or “**DPA**” means the agreement between LightOn and the Customer regarding the processing of Personal Data.
“Administrator” means an Authorized User designated by the Customer to manage and control the Platform, the Customer’s accounts, and the Authorized Users.
“**Third-Party** Applications” means all third-party applications, integrations, websites, products, or services that are linked to or interact with the Services, including all applications created by third parties using LightOn’s software development kits (“SDKs”) or other development tools.
**“API Key”** means the unique identifier generated via the Console or via Paradigm that allows the Customer or its applications to authenticate and consume LightOn’s API Services.
**“Customer”** means the person or organization that has entered into a contract for the provision of solutions delivered through the use of the Platform made available by LightOn for the purpose of benefiting from and/or enabling its Authorized Users to benefit from the User Services offered by LightOn.
**“Account”** refers to the online space made available to Users to manage the User interface, notably by providing access to certain User information (including last name, first name, email address, phone numbers, Content, etc.), to access relevant information and documents stored on the Platform, and to use the Platform in connection with the services provided by LightOn.
**“Terms”** has the meaning given to it in the preamble hereto.
**“Customer Terms”** refers to the specific terms that apply to Authorized Users and bind them to the Customer.
“Content” means any content that LightOn has not directly created or produced (data entered by Authorized Users, documents provided, etc.).
“**User** Documentation” means any documentation or materials provided (or made available) by LightOn to the Customer or Authorized Users in connection with the Services.
“**Customer** Data” refers to all information and data processed by a LightOn Service on behalf of the Customer, including all Personal Data as well as all photos, videos, audio or transcription data, images, comments, annotations, documents, user support communications, or any other content or information entered, uploaded, or processed by Users or automatically within the Platform or through the User Services, or collected, stored, or processed by LightOn on behalf of the Customer or its Authorized Users through or *via* the Platform or the User Services
“**Personal** Data” means personal data or personal information (each as defined in the GDPR and in national laws implementing the GDPR, including the French Data Protection Act of January 6, 1978, as amended) contained in the Customer Data and which enables the direct or indirect identification of a natural person.
“Platform” means all solutions and services provided by LightOn as part of the User Services, on all platforms such as mobile, web, or desktop applications, and hosting the User Services. The solutions and services in question include, in particular, Paradigm and LightOn Console. The Platform may be hosted
* On Premises, under the Customer’s full control
* In a private cloud, under the Customer’s full control
* In a private cloud managed by LightOn on behalf of the Customer (single-tenant installation, except possibly regarding the use of GPU-type nodes, used in particular for interferometry, document processing, and text generations)
* In a private cloud managed and controlled by LightOn (multi-tenant installation)
“Party” means individually LightOn or the Customer and jointly LightOn and the Customer.
“**Confidential** Information” means information exchanged by the Parties that would reasonably be considered confidential given the nature of the information, regardless of its form, medium, or means, including, without this list being exhaustive, any information collected (or provided) by the Customer or the User on the Platform or the Services, commercial information, product, technology, and marketing information, orders, discounts, non-public payment terms, audit reports, and Customer Data, as well as information specifically designated as such by either Party. Confidential Information does not include information that (a) is or becomes publicly known through lawful means; (b) was known to the recipient prior to disclosure without any obligation of confidentiality; (c) is received from a third party without a breach of confidentiality obligations; or (d) has been independently developed by the recipient without use of or access to confidential information.
“**Legal** Process” means a disclosure of information or a request for access made pursuant to law, a government regulation, a court order, a subpoena, a warrant, a regulatory request or from a government agency, or from another legal authority, legal proceeding, or similar valid process.
“GDPR” means Regulation (EU) 2016/679 of the European Parliament and of the Council of April 27, 2016, on the protection of natural persons with regard to the processing of personal data and on the free movement of such data, and repealing Directive 95/46/EC.
**“User** Services” means (i) Users’ access to the Platform, (ii) any hosting of the Platform and the Data and related processing, including processing performed in response to calls to the APIs exposed by the Platform, (iii) the administration and support of hosting servers, if applicable, (iv) any backup of Customer Data, (v) support and corrective and evolutionary maintenance of the Platform, and (vi) the correction of Defects.
“Site” means the LightOn application website / the Platform accessible to the Customer / Users.
“**User(s)**” means any person who uses the User Services, including Authorized Users and third parties who access the User Services in connection with the use and internal management of the Platform on behalf of the Customer.
“**Authorized User(s)**” means employees, agents, or other third parties authorized by the Customer to access or use the User Services, including Administrators and users whose access to the platform is required or intended, including, where applicable, LightOn employees and certain service providers.
## **2. Customer Terms**
The Platform may allow the Customer who has enabled access to the Platform for Authorized Users to upload its own terms and conditions. These Customer Terms govern the use of the Platform by the Customer’s Users.
In the event of a conflict between the terms of the Customer’s Terms and those of LightOn’s Terms, the terms of the Customer’s Terms shall prevail by default, except in cases of obvious errors or non-compliance with applicable regulations.
## **3. Changes to the Terms**
LightOn reserves the right to change or modify the Terms (or any LightOn policy or guideline) at any time and in its sole discretion to adapt to its business operations and comply with applicable regulations. If LightOn makes changes to these Terms, we will notify you of such changes either by sending you a notification, by informing you via the Site or the Platform (including by asking you to accept the new terms), and/or by updating the “Last Updated” date at the top of these Terms and publishing the revised Terms on the Platform without prior notice.
Upon logging into the Platform, the User must accept the current version of the Terms by checking a box or using any other means capable of obtaining the User’s consent. The version that prevails is the one accessible online.
If the User does not accept the Terms or any subsequent modifications thereto, access to the Platform, the User Services, and the User’s account may be disabled.
## **4. Acceptance of the Terms and Conditions for Use of the Platform**
### **4.1 General Provisions**
By using the Platform, you acknowledge and agree that:
1. You have read LightOn’s and/or the Customer’s Terms
2. You understand all the terms of the Terms
3. You agree to be legally bound by all the provisions of the Terms and Conditions that you have read and accepted.
### **4.2 Provisions Specific to the “LightOn Console” Self-Service Offering**
Notwithstanding or in addition to the provisions of Section 4.1, access to and use of the LightOn Console platform and its self-service application programming interfaces (APIs) are subject to the Customer’s independent creation of an online account.
Upon doing so, the Customer fully, completely, and unreservedly accepts these General Terms of Use (GTU), the Console’s General Terms of Service, the Data Usage Policy (Privacy Policy), and the Data Protection Agreement (DPA) is mandatory and must be provided through an affirmative digital action (clickwrap mechanism via a dedicated checkbox) during the registration process. If the Customer does not accept these documents, they must not use the Service.
The Parties expressly agree that the digital audit trails and connection logs automatically generated by LightOn’s identity management systems—including, but not limited to, the Customer’s unique identifier, the source public IP address, the precise timestamp of acceptance, and the cryptographic hash of the version of the accepted terms—constitute valid, legally binding, and fully enforceable proof of consent against the Customer. The requirement for a handwritten or qualified electronic signature is expressly waived for the use of the self-service Console platform.
## **5. Eligibility**
The purpose of these Terms is exclusively to govern access to the Platform and User Services and to determine the terms of use thereof. They are therefore not intended to apply to any other medium belonging to LightOn or the Customer, as the case may be, that is not implemented within the Platform.
The Terms apply to Users and Customers for access to and use of the Platform and User Services.
As a User, you represent and warrant that:
1. You are of legal age in your country of residence to access the Platform
2. Your access to the Platform has not previously been suspended and has not been reactivated since then.
LightOn is not a party to any contract, agreement, or contractual relationship that may be entered into between the Customer and Users.
The Application and associated User Services are accessible to Authorized Users who have an account with a username, associated with a password or a Customer-specific authentication system, under the terms of Section 6.4 below;
**Any User using the Platform acknowledges having read and accepted all of LightOn’s Terms and Conditions and/or the Customer’s Terms and Conditions at the time of their first login to the Platform.**
## **6. LightOn Services**
### **6.1. General Description of Services**
LightOn provides a suite of generative artificial intelligence and advanced enterprise data processing software solutions, including in particular:
* **Paradigm**: an enterprise artificial intelligence platform equipped with a turnkey user interface (*UI Assistant*), designed for document analysis, large-scale semantic search, collaboration, and secure content generation.
* **LightOn Console**: a developer platform comprising a web portal, interactive test environments (*playgrounds*), consumption monitoring dashboards, and a set of application programming interfaces (REST APIs) that enable the integration of LightOn’s AI capabilities directly into the customer’s workflows and applications.
### **6.2. Deployment Model and Infrastructure Architectures**
Depending on the options subscribed to or selected online by the Customer, the Services are accessible via different infrastructure architectures, operated on the Customer’s infrastructure or LightOn’s infrastructure (hosted within the European Union):
* **Shared Cloud Deployment (Multi-tenant SaaS)**: The entire Platform and the software components necessary for its operation are deployed on a shared cloud infrastructure, operated and controlled by LightOn. Each Customer’s data is strictly segmented and logically isolated to prevent any access by third parties. This is the deployment mode of The Console when you use [console.lighton.ai](http://console.lighton.ai)
* **Dedicated Deployment / Private Cloud (Single-tenant SaaS)**: The Services are deployed on a dedicated cloud instance, logically or physically isolated, hosted and managed by LightOn exclusively on behalf of the Customer. The choice of hosting is under the Customer’s control from among the options offered by LightOn; for example, it is possible to choose hosting with a “SecNumCloud”-certified provider.
* **Hybrid Deployment (*Sovereign Cloud Acceleration*)**: The software logic, interface, and persistent data storage are deployed on the Customer’s own infrastructure (cloud or on-premises servers). The computing resources required to run AI models (including inference and embedding calculations) are outsourced under LightOn’s control via cloud computing nodes (GPUs), which operate on a short-lived basis and, by default, without any persistent retention of the transmitted data.
* **On-Premises Deployment (Self-Hosted / Sovereign)**: The entire Platform, including all software components, data storage, and necessary GPU computing resources, is installed and operated directly under the Customer’s full control on their own infrastructure (which can be configured to be completely isolated from the Internet or *air-gapped*).
### **6.3 Artificial Intelligence Features and Capabilities**
The Services incorporate advanced generative artificial intelligence capabilities that enable Users, depending on the application or programmatic interfaces used, to perform the following operations:
* **Natural Language Processing (NLP) and Text Generation**: Contextual text generation, query completion, real-time multilingual translation, automated writing, and synthesis and comparison of complex documents.
* **Document analysis and advanced parsing**: Automated text extraction from digital, digitized, scanned, or handwritten documents via a state-of-the-art optical character recognition (OCR) system or any other system capable of extracting textual information from image- or graphic-based documents, converting raw documents into actionable data.
* **Structured data extraction**: Targeted extraction of specific information, tables, or fields from unstructured documents, automatically rendered as structured data schemas (e.g., JSON format) according to the application’s requirements.
* **Semantic search and generation-enhanced search**: Ingestion, chunking, embedding, and indexing of files to enable *hybrid grounded search* within documents provided by the Customer.
* **Visual and multimodal analysis**: Image recognition and visual analysis combining textual and graphical elements (diagrams, figures, drawings, photographs) present within documents provided by the Customer.
* **Knowledge management and connectors**: Organization of data into specific *workspaces* dedicated to the Customer or a team, integration of native connectors for third-party data sources (SharePoint, Teams, Google Drive, ServiceNow, etc.), and indexing via smart tagging (Knowledge Graph / *Smart Tagging*).
LightOn provides support and corrective and evolutionary maintenance for the Platform, including continuous monitoring of the technical quality of the infrastructure and applications. LightOn thus deploys security patches without undue delay. The procedures for deploying software updates (monthly major releases, emergency patches, or *hotfixes*) are carried out in accordance with maintenance windows and according to the specific conditions applicable to the infrastructure architecture selected by the Customer.
### **6.4. Registration/Login**
To use the Platform, a User Account must be created.
Only Authorized Users with the necessary permissions may create User Accounts on behalf of a Customer.
### \*\*6.5. Access \*\*
During the term of the contractual relationship, Authorized Users may access and use the Platform, and may allow Users for whom they have created Accounts to access and use the Platform, in particular for the purposes set forth
* in these Terms
* in LightOn’s terms and conditions or in the contract between LightOn and the Customer
and
* in the Customer’s Terms, if applicable.
Access may be revoked, in particular
1. at the request of Users and/or the Customer if access to or the existence of the said User’s account is no longer necessary for the purposes,
2. by an Authorized User with the necessary rights
3. upon termination of the contractual relationship.
The User is solely responsible for:
* Access to the Platform and the use made of their login credentials for the Platform and their API Keys by a third party. It is their responsibility to take all necessary measures to maintain the confidentiality of these credentials. LightOn is released from any liability in the event of inability to access the Platform and the Services due to an event beyond its control;
* The creation and use of information shared for the purpose of accessing and/or using the Platform and/or User Services. It is the responsibility of Authorized Users to take all necessary measures to control the sharing of such information and, where applicable, to inform the individuals concerned about the processing of their personal data when they use the User Services, particularly through the Customer Terms. LightOn is released from any liability in the event of access to the Platform and the Services by any third party with knowledge of said information, due to an event beyond its control.
### **6.6. Software**
The Platform is accessible online.
LightOn may make the Platform available as part of the User Services. Subject to compliance with the Terms, LightOn grants the Customer, Authorized Users, Users, and any guests a limited, non-exclusive, non-transferable, and non-assignable license to access and use the Platform to the extent necessary to use the User Services. To the extent that a component of the Platform contains open-source software, the open-source license for such software shall govern with respect to that component.
With respect to the elements under its control, LightOn endeavors, to the extent possible, to make the Platform and its User Services accessible at all times, 24 hours a day, 7 days a week.
Nevertheless, for the proper management of the Platform, LightOn may at any time, with respect to elements under its control:
1. Suspend, interrupt, or limit access to all or part of the Platform, or to certain parts of the Platform, for Users or certain Users;
2. Remove any information that may disrupt its operation or that violates national or international laws or LightOn’s and/or the Customer’s Terms and Conditions;
3. Suspend access to the Platform in order to perform updates, in the cases provided for herein.
LightOn shall not be held liable for malfunctions whose origin is linked, directly or indirectly, to an information system other than its own or those under its full control, and in particular that of the Customer or the Users.
### **6.7. Authorized Use - Restrictions.**
The Customer agrees to comply with and warrants that Users whose Accounts have been created under its authority will comply with the following commitments.
When using the Platform or User Services, and unless expressly authorized and duly validated by the Parties, no information, and more generally any Content, may be recorded, hosted, displayed, downloaded, modified, published, transmitted, updated, or shared that:
1. belongs to another person and to which neither the Authorized User nor the Customer has any rights;
2. is grossly offensive, harassing, profane, obscene, pornographic, pedophilic, defamatory, invasive of another’s privacy, hateful or racially or ethnically objectionable, disparaging, relating to or encouraging money laundering or gambling, or otherwise illegal in any way, or, more generally, is contrary to the purposes of the Platform, likely to infringe upon the rights of LightOn or a third party, or contrary to public decency;
3. harms minors in any way;
4. infringes any patent, trademark, copyright, or other proprietary rights, including intellectual property;
5. violates any law or regulation currently in force;
6. deceives or misleads the recipient regarding the origin of the information, or communicates any information of a grossly offensive or threatening nature;
7. impersonates another person;
8. contains software viruses or any other computer code, files, or programs designed to interrupt, destroy, or limit the functionality of any computer system;
9. threatens the unity, integrity, defense, security, or sovereignty of any country, friendly relations with foreign states, or public order; incites the commission of a recognizable offense; hinders the investigation of an offense; or insults another nation; or is misleading or known to be false in any way.
The Customer and Users shall not:
1. Interfere with the Platform or User Services for the purpose of accessing unauthorized Content or information;
2. rent, lend, sell, sublicense, or create derivative works of the Platform and User Services, except to the extent permitted by applicable provisions and/or applicable regulations;
3. reproduce, modify, adapt, disclose, decompile, reverse engineer, disassemble, or attempt to derive the Platform and/or User Services, and more specifically the source code, the underlying ideas, algorithms, file formats, or non-public APIs of the User Services used to make the User Services available to Users, except to the extent required by applicable law and applicable provisions or express authorization granted by LightOn;
4. remove, modify, or obscure any copyright, trademark, or other proprietary rights notices on or within the Platform and the User Services, and generally infringe upon the intellectual property rights held by LightOn or third parties regarding the Platform as well as the data accessible via the Platform and/or the User Services;
5. use the Platform, applications, and User Services in a manner that could interfere with, disrupt, negatively affect, or prevent other users of the Services from fully enjoying the User Services, or that could damage, disable, overload, or impair the operation of the User Services, including the security measures taken by LightOn and/or the Customer to ensure the confidentiality and integrity of data processed in connection with the User Services;
6. attempt to gain unauthorized access to the Platform and the User Services or to its related systems or networks;
7. within the strict limits of applicable legal provisions, create a competitive product or service, or copy features or functions of the Platform and User Services;
8. disclose to any third party, without LightOn’s authorization, any information or performance analysis relating to the Platform or the User Services;
9. engage in advertising or soliciting other Users or third parties to buy or sell services, including, but not limited to, services related to those displayed via the Platform or related to LightOn;
10. transmit unsolicited commercial or spam chain letters or emails to third parties via the Platform or User Services;
11. use any information obtained from the Platform or the User Services to harass, abuse, or harm another person, or to contact, advertise to, solicit, or sell anything to another person;
12. misuse the User Services in any way, including in violation of these Terms or applicable regulations;
13. use the “LightOn” names, trademarks, and logos, as well as, more generally, any other protected names used in connection with the Platform or User Services, in your advertising and commercial materials, unless you have LightOn’s prior written consent;
14. use the Platform or User Services in a manner that violates European laws and regulations, including but not limited to those pertaining to AI. Unless otherwise agreed in writing in advance, LightOn does not authorize the use of the Platform or User Services to develop or implement artificial intelligence systems with a risk level equal to or greater than the so-called “high-risk” level as defined by European regulations, where elements under LightOn’s control are used to provide the User Services to the Customer. The Customer under whose authority the Platform or User Services are used to implement an Artificial Intelligence system with a risk level greater than or equal to the so-called “high-risk” level as defined by European regulations, assumes full responsibility and all obligations, in particular as the provider or deployer (as applicable) of such a system, within the meaning of applicable European regulations.
15. cause or allow a third party to do the foregoing.
Any use of data mining, robots, or similar tools for data collection, extraction, or monitoring of all or part of the User Services without the authorization of LightOn and/or the Customer is strictly prohibited. Where applicable, the Customer shall prevent, terminate, and notify LightOn of any unauthorized or illegal use of or access to any User account or the User Services.
LightOn has no obligation to monitor the Content, documents, and data processed by the Platform or by the User Services. Under no circumstances shall LightOn assume any liability for any Content processed and/or published or for any claim, damage, or loss resulting from the use of Content and/or the appearance of Content processed by the Platform.
When using the User Services in SaaS mode (notably via calls to the LightOn Console programming interfaces) or in any mode where inference nodes are under LightOn’s control, computing instances operate in a stateless manner. Data provided as input by the Customer or its Users (*prompts*, queries, documents, images) is not stored persistently on the servers or compute nodes beyond the time technically required for the execution and return of the query and for compliance and security-related processing. No persistent storage of inference data (such as conversation history or document database indexes) is enabled by default within the infrastructures hosting the inference nodes.
## **7. Customer Responsibility**
### **7.1. Fees**
The Customer agrees to pay the amounts due to LightOn in accordance with the payment terms set forth at the time of the order or in any agreement governing the provision of User Services to the Customer. The Customer is responsible for paying applicable taxes.
#### **7.1.2. LightOn Console Online Offering**
Access to the application programming interfaces (APIs) is organized into two distinct plans, detailed on the *Pricing Page*:
* **Pay-as-you-go (PAYG) Plan**: The Customer is billed monthly in arrears solely based on their actual resource usage (volume of *tokens* processed, pages parsed via OCR or similar, search queries, or storage volume used). This basic plan is provided strictly on a "*best effort*" basis, is not covered by any service level agreement (SLA), and provides access exclusively to *community* support.
* **Business Plan**: This plan may include a monthly minimum charge (minimum billing amount set for informational purposes—see our current rates) that includes a basic storage quota, technical support via email or ticket, as well as specific service availability commitments (Uptime SLA).
\*\*7.1.2.1. Automated Payment Terms \*\*
##### The calculation of usage and the collection of amounts due for Console plans (Pay-As-You-Go and Business Plan) are fully automated and delegated to a secure third-party payment service provider. The Customer agrees to maintain an active credit card or direct debit authorization on their account. The corresponding invoices are generated at the end of each monthly cycle and are accessible via the dashboard. In the event of a failed payment, LightOn reserves the right to immediately suspend the API keys following digital notice.
**7.1.2.2. Free Plan**
##### LightOn offers a free plan (*Free Tier*) subject to monthly quotas and bandwidth limits. This access level is provided “as is,” without any service level agreement (SLA) or guarantee of availability or technical support. If certain quotas are exceeded, the corresponding API requests are suspended or rejected until the next billing cycle or until the user upgrades to a paid plan.
### **7.2. Third-Party Applications**
Applications external to the Platform and User Services, including the Customer’s applications—particularly those interfacing with User Services via API—are subject, where applicable, to their own terms and privacy policies. The Customer is responsible for reviewing these terms and policies before using third-party applications. LightOn is not responsible for third-party applications and does not warrant or support them. By enabling a third-party application that uses or accesses Customer Data, the Customer authorizes the transfer of such data to the third-party application and, where applicable, shall ensure that a legally valid data transfer mechanism exists for the transfer or onward transfer, in accordance with all applicable privacy and data protection laws.
### **7.3. Users**
The Customer is responsible for the distribution of access it grants to the Platform and for Users’ use of the User Services, as well as for their compliance with these Terms. The Customer shall ensure that all Users are of the required age to use the Platform or User Services in their country of residence at the time of such use. Where applicable, the Customer represents that it has obtained all necessary consents for the use of the User Services by its Users.
### \*\*7.4. Customer Data \*\*
The Customer is responsible for ensuring that all Customer Data and any other content or information provided to LightOn or uploaded, published, processed, stored, or transmitted to the User Services complies with these Terms. If any Customer Data violates these Terms, LightOn may request that the Customer delete or modify the Customer Data so that it no longer violates these Terms, or LightOn may, with respect to items under its control, without being obligated to do so, delete such Customer Data or take the necessary measures to resolve the issue.
### **7.5. User Comments**
#### **7.5.1 Feedback Mechanism.**
The Platform may include interactive features that allow Users to provide qualitative feedback regarding the Services to other users (e.g., “like,” “dislike,” or “report”). This mechanism is designed to identify technical anomalies and improve the accuracy of the Platform’s results. The feedback mechanism is not available in ephemeral mode.
1. **Like and Dislike.** Interactions with the *Like* and *Dislike* buttons are recorded in the conversation log and are not sent to any recipient. The logs, and thus the information indicating that a user clicked a *Like/Dislike* button, are accessible in the logs only to users with the DPO role.
2. **Report**. This feature allows Users to provide information regarding a response in a conversation (“User Comments”) to the support team.
#### \*\*7.5.2 Content of comments, routing, and support team. \*\*
The recipient of User comments (the “support team”) is determined exclusively by the client via the platform’s system configuration (specifically the support email setting).
1. **Content of User Comments:** When users use the “report an issue” comment (flag), a brief report is sent to the support email address specified in the admin panel (see below) and recorded in the admin panel, accessible only to users with instance-level access. This report includes only information related to the reported message, such as the user’s query and the response in Paradigm. To facilitate troubleshooting, the user submitting the user feedback may choose to attach documents related to the interaction (“documents”) to the context shared with the support team in the user feedback (“feedback content”). Only registered Users with the DPO role can access other messages in the conversation, beyond the specific message that was reported.
2. **Customer-Controlled Routing:** The recipient of the comment content can be configured to specify an internal email address via the appropriate setting in the configuration keys, as detailed in the relevant documentation. Comment content is then routed only to the recipients designated by the Customer. In this case, LightOn has no access to the processing of said comments and assumes no responsibility in this regard.
3. **Routing to LightOn:** If the Customer configures the corresponding configuration key to route user comments to LightOn (for example, for SaaS deployments or Level 3 support), the Customer authorizes LightOn to process this data in accordance with Section 7.5.3 below.
4. **Voluntary submission:** The transmission of documents within the content of comments is strictly optional and can only be triggered by an affirmative action on the part of the User (e.g., by checking a box).
5. **Disclaimer:** The Customer acknowledges that if Users refuse to share documents, the support team’s ability to effectively diagnose and resolve specific glitches or recovery failures may be severely limited.
#### **7.5.3 Limited License and Use of Data.**
In the event that the content of comments is transmitted to LightOn, LightOn’s use of such data is strictly limited as follows:
1. **No Use for Model Training:** LightOn will not use the content of the comments or any associated documents to feed, train, retrain, or fine-tune fundamental or general artificial intelligence models.
2. **Benchmarking and Quality Assurance:** The Customer grants LightOn a limited, non-exclusive license to use the content of the comments solely for benchmarking and quality assurance purposes. For the purposes of this Agreement, the term “benchmarking” refers to the use of data to verify that subsequent technical modifications to the Platform or User Services (i) successfully resolve the reported issue (regression testing) or (ii) do not degrade the quality of previously successful interactions.
3. **Confidentiality:** All Feedback Content received by LightOn remains confidential and is subject to the data protection obligations set forth in Section 9.
## **8. LightOn’s Responsibilities**
### **8.1. Obligation of Means**
Strictly within the scope of the provision of paid User Services to any User, LightOn is bound by an obligation of means. LightOn further reserves the right to perform technical interventions, maintenance, or updates on the Platform and the User Services under its control, which may result in a temporary interruption of access. Nevertheless, LightOn undertakes to use its best efforts to ensure that User Services are not interrupted during periods of normal or intensive use of the Platform.
In any case, and unless otherwise stipulated in a service level agreement or any document of similar scope, any resulting service malfunctions or unavailability shall not give rise to any compensation for Users.
In particular, LightOn does not guarantee to Users:
1. The reliability, performance, or completeness of the content published on the Platform in relation to the Users’ intended use. Users agree to use this information at their own sole risk;
2. The nature and outcome of relationships between Users, if any.
LightOn cannot therefore be held liable for any direct or indirect damages claimed by Users based on the information or content published on the Platform and the User Services.
LightOn undertakes to respond without undue delay to Users’ requests and complaints, as well as to requests for the removal or modification of Content published on the Platform and User Services, under the conditions set forth in the applicable provisions and in compliance with applicable legal provisions, in particular those arising from the Law on Confidence in the Digital Economy.
### **8.2. Published Data and Content**
LightOn makes every effort to ensure the quality of the Data present on the Platform over which it has control.
However, any Content available through the Platform and User Services is the sole responsibility of its author or the person who created or submitted it, provided that LightOn is not the author.
LightOn does not control or guarantee the truthfulness, quality, accuracy, validity, relevance, or legality of the Content or the results generated by the use of the Platform or the User Services. As a service provider, LightOn has no control over User behavior; LightOn’s role is limited to facilitating access to and making available the User Services and the Platform.
Consequently, LightOn cannot be held liable in this regard, particularly with respect to any damages that may result.
If LightOn were to become the subject of an out-of-court or legal proceeding due to the use of the Platform or User Services, it may seek to hold the Customer and/or the User concerned liable to obtain compensation for all damages, sums, judgments, and costs that may arise from such a proceeding.
The User acknowledges that LightOn, where possible, reserves the right, without being obligated to do so, to review the Content, remove it, or modify it in order to, in particular, (i) operate, secure, and improve the Platform and User Services, (ii) ensure compliance with applicable provisions, including these Terms, (iii) comply with applicable law or the decision of any competent court.
### **8.3. Relationships Between Users**
Any correspondence, exchange, or relationship of any kind between Users via the Platform or User Services, including any comments, notes, or corrections associated with the Content, is binding only on those Users.
Consequently, LightOn shall not be held liable for any damage or loss caused during the use of the Platform or User Services by Users. The Customer and, where applicable, the User involved undertake to LightOn to defend, indemnify, hold harmless, and release LightOn from any and all claims, costs, demands, proceedings, damages, and losses (including reasonable attorneys’ fees) incurred, suffered, or paid by LightOn, arising out of or in connection with their relationships (whether contractual or otherwise).
## **9. Data Protection**
### **9.1. Processing of Personal Data**
In connection with the provision of the Platform and the delivery of User Services, LightOn acknowledges that it may be required to collect and process Personal Data on behalf of and for the Customer, particularly when LightOn controls all or part of the technical infrastructure necessary to operate the Platform.
Users are informed that LightOn acts in such cases as a data processor within the meaning of data protection legislation and undertakes to process the Personal Data entrusted to it in accordance with the following provisions, and to ensure compliance with these terms by its permanent and non-permanent staff, as well as any subcontractors, in particular by imposing on them commitments similar to those set forth below.
LightOn will process Personal Data only:
1. to provide, manage, protect, update, and improve the quality of the User Services under its control,
2. to enforce the Terms and exercise its rights hereunder,
3. in accordance with the law, and
4. in accordance with the Customer’s instructions.
LightOn processes Users’ Personal Data in accordance with its Data Protection Policy and the measures implemented and described elsewhere, including in the legally binding documents established and accepted by the Customer and LightOn.
### **9.2. Data Protection Agreement**
LightOn processes Personal Data on behalf of the Customer in accordance with the Data Protection Agreements established with the Customer.
### **9.3. Security**
LightOn is committed to maintaining an information security program that complies with industry standards, consisting of technical and organizational safeguards designed to protect the data it processes. Where it has control over them, LightOn ensures the security and confidentiality of User accounts, particularly with regard to account credentials (username and passwords, API keys, etc.). Notwithstanding the foregoing, the Customer and/or User is responsible for maintaining the security and confidentiality of the credentials used to access the Platform or User Services.
### **9.4. Subcontractors**
LightOn may engage subcontractors to assist in providing the User Services, provided that:
* the subcontractors receiving Personal Data are subject to confidentiality obligations no less protective than those set forth in these Terms;
* LightOn remains responsible for its obligations under these Terms and for the use of Personal Data by subcontractors.
## **10. Confidentiality**
### **10.1. Use**
If the Parties disclose Confidential Information, the recipient shall use the disclosing Party’s Confidential Information only to exercise its rights and fulfill its obligations under the Terms and applicable provisions. The recipient shall exercise reasonable care to protect the Confidential Information.
### **10.2. Non-Disclosure**
Unless required by law or regulation, the recipient shall not disclose Confidential Information to anyone, except to its affiliates, employees, agents, or subcontractors who need to know such information and who are bound by confidentiality obligations at least as protective of the Confidential Information as those described in this section. The recipient shall be liable for any breach of this section by such parties. A breach of this section may cause irreparable harm and entitle the disclosing party to an injunction.
### **10.3. Required Disclosure**
The Recipient may disclose Confidential Information to the extent required by law, provided that it uses reasonable efforts to notify the Disclosing Party in advance and gives the Disclosing Party the opportunity to object to the disclosure (except as described in the “Legal Proceedings” section). Confidential Information disclosed pursuant to this section shall otherwise remain subject to the confidentiality obligations described above.
## **11. Intellectual Property Rights**
### **11.1. Ownership**
Unless expressly stated otherwise, these Terms do not grant any rights, implied or otherwise, to intellectual property. The Customer owns and will continue to own all intellectual property rights in the Customer Data, including any documents or information it provides or makes available during its use of the Platform or User Services, questions asked by Users and the answers generated by the Platform, and LightOn owns and will continue to own all intellectual property rights in the Platform and the User Services, including the original source code that enables their operation.
### **11.2. Licenses**
The Customer grants LightOn a worldwide, non-exclusive license to access, host, use, process, cache, copy, modify, distribute, execute, export, and display the Content and Customer Data solely for the purpose of providing the User Services or as described in the Terms. The Customer represents and warrants that it has obtained all necessary licenses or rights to grant the aforementioned license.
LightOn grants the Customer a non-exclusive worldwide license to access, use, export, and display the Content and Customer Data solely for the purpose of providing the User Services or as otherwise described in the Terms.
LightOn represents and warrants that it has obtained all necessary rights and licenses to grant the aforementioned license.
## **12. Suspension and Management of the Platform**
Within the scope, particularly technical, controlled by LightOn, LightOn may limit or suspend, temporarily or permanently (termination), the User’s access to and use of the Platform and the User Services:
1. to the extent required by law,
2. to prevent injury, death, or a credible risk of harm to LightOn, the User Services, Users, or any third party
3. for failure to pay,
4. for repeated violations of applicable provisions and, generally, any of our policies or regulations, particularly regarding copyright,
5. at the Customer’s request.
In this regard, LightOn undertakes to notify, depending on the circumstances, the User or the Customer—who then undertakes to forward the information to the Users affected by the measure—of the implementation of such a measure in order to give them the time and opportunity to provide explanations to LightOn and resolve the issue prior to suspension, if applicable. The lifting of such measures is at LightOn’s sole discretion.
Provisions that by their nature are intended to survive termination shall survive, including confidentiality obligations, limitations of liability, and disclaimers.
## **13. Legal Proceedings**
If LightOn receives a request from law enforcement or another duly authorized third party to provide data or information about the Customer or its Users, LightOn will comply with a valid legal proceeding only to the extent required by law. LightOn will notify the Customer and/or Users of the request unless expressly prohibited from doing so or unless such notification would jeopardize an individual’s safety.
## **14. Miscellaneous**
### **14.1. Modifications**
These Terms constitute the entire agreement between Users and LightOn regarding the use of the Platform and User Services. Any other document, including any mention on the Platform, is for informational purposes only.
LightOn may update these Terms at its discretion. Any updates to the Terms must be accepted by Users when they access the Platform following such an update.
### **14.2. Severability**
If any provision of these Terms is deemed invalid, illegal, or unenforceable by a court decision or proves impossible to implement, the validity, legality, and enforceability of the other provisions of the Terms shall in no way be affected or impaired thereby, and each such provision of the Terms shall be valid and enforceable to the fullest extent permitted by law. In such a case, these Terms will be amended to the minimum extent necessary to remedy any invalidity, illegality, or unenforceability, while preserving to the greatest extent possible the rights and commercial expectations of the Parties hereto, as expressed in the Terms.
The headings and subheadings contained in these Terms are included for convenience only and shall not be used to interpret any provision of the Terms.
LightOn’s failure to enforce any provision of the Terms or to tolerate a temporary or permanent breach thereof shall in no way be construed as a waiver by LightOn of its rights hereunder. LightOn’s tolerance of a breach or imperfect performance of the Terms, or more generally of any act, failure to act, or omission by the User or the Customer that does not comply with the provisions of the Terms, shall not confer any right whatsoever on the User or the Customer benefiting from such tolerance.
Users acknowledge that the Terms and Conditions shall not have the effect of creating, between them and LightOn, a partnership or association of any kind.
### \*\*14.3. Hyperlinks \*\*
From LightOn to external sites
LightOn may provide links from the Platform to other resources accessible via the Internet. In such cases, these resources are independent of the Platform and are owned by third parties. LightOn does not edit or control these sites.
Links to any site or resource do not, under any circumstances, constitute an endorsement of their content, products, advertising, or any other goods or services presented on these sites. Consequently, LightOn cannot be held liable for any damage of any kind resulting from the content of these sites.
By Authorized Users to the Platform
The creation by Users of any hyperlink to all or part of the Platform is strictly prohibited, except
* in cases provided for by the Platform and, in particular, for the purpose of making Content accessible to Users who need to know,
* prior written authorization from LightOn, requested via email
LightOn is free to refuse the creation by Authorized Users of any hyperlink to all or part of the Platform. In the event that LightOn grants its authorization, such authorization may be withdrawn at any time, without any obligation on the part of LightOn to provide justification.
### **14.4. Cookies**
LightOn may automatically collect, through the Platform, standard information via the use of cookies or similar technologies.
All information collected indirectly will be used solely to provide User Services, track the volume, type, and configuration of traffic using the Platform, to develop its design and layout, and for other administrative and planning purposes, and more generally to improve the User Services that LightOn offers.
### **14.5. Governing Law and Jurisdiction**
These Terms shall be governed by the laws of France and the competent courts of Paris.
LightOn, the Customer, and the Users agree that, in the event of difficulties in the performance of these Terms and prior to any legal proceedings, they will seek an amicable resolution to any dispute.
To this end, the Party wishing to initiate this amicable procedure must notify the other Party by registered letter with acknowledgment of receipt, specifying the difficulties encountered in application or the breaches observed. This letter shall serve as a formal notice to remedy the observed breaches and as a statement of the amicable settlement proposal.
The other Party shall then have fifteen (15) calendar days to provide its interpretation of the events, its own proposal for an amicable settlement of the dispute, or its refusal of an amicable settlement.
The Party that initiated the amicable settlement shall then have fifteen (15) calendar days to provide its response.
However, if within thirty (30) calendar days following this response, the Parties have not reached an amicable agreement, each Party shall regain its full freedom of action and its right to bring the matter before the competent courts mentioned above.
# Supported Browsers for the LightOn Platform
Source: https://docs.lighton.ai/en/user-guides/best-practices/supported-browsers
To ensure the best user experience, the LightOn platform is designed to work with the most recent and widely used browsers.
To ensure the best user experience, the LightOn platform is designed to work with the most recent and widely used browsers. Here is the list of supported browsers:
## Supported Browsers
Minimum version of the main browsers used in enterprise environments:
| Browser | Version | Supported | Natively |
| ------- | ------------------ | --------- | -------------------------------------------------------------------------- |
| Chrome | 134 | ✅ | ✅ |
| Firefox | 115 (ESR included) | ✅ | With [postcss-nested plugin](https://www.npmjs.com/package/postcss-nested) |
| Edge | 116 | ✅ | ✅ |
Testing was performed with BrowserStack in a Windows environment.
Lower versions may work and require additional testing.
# Troubleshooting
Source: https://docs.lighton.ai/en/user-guides/best-practices/troubleshooting
Having trouble with Paradigm? Don't worry - common issues can often be resolved with simple troubleshooting steps.
Having trouble with Paradigm? Don't worry - it's not uncommon for web applications to encounter issues due to temporary data storage, browser configurations, or outdated software. Sometimes, these issues can be easily resolved by simply refreshing the application or clearing out temporary data.
The steps outlined below are designed to help you resolve common issues by:
* Clearing temporary data that may be causing conflicts or errors
* Refreshing the application to ensure you're running with the latest updates
* Restarting the browser to reset any problematic configurations
By trying these simple steps, you may be able to resolve issues related to:
* Slow performance or freezes
* Error messages or unexpected behavior
* Difficulty logging in or accessing certain features
## Clearing Cache and Refreshing the Browser
Sometimes, a fresh start is all you need. Try the following:
1. **Close the Paradigm tab**: Click on the "X" button to close the Paradigm tab.
2. **Clear the cache**:
* Press `Ctrl + Shift + R` (Windows/Linux) or `Cmd + Shift + R` (Mac) to reload the page and clear the cache.
* Alternatively, you can also clear the cache through your browser's settings:
* Chrome: Go to `Settings` > `More Tools` > `Clear Browsing Data` and select "Cached images and files".
* Other browsers: Check your browser's documentation for clearing cache instructions.
3. **Close and reopen Chrome** (or your preferred browser): This will ensure that any temporary issues are resolved.
4. **Open Paradigm again**: Log back into Paradigm and try to reproduce the issue.
## Additional Tips
* **Check for updates**: Ensure that you're running the latest version of your browser.
* **Disable extensions**: Try disabling any recently installed browser extensions to see if they're causing the issue.
* **Contact support**: If none of the above steps resolve the issue, please reach out to our support team at [support@lighton.ai](mailto:support@lighton.ai) for further assistance.
By following these steps, you should be able to resolve most common issues with Paradigm. Happy troubleshooting!
# Agents: Your Specialized Assistants
Source: https://docs.lighton.ai/en/user-guides/chat-features/agents
Agent Mode equips your assistant with a new cognitive capability: multi-tool reasoning.
## What Is an Agent?
An Agent is an AI assistant configured to address a specific need or use case within your organization. Each Agent combines a set of parameters that determine its behavior, capabilities, and scope of action:
* **Instruction (system prompt)**: defines the Agent's behavior, tone, and guidelines.
* **Model (LLM)**: the language model used to generate responses.
* **Tools and MCP**: the capabilities enabled for the Agent (e.g., Search Documents, Search Visual, MCP Web Search Linkup).
* **Documents and Workspaces**: the document sources the Agent can access.
* **Teams**: the users authorized to access this Agent — a key element for data governance.
## Multi-Tool Reasoning (Agent Mode)
Each Agent is equipped with Agent Mode (V2), which provides **multi-tool reasoning** capabilities:
* **In-depth analysis**: the Agent breaks your request down into sub-tasks.
* **Chained execution**: it can autonomously use 1 to 5 consecutive tools.
* **Enriched result**: it combines the outputs from these various tools to build a precise, sourced, and comprehensive response.
> **Important note regarding history**: Conversations from version V1 are archived in read-only mode. The new V2 architecture, capable of using multiple tools simultaneously, requires starting a new session.
## Multi-Agent: What Changes with Wise Wolf
Before Wise Wolf, each organization had a single default Agent, configurable by an administrator. This single Agent defined the instruction, model, and tools for all users.
With the **Multi-Agent** feature introduced in Wise Wolf, it is now possible to associate **multiple Agents** with a single organization. The goal: specialize assistants for recurring tasks and share them across the enterprise, while maintaining fine-grained control over data access.
## Selecting an Agent
When creating a new conversation session, a **dropdown menu** in the interface header allows you to choose an Agent. This menu displays:
1. **"My Assistant"** — the organization's default Agent, always in first position.
2. Your **favorite Agents** and those **associated with your team**, sorted alphabetically (up to 5 displayed).
3. A **"See all assistants"** link that opens the full discovery page.
By default, "My Assistant" is pre-selected. Once the first message is sent, the Agent is **locked** for the entire duration of the session — it is not possible to switch Agents mid-conversation.
The active Agent's name remains visible in the header. Hovering over it displays a tooltip with its details (tools, documents, model, team).
## Browsing Available Agents
The **"All assistants"** page displays all the Agents in your organization that you have access to. For each Agent: its icon, name, and a short description.
From this page, you can:
* **View an Agent's details** in a modal window (name, description, available tools, accessible documents, model used, associated team).
* **Add or remove an Agent from your favorites** by clicking the star icon.
* **Start a conversation** directly with the selected Agent.
## Managing Your Favorites
The favorites system lets you customize your quick-access list in the dropdown menu:
* Click the **star icon** from the discovery page or the detail modal to add or remove a favorite.
* You can only favorite Agents that you have access to through your teams.
* The dropdown menu displays a maximum of **5 Agents** (in addition to "My Assistant"), sorted alphabetically.
## Creating a Personal Agent
Any user can create their own **Personal** Agent from the Paradigm interface. Personal Agents are only visible and usable by their creator.
Agents shared across teams or the whole organization (**Team** and **Company** Agents) are created by administrators from the administration panel.
## Using Agents via the API
It is possible to specify the Agent to use via a dedicated API endpoint, allowing you to integrate Agent selection into your workflows and third-party applications.
## Frequently Asked Questions
**Can I switch Agents mid-conversation?** No. The Agent is locked once the first message is sent to ensure session consistency. To use a different Agent, start a new conversation.
**Are the Agents I create visible to my colleagues?** Agents you create are **Personal** and only visible to you. **Company** or **Team** Agents visible in your interface were created by an administrator and shared with your team.
**How can I find out which documents an Agent can access?** Open the Agent's detail modal (from the dropdown menu or the discovery page): the accessible documents and workspaces are listed there.
**How many Agents can I add to my favorites?** There is no limit to the number of favorites. However, the quick-access dropdown displays a maximum of 5 Agents (in addition to "My Assistant").
# 🔒 Ephemeral Mode: Full Privacy, Even Internally
Source: https://docs.lighton.ai/en/user-guides/chat-features/ephemeral-mode
Ephemeral Mode lets users start private, temporary sessions where no content is stored or visible to admins. It’s designed to prevent shadow AI and ensure full privacy, even internally.
### Context
Our solution is already deployed **on-premise**, with **full protection from external exposure**: no data is ever sent outside or used for training. But another key concern remains: *****how can we reassure users about their internal privacy?*****
Many employees hesitate to use AI for sensitive or exploratory conversations, fearing that their content could be seen by admins or managers. This hesitation fuels the rise of **shadow AI**, where employees turn to unsanctioned tools that compromise security and governance.
### The answer: Ephemeral Mode
With **Ephemeral Mode**, we provide complete privacy even internally:
* **100% private and ephemeral sessions**: no messages, document links, or feedback are stored.
* **Total invisibility to admins**: even system administrators cannot access the content.
* **Automatic deletion** after 15 minutes of inactivity.
This gives employees the confidence to ask questions, test ideas, or handle sensitive data without leaving any trace behind.
### Governance and activation
* Controlled at the **instance level** by the System Admin.
* If the feature is enabled at the instance level, a **Company Admin** can then activate it for their company.
* Once enabled, users can start a private session directly from the interface with a simple toggle.
⚠️ This feature should be used with caution in contexts where **traceability** is required.
### User experience
* A clear banner indicates when a session is ephemeral.
* On exit, users are warned that all content will be lost unless copied.
* Available actions are adjusted:
* 🚫 **Bug reporting is disabled** (sessions are anonymous and short-lived).
* ✅ **Copy and share** remain available so users can reuse content if needed.
### Key benefits
* 🛡️ **Double privacy**: external (on-prem, full privacy) and internal (invisible to admins).
* 🚫 **End of shadow AI**: no need to look elsewhere — sensitive work can be done safely within the official tool.
* 🔄 **Better adoption**: employees feel confident to explore and use AI without fear.
### Conclusion
With **Ephemeral Mode**, we go one step further: after guaranteeing **external confidentiality**, we now deliver **internal confidentiality** as well.\
The promise is simple: *your employees can trust the official tool, because their conversations belong to them — and only to them.*
# Understanding the Session history
Source: https://docs.lighton.ai/en/user-guides/chat-features/session-history-usage
The Session History, displayed in the left sidebar, helps you keep track of all your past conversations in the application.
## How Sessions Are Created
* Every time you start a new conversation, a **session** is created.
* The **session name** is automatically generated from your first question. It remains fixed and does not change afterward (unless you rename it manually).
## Session Status Icons
Each session is displayed with an icon to show its current state:
1. **White icon** – the session is ready, no task is running.
2. **Loader (spinning)** – a long task is in progress (for example, document analysis).
3. **Red icon** – a long task has failed.
## Searching Sessions
At the top of the session list, a **search bar** allows you to quickly find sessions by their name.
## Managing Sessions
For each session in the list, you have several options:
* **Rename** – give the session a new name.
* **Archive** – hide the session from the sidebar (it remains stored in the database).
## Session Ordering
Sessions are grouped and displayed by time period.
Within each group, the most recently **active** sessions (those with the latest conversation) appear at the top. This means ordering is based on the **last activity date**, not the creation date.
**Retention Period**
Sessions are not kept forever. Their retention depends on the configuration set by your administrator:
* **Default retention period:** 180 days
* **Custom retention period:** may be shorter or longer if adjusted by your admin
After this time, sessions are automatically deleted.
# Suggested Queries
Source: https://docs.lighton.ai/en/user-guides/chat-features/suggested-queries
After the model answers your question about a document or workspace, it may display suggested queries to help you explore related topics. Suggestions only appear when they are relevant, based on the model's judgment.
## How It Works
* Suggested queries are **computed overnight**.
* If you upload a new document today, you will need to wait until the following day to start seeing suggested queries for it.
* For some documents, it may not be possible to create meaningful suggested queries. In such cases, the pipeline automatically drops them because they are not relevant.
* Suggested queries appear directly below the model's response (see screenshot example).
***
## Administration & Settings
Administrators can enable or disable this feature globally.
* The toggle is available in the **Admin Config page**:\
[Config Key Settings](https://paradigm-dev.lighton.ai/admin/settings/configkeyvalue/)
* The relevant configuration key is:
```
IS_KG_QUERY_SUGGESTION_ON
```
* **Scope**:
* This setting applies to the **entire instance**.
* It is **not possible** to enable or disable suggested queries for specific companies.
***
## Key Notes
* Suggested queries are designed to improve discovery and user guidance.
* They will not always appear, since they depend on the quality of the available content.
* Admins retain full control to globally activate or deactivate the feature.
# Uploading documents from the chat
Source: https://docs.lighton.ai/en/user-guides/chat-features/upload-documents-chat
You can easily add documents to your questions directly from the chat window. This makes it simple to give more context without leaving the conversation.
You can easily add documents to your questions directly from the chat window. This makes it simple to give more context without leaving the conversation.
For best results, upload documents that are directly relevant to your question. Smaller, focused documents often work better than large, comprehensive files.
## How to Attach Documents
1. Click the **attachment icon** (📎) in the chat box.
2. Choose whether to:
* **Attach an existing document** already saved in your workspace.
* **Upload a new document** from your computer.
3. You can also **drag and drop documents directly into the chat box** to attach them instantly.
Drag and drop is the fastest way to attach documents. You can select multiple files at once from your file explorer.
If you upload a new file, a window will open so you can select one or more documents.
## During Upload
* Selected documents appear **above the chat box**.
* You can see their upload progress in real time.
* You cannot send your question until the upload is finished.
## Where Files Are Stored
* All uploaded files are automatically saved in your **personal (private) workspace**.
* To upload directly into another workspace, please use the **Documents page** (see [FAQ Documents page](https://paradigm-academy.lighton.ai/en/documents-and-workspaces)).
Documents uploaded via chat are private by default. If you need to share documents with your team, use the Documents page to upload them to a shared workspace instead.
## File Types and Parsing
The platform automatically chooses the right way to process your file:
* **PDF, DOCX** → Default parser
* **HTML, PPTX, PNG, JPG, JPEG** → Parser 2.2.1
* **MD, CSV, XLSX** → Dedicated parser
## Managing Multiple Documents
When you attach several documents, they appear above the chat box. You can also open the **side panel** (top right: *View all documents*) to see the full list.
You have several ways to remove documents, either one by one or all at once:
1. **Detach a single document**
* Click the **✕** directly on the document above the chat box.
* Or, open the side panel (*View all documents*) and click the **✕** next to the document's name.
2. **Detach all documents at once**
* Click **Detach all documents** (above the row of files, left side).
* Or, use the **✕ \[x documents]** shown inside the chat input area.
* Or, in the side panel, click **Unselect all** at the bottom.
# How to Restrict Chat to Specific Workspaces, Documents, or Tags
Source: https://docs.lighton.ai/en/user-guides/chat-features/workspace-chat-scope
Learn how to limit your chat interactions to specific workspaces, documents, or tags, ensuring the model only works with content relevant to your selected scope.
## Using Scope to Focus Your Chat
From the chat interface, you can define the scope of your interaction in three ways:
* **Workspace scope**: select one or more workspaces (folders) to restrict the model to all documents within them. Best when you want to explore or analyze all content in a specific domain.
* **Document scope**: attach specific files to focus on precise documents. Best when you need pinpoint accuracy.
* **Tag scope**: filter by one or more tags to restrict the model to documents matching those tags, across all your accessible workspaces. Best when you want to target a topic or category that spans multiple workspaces. *\*
**Recommendation**: Choose your scope strategy at the start of your session — workspace-based for broad exploration, document-based for precision, or tag-based for topic-driven filtering.
## How to Set the Scope in Chat
1. Open the Chat interface.
2. Locate the Scope / Context settings.
3. Choose your scoping method:
* Select one or more **workspaces**, or
* Attach specific **documents**, or
* Select one or more **tags** to filter by topic. *\*
4. Start your query: the model will only work with content matching your selected scope.
You can combine **workspaces and tags** together to further narrow your scope (e.g., select a workspace *and* a tag to only target tagged documents within that workspace). *\*
## Limitations
You can scope your chat using one of the following combinations:
* ✅ Workspaces only
* ✅ Tags only
* ✅ Workspaces + Tags
* ✅ Documents only
* ❌ Documents + Workspaces
* ❌ Documents + Tags
* ❌ Documents + Workspaces + Tags
In short: attaching specific documents is an exclusive mode — it cannot be combined with workspace or tag filters.
# Automatic Summaries for Documents and Workspaces
Source: https://docs.lighton.ai/en/user-guides/documents-management/automatic-summaries
Every newly uploaded document is automatically summarized to help users quickly understand its content. Summaries are also generated at the workspace level.
Every newly uploaded document is automatically summarized to help users quickly understand its content. Summaries are also generated at the workspace level to provide a snapshot of what the workspace contains.
This feature enhances **search quality** and improves the **relevance of model responses**, making it easier to find the right information faster.
## Where Summaries Appear
* **Documents**: Summaries are displayed directly in the document list.
* **Workspaces**: Summaries appear when you hover over or open a workspace in the list.
***
## Current Limitations
* **Private and Company folders**: Summaries are not yet generated for these folders. Additional improvements to the Workspace model are planned for the next release.
* **Empty workspaces**: No summary is shown.
* **Fresh uploads**: Documents uploaded on the same day may not yet have a summary. Summaries are generated overnight and will appear the following day.
# Why can’t I upload my CSV file?
Source: https://docs.lighton.ai/en/user-guides/documents-management/csv-upload-issues
If a CSV file doesn’t upload in Paradigm, the issue is often related to the separator used or the file’s structure. Here’s how to check and fix it.
## Symptoms
* Your file **opens correctly** on your computer (Excel, Google Sheets, etc.).
* But when you try to upload it into Paradigm, the **import fails**.
* You may have tried different parsers, but none of them worked.
## Common causes
### 1. Wrong separator
By convention, a CSV (Comma-Separated Values) file uses the \*\*comma \*\*`,` as the column separator.\
Some software (often with French/European settings) exports CSVs with a \*\*semicolon \*\*`;` instead.
👉 If your file uses `;` as a separator, it won’t be recognized properly by Paradigm.
### 2. Incorrect file structure
* **Column headers** must match what Paradigm expects.
* If required columns are missing or incorrectly named, the upload will fail.
### 3. Not a strict CSV format
Some partner files may use the `.csv` extension but are not fully compliant with the standard format. These files can still open locally but fail during upload.
## How to check
1. **Open the file in a text editor** (e.g., Notepad, VS Code, Sublime Text).
2. Check the separator:
* If you see `,` → correct format.
* If you see `;` → this is likely the issue.
3. Check the first line (headers): make sure it contains all required columns.
## Solutions
* **Convert the separator**:
* Open the file in Excel or Google Sheets.
* Export it again as CSV, making sure the separator is \*\*comma \*\*`,`.
* **Check the headers**:
* Ensure all required columns are present and correctly named.
* Compare with an example CSV that worked successfully before.
* **Try another format**:
* If the issue persists, export the file as **XLS/XLSX**. This format is supported and usually works.
## Good to know
* CSV formats can vary depending on the **language/region** settings of the software used.
* This issue is common with CSVs received from external partners.
* As a quick workaround, converting to `.xls` or `.xlsx` often solves the problem.
## If the problem persists
👉 If, after checking the separator and headers, the upload still fails, please [contact **Support**](https://share-eu1.hsforms.com/1tfDJdWCoTQaC2PbMbonm8w2diqhu) and include:
* the original CSV file,
* a screenshot of the error message.
This will help us investigate further.
⚠️ **Important**: Paradigm cannot import CSVs with `;` separators or missing required headers. The file must be corrected before upload
# Understanding And Using Document Tags
Source: https://docs.lighton.ai/en/user-guides/documents-management/document-tags
This article explains how tags are managed by company admins, how they can be applied, manually or automatically to documents and where to find and use them for faster, more accurate searches.
**Tags are defined by an admin, applied through the API or our auto-tagging capability, and can they be used to scope your searches on a specific set of documents.** They make your documents easier to find and will support advanced features going forward.
## How Tags Are Created and Deleted
**Company Admins** can define a list of tags or delete them for their company either
* through the admin interface in the `/admin/knowledge_graph/tag/` url.
* or through the dedicated API endpoints at`api/v3/docs/#/Tags`
> * ➡️ Each tag should include a meaningfull **description** to clarify its purpose and why a document should have it (see below auto-tagging capability)
## How Tags Are Associated To Documents
There are several flexible ways of associating tags to a Document
* At API import, throught the POST [**/api/v3/files**](https://paradigm-preprod.lighton.ai/api/v3/docs/#/Files/api_v3_files_create) endpoint
* Parameter : "tags": \[], ( List of tag IDs to assign to the document on creation)
* Through the dedicated association endpoint in the API for already uploaded documents
* POST [**/api/v3/files**](https://paradigm-preprod.lighton.ai/api/v3/docs/#/Files/api_v3_files_create)**//tags**
* **Automatically** : During off-peak hours (typically at night), an automated process will try to apply, according to the tag name and description, the tags to Documents.
Note it is currently not possible to visually associate tags to documents in the UI in Paradigm.
## Launching Auto-tagging Immediately
You don't have to wait overnight for tags to be associated. If needed, you can trigger auto-tag association manually:
1. Go to the **Document Administration Page**: `/admin/embeddings/document/` url.
2. Select one or more documents.
3. From the action drop-down menu, choose **"Tag document with knowledge graph."** ✅
## Where to Find Tags
* Tags are displayed directly in the **Document List page**.
* They appear alongside each document, making it easy to identify content.
* You can also use them as filters to scope your search results on a specific set of documents.
## Why Tags Matter
* Tags can improve the **accuracy** and **speed** of document search by scoping on them
* In the future, they will also power additional features across the platform (organization, automation, recommendations, etc.).
## Using Tags to Scope Your Chat *\*
Tags are not only useful for organizing and finding documents — you can also use them to focus your chat interactions.
When starting a conversation, you can select one or more tags in the Scope / Context settings. The model will then only search and reference documents that match the selected tags. This is particularly useful when you want to target a specific topic or category across multiple workspaces.
You can also combine tag filters with workspace selection to narrow your scope even further.
For more details on scoping options, see [How to Restrict Chat to Specific Workspaces, Documents, or Tags](/en/user-guides/chat-features/workspace-chat-scope)
# Documents and Workspaces
Source: https://docs.lighton.ai/en/user-guides/documents-management/documents-workspaces
Learn how to view, manage, upload, and organize documents within workspaces in Paradigm.
## Overview
From the [Documents page](https://paradigm.lighton.ai/documents), you can view and manage all documents you have access to. This interface provides multiple ways to upload, search, filter, preview, and edit documents, depending on your permissions.
***
## 1. Uploading Documents
* Use the **Upload** button in the top-right corner.
***
## 2. Searching Documents
* Use the **search bar** to find documents. (Search is **based only on document names**.)
***
## 3. Filtering Documents
Use the **filter icon** to refine the list by:
* **Workspace** (folder)
* **Owner** (who uploaded the document)
* **Status** of the document
### Document Statuses
* **Pending**: Waiting to start processing (e.g., heavy upload load).
* **Parsing**: Document is being split into parts.
* **Parsing failed**: Splitting failed; document unusable.
* **Embedding**: Content is being analyzed and chunked.
* **Embedding failed**: Embedding failed; document unusable.
* **Embedded**: Document is ready to use.
* **Fail**: Generic failure; document unusable.
* **Updating**: Document is being updated (common with synced sources such as Google Drive, SharePoint, ServiceNow, Teams, etc.).
***
## 4. Customizing Columns
Click **Columns** to choose which metadata to display:
* **Citations**: Number of times the document was cited in conversations.
* **Updated**: Last update date.
* **Uploaded**: Original upload date.
* **Owner**: Who uploaded the document.
* **Tags**: Automatically generated tags (created during nightly processing).
***
## 5. Workspace Filtering
* Use the left-side menu to filter by **workspace(s)**.
**Tip:** If you filter by a workspace and then click **Upload**, the selected workspace is automatically applied.
***
## 6. Document Preview & Summary
* **Click a document row** to preview its content.
* Hover over the **"i" icon** next to a document to see its **summary**.
For each document, use the **three-dot menu** to:
* Preview the document
* Rename the document
* Delete the document
***
## 8. Multi-Select and Bulk Actions
* Check one or more boxes next to documents to enable bulk actions:
* **Explore selected** → Route to chat with these docs preloaded.
* **Download** → Export selected documents.
* **Delete** → Remove selected documents.
**Permissions and Limitations**
* The list of documents is limited by your **workspace access** and **user permissions**.
* If you are **not a Document Manager**, you cannot upload documents into the **Company workspace**.
* If you cannot see a workspace you should have access to, contact your **admin**.
# Supported File Formats
Source: https://docs.lighton.ai/en/user-guides/documents-management/supported-file-formats
Paradigm supports a variety of file formats for search and analysis functionalities. Below, we clarify what each of these capabilities means and how they apply to the different formats.
### Understanding Search vs. Analysis
**Search:** The format can be indexed and retrieved based on structured content, keywords, metadata, and within supported files. This allows users to query their entire knowledge base and quickly find relevant documents without necessarily scoping specific documents.
**Analysis:** Analysis means the platform can process the full content of a document, including text interpretation, summarization, and contextual insights. The document must be scoped (delimited) within the query.
Some formats support **both** search and analysis, while others only allow for search-based retrieval.
***
### Supported File Formats by Category
#### 1. Text and Documents
| **Format** | **Search** | **Analysis** |
| :---------------------------------- | :--------- | :----------- |
| **.pdf** (Portable Document Format) | ✅ | ✅ |
| **.doc / .docx** (Microsoft Word) | ✅ | ✅ |
| **.odt** (OpenDocument Text) | ✅ | ✅ |
| **.md** (Markdown) | ✅ | ✅ |
| **.txt** (Plain Text) | ✅ | ✅ |
| **.rtf** (Rich Text Format) | ❌ | ❌ |
| **.tex** (LaTeX) | ❌ | ❌ |
#### 2. Presentations
| **Format** | **Search** | **Analysis** |
| :-------------------------------------- | :--------- | :----------- |
| **.ppt / .pptx** (Microsoft PowerPoint) | ✅ | ✅ |
| **.odp** (OpenDocument Presentation) | ✅ | ✅ |
| **.pdf** (Exported Presentation) | ✅ | ✅ |
| **.key** (Apple Keynote) | ❌ | ❌ |
#### 3. Images and Graphics
| **Format** | **Search** | **Analysis** |
| :------------------------------------- | :----------- | :----------- |
| **.jpg / .jpeg** (JPEG Image) | ✅ | ✅ |
| **.png** (Portable Network Graphics) | ✅ | ✅ |
| **.gif** (Graphics Interchange Format) | ❌ | ❌ |
| **.svg** (Scalable Vector Graphics) | ❌ | ❌ |
| **.bmp** (Bitmap) | 🔄 Candidate | 🔄 Candidate |
| **.tiff** (Tagged Image File Format) | 🔄 Candidate | 🔄 Candidate |
| **.webp** (WebP Image Format) | 🔄 Candidate | 🔄 Candidate |
#### 4. Spreadsheets and Tables
| **Format** | **Search** | **Analysis** |
| :---------------------------------- | :------------------ | :----------- |
| **.csv** (Comma-Separated Values) | ✅ (Text-heavy only) | ✅ |
| **.xls / .xlsx** (Microsoft Excel) | ✅ (Text-heavy only) | ✅ |
| **.ods** (OpenDocument Spreadsheet) | ✅ (Text-heavy only) | ✅ |
#### 5. Code and Development
| **Format** | **Search** | **Analysis** |
| :------------------------------------- | :--------- | :----------- |
| **.html / .xhtml** | ✅ | ✅ |
| **.css** (Cascading Style Sheets) | ❌ | ❌ |
| **.js** (JavaScript) | ❌ | ❌ |
| **.jsx / .tsx** (React) | ❌ | ❌ |
| **.ts** (TypeScript) | ❌ | ❌ |
| **.php** (PHP) | ❌ | ❌ |
| **.py** (Python) | ❌ | ❌ |
| **.java** (Java) | ❌ | ❌ |
| **.c / .cpp / .h** (C / C++) | ❌ | ❌ |
| **.sh** (Shell Script) | ❌ | ❌ |
| **.json** (JavaScript Object Notation) | ❌ | ❌ |
| **.yaml / .yml** (YAML) | ❌ | ❌ |
| **.xml** (Extensible Markup Language) | ❌ | ❌ |
| **.sql** (Structured Query Language) | ❌ | ❌ |
#### 6. Video and Audio
| **Format** | **Search** | **Analysis** |
| :------------------------------------ | :--------- | :----------- |
| **.mp3** (MPEG Audio Layer III) | 🔄 Option | 🔄 Option |
| **.wav** (Waveform Audio) | 🔄 Option | 🔄 Option |
| **.flac** (Free Lossless Audio Codec) | 🔄 Option | 🔄 Option |
| **.aac** (Advanced Audio Codec) | 🔄 Option | 🔄 Option |
| **.mp4** (MPEG-4 Video) | ❌ | ❌ |
| **.mov** (QuickTime Video) | ❌ | ❌ |
| **.avi** (Audio Video Interleave) | ❌ | ❌ |
| **.mkv** (Matroska Video) | ❌ | ❌ |
***
### What's next?
LightOn is continuously improving its platform capabilities, and new formats will be supported over time. If you have requests for specific formats, please feel free to contact our team to discuss potential integration.
📢 **Stay tuned for future updates!**
# Why don’t my documents display in preview?
Source: https://docs.lighton.ai/en/user-guides/documents-management/why-doc-preview-not-working
In some cases, document search works but the preview does not display. This is usually caused by your company’s Content Security Policy (CSP).
## Symptoms
* You can search and find documents in Paradigm.
* But when you click a document, the **preview does not load**.
* You may just see a blank space where the document should appear.
## Cause
This problem is most often caused by your company’s **Content Security Policy (CSP)**.
* Paradigm uses a technology called `blob:`**URIs** to display document previews (PDFs, etc.).
* If your company’s CSP does not allow `blob:`, your browser will block the preview.
* That’s why search works (documents are found) but preview stays empty.
## How to check if CSP is the cause
1. Open Paradigm in your browser.
2. When the preview fails to load, open the **browser console**:
* On Windows: press **F12** or **Ctrl + Shift + I**, then go to the *Console* tab.
* On Mac: press **⌥ Option + ⌘ Command + I**, then go to the *Console* tab.
3. Look for errors mentioning **CSP** or \*\*blocked \*\*`blob:`**URI** .\
Example:
```
Refused to load resource: the content security policy directive blocked "blob:"
```
👉 If you see this type of message, the issue is indeed CSP-related.
## How to fix
If the problem is caused by CSP:
* Contact your company’s **IT or security team**.
* They need to update the **CSP configuration** to allow `blob:` as a valid source.
Once this is done, previews will work normally.
## If the problem is not CSP
* If you don’t see CSP errors in the console, the cause may be different.\
👉 In that case, please [**contact our support team**](https://share-eu1.hsforms.com/1tfDJdWCoTQaC2PbMbonm8w2diqhu) so we can investigate.
⚠️ **Note**: Paradigm cannot bypass your company’s CSP configuration. The fix must be applied on your company’s side.
# AnalyseDoc
Source: https://docs.lighton.ai/en/user-guides/tools-mastery/analysedoc
Advanced analysis tool for summarizing and synthesizing voluminous documents according to a specific angle of analysis defined by the user.
Advanced analysis tool for summarizing and synthesizing voluminous documents according to a specific angle of analysis defined by the user.
## When to Use It
* To extract the essence of a (or several) long document according to a precise perspective
* To quickly identify relevant information on a specific theme
* To analyze voluminous reports without having to read them in their entirety
## How to Activate It Manually
* Click on "Select a tool" in the chat area
* Choose "AnalyseDoc"
* A visual indicator will confirm activation
* Attach (paperclip) at least one document, and up to 5, before asking your question
## Effective Formulation
* Clearly specify the desired angle of analysis (e.g., "Extract ESG information from the annual report")
* Specify the expected level of detail, indicate if you are looking for quantitative or qualitative data, the structure of the expected summary, etc.
## Understanding the Results
* AnalyzeDoc works only on the documents you have selected. For effective analysis, it is recommended to limit the analysis to a small number of specific documents by attaching them via the paperclip icon.
## Limitations
* The analysis takes place in the background and can take time for very voluminous documents (several minutes). You can continue to use Paradigm during this processing by opening a new discussion.
* The quality of the analysis depends on the precision of the specified angle of analysis. Vague instructions will produce less relevant results.
* You can attach up to 5 documents, an error message will warn you that additional docs above this limit will be ignored.
# DocumentSearch
Source: https://docs.lighton.ai/en/user-guides/tools-mastery/documentsearch
Powerful Retrieval Augmented Generation (RAG) tool that allows you to query documents in your database using natural language.
Powerful Retrieval Augmented Generation (RAG) tool that allows you to query the documents in your document database using natural language.
## When to Use It
* For factual questions requiring precise information contained in your documents, and potentially buried in a large document base.
* For traceable results with references to sources
## How to Activate It
* Click on "Select a tool" in the chat area
* Choose "DocumentSearch"
* A visual indicator will show that the tool is selected
## Effective Formulation
* Ask precise and direct questions
* Mention the key concepts you are looking for
* Specify the type of information desired (definition, process, date, etc.)
## Understanding the Results
* By default, DocumentSearch will search in all documents you have access to (Company documents, workspaces you have access to, personal documents). You can limit the documents among which you want to search by attaching them via the paperclip icon before asking your question.
* The source documents used to generate the response are displayed, with the ability to navigate and display the specific pages (or even highlighted passages, depending on the formats) on which the assistant relied.
## Limitations
* The tool will rely on at most 5 document extracts (\~5 pages) to formulate its answer. It will therefore not be able to effectively propose a synthesis of several documents, or answer a question requiring taking into account more than 5 pages of context at the same time.
* If the answer is not found in the documents, the assistant will respond based on its prior knowledge (i.e., its pre-training, as in no-tool mode). It will therefore not display a source and will specify at the end of the response that its answer is not based on your documents.
# No Tool Mode
Source: https://docs.lighton.ai/en/user-guides/tools-mastery/no-tool-mode
Utilizes only the language model's prior knowledge without relying on external documents or sources.
Utilizes only the language model's prior knowledge without relying on external documents or sources.
## When to Use It
* For general knowledge questions
* To generate creative content (texts, ideas, scenarios)
* For reformulation or rewriting tasks
* To obtain conceptual explanations
## How to Activate It
* This mode is activated by default when you prompt and the assistant understands that it doesn't need a tool to respond.
* Possibility to force the no-tool mode by selecting the "no\_tool" option in the tool selection menu.
## Effective Formulation
* Ask your questions as you would to an expert
* Be specific about the desired format and level of detail
* Use user instructions to customize the response style
## Understanding the Results
* Responses rely solely on the knowledge the model acquired during its pre-training.
* No documentary source will be cited because no document is consulted.
* Responses reflect the state of the model's knowledge at the time of its training.
## Limitations
* The model cannot access recent information or information specific to your company that was not included in its training.
* Without access to documents, responses may lack precision on questions very specific to your context.
* The model may potentially generate incorrect information on complex or specialized topics without being able to verify in sources.
# WebSearch
Source: https://docs.lighton.ai/en/user-guides/tools-mastery/websearch
LightOn is evolving its Web Search feature towards the MCP (Model Context Protocol) standard to guarantee optimal performance and flexibility. This article details this transition, the discontinuation of the legacy tool, and the procedure to connect a third-party provider like Linkup.
The **Web Search** feature enables the assistant to access information from the internet to answer questions requiring up-to-date data or information external to your document database. We are evolving this feature to offer you more flexibility, security, and stability through the MCP standard.
## 1. Why is Web Search evolving?
Historically, LightOn offered a proprietary web search tool ("Web Search Legacy"). To focus on our core expertise—**Private Document Search**—we have decided to discontinue the development of our internal engine.
We are now adopting the **MCP standard**. This architecture allows you to **choose your own search provider** (LinkUp, OmniSearch, FastMCP, Perplexity, etc.) and connect it easily to the LightOn platform.
## 2. Our Recommendation: [Linkup.so](http://Linkup.so)
Although the MCP architecture gives you free choice regarding the provider, LightOn recommends using **Linkup** for privacy-conscious clients.
We have selected Linkup for its high standards regarding sovereignty and security:
* **Zero data retention:** Your queries are not stored.
* **Hosting in France:** Data sovereignty is guaranteed.
* **Independence:** Linkup possesses its own index, avoiding sending data to "Big Tech".
* **Certified:** SOC2 Type II compliant.
> **Note:** For new organizations, Web Search is disabled by default. You must configure an MCP (Linkup or other) to activate it.
## 3. End of Support for the Legacy Tool (Deprecation)
For clients still using the native "Web Search" tool (Legacy), a transition period is in place.
* **Current Availability:** Access is maintained for existing clients.
* **End of Service Date:** The native tool will be permanently removed on **March 31, 2026**.
* **Required Action:** We invite all clients to migrate to an MCP solution (like Linkup) before this date to avoid any service interruption.
## 4. Configuration and Usage
Before being able to use web search via MCP, technical configuration is necessary, followed by activation in the chat interface.
### Step 1: Connector Configuration (Admin)
The web search feature is no longer native but relies on external connectors (MCP). To activate a provider (like Linkup or other), an administrator must configure the integration in the system settings.
Please consult our step-by-step integration guide here: 👉 [**Documentation: MCP Servers Integration**](https://paradigm-academy.lighton.ai/en/administration/system-configuration/mcp-servers#mcp-servers-integration)
### Step 2: How to launch a Web Search in the chat?
Once the MCP server is correctly configured and activated, the search tool appears in the list of available tools in your chat interface.
There are **three ways** to interact with this tool:
1. **Automatic Detection (Autonomous Mode):** Simply ask your question. The model analyzes your request and determines by itself if an external search is necessary to answer you (for example, for a question about recent news).
2. **Explicit Request (Prompting):** You can specify in your request that you want to use the internet. *Example: "Search the web for the latest announcements regarding generative AI."*
3. **Manual Selection (Forcing the tool):** If you wish to guarantee the use of web search (without leaving the choice to the model), you can manually select the tool in the "Select a tool" menu before sending your message. The assistant will then be forced to use the MCP connector to process your request.
***
### Frequently Asked Questions
**Are my corporate documents shared during a Web Search?** No. Whether with the old method or via MCP, your internal documents are never transmitted externally. Only the text query (the question asked) is sent to the search engine.
**Can the tool access paid sites (Paywall)?** No, the tool (via MCP or Legacy) cannot access content locked behind a paywall or requiring specific user authentication (login/password).
# Why Choose a Specific Tool?
Source: https://docs.lighton.ai/en/user-guides/tools-mastery/why-choose-specific-tool
Learn how selecting the appropriate tool optimizes Paradigm's responses according to your specific needs.
Selecting an appropriate tool allows you to optimize Paradigm's responses according to your specific need:
* **no\_tool** (mode without tool): Leverage the model's general knowledge for creative tasks
* **DocumentSearch**: Obtain factual answers based exclusively on your internal document database
* **WebSearch**: Access current or external information not present in your documents
* **Vision\_document\_search**: Extract information from visual content (tables, graphs)
* **AnalyseDoc**: Synthesize a voluminous document from a specific angle of analysis
* **Image\_analysis**: Interpret scanned or handwritten documents
By default, if you don't manually select a tool, the assistant will automatically analyze your question and choose the most relevant tool to answer it. This "agentic" capability allows it to optimize its responses without your intervention, although manual selection remains available when you wish to precisely direct the processing of your request.
Choosing the right tool increases the accuracy and relevance of responses depending on the nature of your query.
# Chat Instructions (Experience Personalization)
Source: https://docs.lighton.ai/en/user-guides/user-profile/chat-instructions
Learn how to personalize the assistant’s responses by setting Chat Instructions that adapt the tone, level of detail, and format to your preferences.
## **Overview**
You can customize how the assistant responds to you by defining **Chat Instructions**. These settings help tailor the tone, level of detail, and response format to better match your preferences.
## **How to Access**
Click the **Chat Instructions** icon in the left sidebar (located at **/settings/chat** in your Paradigm instance).
## **Company Instructions**
Company instructions are set by your administrator and provide organizational guidelines for AI interactions.
**Key features:**
* Defined by your administrator
* Displayed in read-only mode
* Cannot be modified by the user
Company instructions ensure consistent AI behavior aligned with your organization’s standards and requirements.
## **User Instructions**
User Instructions provide a customizable text area where you describe your personal interaction preferences.
**Specifications:**
* Maximum length: **1,500 characters** (including spaces)
* Applied to all future conversations until updated
* Think of these instructions as guiding principles for the assistant
## **Examples of User Instructions**
Here are a few examples to help you write effective instructions:
* “Provide concise answers using technical terminology.”
* “Structure responses with bullet points for clarity.”
* “Include examples for each concept explained.”
* “Provide a concise response using advanced product terminology tailored to an expert audience.”
## **Applying Instructions**
Company and user instructions are automatically applied to all new conversations.
To enable your instructions:
1. Write your preferences in the **User Instructions** text area
2. Click **Save** to confirm and activate your instructions
3. The assistant will then adapt its responses based on the preferences you defined
## **Tips**
You don’t need to include your first name, last name, job title, or company in your instructions. This information is already included in the system pre-prompt.
**Best practices:**
* You can update or refine your instructions at any time to fit different tasks or audiences
* Be specific about the format and style you prefer
* Consider your typical use cases when writing instructions
* Test different instruction styles to find what works best for your workflow
# Manage your API keys from your profile
Source: https://docs.lighton.ai/en/user-guides/user-profile/my-api-keys
If you have the “API Key Manager” permission, you can manage your access keys independently directly from your user space, without going through an administrator.
## 1. Access the Management Interface
To access your API keys:
* Log in to your Paradigm instance.
* Click your profile icon located at the bottom-left of the screen.
* In the menu that opens, select **“API Keys”**.
## 2. API Keys Dashboard
Once on the page, you will see the list of your existing keys. For each key, you can view:
* The key ID / name
* The status (**Active / Revoked**)
* The expiration date (if applicable)
This is where you can quickly monitor the validity of your access at a glance.
## 3. Create a New API Key
The creation process is designed to be immediate:
* Click the **“Add API Key”** (or **“Create”**) button.
* The key is generated instantly and displayed on the screen.
⚠️ **Important: Save your key immediately!**\
For security reasons, the full key is shown **only once** at this step.
* Copy it and paste it right away into your password manager or a secure configuration file.
* If you close this window without copying it, you will **never** be able to retrieve it again. You will need to delete it and create a new one.
## 4. Limits (Quota)
Each user is limited to a maximum of **5 active API keys** at the same time.
* If you have reached this quota (**5/5**), the creation button will be disabled.
**Solution:** You must delete an old key in order to generate a new one.
**Specific need?** If you absolutely need more than 5 keys, please contact an administrator so they can generate one manually via the admin panel.
## 5. Delete (Revoke) a Key
If a key has been compromised or is no longer used, you should delete it to secure your account:
* Identify the key in your list.
* Click the trash icon (or the **“Delete”** button) on the corresponding row.
* Confirm deletion. The key will stop working immediately.
# Managing Your Profile, Data, and Security
Source: https://docs.lighton.ai/en/user-guides/user-profile/user-profile-space
The Profile tab and Password tab in your user area centralize your personal information, language preferences, and tools related to your data privacy (GDPR).
### 1. Profile Information
In the main section of the profile, you will find your account identification information:
* **Identity:** Your Last Name and First Name as recorded in the system.
* **Organization:** The name of the company or workspace your account is attached to.
* **User ID:** This is your unique identifier in the Paradigm database.
> **Tip:** A “Copy” button allows you to easily retrieve this ID. It is often requested by technical support to identify your account in case of an issue.
* **Interface Language:** A dropdown menu allows you to change the platform language (e.g., French, English).
### 2. Password Management
The **Password** tab allows you to modify your login credentials.
> **Note:** If your company uses a **Single Sign-On (SSO)** system to access Paradigm, this tab may not be visible or may be disabled. In this case, managing your password is done directly via your company's IT portal.
### 3. Privacy and Data (GDPR)
Paradigm gives you full control over your data via three dedicated features at the bottom of the Profile page:
* **Export my data:** You can request a full copy of your activity (connection history, prompts, uploaded documents). A complete archive will be sent to you by email.
* **Contact the DPO:** A direct link allows you to access the email address of the Data Protection Officer (DPO). Use this contact for any official request (rectification, specific deletion, reporting an issue).
* **Delete my account:** This option results in the permanent deletion of your account and all associated data.
> **Warning:** This action is **irreversible**. Once confirmed, you will immediately lose access to the platform.
# List agent tools and MCP servers for a chat setting
Source: https://docs.lighton.ai/api-reference-v3/agent/list-agent-tools-and-mcp-servers-for-a-chat-setting
/api-reference/openapi-v3.yaml get /api/v3/agent/chat_settings/{id}/tools
Get available native tools and MCP servers with their tools for a given chat setting ID.
DEPRECATION WARNING: `chat_settings` are now becoming `agents`, please use the `agents` endpoint.
# Create a new agent
Source: https://docs.lighton.ai/api-reference-v3/agents/create-a-new-agent
/api-reference/openapi-v3.yaml post /api/v3/agents
Create a new agent (ChatSettings) with specified tools and MCP servers. Access control: Users can create agents in their personal groups. Company admins can create agents in any group within their company. Sys-admin users can create agents in any group.
# Create agent favorite
Source: https://docs.lighton.ai/api-reference-v3/agents/create-agent-favorite
/api-reference/openapi-v3.yaml post /api/v3/agents/favorites
Favorite an agent for the current user.
# Delete agent favorite
Source: https://docs.lighton.ai/api-reference-v3/agents/delete-agent-favorite
/api-reference/openapi-v3.yaml delete /api/v3/agents/favorites/{id}
Remove an agent from the current user's favorites by favorite id.
# Delete agent favorite by agent id
Source: https://docs.lighton.ai/api-reference-v3/agents/delete-agent-favorite-by-agent-id
/api-reference/openapi-v3.yaml delete /api/v3/agents/favorites
Remove an agent from the current user's favorites by agent id.
# Delete an agent
Source: https://docs.lighton.ai/api-reference-v3/agents/delete-an-agent
/api-reference/openapi-v3.yaml delete /api/v3/agents/{id}
Delete an agent (ChatSettings) by ID. Access control: Users can delete agents in their personal groups. Company admins can delete agents in any group within their company. Sys-admin users can delete any agent. Default agents cannot be deleted.
# Get agent icon
Source: https://docs.lighton.ai/api-reference-v3/agents/get-agent-icon
/api-reference/openapi-v3.yaml get /api/v3/agents/{id}/icon
Retrieve the icon for an agent as a WebP image file. Access control: Sys-admin users can access icons for all agents from all companies. Company admin users can access icons for all agents from their company. Regular users can only access icons for agents linked to groups they belong to.
# List agent favorites
Source: https://docs.lighton.ai/api-reference-v3/agents/list-agent-favorites
/api-reference/openapi-v3.yaml get /api/v3/agents/favorites
Get a list of the current user's favorited agents, ordered by newest first.
# List all agents
Source: https://docs.lighton.ai/api-reference-v3/agents/list-all-agents
/api-reference/openapi-v3.yaml get /api/v3/agents
Get a paginated list of agents (ChatSettings) accessible to the user. Access control: Sys-admin users can access all agents from all companies. Company admin users can access all agents from their company. Regular users can only access agents linked to groups they belong to.
# List files scoped to an agent
Source: https://docs.lighton.ai/api-reference-v3/agents/list-files-scoped-to-an-agent
/api-reference/openapi-v3.yaml get /api/v3/agents/{id}/files
Retrieve a paginated list of files (documents) accessible to the authenticated user.
Results are ordered by upload date (newest first) by default.
When using the `search` parameter, results are ordered by relevance.
# List native tools and MCP servers available for a specific agent
Source: https://docs.lighton.ai/api-reference-v3/agents/list-native-tools-and-mcp-servers-available-for-a-specific-agent
/api-reference/openapi-v3.yaml get /api/v3/agents/{id}/tools
Get available native tools and MCP servers with their tools for a given agent ID.
# List tags used in workspaces for an agent
Source: https://docs.lighton.ai/api-reference-v3/agents/list-tags-used-in-workspaces-for-an-agent
/api-reference/openapi-v3.yaml get /api/v3/agents/{id}/tags
Return a non-paginated list of tags used in documents within workspaces scoped to the specified agent. If the agent is default, tags are computed across all workspaces accessible to the user. If the agent is not default, tags are computed only across workspaces linked to the agent's group, intersected with workspaces accessible to the user.
# Retrieve a single agent
Source: https://docs.lighton.ai/api-reference-v3/agents/retrieve-a-single-agent
/api-reference/openapi-v3.yaml get /api/v3/agents/{id}
Get detailed information about a specific agent (ChatSettings) by ID. Access control: Sys-admin users can access all agents from all companies. Company admin users can access all agents from their company. Regular users can only access agents linked to groups they belong to.
# Update an agent
Source: https://docs.lighton.ai/api-reference-v3/agents/update-an-agent
/api-reference/openapi-v3.yaml patch /api/v3/agents/{id}
Partially update an agent (ChatSettings) by ID. Access control: Users can update agents in their personal groups. Company admins can update agents in any group within their company. Sys-admin users can update any agent.
# Upload agent icon
Source: https://docs.lighton.ai/api-reference-v3/agents/upload-agent-icon
/api-reference/openapi-v3.yaml put /api/v3/agents/{id}/icon
Upload or update an icon for an agent. Maximum file size: 5MB. Access control: Users can upload icons for agents in their personal groups. Company admins can upload icons for agents in any group within their company. Sys-admin users can upload icons for any agent.
# Retrieve an artifact
Source: https://docs.lighton.ai/api-reference-v3/artifacts/retrieve-an-artifact
/api-reference/openapi-v3.yaml get /api/v3/artifacts/{id}
Retrieve an artifact by ID.
# Retrieve an artifact content
Source: https://docs.lighton.ai/api-reference-v3/artifacts/retrieve-an-artifact-content
/api-reference/openapi-v3.yaml get /api/v3/artifacts/{id}/content
Get the content of an artifact. Returns the file content if the user is authorized to access it.
# Create a company
Source: https://docs.lighton.ai/api-reference-v3/companies/create-a-company
/api-reference/openapi-v3.yaml post /api/v3/companies
This endpoint allows authorized users to create a new company.
Only SysAdmin and Account Manager roles can create companies.
# Delete a company
Source: https://docs.lighton.ai/api-reference-v3/companies/delete-a-company
/api-reference/openapi-v3.yaml delete /api/v3/companies/{id}
This endpoint allows authorized users to delete a company.
Access levels:
- SysAdmin/Account Manager: Can delete any company
- Company Admin: Cannot delete companies
# Get company details
Source: https://docs.lighton.ai/api-reference-v3/companies/get-company-details
/api-reference/openapi-v3.yaml get /api/v3/companies/{id}
This endpoint allows users to retrieve details of a specific company.
Access levels:
- SysAdmin/Account Manager: Can view any company
- DPOAdmin: Read-only access to any company
- Company Admin: Can view their own company
- Company DPO: Read-only access to their own company
- User: No access
# List companies
Source: https://docs.lighton.ai/api-reference-v3/companies/list-companies
/api-reference/openapi-v3.yaml get /api/v3/companies
This endpoint allows users to list companies based on their permissions.
Access levels:
- SysAdmin/Account Manager/DPO Admin: Can view all companies
- Company Admin: Can view their own company only
- Company DPO: Read-only access to their own company
- User: No access
Supports pagination and search functionality.
# Partially update a company (PATCH)
Source: https://docs.lighton.ai/api-reference-v3/companies/partially-update-a-company-patch
/api-reference/openapi-v3.yaml patch /api/v3/companies/{id}
This endpoint allows partially updating a company's details.
PATCH allows updating only the fields you want to change.
Access levels:
- SysAdmin/Account Manager: Can update any company
- Company Admin: Cannot update companies
Company name must be unique.
# Retrieve document chunks
Source: https://docs.lighton.ai/api-reference-v3/files-processing/retrieve-document-chunks
/api-reference/openapi-v3.yaml post /api/v3/retrieve
Invoke the document retrieval pipeline (embedding + hybrid vector search + Reranking) and return matched document chunks.
**Reranking:** applied by default (`skip_rerank=false`). When active, each result includes a `scoring.certainty` field with the reranker confidence score. Set `skip_rerank=true` to return raw retrieval order without certainty.
**Scoping:** use `workspace_id` and/or `tag_id` to narrow retrieval to specific workspaces or tags, or use `file_id` to target specific files. `file_id` cannot be combined with `workspace_id` or `tag_id` (400). A 403 is returned if any provided filter resolves to no authorized resources. When no filters are provided, retrieval runs across all authorized documents.
**Modes:**
- `text` (default): hybrid text search
- `vision`: image-based search
# Delete a file
Source: https://docs.lighton.ai/api-reference-v3/files/delete-a-file
/api-reference/openapi-v3.yaml delete /api/v3/files/{id}
Permanently delete a file and all associated data.
**Requirements:**
- Delete permission on the document
- Workspace must allow manual document management (not sync-only)
Returns 204 (No Content) on success.
# List files accessible to the authenticated user
Source: https://docs.lighton.ai/api-reference-v3/files/list-files-accessible-to-the-authenticated-user
/api-reference/openapi-v3.yaml get /api/v3/files
Retrieve a paginated list of files (documents) accessible to the authenticated user.
Results are ordered by upload date (newest first) by default.
When using the `search` parameter, results are ordered by relevance.
# Retrieve a single file by ID
Source: https://docs.lighton.ai/api-reference-v3/files/retrieve-a-single-file-by-id
/api-reference/openapi-v3.yaml get /api/v3/files/{id}
Retrieve detailed information for a single file by its ID.
Only files that the authenticated user is authorized to access will be returned.
Returns 404 if the file does not exist or the user does not have access.
Query Parameters:
- include_content: Set to 'true' to include the full text content of the document (default: false)
The response includes comprehensive document details including:
- Basic metadata (id, filename, title, extension, dates, page count)
- Full text content of the document (only when include_content=true)
- Processing status (status, status_vision, status_detail if failed)
- Associated tags and workspace information
- File size (if available)
- Parser/ingestion pipeline (if available, after parsing starts)
- Signature (TLSH hash for duplicate detection)
# Update file metadata
Source: https://docs.lighton.ai/api-reference-v3/files/update-file-metadata
/api-reference/openapi-v3.yaml patch /api/v3/files/{id}
Update mutable fields of a file (document).
**Updatable fields:**
- `title`: Update the document title
- `tags`: Replace ALL tags for the document (both manual and auto-assigned)
- `external_metadata`: Create or update external source metadata
**Tag replacement behavior:**
- Providing a tags array replaces ALL existing tags (manual and auto-assigned)
- To remove all tags, send `[0]` (sentinel value for multipart format)
- Omitting `tags` field leaves tags unchanged
- New tags are marked as manually assigned (`auto_assigned=False`)
**External metadata behavior:**
- When creating for the first time, `external_id` is required
- When updating existing metadata, `external_id` is optional (existing value is preserved)
- Fields in `additional_metadata` are merged (not replaced) with existing values
**Validation:**
- Returns 400 if only immutable fields are provided (mutable fields: 'external_metadata', 'tags', 'title')
- Returns 400 if tag IDs are invalid or don't belong to user's company
- Returns 404 if document doesn't exist or user doesn't have access
# Upload a file
Source: https://docs.lighton.ai/api-reference-v3/files/upload-a-file
/api-reference/openapi-v3.yaml post /api/v3/files
Upload a file to a workspace.
Files are added to an upload session and queued for asynchronous processing. To track progress, retrieve the file details using the GET endpoints to check the current status.
**Customization Options:**
- `title`: Customize the document title (defaults to filename without extension)
- `filename`: Override the uploaded filename
- `parser`: Specify a custom ingestion pipeline instead of using the default
# Create MCP server
Source: https://docs.lighton.ai/api-reference-v3/mcp/create-mcp-server
/api-reference/openapi-v3.yaml post /api/v3/mcp
Create a new MCP server scoped to the authenticated user's personal group. The server is automatically linked to the user's company and personal group — users cannot create servers for other companies or groups.
`authentication_method` determines how the server authenticates requests. Possible values:
- `none`: no authentication required
- `url`: credentials are appended to the `url` as the `apiKey` query parameter
- `bearer_token`: credentials are sent as a Bearer token in the Authorization header (provide the token in the `credentials` field)
# Delete MCP server
Source: https://docs.lighton.ai/api-reference-v3/mcp/delete-mcp-server
/api-reference/openapi-v3.yaml delete /api/v3/mcp/{id}
Delete an MCP server. This will remove it from all agents using it.
# Get MCP server details
Source: https://docs.lighton.ai/api-reference-v3/mcp/get-mcp-server-details
/api-reference/openapi-v3.yaml get /api/v3/mcp/{id}
Get details of a specific MCP server. URL is redacted unless user has secret read permissions.
# List MCP servers
Source: https://docs.lighton.ai/api-reference-v3/mcp/list-mcp-servers
/api-reference/openapi-v3.yaml get /api/v3/mcp
List MCP servers available to the authenticated user (servers only; tools are not included).
# List tools for an MCP server
Source: https://docs.lighton.ai/api-reference-v3/mcp/list-tools-for-an-mcp-server
/api-reference/openapi-v3.yaml get /api/v3/mcp/{id}/tools
Returns the tools registered for a specific MCP server. Returns 403 if the server does not exist or is not accessible.
# Update MCP server
Source: https://docs.lighton.ai/api-reference-v3/mcp/update-mcp-server
/api-reference/openapi-v3.yaml patch /api/v3/mcp/{id}
Update an existing MCP server. All fields are optional.
`authentication_method` determines how the server authenticates requests. Possible values:
- `none`: no authentication required
- `url`: credentials are appended to the `url` as the `apiKey` query parameter
- `bearer_token`: credentials are sent as a Bearer token in the Authorization header (provide the token in the `credentials` field)
# Create embeddings
Source: https://docs.lighton.ai/api-reference-v3/models/create-embeddings
/api-reference/openapi-v3.yaml post /api/v3/embeddings
This endpoint can be used to convert text chunks into embeddings.
It is a simple proxy forwarding your requests to the desired model.
**Input Format:**
- `input`: Text string to convert to embeddings
- `encoding_format`: Format for returned embeddings (float or base64)
- `dimensions`: Optional dimension specification for output embeddings
# Generate a chat completion
Source: https://docs.lighton.ai/api-reference-v3/models/generate-a-chat-completion
/api-reference/openapi-v3.yaml post /api/v3/chat/completions
This endpoint can be used to generate chat completions from a Large Language Model.
It is a simple proxy forwarding your requests to the desired model.
Any LightOn model is deployed on a vLLM-based image.
**Response Types:**
- When `stream=false` **(default)**: Returns a complete JSON response with all completion choices
- When `stream=true`: Returns Server-Sent Events (SSE) with incremental completion chunks
**Streaming Format:**
Each SSE event contains a JSON object with incremental text. The stream ends with `data: [DONE]`.
# Parse a document to Markdown via VLM
Source: https://docs.lighton.ai/api-reference-v3/models/parse-a-document-to-markdown-via-vlm
/api-reference/openapi-v3.yaml post /api/v3/ocr
Upload a file for synchronous OCR processing. This endpoint is intended for lightweight, low-volume document parsing and returns results inline in the response.
For large documents, high-throughput workloads, or asynchronous processing, use the `/files` endpoints, which are optimized for those use cases.
**Supported file types:** `.pdf`, `.png`, `.jpg`, `.jpeg`, `.pptx`, `.ppt`, `.odp`, `.docx`, `.odt`, `.doc`, `.html`
A maximum of **16 pages** are processed per request. For documents exceeding this limit, split the content across multiple sequential calls using the `pages` parameter (e.g., `pages="1-16"` for the first call, `pages="17-32"` for the second).
# Create a group
Source: https://docs.lighton.ai/api-reference-v3/scim/create-a-group
/api-reference/openapi-v3.yaml post /scim/v2/Groups
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
We disable PUT as Microsoft does not need it
# Create a user
Source: https://docs.lighton.ai/api-reference-v3/scim/create-a-user
/api-reference/openapi-v3.yaml post /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# Delete a group
Source: https://docs.lighton.ai/api-reference-v3/scim/delete-a-group
/api-reference/openapi-v3.yaml delete /scim/v2/Groups
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
We disable PUT as Microsoft does not need it
# Delete a user
Source: https://docs.lighton.ai/api-reference-v3/scim/delete-a-user
/api-reference/openapi-v3.yaml delete /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# List or Retrieve a group
Source: https://docs.lighton.ai/api-reference-v3/scim/list-or-retrieve-a-group
/api-reference/openapi-v3.yaml get /scim/v2/Groups
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
We disable PUT as Microsoft does not need it
# List or Retrieve resource types
Source: https://docs.lighton.ai/api-reference-v3/scim/list-or-retrieve-resource-types
/api-reference/openapi-v3.yaml get /scim/v2/ResourceTypes
# List or Retrieve schemas
Source: https://docs.lighton.ai/api-reference-v3/scim/list-or-retrieve-schemas
/api-reference/openapi-v3.yaml get /scim/v2/Schemas
# List or Retrieve users
Source: https://docs.lighton.ai/api-reference-v3/scim/list-or-retrieve-users
/api-reference/openapi-v3.yaml get /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# Replace a user
Source: https://docs.lighton.ai/api-reference-v3/scim/replace-a-user
/api-reference/openapi-v3.yaml put /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# Retrieve Service Provider Configuration
Source: https://docs.lighton.ai/api-reference-v3/scim/retrieve-service-provider-configuration
/api-reference/openapi-v3.yaml get /scim/v2/ServiceProviderConfig
# Update a group
Source: https://docs.lighton.ai/api-reference-v3/scim/update-a-group
/api-reference/openapi-v3.yaml patch /scim/v2/Groups
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
We disable PUT as Microsoft does not need it
# List or retrieve sources
Source: https://docs.lighton.ai/api-reference-v3/sources/list-or-retrieve-sources
/api-reference/openapi-v3.yaml get /api/v3/sources
Unified endpoint to list document and web sources with filtering.
# Add tags to a file
Source: https://docs.lighton.ai/api-reference-v3/tags/add-tags-to-a-file
/api-reference/openapi-v3.yaml post /api/v3/files/{id}/tags
Add one or more tags to a file without affecting existing tags.
**Behavior:**
- Adds new tags to the document while preserving existing ones
- New tags are marked as manually assigned (`auto_assigned=False`)
- Duplicate tags are ignored (no error if tag already exists on document)
**Validation:**
- Returns 400 if tag IDs are invalid or don't belong to user's company
- Returns 403 if user doesn't have permission to edit the document
- Returns 404 if document doesn't exist
# Create a new tag for the company
Source: https://docs.lighton.ai/api-reference-v3/tags/create-a-new-tag-for-the-company
/api-reference/openapi-v3.yaml post /api/v3/tags
Create a new tag for the authenticated user's company.
The auto_assign flag determines if the tag can be automatically assigned by the system (True)
or only manually (False).
Requires tag creation permission.
# Delete a company tag
Source: https://docs.lighton.ai/api-reference-v3/tags/delete-a-company-tag
/api-reference/openapi-v3.yaml delete /api/v3/tags/{id}
Delete a company tag.
This will also remove all Document-Tag associations with this tag.
Requires tag deletion permission.
# List all tags for the authenticated user's company
Source: https://docs.lighton.ai/api-reference-v3/tags/list-all-tags-for-the-authenticated-users-company
/api-reference/openapi-v3.yaml get /api/v3/tags
Retrieve a list of tags for the authenticated user's company.
Results are ordered by creation date (newest first).
# Remove a tag from a file
Source: https://docs.lighton.ai/api-reference-v3/tags/remove-a-tag-from-a-file
/api-reference/openapi-v3.yaml delete /api/v3/files/{id}/tags/{tag_id}
Remove a specific tag from a file.
**Behavior:**
- Removes the specified tag from the document
- Works for both manually assigned and auto-assigned tags
- Idempotent: returns 204 even if tag was not on the document
**Validation:**
- Returns 403 if user doesn't have permission to edit the document
- Returns 404 if document doesn't exist
- Returns 404 if tag doesn't exist or doesn't belong to user's company
# Create a conversation thread
Source: https://docs.lighton.ai/api-reference-v3/threads/create-a-conversation-thread
/api-reference/openapi-v3.yaml post /api/v3/threads
Create a new conversation thread.
Note: `chat_setting_id` has been deprecated, now use `agent_id` instead, `chat_settings_id` is still supported for back-compatibility purposes. If no `agent_id` nor `chat_setting_id` is provided, the default agent for the company is used.
# Create a conversation thread with initial turn
Source: https://docs.lighton.ai/api-reference-v3/threads/create-a-conversation-thread-with-initial-turn
/api-reference/openapi-v3.yaml post /api/v3/threads/turns
Create a new thread and immediately ask a query in a single request.
This endpoint combines thread creation and turn creation to reduce round trips.
Supports synchronous and background processing modes. Streaming is not supported.If you need to use streaming mode then directly use the endpoint to create a turn within a thread
Note: `chat_setting_id` has been deprecated, now use `agent_id` instead, `chat_settings_id` is still supported for back-compatibility purposes. If no `agent_id` nor `chat_setting_id` is provided, the default agent for the company is used.
# Create a conversation turn in a thread
Source: https://docs.lighton.ai/api-reference-v3/threads/create-a-conversation-turn-in-a-thread
/api-reference/openapi-v3.yaml post /api/v3/threads/{id}/turns
Ask a query to the agent.
Behaviour:
- Returns 200 with the final answer when the task completes quickly within the request.
- Returns 202 Accepted with the current answer payload when processing continues in the background;
clients should poll the turn status or subscribe to updates until completion.
- If `stream=true`, the endpoint responds with Server-Sent Events (SSE) and streams tokens/events
until completion (content-type: text/event-stream).
- If `background=true`, the endpoint enqueues processing and returns the created answer immediately.
# Delete a conversation thread
Source: https://docs.lighton.ai/api-reference-v3/threads/delete-a-conversation-thread
/api-reference/openapi-v3.yaml delete /api/v3/threads/{id}
Delete a thread by ID.
# Get suggested queries for a conversation thread
Source: https://docs.lighton.ai/api-reference-v3/threads/get-suggested-queries-for-a-conversation-thread
/api-reference/openapi-v3.yaml get /api/v3/threads/{id}/suggested_queries
Get AI-generated suggested follow-up queries for a thread.
# List conversation threads
Source: https://docs.lighton.ai/api-reference-v3/threads/list-conversation-threads
/api-reference/openapi-v3.yaml get /api/v3/threads
List conversation threads for the authenticated user with cursor-based pagination.
# List conversation turns in a thread
Source: https://docs.lighton.ai/api-reference-v3/threads/list-conversation-turns-in-a-thread
/api-reference/openapi-v3.yaml get /api/v3/threads/{id}/turns
List all turns (answers) for a thread with cursor-based pagination.
# Resume a turn generation
Source: https://docs.lighton.ai/api-reference-v3/threads/resume-a-turn-generation
/api-reference/openapi-v3.yaml get /api/v3/threads/{id}/resume
Resume streaming the last turn of a thread.
# Retrieve a conversation thread
Source: https://docs.lighton.ai/api-reference-v3/threads/retrieve-a-conversation-thread
/api-reference/openapi-v3.yaml get /api/v3/threads/{id}
Get a thread by ID.
# Update a conversation thread
Source: https://docs.lighton.ai/api-reference-v3/threads/update-a-conversation-thread
/api-reference/openapi-v3.yaml patch /api/v3/threads/{id}
Update a thread by ID. Use query parameters 'anonymize=true' to anonymize an ephemeral thread or 'cancel=true' to cancel the current turn processing.
# Update a conversation turn in a thread
Source: https://docs.lighton.ai/api-reference-v3/threads/update-a-conversation-turn-in-a-thread
/api-reference/openapi-v3.yaml patch /api/v3/threads/{id}/turns/{turn_id}
Update a turn by ID. Use query parameter 'action' to specify the action: 'like_dislike' to send like/dislike feedback, 'copied' to mark as copied, or 'flag' to create a flag.
# List native tools
Source: https://docs.lighton.ai/api-reference-v3/tools/list-native-tools
/api-reference/openapi-v3.yaml get /api/v3/tools
Returns native tools available to the authenticated user's company. If the company has no tool restrictions configured, all native tools are returned. Sys-admins can pass `company_id` to inspect another company's allowed tools.
# Create a user group
Source: https://docs.lighton.ai/api-reference-v3/user-groups/create-a-user-group
/api-reference/openapi-v3.yaml post /api/v3/groups
This endpoint allows company admins to create a new user group.
SysAdmin/instance-level users can specify company_id to create groups in any company.
Regular company admins can only create groups in their own company.
# Delete group of users
Source: https://docs.lighton.ai/api-reference-v3/user-groups/delete-group-of-users
/api-reference/openapi-v3.yaml delete /api/v3/groups/{id}
Delete a group of usersNote that if the users group could not be deleted because of protected dependencies,
these dependencies will be list.
# Fully update a group (PUT)
Source: https://docs.lighton.ai/api-reference-v3/user-groups/fully-update-a-group-put
/api-reference/openapi-v3.yaml put /api/v3/groups/{id}
This endpoint allows updating a group's name and description.
PUT requires all fields to be provided.
Access levels:
- Admin/Sys Admin/Account Manager: Can update any group
- Company Admin: Can update groups in their company
Group name must be unique within the company.
# Get group details
Source: https://docs.lighton.ai/api-reference-v3/user-groups/get-group-details
/api-reference/openapi-v3.yaml get /api/v3/groups/{id}
This endpoint allows users to retrieve details of a specific group.
Access levels:
- Admin/Sys Admin/Account Manager: Can view any group across companies
- Admin DPO: Read-only access to any group across companies
- Company Admin: Can view groups in their company
- Company DPO: Read-only access to groups in their company
- Group members: Can view groups they are members of
Returns group details including assigned workspaces.
# List user groups
Source: https://docs.lighton.ai/api-reference-v3/user-groups/list-user-groups
/api-reference/openapi-v3.yaml get /api/v3/groups
This endpoint allows users to list groups based on their permissions.
Access levels:
- Admin/Sys Admin/Account Manager: Can view all groups across companies
- Admin DPO: Read-only access to all groups across companies
- Company Admin: Can view all groups in their company
- Company DPO: Read-only access to groups in their company
- Group members: Read-only access to groups they are members of in their company
The `has_role` filter can be combined with `user_id` to return only groups where the specified user has a particular role (e.g. `owner`). It has no effect without `user_id`.
Supports pagination and search functionality.
# Partially update a group (PATCH)
Source: https://docs.lighton.ai/api-reference-v3/user-groups/partially-update-a-group-patch
/api-reference/openapi-v3.yaml patch /api/v3/groups/{id}
This endpoint allows partially updating a group's name or description.
PATCH allows updating only the fields you want to change.
Access levels:
- Admin/Sys Admin/Account Manager: Can update any group
- Company Admin: Can update groups in their company
Group name must be unique within the company.
# Create a new company member
Source: https://docs.lighton.ai/api-reference-v3/users/create-a-new-company-member
/api-reference/openapi-v3.yaml post /api/v3/users
This endpoint allows to create a new company member.
**Permissions:**
- Admin, SysAdmin, Account Manager: can create users for any company
- Company Admin: can create users for their own company
**Throttling:** 60 requests per minute
It is API Key protected and restricted to users with appropriate permissions.
# Delete a company member
Source: https://docs.lighton.ai/api-reference-v3/users/delete-a-company-member
/api-reference/openapi-v3.yaml delete /api/v3/users/{id}
This endpoint allows to delete a specific company member by ID.
**Permissions:**
- Admin, SysAdmin, Account Manager: can delete any user except themselves
- Company Admin: can delete users from their own company except themselves
**Throttling:** 60 requests per minute
It is API Key protected and restricted to users with appropriate permissions.
# Get current user profile
Source: https://docs.lighton.ai/api-reference-v3/users/get-current-user-profile
/api-reference/openapi-v3.yaml get /api/v3/users/me
Returns information on the authenticated user including:
- Profile: id, username, full_name, email
- Permissions: admin access, document management, API key management, monitoring permission
- Settings: language preference, help step preference
- Compliance: terms acceptance status
- Company: id, name, login_method
- Group memberships: list of groups the user belongs to, with their role (owner/member) in each
# List company members
Source: https://docs.lighton.ai/api-reference-v3/users/list-company-members
/api-reference/openapi-v3.yaml get /api/v3/users
This endpoint allows to list company members.
**Permissions:**
- Admin, SysAdmin, SysDPO, Account Manager: can view all users (optionally filter by company_id)
- Company Admin, Company DPO: can view users from their own company
**Query Parameters:**
- `company_id` (optional): Filter by company (SysAdmin, SysDPO, Account Manager only)
- `group_id` (optional): Filter by group ID (users must be members of the specified group)
- `is_active` (optional): Filter by active status
**Throttling:** 100 requests per minute
It is API Key protected and restricted to users with appropriate permissions.
# List roles of a company member
Source: https://docs.lighton.ai/api-reference-v3/users/list-roles-of-a-company-member
/api-reference/openapi-v3.yaml get /api/v3/users/{id}/roles
This endpoint allows you to list the roles of a company member.
It is restricted to admin and company admin users.
# Partially update a company member
Source: https://docs.lighton.ai/api-reference-v3/users/partially-update-a-company-member
/api-reference/openapi-v3.yaml patch /api/v3/users/{id}
This endpoint allows to update a specific company member by ID.
**PUT:** Requires all fields (first_name, last_name, account_expiration_date, language).
**PATCH:** Allows partial updates - only provide the fields you want to change.
**Permissions:**
- Admin, SysAdmin, Account Manager: can update any user
- Company Admin: can update users from their own company only
**Throttling:** 60 requests per minute
It is API Key protected and restricted to users with appropriate permissions.
# Retrieve a company member
Source: https://docs.lighton.ai/api-reference-v3/users/retrieve-a-company-member
/api-reference/openapi-v3.yaml get /api/v3/users/{id}
This endpoint allows to retrieve a specific company member by ID.
**Permissions:**
- Admin, SysAdmin, SysDPO, Account Manager: can retrieve any user
- Company Admin, Company DPO: can retrieve users from their own company only
**Throttling:** 100 requests per minute
It is API Key protected and restricted to users with appropriate permissions.
# Update a company member
Source: https://docs.lighton.ai/api-reference-v3/users/update-a-company-member
/api-reference/openapi-v3.yaml put /api/v3/users/{id}
This endpoint allows to update a specific company member by ID.
**PUT:** Requires all fields (first_name, last_name, account_expiration_date, language).
**PATCH:** Allows partial updates - only provide the fields you want to change.
**Permissions:**
- Admin, SysAdmin, Account Manager: can update any user
- Company Admin: can update users from their own company only
**Throttling:** 60 requests per minute
It is API Key protected and restricted to users with appropriate permissions.
# Update current user profile
Source: https://docs.lighton.ai/api-reference-v3/users/update-current-user-profile
/api-reference/openapi-v3.yaml patch /api/v3/users/me
Updates settings for the authenticated user.
**Updatable fields:**
- `language`: User's preferred language
- `skip_help_step`: Whether to skip help steps in the UI
- `agent_instructions`: Custom instructions for AI agents
- `terms_accepted`: Accept the latest terms and conditions (can only be set to true)
**Note:** Setting `terms_accepted` to false will result in a 400 error.
# Update roles of a company member
Source: https://docs.lighton.ai/api-reference-v3/users/update-roles-of-a-company-member
/api-reference/openapi-v3.yaml put /api/v3/users/{id}/roles
This endpoint allows you to update the roles of a company member.
Note that this will update all the roles of the member.
It is restricted to admin and company admin users.
# Add a member to a workspace
Source: https://docs.lighton.ai/api-reference-v3/workspaces/add-a-member-to-a-workspace
/api-reference/openapi-v3.yaml post /api/v3/workspaces/{id}/members
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Add a new member (user or group) to a custom workspace you own.
# Create a workspace
Source: https://docs.lighton.ai/api-reference-v3/workspaces/create-a-workspace
/api-reference/openapi-v3.yaml post /api/v3/workspaces
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Create a new custom workspace in the authenticated user's company. Requires the company to have `allow_user_workspace_creation` enabled. Returns **403** if workspace creation is disabled for the company.
The creator is automatically added as OWNER.
# Delete a workspace (deprecated)
Source: https://docs.lighton.ai/api-reference-v3/workspaces/delete-a-workspace-deprecated
/api-reference/openapi-v3.yaml delete /api/v3/workspaces/{id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
**Deprecated.** This endpoint has been removed. Please delete the workspace from the admin panel.
# List workspace members
Source: https://docs.lighton.ai/api-reference-v3/workspaces/list-workspace-members
/api-reference/openapi-v3.yaml get /api/v3/workspaces/{id}/members
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Get the list of members for an owned workspace by the authenticated user.
Please use instance or company level endpoints to access the workspaces as admin
# List workspaces
Source: https://docs.lighton.ai/api-reference-v3/workspaces/list-workspaces
/api-reference/openapi-v3.yaml get /api/v3/workspaces
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Get the list of accessible workspaces for the authenticated user. Returns workspaces where the user is set as member (through any group: private, company, or custom). Please use instance or company level endpoints to access the workspaces as admin.
**Filtering:** All users see only workspaces where they are members. Admin users should use `/api/v3/instance/workspaces` or `/api/v3/company/workspaces` for administrative access.
Results ordered by creation date (newest first), paginated with 20 elements per page by default.
# Remove a group from a custom workspace
Source: https://docs.lighton.ai/api-reference-v3/workspaces/remove-a-group-from-a-custom-workspace
/api-reference/openapi-v3.yaml delete /api/v3/workspaces/{id}/members/groups/{group_id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Remove a group from a custom workspace you own. The authenticated user must be an owner of the workspace and belong to the same company as the workspace. Only CUSTOM workspaces allow group removal. Cannot remove the only remaining owner group from the workspace.
# Remove a user from a workspace
Source: https://docs.lighton.ai/api-reference-v3/workspaces/remove-a-user-from-a-workspace
/api-reference/openapi-v3.yaml delete /api/v3/workspaces/{id}/members/users/{user_id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Remove a user from a custom workspace you own. The authenticated user must be an owner of the workspace and belong to the same company as the workspace.
# Replace all workspace members
Source: https://docs.lighton.ai/api-reference-v3/workspaces/replace-all-workspace-members
/api-reference/openapi-v3.yaml put /api/v3/workspaces/{id}/members
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Bulk replace the entire list of members for a custom workspace you own. The authenticated user must be an owner of the workspace and belong to the same company as the workspace. All given users and groups must belong to the same company as the workspace.
# Retrieve a workspace
Source: https://docs.lighton.ai/api-reference-v3/workspaces/retrieve-a-workspace
/api-reference/openapi-v3.yaml get /api/v3/workspaces/{id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Retrieve a workspace by ID. Returns workspace in V3 format.
**Access:** Instance-level users (Sys Admin, Account Manager, Admin, DPO Admin) can retrieve any workspace. Company-level users (Company Admin, Company DPO) can retrieve workspaces in their company. Regular users can retrieve workspaces where they are members.
**Member Visibility:** Instance-level users and company-level users see all members. Workspace OWNER sees members. EDITOR and VIEWER do not see members.
Returns 403 for both non-existent and unauthorized workspaces.
# Update a workspace
Source: https://docs.lighton.ai/api-reference-v3/workspaces/update-a-workspace
/api-reference/openapi-v3.yaml patch /api/v3/workspaces/{id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Partially update a given workspace. The authenticated user must be an owner of the workspace.
**Fields:**
- **name** (string, optional): Desired workspace name (max 100 characters, cannot be empty)
- **description** (string, optional): Desired workspace description. Send empty string or null to clear.
**Restrictions:**
- Only CUSTOM workspaces can be updated (PERSONAL and COMPANY workspaces cannot be modified)
- Only workspace OWNER can update (EDITOR role, instance admins, and company admins cannot use this endpoint)
- Only name and description can be updated (members cannot be updated via this endpoint)
**Note:** To update workspace members, use the dedicated member management endpoints.
# Delete a document
Source: https://docs.lighton.ai/en/developer-resources/files/delete-document
The files API endpoint can be used to delete an uploaded document from Paradigm.
## Prerequisites
* A **Paradigm API key**: if you do not have one, go to your Paradigm profile (`/settings/api-key` in your instance) and generate a new API key.
* The desired **document ID to delete**: You can use the listing method to get the list of uploaded documents and be able to know the ID of the document you want to delete.
## Usage methods
There are several ways to call the endpoint:
1. With the **python `requests` package**
2. Through a **curl request**: for quick testing or first-time use
## Python `requests` package
You can send request to the API endpoint through the `requests` package.
```python theme={null}
import requests
import os
# Get API key and base URL from environment
api_key = os.getenv("PARADIGM_API_KEY")
base_url = os.getenv("PARADIGM_BASE_URL", "https://paradigm.lighton.ai/api/v2")
# File ID to delete
file_id = 1
response = requests.request(
method="DELETE",
url=f"{base_url}/files/{file_id}",
headers={
'Authorization': f"Bearer {api_key}"
}
)
print(response.json())
```
You would then get a JSON answer as a dictionary:
```json theme={null}
{
"id": 1,
"deleted": true
}
```
## cURL request
If you would prefer sending a request to Paradigm with a simple cURL command, here is an example:
```shell theme={null}
curl --request DELETE \
--url $PARADIGM_BASE_URL/files/1 \
--header "Authorization: Bearer $PARADIGM_API_KEY"
```
# Document search with Paradigm
Source: https://docs.lighton.ai/en/developer-resources/files/document-search
RAG requests can be 100% done through the Paradigm API. It allows users to submit a query, which the system processes to provide relevant answers by leveraging associated documents or going through the whole knowledge base.
Search through your uploaded documents using natural language queries. The system uses RAG (Retrieval-Augmented Generation) to find relevant content and generate contextual answers based on your document library.
**This endpoint is useful for:**
* **Searching content across multiple documents and scopes.**
* **Integrating document search into chat-based workflows.**
* **Enabling contextual and scoped responses using specific file or workspace data.**
Starting from the **Victorious Vicuna** release (January 2026) and later, using the [Agent API](/en/developer-resources/chat-and-ai-models/agent-api) is the preferred way of achieving this task.
## Prerequisites
* A **Paradigm API key**: if you do not have one, go to your Paradigm profile (`/settings/api-key` in your instance) and generate a new API key.
* **Uploaded documents**: You need documents in your Paradigm instance to search through. See [Add a document](/en/developer-resources/files/add-document) for upload instructions.
## Example API Request
Example of API request using the *requests* package:
For more info : See the [Agent API](/en/developer-resources/chat-and-ai-models/agent-api) documentation
```python expandable wrap theme={null}
import requests
import os
# Get API key and base URL from environment
api_key = os.getenv("PARADIGM_API_KEY")
base_url = os.getenv("PARADIGM_BASE_URL", "https://paradigm.lighton.ai/api/v3")
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
payload = {
"chat_setting_id": 1,
"ml_model": "alfred-ft5",
"query": "How do we sign an NDA at Lighton ?",
"force_tool": "document_search"
# Optional parameters (if not filled, same as UI search)
# "file_ids": ["abc123-file-id"],
# "workspace_ids": [],
# "tag_ids": []
}
response = requests.post(f"{base_url}/threads/turns", headers=headers, json=payload)
if response.status_code == 200:
data = response.json()
print("Answer:", data["answer"])
else:
print("Error:", response.status_code, response.text)
```
# Get the list of uploaded documents
Source: https://docs.lighton.ai/en/developer-resources/files/list-documents
This guide explains how to retrieve and search through uploaded documents in Paradigm using the v3 API.
Retrieve a paginated list of all documents you have access to in your Paradigm instance. This endpoint supports advanced filtering, semantic search, and flexible pagination.
## Prerequisites
* A **Paradigm API key**: if you do not have one, go to your Paradigm profile and generate a new API key.
* **Access to documents**: You need appropriate permissions to view documents in your instance.
## Basic Usage
```python theme={null}
import requests
import os
api_key = os.getenv("PARADIGM_API_KEY")
base_url = os.getenv("PARADIGM_BASE_URL", "https://paradigm.lighton.ai/api/v3")
response = requests.get(
url=f"{base_url}/files",
headers={'Authorization': f"Bearer {api_key}"},
)
print(response.json())
```
## Response Format
```json theme={null}
{
"next": "https://paradigm.lighton.ai/api/v3/files?page=2",
"previous": null,
"count": 42,
"results": [
{
"id": 123,
"filename": "report.pdf",
"workspace_id": 5,
"title": "Q4 Financial Report",
"extension": "pdf",
"status": "embedded",
"status_vision": "embedded",
"uploaded_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:35:00Z",
"total_pages": 24
}
]
}
```
## Pagination & Limits
* **Page size**: 20 documents per page (fixed)
* **`max_documents`**: Total documents to return (1-500, default: 50)
* **`page`**: Navigate through paginated results
## Available Filters
All filters are documented in the Swagger/OpenAPI specification. Key filters include:
| Filter | Description |
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `workspace_id` | Comma-separated workspace IDs |
| `extension` | Comma-separated file extensions (e.g., `pdf,docx`) |
| `status`, `status_vision` | Embedding status values (complete value list :
[https://paradigm.lighton.ai/api/v3/docs/#/Files/api\_v3\_files\_list](https://paradigm-dev.lighton.ai/api/v3/docs/#/Files/api_v3_files_list) ) |
| `title`, `filename` | Partial match (case-insensitive) |
| `uploaded_at_after/before` | Date range for upload time |
| `updated_at_after/before` | Date range for last update |
| `total_pages_min/max` | Page count range |
| `tag_id` | Comma-separated tag IDs |
## Search
The `search` parameter enables intelligent document discovery using hybrid search. When provided, results are **ordered by relevance** instead of upload date.
```python theme={null}
response = requests.get(
url=f"{base_url}/files",
headers={'Authorization': f"Bearer {api_key}"},
params={
"search": "machine learning best practices",
"max_documents": 20
}
)
```
### How it Works
The DocFinder service uses a hybrid ranking approach that incorporates both semantic and lexical signals to find and rank relevant documents.
Filters are applied before the search, allowing you to search within a specific subset of documents.
## cURL
```shell theme={null}
curl --request GET \
--url "$PARADIGM_BASE_URL/files?search=financial%20report&extension=pdf" \
--header "Authorization: Bearer $PARADIGM_API_KEY"
```
# Content Generator - HR Example
Source: https://docs.lighton.ai/en/use-cases/ads
Example: Generate professional job offer advertisements from job specifications.
**Last updated: April 2026** — The Paradigm API evolves fast. Always check the [latest API reference](/en/developer-resources/api-fundamentals/quick-guide) and prefer more recent cookbook entries when available.
## Overview
The content generator module uses AI to generate attractive, professional job advertisements based on job specifications you provide. It takes basic job information and produces a complete, formatted job posting ready for publication.
This case is an example, feel free to replicate it for any type of content generation.
**Use Case**: Quickly create job postings for recruitment platforms, company career pages, or job boards.
**Note**
The examples in this documentation use a local Flask web server. Be aware of this if you want to deploy to production.
This example was created using an HTML frontend that sends the variables to the backend.
## How It Works
1. The user logs in to the front-end interface.
2. The user provides the job information (title, department, experience, salary, etc.).
3. The system uses a structured prompt with the job-post template + the variables provided by the user.
4. The LLM generates a complete job posting.
5. The formatted job post in the requested language is displayed on the front end.
## API Endpoints Used
| Endpoint | Purpose |
| ------------------------ | -------------------------- |
| `POST /chat/completions` | Generate job advertisement |
**Note**: This module uses Chat Completions (pure text generation) without documents.
## Step-by-Step Implementation
### Step 1: Initialize the Service
```python theme={null}
import requests
from typing import Dict, Any, List
class AdsService:
def __init__(self, api_key: str):
self.api_key = api_key
self.headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
# API configuration
self.chat_url = "https://paradigm.lighton.ai/api/v2/chat/completions"
self.model = "alfred-ft5"
self.max_tokens = 2000
self.temperature = 0.7 # Creative but consistent
```
### Step 2: Create the Generation Prompt
```python theme={null}
def _create_prompt(self, job_data: Dict[str, Any]) -> str:
"""
Create prompt for job ad generation.
Args:
job_data: Dictionary containing job information
Returns:
Formatted prompt string
"""
# Extract job data
job_title = job_data.get('jobTitle', '')
department = job_data.get('department', '')
contract_type = job_data.get('contractType', '')
experience = job_data.get('experience', '')
salary_min = job_data.get('salaryMin', '')
salary_max = job_data.get('salaryMax', '')
benefits = job_data.get('benefits', [])
job_description = job_data.get('jobDescription', '')
language = job_data.get('language', 'English')
# Job ad template
template = """
**[JOB TITLE]**
**Department: [DEPARTMENT]**
**Contract: [CONTRACT_TYPE]**
**Experience: [EXPERIENCE]**
**Salary: [SALARY_RANGE]**
**Job Description:**
[Detailed and engaging description of the position]
**Key Responsibilities:**
- [Responsibility 1]
- [Responsibility 2]
- [Responsibility 3]
**Required Qualifications:**
- [Qualification 1]
- [Qualification 2]
- [Qualification 3]
**Benefits & Perks:**
[List of benefits]
**Why Join Us:**
[Compelling reasons to join]
**How to Apply:**
[Call to action]
"""
# Build the prompt
prompt = f"""You are a professional job offer generator. Use this template:
TEMPLATE:
{template}
JOB INFORMATION:
- Job Title: {job_title}
- Department: {department}
- Contract Type: {contract_type}
- Experience Level: {experience}"""
if salary_min and salary_max:
prompt += f"\n- Salary Range: {salary_min}€ - {salary_max}€"
elif salary_min:
prompt += f"\n- Minimum Salary: {salary_min}€"
if benefits:
prompt += f"\n- Benefits: {', '.join(benefits)}"
if job_description:
prompt += f"\n- Additional Context: {job_description}"
prompt += f"""
INSTRUCTIONS:
1. Write the entire job ad in {language}
2. Translate ALL section titles to {language}
3. Replace all [PLACEHOLDERS] with actual information
4. Create an engaging and attractive job posting
5. Use a professional yet warm tone
6. Emphasize career growth and company culture
7. End with a compelling call to action
Generate the complete job offer in {language}:"""
return prompt
```
### Step 3: Generate Job Advertisement
```python theme={null}
def generate_job_ad(self, job_data: Dict[str, Any]) -> str:
"""
Generate a job offer advertisement.
Args:
job_data: Dictionary containing:
- jobTitle: Job title (required)
- department: Department name (required)
- contractType: Contract type (required)
- experience: Experience level (required)
- salaryMin: Minimum salary (optional)
- salaryMax: Maximum salary (optional)
- benefits: List of benefits (optional)
- jobDescription: Additional context (optional)
- language: Output language (default: English)
Returns:
Generated job advertisement as string
"""
# Validate required fields
is_valid, error = self.validate_job_data(job_data)
if not is_valid:
raise ValueError(error)
# Create prompt
prompt = self._create_prompt(job_data)
payload = {
"model": self.model,
"messages": [
{"role": "user", "content": prompt}
],
"max_tokens": self.max_tokens,
"temperature": self.temperature
}
try:
response = requests.post(
self.chat_url,
headers=self.headers,
json=payload,
timeout=150
)
if response.status_code == 200:
data = response.json()
if "choices" in data and data["choices"]:
return data["choices"][0]["message"]["content"]
else:
return self._generate_fallback_ad(job_data)
else:
return self._generate_fallback_ad(job_data)
except Exception as e:
return self._generate_fallback_ad(job_data)
```
### Step 4: Validate Input Data
```python theme={null}
def validate_job_data(self, data: Dict[str, Any]) -> tuple:
"""
Validate job data before generation.
Args:
data: Job data to validate
Returns:
Tuple of (is_valid, error_message)
"""
required_fields = ['jobTitle', 'department', 'contractType', 'experience']
for field in required_fields:
if not data.get(field):
return False, f'The field {field} is required'
# Validate salary
if data.get('salaryMin'):
try:
salary_min = float(data['salaryMin'])
if salary_min < 0:
return False, 'Minimum salary must be >= 0'
except ValueError:
return False, 'Minimum salary must be a valid number'
if data.get('salaryMax'):
try:
salary_max = float(data['salaryMax'])
if salary_max < 0:
return False, 'Maximum salary must be >= 0'
if data.get('salaryMin'):
if salary_max < float(data['salaryMin']):
return False, 'Maximum salary must be > minimum salary'
except ValueError:
return False, 'Maximum salary must be a valid number'
return True, ""
```
### Step 5: Fallback Generator
```python theme={null}
def _generate_fallback_ad(self, job_data: Dict[str, Any]) -> str:
"""Generate fallback ad when API fails."""
job_title = job_data.get('jobTitle', 'Position')
department = job_data.get('department', 'General')
contract_type = job_data.get('contractType', 'Full-time')
experience = job_data.get('experience', 'Not specified')
salary_min = job_data.get('salaryMin', '')
salary_max = job_data.get('salaryMax', '')
benefits = job_data.get('benefits', [])
# Format salary
salary_range = ""
if salary_min and salary_max:
salary_range = f"{int(float(salary_min)):,}€ - {int(float(salary_max)):,}€"
elif salary_min:
salary_range = f"From {int(float(salary_min)):,}€"
ad = f"""**{job_title}**
**Department:** {department}
**Contract Type:** {contract_type}
**Experience Level:** {experience}"""
if salary_range:
ad += f"\n**Salary:** {salary_range}"
ad += f"""
**Job Description:**
We are seeking a talented professional for our {job_title} position in the {department} department.
**Key Responsibilities:**
- Lead and execute key initiatives
- Collaborate with cross-functional teams
- Drive innovation and continuous improvement
**Required Qualifications:**
- {experience} of relevant experience
- Strong problem-solving skills
- Excellent communication abilities"""
if benefits:
ad += "\n\n**Benefits & Perks:**"
for benefit in benefits:
ad += f"\n- {benefit}"
ad += """
**Why Join Us:**
- Work on impactful projects
- Collaborative work environment
- Professional development opportunities
**How to Apply:**
Submit your application and join our team!"""
return ad
```
## Complete Usage Example
```python theme={null}
# Initialize service
ads = AdsService(api_key="your-api-key")
# Define job data
job_data = {
'jobTitle': 'Senior Software Engineer',
'department': 'Engineering',
'contractType': 'CDI', # Permanent contract
'experience': '5+ years',
'salaryMin': '55000',
'salaryMax': '75000',
'benefits': [
'Remote work options',
'Health insurance',
'Stock options',
'25 days vacation',
'Learning budget'
],
'jobDescription': 'Join our AI team to build next-generation NLP products. You will work on cutting-edge language models and help shape our technical roadmap.',
'language': 'English'
}
# Generate the job ad
job_ad = ads.generate_job_ad(job_data)
print(job_ad)
# Generate in French
job_data['language'] = 'French'
job_ad_fr = ads.generate_job_ad(job_data)
print("\n--- French Version ---\n")
print(job_ad_fr)
```
## Flask Route Integration
```python theme={null}
from flask import Blueprint, request, jsonify
ads_bp = Blueprint('ads', __name__)
ads_service = None
def init_ads_service(api_key: str):
global ads_service
ads_service = AdsService(api_key)
@ads_bp.route('/generate', methods=['POST'])
def generate_ad():
"""Generate a job advertisement."""
data = request.json
# Validate
is_valid, error = ads_service.validate_job_data(data)
if not is_valid:
return jsonify({'error': error}), 400
# Generate
job_ad = ads_service.generate_job_ad(data)
return jsonify({
'ad': job_ad,
'status': 'success'
})
@ads_bp.route('/validate', methods=['POST'])
def validate():
"""Validate job data before generation."""
data = request.json
is_valid, error = ads_service.validate_job_data(data)
return jsonify({
'valid': is_valid,
'error': error if not is_valid else None
})
```
## Input Parameters
| Parameter | Type | Required | Description |
| ---------------- | ------ | -------- | ---------------------------------- |
| `jobTitle` | string | Yes | Job title |
| `department` | string | Yes | Department name |
| `contractType` | string | Yes | Contract type (CDI, CDD, etc.) |
| `experience` | string | Yes | Experience level |
| `salaryMin` | string | No | Minimum salary |
| `salaryMax` | string | No | Maximum salary |
| `benefits` | array | No | List of benefits |
| `jobDescription` | string | No | Additional context |
| `language` | string | No | Output language (default: English) |
## Best Practices
1. **Provide detailed context** in jobDescription for better results
2. **List specific benefits** to make the ad more attractive
3. **Use appropriate language** for your target audience
4. **Review generated content** before publishing
5. **Customize the template** for your company's brand voice
# Chatbot
Source: https://docs.lighton.ai/en/use-cases/chatbot
A conversational chatbot with document context from a dedicated workspace.
**Last updated: April 2026** — The Paradigm API evolves fast. Always check the [latest API reference](/en/developer-resources/api-fundamentals/quick-guide) and prefer more recent cookbook entries when available.
## Overview
The Chatbot module provides a Q\&A interface that answers user questions using documents stored in a dedicated workspace. It combines conversational AI with RAG (Retrieval-Augmented Generation) to provide accurate, document-based answers.
You can also send context to the chatbot using a backend prompt. For example adding variables from your datalake to add context about the user using the chatbot.
**Use Case**: Build a chatbot that answers questions based on your company's knowledge base (policies, FAQs, product documentation, etc.)
**Note:**
The examples in this documentation use a local Flask web server. Be aware of this if you want to deploy to production.
This example was created using an HTML frontend that sends the variables to the backend.
## How It Works
1. User sends a message
2. System builds context from conversation history
3. Query is sent to the Document Search API targeting the chatbot workspace
4. LLM generates answer based on relevant document content
5. Conversation is stored for context in future messages
## API Endpoints Used
| Endpoint | Purpose |
| ---------------------------- | ------------------------------------ |
| `POST /chat/document-search` | Query documents and generate answers |
## Step-by-Step Implementation
### Step 1: Initialize the Service
```python theme={null}
import requests
from typing import Dict, Any, Optional, List
class ChatbotService:
def __init__(self, api_key: str):
self.api_key = api_key
self.headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
self.conversations = {} # In-memory conversation storage
# Configuration
self.document_search_url = "https://paradigm.lighton.ai/api/v2/chat/document-search"
self.workspace_id = 250 # Your chatbot workspace ID
self.model = "alfred-ft5"
```
### Step 2: Build Conversation Context
```python theme={null}
def _build_context(
self,
message: str,
conversation_id: Optional[str],
system_prompt: Optional[str]
) -> str:
"""Build query context from conversation history."""
context = ""
# Add system prompt if provided
if system_prompt:
context += f"{system_prompt}\n\n"
# Add conversation history if exists
if conversation_id and conversation_id in self.conversations:
context += "Previous conversation:\n"
for msg in self.conversations[conversation_id]:
role = msg["role"].capitalize()
content = msg["content"]
context += f"{role}: {content}\n"
context += "\n"
return context
```
### Step 3: Send Chat Message
```python theme={null}
def chat(
self,
message: str,
conversation_id: Optional[str] = None,
system_prompt: Optional[str] = None,
temperature: float = 0.7
) -> Dict[str, Any]:
"""
Send chat message and get response using document search.
Args:
message: User's question
conversation_id: Optional ID for conversation continuity
system_prompt: Optional instructions for the assistant
temperature: Response creativity (0.0-1.0)
Returns:
Response with answer and conversation_id
"""
# Build context from history
context = self._build_context(message, conversation_id, system_prompt)
# Build the query
query = f"{context}Current question: {message}"
# Prepare payload for Document Search
payload = {
"model": self.model,
"query": query,
"workspace_ids": [self.workspace_id],
"company_scope": False,
"private_scope": False,
"tool": "DocumentSearch"
}
# Make API call
response = requests.post(
self.document_search_url,
headers=self.headers,
json=payload,
timeout=150
)
if response.status_code == 200:
data = response.json()
assistant_message = data.get("answer", "")
# Generate conversation ID if not provided
if not conversation_id:
import uuid
conversation_id = str(uuid.uuid4())
self.conversations[conversation_id] = []
# Store conversation history
if conversation_id in self.conversations:
self.conversations[conversation_id].append({
"role": "user",
"content": message
})
self.conversations[conversation_id].append({
"role": "assistant",
"content": assistant_message
})
return {
'response': assistant_message,
'conversation_id': conversation_id,
'status': 'success',
'workspace_id': self.workspace_id
}
else:
raise Exception(f"Document search failed: {response.text}")
```
### Step 4: Manage Conversation History
```python theme={null}
def get_conversation_history(self, conversation_id: str) -> List[Dict[str, str]]:
"""Get conversation history for a given ID."""
if conversation_id not in self.conversations:
raise ValueError(f"Conversation {conversation_id} not found")
return self.conversations[conversation_id]
def clear_conversation(self, conversation_id: str) -> bool:
"""Clear conversation history."""
if conversation_id in self.conversations:
del self.conversations[conversation_id]
return True
return False
```
## Complete Usage Example
```python theme={null}
# Initialize chatbot
chatbot = ChatbotService(api_key="your-api-key")
# System prompt for the chatbot
system_prompt = """You are a helpful IT support assistant.
Answer questions based on the company's IT documentation.
Be concise and provide step-by-step instructions when relevant."""
# First message - starts new conversation
result = chatbot.chat(
message="How do I reset my password?",
system_prompt=system_prompt
)
print(f"Assistant: {result['response']}")
conversation_id = result['conversation_id']
# Follow-up message - uses conversation context
result = chatbot.chat(
message="What if I don't receive the reset email?",
conversation_id=conversation_id,
system_prompt=system_prompt
)
print(f"Assistant: {result['response']}")
# Get full conversation history
history = chatbot.get_conversation_history(conversation_id)
for msg in history:
print(f"{msg['role'].upper()}: {msg['content']}")
# Clear conversation when done
chatbot.clear_conversation(conversation_id)
```
## Flask Route Integration
```python theme={null}
from flask import Blueprint, request, jsonify
chatbot_bp = Blueprint('chatbot', __name__)
chatbot_service = None
def init_chatbot_service(api_key: str):
global chatbot_service
chatbot_service = ChatbotService(api_key)
@chatbot_bp.route('/chat', methods=['POST'])
def chat():
"""Chat endpoint."""
data = request.json
message = data.get('message')
conversation_id = data.get('conversation_id')
system_prompt = data.get('system_prompt')
if not message:
return jsonify({'error': 'Message is required'}), 400
try:
result = chatbot_service.chat(
message=message,
conversation_id=conversation_id,
system_prompt=system_prompt
)
return jsonify(result)
except Exception as e:
return jsonify({'error': str(e)}), 500
@chatbot_bp.route('/conversation/', methods=['GET'])
def get_history(conversation_id):
"""Get conversation history."""
try:
history = chatbot_service.get_conversation_history(conversation_id)
return jsonify({'history': history})
except ValueError as e:
return jsonify({'error': str(e)}), 404
@chatbot_bp.route('/conversation/', methods=['DELETE'])
def clear_history(conversation_id):
"""Clear conversation history."""
result = chatbot_service.clear_conversation(conversation_id)
return jsonify({'cleared': result})
```
## Prerequisites
Before using this module:
1. **Create a workspace** for your chatbot documents
2. **Upload documents** to the workspace using the Upload Session API
3. **Wait for embedding** - documents must be fully embedded before querying
4. **Note the workspace\_id** - you'll need it for the service configuration
## Configuration
| Parameter | Description | Default |
| -------------- | ------------------------------------------------ | ------------ |
| `workspace_id` | ID of the workspace containing chatbot documents | Required |
| `model` | LLM model to use | `alfred-4.2` |
| `timeout` | API request timeout in seconds | 150 |
## Best Practices
1. **Use system prompts** to define the chatbot's personality and behavior
2. **Store conversations persistently** in production (database, Redis, etc.)
3. **Limit conversation history** to avoid token limits (keep last 10-20 messages)
4. **Handle errors gracefully** with user-friendly messages
5. **Keep documents updated** in the workspace for accurate answers
# NDA Compliance Review
Source: https://docs.lighton.ai/en/use-cases/nda-review
Automate compliance review of incoming NDAs by running configurable legal controls over uploaded contracts and proposing rewordings from previously signed references, using Paradigm's agent search and structured Chat Completions.
**Last updated: April 2026** — The Paradigm API evolves fast. Always check the [latest API reference](/en/developer-resources/api-fundamentals/quick-guide) and prefer more recent cookbook entries when available.
## Overview
Legal teams spend hours reviewing incoming NDAs against an internal policy — checking that liability is properly capped, that disclosure carve-outs exist, that the return-of-information clause has the right exceptions. This cookbook shows how to build a pipeline that uploads an NDA to Paradigm, runs a configurable set of legal controls over it, and for every failing control proposes a rewording sourced from a previously signed NDA (or, if none matches, a default template).
The pattern generalises to any contract-review workflow: MSAs, supplier agreements, DPAs, employment contracts. Anywhere a policy check and a suggested fix would save a reviewer time.
This example is based on a production workflow used by a French asset manager to review NDAs incoming from M\&A processes. The four controls shown here match the client's real compliance rules — you can swap in your own by editing one Python list.
## Demo
See the pipeline reviewing a sample NDA, failing two of four controls, and proposing rewordings pulled from a previously signed reference:
## How It Works
1. The user uploads an incoming NDA, plus zero or more previously signed reference NDAs.
2. Each document is uploaded to Paradigm and indexed via embedding.
3. The counterparty (Target Company) is extracted from each document and used to match the incoming NDA with the most similar reference.
4. Four compliance controls are run against the incoming NDA. Each control is a small tree of yes/no legal questions — each question is answered by combining an agent-based Document Search (to locate the clause) with a structured Chat Completion (to classify it and return the supporting quote).
5. For every control that fails, the same extraction flow is applied to the matched reference NDA to propose a rewording. If no reference matched, a default template is used instead.
6. Results are compiled into a JSON report with per-control status, extracted quotes, and proposed rewordings.
## Prerequisites
* A Paradigm API key ([get one here](/en/developer-resources/api-fundamentals/quick-guide))
* Python 3.10+
* At least one NDA to review (sample NDAs are included in the GitHub repo)
* Optional: previously signed NDAs to use as reformulation sources
## API Endpoints Used
| Endpoint | Purpose in this pipeline |
| --------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
| [`POST /api/v2/files`](/en/developer-resources/api-fundamentals/quick-guide) | Upload an NDA (PDF or DOCX) to Paradigm |
| [`GET /api/v2/files/{id}`](/en/developer-resources/api-fundamentals/quick-guide) | Poll until the document finishes embedding |
| [`POST /api/v3/threads/turns`](/en/developer-resources/api-fundamentals/quick-guide) | Agent-based document search (RAG) to locate specific clauses |
| [`POST /api/v2/chat/completions`](/en/developer-resources/api-fundamentals/quick-guide) | Structured JSON classification using a JSON-schema response format |
## Step-by-Step Implementation
### Step 1: Upload and Wait for Embedding
Unlike upload-session–based workflows, NDAs are uploaded as single files via `POST /api/v2/files`. Because Document Search requires the document to be fully embedded, we poll `GET /api/v2/files/{id}` until its status flips to `embedded`.
```python theme={null}
def upload_and_embed(self, file_path: str) -> str:
"""Upload a single file and block until it is embedded."""
with open(file_path, "rb") as fh:
resp = requests.post(
f"{self.base_url}/api/v2/files",
headers={"Authorization": f"Bearer {self.api_key}"},
files={"file": fh},
timeout=120,
)
file_id = resp.json()["id"]
deadline = time.time() + 180
while time.time() < deadline:
status = self.get_file(file_id).get("status")
if status == "embedded":
return str(file_id)
if status == "fail":
raise ParadigmError(f"Embedding failed for file {file_id}")
time.sleep(2.0)
raise ParadigmError(f"Timeout waiting for file {file_id} to embed")
```
### Step 2: Ask a Yes/No Legal Question
Every compliance check comes down to the same two-step pattern: first a Document Search surfaces the relevant clause, then a structured Chat Completion classifies it and returns the supporting quote. The JSON schema guarantees we always get a predictable shape back.
```python theme={null}
def _ask_yes_no(client, file_id: str, question: str) -> QueryResult:
# 1. Find the passage that discusses this topic.
search_query = f"Dans ce document, dans quelle section se trouve la clause qui parle de : {question}"
passage = client.ask_question(file_id, search_query)
# 2. Classify the passage against the question and return the exact quote.
classify_query = (
f"Voici les informations récupérées du document NDA :\n{passage}\n\n"
f"Extrais la phrase exacte du document qui correspond à la requête suivante "
f"et indique si la clause est présente et affirmative. Requête : {question}"
)
schema = {
"type": "object",
"properties": {
"extracted_text": {"type": "string"},
"is_true": {"type": "boolean"},
},
"required": ["extracted_text", "is_true"],
"additionalProperties": False,
}
answer = client.structured_completion(classify_query, schema=schema)
return QueryResult(
question=question,
is_true=bool(answer["is_true"]),
extracted_text=answer["extracted_text"].strip(),
)
```
The queries are in French because the client's NDAs are reviewed by French-speaking lawyers who framed them that way originally. Paradigm handles French natively — translate them to your own language if that makes more sense for your team.
### Step 3: Use `force_tool` and `response_format` for Structure
Two Paradigm features do the heavy lifting here. First, `force_tool: "document_search"` on the V3 threads endpoint guarantees the model does a RAG lookup over the specified file rather than answering from general knowledge:
```python theme={null}
def ask_question(self, file_id: str, question: str) -> str:
payload = {
"ml_model": self.model,
"query": question,
"force_tool": "document_search",
"file_ids": [int(file_id)],
}
resp = requests.post(
f"{self.base_url}/api/v3/threads/turns",
headers=self._json_headers(),
json=payload,
timeout=180,
)
return _extract_v3_answer(resp.json())
```
Second, `response_format` with a JSON schema on `chat/completions` guarantees the classification answer is a valid, parseable object — no regex-wrangling of free-text responses:
```python theme={null}
payload = {
"model": self.model,
"messages": [
{"role": "system", "content": self._JSON_SYSTEM_PROMPT},
{"role": "user", "content": query},
],
"temperature": 0.1,
"max_tokens": 800,
"response_format": {
"type": "json_schema",
"json_schema": {"name": "response", "schema": schema, "strict": True},
},
}
```
### Step 4: Model the Controls as Query Trees
Each compliance control is a tree of yes/no questions with branching rules. Keeping the controls as data — not code — makes them trivial to audit, tune, or hand off to a non-engineer.
```python theme={null}
CONTROLS = [
{
"number": "1",
"name": "Liability of the receiving party",
"queries": [
{"id": "q1", "text": "Is there a liability clause for unauthorised disclosure?"},
{"id": "q2", "text": "Is liability capped to direct damages only?"},
{"id": "q3", "text": "Is the NDA governed by French law?"},
],
"default_templates": {
"q2": "to indemnify the Counterparty ... against all direct claims ...",
"q3": "This Agreement is subject to French law ...",
},
},
# ... three more controls
]
```
The branching logic lives in `_run_control`. Control 1 for example reads: "if a liability clause exists, then it must be capped to direct damages; otherwise the NDA must be governed by French law."
```python theme={null}
if control["number"] == "1":
q1 = ask("q1")
if q1.is_true:
q2 = ask("q2")
if not q2.is_true:
status, failed_qid = "FAIL", "q2"
else:
q3 = ask("q3")
if not q3.is_true:
status, failed_qid = "FAIL", "q3"
```
### Step 5: Extract the Counterparty for Matching
Before running controls we identify the Target Company in the NDA. In an M\&A context three parties may appear — the Receiving Party (the buyer), a Financial Advisor intermediary, and the Target Company whose information is being shared. We want the Target Company, not the other two. A carefully-written prompt plus a one-field JSON schema keeps the output clean:
```python theme={null}
schema = {
"type": "object",
"properties": {
"target_company": {
"type": "string",
"description": (
"Nom commercial de la société cible (Target Company). "
"Exclure la Receiving Party et le Financial Advisor intermédiaire."
),
},
},
"required": ["target_company"],
"additionalProperties": False,
}
```
Once we have the counterparty for every document, we pair the incoming NDA with its closest match among the references using [`difflib.SequenceMatcher`](https://docs.python.org/3/library/difflib.html#difflib.SequenceMatcher) (a drop-in stand-in for PostgreSQL trigram similarity).
### Step 6: Reformulate Failing Clauses
When a control fails, we propose a fix. The fallback chain is: "try to pull the equivalent clause from the matched reference NDA; if nothing usable comes back, use a pre-written template."
```python theme={null}
def _reformulate(client, question, default_template, reference_file_id):
if reference_file_id:
result = _ask_yes_no(client, reference_file_id, question)
if result.extracted_text:
return result.extracted_text, "reference"
return default_template.strip(), "template"
```
This means the suggested reword is usually drawn from language the counterparty has already signed — much easier to agree on than a generic template clause.
### Step 7: Compile the Report
The final report bundles the counterparty, the matched reference, and one `ControlResult` per control (status, queries with quotes, proposed reformulation). A top-level summary makes it trivial to wire the review into a CI check or a dashboard.
```json theme={null}
{
"nda_filename": "NDA - Project Kairos.docx",
"counterparty": "Nexora Group",
"reference": {
"filename": "NDA - Project Kairos - Livana (Meridia AM signed).pdf",
"counterparty": "Nexora Group"
},
"summary": {
"total_controls": 4, "passed": 2, "failed": 2,
"pass_rate": 50.0, "status": "FAIL"
},
"controls": [
{
"number": "1",
"name": "Liability of the receiving party",
"status": "FAIL",
"queries": [
{"id": "q1", "is_true": true, "extracted_text": "You shall be responsible ..."},
{"id": "q2", "is_true": false, "extracted_text": ""}
],
"reformulation": "You shall be responsible ... for any direct damages ...",
"reformulation_source": "reference"
}
]
}
```
## Complete Code
Clone the repository to run the complete pipeline with sample NDAs.
Full Paradigm API documentation.
## Customization
| Parameter | Description | Default | Adjust when... |
| --------------------------------------- | ------------------------------------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------- |
| `CONTROLS` (in `src/pipeline.py`) | List of compliance controls, each with a query tree and default templates | 4 M\&A NDA controls | You have different policy requirements |
| `match_reference_nda(threshold=...)` | Counterparty similarity threshold | `0.5` | Your reference library has many near-duplicates (raise it) or very few entries (lower it) |
| `model` (in `ParadigmClient`) | Paradigm model used for search and completion | `alfred-ft5` | You need different speed or quality tradeoffs |
| `temperature` | Completion determinism | `0.1` | You want more creative rewordings from the template fallback |
| System prompt for `_JSON_SYSTEM_PROMPT` | Language / output-format instructions | French, JSON-only | Your documents or team work in another language |
## Adding Your Own Control
Each control is one entry in the `CONTROLS` list. Steps to add one:
1. **Define the queries** — one yes/no legal question per node in your decision tree.
2. **Add branching logic** to `_run_control` — under which combination of answers is the control `PASS` vs `FAIL`, and which query's template is used for reformulation.
3. **Write a default template** — the fallback wording used when no reference NDA matches.
```python theme={null}
{
"number": "5",
"name": "Term and termination",
"queries": [
{"id": "q1", "text": "Does the NDA specify a fixed duration of confidentiality?"},
],
"default_templates": {
"q1": "The obligations under this Agreement shall survive for a period of five (5) years ...",
},
}
```
## Best Practices
1. **Keep controls as data, not code** — putting the query text and templates in a list (not spread through functions) makes compliance review a task your legal team can audit directly. Small wins for lawyers are big wins for the pipeline.
2. **Always use `force_tool: "document_search"`** for clause lookups — it forces Paradigm to cite the actual document rather than rely on general knowledge, which matters enormously for legal review.
3. **Use `response_format` with a JSON schema** for classification — free-text parsing of "yes/no plus quote" is fragile; schema-enforced JSON is bulletproof.
4. **Prefer reference-sourced rewordings over templates** — language the counterparty has already signed is far easier to accept than a generic template clause. Fall back to templates only when no reference matched.
5. **Match counterparties, not filenames** — extracting the Target Company before matching means you can use an inventory of hundreds of signed NDAs without worrying about how they were named. A loose similarity threshold (0.5) is forgiving of naming variations.
6. **Validate the extracted counterparty** — M\&A NDAs often involve three parties; a cheap schema-backed extractor with explicit "exclude these roles" rules in the description field saves expensive re-runs.
# Procurement Document Verification
Source: https://docs.lighton.ai/en/use-cases/procurement-document-verification
Automate multi-document verification by extracting and cross-referencing fields across uploaded documents using Paradigm's Document Search and Chat Completions APIs.
**Last updated: April 2026** — The Paradigm API evolves fast. Always check the [latest API reference](/en/developer-resources/api-fundamentals/quick-guide) and prefer more recent cookbook entries when available.
## Overview
Verifying that information is consistent across a set of related documents — procurement forms, contracts, bank details, identity declarations — is tedious, error-prone, and expensive when done manually. This cookbook shows how to build an automated verification pipeline that uploads documents to Paradigm, extracts specific fields using Document Search, and cross-references them using Chat Completions with structured prompts.
The pattern is applicable to any multi-document verification workflow: compliance audits, insurance claims processing, loan applications, supplier onboarding, and more.
This example is based on a real production use case verifying French public procurement forms (DC4). The pattern generalizes to any scenario where you need to check consistency across multiple documents.
## Demo
See the pipeline in action — uploading documents, running automated checks, and generating a verification report:
## How It Works
1. The user uploads a set of related documents (e.g., a form, a contract, bank details, an identity declaration).
2. Documents are ingested into Paradigm via the Upload Sessions API.
3. For each verification check, specific fields are extracted from the relevant documents using Document Search.
4. Extracted fields are compared using Chat Completions with a structured system prompt that handles fuzzy matching (typos, formatting differences, abbreviations).
5. Each check returns a structured result: `is_correct`, the compared values, and details explaining the decision.
6. All results are compiled into a verification report.
## Prerequisites
* A Paradigm API key ([get one here](/en/developer-resources/api-fundamentals/quick-guide))
* Python 3.10+
* Documents to verify (sample documents are included in the GitHub repo)
## API Endpoints Used
| Endpoint | Purpose in this pipeline |
| ------------------------------------- | ---------------------------------------------------- |
| `POST /v2/upload-sessions` | Create a session to upload documents |
| `POST /v2/upload-sessions/{id}/files` | Upload individual files to the session |
| `POST /v2/chat/document-search` | Extract specific fields from uploaded documents |
| `POST /v2/chat/completions` | Cross-reference extracted fields with fuzzy matching |
## Step-by-Step Implementation
### Step 1: Set Up the Paradigm Client
Create a wrapper around the Paradigm API. This client handles authentication, document upload, field extraction, and cross-referencing.
```python theme={null}
import requests
from typing import Optional
class ParadigmClient:
"""Client for interacting with the Paradigm API."""
def __init__(self, api_key: str, base_url: str = "https://paradigm.lighton.ai"):
self.api_key = api_key
self.base_url = base_url
self.headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
```
### Step 2: Upload Documents
Documents must be uploaded to Paradigm before they can be queried. The Upload Sessions API manages the ingestion pipeline — you create a session, upload files to it, then close the session to trigger embedding.
```python theme={null}
def create_upload_session(self) -> dict:
"""Create a new upload session for document ingestion."""
response = requests.post(
f"{self.base_url}/api/v2/upload-sessions",
headers=self.headers,
json={"pipeline": "v2.2.1"}
)
response.raise_for_status()
return response.json()
def upload_file(self, session_id: str, file_path: str) -> dict:
"""Upload a single file to an existing upload session."""
with open(file_path, "rb") as f:
response = requests.post(
f"{self.base_url}/api/v2/upload-sessions/{session_id}/files",
headers={"Authorization": f"Bearer {self.api_key}"},
files={"file": f}
)
response.raise_for_status()
return response.json()
def close_upload_session(self, session_id: str) -> dict:
"""Close the session to trigger document embedding."""
response = requests.post(
f"{self.base_url}/api/v2/upload-sessions/{session_id}/close",
headers=self.headers
)
response.raise_for_status()
return response.json()
```
Documents must be fully embedded before they can be queried. Embedding time depends on document size and complexity — typically a few seconds to a few minutes.
### Step 3: Extract Fields with Document Search
Once documents are embedded, use Document Search to extract specific fields. The `query` parameter is a natural language question — Paradigm searches the document and returns the relevant content.
```python theme={null}
def search_document(
self,
file_ids: list[str],
query: str,
tool: str = "DocumentSearch"
) -> dict:
"""Extract specific information from uploaded documents.
Args:
file_ids: Paradigm file IDs to search within.
query: Natural language query describing what to extract.
tool: "DocumentSearch" for text, "VisionDocumentSearch" for scanned/image docs.
"""
payload = {
"model": "alfred-4.2",
"query": query,
"file_ids": file_ids,
"tool": tool
}
response = requests.post(
f"{self.base_url}/api/v2/chat/document-search",
headers=self.headers,
json=payload,
timeout=150
)
response.raise_for_status()
return response.json()
```
Example queries for extracting fields:
```python theme={null}
# Extract the buyer's name from a procurement form
result = client.search_document(
file_ids=[form_file_id],
query="What is the name of the public buyer (pouvoir adjudicateur)?"
)
# Extract the contract reference number from a tender notice
result = client.search_document(
file_ids=[tender_notice_id],
query="What is the market reference number?"
)
# Extract bank details from a scanned document
result = client.search_document(
file_ids=[bank_doc_id],
query="What is the IBAN number?",
tool="VisionDocumentSearch" # Use vision for scanned/image documents
)
```
### Step 4: Cross-Reference Fields with Chat Completions
This is the core of the verification pipeline. After extracting the same field from two different documents, use Chat Completions with a structured system prompt to compare them. The system prompt handles real-world messiness: typos, formatting differences, abbreviations, missing accents.
```python theme={null}
def cross_reference(self, query: str) -> dict:
"""Compare extracted values using LLM-based fuzzy matching.
Returns a structured JSON response with:
- is_correct: bool — whether the values match
- compare_values: dict — the values being compared
- details: str — explanation of the comparison result
"""
system_prompt = """You are a document verification assistant. Your role is to compare
data extracted from different documents and determine if they match.
Rules for comparison:
- Names: ignore case, accents, and minor spelling variations.
"JEAN-PIERRE DUPONT" matches "Jean-Pierre Dupont" matches "Jean Pierre Dupont".
- Addresses: compare street, postal code, and city separately.
Minor differences in formatting are acceptable.
- Phone numbers: ignore spaces, dots, and country prefixes.
"01 23 45 67 89" matches "+33 1 23 45 67 89" matches "0123456789".
- Emails: case-insensitive comparison.
Always respond in valid JSON with this exact structure:
{
"is_correct": true/false,
"compare_values": {"document_1": "...", "document_2": "..."},
"details": "Explanation of why the values match or don't match."
}"""
payload = {
"model": "alfred-4.2",
"messages": [
{"role": "system", "content": system_prompt},
{"role": "user", "content": query}
],
"max_tokens": 500,
"temperature": 0.1 # Low temperature for deterministic comparisons
}
response = requests.post(
f"{self.base_url}/api/v2/chat/completions",
headers=self.headers,
json=payload,
timeout=150
)
response.raise_for_status()
data = response.json()
return data["choices"][0]["message"]["content"]
```
The system prompt above is critical to handling real-world data. Tune the fuzzy matching rules to your domain. For example, if verifying financial documents, you might want strict matching on amounts but fuzzy matching on company names.
### Step 5: Define Verification Checks
Each check is a function that extracts a field from two documents and compares them. Here's the pattern — repeat it for each field you need to verify.
```python theme={null}
import json
def verify_buyer_name(client: ParadigmClient, form_id: str, tender_id: str) -> dict:
"""Verify that the buyer name matches between the form and the tender notice."""
# Step A: extract from document 1
form_result = client.search_document(
file_ids=[form_id],
query="What is the full name of the public buyer?"
)
# Step B: extract from document 2
tender_result = client.search_document(
file_ids=[tender_id],
query="What is the full name of the public buyer?"
)
# Step C: cross-reference
comparison = client.cross_reference(
f"Compare these buyer names:\n"
f"Document 1 (form): {form_result['answer']}\n"
f"Document 2 (tender notice): {tender_result['answer']}"
)
return {
"check": "buyer_name",
"result": json.loads(comparison)
}
```
### Step 6: Orchestrate All Checks
Run all verification checks in parallel for speed, then compile results into a report.
```python theme={null}
import concurrent.futures
def run_verification(client: ParadigmClient, document_ids: dict) -> list[dict]:
"""Run all verification checks in parallel.
Args:
document_ids: mapping of document type to Paradigm file ID.
Example: {"form": "abc123", "tender_notice": "def456", "bank_details": "ghi789"}
"""
# Define all checks to run
checks = [
lambda: verify_buyer_name(client, document_ids["form"], document_ids["tender_notice"]),
lambda: verify_buyer_address(client, document_ids["form"], document_ids["tender_notice"]),
lambda: verify_buyer_email(client, document_ids["form"], document_ids["tender_notice"]),
lambda: verify_contract_ref(client, document_ids["form"], document_ids["tender_notice"]),
lambda: verify_candidate_name(client, document_ids["form"], document_ids["contract"]),
lambda: verify_iban(client, document_ids["form"], document_ids["bank_details"]),
# ... add more checks as needed
]
results = []
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
futures = [executor.submit(check) for check in checks]
for future in concurrent.futures.as_completed(futures):
results.append(future.result())
return results
```
Expected output:
```json theme={null}
[
{
"check": "buyer_name",
"result": {
"is_correct": true,
"compare_values": {
"document_1": "Ministere de l'Interieur",
"document_2": "MINISTÈRE DE L'INTÉRIEUR"
},
"details": "Names match — differences are only in case and accents."
}
},
{
"check": "iban",
"result": {
"is_correct": false,
"compare_values": {
"document_1": "FR76 3000 6000 0112 3456 7890 189",
"document_2": "FR76 3000 6000 0112 3456 7890 199"
},
"details": "IBAN mismatch — the last two digits differ (189 vs 199)."
}
}
]
```
### Step 7: Generate a Verification Report
Compile all results into a structured report. The example below generates a simple summary — in production, you might generate a PDF or write to a database.
```python theme={null}
def generate_report(results: list[dict]) -> dict:
"""Compile verification results into a summary report."""
passed = [r for r in results if r["result"]["is_correct"]]
failed = [r for r in results if not r["result"]["is_correct"]]
report = {
"total_checks": len(results),
"passed": len(passed),
"failed": len(failed),
"status": "VALID" if len(failed) == 0 else "INVALID",
"details": {
"passed_checks": [r["check"] for r in passed],
"failed_checks": [
{
"check": r["check"],
"reason": r["result"]["details"],
"values": r["result"]["compare_values"]
}
for r in failed
]
}
}
return report
```
## Complete Code
Clone the repository to run the complete pipeline with sample documents.
Full Paradigm API documentation.
## Customization
Adapt this pipeline to your own verification needs:
| Parameter | Description | Default | Adjust when... |
| ---------------------------- | --------------------------------------- | ---------------- | ------------------------------------------------------------------------------- |
| `model` | LLM model for extraction and comparison | `alfred-4.2` | You need different speed/quality tradeoffs |
| `temperature` | Comparison determinism | `0.1` | You want stricter (lower) or more lenient (higher) matching |
| `tool` | Document search tool | `DocumentSearch` | Use `VisionDocumentSearch` for scanned/image documents |
| `max_workers` | Parallel check threads | `5` | Increase for more checks, decrease if hitting rate limits |
| System prompt matching rules | Fuzzy matching behavior | See Step 4 | Your domain has different matching requirements (financial amounts, dates, IDs) |
## Adding Your Own Checks
To add a new verification check, follow this three-step pattern:
1. **Extract** the field from document A using `search_document()` with a clear natural language query
2. **Extract** the same field from document B
3. **Compare** using `cross_reference()` — the system prompt handles fuzzy matching
```python theme={null}
def verify_custom_field(client, doc_a_id, doc_b_id):
a = client.search_document([doc_a_id], "Your extraction query for document A")
b = client.search_document([doc_b_id], "Your extraction query for document B")
comparison = client.cross_reference(
f"Compare: Document A says '{a['answer']}', Document B says '{b['answer']}'"
)
return {"check": "custom_field", "result": json.loads(comparison)}
```
## Best Practices
1. **Use `VisionDocumentSearch` for scanned documents** — standard `DocumentSearch` works for native PDFs, but scanned documents and images need the vision tool for reliable extraction.
2. **Keep extraction queries specific** — "What is the IBAN?" works better than "Extract all banking information." One field per query yields more reliable results.
3. **Tune the system prompt for your domain** — the fuzzy matching rules should reflect your business requirements. Financial data may need exact matching; names and addresses typically need fuzzy matching.
4. **Run checks in parallel** — each check is independent, so use threading to process them concurrently. Add a small delay between batches if you hit rate limits.
5. **Log intermediate results** — when a check fails, having the raw extracted values from both documents makes debugging much faster.
# VC Investment Screening
Source: https://docs.lighton.ai/en/use-cases/vc-screening
Screen inbound venture-capital opportunities against a fixed rubric of criteria and draft a tone-matched reply email, using a single Paradigm Agent document-search call plus a single Chat Completion.
**Last updated: April 2026** — The Paradigm API evolves fast. Always check the [latest API reference](/en/developer-resources/api-fundamentals/quick-guide) and prefer more recent cookbook entries when available.
## Overview
A VC associate's morning inbox is full of investment teasers — pitch decks, forwarded emails, data-room memos. Before any meeting gets booked, someone has to check the opportunity against the fund's investment criteria: is it in the right sector? Is the ticket size in range? Is the timeline workable? This cookbook builds a pipeline that uploads the documents to Paradigm, extracts a structured analysis with a single `document_search` call, evaluates a rubric of nine screening criteria in code, and drafts a reply email whose tone matches the outcome.
The pattern fits any rubric-based triage workflow where you want one LLM extraction plus deterministic scoring: procurement bid screening, grant-application triage, RFP filtering, M\&A pipeline ranking.
This example is based on a production workflow for a GCC-focused investment firm. The nine criteria mirror that firm's real policy — you can replace them wholesale by editing one Python module.
## Demo
See the pipeline review a pitch deck and forwarded email, score them against nine criteria, and draft a reply email tuned to the outcome:
## How It Works
1. The user uploads one or more investment-opportunity documents (pitch deck, forwarded email, data-room memo).
2. Each document is uploaded to Paradigm and polled until it reaches `embedded` status.
3. A **single** agent-based `document_search` call extracts a structured, section-labelled analysis of the opportunity — company, geography, financials, deal terms, sector, IRR, syndicate.
4. Nine deterministic criterion evaluators run **in code, with no further API calls** against the extracted analysis. Each returns `MET` or `NOT MET` with a short justification.
5. The criteria are summed into one of four recommendation tiers (`RECOMMEND`, `CONDITIONAL RECOMMEND`, `WEAK RECOMMEND`, `DO NOT RECOMMEND`).
6. A **single** `chat/completions` call drafts a reply email whose tone branches on the tier — a meeting request for a recommend, a follow-up with specific questions for a conditional, a diplomatic decline for a no.
## Prerequisites
* A Paradigm API key ([get one here](/en/developer-resources/api-fundamentals/quick-guide))
* Python 3.10+
* One or more investment-opportunity documents (sample PDF and DOCX included in the GitHub repo)
## API Endpoints Used
| Endpoint | Purpose in this pipeline |
| --------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
| [`GET /api/v3/workspaces`](/en/developer-resources/api-fundamentals/quick-guide) | Discover a target workspace to upload into |
| [`POST /api/v3/files`](/en/developer-resources/api-fundamentals/quick-guide) | Upload pitch deck / email / memo (PDF or DOCX) |
| [`GET /api/v3/files/{id}`](/en/developer-resources/api-fundamentals/quick-guide) | Poll until each document finishes embedding |
| [`POST /api/v3/threads/turns`](/en/developer-resources/api-fundamentals/quick-guide) | Single structured-analysis extraction via `document_search` |
| [`POST /api/v2/chat/completions`](/en/developer-resources/api-fundamentals/quick-guide) | Draft the tone-matched reply email |
## Step-by-Step Implementation
### Step 1: Pick a Workspace and Upload
Paradigm's `/api/v3/files` endpoint uploads into a specific workspace. Rather than hard-code one, we discover a sensible default at startup (personal → private → company → first available) and cache it on the client. Uploads are asynchronous: each file cycles `pending → parsing → embedded`, so we poll `GET /api/v3/files/{id}` until it's ready.
```python theme={null}
def upload_documents(self, file_paths: list[str]) -> list[int]:
"""Upload files, wait for embedding, return the list of file IDs."""
workspace_id = self._discover_workspace_id()
file_ids = [self._upload_one(p, workspace_id) for p in file_paths]
self._wait_for_embedding(file_ids)
return file_ids
def _wait_for_embedding(self, file_ids: list[int]) -> None:
deadline = time.time() + self.POLL_TIMEOUT # 180s default
pending = set(file_ids)
while pending and time.time() < deadline:
for fid in list(pending):
status = self._get_file_status(fid)
if status == "embedded":
pending.discard(fid)
elif status == "failed":
raise RuntimeError(f"File {fid} failed to process on Paradigm.")
if pending:
time.sleep(self.POLL_INTERVAL) # 3s
if pending:
raise TimeoutError(f"Files did not embed within {self.POLL_TIMEOUT}s")
```
For a small demo (1–3 files) the defaults are fine. For batch processing dozens of documents in parallel, raise `POLL_TIMEOUT` and lower `POLL_INTERVAL`, or move to a background-job pattern.
### Step 2: Extract Everything in One Structured Query
Instead of making one call per criterion, we write a single "extraction prompt" that asks Paradigm to produce a section-labelled analysis covering every piece of information we care about. The prompt explicitly asks the model to write "not disclosed" when a section is missing — that way we can detect gaps deterministically downstream.
```python theme={null}
EXTRACTION_QUERY = """You are an expert venture-capital analyst. Provide a comprehensive,
structured analysis of this investment opportunity. Extract the following information
and name each section explicitly in your answer:
1. Target company name and legal entity structure.
2. Business model and core products / services.
3. Geographic presence and expansion plans, explicitly noting any GCC activity
or joint-venture structures.
4. Financial position: current revenue and EBITDA, runway to profitability,
funding requirements, dividend policy if mentioned.
5. Deal terms: proposed ticket size (USD), management fees, process timeline
in weeks, round structure (primary vs secondary).
6. Sector and sub-sector classification.
7. Return projections, including IRR if disclosed.
8. Syndicate: is there a lead investor, and who are the co-investors.
9. Any mention of a group / strategic co-investment structure.
Be specific with numbers. If information is not disclosed in the document,
state "not disclosed" explicitly rather than omitting the section."""
```
### Step 3: Force the Agent to Search, and Retrieve Broadly
The `document_search` tool on the V3 threads endpoint does the actual retrieval. Two flags matter here. First, `force_tool="document_search"` prevents the agent from answering from general knowledge — it must use the uploaded files. Second, we lift `top_k` and `top_n` well above the defaults so a single query can pull enough context to answer all nine sections at once.
```python theme={null}
SEARCH_TOP_K = 40 # chunks retrieved by embedding similarity
SEARCH_TOP_N = 20 # chunks kept after re-ranking
def document_search(self, query: str, file_ids: list[int]) -> str:
payload = {
"query": query,
"force_tool": "document_search",
"file_ids": file_ids,
"tool_parameters": {
"document_search": {
"top_k": self.SEARCH_TOP_K,
"top_n": self.SEARCH_TOP_N,
}
},
}
resp = requests.post(
f"{self.base_url}/api/v3/threads/turns",
headers=self.headers, json=payload, timeout=240,
)
resp.raise_for_status()
return self._extract_assistant_text(resp.json())
```
`/api/v3/threads/turns` can return `202 Accepted` for long-running requests. This demo keeps things synchronous — it raises instead of polling — which is fine for short opportunity documents. For 50-page data-room memos, implement a poll-on-202 loop.
### Step 4: Define the Rubric as Data
Each criterion is one entry in a single module — label, evaluator function, threshold constants at the top. Keeping the rubric close to the top of `src/pipeline.py` means a fund operator can audit or edit it without touching the API plumbing.
```python theme={null}
# Size thresholds (USD millions)
SIZE_MIN = 5.0
SIZE_STRONG = 8.0
# Return threshold (percent)
IRR_MIN = 15.0
# Timeline thresholds (weeks)
TIMELINE_MIN = 8
TIMELINE_MIN_COINVEST = 3
# Sector targeting
TARGET_SECTORS = [
"healthcare", "healthtech", "education", "edtech",
"data economy", "saas", "energy transition", "cleantech", "industrials",
]
EXCLUDED_SECTORS = ["consumer", "traditional infrastructure"]
```
### Step 5: Write Deterministic Evaluators
Each criterion is a small Python function that reads the extracted analysis and returns `MET` or `NOT MET` with an explanation. No further LLM calls — that keeps the rubric cheap, fast, and testable.
```python theme={null}
def _check_investment_size(analysis: str) -> CriterionResult:
size = _ticket_size_usd_m(analysis) # regex for "$Xm" near ticket/raise keywords
if size >= SIZE_STRONG:
return CriterionResult("MET", f"Ticket size ${size}m meets strong-preference threshold (>=${SIZE_STRONG}m).")
if size >= SIZE_MIN:
return CriterionResult("MET", f"Ticket size ${size}m meets minimum threshold (>=${SIZE_MIN}m).")
if size > 0:
return CriterionResult("NOT MET", f"Ticket size ${size}m below minimum threshold (${SIZE_MIN}m).")
return CriterionResult("NOT MET", "Ticket size not disclosed.")
def _check_return_threshold(analysis: str) -> CriterionResult:
irr = _first_irr_pct(analysis)
low_risk = _has_any(analysis, ["low risk", "low-risk"])
if irr >= IRR_MIN:
return CriterionResult("MET", f"Projected IRR of {irr}% meets {IRR_MIN}% threshold.")
if irr > 0 and low_risk:
return CriterionResult("MET", f"Projected IRR of {irr}% below {IRR_MIN}% but justified as low-risk.")
if irr > 0:
return CriterionResult("NOT MET", f"Projected IRR of {irr}% below {IRR_MIN}% with no low-risk justification.")
return CriterionResult("NOT MET", "Return projections / IRR not disclosed in the document.")
```
The evaluators deliberately treat "not disclosed" as `NOT MET` for most criteria — it's a screening tool, and missing information is itself a signal. Change that behaviour per-criterion if your policy is more forgiving.
### Step 6: Roll Up to a Recommendation Tier
Tally the criteria met, then pick one of four tiers. The break-points (`7` and `5` out of 9) are the client's real policy — tune for your own shop.
```python theme={null}
if met == total:
recommendation = "RECOMMEND for further due diligence"
elif met >= 7:
recommendation = "CONDITIONAL RECOMMEND — address the gaps before proceeding"
elif met >= 5:
recommendation = "WEAK RECOMMEND — significant gaps, requires committee discussion"
else:
recommendation = "DO NOT RECOMMEND — does not meet enough criteria"
```
### Step 7: Draft a Tone-Matched Reply Email
The final call is a single Chat Completion. The system prompt is fixed ("5-8 sentences, no emojis, no marketing"), and the user prompt branches on the recommendation tier — a positive, a mixed, or a diplomatic-decline brief. This separation keeps the voice consistent while letting the content adapt to the outcome.
```python theme={null}
SYSTEM_PROMPT = """You are an associate at a venture-capital firm preparing a concise
reply email to a banker who forwarded an investment opportunity. Write in
professional but warm English. No emojis. No marketing language. Keep the
email to 5-8 short sentences. Return only the email body — no subject line,
no commentary before or after."""
def _reply_prompt(company, recommendation, met, total, failed_criteria):
if "DO NOT RECOMMEND" in recommendation:
brief = ("Draft a diplomatic decline that thanks the counterparty, "
"acknowledges the merit of the business, does not itemise every "
"reason for declining, and leaves the door open for future opportunities.")
elif "CONDITIONAL" in recommendation or "WEAK" in recommendation:
failed_text = ", ".join(failed_criteria) or "a few gaps"
brief = (f"The following criteria were not met: {failed_text}. "
"Draft a reply that thanks the counterparty, expresses interest, asks "
"for a follow-up call to discuss the specific open points, and proposes "
"a couple of dates next week.")
else:
brief = ("Draft a positive reply that expresses strong interest and asks for "
"a meeting with the founders plus access to the data room.")
return f"Company under review: {company}.\n{brief}"
```
### Step 8: Assemble the Report
The final report bundles the extracted analysis, per-criterion results, the recommendation, and the drafted email into one JSON payload — ready for a CI step, a Slack notification, or a CRM write-back.
```json theme={null}
{
"company": "MedSync Health FZ-LLC",
"recommendation": "CONDITIONAL RECOMMEND — address the gaps before proceeding",
"summary": { "met": 8, "total": 9, "failed_criteria": ["Return Threshold"] },
"criteria": [
{ "key": "geography_structure", "label": "Geography / Structure",
"status": "MET", "explanation": "GCC joint-venture / expansion structure identified." },
{ "key": "return_threshold", "label": "Return Threshold",
"status": "NOT MET", "explanation": "Return projections / IRR not disclosed in the document." }
],
"reply_email": "Dear Marcus, thank you for sharing the MedSync Health opportunity ...",
"analysis": "1. Target company name and legal entity structure.\n - Company Name: MedSync Health FZ-LLC ..."
}
```
## Complete Code
Clone the repository to run the complete pipeline with sample opportunity documents.
Full Paradigm API documentation.
## Customization
| Parameter | Description | Default | Adjust when... |
| ------------------------------------------------------------ | ------------------------------------- | ------------------------------------------------ | ----------------------------------------------------- |
| `SIZE_MIN`, `SIZE_STRONG` | Ticket size thresholds (USD millions) | `5.0`, `8.0` | Your fund writes different cheque sizes |
| `IRR_MIN` | Minimum projected IRR | `15.0` | You have a different target return |
| `TIMELINE_MIN`, `TIMELINE_MIN_COINVEST` | Minimum weeks to signing | `8`, `3` | Your diligence cycle is longer or shorter |
| `TARGET_SECTORS`, `EXCLUDED_SECTORS` | Sector targeting | Healthcare, edtech, SaaS, cleantech, industrials | Your thesis lives in different sectors |
| `EXTRACTION_QUERY` (in `src/pipeline.py`) | Structured prompt | 9 named sections | You want to extract a different rubric |
| `SEARCH_TOP_K`, `SEARCH_TOP_N` (in `src/paradigm_client.py`) | Retrieval depth | `40`, `20` | Documents are very long (raise) or very short (lower) |
| `SYSTEM_PROMPT` (in `src/report.py`) | Reply-email voice | Warm professional English, 5–8 sentences | Your firm has a distinctive tone |
| Tier break-points (in `run_screening`) | How many criteria for each tier | `9 / 7 / 5 / below` | Your risk appetite differs |
## Adding Your Own Criterion
Each criterion is a small function plus an entry in the order and label maps. Steps to add one:
1. Add the key to `CRITERIA_ORDER` and a label to `CRITERION_LABELS`.
2. Write a `_check_` function that returns a `CriterionResult`.
3. Register it in `_EVALUATORS`.
4. (Optional) Add anything the new check needs to `EXTRACTION_QUERY` so the analysis includes it.
```python theme={null}
def _check_founder_background(analysis: str) -> CriterionResult:
lc = analysis.lower()
if _has_any(analysis, ["ex-founder", "second-time founder", "prior exit"]):
return CriterionResult("MET", "Founder has prior entrepreneurial experience.")
return CriterionResult("NOT MET", "No prior founder experience mentioned.")
```
## Best Practices
1. **Extract once, evaluate many times** — a single big extraction query is cheaper and more consistent than one call per criterion. Ask the LLM for everything up front, then apply rubric logic in code where it's deterministic and testable.
2. **Ask the model to label gaps explicitly** — the phrase *"state 'not disclosed' explicitly rather than omitting the section"* in the extraction prompt is load-bearing. It turns missing information into a detectable signal instead of silently passing through.
3. **Keep evaluators deterministic** — regex and keyword matching on an LLM-extracted structured analysis gives you auditable decisions. If a deal is rejected, the evaluator name and explanation tell you exactly why.
4. **Branch the reply-email system prompt on the outcome** — keep the voice constant, change the content. Three concise branches (positive / mixed / decline) produce consistently professional emails without brittle templating.
5. **Keep thresholds and sector lists at the top of the pipeline module** — your policy will evolve; your operators shouldn't need to read Python to adjust a number.
6. **Lift `top_k` / `top_n` for rich extraction queries** — the defaults are tuned for short Q\&A. When you ask for nine sections in one breath, give the retriever enough context to find it all.
# Create a company
Source: https://docs.lighton.ai/api-reference-v2/companies/create-a-company
/api-reference/openapi-v2.yaml post /api/v2/companies/create/
This endpoint allows you to create a new company.
It is restricted to admin users.
# Retrieve a company
Source: https://docs.lighton.ai/api-reference-v2/companies/retrieve-a-company
/api-reference/openapi-v2.yaml get /api/v2/companies/{id}
This endpoint allows you to retrieve detailed information about a specific company.
This is useful for accessing company data for administrative purposes, reporting, or integration with other systems.
# Update a company
Source: https://docs.lighton.ai/api-reference-v2/companies/update-a-company
/api-reference/openapi-v2.yaml patch /api/v2/companies/{id}/update/
This endpoint allows you to update the details of an existing company.
This is useful for maintaining accurate company information within the system.
It is restricted to admin and company admin users.
# Create a completion feedback
Source: https://docs.lighton.ai/api-reference-v2/feedbacks/create-a-completion-feedback
/api-reference/openapi-v2.yaml post /api/v2/rate/{feedback_type_id}/{completion_id}
Log a feedback of a given type and linked to an existing completion.
# List feedback types
Source: https://docs.lighton.ai/api-reference-v2/feedbacks/list-feedback-types
/api-reference/openapi-v2.yaml get /api/v2/feedback/feedback-types/
API endpoint for viewing and editing feedback types.
# List feedback types
Source: https://docs.lighton.ai/api-reference-v2/feedbacks/list-feedback-types-1
/api-reference/openapi-v2.yaml get /api/v2/feedback/feedback-types/{id}/
API endpoint for viewing and editing feedback types.
# Extract chunks from knowledge base
Source: https://docs.lighton.ai/api-reference-v2/files-search/extract-chunks-from-knowledge-base
/api-reference/openapi-v2.yaml post /api/v2/query
This endpoint can be used to retrieve top n chunks per query.
The query can be a single string or a list of strings.
The `collection` field can be used to specify the collection to query, which defaults to `base_collection`.
An optional integer `n` can be provided in order to retrieve top n chunks, which defaults to 5 if not specified.
**Response**: Returns an array of results, one for each input query.
# Filter most relevant chunks
Source: https://docs.lighton.ai/api-reference-v2/files-search/filter-most-relevant-chunks
/api-reference/openapi-v2.yaml post /api/v2/filter/chunks
This endpoint can be used to filter document chunks based on a given query.
The query should be a single string.
Chunk ids should be a list of strings. Each string should be the UUID of an existing document chunk.
The `model` field should be the name of the model to use for filtering.
An optional integer `n` can be provided, which can be used to return the first `n` chunks that pass the filter.
# Reformulate an extraction query
Source: https://docs.lighton.ai/api-reference-v2/files-search/reformulate-an-extraction-query
/api-reference/openapi-v2.yaml post /api/v2/query/reformulation
This endpoint can be used to reformulate a query in order to enhance retrieval.
The query should be a single string or a list of string with up to 10 queries.
The `model` field should be the name of the model to use for query formulation.
# Delete a document
Source: https://docs.lighton.ai/api-reference-v2/files/delete-a-document
/api-reference/openapi-v2.yaml delete /api/v2/files/{id}
Deletes a document and its associated embeddings.
This endpoint deletes a document from the database and removes its associated embeddings.
The document is identified by its unique ID.
This operation requires authentication and permission to delete the document.
# Generate an answer with a single document
Source: https://docs.lighton.ai/api-reference-v2/files/generate-an-answer-with-a-single-document
/api-reference/openapi-v2.yaml post /api/v2/files/{id}/ask-question
This endpoint can be used to ask a question about a document.
The question is required and should be a string .
The id of the document is a path parameter.
# List available documents
Source: https://docs.lighton.ai/api-reference-v2/files/list-available-documents
/api-reference/openapi-v2.yaml get /api/v2/files
This endpoint can be used to get the list of available documents for your user account, with optional filtering by workspace, private, or company scope.
# Retrieve a document
Source: https://docs.lighton.ai/api-reference-v2/files/retrieve-a-document
/api-reference/openapi-v2.yaml get /api/v2/files/{id}
Retrieve a single document by its ID.
Only documents that the requesting user is authorized to access will be returned.
# Retrieve chunks from a document
Source: https://docs.lighton.ai/api-reference-v2/files/retrieve-chunks-from-a-document
/api-reference/openapi-v2.yaml get /api/v2/files/{id}/chunks
This endpoint returns all chunks for a given document.
# Upload a document
Source: https://docs.lighton.ai/api-reference-v2/files/upload-a-document
/api-reference/openapi-v2.yaml post /api/v2/files
Endpoint to upload documents.
Documents are saved to the persistent storage, parsed, chunked and embedded.
The file is indexed as a document in the SQL database, with its chunks, and related to its owner, company and collection for permission application.
To specify a workspace, set `collection_type` to one of the following:
- `private` for a personal workspace
- `company` for a company workspace
- `workspace` for other workspaces
If `workspace` is specified, `workspace_id` must be provided.
If `collection_type` is not specified, it defaults to `company`.
# Create text tokens
Source: https://docs.lighton.ai/api-reference-v2/models/create-text-tokens
/api-reference/openapi-v2.yaml post /api/v2/tokenize
This endpoint can be used to convert strings into tokens.
It is a simple proxy forwarding your requests to the desired model.
Any LightOn model is deployed on a vLLM-based image.
**Supported Input:**
- `prompt`: Simple text string to tokenize
- `messages`: Array of chat messages to tokenize (alternative to prompt)
# Generate a chat completion
Source: https://docs.lighton.ai/api-reference-v2/models/generate-a-chat-completion
/api-reference/openapi-v2.yaml post /api/v2/chat/completions
This endpoint can be used to generate chat completions from a Large Language Model.
It is a simple proxy forwarding your requests to the desired model.
Any LightOn model is deployed on a vLLM-based image.
**Response Types:**
- When `stream=false` **(default)**: Returns a complete JSON response with all completion choices
- When `stream=true`: Returns Server-Sent Events (SSE) with incremental completion chunks
**Streaming Format:**
Each SSE event contains a JSON object with incremental text. The stream ends with `data: [DONE]`.
# Generate a text completion
Source: https://docs.lighton.ai/api-reference-v2/models/generate-a-text-completion
/api-reference/openapi-v2.yaml post /api/v2/completions
This endpoint can be used to generate completions from a Large Language Model.
It is a simple proxy forwarding your requests to the desired model.
Any LightOn model is deployed on a vLLM-based image.
**Response Types:**
- When `stream=false` **(default)**: Returns a complete JSON response with all completion choices
- When `stream=true`: Returns Server-Sent Events (SSE) with incremental completion chunks
**Streaming Format:**
Each SSE event contains a JSON object with incremental text. The stream ends with `data: [DONE]`.
# List available models
Source: https://docs.lighton.ai/api-reference-v2/models/list-available-models
/api-reference/openapi-v2.yaml get /api/v2/models
This endpoint can be used to get the list of available models for your API key.
# Update chunks
Source: https://docs.lighton.ai/api-reference-v2/monitoring/update-chunks
/api-reference/openapi-v2.yaml post /api/v2/collection/update_chunks
This endpoint is used for updating chunks. If the document ID is unspecified, a new document will be created.
The user should have these permissions:
- Can upload document chunk for benchmarks
- Can create company collection
- Can add document chunks to company collection
# Get platform load status
Source: https://docs.lighton.ai/api-reference-v2/platform-status/get-platform-load-status
/api-reference/openapi-v2.yaml get /api/v2/platform/status
Returns the current platform load status including whether any models are experiencing high load.
# Get company chat sessions report
Source: https://docs.lighton.ai/api-reference-v2/reporting/get-company-chat-sessions-report
/api-reference/openapi-v2.yaml get /api/v2/reporting/chat-sessions/
This endpoint allows retrieving company chat sessions report.
The start date is required, but the end date is by default today.
It is restricted to admin and company admin users.
Admin users can optionally filter by company.
# Get company members report
Source: https://docs.lighton.ai/api-reference-v2/reporting/get-company-members-report
/api-reference/openapi-v2.yaml get /api/v2/reporting/users/
This endpoint allows you to retrieve a company's members report.
The start date is required, but the end date is by default today.
It is restricted to admin and company admin users.
Admin users can optionally filter by company.
# Get company tools report
Source: https://docs.lighton.ai/api-reference-v2/reporting/get-company-tools-report
/api-reference/openapi-v2.yaml get /api/v2/reporting/tools/
This endpoint allows you to retrieve a company's tools and third-party tools report.
The start date is required, but the end date is by default today.
It is restricted to admin and company admin users.
Admin users can optionally filter by company.
# Get documents usage report
Source: https://docs.lighton.ai/api-reference-v2/reporting/get-documents-usage-report
/api-reference/openapi-v2.yaml get /api/v2/reporting/used-documents/
This endpoint allows retrieving company used documents report.
The start date is required, but the end date is by default today.
It is restricted to admin and company admin users.
Admin users can optionally filter by company.
# Get feedbacks report
Source: https://docs.lighton.ai/api-reference-v2/reporting/get-feedbacks-report
/api-reference/openapi-v2.yaml get /api/v2/reporting/chats-feedback/
This endpoint allows retrieving company chats feedback report.
The start date is required, but the end date is by default today.
It is restricted to admin and company admin users.
Admin users can optionally filter by company.
# Create a group
Source: https://docs.lighton.ai/api-reference-v2/scim/create-a-group
/api-reference/openapi-v2.yaml post /scim/v2/Groups
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
We disable PUT as Microsoft does not need it
# Create a user
Source: https://docs.lighton.ai/api-reference-v2/scim/create-a-user
/api-reference/openapi-v2.yaml post /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# Delete a group
Source: https://docs.lighton.ai/api-reference-v2/scim/delete-a-group
/api-reference/openapi-v2.yaml delete /scim/v2/Groups
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
We disable PUT as Microsoft does not need it
# Delete a user
Source: https://docs.lighton.ai/api-reference-v2/scim/delete-a-user
/api-reference/openapi-v2.yaml delete /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# List or Retrieve a group
Source: https://docs.lighton.ai/api-reference-v2/scim/list-or-retrieve-a-group
/api-reference/openapi-v2.yaml get /scim/v2/Groups
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
We disable PUT as Microsoft does not need it
# List or Retrieve resource types
Source: https://docs.lighton.ai/api-reference-v2/scim/list-or-retrieve-resource-types
/api-reference/openapi-v2.yaml get /scim/v2/ResourceTypes
# List or Retrieve schemas
Source: https://docs.lighton.ai/api-reference-v2/scim/list-or-retrieve-schemas
/api-reference/openapi-v2.yaml get /scim/v2/Schemas
# List or Retrieve users
Source: https://docs.lighton.ai/api-reference-v2/scim/list-or-retrieve-users
/api-reference/openapi-v2.yaml get /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# Replace a user
Source: https://docs.lighton.ai/api-reference-v2/scim/replace-a-user
/api-reference/openapi-v2.yaml put /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# Retrieve Service Provider Configuration
Source: https://docs.lighton.ai/api-reference-v2/scim/retrieve-service-provider-configuration
/api-reference/openapi-v2.yaml get /scim/v2/ServiceProviderConfig
# Update a group
Source: https://docs.lighton.ai/api-reference-v2/scim/update-a-group
/api-reference/openapi-v2.yaml patch /scim/v2/Groups
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
We disable PUT as Microsoft does not need it
# Update a user
Source: https://docs.lighton.ai/api-reference-v2/scim/update-a-user
/api-reference/openapi-v2.yaml patch /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# Add a file to an upload session
Source: https://docs.lighton.ai/api-reference-v2/upload-sessions/add-a-file-to-an-upload-session
/api-reference/openapi-v2.yaml post /api/v2/upload-session/{uuid}
Upload a new file to an existing upload session
# Create an upload session
Source: https://docs.lighton.ai/api-reference-v2/upload-sessions/create-an-upload-session
/api-reference/openapi-v2.yaml post /api/v2/upload-session
Create a new upload session
# Deactivate upload sessions
Source: https://docs.lighton.ai/api-reference-v2/upload-sessions/deactivate-upload-sessions
/api-reference/openapi-v2.yaml post /api/v2/upload-session/deactivate
Interrupt and deactivate ongoing upload sessions of the user sending the request.
The pending documents in the upload sessions are deleted.
# Delete an upload session
Source: https://docs.lighton.ai/api-reference-v2/upload-sessions/delete-an-upload-session
/api-reference/openapi-v2.yaml delete /api/v2/upload-session/{uuid}
Delete a session and all its documents
# Retrieve an upload session
Source: https://docs.lighton.ai/api-reference-v2/upload-sessions/retrieve-an-upload-session
/api-reference/openapi-v2.yaml get /api/v2/upload-session/{uuid}
Retrieve the details of an upload session.
# Create a company member
Source: https://docs.lighton.ai/api-reference-v2/users/create-a-company-member
/api-reference/openapi-v2.yaml post /api/v2/companies/{id}/users/
This endpoint allows to create a company member.
It is restricted to admin and company admin users.
# List company members
Source: https://docs.lighton.ai/api-reference-v2/users/list-company-members
/api-reference/openapi-v2.yaml get /api/v2/users/
This endpoint allows you to list all members of the requested user's company.
It is restricted to admin and company admin users.
Admin users can optionally filter members by company.
# Retrieve a company member
Source: https://docs.lighton.ai/api-reference-v2/users/retrieve-a-company-member
/api-reference/openapi-v2.yaml get /api/v2/users/{id}
This endpoint allows you to retrieve the details of a company member.
It is restricted to admin and company admin users.
# Update a company member
Source: https://docs.lighton.ai/api-reference-v2/users/update-a-company-member
/api-reference/openapi-v2.yaml patch /api/v2/users/{id}/update/
This endpoint allows you to update the details of a company member.
It is restricted to admin and company admin users.
# Update groups of a company member
Source: https://docs.lighton.ai/api-reference-v2/users/update-groups-of-a-company-member
/api-reference/openapi-v2.yaml put /api/v2/users/{id}/groups/update/
Warning: This endpoint will be deleted in the future, use the /users//roles/update/ instead.This endpoint allows you to update the groups of a company member.
Note that this will update all the groups of the member.
It is restricted to admin and company admin users.
# Update roles of a company member
Source: https://docs.lighton.ai/api-reference-v2/users/update-roles-of-a-company-member
/api-reference/openapi-v2.yaml put /api/v2/users/{id}/roles/update/
This endpoint allows you to update the roles of a company member.
Note that this will update all the roles of the member.
It is restricted to admin and company admin users.
# Update workspaces of a company member
Source: https://docs.lighton.ai/api-reference-v2/users/update-workspaces-of-a-company-member
/api-reference/openapi-v2.yaml put /api/v2/users/{id}/workspaces/update/
This endpoint allows you to update the workspaces of a company member.
Note that this will update all the workspaces of the member.
It is restricted to admin and company admin users.
# Create a workspace
Source: https://docs.lighton.ai/api-reference-v2/workspaces/create-a-workspace
/api-reference/openapi-v2.yaml post /api/v2/companies/{id}/workspaces/create/
This endpoint allows you to create a workspace within a specific company.
This is useful for organizing and managing different projects or groups within the company.
It is restricted to admin and company admin users.
# List workspaces of a company
Source: https://docs.lighton.ai/api-reference-v2/workspaces/list-workspaces-of-a-company
/api-reference/openapi-v2.yaml get /api/v2/companies/{id}/workspaces/
This endpoint allows you to create a workspace within a specific company.
This is useful for organizing and managing different projects or groups within the company.
It is restricted to admin and company admin users.
# Retrieve a workspace
Source: https://docs.lighton.ai/api-reference-v2/workspaces/retrieve-a-workspace
/api-reference/openapi-v2.yaml get /api/v2/workspaces/{id}
This endpoint allows to retrieve a workspace with his relations (members and collections).
It is restricted to admin and company admin users.
# Update a workspace
Source: https://docs.lighton.ai/api-reference-v2/workspaces/update-a-workspace
/api-reference/openapi-v2.yaml patch /api/v2/workspaces/{id}/update/
This endpoint allows you to update a workspace within a company.
It is restricted to admin and company admin users.
# Update workspace members
Source: https://docs.lighton.ai/api-reference-v2/workspaces/update-workspace-members
/api-reference/openapi-v2.yaml put /api/v2/workspaces/{id}/members/update/
This endpoint allows you to update the members of a workspace.
Note that this will update all the members of the workspace.
It is restricted to admin and company admin users.
# Add a member to a workspace of your company
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/add-a-member-to-a-workspace-of-your-company
/api-reference/openapi-v3-company.yaml post /api/v3/company/workspaces/{id}/members
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Add a new member (user or group) to a custom workspace of the authenticated user's company. This endpoint can only be used by company-level admins or higher.
# Bulk replace workspace members
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/bulk-replace-workspace-members
/api-reference/openapi-v3-company.yaml put /api/v3/company/workspaces/{id}/members
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Add a new member (user or group) to a custom workspace. This endpoint can only be used by company level admins.
# Create a workspace in your company
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/create-a-workspace-in-your-company
/api-reference/openapi-v3-company.yaml post /api/v3/company/workspaces
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Create a new workspace within your company. Available to company and instance-level administrators.
# List workspaces in your company
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/list-workspaces-in-your-company
/api-reference/openapi-v3-company.yaml get /api/v3/company/workspaces
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Get the list of all workspaces within the authenticated user's company.
# Remove a group from a workspace of your company
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/remove-a-group-from-a-workspace-of-your-company
/api-reference/openapi-v3-company.yaml delete /api/v3/company/workspaces/{id}/members/groups/{group_id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Remove a group from a custom workspace of the authenticated user's company. This endpoint can only be used by company-level admins or higher.
# Remove a user from a workspace of your company
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/remove-a-user-from-a-workspace-of-your-company
/api-reference/openapi-v3-company.yaml delete /api/v3/company/workspaces/{id}/members/users/{user_id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Remove a user from a custom workspace of the authenticated user's company. This endpoint can only be used by company-level admins or higher.
# Retrieve a company workspace
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/retrieve-a-company-workspace
/api-reference/openapi-v3-company.yaml get /api/v3/company/workspaces/{id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Retrieve the information of a workspace in your company. This endpoint is available to company-level and instance-level administrators.
# Retrieve workspace members
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/retrieve-workspace-members
/api-reference/openapi-v3-company.yaml get /api/v3/company/workspaces/{id}/members
Returns the list of members linked to a workspace in the authenticated user's company. This endpoint can only be used by company-level admins or higher.
# Update a company workspace
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/update-a-company-workspace
/api-reference/openapi-v3-company.yaml patch /api/v3/company/workspaces/{id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Partially update a given workspace. The authenticated user must be a company or instance-level administrator.
**Fields:**
- **name** (string, optional): Desired workspace name
- **description** (string, optional): Desired workspace description. Send empty string or null to clear.
**Permissions:**
- Company Admins can update workspaces within their company
- Instance-level administrators can update any workspace
# Add a member to a workspace
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/add-a-member-to-a-workspace
/api-reference/openapi-v3-instance.yaml post /api/v3/instance/workspaces/{id}/members
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Add a new member (user or group) to a custom workspace. This endpoint can only be used by instance level admins.
# Create a new instance workspace
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/create-a-new-instance-workspace
/api-reference/openapi-v3-instance.yaml post /api/v3/instance/workspaces
Create a new instance workspace.
# Delete a user from a workspace
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/delete-a-user-from-a-workspace
/api-reference/openapi-v3-instance.yaml delete /api/v3/instance/workspaces/{id}/members/users/{user_id}
Remove a user from a custom workspace. This endpoint can only be used by instance level admins.
# Get the list of members for any workspace. This endpoint can only be used by instance level admins.
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/get-the-list-of-members-for-any-workspace-this-endpoint-can-only-be-used-by-instance-level-admins
/api-reference/openapi-v3-instance.yaml get /api/v3/instance/workspaces/{id}/members
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Returns the list of members linked to a workspace in the authenticated user's company. This endpoint can only be used by company-level admins or higher.
# List instance workspaces
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/list-instance-workspaces
/api-reference/openapi-v3-instance.yaml get /api/v3/instance/workspaces
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Get the list of every existing workspaces on the instance.
# Partially update a workspace
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/partially-update-a-workspace
/api-reference/openapi-v3-instance.yaml patch /api/v3/instance/workspaces/{id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Partially update a given workspace. The authenticated user must be an instance-level administrator.
**Fields:**
- **name** (string, optional): Desired workspace name
- **description** (string, optional): Desired workspace description. Send empty string or null to clear.
**Permissions:**
- Instance-level administrators (Sys Admin, Admin, Account Manager) can update any workspace across all companies
# Remove a group from a workspace
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/remove-a-group-from-a-workspace
/api-reference/openapi-v3-instance.yaml delete /api/v3/instance/workspaces/{id}/members/groups/{group_id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Remove a group from a workspace. This endpoint can only be used by instance level admins.
# Replace all workspace members
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/replace-all-workspace-members
/api-reference/openapi-v3-instance.yaml put /api/v3/instance/workspaces/{id}/members
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Bulk replace the entire list of members for a custom workspace. This endpoint can only be used by instance level admins.
# Retrieve instance workspace
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/retrieve-instance-workspace
/api-reference/openapi-v3-instance.yaml get /api/v3/instance/workspaces/{id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Retrieve the information of a given workspace. This endpoint can only be used by instance level admins.
To retrieve one of your workspaces, please use the GET /api/v3/workspaces/{id} endpoint.
# Preview a seed dataset
Source: https://docs.lighton.ai/api-reference-v3/facets/preview-a-seed-dataset
/api-reference/openapi-v3.yaml get /api/v3/facet/seed/preview
Generate a preview of what a seed dataset would contain (no DB writes).
Returns sample documents with realistic metadata, content type
assignments, and namespaced attribute values. ~50% of documents are
assigned multiple content types (cross-vertical when possible) to
demonstrate multi-classification.
**Response sections:**
- `meta` — content type codes, link to content-types API, generation stats
- `summary` — rolled-up facet counts (content types, workspaces, statuses)
ready for UI sidebar consumption
- `sample_documents` — individual documents with attribute values
namespaced by content type path
**Attribute values** are keyed by content type path to avoid collisions
when a document has multiple classifications:
```json
{
"legal:contract:nda": {"counterparty": "Acme"},
"tech:security:threat-model": {"threat_level": "High"}
}
```
**Content type definitions** are NOT included in the response.
Use the `content_types_url` in `meta` to fetch full tree + attribute
schemas.
# Update a user
Source: https://docs.lighton.ai/api-reference-v3/scim/update-a-user
/api-reference/openapi-v3.yaml patch /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# Create a new agent
Source: https://docs.lighton.ai/api-reference-v3/agents/create-a-new-agent
/api-reference/openapi-v3.yaml post /api/v3/agents
Create a new agent (ChatSettings) with specified tools and MCP servers. Access control: Users can create agents in their personal groups. Company admins can create agents in any group within their company. Sys-admin users can create agents in any group.
# Create agent favorite
Source: https://docs.lighton.ai/api-reference-v3/agents/create-agent-favorite
/api-reference/openapi-v3.yaml post /api/v3/agents/favorites
Favorite an agent for the current user.
# Delete agent favorite
Source: https://docs.lighton.ai/api-reference-v3/agents/delete-agent-favorite
/api-reference/openapi-v3.yaml delete /api/v3/agents/favorites/{id}
Remove an agent from the current user's favorites by favorite id.
# Delete agent favorite by agent id
Source: https://docs.lighton.ai/api-reference-v3/agents/delete-agent-favorite-by-agent-id
/api-reference/openapi-v3.yaml delete /api/v3/agents/favorites
Remove an agent from the current user's favorites by agent id.
# Delete an agent
Source: https://docs.lighton.ai/api-reference-v3/agents/delete-an-agent
/api-reference/openapi-v3.yaml delete /api/v3/agents/{id}
Delete an agent (ChatSettings) by ID. Access control: Users can delete agents in their personal groups. Company admins can delete agents in any group within their company. Sys-admin users can delete any agent. Default agents cannot be deleted.
# Get agent icon
Source: https://docs.lighton.ai/api-reference-v3/agents/get-agent-icon
/api-reference/openapi-v3.yaml get /api/v3/agents/{id}/icon
Retrieve the icon for an agent as a WebP image file. Access control: Sys-admin users can access icons for all agents from all companies. Company admin users can access icons for all agents from their company. Regular users can only access icons for agents linked to groups they belong to.
# List agent favorites
Source: https://docs.lighton.ai/api-reference-v3/agents/list-agent-favorites
/api-reference/openapi-v3.yaml get /api/v3/agents/favorites
Get a list of the current user's favorited agents, ordered by newest first.
# List all agents
Source: https://docs.lighton.ai/api-reference-v3/agents/list-all-agents
/api-reference/openapi-v3.yaml get /api/v3/agents
Get a paginated list of agents (ChatSettings) accessible to the user. Access control: Sys-admin users can access all agents from all companies. Company admin users can access all agents from their company. Regular users can only access agents linked to groups they belong to.
# List files scoped to an agent
Source: https://docs.lighton.ai/api-reference-v3/agents/list-files-scoped-to-an-agent
/api-reference/openapi-v3.yaml get /api/v3/agents/{id}/files
Retrieve a paginated list of files (documents) accessible to the authenticated user.
Results are ordered by upload date (newest first) by default.
When using the `search` parameter, results are ordered by relevance.
# List native tools and MCP servers available for a specific agent
Source: https://docs.lighton.ai/api-reference-v3/agents/list-native-tools-and-mcp-servers-available-for-a-specific-agent
/api-reference/openapi-v3.yaml get /api/v3/agents/{id}/tools
Get available native tools and MCP servers with their tools for a given agent ID.
# List tags used in workspaces for an agent
Source: https://docs.lighton.ai/api-reference-v3/agents/list-tags-used-in-workspaces-for-an-agent
/api-reference/openapi-v3.yaml get /api/v3/agents/{id}/tags
Return a non-paginated list of tags used in documents within workspaces scoped to the specified agent. If the agent is default, tags are computed across all workspaces accessible to the user. If the agent is not default, tags are computed only across workspaces linked to the agent's group, intersected with workspaces accessible to the user.
# Retrieve a single agent
Source: https://docs.lighton.ai/api-reference-v3/agents/retrieve-a-single-agent
/api-reference/openapi-v3.yaml get /api/v3/agents/{id}
Get detailed information about a specific agent (ChatSettings) by ID. Access control: Sys-admin users can access all agents from all companies. Company admin users can access all agents from their company. Regular users can only access agents linked to groups they belong to.
# Update an agent
Source: https://docs.lighton.ai/api-reference-v3/agents/update-an-agent
/api-reference/openapi-v3.yaml patch /api/v3/agents/{id}
Partially update an agent (ChatSettings) by ID. Access control: Users can update agents in their personal groups. Company admins can update agents in any group within their company. Sys-admin users can update any agent.
# Upload agent icon
Source: https://docs.lighton.ai/api-reference-v3/agents/upload-agent-icon
/api-reference/openapi-v3.yaml put /api/v3/agents/{id}/icon
Upload or update an icon for an agent. Maximum file size: 5MB. Access control: Users can upload icons for agents in their personal groups. Company admins can upload icons for agents in any group within their company. Sys-admin users can upload icons for any agent.
# Create a conversation thread
Source: https://docs.lighton.ai/api-reference-v3/threads/create-a-conversation-thread
/api-reference/openapi-v3.yaml post /api/v3/threads
Create a new conversation thread.
Note: `chat_setting_id` has been deprecated, now use `agent_id` instead, `chat_settings_id` is still supported for back-compatibility purposes. If no `agent_id` nor `chat_setting_id` is provided, the default agent for the company is used.
# Delete a conversation thread
Source: https://docs.lighton.ai/api-reference-v3/threads/delete-a-conversation-thread
/api-reference/openapi-v3.yaml delete /api/v3/threads/{id}
Delete a thread by ID.
# List conversation threads
Source: https://docs.lighton.ai/api-reference-v3/threads/list-conversation-threads
/api-reference/openapi-v3.yaml get /api/v3/threads
List conversation threads for the authenticated user with cursor-based pagination.
# Retrieve a conversation thread
Source: https://docs.lighton.ai/api-reference-v3/threads/retrieve-a-conversation-thread
/api-reference/openapi-v3.yaml get /api/v3/threads/{id}
Get a thread by ID.
# Create a company
Source: https://docs.lighton.ai/api-reference-v2/companies/create-a-company
/api-reference/openapi-v2.yaml post /api/v2/companies/create/
This endpoint allows you to create a new company.
It is restricted to admin users.
# Retrieve a company
Source: https://docs.lighton.ai/api-reference-v2/companies/retrieve-a-company
/api-reference/openapi-v2.yaml get /api/v2/companies/{id}
This endpoint allows you to retrieve detailed information about a specific company.
This is useful for accessing company data for administrative purposes, reporting, or integration with other systems.
# Update a company
Source: https://docs.lighton.ai/api-reference-v2/companies/update-a-company
/api-reference/openapi-v2.yaml patch /api/v2/companies/{id}/update/
This endpoint allows you to update the details of an existing company.
This is useful for maintaining accurate company information within the system.
It is restricted to admin and company admin users.
# Update chunks
Source: https://docs.lighton.ai/api-reference-v2/monitoring/update-chunks
/api-reference/openapi-v2.yaml post /api/v2/collection/update_chunks
This endpoint is used for updating chunks. If the document ID is unspecified, a new document will be created.
The user should have these permissions:
- Can upload document chunk for benchmarks
- Can create company collection
- Can add document chunks to company collection
# Create a company member
Source: https://docs.lighton.ai/api-reference-v2/users/create-a-company-member
/api-reference/openapi-v2.yaml post /api/v2/companies/{id}/users/
This endpoint allows to create a company member.
It is restricted to admin and company admin users.
# List company members
Source: https://docs.lighton.ai/api-reference-v2/users/list-company-members
/api-reference/openapi-v2.yaml get /api/v2/users/
This endpoint allows you to list all members of the requested user's company.
It is restricted to admin and company admin users.
Admin users can optionally filter members by company.
# Add a member to a workspace of your company
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/add-a-member-to-a-workspace-of-your-company
/api-reference/openapi-v3-company.yaml post /api/v3/company/workspaces/{id}/members
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Add a new member (user or group) to a custom workspace of the authenticated user's company. This endpoint can only be used by company-level admins or higher.
# Bulk replace workspace members
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/bulk-replace-workspace-members
/api-reference/openapi-v3-company.yaml put /api/v3/company/workspaces/{id}/members
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Add a new member (user or group) to a custom workspace. This endpoint can only be used by company level admins.
# Create a workspace in your company
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/create-a-workspace-in-your-company
/api-reference/openapi-v3-company.yaml post /api/v3/company/workspaces
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Create a new workspace within your company. Available to company and instance-level administrators.
# List workspaces in your company
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/list-workspaces-in-your-company
/api-reference/openapi-v3-company.yaml get /api/v3/company/workspaces
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Get the list of all workspaces within the authenticated user's company.
# Remove a group from a workspace of your company
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/remove-a-group-from-a-workspace-of-your-company
/api-reference/openapi-v3-company.yaml delete /api/v3/company/workspaces/{id}/members/groups/{group_id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Remove a group from a custom workspace of the authenticated user's company. This endpoint can only be used by company-level admins or higher.
# Remove a user from a workspace of your company
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/remove-a-user-from-a-workspace-of-your-company
/api-reference/openapi-v3-company.yaml delete /api/v3/company/workspaces/{id}/members/users/{user_id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Remove a user from a custom workspace of the authenticated user's company. This endpoint can only be used by company-level admins or higher.
# Retrieve a company workspace
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/retrieve-a-company-workspace
/api-reference/openapi-v3-company.yaml get /api/v3/company/workspaces/{id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Retrieve the information of a workspace in your company. This endpoint is available to company-level and instance-level administrators.
# Retrieve workspace members
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/retrieve-workspace-members
/api-reference/openapi-v3-company.yaml get /api/v3/company/workspaces/{id}/members
Returns the list of members linked to a workspace in the authenticated user's company. This endpoint can only be used by company-level admins or higher.
# Update a company workspace
Source: https://docs.lighton.ai/api-reference-v3-company/workspaces/update-a-company-workspace
/api-reference/openapi-v3-company.yaml patch /api/v3/company/workspaces/{id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Partially update a given workspace. The authenticated user must be a company or instance-level administrator.
**Fields:**
- **name** (string, optional): Desired workspace name
- **description** (string, optional): Desired workspace description. Send empty string or null to clear.
**Permissions:**
- Company Admins can update workspaces within their company
- Instance-level administrators can update any workspace
# Add a member to a workspace
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/add-a-member-to-a-workspace
/api-reference/openapi-v3-instance.yaml post /api/v3/instance/workspaces/{id}/members
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Add a new member (user or group) to a custom workspace. This endpoint can only be used by instance level admins.
# Create a new instance workspace
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/create-a-new-instance-workspace
/api-reference/openapi-v3-instance.yaml post /api/v3/instance/workspaces
Create a new instance workspace.
# Delete a user from a workspace
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/delete-a-user-from-a-workspace
/api-reference/openapi-v3-instance.yaml delete /api/v3/instance/workspaces/{id}/members/users/{user_id}
Remove a user from a custom workspace. This endpoint can only be used by instance level admins.
# Get the list of members for any workspace. This endpoint can only be used by instance level admins.
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/get-the-list-of-members-for-any-workspace-this-endpoint-can-only-be-used-by-instance-level-admins
/api-reference/openapi-v3-instance.yaml get /api/v3/instance/workspaces/{id}/members
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Returns the list of members linked to a workspace in the authenticated user's company. This endpoint can only be used by company-level admins or higher.
# List instance workspaces
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/list-instance-workspaces
/api-reference/openapi-v3-instance.yaml get /api/v3/instance/workspaces
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Get the list of every existing workspaces on the instance.
# Partially update a workspace
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/partially-update-a-workspace
/api-reference/openapi-v3-instance.yaml patch /api/v3/instance/workspaces/{id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Partially update a given workspace. The authenticated user must be an instance-level administrator.
**Fields:**
- **name** (string, optional): Desired workspace name
- **description** (string, optional): Desired workspace description. Send empty string or null to clear.
**Permissions:**
- Instance-level administrators (Sys Admin, Admin, Account Manager) can update any workspace across all companies
# Remove a group from a workspace
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/remove-a-group-from-a-workspace
/api-reference/openapi-v3-instance.yaml delete /api/v3/instance/workspaces/{id}/members/groups/{group_id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Remove a group from a workspace. This endpoint can only be used by instance level admins.
# Replace all workspace members
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/replace-all-workspace-members
/api-reference/openapi-v3-instance.yaml put /api/v3/instance/workspaces/{id}/members
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Bulk replace the entire list of members for a custom workspace. This endpoint can only be used by instance level admins.
# Retrieve instance workspace
Source: https://docs.lighton.ai/api-reference-v3-instance/workspaces/retrieve-instance-workspace
/api-reference/openapi-v3-instance.yaml get /api/v3/instance/workspaces/{id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Retrieve the information of a given workspace. This endpoint can only be used by instance level admins.
To retrieve one of your workspaces, please use the GET /api/v3/workspaces/{id} endpoint.
# List agent tools and MCP servers for a chat setting
Source: https://docs.lighton.ai/api-reference-v3/agent/list-agent-tools-and-mcp-servers-for-a-chat-setting
/api-reference/openapi-v3.yaml get /api/v3/agent/chat_settings/{id}/tools
Get available native tools and MCP servers with their tools for a given chat setting ID.
DEPRECATION WARNING: `chat_settings` are now becoming `agents`, please use the `agents` endpoint.
# Retrieve an artifact
Source: https://docs.lighton.ai/api-reference-v3/artifacts/retrieve-an-artifact
/api-reference/openapi-v3.yaml get /api/v3/artifacts/{id}
Retrieve an artifact by ID.
# Retrieve an artifact content
Source: https://docs.lighton.ai/api-reference-v3/artifacts/retrieve-an-artifact-content
/api-reference/openapi-v3.yaml get /api/v3/artifacts/{id}/content
Get the content of an artifact. Returns the file content if the user is authorized to access it.
# Create a company
Source: https://docs.lighton.ai/api-reference-v3/companies/create-a-company
/api-reference/openapi-v3.yaml post /api/v3/companies
This endpoint allows authorized users to create a new company.
Only SysAdmin and Account Manager roles can create companies.
# Delete a company
Source: https://docs.lighton.ai/api-reference-v3/companies/delete-a-company
/api-reference/openapi-v3.yaml delete /api/v3/companies/{id}
This endpoint allows authorized users to delete a company.
Access levels:
- SysAdmin/Account Manager: Can delete any company
- Company Admin: Cannot delete companies
# Get company details
Source: https://docs.lighton.ai/api-reference-v3/companies/get-company-details
/api-reference/openapi-v3.yaml get /api/v3/companies/{id}
This endpoint allows users to retrieve details of a specific company.
Access levels:
- SysAdmin/Account Manager: Can view any company
- DPOAdmin: Read-only access to any company
- Company Admin: Can view their own company
- Company DPO: Read-only access to their own company
- User: No access
# List companies
Source: https://docs.lighton.ai/api-reference-v3/companies/list-companies
/api-reference/openapi-v3.yaml get /api/v3/companies
This endpoint allows users to list companies based on their permissions.
Access levels:
- SysAdmin/Account Manager/DPO Admin: Can view all companies
- Company Admin: Can view their own company only
- Company DPO: Read-only access to their own company
- User: No access
Supports pagination and search functionality.
# Partially update a company (PATCH)
Source: https://docs.lighton.ai/api-reference-v3/companies/partially-update-a-company-patch
/api-reference/openapi-v3.yaml patch /api/v3/companies/{id}
This endpoint allows partially updating a company's details.
PATCH allows updating only the fields you want to change.
Access levels:
- SysAdmin/Account Manager: Can update any company
- Company Admin: Cannot update companies
Company name must be unique.
# Preview a seed dataset
Source: https://docs.lighton.ai/api-reference-v3/facets/preview-a-seed-dataset
/api-reference/openapi-v3.yaml get /api/v3/facet/seed/preview
Generate a preview of what a seed dataset would contain (no DB writes).
Returns sample documents with realistic metadata, content type
assignments, and namespaced attribute values. ~50% of documents are
assigned multiple content types (cross-vertical when possible) to
demonstrate multi-classification.
**Response sections:**
- `meta` — content type codes, link to content-types API, generation stats
- `summary` — rolled-up facet counts (content types, workspaces, statuses)
ready for UI sidebar consumption
- `sample_documents` — individual documents with attribute values
namespaced by content type path
**Attribute values** are keyed by content type path to avoid collisions
when a document has multiple classifications:
```json
{
"legal:contract:nda": {"counterparty": "Acme"},
"tech:security:threat-model": {"threat_level": "High"}
}
```
**Content type definitions** are NOT included in the response.
Use the `content_types_url` in `meta` to fetch full tree + attribute
schemas.
# Retrieve document chunks
Source: https://docs.lighton.ai/api-reference-v3/files-processing/retrieve-document-chunks
/api-reference/openapi-v3.yaml post /api/v3/retrieve
Invoke the document retrieval pipeline (embedding + hybrid vector search + Reranking) and return matched document chunks.
**Reranking:** applied by default (`skip_rerank=false`). When active, each result includes a `scoring.certainty` field with the reranker confidence score. Set `skip_rerank=true` to return raw retrieval order without certainty.
**Scoping:** use `workspace_id` and/or `tag_id` to narrow retrieval to specific workspaces or tags, or use `file_id` to target specific files. `file_id` cannot be combined with `workspace_id` or `tag_id` (400). A 403 is returned if any provided filter resolves to no authorized resources. When no filters are provided, retrieval runs across all authorized documents.
**Modes:**
- `text` (default): hybrid text search
- `vision`: image-based search
# Delete a file
Source: https://docs.lighton.ai/api-reference-v3/files/delete-a-file
/api-reference/openapi-v3.yaml delete /api/v3/files/{id}
Permanently delete a file and all associated data.
**Requirements:**
- Delete permission on the document
- Workspace must allow manual document management (not sync-only)
Returns 204 (No Content) on success.
# List files accessible to the authenticated user
Source: https://docs.lighton.ai/api-reference-v3/files/list-files-accessible-to-the-authenticated-user
/api-reference/openapi-v3.yaml get /api/v3/files
Retrieve a paginated list of files (documents) accessible to the authenticated user.
Results are ordered by upload date (newest first) by default.
When using the `search` parameter, results are ordered by relevance.
# Retrieve a single file by ID
Source: https://docs.lighton.ai/api-reference-v3/files/retrieve-a-single-file-by-id
/api-reference/openapi-v3.yaml get /api/v3/files/{id}
Retrieve detailed information for a single file by its ID.
Only files that the authenticated user is authorized to access will be returned.
Returns 404 if the file does not exist or the user does not have access.
Query Parameters:
- include_content: Set to 'true' to include the full text content of the document (default: false)
The response includes comprehensive document details including:
- Basic metadata (id, filename, title, extension, dates, page count)
- Full text content of the document (only when include_content=true)
- Processing status (status, status_vision, status_detail if failed)
- Associated tags and workspace information
- File size (if available)
- Parser/ingestion pipeline (if available, after parsing starts)
- Signature (TLSH hash for duplicate detection)
# Update file metadata
Source: https://docs.lighton.ai/api-reference-v3/files/update-file-metadata
/api-reference/openapi-v3.yaml patch /api/v3/files/{id}
Update mutable fields of a file (document).
**Updatable fields:**
- `title`: Update the document title
- `tags`: Replace ALL tags for the document (both manual and auto-assigned)
- `external_metadata`: Create or update external source metadata
**Tag replacement behavior:**
- Providing a tags array replaces ALL existing tags (manual and auto-assigned)
- To remove all tags, send `[0]` (sentinel value for multipart format)
- Omitting `tags` field leaves tags unchanged
- New tags are marked as manually assigned (`auto_assigned=False`)
**External metadata behavior:**
- When creating for the first time, `external_id` is required
- When updating existing metadata, `external_id` is optional (existing value is preserved)
- Fields in `additional_metadata` are merged (not replaced) with existing values
**Validation:**
- Returns 400 if only immutable fields are provided (mutable fields: 'external_metadata', 'tags', 'title')
- Returns 400 if tag IDs are invalid or don't belong to user's company
- Returns 404 if document doesn't exist or user doesn't have access
# Upload a file
Source: https://docs.lighton.ai/api-reference-v3/files/upload-a-file
/api-reference/openapi-v3.yaml post /api/v3/files
Upload a file to a workspace.
Files are added to an upload session and queued for asynchronous processing. To track progress, retrieve the file details using the GET endpoints to check the current status.
**Customization Options:**
- `title`: Customize the document title (defaults to filename without extension)
- `filename`: Override the uploaded filename
- `parser`: Specify a custom ingestion pipeline instead of using the default
# Create MCP server
Source: https://docs.lighton.ai/api-reference-v3/mcp/create-mcp-server
/api-reference/openapi-v3.yaml post /api/v3/mcp
Create a new MCP server scoped to the authenticated user's personal group. The server is automatically linked to the user's company and personal group — users cannot create servers for other companies or groups.
`authentication_method` determines how the server authenticates requests. Possible values:
- `none`: no authentication required
- `url`: credentials are appended to the `url` as the `apiKey` query parameter
- `bearer_token`: credentials are sent as a Bearer token in the Authorization header (provide the token in the `credentials` field)
# Delete MCP server
Source: https://docs.lighton.ai/api-reference-v3/mcp/delete-mcp-server
/api-reference/openapi-v3.yaml delete /api/v3/mcp/{id}
Delete an MCP server. This will remove it from all agents using it.
# Get MCP server details
Source: https://docs.lighton.ai/api-reference-v3/mcp/get-mcp-server-details
/api-reference/openapi-v3.yaml get /api/v3/mcp/{id}
Get details of a specific MCP server. URL is redacted unless user has secret read permissions.
# List MCP servers
Source: https://docs.lighton.ai/api-reference-v3/mcp/list-mcp-servers
/api-reference/openapi-v3.yaml get /api/v3/mcp
List MCP servers available to the authenticated user (servers only; tools are not included).
# List tools for an MCP server
Source: https://docs.lighton.ai/api-reference-v3/mcp/list-tools-for-an-mcp-server
/api-reference/openapi-v3.yaml get /api/v3/mcp/{id}/tools
Returns the tools registered for a specific MCP server. Returns 403 if the server does not exist or is not accessible.
# Update MCP server
Source: https://docs.lighton.ai/api-reference-v3/mcp/update-mcp-server
/api-reference/openapi-v3.yaml patch /api/v3/mcp/{id}
Update an existing MCP server. All fields are optional.
`authentication_method` determines how the server authenticates requests. Possible values:
- `none`: no authentication required
- `url`: credentials are appended to the `url` as the `apiKey` query parameter
- `bearer_token`: credentials are sent as a Bearer token in the Authorization header (provide the token in the `credentials` field)
# Create embeddings
Source: https://docs.lighton.ai/api-reference-v3/models/create-embeddings
/api-reference/openapi-v3.yaml post /api/v3/embeddings
This endpoint can be used to convert text chunks into embeddings.
It is a simple proxy forwarding your requests to the desired model.
**Input Format:**
- `input`: Text string to convert to embeddings
- `encoding_format`: Format for returned embeddings (float or base64)
- `dimensions`: Optional dimension specification for output embeddings
# Generate a chat completion
Source: https://docs.lighton.ai/api-reference-v3/models/generate-a-chat-completion
/api-reference/openapi-v3.yaml post /api/v3/chat/completions
This endpoint can be used to generate chat completions from a Large Language Model.
It is a simple proxy forwarding your requests to the desired model.
Any LightOn model is deployed on a vLLM-based image.
**Response Types:**
- When `stream=false` **(default)**: Returns a complete JSON response with all completion choices
- When `stream=true`: Returns Server-Sent Events (SSE) with incremental completion chunks
**Streaming Format:**
Each SSE event contains a JSON object with incremental text. The stream ends with `data: [DONE]`.
# Parse a document to Markdown via VLM
Source: https://docs.lighton.ai/api-reference-v3/models/parse-a-document-to-markdown-via-vlm
/api-reference/openapi-v3.yaml post /api/v3/ocr
Upload a file for synchronous OCR processing. This endpoint is intended for lightweight, low-volume document parsing and returns results inline in the response.
For large documents, high-throughput workloads, or asynchronous processing, use the `/files` endpoints, which are optimized for those use cases.
**Supported file types:** `.pdf`, `.png`, `.jpg`, `.jpeg`, `.pptx`, `.ppt`, `.odp`, `.docx`, `.odt`, `.doc`, `.html`
A maximum of **16 pages** are processed per request. For documents exceeding this limit, split the content across multiple sequential calls using the `pages` parameter (e.g., `pages="1-16"` for the first call, `pages="17-32"` for the second).
# Create a group
Source: https://docs.lighton.ai/api-reference-v3/scim/create-a-group
/api-reference/openapi-v3.yaml post /scim/v2/Groups
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
We disable PUT as Microsoft does not need it
# Create a user
Source: https://docs.lighton.ai/api-reference-v3/scim/create-a-user
/api-reference/openapi-v3.yaml post /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# Delete a group
Source: https://docs.lighton.ai/api-reference-v3/scim/delete-a-group
/api-reference/openapi-v3.yaml delete /scim/v2/Groups
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
We disable PUT as Microsoft does not need it
# Delete a user
Source: https://docs.lighton.ai/api-reference-v3/scim/delete-a-user
/api-reference/openapi-v3.yaml delete /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# List or Retrieve a group
Source: https://docs.lighton.ai/api-reference-v3/scim/list-or-retrieve-a-group
/api-reference/openapi-v3.yaml get /scim/v2/Groups
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
We disable PUT as Microsoft does not need it
# List or Retrieve resource types
Source: https://docs.lighton.ai/api-reference-v3/scim/list-or-retrieve-resource-types
/api-reference/openapi-v3.yaml get /scim/v2/ResourceTypes
# List or Retrieve schemas
Source: https://docs.lighton.ai/api-reference-v3/scim/list-or-retrieve-schemas
/api-reference/openapi-v3.yaml get /scim/v2/Schemas
# List or Retrieve users
Source: https://docs.lighton.ai/api-reference-v3/scim/list-or-retrieve-users
/api-reference/openapi-v3.yaml get /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# Replace a user
Source: https://docs.lighton.ai/api-reference-v3/scim/replace-a-user
/api-reference/openapi-v3.yaml put /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# Retrieve Service Provider Configuration
Source: https://docs.lighton.ai/api-reference-v3/scim/retrieve-service-provider-configuration
/api-reference/openapi-v3.yaml get /scim/v2/ServiceProviderConfig
# Update a group
Source: https://docs.lighton.ai/api-reference-v3/scim/update-a-group
/api-reference/openapi-v3.yaml patch /scim/v2/Groups
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
We disable PUT as Microsoft does not need it
# Update a user
Source: https://docs.lighton.ai/api-reference-v3/scim/update-a-user
/api-reference/openapi-v3.yaml patch /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# List or retrieve sources
Source: https://docs.lighton.ai/api-reference-v3/sources/list-or-retrieve-sources
/api-reference/openapi-v3.yaml get /api/v3/sources
Unified endpoint to list document and web sources with filtering.
# Add tags to a file
Source: https://docs.lighton.ai/api-reference-v3/tags/add-tags-to-a-file
/api-reference/openapi-v3.yaml post /api/v3/files/{id}/tags
Add one or more tags to a file without affecting existing tags.
**Behavior:**
- Adds new tags to the document while preserving existing ones
- New tags are marked as manually assigned (`auto_assigned=False`)
- Duplicate tags are ignored (no error if tag already exists on document)
**Validation:**
- Returns 400 if tag IDs are invalid or don't belong to user's company
- Returns 403 if user doesn't have permission to edit the document
- Returns 404 if document doesn't exist
# Create a new tag for the company
Source: https://docs.lighton.ai/api-reference-v3/tags/create-a-new-tag-for-the-company
/api-reference/openapi-v3.yaml post /api/v3/tags
Create a new tag for the authenticated user's company.
The auto_assign flag determines if the tag can be automatically assigned by the system (True)
or only manually (False).
Requires tag creation permission.
# Delete a company tag
Source: https://docs.lighton.ai/api-reference-v3/tags/delete-a-company-tag
/api-reference/openapi-v3.yaml delete /api/v3/tags/{id}
Delete a company tag.
This will also remove all Document-Tag associations with this tag.
Requires tag deletion permission.
# List all tags for the authenticated user's company
Source: https://docs.lighton.ai/api-reference-v3/tags/list-all-tags-for-the-authenticated-users-company
/api-reference/openapi-v3.yaml get /api/v3/tags
Retrieve a list of tags for the authenticated user's company.
Results are ordered by creation date (newest first).
# Remove a tag from a file
Source: https://docs.lighton.ai/api-reference-v3/tags/remove-a-tag-from-a-file
/api-reference/openapi-v3.yaml delete /api/v3/files/{id}/tags/{tag_id}
Remove a specific tag from a file.
**Behavior:**
- Removes the specified tag from the document
- Works for both manually assigned and auto-assigned tags
- Idempotent: returns 204 even if tag was not on the document
**Validation:**
- Returns 403 if user doesn't have permission to edit the document
- Returns 404 if document doesn't exist
- Returns 404 if tag doesn't exist or doesn't belong to user's company
# Create a conversation thread with initial turn
Source: https://docs.lighton.ai/api-reference-v3/threads/create-a-conversation-thread-with-initial-turn
/api-reference/openapi-v3.yaml post /api/v3/threads/turns
Create a new thread and immediately ask a query in a single request.
This endpoint combines thread creation and turn creation to reduce round trips.
Supports synchronous and background processing modes. Streaming is not supported.If you need to use streaming mode then directly use the endpoint to create a turn within a thread
Note: `chat_setting_id` has been deprecated, now use `agent_id` instead, `chat_settings_id` is still supported for back-compatibility purposes. If no `agent_id` nor `chat_setting_id` is provided, the default agent for the company is used.
# Create a conversation turn in a thread
Source: https://docs.lighton.ai/api-reference-v3/threads/create-a-conversation-turn-in-a-thread
/api-reference/openapi-v3.yaml post /api/v3/threads/{id}/turns
Ask a query to the agent.
Behaviour:
- Returns 200 with the final answer when the task completes quickly within the request.
- Returns 202 Accepted with the current answer payload when processing continues in the background;
clients should poll the turn status or subscribe to updates until completion.
- If `stream=true`, the endpoint responds with Server-Sent Events (SSE) and streams tokens/events
until completion (content-type: text/event-stream).
- If `background=true`, the endpoint enqueues processing and returns the created answer immediately.
# Get suggested queries for a conversation thread
Source: https://docs.lighton.ai/api-reference-v3/threads/get-suggested-queries-for-a-conversation-thread
/api-reference/openapi-v3.yaml get /api/v3/threads/{id}/suggested_queries
Get AI-generated suggested follow-up queries for a thread.
# List conversation turns in a thread
Source: https://docs.lighton.ai/api-reference-v3/threads/list-conversation-turns-in-a-thread
/api-reference/openapi-v3.yaml get /api/v3/threads/{id}/turns
List all turns (answers) for a thread with cursor-based pagination.
# Resume a turn generation
Source: https://docs.lighton.ai/api-reference-v3/threads/resume-a-turn-generation
/api-reference/openapi-v3.yaml get /api/v3/threads/{id}/resume
Resume streaming the last turn of a thread.
# Update a conversation thread
Source: https://docs.lighton.ai/api-reference-v3/threads/update-a-conversation-thread
/api-reference/openapi-v3.yaml patch /api/v3/threads/{id}
Update a thread by ID. Use query parameters 'anonymize=true' to anonymize an ephemeral thread or 'cancel=true' to cancel the current turn processing.
# Update a conversation turn in a thread
Source: https://docs.lighton.ai/api-reference-v3/threads/update-a-conversation-turn-in-a-thread
/api-reference/openapi-v3.yaml patch /api/v3/threads/{id}/turns/{turn_id}
Update a turn by ID. Use query parameter 'action' to specify the action: 'like_dislike' to send like/dislike feedback, 'copied' to mark as copied, or 'flag' to create a flag.
# List native tools
Source: https://docs.lighton.ai/api-reference-v3/tools/list-native-tools
/api-reference/openapi-v3.yaml get /api/v3/tools
Returns native tools available to the authenticated user's company. If the company has no tool restrictions configured, all native tools are returned. Sys-admins can pass `company_id` to inspect another company's allowed tools.
# Create a user group
Source: https://docs.lighton.ai/api-reference-v3/user-groups/create-a-user-group
/api-reference/openapi-v3.yaml post /api/v3/groups
This endpoint allows company admins to create a new user group.
SysAdmin/instance-level users can specify company_id to create groups in any company.
Regular company admins can only create groups in their own company.
# Delete group of users
Source: https://docs.lighton.ai/api-reference-v3/user-groups/delete-group-of-users
/api-reference/openapi-v3.yaml delete /api/v3/groups/{id}
Delete a group of usersNote that if the users group could not be deleted because of protected dependencies,
these dependencies will be list.
# Fully update a group (PUT)
Source: https://docs.lighton.ai/api-reference-v3/user-groups/fully-update-a-group-put
/api-reference/openapi-v3.yaml put /api/v3/groups/{id}
This endpoint allows updating a group's name and description.
PUT requires all fields to be provided.
Access levels:
- Admin/Sys Admin/Account Manager: Can update any group
- Company Admin: Can update groups in their company
Group name must be unique within the company.
# Get group details
Source: https://docs.lighton.ai/api-reference-v3/user-groups/get-group-details
/api-reference/openapi-v3.yaml get /api/v3/groups/{id}
This endpoint allows users to retrieve details of a specific group.
Access levels:
- Admin/Sys Admin/Account Manager: Can view any group across companies
- Admin DPO: Read-only access to any group across companies
- Company Admin: Can view groups in their company
- Company DPO: Read-only access to groups in their company
- Group members: Can view groups they are members of
Returns group details including assigned workspaces.
# List user groups
Source: https://docs.lighton.ai/api-reference-v3/user-groups/list-user-groups
/api-reference/openapi-v3.yaml get /api/v3/groups
This endpoint allows users to list groups based on their permissions.
Access levels:
- Admin/Sys Admin/Account Manager: Can view all groups across companies
- Admin DPO: Read-only access to all groups across companies
- Company Admin: Can view all groups in their company
- Company DPO: Read-only access to groups in their company
- Group members: Read-only access to groups they are members of in their company
The `has_role` filter can be combined with `user_id` to return only groups where the specified user has a particular role (e.g. `owner`). It has no effect without `user_id`.
Supports pagination and search functionality.
# Partially update a group (PATCH)
Source: https://docs.lighton.ai/api-reference-v3/user-groups/partially-update-a-group-patch
/api-reference/openapi-v3.yaml patch /api/v3/groups/{id}
This endpoint allows partially updating a group's name or description.
PATCH allows updating only the fields you want to change.
Access levels:
- Admin/Sys Admin/Account Manager: Can update any group
- Company Admin: Can update groups in their company
Group name must be unique within the company.
# Create a new company member
Source: https://docs.lighton.ai/api-reference-v3/users/create-a-new-company-member
/api-reference/openapi-v3.yaml post /api/v3/users
This endpoint allows to create a new company member.
**Permissions:**
- Admin, SysAdmin, Account Manager: can create users for any company
- Company Admin: can create users for their own company
**Throttling:** 60 requests per minute
It is API Key protected and restricted to users with appropriate permissions.
# Delete a company member
Source: https://docs.lighton.ai/api-reference-v3/users/delete-a-company-member
/api-reference/openapi-v3.yaml delete /api/v3/users/{id}
This endpoint allows to delete a specific company member by ID.
**Permissions:**
- Admin, SysAdmin, Account Manager: can delete any user except themselves
- Company Admin: can delete users from their own company except themselves
**Throttling:** 60 requests per minute
It is API Key protected and restricted to users with appropriate permissions.
# Get current user profile
Source: https://docs.lighton.ai/api-reference-v3/users/get-current-user-profile
/api-reference/openapi-v3.yaml get /api/v3/users/me
Returns information on the authenticated user including:
- Profile: id, username, full_name, email
- Permissions: admin access, document management, API key management, monitoring permission
- Settings: language preference, help step preference
- Compliance: terms acceptance status
- Company: id, name, login_method
- Group memberships: list of groups the user belongs to, with their role (owner/member) in each
# List company members
Source: https://docs.lighton.ai/api-reference-v3/users/list-company-members
/api-reference/openapi-v3.yaml get /api/v3/users
This endpoint allows to list company members.
**Permissions:**
- Admin, SysAdmin, SysDPO, Account Manager: can view all users (optionally filter by company_id)
- Company Admin, Company DPO: can view users from their own company
**Query Parameters:**
- `company_id` (optional): Filter by company (SysAdmin, SysDPO, Account Manager only)
- `group_id` (optional): Filter by group ID (users must be members of the specified group)
- `is_active` (optional): Filter by active status
**Throttling:** 100 requests per minute
It is API Key protected and restricted to users with appropriate permissions.
# List roles of a company member
Source: https://docs.lighton.ai/api-reference-v3/users/list-roles-of-a-company-member
/api-reference/openapi-v3.yaml get /api/v3/users/{id}/roles
This endpoint allows you to list the roles of a company member.
It is restricted to admin and company admin users.
# Partially update a company member
Source: https://docs.lighton.ai/api-reference-v3/users/partially-update-a-company-member
/api-reference/openapi-v3.yaml patch /api/v3/users/{id}
This endpoint allows to update a specific company member by ID.
**PUT:** Requires all fields (first_name, last_name, account_expiration_date, language).
**PATCH:** Allows partial updates - only provide the fields you want to change.
**Permissions:**
- Admin, SysAdmin, Account Manager: can update any user
- Company Admin: can update users from their own company only
**Throttling:** 60 requests per minute
It is API Key protected and restricted to users with appropriate permissions.
# Retrieve a company member
Source: https://docs.lighton.ai/api-reference-v3/users/retrieve-a-company-member
/api-reference/openapi-v3.yaml get /api/v3/users/{id}
This endpoint allows to retrieve a specific company member by ID.
**Permissions:**
- Admin, SysAdmin, SysDPO, Account Manager: can retrieve any user
- Company Admin, Company DPO: can retrieve users from their own company only
**Throttling:** 100 requests per minute
It is API Key protected and restricted to users with appropriate permissions.
# Update a company member
Source: https://docs.lighton.ai/api-reference-v3/users/update-a-company-member
/api-reference/openapi-v3.yaml put /api/v3/users/{id}
This endpoint allows to update a specific company member by ID.
**PUT:** Requires all fields (first_name, last_name, account_expiration_date, language).
**PATCH:** Allows partial updates - only provide the fields you want to change.
**Permissions:**
- Admin, SysAdmin, Account Manager: can update any user
- Company Admin: can update users from their own company only
**Throttling:** 60 requests per minute
It is API Key protected and restricted to users with appropriate permissions.
# Update current user profile
Source: https://docs.lighton.ai/api-reference-v3/users/update-current-user-profile
/api-reference/openapi-v3.yaml patch /api/v3/users/me
Updates settings for the authenticated user.
**Updatable fields:**
- `language`: User's preferred language
- `skip_help_step`: Whether to skip help steps in the UI
- `agent_instructions`: Custom instructions for AI agents
- `terms_accepted`: Accept the latest terms and conditions (can only be set to true)
**Note:** Setting `terms_accepted` to false will result in a 400 error.
# Update roles of a company member
Source: https://docs.lighton.ai/api-reference-v3/users/update-roles-of-a-company-member
/api-reference/openapi-v3.yaml put /api/v3/users/{id}/roles
This endpoint allows you to update the roles of a company member.
Note that this will update all the roles of the member.
It is restricted to admin and company admin users.
# Add a member to a workspace
Source: https://docs.lighton.ai/api-reference-v3/workspaces/add-a-member-to-a-workspace
/api-reference/openapi-v3.yaml post /api/v3/workspaces/{id}/members
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Add a new member (user or group) to a custom workspace you own.
# Create a workspace
Source: https://docs.lighton.ai/api-reference-v3/workspaces/create-a-workspace
/api-reference/openapi-v3.yaml post /api/v3/workspaces
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Create a new custom workspace in the authenticated user's company. Requires the company to have `allow_user_workspace_creation` enabled. Returns **403** if workspace creation is disabled for the company.
The creator is automatically added as OWNER.
# Delete a workspace (deprecated)
Source: https://docs.lighton.ai/api-reference-v3/workspaces/delete-a-workspace-deprecated
/api-reference/openapi-v3.yaml delete /api/v3/workspaces/{id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
**Deprecated.** This endpoint has been removed. Please delete the workspace from the admin panel.
# List workspace members
Source: https://docs.lighton.ai/api-reference-v3/workspaces/list-workspace-members
/api-reference/openapi-v3.yaml get /api/v3/workspaces/{id}/members
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Get the list of members for an owned workspace by the authenticated user.
Please use instance or company level endpoints to access the workspaces as admin
# List workspaces
Source: https://docs.lighton.ai/api-reference-v3/workspaces/list-workspaces
/api-reference/openapi-v3.yaml get /api/v3/workspaces
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Get the list of accessible workspaces for the authenticated user. Returns workspaces where the user is set as member (through any group: private, company, or custom). Please use instance or company level endpoints to access the workspaces as admin.
**Filtering:** All users see only workspaces where they are members. Admin users should use `/api/v3/instance/workspaces` or `/api/v3/company/workspaces` for administrative access.
Results ordered by creation date (newest first), paginated with 20 elements per page by default.
# Remove a group from a custom workspace
Source: https://docs.lighton.ai/api-reference-v3/workspaces/remove-a-group-from-a-custom-workspace
/api-reference/openapi-v3.yaml delete /api/v3/workspaces/{id}/members/groups/{group_id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Remove a group from a custom workspace you own. The authenticated user must be an owner of the workspace and belong to the same company as the workspace. Only CUSTOM workspaces allow group removal. Cannot remove the only remaining owner group from the workspace.
# Remove a user from a workspace
Source: https://docs.lighton.ai/api-reference-v3/workspaces/remove-a-user-from-a-workspace
/api-reference/openapi-v3.yaml delete /api/v3/workspaces/{id}/members/users/{user_id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Remove a user from a custom workspace you own. The authenticated user must be an owner of the workspace and belong to the same company as the workspace.
# Replace all workspace members
Source: https://docs.lighton.ai/api-reference-v3/workspaces/replace-all-workspace-members
/api-reference/openapi-v3.yaml put /api/v3/workspaces/{id}/members
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Bulk replace the entire list of members for a custom workspace you own. The authenticated user must be an owner of the workspace and belong to the same company as the workspace. All given users and groups must belong to the same company as the workspace.
# Retrieve a workspace
Source: https://docs.lighton.ai/api-reference-v3/workspaces/retrieve-a-workspace
/api-reference/openapi-v3.yaml get /api/v3/workspaces/{id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Retrieve a workspace by ID. Returns workspace in V3 format.
**Access:** Instance-level users (Sys Admin, Account Manager, Admin, DPO Admin) can retrieve any workspace. Company-level users (Company Admin, Company DPO) can retrieve workspaces in their company. Regular users can retrieve workspaces where they are members.
**Member Visibility:** Instance-level users and company-level users see all members. Workspace OWNER sees members. EDITOR and VIEWER do not see members.
Returns 403 for both non-existent and unauthorized workspaces.
# Update a workspace
Source: https://docs.lighton.ai/api-reference-v3/workspaces/update-a-workspace
/api-reference/openapi-v3.yaml patch /api/v3/workspaces/{id}
⚠️ **ALPHA ENDPOINT** - This endpoint is in alpha and subject to breaking changes. Use with caution in production environments.
Partially update a given workspace. The authenticated user must be an owner of the workspace.
**Fields:**
- **name** (string, optional): Desired workspace name (max 100 characters, cannot be empty)
- **description** (string, optional): Desired workspace description. Send empty string or null to clear.
**Restrictions:**
- Only CUSTOM workspaces can be updated (PERSONAL and COMPANY workspaces cannot be modified)
- Only workspace OWNER can update (EDITOR role, instance admins, and company admins cannot use this endpoint)
- Only name and description can be updated (members cannot be updated via this endpoint)
**Note:** To update workspace members, use the dedicated member management endpoints.
# Create a completion feedback
Source: https://docs.lighton.ai/api-reference-v2/feedbacks/create-a-completion-feedback
/api-reference/openapi-v2.yaml post /api/v2/rate/{feedback_type_id}/{completion_id}
Log a feedback of a given type and linked to an existing completion.
# List feedback types
Source: https://docs.lighton.ai/api-reference-v2/feedbacks/list-feedback-types
/api-reference/openapi-v2.yaml get /api/v2/feedback/feedback-types/
API endpoint for viewing and editing feedback types.
# List feedback types
Source: https://docs.lighton.ai/api-reference-v2/feedbacks/list-feedback-types-1
/api-reference/openapi-v2.yaml get /api/v2/feedback/feedback-types/{id}/
API endpoint for viewing and editing feedback types.
# Extract chunks from knowledge base
Source: https://docs.lighton.ai/api-reference-v2/files-search/extract-chunks-from-knowledge-base
/api-reference/openapi-v2.yaml post /api/v2/query
This endpoint can be used to retrieve top n chunks per query.
The query can be a single string or a list of strings.
The `collection` field can be used to specify the collection to query, which defaults to `base_collection`.
An optional integer `n` can be provided in order to retrieve top n chunks, which defaults to 5 if not specified.
**Response**: Returns an array of results, one for each input query.
# Filter most relevant chunks
Source: https://docs.lighton.ai/api-reference-v2/files-search/filter-most-relevant-chunks
/api-reference/openapi-v2.yaml post /api/v2/filter/chunks
This endpoint can be used to filter document chunks based on a given query.
The query should be a single string.
Chunk ids should be a list of strings. Each string should be the UUID of an existing document chunk.
The `model` field should be the name of the model to use for filtering.
An optional integer `n` can be provided, which can be used to return the first `n` chunks that pass the filter.
# Reformulate an extraction query
Source: https://docs.lighton.ai/api-reference-v2/files-search/reformulate-an-extraction-query
/api-reference/openapi-v2.yaml post /api/v2/query/reformulation
This endpoint can be used to reformulate a query in order to enhance retrieval.
The query should be a single string or a list of string with up to 10 queries.
The `model` field should be the name of the model to use for query formulation.
# Delete a document
Source: https://docs.lighton.ai/api-reference-v2/files/delete-a-document
/api-reference/openapi-v2.yaml delete /api/v2/files/{id}
Deletes a document and its associated embeddings.
This endpoint deletes a document from the database and removes its associated embeddings.
The document is identified by its unique ID.
This operation requires authentication and permission to delete the document.
# Generate an answer with a single document
Source: https://docs.lighton.ai/api-reference-v2/files/generate-an-answer-with-a-single-document
/api-reference/openapi-v2.yaml post /api/v2/files/{id}/ask-question
This endpoint can be used to ask a question about a document.
The question is required and should be a string .
The id of the document is a path parameter.
# List available documents
Source: https://docs.lighton.ai/api-reference-v2/files/list-available-documents
/api-reference/openapi-v2.yaml get /api/v2/files
This endpoint can be used to get the list of available documents for your user account, with optional filtering by workspace, private, or company scope.
# Retrieve a document
Source: https://docs.lighton.ai/api-reference-v2/files/retrieve-a-document
/api-reference/openapi-v2.yaml get /api/v2/files/{id}
Retrieve a single document by its ID.
Only documents that the requesting user is authorized to access will be returned.
# Retrieve chunks from a document
Source: https://docs.lighton.ai/api-reference-v2/files/retrieve-chunks-from-a-document
/api-reference/openapi-v2.yaml get /api/v2/files/{id}/chunks
This endpoint returns all chunks for a given document.
# Upload a document
Source: https://docs.lighton.ai/api-reference-v2/files/upload-a-document
/api-reference/openapi-v2.yaml post /api/v2/files
Endpoint to upload documents.
Documents are saved to the persistent storage, parsed, chunked and embedded.
The file is indexed as a document in the SQL database, with its chunks, and related to its owner, company and collection for permission application.
To specify a workspace, set `collection_type` to one of the following:
- `private` for a personal workspace
- `company` for a company workspace
- `workspace` for other workspaces
If `workspace` is specified, `workspace_id` must be provided.
If `collection_type` is not specified, it defaults to `company`.
# Create text tokens
Source: https://docs.lighton.ai/api-reference-v2/models/create-text-tokens
/api-reference/openapi-v2.yaml post /api/v2/tokenize
This endpoint can be used to convert strings into tokens.
It is a simple proxy forwarding your requests to the desired model.
Any LightOn model is deployed on a vLLM-based image.
**Supported Input:**
- `prompt`: Simple text string to tokenize
- `messages`: Array of chat messages to tokenize (alternative to prompt)
# Generate a chat completion
Source: https://docs.lighton.ai/api-reference-v2/models/generate-a-chat-completion
/api-reference/openapi-v2.yaml post /api/v2/chat/completions
This endpoint can be used to generate chat completions from a Large Language Model.
It is a simple proxy forwarding your requests to the desired model.
Any LightOn model is deployed on a vLLM-based image.
**Response Types:**
- When `stream=false` **(default)**: Returns a complete JSON response with all completion choices
- When `stream=true`: Returns Server-Sent Events (SSE) with incremental completion chunks
**Streaming Format:**
Each SSE event contains a JSON object with incremental text. The stream ends with `data: [DONE]`.
# Generate a text completion
Source: https://docs.lighton.ai/api-reference-v2/models/generate-a-text-completion
/api-reference/openapi-v2.yaml post /api/v2/completions
This endpoint can be used to generate completions from a Large Language Model.
It is a simple proxy forwarding your requests to the desired model.
Any LightOn model is deployed on a vLLM-based image.
**Response Types:**
- When `stream=false` **(default)**: Returns a complete JSON response with all completion choices
- When `stream=true`: Returns Server-Sent Events (SSE) with incremental completion chunks
**Streaming Format:**
Each SSE event contains a JSON object with incremental text. The stream ends with `data: [DONE]`.
# List available models
Source: https://docs.lighton.ai/api-reference-v2/models/list-available-models
/api-reference/openapi-v2.yaml get /api/v2/models
This endpoint can be used to get the list of available models for your API key.
# Get platform load status
Source: https://docs.lighton.ai/api-reference-v2/platform-status/get-platform-load-status
/api-reference/openapi-v2.yaml get /api/v2/platform/status
Returns the current platform load status including whether any models are experiencing high load.
# Get company chat sessions report
Source: https://docs.lighton.ai/api-reference-v2/reporting/get-company-chat-sessions-report
/api-reference/openapi-v2.yaml get /api/v2/reporting/chat-sessions/
This endpoint allows retrieving company chat sessions report.
The start date is required, but the end date is by default today.
It is restricted to admin and company admin users.
Admin users can optionally filter by company.
# Get company members report
Source: https://docs.lighton.ai/api-reference-v2/reporting/get-company-members-report
/api-reference/openapi-v2.yaml get /api/v2/reporting/users/
This endpoint allows you to retrieve a company's members report.
The start date is required, but the end date is by default today.
It is restricted to admin and company admin users.
Admin users can optionally filter by company.
# Get company tools report
Source: https://docs.lighton.ai/api-reference-v2/reporting/get-company-tools-report
/api-reference/openapi-v2.yaml get /api/v2/reporting/tools/
This endpoint allows you to retrieve a company's tools and third-party tools report.
The start date is required, but the end date is by default today.
It is restricted to admin and company admin users.
Admin users can optionally filter by company.
# Get documents usage report
Source: https://docs.lighton.ai/api-reference-v2/reporting/get-documents-usage-report
/api-reference/openapi-v2.yaml get /api/v2/reporting/used-documents/
This endpoint allows retrieving company used documents report.
The start date is required, but the end date is by default today.
It is restricted to admin and company admin users.
Admin users can optionally filter by company.
# Get feedbacks report
Source: https://docs.lighton.ai/api-reference-v2/reporting/get-feedbacks-report
/api-reference/openapi-v2.yaml get /api/v2/reporting/chats-feedback/
This endpoint allows retrieving company chats feedback report.
The start date is required, but the end date is by default today.
It is restricted to admin and company admin users.
Admin users can optionally filter by company.
# Create a group
Source: https://docs.lighton.ai/api-reference-v2/scim/create-a-group
/api-reference/openapi-v2.yaml post /scim/v2/Groups
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
We disable PUT as Microsoft does not need it
# Create a user
Source: https://docs.lighton.ai/api-reference-v2/scim/create-a-user
/api-reference/openapi-v2.yaml post /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# Delete a group
Source: https://docs.lighton.ai/api-reference-v2/scim/delete-a-group
/api-reference/openapi-v2.yaml delete /scim/v2/Groups
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
We disable PUT as Microsoft does not need it
# Delete a user
Source: https://docs.lighton.ai/api-reference-v2/scim/delete-a-user
/api-reference/openapi-v2.yaml delete /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# List or Retrieve a group
Source: https://docs.lighton.ai/api-reference-v2/scim/list-or-retrieve-a-group
/api-reference/openapi-v2.yaml get /scim/v2/Groups
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
We disable PUT as Microsoft does not need it
# List or Retrieve resource types
Source: https://docs.lighton.ai/api-reference-v2/scim/list-or-retrieve-resource-types
/api-reference/openapi-v2.yaml get /scim/v2/ResourceTypes
# List or Retrieve schemas
Source: https://docs.lighton.ai/api-reference-v2/scim/list-or-retrieve-schemas
/api-reference/openapi-v2.yaml get /scim/v2/Schemas
# List or Retrieve users
Source: https://docs.lighton.ai/api-reference-v2/scim/list-or-retrieve-users
/api-reference/openapi-v2.yaml get /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# Replace a user
Source: https://docs.lighton.ai/api-reference-v2/scim/replace-a-user
/api-reference/openapi-v2.yaml put /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# Retrieve Service Provider Configuration
Source: https://docs.lighton.ai/api-reference-v2/scim/retrieve-service-provider-configuration
/api-reference/openapi-v2.yaml get /scim/v2/ServiceProviderConfig
# Update a group
Source: https://docs.lighton.ai/api-reference-v2/scim/update-a-group
/api-reference/openapi-v2.yaml patch /scim/v2/Groups
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
We disable PUT as Microsoft does not need it
# Update a user
Source: https://docs.lighton.ai/api-reference-v2/scim/update-a-user
/api-reference/openapi-v2.yaml patch /scim/v2/Users
Automatic filtering on company defined in get_extra_model_filter_kwargs_getter()
# Add a file to an upload session
Source: https://docs.lighton.ai/api-reference-v2/upload-sessions/add-a-file-to-an-upload-session
/api-reference/openapi-v2.yaml post /api/v2/upload-session/{uuid}
Upload a new file to an existing upload session
# Create an upload session
Source: https://docs.lighton.ai/api-reference-v2/upload-sessions/create-an-upload-session
/api-reference/openapi-v2.yaml post /api/v2/upload-session
Create a new upload session
# Deactivate upload sessions
Source: https://docs.lighton.ai/api-reference-v2/upload-sessions/deactivate-upload-sessions
/api-reference/openapi-v2.yaml post /api/v2/upload-session/deactivate
Interrupt and deactivate ongoing upload sessions of the user sending the request.
The pending documents in the upload sessions are deleted.
# Delete an upload session
Source: https://docs.lighton.ai/api-reference-v2/upload-sessions/delete-an-upload-session
/api-reference/openapi-v2.yaml delete /api/v2/upload-session/{uuid}
Delete a session and all its documents
# Retrieve an upload session
Source: https://docs.lighton.ai/api-reference-v2/upload-sessions/retrieve-an-upload-session
/api-reference/openapi-v2.yaml get /api/v2/upload-session/{uuid}
Retrieve the details of an upload session.
# Retrieve a company member
Source: https://docs.lighton.ai/api-reference-v2/users/retrieve-a-company-member
/api-reference/openapi-v2.yaml get /api/v2/users/{id}
This endpoint allows you to retrieve the details of a company member.
It is restricted to admin and company admin users.
# Update a company member
Source: https://docs.lighton.ai/api-reference-v2/users/update-a-company-member
/api-reference/openapi-v2.yaml patch /api/v2/users/{id}/update/
This endpoint allows you to update the details of a company member.
It is restricted to admin and company admin users.
# Update groups of a company member
Source: https://docs.lighton.ai/api-reference-v2/users/update-groups-of-a-company-member
/api-reference/openapi-v2.yaml put /api/v2/users/{id}/groups/update/
Warning: This endpoint will be deleted in the future, use the /users//roles/update/ instead.This endpoint allows you to update the groups of a company member.
Note that this will update all the groups of the member.
It is restricted to admin and company admin users.
# Update roles of a company member
Source: https://docs.lighton.ai/api-reference-v2/users/update-roles-of-a-company-member
/api-reference/openapi-v2.yaml put /api/v2/users/{id}/roles/update/
This endpoint allows you to update the roles of a company member.
Note that this will update all the roles of the member.
It is restricted to admin and company admin users.
# Update workspaces of a company member
Source: https://docs.lighton.ai/api-reference-v2/users/update-workspaces-of-a-company-member
/api-reference/openapi-v2.yaml put /api/v2/users/{id}/workspaces/update/
This endpoint allows you to update the workspaces of a company member.
Note that this will update all the workspaces of the member.
It is restricted to admin and company admin users.
# Create a workspace
Source: https://docs.lighton.ai/api-reference-v2/workspaces/create-a-workspace
/api-reference/openapi-v2.yaml post /api/v2/companies/{id}/workspaces/create/
This endpoint allows you to create a workspace within a specific company.
This is useful for organizing and managing different projects or groups within the company.
It is restricted to admin and company admin users.
# List workspaces of a company
Source: https://docs.lighton.ai/api-reference-v2/workspaces/list-workspaces-of-a-company
/api-reference/openapi-v2.yaml get /api/v2/companies/{id}/workspaces/
This endpoint allows you to create a workspace within a specific company.
This is useful for organizing and managing different projects or groups within the company.
It is restricted to admin and company admin users.
# Retrieve a workspace
Source: https://docs.lighton.ai/api-reference-v2/workspaces/retrieve-a-workspace
/api-reference/openapi-v2.yaml get /api/v2/workspaces/{id}
This endpoint allows to retrieve a workspace with his relations (members and collections).
It is restricted to admin and company admin users.
# Update a workspace
Source: https://docs.lighton.ai/api-reference-v2/workspaces/update-a-workspace
/api-reference/openapi-v2.yaml patch /api/v2/workspaces/{id}/update/
This endpoint allows you to update a workspace within a company.
It is restricted to admin and company admin users.
# Update workspace members
Source: https://docs.lighton.ai/api-reference-v2/workspaces/update-workspace-members
/api-reference/openapi-v2.yaml put /api/v2/workspaces/{id}/members/update/
This endpoint allows you to update the members of a workspace.
Note that this will update all the members of the workspace.
It is restricted to admin and company admin users.