CRM
Interact with CRM to manage workspaces, objects, records, and more.
Triggers
Events from this node that can start a flow. Add one from Choose a trigger.
Record Created
When a record is created
Settings
No settings.
Output
Later steps use this data through Current Trigger in the $ picker. For example, changes is $trigger.output.changes.
{
"changes": "string",
"objectId": "string",
"orgId": "string",
"recordId": "string",
"sentAt": "string",
"user": "string",
"workspaceId": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
changes | Any | |
objectId | Text | ID of the object |
orgId | Text | ID of the organization |
recordId | Text | ID of the record |
sentAt | Text | Timestamp when the event was sent |
user | Any | |
user.email | Text | Email of the user |
user.id | Text | Unique identifier for the user |
user.name | Text | Name of the user |
user.picture | Text | URL to the user's profile picture |
workspaceId | Text | ID of the workspace |
Record Updated
When a record is updated
Settings
No settings.
Output
Later steps use this data through Current Trigger in the $ picker. For example, changes is $trigger.output.changes.
{
"changes": "string",
"objectId": "string",
"orgId": "string",
"recordId": "string",
"sentAt": "string",
"user": "string",
"workspaceId": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
changes | Any | |
objectId | Text | ID of the object |
orgId | Text | ID of the organization |
recordId | Text | ID of the record |
sentAt | Text | Timestamp when the event was sent |
user | Any | |
user.email | Text | Email of the user |
user.id | Text | Unique identifier for the user |
user.name | Text | Name of the user |
user.picture | Text | URL to the user's profile picture |
workspaceId | Text | ID of the workspace |
Record Deleted
When a record is deleted
Settings
No settings.
Output
Later steps use this data through Current Trigger in the $ picker. For example, changes is $trigger.output.changes.
{
"changes": "string",
"objectId": "string",
"orgId": "string",
"recordId": "string",
"sentAt": "string",
"user": "string",
"workspaceId": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
changes | Any | |
objectId | Text | ID of the object |
orgId | Text | ID of the organization |
recordId | Text | ID of the record |
sentAt | Text | Timestamp when the event was sent |
user | Any | |
user.email | Text | Email of the user |
user.id | Text | Unique identifier for the user |
user.name | Text | Name of the user |
user.picture | Text | URL to the user's profile picture |
workspaceId | Text | ID of the workspace |
Flow Triggered by Custom Action Button
Triggered when a user clicks a Custom Action Button in the CRM to start a flow.
Settings
No settings.
Output
Later steps use this data through Current Trigger in the $ picker. For example, changes is $trigger.output.changes.
{
"changes": "string",
"objectId": "string",
"orgId": "string",
"recordId": "string",
"sentAt": "string",
"user": "string",
"workspaceId": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
changes | Any | |
objectId | Text | ID of the object |
orgId | Text | ID of the organization |
recordId | Text | ID of the record |
sentAt | Text | Timestamp when the event was sent |
user | Any | |
user.email | Text | Email of the user |
user.id | Text | Unique identifier for the user |
user.name | Text | Name of the user |
user.picture | Text | URL to the user's profile picture |
workspaceId | Text | ID of the workspace |
Attachment Created
When a record attachment is created
Settings
No settings.
Output
Later steps use this data through Current Trigger in the $ picker. For example, changes is $trigger.output.changes.
{
"changes": "string",
"objectId": "string",
"orgId": "string",
"recordId": "string",
"sentAt": "string",
"user": "string",
"workspaceId": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
changes | Any | |
objectId | Text | ID of the object |
orgId | Text | ID of the organization |
recordId | Text | ID of the record |
sentAt | Text | Timestamp when the event was sent |
user | Any | |
user.email | Text | Email of the user |
user.id | Text | Unique identifier for the user |
user.name | Text | Name of the user |
user.picture | Text | URL to the user's profile picture |
workspaceId | Text | ID of the workspace |
Attachment Deleted
When a record attachment is deleted
Settings
No settings.
Output
Later steps use this data through Current Trigger in the $ picker. For example, changes is $trigger.output.changes.
{
"changes": "string",
"objectId": "string",
"orgId": "string",
"recordId": "string",
"sentAt": "string",
"user": "string",
"workspaceId": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
changes | Any | |
objectId | Text | ID of the object |
orgId | Text | ID of the organization |
recordId | Text | ID of the record |
sentAt | Text | Timestamp when the event was sent |
user | Any | |
user.email | Text | Email of the user |
user.id | Text | Unique identifier for the user |
user.name | Text | Name of the user |
user.picture | Text | URL to the user's profile picture |
workspaceId | Text | ID of the workspace |
Attachment Updated
When a record attachment is updated
Settings
No settings.
Output
Later steps use this data through Current Trigger in the $ picker. For example, changes is $trigger.output.changes.
{
"changes": "string",
"objectId": "string",
"orgId": "string",
"recordId": "string",
"sentAt": "string",
"user": "string",
"workspaceId": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
changes | Any | |
objectId | Text | ID of the object |
orgId | Text | ID of the organization |
recordId | Text | ID of the record |
sentAt | Text | Timestamp when the event was sent |
user | Any | |
user.email | Text | Email of the user |
user.id | Text | Unique identifier for the user |
user.name | Text | Name of the user |
user.picture | Text | URL to the user's profile picture |
workspaceId | Text | ID of the workspace |
Actions
Steps this node can perform. Add one from Add a step, then pick the action.
List Workspaces
Get a list of all workspaces
Settings
No settings.
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.active | Yes / No | Whether the workspace is active |
data.createdAt | Text | Timestamp when the workspace was created |
data.deletedAt | Text | Timestamp when the workspace was deleted, null if not deleted |
data.description | Text | Description of the workspace |
data.id | Text | Unique identifier for the workspace |
data.name | Text | Name of the workspace |
data.orgId | Text | |
data.updatedAt | Text | Timestamp when the workspace was last updated |
Get Workspace
Get a workspace by ID
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace to retrieve |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.active | Yes / No | Whether the workspace is active |
data.createdAt | Text | Timestamp when the workspace was created |
data.deletedAt | Text | Timestamp when the workspace was deleted, null if not deleted |
data.description | Text | Description of the workspace |
data.id | Text | Unique identifier for the workspace |
data.name | Text | Name of the workspace |
data.orgId | Text | |
data.updatedAt | Text | Timestamp when the workspace was last updated |
List Objects
Get a list of all objects in a workspace
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace to list objects from |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.childObjects[] | List | List of child object identifiers |
data.createdAt | Text | Timestamp when the object was created |
data.description | Text | Description of the object |
data.displaySettings | Object | Visual display configuration for the object |
data.fields[] | List | List of field definitions for the object |
data.fields[].description | Text | Description of the field's purpose |
data.fields[].id | Text | Unique identifier for the field |
data.fields[].isProtected | Yes / No | Whether the field is protected from modifications |
data.fields[].name | Text | Display name of the field |
data.fields[].options | Object | Configuration options specific to the field type |
data.fields[].required | Yes / No | Whether the field is required |
data.fields[].type | Text | Type of the field (e.g., text, number, currency, etc.) |
data.fields[].uniqued | Yes / No | Whether the field is uniqued |
data.hasAvatar | Yes / No | Whether the object has an avatar |
data.icon | Text | Icon identifier for the object |
data.id | Text | Unique identifier for the object |
data.messaging | Object | Messaging configuration options |
data.messaging.email | Yes / No | |
data.messaging.line | Yes / No | |
data.messaging.sms | Yes / No | |
data.name | Object | Object name in singular and plural forms |
data.name.plural | Text | Plural form of the object name |
data.name.singular | Text | Singular form of the object name |
data.orgId | Text | ID of the organization this object belongs to |
data.profileSettings[] | List | Profile settings for the object |
data.profileSettings[].enabled | Yes / No | Whether the profile setting is enabled |
data.profileSettings[].type | Text | Type of profile setting |
data.references | Object | Map of fields to references from other objects |
data.updatedAt | Text | Timestamp when the object was last updated |
data.viewGroups[] | List | List of view group configurations for the object |
data.views[] | List | List of view configurations for the object |
data.views[].createdAt | Text | Timestamp when the view was created |
data.views[].createdBy | Text | ID of the user who created the view |
data.views[].description | Text | Description of the view |
data.views[].detailFieldOrder[] | List | Ordered list of field IDs for the detail view |
data.views[].fieldOrder[] | List | Ordered list of field IDs defining their display order |
data.views[].fields[] | List | List of field configurations in the view |
data.views[].filters | Object | Filter conditions applied to the view |
data.views[].icon | Text | Icon identifier for the view |
data.views[].id | Text | Unique identifier for the view |
data.views[].name | Text | Name of the view |
data.views[].objectId | Text | ID of the object the view belongs to |
data.views[].orgId | Text | ID of the organization this view belongs to |
data.views[].rowHeight | Text | Height of rows in the view |
data.views[].sort[] | List | Sort configurations for the view |
data.views[].textSearch | Text | Text search query applied to the view |
data.views[].type | Text | Type of view (e.g., grid, kanban, etc.) |
data.views[].updatedAt | Text | Timestamp when the view was last updated |
data.workspaceId | Text | ID of the workspace this object belongs to |
Get Object
Get an object by ID
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace to list objects from |
| Object ID | Text | Yes | ID of the object to retrieve |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.childObjects[] | List | List of child object identifiers |
data.createdAt | Text | Timestamp when the object was created |
data.description | Text | Description of the object |
data.displaySettings | Object | Visual display configuration for the object |
data.fields[] | List | List of field definitions for the object |
data.fields[].description | Text | Description of the field's purpose |
data.fields[].id | Text | Unique identifier for the field |
data.fields[].isProtected | Yes / No | Whether the field is protected from modifications |
data.fields[].name | Text | Display name of the field |
data.fields[].options | Object | Configuration options specific to the field type |
data.fields[].required | Yes / No | Whether the field is required |
data.fields[].type | Text | Type of the field (e.g., text, number, currency, etc.) |
data.fields[].uniqued | Yes / No | Whether the field is uniqued |
data.hasAvatar | Yes / No | Whether the object has an avatar |
data.icon | Text | Icon identifier for the object |
data.id | Text | Unique identifier for the object |
data.messaging | Object | Messaging configuration options |
data.messaging.email | Yes / No | |
data.messaging.line | Yes / No | |
data.messaging.sms | Yes / No | |
data.name | Object | Object name in singular and plural forms |
data.name.plural | Text | Plural form of the object name |
data.name.singular | Text | Singular form of the object name |
data.orgId | Text | ID of the organization this object belongs to |
data.profileSettings[] | List | Profile settings for the object |
data.profileSettings[].enabled | Yes / No | Whether the profile setting is enabled |
data.profileSettings[].type | Text | Type of profile setting |
data.references | Object | Map of fields to references from other objects |
data.updatedAt | Text | Timestamp when the object was last updated |
data.viewGroups[] | List | List of view group configurations for the object |
data.views[] | List | List of view configurations for the object |
data.views[].createdAt | Text | Timestamp when the view was created |
data.views[].createdBy | Text | ID of the user who created the view |
data.views[].description | Text | Description of the view |
data.views[].detailFieldOrder[] | List | Ordered list of field IDs for the detail view |
data.views[].fieldOrder[] | List | Ordered list of field IDs defining their display order |
data.views[].fields[] | List | List of field configurations in the view |
data.views[].filters | Object | Filter conditions applied to the view |
data.views[].icon | Text | Icon identifier for the view |
data.views[].id | Text | Unique identifier for the view |
data.views[].name | Text | Name of the view |
data.views[].objectId | Text | ID of the object the view belongs to |
data.views[].orgId | Text | ID of the organization this view belongs to |
data.views[].rowHeight | Text | Height of rows in the view |
data.views[].sort[] | List | Sort configurations for the view |
data.views[].textSearch | Text | Text search query applied to the view |
data.views[].type | Text | Type of view (e.g., grid, kanban, etc.) |
data.views[].updatedAt | Text | Timestamp when the view was last updated |
data.workspaceId | Text | ID of the workspace this object belongs to |
List Views
Get a list of all views of an object in a workspace
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace to list objects from |
| Object ID | Text | Yes | ID of the object to list views from |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.createdAt | Text | Timestamp when the view was created |
data.createdBy | Text | ID of the user who created the view |
data.description | Text | Description of the view |
data.detailFieldOrder[] | List | Ordered list of field IDs for the detail view |
data.fieldOrder[] | List | Ordered list of field IDs defining their display order |
data.fields[] | List | List of field configurations in the view |
data.filters | Object | Filter conditions applied to the view |
data.icon | Text | Icon identifier for the view |
data.id | Text | Unique identifier for the view |
data.name | Text | Name of the view |
data.objectId | Text | ID of the object the view belongs to |
data.orgId | Text | ID of the organization this view belongs to |
data.rowHeight | Text | Height of rows in the view |
data.sort[] | List | Sort configurations for the view |
data.textSearch | Text | Text search query applied to the view |
data.type | Text | Type of view (e.g., grid, kanban, etc.) |
data.updatedAt | Text | Timestamp when the view was last updated |
Get View
Get a view by ID
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace |
| Object ID | Text | Yes | ID of the object containing the view |
| View ID | Text | Yes | ID of the view to retrieve |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.createdAt | Text | Timestamp when the view was created |
data.createdBy | Text | ID of the user who created the view |
data.description | Text | Description of the view |
data.detailFieldOrder[] | List | Ordered list of field IDs for the detail view |
data.fieldOrder[] | List | Ordered list of field IDs defining their display order |
data.fields[] | List | List of field configurations in the view |
data.filters | Object | Filter conditions applied to the view |
data.icon | Text | Icon identifier for the view |
data.id | Text | Unique identifier for the view |
data.name | Text | Name of the view |
data.objectId | Text | ID of the object the view belongs to |
data.orgId | Text | ID of the organization this view belongs to |
data.rowHeight | Text | Height of rows in the view |
data.sort[] | List | Sort configurations for the view |
data.textSearch | Text | Text search query applied to the view |
data.type | Text | Type of view (e.g., grid, kanban, etc.) |
data.updatedAt | Text | Timestamp when the view was last updated |
Create Field
Create a new field
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace |
| Object ID | Text | Yes | ID of the object containing the view |
| Data | Object | Yes | Field definition data |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.description | Text | Description of the field's purpose |
data.id | Text | Unique identifier for the field |
data.isProtected | Yes / No | Whether the field is protected from modifications |
data.name | Text | Display name of the field |
data.options | Object | Configuration options specific to the field type |
data.required | Yes / No | Whether the field is required |
data.type | Text | Type of the field (e.g., text, number, currency, etc.) |
data.uniqued | Yes / No | Whether the field is uniqued |
Update Field
Update an existing field
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace |
| Object ID | Text | Yes | ID of the object containing the view |
| Field ID | Text | Yes | ID of the field to update |
| Data | Object | Yes | Field update data |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.description | Text | Description of the field's purpose |
data.id | Text | Unique identifier for the field |
data.isProtected | Yes / No | Whether the field is protected from modifications |
data.name | Text | Display name of the field |
data.options | Object | Configuration options specific to the field type |
data.required | Yes / No | Whether the field is required |
data.type | Text | Type of the field (e.g., text, number, currency, etc.) |
data.uniqued | Yes / No | Whether the field is uniqued |
Delete Field
Delete a field
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace |
| Object ID | Text | Yes | ID of the object |
| Field ID | Text | Yes | ID of the field to delete |
Output
No documented output fields.
List Records
Get a list of all records of an object in a workspace
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace the record belongs to |
| Object ID | Text | ID of the object to list records from. Either objectId or viewId must be provided. Use this when you need filtering and sorting capabilities. | |
| View ID | Text | ID of the view to list records from. Either objectId or viewId must be provided. Note: filters and sort parameters are ignored when using viewId. | |
| Filters | Object | Filter conditions to apply to the record list. Only supported when using objectId (ignored when using viewId). | |
| Limit | Number | Maximum number of records to return. Use a number or reference another node (e.g. Loop node) for dynamic pagination. | |
| Offset | Number | Number of records to skip. Use a number or reference another node (e.g. $.loopNodeId.output.currentValue for pagination 0, 2, 4, ...). | |
| Sort | List | Sort configurations for the record list. Only supported when using objectId (ignored when using viewId). |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.autoId | Number | Automatically generated sequential ID for the record |
data.createdAt | Text | Timestamp when the record was created |
data.createdBy | Object | User who created the record |
data.createdBy.email | Text | Email of the user |
data.createdBy.id | Text | Unique identifier for the user |
data.createdBy.name | Text | Name of the user |
data.createdBy.picture | Text | URL to the user's profile picture |
data.id | Text | Unique identifier for the record |
data.updatedAt | Text | Timestamp when the record was last updated |
data.updatedBy | Object | User who last updated the record |
data.updatedBy.email | Text | Email of the user |
data.updatedBy.id | Text | Unique identifier for the user |
data.updatedBy.name | Text | Name of the user |
data.updatedBy.picture | Text | URL to the user's profile picture |
Get Record
Get a record by ID
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace |
| Object ID | Text | Yes | ID of the object |
| Record ID | Text | Yes | ID of the record |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.autoId | Number | Automatically generated sequential ID for the record |
data.createdAt | Text | Timestamp when the record was created |
data.createdBy | Object | User who created the record |
data.createdBy.email | Text | Email of the user |
data.createdBy.id | Text | Unique identifier for the user |
data.createdBy.name | Text | Name of the user |
data.createdBy.picture | Text | URL to the user's profile picture |
data.id | Text | Unique identifier for the record |
data.updatedAt | Text | Timestamp when the record was last updated |
data.updatedBy | Object | User who last updated the record |
data.updatedBy.email | Text | Email of the user |
data.updatedBy.id | Text | Unique identifier for the user |
data.updatedBy.name | Text | Name of the user |
data.updatedBy.picture | Text | URL to the user's profile picture |
Create Record
Create a new record
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace |
| Object ID | Text | Yes | ID of the object |
| Enable Dynamic Options | Yes / No | When enabled, the Data field loads select and multiSelect value choices dynamically from CRM using dynamicOption=true. Disable to fetch field keys without dynamic choices. Default: false | |
| Data | Key–value pairs | Yes | Record data as { fieldId: value }. For 'select' / 'multiSelect' fields you may pass the value in three forms: (1) bare id(s) or unique label(s) - string for select, array for multiSelect - resolved id-first, then by unique label; (2) explicit ids - { "id": "abc" } or { "ids": ["a", "b"] } - strict, never falls back to labels; (3) explicit labels - { "label": "My Label" } or { "labels": ["L1", "L2"] } - resolved client-side to ids and rejected when a label is unknown or non-unique. All other field types accept their natural JSON value. |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.autoId | Number | Automatically generated sequential ID for the record |
data.createdAt | Text | Timestamp when the record was created |
data.createdBy | Object | User who created the record |
data.createdBy.email | Text | Email of the user |
data.createdBy.id | Text | Unique identifier for the user |
data.createdBy.name | Text | Name of the user |
data.createdBy.picture | Text | URL to the user's profile picture |
data.id | Text | Unique identifier for the record |
data.updatedAt | Text | Timestamp when the record was last updated |
data.updatedBy | Object | User who last updated the record |
data.updatedBy.email | Text | Email of the user |
data.updatedBy.id | Text | Unique identifier for the user |
data.updatedBy.name | Text | Name of the user |
data.updatedBy.picture | Text | URL to the user's profile picture |
Update Record
Update an existing record
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace |
| Object ID | Text | Yes | ID of the object |
| Record ID | Text | Yes | ID of the record |
| Enable Dynamic Options | Yes / No | When enabled, the Data field loads select and multiSelect value choices dynamically from CRM using dynamicOption=true. Disable to fetch field keys without dynamic choices. Default: false | |
| Data | Key–value pairs | Yes | Record data as { fieldId: value } with the fields to update. For 'select' / 'multiSelect' fields you may pass the value in three forms: (1) bare id(s) or unique label(s) - string for select, array for multiSelect - resolved id-first, then by unique label; (2) explicit ids - { "id": "abc" } or { "ids": ["a", "b"] } - strict, never falls back to labels; (3) explicit labels - { "label": "My Label" } or { "labels": ["L1", "L2"] } - resolved client-side to ids and rejected when a label is unknown or non-unique. All other field types accept their natural JSON value. |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.autoId | Number | Automatically generated sequential ID for the record |
data.createdAt | Text | Timestamp when the record was created |
data.createdBy | Object | User who created the record |
data.createdBy.email | Text | Email of the user |
data.createdBy.id | Text | Unique identifier for the user |
data.createdBy.name | Text | Name of the user |
data.createdBy.picture | Text | URL to the user's profile picture |
data.id | Text | Unique identifier for the record |
data.updatedAt | Text | Timestamp when the record was last updated |
data.updatedBy | Object | User who last updated the record |
data.updatedBy.email | Text | Email of the user |
data.updatedBy.id | Text | Unique identifier for the user |
data.updatedBy.name | Text | Name of the user |
data.updatedBy.picture | Text | URL to the user's profile picture |
Upsert Record
Create or update a record in one call: amends the record matching Filter, or creates a new one when nothing matches
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace |
| Object ID | Text | Yes | ID of the object |
| Enable Dynamic Options | Yes / No | When enabled, the Data field loads select and multiSelect value choices dynamically from CRM using dynamicOption=true. Disable to fetch field keys without dynamic choices. Default: false | |
| Filter | Key–value pairs | Yes | Equality match only. Every row is combined with AND; OR is not supported, so put a Path node before this node to branch when you need OR. Select a LINE, email, or phone field; datetime filters are not supported yet. Also set the same field in Data, because CRM does not copy filter values into a record it creates and the next run would insert a duplicate. If more than 10 records match, CRM rejects the request and writes nothing. When no record matches, CRM creates one from Data. Filter values are sent as stored values without label resolution, and the filter must not be empty. |
| Data | Key–value pairs | Yes | Record data as { fieldId: value } to write. For 'select' / 'multiSelect' fields you may pass the value in three forms: (1) bare id(s) or unique label(s) - string for select, array for multiSelect - resolved id-first, then by unique label; (2) explicit ids - { "id": "abc" } or { "ids": ["a", "b"] } - strict, never falls back to labels; (3) explicit labels - { "label": "My Label" } or { "labels": ["L1", "L2"] } - resolved client-side to ids and rejected when a label is unknown or non-unique. All other field types accept their natural JSON value. |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.created | Yes / No | True when CRM inserted a new record because Filter matched nothing. False when existing records were amended. Use this flag to tell insert from update. |
data.matchedCount | Number | Number of existing records that matched Filter before the write |
data.records[] | List | Written records (created or updated) |
data.records[].autoId | Number | Automatically generated sequential ID for the record |
data.records[].createdAt | Text | Timestamp when the record was created |
data.records[].createdBy | Object | User who created the record |
data.records[].createdBy.email | Text | Email of the user |
data.records[].createdBy.id | Text | Unique identifier for the user |
data.records[].createdBy.name | Text | Name of the user |
data.records[].createdBy.picture | Text | URL to the user's profile picture |
data.records[].id | Text | Unique identifier for the record |
data.records[].updatedAt | Text | Timestamp when the record was last updated |
data.records[].updatedBy | Object | User who last updated the record |
data.records[].updatedBy.email | Text | Email of the user |
data.records[].updatedBy.id | Text | Unique identifier for the user |
data.records[].updatedBy.name | Text | Name of the user |
data.records[].updatedBy.picture | Text | URL to the user's profile picture |
data.updatedCount | Number | Number of existing records CRM reports as updated. TODO(crm): on insert this is currently 1 even when created is true and matchedCount is 0; trust created until CRM returns insertedCount and sets this to 0 on create. |
Delete Record
Delete a record
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace |
| Object ID | Text | Yes | ID of the object |
| Record ID | Text | Yes | ID of the record |
Output
No documented output fields.
List Attachments
Get a list of attachments for a record
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace |
| Object ID | Text | Yes | ID of the object |
| Record ID | Text | Yes | ID of the record |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.attachments[] | List | List of attachments |
data.attachments[].categoryId | Text | ID of the category the attachment belongs to |
data.attachments[].createdAt | Text | Timestamp when the attachment was created |
data.attachments[].id | Text | Unique identifier for the attachment |
data.attachments[].mimeType | Text | MIME type of the attachment |
data.attachments[].path | Text | File path of the attachment |
data.attachments[].size | Number | Size of the attachment in bytes |
data.attachments[].title | Text | Title of the attachment |
data.attachments[].updatedAt | Text | Timestamp when the attachment was last updated |
data.attachments[].url | Text | URL to access the attachment |
data.totalRecordsCount | Number | Total number of attachment records |
Get Attachment
Get a specific attachment by ID
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace |
| Object ID | Text | Yes | ID of the object |
| Record ID | Text | Yes | ID of the record |
| Attachment ID | Text | Yes | ID of the attachment |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.categoryId | Text | ID of the category the attachment belongs to |
data.createdAt | Text | Timestamp when the attachment was created |
data.id | Text | Unique identifier for the attachment |
data.mimeType | Text | MIME type of the attachment |
data.path | Text | File path of the attachment |
data.size | Number | Size of the attachment in bytes |
data.title | Text | Title of the attachment |
data.updatedAt | Text | Timestamp when the attachment was last updated |
data.url | Text | URL to access the attachment |
Upload Attachment
Upload a file to a CRM record as an attachment
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | |
| Object ID | Text | Yes | |
| Record ID | Text | Yes | |
| File | File | Yes | File to attach to the CRM record. Supports both manual upload and reference from other nodes. |
| Override Existing | Yes / No | If true, replace existing attachment with the same name. If false, skip upload if duplicate exists. Default: true |
Output
Later steps use this data by picking this step in the $ picker. For example, attachment is $.<step ID>.output.attachment.
{
"attachment": {},
"uploadedUrl": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
attachment | Object | |
uploadedUrl | Text |
Export View
Export a CRM view and receive notification when the export is ready
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace | Choice (loaded from your account) | Yes | Workspace containing the object and view to export |
| Object | Choice (loaded from your account) | Yes | Object containing the view to export |
| View | Choice (loaded from your account) | Yes | View to export |
| Notification Method | Choice | Yes | How to receive notification when the export is ready Options: Email, Callback URL |
| Email Address | Text | Yes | Email address to receive the export notification |
| Callback URL | Text | Yes | URL to receive a callback when the export is ready |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": {}
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Object | Export result including status and download information |
Create Activity
Create an activity on a record's timeline
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace |
| Object ID | Text | Yes | ID of the object the record belongs to |
| Record ID | Text | Yes | ID of the record to attach the activity to |
| Activity Action | Text | Yes | Verb/event name of the activity (e.g. reservation.created, mail.sent) |
| Sent At | Text | Yes | When the activity happened, as an ISO-8601 timestamp with timezone offset (e.g. 2020-10-27T14:00:00+00:00) |
| Actor | Object | Yes | Who performed the action, as { "id": string, "type": string, "properties"?: object } |
| Source Type | Choice | Yes | Origin system of the activity. Determines which downstream HTML page is rendered. Only Livechat is supported for now. Options: Livechat |
| Object | Object | The thing acted upon (optional), as { "id": string, "type": string, "properties"?: object }. Dotted keys expand into nested objects, e.g. "properties.message" becomes properties.message. | |
| Target | Object | Recipient/target of the action (optional), as { "id": string, "type": string, "properties"?: object } | |
| Context | Object | Free-form ambient metadata (optional) |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.action | Text | Verb/event name of the activity (e.g. reservation.created) |
data.actor | Any | |
data.actor.id | Text | Identifier of the entity (external/opaque id) |
data.actor.properties | Object | Free-form key/value properties of the entity |
data.actor.type | Text | Namespaced entity type (e.g. virtualstore.guest, mail) |
data.context | Object | Free-form ambient metadata |
data.createdAt | Text | Timestamp when the activity was created |
data.id | Text | Unique identifier for the activity |
data.object | Any | |
data.object.id | Text | Identifier of the entity (external/opaque id) |
data.object.properties | Object | Free-form key/value properties of the entity |
data.object.type | Text | Namespaced entity type (e.g. virtualstore.guest, mail) |
data.objectId | Text | ID of the CRM object definition the activity is anchored to |
data.recordId | Text | ID of the CRM record the activity is anchored to |
data.sentAt | Text | ISO-8601 timestamp of when the activity happened |
data.source | Any | |
data.source.id | Text | Identifier of the entity (external/opaque id) |
data.source.properties | Object | Free-form key/value properties of the entity |
data.source.type | Text | Namespaced entity type (e.g. virtualstore.guest, mail) |
data.target | Any | |
data.target.id | Text | Identifier of the entity (external/opaque id) |
data.target.properties | Object | Free-form key/value properties of the entity |
data.target.type | Text | Namespaced entity type (e.g. virtualstore.guest, mail) |
data.updatedAt | Text | Timestamp when the activity was last updated |
Upsert Activity
Amend a single existing activity on a record's timeline (update-only merge; never inserts). Select the target activity by Upsert Key or Activity ID.
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace |
| Object ID | Text | Yes | ID of the object the record belongs to |
| Record ID | Text | Yes | ID of the record the activity is attached to |
| Activity Action | Text | Verb/event name of the activity (e.g. mail.delivered). Optional — this is a merge, so leave blank to keep the existing value. | |
| Sent At | Text | When the activity happened, as an ISO-8601 timestamp with timezone offset (e.g. 2020-10-27T15:00:00+00:00). Optional — leave blank to keep the existing value. | |
| Actor | Object | Who performed the action, as { "id": string, "type": string, "properties"?: object }. Optional — leave blank to keep the existing value. | |
| Source Type | Choice | Yes | Origin system of the activity. Determines which downstream HTML page is rendered. Only Livechat is supported for now. Options: Livechat |
| Upsert Key | Text | Dot-path into the body used to find the activity to amend (e.g. object.properties.conversationId). Takes precedence over Activity ID and must resolve to a non-null primitive. Provide this or Activity ID. | |
| Activity ID | Text | Mongo _id of the activity to amend. Used only when Upsert Key is not set. Provide this or Upsert Key. | |
| Object | Object | The thing acted upon (optional), as { "id": string, "type": string, "properties"?: object }. Dotted keys expand into nested objects, e.g. "properties.conversationId" becomes properties.conversationId. Omitted fields are retained on the existing activity. | |
| Target | Object | Recipient/target of the action (optional), as { "id": string, "type": string, "properties"?: object } | |
| Context | Object | Free-form ambient metadata (optional) |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.action | Text | Verb/event name of the activity (e.g. reservation.created) |
data.actor | Any | |
data.actor.id | Text | Identifier of the entity (external/opaque id) |
data.actor.properties | Object | Free-form key/value properties of the entity |
data.actor.type | Text | Namespaced entity type (e.g. virtualstore.guest, mail) |
data.context | Object | Free-form ambient metadata |
data.createdAt | Text | Timestamp when the activity was created |
data.id | Text | Unique identifier for the activity |
data.object | Any | |
data.object.id | Text | Identifier of the entity (external/opaque id) |
data.object.properties | Object | Free-form key/value properties of the entity |
data.object.type | Text | Namespaced entity type (e.g. virtualstore.guest, mail) |
data.objectId | Text | ID of the CRM object definition the activity is anchored to |
data.recordId | Text | ID of the CRM record the activity is anchored to |
data.sentAt | Text | ISO-8601 timestamp of when the activity happened |
data.source | Any | |
data.source.id | Text | Identifier of the entity (external/opaque id) |
data.source.properties | Object | Free-form key/value properties of the entity |
data.source.type | Text | Namespaced entity type (e.g. virtualstore.guest, mail) |
data.target | Any | |
data.target.id | Text | Identifier of the entity (external/opaque id) |
data.target.properties | Object | Free-form key/value properties of the entity |
data.target.type | Text | Namespaced entity type (e.g. virtualstore.guest, mail) |
data.updatedAt | Text | Timestamp when the activity was last updated |
List Activities
Get a list of activities for a record
Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Workspace ID | Text | Yes | ID of the workspace |
| Object ID | Text | Yes | ID of the object the record belongs to |
| Record ID | Text | Yes | ID of the record to list activities for |
| Limit | Number | Maximum number of activities to return. Use a number or reference another node (e.g. Loop node) for dynamic pagination. | |
| Skip | Number | Number of activities to skip. Use a number or reference another node for pagination. | |
| Filters | Object | Filter conditions to apply to the activity list | |
| Sort | List | Sort configurations for the activity list (defaults to createdAt descending) | |
| Text Search | Text | Full-text search over the activity object properties. Requires MongoDB Atlas search on the CRM side. |
Output
Later steps use this data by picking this step in the $ picker. For example, data is $.<step ID>.output.data.
{
"data": "string"
}Example values show the shape of the data, not real values. See Using data from earlier steps.
Field descriptions
| Field | Type | Description |
|---|---|---|
data | Any | |
data.activities[] | List | List of activities |
data.activities[].action | Text | Verb/event name of the activity (e.g. reservation.created) |
data.activities[].actor | Any | |
data.activities[].actor.id | Text | Identifier of the entity (external/opaque id) |
data.activities[].actor.properties | Object | Free-form key/value properties of the entity |
data.activities[].actor.type | Text | Namespaced entity type (e.g. virtualstore.guest, mail) |
data.activities[].context | Object | Free-form ambient metadata |
data.activities[].createdAt | Text | Timestamp when the activity was created |
data.activities[].id | Text | Unique identifier for the activity |
data.activities[].object | Any | |
data.activities[].object.id | Text | Identifier of the entity (external/opaque id) |
data.activities[].object.properties | Object | Free-form key/value properties of the entity |
data.activities[].object.type | Text | Namespaced entity type (e.g. virtualstore.guest, mail) |
data.activities[].objectId | Text | ID of the CRM object definition the activity is anchored to |
data.activities[].recordId | Text | ID of the CRM record the activity is anchored to |
data.activities[].sentAt | Text | ISO-8601 timestamp of when the activity happened |
data.activities[].source | Any | |
data.activities[].source.id | Text | Identifier of the entity (external/opaque id) |
data.activities[].source.properties | Object | Free-form key/value properties of the entity |
data.activities[].source.type | Text | Namespaced entity type (e.g. virtualstore.guest, mail) |
data.activities[].target | Any | |
data.activities[].target.id | Text | Identifier of the entity (external/opaque id) |
data.activities[].target.properties | Object | Free-form key/value properties of the entity |
data.activities[].target.type | Text | Namespaced entity type (e.g. virtualstore.guest, mail) |
data.activities[].updatedAt | Text | Timestamp when the activity was last updated |
data.totalRecordsCount | Number | Total number of activity records |