Docs update (#23429)

Follow-up based on comments from
https://github.com/twentyhq/twenty/pull/23266

<!-- This is an auto-generated description by cubic. -->
<a
href="https://cubic.dev/pr/twentyhq/twenty/pull/23429?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->

---------

Co-authored-by: Félix Malfait <felix@twenty.com>
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
This commit is contained in:
BOHEUS
2026-07-28 18:37:49 +02:00
committed by GitHub
parent f5da810e59
commit e5ac9f5b8b
75 changed files with 226 additions and 241 deletions
@@ -22,7 +22,7 @@ The password you set during the first installation becomes permanently stored in
⚠️ WARNING: Following steps will PERMANENTLY DELETE all database data! ⚠️
Only proceed if this is a fresh installation with no important data.
In order to update the `PG_DATABASE_PASSWORD` you need to:
To update the `PG_DATABASE_PASSWORD`, you need to:
```sh
# Update the PG_DATABASE_PASSWORD in .env
docker compose down --volumes
@@ -31,7 +31,7 @@ docker compose up -d
#### CR line breaks found [Windows]
This is due to the line break characters of Windows and the git configuration. Try running:
This happens because of Windows line-ending characters combined with your Git configuration. Try running:
```
git config --global core.autocrlf false
@@ -43,11 +43,11 @@ Then delete the repository and clone it again.
During Twenty installation, you need to provision your postgres database with the right schemas, extensions, and users.
If you're successful in running this provisioning, you should have `default` and `metadata` schemas in your database.
If you don't, make sure you don't have more than one postgres instance running on your computer.
If you don't, make sure you don't have more than one PostgreSQL instance running on your computer.
#### Cannot find module 'twenty-emails' or its corresponding type declarations.
You have to build the package `twenty-emails` before running the initialization of the database with `npx nx run twenty-emails:build`
You have to build the `twenty-emails` package (`npx nx run twenty-emails:build`) before running the database initialization.
#### Missing twenty-x package
@@ -55,7 +55,7 @@ Make sure to run yarn in the root directory and then run `npx nx server:dev twen
#### Lint on Save not working
This should work out of the box with the Oxc extension (`oxc.oxc-vscode`) installed. If this doesn't work try adding this to your vscode setting (on the dev container scope):
This should work out of the box with the Oxc extension (`oxc.oxc-vscode`) installed. If this doesn't work, try adding this to your VS Code settings (dev container scope):
```
"editor.codeActionsOnSave": {
@@ -65,7 +65,7 @@ This should work out of the box with the Oxc extension (`oxc.oxc-vscode`) instal
}
```
#### While running `npx nx start` or `npx nx start twenty-front`, Out of memory error is thrown
#### While running `npx nx start` or `npx nx start twenty-front`, an out-of-memory error is thrown
Run only the services you need, instead of `npx nx start`. For instance, if you work on the server, run only `npx nx worker twenty-server`
@@ -74,7 +74,7 @@ If you tried to run only `npx nx run twenty-server:start` on WSL and it's failin
`FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory`
Workaround is to execute below command in terminal or add it in .bashrc profile to get setup automatically:
A workaround is to run the following command in your terminal, or add it to your `.bashrc` profile so it's applied automatically:
`export NODE_OPTIONS="--max-old-space-size=8192"`
@@ -82,10 +82,10 @@ The --max-old-space-size=8192 flag sets an upper limit of 8GB for the Node.js he
Reference: https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048
**If it does not work:**
Investigate which processes are taking you most of your machine RAM. At Twenty, we noticed that some VScode extensions were taking a lot of RAM so we temporarily disable them.
Investigate which processes are taking up most of your machine's RAM. At Twenty, we noticed some VS Code extensions were taking up a lot of RAM, so we temporarily disabled them.
**If it does not work:**
Restart your machine helps to clean up ghost processes.
Restarting your machine helps clean up ghost processes.
#### While running `npx nx start` there are weird [0] and [1] in logs
@@ -97,19 +97,19 @@ Most of the time, it's because the `worker` is not running in the background. Tr
npx nx worker twenty-server
```
#### Cannot connect my Microsoft 365 account
#### Cannot connect my Microsoft 365 account to Twenty
Most of the time, it's because your admin has not enabled the Microsoft 365 Licence for your account. Check [https://admin.microsoft.com/](https://admin.microsoft.com/Adminportal/Home).
If you have an error code `AADSTS50020`, it probably means that you are using a personal Microsoft account. This is not supported yet. More info [here](https://learn.microsoft.com/fr-fr/troubleshoot/entra/entra-id/app-integration/error-code-aadsts50020-user-account-identity-provider-does-not-exist)
#### While running `yarn` warnings appear in console
#### While running `yarn`, warnings appear in the console
Warnings are informing about pulling additional dependencies which aren't explicitly stated in `package.json`, so as long as no breaking error appears, everything should work as expected.
#### When user accesses login page, error about unauthorized user trying to access workspace appears in logs
#### When a user accesses the login page, an error about an unauthorized user trying to access a workspace appears in the logs
That's expected as user is unauthorized when logged out since its identity is not verified.
That's expected as the user is unauthorized when logged out, since their identity has not been verified.
#### How to check if your worker is running?
- Go to [webhook-test.com](https://webhook-test.com/) and copy **Your Unique Webhook URL**.
@@ -129,9 +129,9 @@ That's expected as user is unauthorized when logged out since its identity is no
</div>
- If a **POST request** is received, your worker is running successfully. Otherwise, you need to troubleshoot your worker.
#### Front-end fails to start and returns error TS5042: Option 'project' cannot be mixed with source files on a command line
#### Front-end fails to start and returns error TS5042: Option 'project' cannot be mixed with source files on the command line
Comment out checker plugin in `packages/twenty-ui/vite-config.ts` like in example below
Comment out the checker plugin in `packages/twenty-ui/vite-config.ts`, as shown in the example below:
```
plugins: [
react({ jsxImportSource: 'react' }),
@@ -156,7 +156,7 @@ plugins: [
#### Admin panel not accessible
Run `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'you@yourdomain.com';` in database container to get access to admin panel.
Run `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'you@yourdomain.com';` in the database container to get access to the admin panel.
#### When running workflow, workflow run fails with "Logic function execution is disabled. Set LOGIC_FUNCTION_TYPE to LOCAL or LAMBDA to enable."
@@ -164,7 +164,7 @@ In production, logic functions are disabled by default. Set the `LOGIC_FUNCTION_
#### When I type a message in AI chat, it doesn't answer immediately and I must refresh the page to see the answer
Add following block to nginx config
That means your reverse proxy is missing the configuration for stream-based API responses. Below is an example Nginx configuration:
```
location ~* ^/api/.*stream|\/graphql\/stream {
proxy_pass http://twenty_backend;
@@ -183,7 +183,7 @@ add_header X-Accel-Buffering no always;
}
```
### 1-click Docker compose
### 1-click Docker Compose
#### Unable to Log In
@@ -199,7 +199,7 @@ If you can't log in after setup:
docker compose up -d
```
Note the database:reset command will completely erase your database and recreate it from scratch.
Note that the `database:reset` command will completely erase your database and recreate it from scratch.
#### Connection Issues Behind a Reverse Proxy
@@ -15,7 +15,7 @@ description: سواء كنت بحاجة إلى مساعدة في البدء أو
تعاون مع شركاء Twenty المعتمدين للحصول على تخصيصات وعمليات تكامل متقدمة، ودعم مخصص لعملية التنفيذ.
<CardGroup cols={٢}>
<CardGroup cols={2}>
<Card title="تصفح الشركاء المعتمدين" icon="magnifying-glass" href="https://twenty.com/partners/list?ref=docs-implementation-services">
اعثر على شريك وتواصل معه مباشرة — وقُم بالتصفية حسب المنطقة واللغة والخبرة.
</Card>
+8 -1
View File
@@ -196,8 +196,15 @@ export const ChartIcon = ({ icon, size = 20 }) => {
<path d="M11 7h-4" />
</svg>
),
'table': (
<svg xmlns="http://www.w3.org/2000/svg" width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M3 5a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14" />
<path d="M3 10h18" />
<path d="M10 3v18" />
</svg>
)
};
// TODO: add table icon
const selectedIcon = icons[icon];
if (!selectedIcon) {
@@ -5,7 +5,7 @@ description: An intelligent assistant that helps you interact with your CRM data
## Overview
An intelligent assistant that helps you interact with your CRM data using natural language.
Ask questions in natural language and the assistant retrieves and explains your CRM data for you.
## Capabilities
@@ -13,7 +13,7 @@ description: Frequently asked questions about AI features in Twenty.
</Accordion>
<Accordion title="Do AI agents have access to all my data?">
AI agents will operate under the permission system. You can assign specific roles to AI agents under **Settings → Members → Roles**, giving you full control over what data they can access and what actions they can perform.
AI agents operate under the permission system. You can assign specific roles to AI agents under **Settings → Members → Roles**, giving you full control over what data they can access and what actions they can perform.
</Accordion>
<Accordion title="How do AI credits work?">
@@ -24,8 +24,8 @@ description: Frequently asked questions about AI features in Twenty.
On cloud, you can use only AI models provided by Twenty. On your self-hosted instance, you can use your own AI models after obtaining an Organization license.
</Accordion>
<Accordion title="I don't see a role I assigned to AI agent, where is it?">
By default, the Roles list is filtered to roles assignable to workspace members. If a role is assignable only to AI agents, you need to change filter to include AI-agent roles.
<Accordion title="I don't see a role I assigned to an AI agent, where is it?">
By default, the Roles list is filtered to roles assignable to workspace members. If a role is assignable only to AI agents, you need to change the filter to include AI-agent roles.
</Accordion>
</AccordionGroup>
@@ -15,7 +15,7 @@ Cost scales with the work. Everyday automation and quick AI messages cost a tiny
| What you do | Roughly costs | What that means |
|-------------|---------------|-----------------|
| Run a standard workflow step (search, create, update records) or trigger an app's logic function | $0.0001 | **10,000 runs per credit** |
| Run a standard workflow step (search, create, or update records) or trigger an app's logic function | $0.0001 | **10,000 runs per credit** |
| Call an external API or run a code node | A small fraction of a credit | Thousands per credit |
| Send a quick AI chat message or simple AI step | A fraction of a cent | Hundreds per credit |
| Run a large AI agent task (e.g. "configure 10 workspace objects") | Can run to **~$1 or more** | A few per credit |
@@ -26,12 +26,12 @@ For most teams, standard automations are effectively free — you'll only make a
</Note>
<Note>
Not every app charges for its runs. Call Recorder and Last contact react to every email and calendar event imported into your workspace, so their logic function runs are free. You are still charged for the metered work they do, such as recorded call minutes.
Not every app charges for its runs. Call Recorder and Last Contact react to every email and calendar event imported into your workspace, so their logic function runs are free. You are still charged for the metered work they do, such as recorded call minutes.
</Note>
## How AI usage is metered
When an action calls an AI model, we measure the exact tokens used and price them at **the model provider's published rates**, then convert that dollar amount straight into credits — so what you spend tracks the real cost of the work, not a marked-up internal rate. A short chat message costs a fraction of a cent. A large agent task — say, configuring ten workspace objects — makes many model calls over a growing context, so it can add up to a dollar or more. You're billed for what you actually use, down to the token.
When an action calls an AI model, we measure the exact tokens used and price them at **the model provider's published rates**, then convert that dollar amount straight into credits — so what you spend tracks the real cost of the work, not a marked-up internal rate. A short chat message costs a fraction of a cent. A large agent task — say, configuring 10 workspace objects — makes many model calls over a growing context, so it can add up to a dollar or more. You're billed for what you actually use, down to the token.
Cost varies by model: a lightweight model is dramatically cheaper per message than a top-tier reasoning model. You can see the per-action breakdown — including which model was used — in **Settings → Billing**.
@@ -39,21 +39,21 @@ Cost varies by model: a lightweight model is dramatically cheaper per message th
Every subscription includes credits, and the amount depends on your **billing cycle**, not your plan:
| Billing Cycle | Included Credits | Equivalent usage |
| Billing Cycle | Included Credits | Equivalent Usage |
|---------------|------------------|------------------|
| Monthly | 5 / month | ~$5 of usage each month |
| Yearly | 50 / year | ~$50 of usage each year |
These credits are designed to cover everyday automation comfortably. Five credits covers tens of thousands of standard automation steps or hundreds of quick AI messages — though a handful of large, multi-step agent tasks can use it up faster. You can top up at any time (see below).
These credits are designed to cover everyday automation comfortably. Five credits cover tens of thousands of standard automation steps or hundreds of quick AI messages — though a handful of large, multi-step agent tasks can use them up faster. You can top up at any time (see below).
## Credit rollover
Unused credits roll over automatically to the next billing period.
- **Cap**: Rollover is capped at one period's full allocation, so you'll never carry over more than your plan provides per period.
- **Cap**: Rollover is capped at one period's full allocation, so you'll never carry over more than your billing cycle provides per period.
- **Visibility**: When you have rollover credits, they appear as a separate **Rollover Credits** line in **Settings → Billing**, alongside your **Total Available** balance.
## Monitoring Usage
## Monitoring usage
Keep track of your balance and where it's going:
@@ -68,7 +68,7 @@ Reviewing this regularly makes it easy to spot a heavy workflow early and decide
If you run out — or want a buffer before a big automation push — you can buy additional credit packs at any time:
1. Go to **Settings → Billing**
2. Click **Increase** button
3. Select the amount you need and accept changes
2. Click the **Increase** button
3. Select the amount you need and accept the changes
Purchased credits are added to your available balance immediately.
@@ -50,7 +50,7 @@ Premium features are only available on the Organization plans (Cloud or Self-Hos
- **Audit logs**: Check what each workspace member has been doing
- **Email campaigns**: Plan which emails should be sent (available soon)
- **Unlimited workspaces**: Create as many workspaces as you want (self-hosted only)
- **Private source code**: No requirement to publish changes to publicly available repository (self-hosted only)
- **Private source code**: No requirement to publish changes to a publicly available repository (self-hosted only)
## Switching Plans
@@ -7,7 +7,7 @@ description: Frequently asked questions about Twenty pricing and billing.
<AccordionGroup>
<Accordion title="Can I use Twenty for free while self-hosting?">
Yes, you can use Twenty for free while self-hosting. You will get access to everything included in the Pro (Cloud) plan, except the support from our core-team. Support is accessible via our Discord community.
Yes, you can use Twenty for free while self-hosting. You will get access to everything included in the Pro (Cloud) plan, except the support from our core team. Support is accessible via our Discord community.
If you want to self-host and need the Premium features (SSO, row-level permissions and more), you can choose the paid Organization (Self-Hosted) license. This also includes support from the Twenty team and removes the requirement to publish custom code as open-source before distributing.
</Accordion>
@@ -20,15 +20,15 @@ Premium features are only available on the Organization plans (Cloud or Self-Hos
- **Audit logs**: Check what each workspace member has been doing
- **Email campaigns**: Plan which emails should be sent (available soon)
- **Unlimited workspaces**: Create as many workspaces as you want (self-hosted only)
- **Private source code**: No requirement to publish changes to publicly available repository (self-hosted only)
- **Private source code**: No requirement to publish changes to a publicly available repository (self-hosted only)
</Accordion>
<Accordion title="Is Organization plan on cloud and Organization plan on self-hosted the same?">
<Accordion title="Are the Cloud and Self-Hosted Organization plans the same?">
They offer the same premium features. However, a cloud subscription cannot be used for self-hosted deployments. Self-hosted requires an Enterprise key.
</Accordion>
<Accordion title="Do you offer free seats for view-only users?">
We do not offer free seats. Pricing is per user and each user needs a licence to access Twenty.
We do not offer free seats. Pricing is per user and each user needs a license to access Twenty.
</Accordion>
<Accordion title="Where can I switch my subscription to the Organization plan?">
@@ -59,10 +59,10 @@ The number of credits depends on your billing cycle, not your plan:
<Accordion title="How does workflow credit consumption work?">
Each workflow action consumes credits based on its complexity:
- **Basic internal operations** (such as search, update, create records) consume very few credits
- **Basic internal operations** (such as search, update, or create records) consume very few credits
- **More complex operations** like code nodes and requests to external services consume more credits
- **AI prompts** also consume more credits based on usage
- **Apps** also consume more credits similarly to Code node
- **Apps** also consume more credits similarly to code nodes
Credits are deducted in real-time when workflows or apps execute. You can monitor your usage in **Settings → Billing** to track consumption and remaining credits.
</Accordion>
@@ -72,7 +72,7 @@ You can buy additional credits under `Settings → Billing`.
</Accordion>
<Accordion title="Can I buy more workflow credits only for 1 month?">
Yes, go to `Settings → Billing`, click `Increase` button, choose how many credits you want and confirm, they'll be applied for current billing period. Then click `Increase` button again, change value back to original and confirm, downgrade will be applied starting next billing period.
Yes, go to `Settings → Billing`, click the `Increase` button, choose how many credits you want, and confirm. They'll be applied for the current billing period. Then click the `Increase` button again, change the value back to the original, and confirm — the downgrade will be applied starting the next billing period.
</Accordion>
</AccordionGroup>
@@ -100,6 +100,6 @@ Workspace seat counts are synchronized with the payment system every 6 hours; in
</Accordion>
<Accordion title="Why did I get an invoice for a new workspace member?">
When a new workspace member is added to workspace, an invoice is sent to cover the difference. When a workspace member is removed, the change is applied in the next standard monthly/yearly invoice.
When a new workspace member is added to the workspace, an invoice is sent to cover the difference. When a workspace member is removed, the change is applied in the next standard monthly/yearly invoice.
</Accordion>
</AccordionGroup>
@@ -17,7 +17,7 @@ Next to the Emails tab on records, you'll find a `Calendar` tab that contains th
- **People**: View all meetings scheduled with a specific contact
- **Companies**: See all meetings related to a company and its employees
- **Opportunities**: Access meeting history related to the company linked to this opportunity
- **Opportunities**: Access meeting history related to the company linked to the opportunity
### Viewing Meeting History
@@ -15,7 +15,7 @@ Email conversations appear in three main objects:
- **People**: View all emails exchanged with a specific contact
- **Companies**: See all emails related to a company and its employees
- **Opportunities**: Access email threads related to the company linked to this opportunity. Email threads from individual people on the opportunity are not shown yet.
- **Opportunities**: Access email threads related to the company linked to the opportunity. Email threads from individual people on the opportunity are not shown yet.
### Viewing Email Threads
@@ -62,7 +62,7 @@ For reference:
- **Group Emails**: Distribution lists and group emails are excluded
- **Excluded Folders**: Folders you've chosen not to sync (configured under Settings → Accounts → Email)
### Internal emails
### Internal Emails
Choose if internal emails are synchronized in Twenty:
1. Go to **Settings → General → Security**
2. Toggle **Sync Internal Emails** on/off
@@ -9,7 +9,7 @@ Twenty's calendar integration is designed to **sync and display** your existing
## Scheduling Meetings via Workflows
While it's not possible to schedule meetings manually, you can do them in Twenty using workflows
While it's not possible to schedule meetings manually, you can schedule them in Twenty using workflows.
1. Create a new workflow
2. Select any trigger depending on your needs
@@ -10,11 +10,11 @@ Twenty's email integration is designed to **sync and display** your email histor
When you view an email thread on a record page and click **Reply**, you're able to directly compose and send an email.
## How to send a message from Twenty
Prerequisite: mail connected account with possibility to send emails
1. Open Command menu with **Ctrl+K** or **CMD+K** shortcut
2. Click "Compose email" option
3. Choose recipients, add subject, body and attachments to your mail
4. Click "Send" button to send email
Prerequisite: a connected mail account with the ability to send emails
1. Open the Command menu with the **Ctrl+K** or **Cmd+K** shortcut
2. Click the "Compose email" option
3. Choose recipients, add subject, body and attachments to your email
4. Click the "Send" button to send the email
## What You Can Do Today
@@ -26,7 +26,7 @@ Prerequisite: mail connected account with possibility to send emails
## Sending Emails via Workflows
You **can send emails automatically using Workflows**. This is useful for:
You **can send emails automatically using workflows**. This is useful for:
- Automated follow-ups
- Notifications to contacts
- Triggered communications based on record changes
@@ -14,7 +14,7 @@ Twenty supports **unlimited email accounts per user**. This is useful if you man
1. Go to **Settings → Accounts**
2. Click **Add account**
3. Connect your additional Google, Microsoft account or any other mail provider supporting IMAP/SMTP protocols
3. Connect an additional Google or Microsoft account, or any other mail provider supporting IMAP/SMTP protocols
4. Configure sync settings for this mailbox
5. Repeat for each mailbox you want to connect
@@ -32,7 +32,7 @@ Emails from all your connected mailboxes are synced to Twenty and appear on:
- **Company records**: Based on the email domain
- **Opportunities**: Based on the linked company
<Note>Each email shows which mailbox it was sent from/received to, so you can track which account was used for each communication.</Note>
<Note>Each email shows which mailbox it was sent from or received in, so you can track which account was used for each communication.</Note>
## Important Notes
@@ -37,7 +37,7 @@ Control when contacts are created from emails:
- **Sent & Received**: Create contacts from all external emails
- **Sent Only**: Only create contacts from emails you send
## Internal emails
## Internal Emails
Messages between colleagues (same domain) can be synchronized in Twenty:
@@ -62,7 +62,7 @@ Choose different levels of visibility for your emails:
### Contact Auto-Creation
- **Deactivated**: No automatic contact creation
- **For messages sent & received**: Create contacts for all external email interactions
- **For messages sent and received**: Create contacts for all external email interactions
- **For messages sent only**: Create contacts only for emails you send
- **Note**: By default, internal emails (where all participants share your domain) are not synced to protect privacy
@@ -80,7 +80,7 @@ This is a workspace-wide setting (useful for universities or shared-domain organ
### Control which emails get synced with Message Folder Selection
Control which email folders sync with Twenty:
1. Go to **Settings → Accounts** and select your connected email account
3. Choose which folders to sync:
2. Choose which folders to sync:
- **Inbox**: Primary incoming emails
- **Sent**: Outgoing emails you've sent
- **Custom Folders**: Any specific folders you want to include
@@ -100,8 +100,8 @@ This gives you precise control over which emails appear in your CRM without sync
### Event Visibility
Choose what will be visible to other users in your workspace:
- **Everything**: The whole event details will be shared with your team
- **Metadata**: Only date & participants will be shared with your team
- **Everything**: The whole event's details will be shared with your team
- **Metadata**: Only date and participants will be shared with your team
### Contact Auto-Creation for Meetings
@@ -110,7 +110,7 @@ Choose what will be visible to other users in your workspace:
<Note>When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.</Note>
### Control which events get sync
### Control which events get synced
- **Meeting Import**: Automatically import calendar events
- **Contact Linking**: Link meetings to People and Company records
@@ -23,14 +23,14 @@ Dashboards in Twenty are organized in a hierarchy: **Dashboards → Tabs → Wid
Tabs help you organize your dashboard into logical sections.
### Creating Tabs
1. In edit mode, click **+** in the tab bar, side panel will open on the right
1. In edit mode, click **+** in the tab bar, and a side panel will open on the right
2. Name your tab (e.g., "Pipeline Overview", "Team Performance")
3. Add widgets to the tab
### Reordering Tabs
1. In edit mode, click and hold on the tab you want to move
2. Drag and drop to the new position
3. You can also click on the tab and use the command menu to move the tab to left or right
3. You can also click on the tab and use the command menu to move the tab to the left or right
### Deleting Tabs
1. In edit mode, click on the tab you want to delete
@@ -89,7 +89,7 @@ Display single key values prominently.
Embed external tools and content directly in your dashboard.
<Frame>
<img src="/images/user-guide/dashboard/dashboard-widget-table.png" alt="table"/>
<img src="/images/user-guide/dashboard/dashboard-widget-table.png" alt="Table chart"/>
</Frame>
**Best for:**
@@ -61,10 +61,10 @@ See [Import Relations](/user-guide/data-migration/capabilities/import-relations)
## Tips for Fewer Errors
1. **Download the template** to see expected format prior to importing your file
1. **Download the template** to see the expected format prior to importing your file
2. **Clean your data** in the spreadsheet first
3. **Import files in correct order** to import relations (Companies → People → Opportunities)
4. **Test with small batches** before full import
5. **Check for duplicates** before uploading
6. **Limit the size of your file to 10,000 records** per file
6. **Limit each file to 10,000 records**
@@ -80,7 +80,7 @@ Supported formats:
["jane@twenty.com","jane.doe@twenty.com"]
```
### Id Fields
### ID Fields
Specifying an `id` during import is optional. Twenty auto-generates one if not provided.
Use cases for mapping an `id` column:
@@ -115,7 +115,7 @@ See [here](#finding-api-names-for-select-fields) where to find the API names.
<Note>New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.</Note>
<Warning>
**Import overwrites, it does not add.**
**Import overwrites; it does not add.**
If a record already has `VALUE2` and `VALUE3` selected, and you import `["VALUE1"]`, the record will only have `VALUE1` after import. The previous selections are replaced, not merged.
</Warning>
@@ -24,7 +24,7 @@ Some relations can connect to different types of objects. This works in two ways
**Pattern 1: Many records linking to one record each from different object types**
Several Notes, Tasks, or Activities can each be attached to multiple object types at once:
Several Notes or Tasks can each be attached to multiple object types at once:
- **Notes** can be linked to one Person, one Company, and one Opportunity simultaneously
- **Tasks** can be linked to one Person, one Company, and one Opportunity simultaneously
@@ -5,24 +5,24 @@ description: Frequently asked questions about exporting data.
<AccordionGroup>
<Accordion title="Can we export all workspace data before cancellation, including custom objects, custom fields, relationships, notes, tasks, opportunities, attachments, workflows, permissions, and audit history?">
Workspace data can be exported before cancellation with some exceptions: dashboards, workflows and permissions must be transferred manually and audit logs cannot be transferred.
Workspace data can be exported before cancellation with some exceptions: dashboards, workflows and permissions must be transferred manually; audit logs cannot be transferred.
</Accordion>
<Accordion title="Which elements cannot currently be exported or migrated?">
Most elements can be exported or migrated with some exceptions:
- workflows, dashboards and all settings (API keys, webhooks, audit logs, user settings, etc.) must be migrated manually
- app-created objects and fields can be migrated by installing said app in different workspace, they shouldn't be migrated manually
- some records, like workflow versions and workflow runs. are not transferable at all and are expected to be lost
- some objects like message and calendar related objects shouldn't be exported as they're created when account is connected and synced periodically, they'll be synchronized again once you connect your account (as long as you have an access to said account, if it's an account of team member who left your company, then those messages must be exported, otherwise they'll be lost)
- app-created objects and fields can be migrated by installing said app in a different workspace. They shouldn't be migrated manually
- some records, like workflow versions and workflow runs, are not transferable at all and are expected to be lost
- some objects like message and calendar related objects shouldn't be exported as they're created when an account is connected and synced periodically. They'll be synchronized again once you connect your account (as long as you have access to said account, if it's an account of a team member who left your company, then those messages must be exported, otherwise they'll be lost)
</Accordion>
<Accordion title="Is there an official cloud to self-hosted migration procedure or an assisted migration service?">
As of now, there is no official cloud-to-self-hosted migration procedure. The general idea is to:
- first, install apps to introduce app-owned objects and fields
- replicate custom objects and fields added by users
- use script with API keys or AI tools to migrate all data from one workspace to another
- use a script with API keys or AI tools to migrate all data from one workspace to another
- all non-transferrable objects must be migrated manually
Please be aware of a few things:
- you can send up to 50 requests per minute on Pro plan or 100 requests per minute on Organization plan before hitting a request/min limit
- you can send up to 50 requests per minute on the Pro plan or 100 requests per minute on the Organization plan before hitting a request/min limit
- each API request can have up to 200 records
- some data in fields like Created by, Timeline activities and Updated by will be lost during import and overwritten by the system
</Accordion>
@@ -5,7 +5,7 @@ description: Complete step-by-step guide to importing people/contacts into Twent
## Overview
This guide walks you through importing your contacts (People) into Twenty. **Import Companies first** if you want to link People to Companies.
This guide walks you through importing your contacts (People) into Twenty.
## Before You Start
@@ -270,8 +270,5 @@ See [How to Fix Import Errors](/user-guide/data-migration/how-tos/fix-import-err
## Need Help?
<Tip>
Want help with your migration?
- **Done for you:** [find a certified Twenty partner](https://twenty.com/partners/list?categories=SOLUTIONING&ref=docs-migrate-crm) to move your data, pipelines, and users end-to-end.
- **Onboarding pack:** a 4-hour guided setup with our team — [contact@twenty.com](mailto:contact@twenty.com).
Want help with your migration? [Find a certified Twenty partner](https://twenty.com/partners/list?categories=SOLUTIONING&ref=docs-migrate-crm) to move your data, pipelines, and users end-to-end.
</Tip>
@@ -31,8 +31,8 @@ You can import data for any object using CSV, XLSX, or XLS files. Each file shou
6. Review errors (highlighted in yellow) and fix them, directly editing in the UI
7. Confirm the import
### Importing relations between objects
You can import relations between objects using the csv import function. You need to reference the related object using a unique field from this object: the `id`, the `email` for People and Workspace Members, the `domain` for companies, any other field set as unique in the data model for any other object.
### Importing Relations Between Objects
You can import relations between objects using the CSV import function. You need to reference the related object using a unique field from this object: the `id`, the `email` for People and Workspace Members, the `domain` for companies, any other field set as unique in the data model for any other object.
<Note>**Deleted records count toward uniqueness.** Soft-deleted records (visible under Command Menu → See deleted records) are included in uniqueness checks. If you import a record with the same unique value as a deleted record, the deleted record will be restored.</Note>
@@ -41,8 +41,8 @@ You can import relations between objects using the csv import function. You need
When importing related objects, upload files in this order:
1. **Companies** first (the "one" side of relationships)
2. **People** second (linked to companies via companyId)
3. **Opportunities** third (linked to companies/people)
2. **People** second (linked to Companies via companyId)
3. **Opportunities** third (linked to Companies/People)
4. **Custom objects** with relations last
Why? The "one" side of a one-to-many relationship must exist before you can reference it. For example, the Company record must exist before you import a Person with that company's ID.
@@ -104,7 +104,7 @@ Database indexes are managed automatically — adding your own is rarely necessa
## Field Configuration Best Practices
### Naming Conventions and Limitations
- **Singular and plural named must be distinct**: Our GraphQL API needs distinct names for mutations
- **Singular and plural names must be distinct**: Our GraphQL API needs distinct names for mutations
- **Protected field names**: some names are reserved for system usage (e.g., `Type`, `Application`)
### Currency and Phone Fields
@@ -43,7 +43,7 @@ Custom objects let you store information that's unique to your organization and
To create a new custom object:
1. Go to Settings in the sidebar on the left.
2. Under Workspace, go to Data model. Here you'll be able to see an overview of all your existing Standard and Custom objects (both active and disabled).
2. Under Workspace, go to Data Model. Here you'll be able to see an overview of all your existing Standard and Custom objects (both active and deactivated).
<VimeoEmbed videoId="926288174" title="Video demonstration" />
@@ -42,7 +42,7 @@ Many-to-many relations use a **junction object** pattern: an intermediate object
<img src="/images/user-guide/fields/junction-relation-diagram.png" style={{width:'100%'}}/>
<Warning>
**Lab Feature**: Junction relations must be enabled at **Settings → Community → Features** before use.
**Beta Feature**: Junction relations must be enabled at **Settings → Community → Features** before use.
</Warning>
See [How to Create Many-to-Many Relations](/user-guide/data-model/how-tos/create-many-to-many-relations) for a complete step-by-step guide.
@@ -39,7 +39,7 @@ To link your object to People, Companies, or other objects, create a relation fi
## Deactivating an Object
If you no longer need an object:
1. Go to **Settings → Data Model → object of choice → Settings**
1. Go to **Settings → Data Model → object of your choice → Settings**
2. Click the **Deactivate** button
The object is hidden but data is preserved. You can reactivate or permanently delete later.
@@ -153,7 +153,7 @@ Here's a complete walkthrough:
Since the junction object is a real object, you can add custom fields to store information about the relationship:
- **Role**: "Developer", "Designer", "Manager"
- **Start Date**: When they joined the project
- **Start Date**: When the person joined the project
- **Hours Allocated**: Weekly hours on this project
To access this data, navigate to the junction object directly or query it via the API.
@@ -43,7 +43,7 @@ Now each Person can be linked to a Company, and each Company shows its People.
## Deactivating a Relation
1. Go to **Settings → Data Model → object of choice**
1. Go to **Settings → Data Model → object of your choice**
2. Find the relation field and click it
3. Click **Deactivate** button
@@ -55,12 +55,12 @@ Links are preserved but hidden. Reactivate to restore.
## Deleting a Relation
1. Go to **Settings → Data Model → object of choice**
1. Go to **Settings → Data Model → object of your choice**
2. Find the relation field and click it
3. Click **Delete** button
<Note>
Applies only to custom relations, standard relations can be only deactivated.
Applies only to custom relations. Standard relations can only be deactivated.
</Note>
## Related
@@ -148,7 +148,7 @@ Currently, there's no built-in export for data model configuration. Contact supp
</Accordion>
<Accordion title="How many fields can a single object have?">
The maximum number of fields a single object can have is 1600 fields as per Postgres limits, including both existing and deleted fields. Be aware that Twenty won't fix your workspace if limit of 1600 fields is reached as it falls under our Fair Usage policy.
The maximum number of fields a single object can have is 1600 fields as per Postgres limits, including both existing and deleted fields. Be aware that Twenty won't fix your workspace if the limit of 1600 fields is reached as it falls under our Fair Usage policy.
</Accordion>
</AccordionGroup>
@@ -17,7 +17,7 @@ Twenty comes with standard objects:
- **People** — individuals (contacts, leads, partners)
- **Companies** — organizations
- **Opportunities** — deals or sales
- **Notes** — attached notes on records
- **Notes** — notes attached to records
- **Tasks** — to-dos linked to records
You can also create **custom objects** for anything specific to your business (e.g., Projects, Subscriptions, Events).
@@ -162,8 +162,5 @@ Once you've planned your data model:
## Need Help?
<Tip>
Want help designing your data model?
- **Done for you:** [find a certified Twenty partner](https://twenty.com/partners/list?categories=SOLUTIONING&ref=docs-data-model) to design and build your objects, fields, and relationships.
- **Onboarding pack:** a 4-hour guided Data Model Design session with our team — [contact@twenty.com](mailto:contact@twenty.com). See [Implementation Services](/user-guide/getting-started/capabilities/implementation-services).
Want help designing your data model? [Find a certified Twenty partner](https://twenty.com/partners/list?categories=SOLUTIONING&ref=docs-data-model) to design and build your objects, fields, and relationships.
</Tip>
@@ -45,7 +45,7 @@ An Object is a data structure that represents a specific type of entity in your
Opportunities in Twenty CRM are potential deals or sales with accounts or contacts.
## Record
A Record indicates an instance of an object, like a specific account or contact.
A Record is an instance of an object, like a specific account or contact.
## Relation Fields
Relation Fields create connections between different objects, allowing you to link records together (like connecting a Person to a Company).
@@ -3,14 +3,6 @@ title: Implementation Services
description: Whether you need help getting started or creating advanced customizations, we have a solution.
---
## Onboarding Packs
Get help from our core team to set up your Twenty workspace with our 4-hour Onboarding packs:
- **Data Model Design**: Design and create your custom data model with objects, fields, and relationships
- **Data Migration**: Migrate your existing data from your current CRM to Twenty
- **Workflow Creation**: Create custom workflows to support your business processes
## Implementation Partners
Work with certified Twenty partners for advanced customizations, integrations, and dedicated implementation support.
@@ -39,6 +39,6 @@ Open-source is the bedrock of our approach, ensuring that Twenty evolves with it
- **API & Webhooks:** Connect to other apps and build custom integrations. [Start integrating](/developers/extend/api).
## Join now
## Join Now
[Register here](https://app.twenty.com) or [become a contributor on GitHub](https://github.com/twentyhq/twenty).
@@ -9,9 +9,9 @@ description: "Every business works differently. Start with these 3 steps to shap
Twenty offers the flexibility you need to shape the data model that will best support your day-to-day.
Create objects and fields of any type, including relations between your different objects. You can do so under Settings → Data Model.
Here are a few tips:
- **You are not limited in the number of custom fields nor custom objects**. Adding custom objects and fields will not lead to upgrading your plan.
- **You are not limited in the number of custom fields or custom objects**. Adding custom objects and fields will not lead to upgrading your plan.
- **People, Companies and Opportunities are the three objects from where you can access the emails and meetings synchronized from your mailbox and calendar**. We recommend using those as much as possible, adding fields to categorize your records if need be. Here is an example:
- It is best to use the People object for your prospects and partners, creating a field on the People object named ```Person Type```, instead of creating a Partner custom object. Because you would not be able to access the emails exchanged with this person from the Partner records.
- It is best to use the People object for your prospects and partners, creating a field on the People object named ```Person Type```, instead of creating a Partner custom object, because you would not be able to access the emails exchanged with this person from the Partner records.
- Create different views under People, one to display partners and one to display prospects.
- Two People cannot have the same email address. Two Companies cannot have the same domain.
- You can deactivate standard fields and objects you do not want to use.
@@ -31,7 +31,7 @@ If you have not done so when creating your workspace, connect your **Google or M
**Using another provider?**
You can add another mailbox via SMTP or another calendar via CalDAV. Go to **Settings → Accounts** to configure.
### Import data via csv
### Import data via CSV
Use the Command menu (```Cmd + K``` or ```Ctrl + K```) to import People, Companies, Opportunities, or any custom objects via CSV.
**Key guidelines**:
@@ -43,13 +43,13 @@ Use the Command menu (```Cmd + K``` or ```Ctrl + K```) to import People, Compani
Read [this article](/user-guide/data-migration/overview) to learn more about data import.
## 3. Create your first view
Creating different views is key to make the data actionable for your team.
Creating different views is key to making the data actionable for your team.
Here is how to proceed:
- **Add or hide columns**
Manage the fields visible in a given view clicking on Options → Fields (from the top right). You can show/hide fields from there.
Manage the fields visible in a given view by clicking on Options → Fields (from the top right). You can show/hide fields from there.
- **Reorder fields**
Reorder the fields from a given view clicking on Options → Fields (from the top right). Drag and drop the fields to reorder them.
Reorder the fields from a given view by clicking on Options → Fields (from the top right). Drag and drop the fields to reorder them.
- **Filter your view**
Narrow down the records displayed using the Filters from the top right.
@@ -10,7 +10,7 @@ import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
2. Select your preferred sign-up method:
- **Continue with Google** for Google account registration.
- **Continue with Microsoft** for Microsoft account registration.
- Or, **Continue With Email** for email registration.
- Or, **Continue with Email** for email registration.
<VimeoEmbed videoId="927066829" title="Video demonstration" />
@@ -36,7 +36,7 @@ You can click on "Change plan" to choose a different plan or billing interval.
<img src="/images/user-guide/create-workspace/choose-plan.png" style={{width:'100%'}}/>
## Step 3: Payment Confirmation & Account Setup
Post payment approval via Stripe, you're directed to create your workspace and user profile. Remember that you can cancel your subscription anytime.
After payment approval via Stripe, you're directed to create your workspace and user profile. Remember that you can cancel your subscription anytime.
## Support
For queries or help, connect with the dedicated support team at [contact@twenty.com](mailto:contact@twenty.com) or send a message on [Discord](https://discord.gg/cx5n4Jzs57).
@@ -4,8 +4,8 @@ description: Get a quick overview of how to navigate through the platform and wh
---
## The Main Layout
The center of the screen is **where your records live**: people, companies, opportunities, tasks, notes, dashboards, workflows and any other object you created. This is where the day-to-day work happens.
You can **view, edit, delete records** from there as well as **creating new views**.
The center of the screen is **where your records live**: People, Companies, Opportunities, Tasks, Notes, Dashboards, Workflows and any other object you created. This is where the day-to-day work happens.
You can **view, edit, or delete records** from there, as well as **create new views**.
<img src="/images/user-guide/home/main-layout.png" style={{width:'100%'}}/>
@@ -15,7 +15,7 @@ On the left side, from the top to the bottom, you'll be able to:
- Switch between your **several workspaces** using the dropdown menu or create a new workspace
- Use the **search bar** (press `/` to focus on it instantly)
- Open the **Settings** section
- Have direct access to your **Favourites views**. Favourites are unique for each user.
- Have direct access to your **Favorite views**. Favorites are unique for each user.
- Switch between different objects
- **Create automations** using workflows
@@ -28,7 +28,7 @@ The command menu gives you **quick access to actions** in Twenty. You can access
- **Mouse**: Click the three dots in the top right corner
From there, you can:
- Create new records
- **Import and export data via csv**
- **Import and export data via CSV**
- Create new views
- Access deleted records (Twenty supports soft and hard deletes)
- See the keyboard shortcuts to quickly access objects in your workspace
@@ -36,12 +36,12 @@ From there, you can:
<img src="/images/user-guide/home/command-menu.png" style={{width:'100%'}}/>
## The Search Bar
+The search bar is accessible via the Command Menu, at the top of your navigation bar, or by pressing `/` to focus on it instantly. Search works across all objects.
The search bar is accessible via the Command Menu, at the top of your navigation bar, or by pressing `/` to focus on it instantly. Search works across all objects.
<img src="/images/user-guide/home/search-bar.png" style={{width:'100%'}}/>
## The Side Panel
When you click on a record, the side panel appears on the right. This gives you a quick overview of the record's key information, without bringing you to another page. From there, you can decide to close this overview or to get additional information about this record, clicking on the Open button.
When you click on a record, the side panel appears on the right. This gives you a quick overview of the record's key information, without bringing you to another page. From there, you can decide to close this overview or to get additional information about this record, by clicking on the Open button.
<img src="/images/user-guide/home/side-panel.png" style={{width:'100%'}}/>
@@ -55,7 +55,7 @@ Use the dropdown menu at the top left of the main layout to switch between the d
- Use Group By view to create sections and improve efficiency
- Use filters to focus on specific records (e.g. leads created last week)
- Save filtered views to reuse them later
- Favourite views for fast access
- Favorite views for fast access
<img src="/images/user-guide/home/view-menu.png" style={{width:'100%'}}/>
@@ -74,5 +74,5 @@ Open your Settings from the top left to:
- **Access Support** to reach out via live chat
- **Open the Documentation** to browse the User Guide and developer docs
<Note>If you do not see all those sections under Settings, reach out to your workspace administrator - some of them have restricted access.</Note>
<Note>If you do not see all those sections under Settings, reach out to your workspace administrator some sections have restricted access.</Note>
@@ -17,7 +17,7 @@ To create a folder, right-click in the sidebar or use the `+` button.
## Hiding objects
Objects you don't use can be hidden from the sidebar. They're not deleted — they're just out of the way. You can show them again anytime from Settings > Data Model.
Objects you don't use can be hidden from the sidebar. They're not deleted — they're just out of the way. You can show them again anytime from Settings Data Model.
## Favorites
@@ -42,7 +42,7 @@ Widgets are the building blocks inside each tab. Available widget types include:
or
1. Go to Settings > Data model > object of your choice > Layout
1. Go to Settings Data Model object of your choice Layout
2. Click the "Customize record page" button for that object
3. You're now in customization mode:
@@ -35,7 +35,7 @@ Each view saves its own filters, sorting, field visibility, and grouping configu
When you open a record, the detail page is built from configurable tabs and widgets. You can:
- **Add, remove, and reorder tabs** on any record type
- **Configure widgets** — fields, related records, emails, timeline, calendar, tasks, notes, files, charts, iframes, and more
- **Configure widgets** — fields, related records, emails, timeline, calendar, tasks, notes, files, charts, iFrames, and more
- **Drag and resize widgets** on a grid layout
- **Control field visibility** per widget
@@ -10,41 +10,41 @@ description: Frequently asked legal questions.
Twenty Cloud runs on AWS servers located in Frankfurt, Germany.
</Accordion>
<Accordion title="Can the hosting region be contractually fixed for our workspace?">
Hosting region can be selected starting 2027, alternatively you can reach out to [our Partners](https://twenty.com/partners/list?categories=HOSTING) to help you set up your instance.
Hosting region selection will be available starting in 2027, initially for new workspaces. Users will be able to request a region change for an existing workspace at a later date. Alternatively, you can reach out to [our Partners](https://twenty.com/partners/list?categories=HOSTING) to help you set up your instance.
</Accordion>
<Accordion title="Which sub-processors may process or access our CRM data, and in which countries are they located?">
A list of all sub-processors is available in [our Trust center](https://trust.twenty.com/?tab=subprocessors).
A list of all sub-processors is available in [our Trust Center](https://trust.twenty.com/?tab=subprocessors).
</Accordion>
<Accordion title="What safeguards apply to international data transfers?">
EU Standard Contractual Clauses with the UK Addendum and Swiss amendments apply to international data transfers within EU and all sub-processors.
EU Standard Contractual Clauses, together with the UK Addendum and Swiss amendments, apply to international transfers of data outside the EU, including transfers to all sub-processors.
</Accordion>
</AccordionGroup>
## Data Processing Agreement and legal roles
<AccordionGroup>
<Accordion title="Please provide the current Data Processing Agreement.">
Latest DPA is available in your workspace at https://{your-domain}/settings/legal/dpa (e.g. https://getting-started.twenty.com/settings/legal/dpa).
<Accordion title="Where can we find the current Data Processing Agreement?">
You can generate your signed DPA at https://{your-domain}/settings/legal/dpa (e.g. https://getting-started.twenty.com/settings/legal/dpa).
</Accordion>
<Accordion title="Does Twenty act as the data processor for merchant and contact information stored in the CRM, while our company remains the data controller?">
As per our [Privacy Policy](https://twenty.com/privacy-policy), Twenty acts as the data processor for merchant and contact information stored in the CRM, while your company remains the data controller.
</Accordion>
<Accordion title="Is CRM content ever used to train Twenty or third-party AI models?">
CRM content is not used to train any AI model and Twenty does not have its own AI model, all AI models available on cloud are models provided by our sub-processors.
CRM content can be used to train AI models depending on sub-processors' Terms and Conditions. Twenty does not have its own AI model all AI models available on Twenty Cloud are provided by our sub-processors.
</Accordion>
<Accordion title="If optional AI processing exists, can it be fully disabled for our workspace?">
AI can be turned off by disabling all AI models we offer in Settings → AI → Models, moreover no data is sent to AI if there is no interaction with AI chat and AI node in workflows.
AI can be fully disabled by turning off all AI models in Settings → AI → Models. Additionally, no data is sent to AI unless you actively interact with the AI chat or an AI node in a workflow.
</Accordion>
</AccordionGroup>
## Security and access controls
<AccordionGroup>
<Accordion title="Is encryption used in transit and at rest, what are your key-management practices, and how tenant data is isolated?">
All data are encrypted in transit and at rest, all tenant data are isolated thanks to schema-per-tenant setup and our keys are periodically rotated.
<Accordion title="Is encryption used in transit and at rest, what are your key-management practices, and how is tenant data isolated?">
All data is encrypted in transit and at rest. Tenant data is isolated through a schema-per-tenant setup, and encryption keys are periodically rotated.
</Accordion>
<Accordion title="Which Twenty personnel or sub-processors may access customer workspaces, for what purposes, and how is access approved and logged?">
Twenty engineering and support team can access customer workspaces only upon customer's issue report and when customer agrees to allow access to workspace in Settings → General → Security.
Twenty's engineering and support teams can access customer workspaces only after the customer reports an issue and grants access via Settings → General → Security.
</Accordion>
<Accordion title="What is your incident-notification process and target notification timeframe following a confirmed security incident affecting our data?">
In the event of a confirmed personal data breach affecting your data, we will notify you without undue delay and in any event within 48 hours of becoming aware of it. Our notification will include, to the extent known at the time: the nature of the breach, the categories and approximate volume of data and individuals affected, likely consequences, and the remediation and mitigation measures taken or planned. We will provide updates as the investigation progresses.
@@ -55,13 +55,16 @@ In the event of a confirmed personal data breach affecting your data, we will no
<AccordionGroup>
<Accordion title="When an individual CRM record is deleted, when is it removed from active systems?">
When a record is removed, first it's soft-deleted and still possible to restore, once it's permanently removed, it's removed from active systems.
When a record is deleted, it is first soft-deleted and can still be restored. It is permanently deleted and removed from active systems once the retention period elapses or a user manually destroys it.
</Accordion>
<Accordion title="How long are soft-deleted records kept in the system?">
By default, soft-deleted records are kept for 14 days, after which they are permanently removed from the system. The retention period for soft-deleted records can be changed in Settings → General → Security.
</Accordion>
<Accordion title="How long may that record remain in backups or technical logs?">
Removed record is in backup for 30 days, after that it's permanently removed.
A removed record remains in backups for 30 days, after which it is permanently deleted.
</Accordion>
<Accordion title="When a workspace is closed or full deletion is requested, what exact timeline applies to production data, attachments, logs, and backups?">
Removed workspace's data are immediately removed from active systems and backups of said workspace are available for 7 days, after 7 days, all data are permanently removed.
When a workspace is deleted, its data is immediately removed from active systems. Backups are retained for 7 days, after which all data is permanently deleted.
</Accordion>
<Accordion title="During any backup-retention period, is deleted data isolated from operational access and use?">
Yes, during any backup-retention period, deleted data is isolated from operational use.
@@ -78,13 +81,13 @@ We acknowledge erasure requests and provide written confirmation once deletion i
<AccordionGroup>
<Accordion title="What are the backup frequency and retention period?">
Backups are created daily and retention period is 30 days.
Backups are created continuously with snapshots taken daily, and the retention period is 30 days.
</Accordion>
<Accordion title="What are the recovery-point objective and recovery-time objective for Twenty Cloud?">
RTO and RPO are both 6 hours (as per our DPA).
</Accordion>
<Accordion title="What is the process for requesting or performing a restoration?">
To request a restoration, please reach out to team via support chat or mail to [contact@twenty.com](mailto:contact@twenty.com).
To request a restoration, please reach out to our team via support chat or mail to [contact@twenty.com](mailto:contact@twenty.com).
</Accordion>
<Accordion title="Are backups encrypted and stored in the same region as the primary workspace data?">
All backups are encrypted and stored in geographically separate locations within the same jurisdiction (e.g. within EU for EU data).
@@ -92,6 +95,7 @@ All backups are encrypted and stored in geographically separate locations within
</AccordionGroup>
## Compliance
<AccordionGroup>
<Accordion title="Is Twenty GDPR compliant?">
Yes, Twenty is [GDPR compliant](https://trust.twenty.com/?tab=securityControls&frameworks=gdpr_v1).
@@ -104,4 +108,4 @@ No, Twenty is in the process of becoming HIPAA compliant.
</Accordion>
</AccordionGroup>
If you have more questions, please check our [Terms and Conditions](https://twenty.com/terms), [Privacy Policy](https://twenty.com/privacy-policy) and [Trust Center](https://trust.twenty.com/), if your questions are still unanswered, send them to [contact@twenty.com](mailto:contact@twenty.com) or via support chat.
If you have more questions, please check our [Terms and Conditions](https://twenty.com/terms), [Privacy Policy](https://twenty.com/privacy-policy) and [Trust Center](https://trust.twenty.com/). If your questions are still unanswered, send them to [contact@twenty.com](mailto:contact@twenty.com) or via support chat.
@@ -28,7 +28,7 @@ To delete a role:
4. Click **Confirm** in the modal
<Note>
If a role is deleted, any workspace member assigned to it will be automatically reassigned to the default role. All except the **Admin** role can be deleted. There must always be at least one member assigned to the **Admin** role.
If a role is deleted, any workspace member assigned to it will be automatically reassigned to the default role. All roles except the **Admin** role can be deleted. There must always be at least one member assigned to the **Admin** role.
</Note>
## Assign Roles to Members
@@ -58,7 +58,7 @@ You can only assign roles to existing workspace members. To invite new members,
## Customize Permissions
Permissions determine what each role can access or modify within your workspace, including workspace objects records, settings, and actions.
Permissions determine what each role can access or modify within your workspace, including workspace objects, records, settings, and actions.
### Object Permissions
@@ -165,7 +165,7 @@ Control access to general workspace actions:
- Toggle **Application All Access** to grant full permissions
- Or enable individual actions such as **Send Email**, **Import CSV**, and **Export CSV**
## Assigning Roles to API Keys and AI Agents
## Assign Roles to API Keys and AI Agents
Beyond workspace members, roles can also be assigned to **API Keys** and **AI Agents**. This is particularly helpful for teams who want to control exactly "who" can do what in their workspace—including automated processes and integrations.
@@ -15,14 +15,14 @@ Single Sign-On (SSO) allows your team members to log into Twenty using your orga
Twenty supports SSO with:
- **SAML 2.0**: Works with most enterprise identity providers
- **Google Workspace**: For organizations using Google
- **Microsoft Entra ID**: (formerly Azure AD) For Microsoft environments
- **Microsoft Entra ID** (formerly Azure AD): For Microsoft environments
## Setting Up SSO
### Prerequisites
- Organization plan (cloud and self-hosted workspaces)
- Admin access to your identity provider
- Admin access to Twenty workspace
- Admin access to your Twenty workspace
### Configuration Steps
@@ -54,13 +54,13 @@ You'll need to configure your identity provider with:
### Just-in-Time (JIT) Provisioning
- Users are created automatically on first login
- Assigned default role automatically
- Users are assigned a default role automatically
- No manual user creation needed
### Manual Provisioning
- Invite users before they can log in
- Pre-assign specific roles
- More control over who can access
- More control over who can access the workspace
## Managing SSO Users
@@ -90,8 +90,8 @@ To remove access for SSO users:
## Troubleshooting
### Common Issues
- **Certificate errors**: Ensure certificate hasn't expired
- **URL mismatches**: Verify ACS URL matches exactly
- **Certificate errors**: Ensure the certificate hasn't expired
- **URL mismatches**: Verify the ACS URL matches exactly
- **User not found**: Check JIT provisioning settings
### Getting Help
@@ -7,7 +7,7 @@ description: Frequently asked questions about roles and permissions.
<AccordionGroup>
<Accordion title="What roles come with Twenty by default?">
Twenty comes with an **Admin** and **Member** roles by default. You can create additional custom roles based on your team's needs (e.g., Sales Rep, Manager, Read-Only User).
Twenty comes with **Admin** and **Member** roles by default. You can create additional custom roles based on your team's needs (e.g., Sales Rep, Manager, Read-Only User).
</Accordion>
<Accordion title="Can I delete the Admin role?">
@@ -38,7 +38,7 @@ Field permissions allow more granular control over sensitive data.
</Accordion>
<Accordion title="How do permission overrides work?">
Permissions cascade from global to specific:
Permissions cascade from general to specific:
1. **All Objects** sets the baseline for all objects
2. **Object-Level Permissions** can override the global setting for specific objects
3. **Field-Level Permissions** can override the object setting for specific fields
@@ -29,6 +29,6 @@ Twenty's permission system lets you control who can access and modify data in yo
## Quick links
- [Create a role](/user-guide/permissions-access/capabilities/permissions#create-a-role)
- [Create a Role](/user-guide/permissions-access/capabilities/permissions#create-a-role)
- [Configure SSO](/user-guide/permissions-access/capabilities/sso-configuration)
- [Manage team members](/user-guide/settings/capabilities/member-management)
@@ -21,7 +21,7 @@ For custom domains, you'll need to configure DNS settings with your domain provi
Configure under **Settings → Members → Invite**.
Anyone with an email address at these domains is allowed to sign up for this workspace automatically.
Add your company domain to let team members sign up for this workspace automatically.
### Add Approved Access Domain
1. Click **Add Approved Access Domain**
@@ -18,11 +18,11 @@ Select your preferred language for the Twenty interface from the dropdown menu.
## Formats
Configure date, time, number, timezone, and calendar start day.
Configure date, time, number, time zone, and calendar start day.
| Setting | Description |
|---------|-------------|
| **Time zone** | Your local timezone for accurate timestamps and scheduling |
| **Time zone** | Your local time zone for accurate timestamps and scheduling |
| **Date format** | How dates appear (e.g., Dec 12, 2025) |
| **Time format** | 12-hour (7:22 PM) or 24-hour format |
| **Number format** | Decimal and thousands separators (e.g., 1,234.56) |
@@ -54,7 +54,7 @@ Removed members lose access immediately. Their data (records, notes, tasks) rema
</Warning>
<Note>
Emails and calendar events of deleted user are archived and available for other users.
Emails and calendar events of the deleted member are archived and available for other members.
</Note>
## Pending Invitations
@@ -74,5 +74,5 @@ Allow team members to join automatically based on their email domain:
## Related
- [Permissions](/user-guide/permissions-access/capabilities/permissions) — configure what each role can do
- [Domains Settings](/user-guide/settings/capabilities/domains-settings) — configure approved domains
- [Domain Settings](/user-guide/settings/capabilities/domains-settings) — configure approved domains
@@ -27,7 +27,7 @@ Enable 2FA to add an extra layer of security to your account:
### Delete Account
<Warning>
Deleting your account will permanently remove your access to all workspaces. This action cannot be undone, you'll lose access to all workspaces where you're a member, and you should consider leaving individual workspaces instead if you only want to exit specific teams.
Deleting your account will permanently remove your access to all workspaces. This action cannot be undone. You'll lose access to all workspaces where you're a member. If you only want to exit specific teams, consider leaving individual workspaces instead.
</Warning>
To delete your account:
@@ -2,7 +2,7 @@
title: Workspace Settings
description: Customize your workspace name and branding.
---
Those are accessible under **Settings → General**.
Your workspace picture, name, and deletion options are all accessible under **Settings → General**.
## Workspace Picture
- **Upload Logo**: Add a custom workspace logo
@@ -15,11 +15,11 @@ Those are accessible under **Settings → General**.
## Danger Zone
<Warning>
Deleting your workspace permanently removes all data and cannot be undone. All workspace data will be lost forever, all members will lose access immediately, and this action cannot be reversed.
Deleting your workspace permanently removes all data and immediately revokes access for all members — this action cannot be undone.
</Warning>
To delete your workspace:
1. Click **Delete workspace** button
1. Click the **Delete workspace** button
2. Confirm the deletion when prompted
**Note**: Only workspace administrators can delete workspaces.
@@ -154,16 +154,16 @@ You can configure approved access domains so team members with company email add
<AccordionGroup>
<Accordion title="What are Early Access features?">
Early Access features are capabilities being tested before general release. Currently, only **Junction relations** and **Calendar Day and Week Views** are in Early Access. They may change based on user feedback.
Early Access features are capabilities being tested before general release.
</Accordion>
<Accordion title="Are Early Access features safe to use?">
Early Access features are functional but may change based on user feedback. They are safe to use but may evolve before general availability.
Early Access features are functional and safe to use, but may change based on user feedback before general availability.
</Accordion>
<Accordion title="How do I enable Early Access features?">
1. Go to **Settings → Community**
2. Scroll down to **Features** section
2. Scroll down to the **Features** section
3. Find the feature you want
4. Toggle it on
5. The feature becomes available immediately
@@ -37,7 +37,7 @@ Change the order fields appear in your view:
## Best Practices
- **Show only what's needed** — too many fields clutters the view
- **Show only what's needed** — too many fields clutter the view
- **Put important fields first** — most-used columns on the left
- **Create multiple views** — different field sets for different purposes
- **Use field visibility per view** — same object, different focus
@@ -11,33 +11,33 @@ Kanban views visually map out process flows, where each column stands for a dist
## Move Cards between Stages
You can move each card between stages as it goes through your workflow by dragging and dropping. To proceed, hold your click on a card and move it to the next stage.
You can move each card between stages as it goes through your workflow by clicking and holding a card, then dragging it to the next stage.
<VimeoEmbed videoId="927888627" title="Video demonstration" />
## Add and Delete Stages
You can tailor your workflow to suit your needs using stages, which represent a value in a Select Field:
You can tailor your workflow to suit your needs using stages, each of which represents a value in a Select field:
### Add Stages
To add a stage, access the Select field settings by navigating to Settings > Data Model, selecting your object, and then the field your Kanban board depends on.
To add a stage, access the Select field settings by navigating to Settings > Data Model, selecting your object, and then selecting the field your Kanban board depends on.
<VimeoEmbed videoId="927890428" title="Video demonstration" />
### Remove Stages
To remove a stage, hover the stage name or the `⋮` icon, click `Edit from settings` in the Select field settings, and then click **Delete** next to the relevant stage.
To remove a stage, hover over the stage name or the `⋮` icon, click `Edit from settings` in the Select field settings, and then click **Delete** next to the relevant stage.
## Display Fields
You can configure your Kanban board to display some fields and hide others. To hide a field, click on **Options** on the top right, then on **Fields** to bring up the list of options. Look for the field needed in the Hidden Fields section and click on the eye button to display the field.
You can configure your Kanban board to display some fields and hide others. To show or hide a field, click on **Options** on the top right, then on **Fields** to bring up the list of options, and click the eye icon next to the field to show or hide it.
You can also rearrange the order of fields by holding down the field name and dragging it to where you want it.
<img src="/images/user-guide/kanban-views/filter.png" style={{width:'100%'}}/>
## Compact View
## Compact view
You can hide all the fields and get an overview of all records at a glance. To enable:
1. Click **Options** on the top right
@@ -84,7 +84,7 @@ Kanban views are ideal for:
### Optimize Card Display
- **Show key fields**: Display only the most important information
- **Use compact view**: For high-level overviews
- **Use Compact view**: For high-level overviews
- **Color coding**: Use stage colors to quickly identify status
### Maintain Data Quality
@@ -29,7 +29,7 @@ Organize records into collapsible groups based on a field of select type.
- Click the **eye icon** next to a group to hide it
**Use cases:**
- Group Company by Type
- Group Companies by Type
- Group Opportunities by Stage
- Group Tasks by Status
@@ -46,7 +46,7 @@ Change the order views appear in the dropdown:
3. Drop in the desired position
4. Order saves automatically
## Favorites
## Favorite a View
Pin frequently used views for quick access:
1. Open the view dropdown
@@ -35,7 +35,7 @@ If you don't have one:
3. Click the **eye icon** to display them on cards
4. Drag to reorder
<img src="/images/user-guide/kanban-views/filter.png" style={{width:'100%'}}/>
### Enable Compact View
### Enable compact view
For a high-level overview:
1. Click **Options**
2. Turn on **Compact view**
@@ -31,7 +31,7 @@ Stages are defined in the Opportunities object's **Stage** field.
| **Closed Lost** | Deal unsuccessful |
<Note>
**5-7 stages is optimal.** Too many stages makes the pipeline hard to scan; too few loses visibility into deal progress.
**5-7 stages is optimal.** Too many stages make the pipeline hard to scan; too few lose visibility into deal progress.
</Note>
## Step 2: Create a Pipeline View
@@ -57,9 +57,9 @@ Show totals at the top of each column:
2. Select the aggregation type (Count, Sum, Average, etc.)
3. Choose the field to aggregate (e.g., Amount)
**Example:** Show total deal value per stage by aggregating Amount with Sum.
**Example:** Show total deal value per stage by aggregating the Amount field with Sum.
### Use Compact View (Optional)
### Use compact view (optional)
For a high-level overview with minimal card content:
1. Click **Options**
2. Turn on the toggle for **Compact view**
@@ -91,7 +91,7 @@ To create a new branch, right click on the workflow canvas and click **New actio
**Branch 1: Stage = New (first stage)**
Since this is the first stage, we only record the entry timestampno previous stage to calculate.
Since this is the first stage, only the entry timestamp is recorded — there's no previous stage to calculate from.
1. Add a **Filter** node: Stage = New
2. Add a **Code** action:
@@ -25,7 +25,7 @@ A visual board view where records appear as cards organized by stages. Ideal for
- Any workflow with defined stages
### Calendar View
Display records with date fields on a calendar. Perfect for:
A calendar view that displays records with date fields. Perfect for:
- Meetings and events
- Deadlines and due dates
- Time-based planning
@@ -44,9 +44,9 @@ There are two ways to create a new view.
<VimeoEmbed videoId="1145648745" title="Video demonstration" />
### Start by editing an existing view
### Start by Editing an Existing View
1. Navigate to any object (People, Companies, etc.)
2. Choose a layout (Table, Kanban, or Calendar) under **Options** or Add filters and sorting as needed
2. Choose a layout (Table, Kanban, or Calendar) under **Options**, and add filters and sorting as needed
3. Click on **Save as new view**
4. Name your view and click **Create**
5. Keep editing your new view
@@ -74,7 +74,7 @@ Trigger
Merged Step: Send Confirmation Email
```
The confirmation email sends only after both the customer update and ticket creation are done.
The confirmation email is sent only after both the customer update and ticket creation are done.
## Best Practices
@@ -19,7 +19,7 @@ Iterator lets you loop through an array of records and perform actions on each o
Iterator expects an **array** as input. It then:
1. Takes the first item from the array
2. Runs all actions inside the iterator with that item
2. Runs all actions inside the Iterator with that item
3. Moves to the next item
4. Repeats until all items are processed
@@ -58,7 +58,7 @@ When a **Code** or **Logic Function** step returns a *top-level array*, its outp
Actions placed after Iterator run for each item:
1. Add **Send Email** action (inside iterator)
1. Add **Send Email** action (inside Iterator)
2. To: `{{iterator.currentItem.email}}`
3. Subject: Hello `{{iterator.currentItem.firstName}}`!
4. Body: Personalized message using current item fields
@@ -17,7 +17,7 @@ Actions define what happens after a trigger fires. You can chain multiple action
## Record Actions
<img src="/images/user-guide/workflows/workflow_actions.png" style={{width:'100%'}}/>
### Create a Record
### Create Record
Adds a new record to a selected object.
**Configuration**:
@@ -93,11 +93,11 @@ Creates a new record or updates an existing one based on matching criteria. This
**Loops through an array of records** returned from a previous step, allowing you to perform actions on each record individually.
**Configuration**:
- Select the array of records from a previous step (e.g., results from Search Records, from a Manual trigger with Bulk availability, from a code node). When a Code or Logic Function step returns a top-level array, select its **Whole list** option to loop over the entire output.
- Select the array of records from a previous step (e.g., results from Search Records, from a Manual trigger with Bulk availability, from a Code node). When a Code or Logic Function step returns a top-level array, select its **Whole list** option to loop over the entire output.
- Define the actions to perform on each record in the loop.
<Note>
- You can add several actions within an iterator.
- When using branches inside an iterator, make sure the last step of each branch connects back to the iterator to close the loop.
- You can add several actions within an Iterator.
- When using branches inside an Iterator, make sure the last step of each branch connects back to the Iterator to close the loop.
</Note>
- Access `Current Item` Fields: to use fields from the record currently being processed, click on the **Iterator** step, then select **Current item**. The list of available fields from that record will be displayed and can be selected for use in subsequent actions. You can also select **Use the whole item** to pass the entire current item into a downstream step.
@@ -153,7 +153,7 @@ The scheduled date cannot be in the past. If a date field from a previous step i
### Send Email
Sends an email from your workflow. This is great for templated group emails. Emails will look like the ones you send from your mailbox.
Not suited for newsletters (which require richer formatting) or automated email sequences.
It's not suited for newsletters (which require richer formatting) or automated email sequences.
**Prerequisites**: Add an email account in Settings → Accounts
@@ -170,7 +170,7 @@ For all the following steps, you can reference variables from previous steps for
Only one recipient is possible at the moment.
</Note>
- Set subject line.
- Compose message body. You can format links, create numbered list, bullet point lists, add attachments.
- Compose message body. You can format links, create numbered lists, bullet point lists, and add attachments.
<Note>
Adding HTML signatures is not possible at the moment.
</Note>
@@ -178,21 +178,21 @@ Adding HTML signatures is not possible at the moment.
### Form
Prompts a form during workflow execution to collect user input. The responses can then be used in subsequent steps to create records, send emails, or execute any other action based on the input.
<Warning>
**Forms are designed for manual triggers only**. For workflows with other triggers (Record Created, Updated, etc.), forms are only accessible via the workflow run interface, which is not the expected user experience. A notifications center will be released in 2026 to properly support forms in automated workflows.
**Forms are designed for manual triggers only**. For workflows with other triggers (Record Created, Updated, etc.), forms are only accessible via the workflow run interface, which is not the expected user experience. A notification center will be released in 2026 to properly support forms in automated workflows.
</Warning>
**Configuration**:
- Configure the fields that users will be asked to fill. For each field, choose
- a type among text, number, date, a given record, a select field. Select fields from all objects are available.
- a type among text, number, date, a given record, a select field. Fields from all objects are available for selection.
- a label
- a default value under `Placeholder` (optional)
- Edit the form title
**Output**: Form responses are available for use in subsequent steps.
**Example**: The "Quick Lead" workflow is available by default in all workspaces, available anywhere in the Command Menu `Cmd + K`.
**Example**: The "Quick Lead" workflow is available by default in all workspaces, available anywhere in the Command Menu `Cmd+K`.
**How to fill the form**:
- Trigger your manual workflow from the command menu `Cmd K`
- Trigger your manual workflow from the Command Menu `Cmd+K`
- Fill the form that is displayed in the side panel and click `Submit`.
<Note>
The fields cannot be made mandatory.
@@ -210,7 +210,7 @@ Runs custom JavaScript within your workflow.
Behind the scenes, each Code action is backed by its own **logic function** — a server-side TypeScript function that runs on the Twenty platform. When you add a Code action, Twenty creates a dedicated logic function for that step and exposes its editor inline, so the code you write lives with the workflow.
**Configuration**:
- Access variables from previous steps. You can edit the variables names dynamically.
- Access variables from previous steps. You can edit the variables' names dynamically.
<VimeoEmbed videoId="1147281795" title="Video demonstration" />
- Write JavaScript code in the editor
- Return variables for use in subsequent steps
@@ -67,8 +67,7 @@ If you need more credits beyond your plan allocation:
## Best Practices
- **Batch Processing**: Use bulk operations and Iterator actions efficiently
- **Batch Processing**: Use bulk operations and Iterator actions efficiently to reduce individual action calls
- **Manual Trigger Optimization**: For manual triggers, choose `Bulk` availability to process multiple records in a single workflow run
- Optimize Code actions for efficiency
- Batch operations to reduce individual action calls
@@ -52,11 +52,12 @@ When a run fails:
1. Open the failed run
2. Find the step that caused the failure
3. Check the error message for details
4. Common issues:
- Missing required fields
- Invalid data format
- External API errors
- Permission issues
Common issues:
- Missing required fields
- Invalid data format
- External API errors
- Permission issues
## Re-running Workflows
@@ -25,8 +25,8 @@ Starts the workflow when a new record is created in a selected object (People, C
**Configuration**: Select the object type to monitor for new records.
<Note>
- This trigger is great for records created by csv, mailbox and calendar synchronization, API.
- **It is not recommended for records created manually**: with this trigger, workflows start as soon as the record is created. Since Twenty UI offers auto-save on the fly (there is not an edit mode and then a validation to save records), the workflow will be triggered before the user inputs all the fields.
- This trigger is great for records created by CSV, mailbox and calendar synchronization, or API.
- **It is not recommended for records created manually**: with this trigger, workflows start as soon as the record is created. Since Twenty UI offers auto-save on the fly (there is no edit mode and then a validation to save records), the workflow will be triggered before the user inputs all the fields.
To trigger this workflow on records created manually, it is recommended to use the trigger `Record is created or updated` instead.
</Note>
@@ -62,15 +62,17 @@ Starts the workflow when triggered by a user action. This trigger can be accesse
**Availability Configuration**:
Choose how the workflow should handle record selection:
- **Global**: No record is required to trigger this workflow. The workflow is triggered from the command menu `Cmd + K` anywhere (from any object) and does not use record(s) as input.
- **Global**: No record is required to trigger this workflow. The workflow is triggered from the command menu `Cmd+K` anywhere (from any object) and does not use record(s) as input.
- **Single**: The selected record(s) will be passed to your workflow. This is configured for a given object. Several records can be selected before triggering the workflow. The workflow will run from beginning to end as many times as there are records selected.
For **Single** and **Bulk** availability, the selected record(s) will be passed to your workflow. This is configured for a given object, and several records can be selected before triggering the workflow.
- **Single**: The workflow will run from beginning to end as many times as there are records selected.
<Note>
**Soft limit: 100 runs/minute**. Beyond this, workflows remain in "Not Started" status and are processed gradually—either by a background job or when another workflow enters the queue. This means you can select more than 100 records with a Single trigger; execution will just be slower.
</Note>
- **Bulk**: The selected record(s) will be passed to your workflow. This is configured for a given object. Several records can be selected before triggering the workflow. The workflow will run once, providing the entire list of records as input. This means the workflow needs to contain an [Iterator action](/user-guide/workflows/capabilities/workflow-actions#iterator).
- **Bulk**: The workflow will run once, providing the entire list of records as input. This means the workflow needs to contain an [Iterator action](/user-guide/workflows/capabilities/workflow-actions#iterator).
<Note>
This is more advanced, and best for people who want to optimize the number of workflow runs.
</Note>
@@ -16,7 +16,7 @@ This workflow uses a **Manual Trigger** so users can generate a PDF on demand fo
Before setting up the workflow:
1. **Create an API Key**: Go to **Settings → APIs** and create a new API key. You'll need this token for the logic function.
1. **Create an API Key**: Go to **Settings → APIs** and create a new API key. You'll need this token for the Logic Function.
2. **Set up a PDF generation service** (optional): If you want to dynamically generate PDFs (e.g., quotes), use a service like Carbone, PDFMonkey, or DocuSeal to create the PDF and get a download URL.
## Step-by-Step Setup
@@ -28,12 +28,12 @@ Before setting up the workflow:
3. Choose the object you want to attach PDFs to (e.g., **Company** or **Opportunity**)
<Tip>
With a Manual Trigger, users can run this workflow using a button that appears on the top right once a record is selected, to generate and attach a PDF.
With a Manual Trigger, users can run this workflow using a button that appears on the top right once a record is selected — this runs the workflow to generate and attach a PDF.
</Tip>
### Step 2: Add a Logic Function
1. Add a **Code** action (logic function)
1. Add a **Code** action (Logic Function)
2. Create a new function with the code below
3. Configure the input parameters
@@ -235,7 +235,7 @@ For creating dynamic quotes or invoices:
| 1 | Manual Trigger (Company) | User initiates on a record |
| 2 | Search Record | Get Opportunity or line item details |
| 3 | HTTP Request | Call PDF generation API with record data |
| 4 | Serverless Function | Download and attach the generated PDF |
| 4 | Logic Function | Download and attach the generated PDF |
### Popular PDF Generation Services
@@ -244,7 +244,7 @@ For creating dynamic quotes or invoices:
- **DocuSeal** - Document automation platform
- **Documint** - API-first document generation
Each service provides an API that returns a PDF URL, which you can then pass to the logic function.
Each service provides an API that returns a PDF URL, which you can then pass to the Logic Function.
## Troubleshooting
@@ -3,7 +3,7 @@ title: Auto-Reply to Inbound Emails
description: Build a workflow that uses AI to triage incoming emails and send threaded replies automatically.
---
Respond to inbound emails in seconds — not hours. This workflow uses an AI Agent to filter out noise (newsletters, spam, auto-replies) and draft a personalized response to real messages, then sends it as a threaded reply inside the original conversation.
Respond to inbound emails in seconds — not hours. This workflow uses an AI Agent to filter out noise (newsletters, spam, auto-replies) and draft a personalized response to real messages. Then, AI sends it as a threaded reply inside the original conversation.
## How email threading works
@@ -42,7 +42,7 @@ This gives you the sender's email in `handle` and their name in `displayName`.
<img src="/images/user-guide/workflows/auto-reply/find-sender.png" style={{width:'100%'}}/>
### Step 4: AI triage and draft reply
### Step 4: Triage and draft a reply with AI
Add an **AI Agent** action. This single step does two things: decides whether the email deserves a reply, and if so, writes one.
@@ -152,13 +152,13 @@ Use **Iterator** to create each task from the array.
### Keep your other tools up-to-date
- Create customer in billing system with an **HTTP Request**
### Conditional Actions
### Conditional actions
Use **Filter** actions to:
- Different onboarding for enterprise vs SMB
- Different assignees based on region
- Skip notifications for small deals
### Include Deal Details
### Include Deal details
Use **Code** action to format:
- Deal summary documents
- Handoff notes for CS team
@@ -54,9 +54,6 @@ The Search Records action is limited to returning 200 records maximum. However,
### Step 4: Update the Person Record with a Create or Update Record action
1. Add a **Create or Update Record** action
<Warning>
Use **Upsert Record** instead of **Update Record** here. This lets you identify the person by their email address (the `handle` field) rather than requiring a record ID from a previous step.
</Warning>
2. Select **People** as the object
3. Find the person by matching their email to the `handle` from the Message Participant
4. Set your custom "Number of emails received" field to `{{searchRecords.totalCount}}`
@@ -3,7 +3,7 @@ title: Formula Fields
description: Create formula fields using workflows until native support is available.
---
Twenty doesn't yet support native formula fields yet (coming in 2026), but you can achieve the same result using workflows. This workaround lets you automatically calculate and populate field values—from simple concatenations to complex business logic.
Twenty doesn't yet support native formula fields (coming in 2026), but you can achieve the same result using workflows. This workaround lets you automatically calculate and populate field values—from simple concatenations to complex business logic.
## Common Use Cases
@@ -55,7 +55,7 @@ export const main = async (params) => {
See [How to Show Expected Amount in Pipeline](/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline) for the complete workflow.
### Quick Setup
### Setup
1. **Trigger**: Record is Updated (Opportunities, Amount OR Probability field)
@@ -17,7 +17,7 @@ You want to tag a colleague in a note so they receive a notification to review i
Instead of tagging in the note text, you can:
1. Create a **Reviewer** relation field on the Notes object
2. Assign the reviewer when creating or editing the note
3. A workflow automatically sends an email to the reviewer with a link to the note
3. Have a workflow automatically send an email to the reviewer with a link to the note
<Warning>
**Limitation**: This approach allows assigning one reviewer per field. If you need to notify multiple people, create additional relation fields (e.g., Reviewer 1, Reviewer 2). This won't scale well if you need to tag many collaborators at once.
@@ -15,11 +15,5 @@ Consider professional services for:
## Service Options
### Onboarding Packs
Get help from our core team with our 4-hour [Onboarding packs](https://twenty.com/onboarding-packages):
- **Workflow Creation**: Build custom workflows for your business processes
- **Data Model Design**: Optimize your data structure for workflow automation
- **Data Migration**: Import existing data with proper workflow integration
### Implementation Partners
Work with certified partners for advanced customizations. Contact us at [contact@twenty.com](mailto:contact@twenty.com) to connect with our [implementation partners](https://twenty.com/partners).
@@ -30,7 +30,7 @@ description: Frequently asked questions about workflows in Twenty.
|------|------------------|---------------|
| **Global** | None | Once, no record input |
| **Single** | One or more selected | Once per selected record |
| **Bulk** | One or more selected | Once, with all records as array |
| **Bulk** | One or more selected | Once, with all records as an array |
- **Global**: Use when the workflow doesn't need any record context (e.g., generate a report)
- **Single**: Use when you want to process each selected record independently (e.g., send individual emails)
@@ -155,11 +155,9 @@ description: Frequently asked questions about workflows in Twenty.
</Accordion>
<Accordion title="Why don't I see my workflow runs?">
Workflow runs might be failing immediately due to rate limits.
Workflow runs might be failing immediately due to rate limits. Twenty enforces a hard limit of 5,000 runs per hour per workspace.
**Hard limit: 5,000 runs per hour per workspace.**
If you exceed this limit, workflows are immediately marked as failed and won't appear in your runs list as expected.
If you exceed this limit, workflows are immediately marked as failed and won't appear in your runs list.
**Common scenarios that hit this limit**:
- Selecting more than 5,000 records with a Single manual trigger
@@ -73,8 +73,5 @@ After your trigger, add one or more actions:
## Need Help?
<Tip>
Want help automating your workflows?
- **Done for you:** [find a certified Twenty partner](https://twenty.com/partners/list?categories=SOLUTIONING&ref=docs-workflows) to design and build your automations end-to-end.
- **Onboarding pack:** a 4-hour guided Workflow Creation session with our team — [contact@twenty.com](mailto:contact@twenty.com).
Want help automating your workflows? [Find a certified Twenty partner](https://twenty.com/partners/list?categories=SOLUTIONING&ref=docs-workflows) to design and build your automations end-to-end.
</Tip>