Pipory
Node reference

Twenty CRM

Twenty CRM node reference - all 70 operations, the credential it needs, and a worked example.

Twenty CRM REST API (Commerce/CRM). 70 operations: people, companies and opportunities (create, update, get, list, delete, find duplicates); notes and tasks including attaching them to records; attachments; workspace members; synced messages and calendar events; timeline activities; a generic record family that reaches ANY standard or custom object (find, create, batch create, update, bulk update, soft delete, restore, destroy, merge, duplicates, group-by); schema discovery over the metadata API; and webhook registration.

Credential: Twenty CRM credential - see Credentials.

Role permissions

Each operation below lists the role permission it needs. Role permissions are held by the ROLE assigned to the workspace API key, in Settings -> Roles. Twenty has NO OAuth scopes and no consent screen - a key is one opaque bearer string minted per workspace in Settings -> APIs, and everything it may do follows from the role behind it. Three things this catches people out on. First, there is no CREATE permission: permissions.utils.ts maps an insert onto canUpdateObjectRecords, so a role that may read but not update cannot create records either. Second, DELETE and DESTROY are different permissions on different operations - the Delete … operations soft-delete and need canSoftDeleteObjectRecords (Restore uses the same one), while Permanently destroy record needs canDestroyObjectRecords. Third, two families are gated by a SETTINGS flag rather than an object permission: the schema operations need the Data Model flag and the webhook operations need the MCP & APIs flag. And whatever else it grants, a role that does not have canBeAssignedToApiKeys cannot back an API key at all. If a run fails with a permission error, the node names the missing role permission in the error - grant it and re-run; you do not need to rebuild the workflow.

Operations (70)

People

OperationWhat it doesRole permission
createPersonCreate personcanUpdateObjectRecords on People
updatePersonUpdate personcanUpdateObjectRecords on People
getPersonGet personcanReadObjectRecords on People
listPeopleList peoplecanReadObjectRecords on People
deletePersonDelete personcanSoftDeleteObjectRecords on People
findDuplicatePeopleFind duplicate peoplecanReadObjectRecords on People

Companies

OperationWhat it doesRole permission
createCompanyCreate companycanUpdateObjectRecords on Companies
updateCompanyUpdate companycanUpdateObjectRecords on Companies
getCompanyGet companycanReadObjectRecords on Companies
listCompaniesList companiescanReadObjectRecords on Companies
deleteCompanyDelete companycanSoftDeleteObjectRecords on Companies
findDuplicateCompaniesFind duplicate companiescanReadObjectRecords on Companies

Opportunities

OperationWhat it doesRole permission
createOpportunityCreate opportunitycanUpdateObjectRecords on Opportunities
updateOpportunityUpdate opportunitycanUpdateObjectRecords on Opportunities
getOpportunityGet opportunitycanReadObjectRecords on Opportunities
listOpportunitiesList opportunitiescanReadObjectRecords on Opportunities
deleteOpportunityDelete opportunitycanSoftDeleteObjectRecords on Opportunities

Notes

OperationWhat it doesRole permission
createNoteCreate notecanUpdateObjectRecords on Notes (plus Note Targets when a link is set)
updateNoteUpdate notecanUpdateObjectRecords on Notes
getNoteGet notecanReadObjectRecords on Notes
listNotesList notescanReadObjectRecords on Notes
deleteNoteDelete notecanSoftDeleteObjectRecords on Notes
linkNoteAttach note to a recordcanUpdateObjectRecords on Note Targets
listNoteTargetsList what a note is attached tocanReadObjectRecords on Note Targets
unlinkNoteDetach note from a recordcanDestroyObjectRecords on Note Targets

Tasks

OperationWhat it doesRole permission
createTaskCreate taskcanUpdateObjectRecords on Tasks (plus Task Targets when a link is set)
updateTaskUpdate taskcanUpdateObjectRecords on Tasks
getTaskGet taskcanReadObjectRecords on Tasks
listTasksList taskscanReadObjectRecords on Tasks
deleteTaskDelete taskcanSoftDeleteObjectRecords on Tasks
linkTaskAttach task to a recordcanUpdateObjectRecords on Task Targets
listTaskTargetsList what a task is attached tocanReadObjectRecords on Task Targets
unlinkTaskDetach task from a recordcanDestroyObjectRecords on Task Targets

Attachments

