> ## Documentation Index
> Fetch the complete documentation index at: https://docs.atako.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Twenty CRM

> Connect Twenty CRM to your Atako agents — 9 read and 11 write actions.

Let your agents work in your Twenty CRM: search and read people, companies, opportunities, notes, tasks and workspace members, create and update people, companies, opportunities and tasks, add notes, and link notes and tasks to records.

## Connection

* **Authentication**: API key (Twenty API key).
* **Required settings**:
  * **Twenty API domain** — api.twenty.com for Twenty Cloud; your own domain for a self-hosted instance (no https\:// nor path).

> [!NOTE]
>
> In Twenty: Settings → Workspace → Developers → API tab → Create API key. Name it, choose an expiration (15 days, 30 days, 90 days, 1 year, 2 years or Never) and copy the key (shown only once). The key acts with the role assigned to it (Admin by default): if your plan lets you choose a role, limit it to the objects the agents need (people, companies, opportunities, notes, tasks). Set the instance domain to api.twenty.com for Twenty Cloud, or to your own domain if you self-host.
>
> See [Twenty CRM's documentation](https://docs.twenty.com/developers/extend/api).

## Read actions (9)

| Action | Description |
| - | - |
| `get_company` | Get a company by id (UUID string, from list\_companies). Optional depth: 0 or 1. |
| `get_opportunity` | Get an opportunity by id (UUID string, from list\_opportunities). Optional depth: 0 or 1. |
| `get_person` | Get a person by id (UUID string, from list\_people). Optional depth: 0 or 1. |
| `list_companies` | List or search companies. Filter fields: name, domainName.primaryLinkUrl, address.addressCity, accountOwnerId, createdAt, e.g. name\[ilike]:"%acme%". Optional limit (1-200), starting\_after / ending\_before (cursors from pageInfo), order\_by, filter and depth (0 or 1). The answer is \{ data: \{ \<objects>: \[...] }, totalCount, pageInfo }. |
| `list_notes` | List notes (title and body; the records they are attached to are in noteTargets, returned with depth 1). Filter fields: title, createdAt, e.g. title\[ilike]:"%renewal%". Optional limit (1-200), starting\_after / ending\_before (cursors from pageInfo), order\_by, filter and depth (0 or 1). The answer is \{ data: \{ \<objects>: \[...] }, totalCount, pageInfo }. |
| `list_opportunities` | List or search opportunities. Filter fields: name, stage (NEW, SCREENING, MEETING, PROPOSAL, CUSTOMER), closeDate, companyId, pointOfContactId, ownerId, e.g. stage\[in]:\[MEETING,PROPOSAL]. Optional limit (1-200), starting\_after / ending\_before (cursors from pageInfo), order\_by, filter and depth (0 or 1). The answer is \{ data: \{ \<objects>: \[...] }, totalCount, pageInfo }. |
| `list_people` | List or search people (contacts). Filter fields: name.firstName, name.lastName, emails.primaryEmail, jobTitle, companyId, createdAt, e.g. emails.primaryEmail\[eq]:"[ana@acme.com](mailto:ana@acme.com)". Optional limit (1-200), starting\_after / ending\_before (cursors from pageInfo), order\_by, filter and depth (0 or 1). The answer is \{ data: \{ \<objects>: \[...] }, totalCount, pageInfo }. |
| `list_tasks` | List tasks. Filter fields: title, status (TODO, IN\_PROGRESS, DONE), dueAt, assigneeId, createdAt, e.g. status\[eq]:TODO. Optional limit (1-200), starting\_after / ending\_before (cursors from pageInfo), order\_by, filter and depth (0 or 1). The answer is \{ data: \{ \<objects>: \[...] }, totalCount, pageInfo }. |
| `list_workspace_members` | List the members of the workspace (ids to use as ownerId, accountOwnerId or assigneeId). Optional limit (1-200), starting\_after / ending\_before (cursors from pageInfo), order\_by, filter and depth (0 or 1). The answer is \{ data: \{ \<objects>: \[...] }, totalCount, pageInfo }. |

## Write actions (11)

| Action | Description |
| - | - |
| `create_company` | Create a company; returns the record with its id. Arguments: name (string, required); domainName (object \{primaryLinkUrl: string}); address (object \{addressStreet1, addressStreet2, addressCity, addressPostcode, addressState, addressCountry}, all strings); linkedinLink (object \{primaryLinkUrl: string}); annualRevenue (object \{amountMicros: integer, amount × 1 000 000; currencyCode: string ISO 4217}); accountOwnerId (UUID string from list\_workspace\_members). |
| `create_note` | Create a note; returns the record with its id (then attach it with link\_note). Arguments, all optional: title (string); bodyV2 (object \{markdown: string}). |
| `create_opportunity` | Create an opportunity; returns the record with its id. Arguments: name (string, required); amount (object \{amountMicros: integer, amount × 1 000 000; currencyCode: string ISO 4217}); closeDate (string, ISO 8601); stage (one of NEW, SCREENING, MEETING, PROPOSAL, CUSTOMER); companyId, pointOfContactId (UUID strings from list\_companies / list\_people); ownerId (UUID string from list\_workspace\_members). |
| `create_person` | Create a person; returns the record with its id. Arguments, all optional: name (object \{firstName: string, lastName: string}); emails (object \{primaryEmail: string, additionalEmails: array of strings}); phones (object \{primaryPhoneNumber: string, primaryPhoneCountryCode: string e.g. "FR", primaryPhoneCallingCode: string e.g. "+33"}); jobTitle (string); linkedinLink (object \{primaryLinkUrl: string}); companyId (UUID string from list\_companies). |
| `create_task` | Create a task; returns the record with its id (then attach it with link\_task). Arguments: title (string, required); bodyV2 (object \{markdown: string}); dueAt (string, ISO 8601); status (one of TODO, IN\_PROGRESS, DONE); assigneeId (UUID string from list\_workspace\_members). |
| `link_note` | Attach a note to a record. Arguments: noteId (UUID string from create\_note or list\_notes, required) and EXACTLY ONE of targetPersonId, targetCompanyId, targetOpportunityId (UUID strings). |
| `link_task` | Attach a task to a record. Arguments: taskId (UUID string from create\_task or list\_tasks, required) and EXACTLY ONE of targetPersonId, targetCompanyId, targetOpportunityId (UUID strings). |
| `update_company` | Update a company: only the arguments sent change. id (UUID string, required, from list\_companies); then any of name (string); domainName (object \{primaryLinkUrl: string}); address (object \{addressStreet1, addressStreet2, addressCity, addressPostcode, addressState, addressCountry}); linkedinLink (object \{primaryLinkUrl: string}); annualRevenue (object \{amountMicros: integer, currencyCode: string}); accountOwnerId (UUID string). |
| `update_opportunity` | Update an opportunity: only the arguments sent change. id (UUID string, required, from list\_opportunities); then any of name (string); amount (object \{amountMicros: integer, amount × 1 000 000; currencyCode: string ISO 4217}); closeDate (string, ISO 8601); stage (one of NEW, SCREENING, MEETING, PROPOSAL, CUSTOMER); companyId, pointOfContactId, ownerId (UUID strings). |
| `update_person` | Update a person: only the arguments sent change. id (UUID string, required, from list\_people); then any of name (object \{firstName: string, lastName: string}); emails (object \{primaryEmail: string, additionalEmails: array of strings}); phones (object \{primaryPhoneNumber: string, primaryPhoneCountryCode: string, primaryPhoneCallingCode: string}); jobTitle (string); linkedinLink (object \{primaryLinkUrl: string}); companyId (UUID string). |
| `update_task` | Update a task: only the arguments sent change. id (UUID string, required, from list\_tasks); then any of title (string); bodyV2 (object \{markdown: string}); dueAt (string, ISO 8601); status (one of TODO, IN\_PROGRESS, DONE); assigneeId (UUID string). |

## Permissions

Every action above must be explicitly granted to an agent before it can be used. See [Permissions](https://docs.atako.ai/integrations/permissions.md) for the grant model and [Security](https://docs.atako.ai/integrations/security.md) for how credentials are protected.

***

*Last reviewed against the provider API: October 2026.*


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.