OperationWhat it doesRole permission
createAttachmentCreate attachment recordcanUpdateObjectRecords on Attachments
listAttachmentsList attachmentscanReadObjectRecords on Attachments
deleteAttachmentDelete attachmentcanSoftDeleteObjectRecords on Attachments

Workspace members

OperationWhat it doesRole permission
listWorkspaceMembersList workspace memberscanReadObjectRecords on Workspace Members
getWorkspaceMemberGet workspace membercanReadObjectRecords on Workspace Members

Synced email & calendar (read-only)

OperationWhat it doesRole permission
listMessagesList messagescanReadObjectRecords on Messages
getMessageGet messagecanReadObjectRecords on Messages
listMessageThreadsList message threadscanReadObjectRecords on Message Threads
listMessageParticipantsList message participantscanReadObjectRecords on Message Participants
listCalendarEventsList calendar eventscanReadObjectRecords on Calendar Events
getCalendarEventGet calendar eventcanReadObjectRecords on Calendar Events
listCalendarEventParticipantsList event participantscanReadObjectRecords on Calendar Event Participants

Activity

OperationWhat it doesRole permission
listTimelineActivitiesList timeline activitiescanReadObjectRecords on Timeline Activities

Any object (standard or custom)

OperationWhat it doesRole permission
listRecordsList records (legacy)canReadObjectRecords on the object being listed (People, Opportunities or Companies)
findManyRecordsFind many recordscanReadObjectRecords on the object being addressed
findOneRecordFind one recordcanReadObjectRecords on the object being addressed
createRecordCreate recordcanUpdateObjectRecords on the object being addressed
createManyRecordsCreate many records (batch)canUpdateObjectRecords on the object being addressed
updateRecordUpdate recordcanUpdateObjectRecords on the object being addressed
updateManyRecordsUpdate many records (by filter)canUpdateObjectRecords on the object being addressed
deleteRecordDelete record (soft, restorable)canSoftDeleteObjectRecords on the object being addressed
deleteManyRecordsDelete many records (soft, by filter)canSoftDeleteObjectRecords on the object being addressed
destroyRecordPermanently destroy recordcanDestroyObjectRecords on the object being addressed
restoreRecordRestore soft-deleted recordcanSoftDeleteObjectRecords on the object being addressed
restoreManyRecordsRestore many records (by filter)canSoftDeleteObjectRecords on the object being addressed
mergeRecordsMerge recordscanUpdateObjectRecords on the object being addressed
findDuplicateRecordsFind duplicate recordscanReadObjectRecords on the object being addressed
groupByRecordsGroup records / aggregatecanReadObjectRecords on the object being addressed

Schema (metadata)

OperationWhat it doesRole permission
listObjectMetadataList objects and their fieldsthe Data Model settings permission on the key's role
getObjectMetadataGet one object's metadatathe Data Model settings permission on the key's role
listFieldMetadataList fieldsthe Data Model settings permission on the key's role
getFieldMetadataGet one field's metadatathe Data Model settings permission on the key's role

Webhooks

OperationWhat it doesRole permission
listWebhooksList webhooksthe MCP & APIs settings permission on the key's role
getWebhookGet webhookthe MCP & APIs settings permission on the key's role
createWebhookCreate webhookthe MCP & APIs settings permission on the key's role
updateWebhookUpdate webhookthe MCP & APIs settings permission on the key's role
deleteWebhookDelete webhookthe MCP & APIs settings permission on the key's role

Example

Write to a custom object you created this morning

Twenty has no static endpoint list — its REST API is generated from each workspace's own schema, so every object, standard or custom, answers the same record verbs under its own plural name. That is why the generic family exists: the object name is a FIELD, so a workflow reaches an object the day a user creates it, which no amount of hand-written per-entity operations could.

Set Operation to createRecord, then fill in:

FieldValueNotes
objectNamePluralwarrantyClaimsThe object's plural name from Settings > Data model — discover it with listObjectMetadata rather than guessing the pluralisation
recordJson{"name": "{{ myTrigger.reference }}", "amountMicros": "{{ myTrigger.amountMicros }}"}Keyed by the workspace's own field names, which listFieldMetadata will tell you

Sets {{record.id}} and {{record.record}}. Reads default to 60 rows and are silently clamped at 200, and depth accepts only 0 or 1 — both read out of Twenty's own server source rather than its docs.