<!-- BusyBot node reference — https://busybot.net/tools/monica-crm/ -->

> Node: Monica CRM (`monica_crm`) · Action · v1
> Category: Communication · Credentials: Monica CRM API (`monicaCrmApi`)
> Updated: 2026-08-16

# Monica CRM

> Manage contacts and personal relationships in Monica CRM

## Overview

Monica CRM is an open-source personal relationship management tool. This tool supports 12 resources (Activity, Call, Contact, Contact Field, Contact Tag, Conversation, Conversation Message, Journal Entry, Note, Reminder, Tag, Task) with CRUD operations including create, get, get many, update, and delete. It connects to both cloud-hosted (app.monicahq.com) and self-hosted Monica instances via Bearer token authentication.

**Category:** Communication  
**Tool Name:** `monica_crm`  
**Version:** 1

**Appearance:** Icon: `lucide-Heart` | Color: `#324058`

## Node Type

**Action** — processes input items and produces output

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | `Input` |
| Output | `Output`, `Error` |

## Credentials

This tool requires **Monica CRM API** credentials.
See the [Credentials Guide](https://busybot.net/credentials/monica-crm-api/) for setup instructions.

### Resources

| Resource | Value |
|----------|-------|
| Activity | `activity` |
| Call | `call` |
| Contact | `contact` |
| Contact Field | `contactField` |
| Contact Tag | `contactTag` |
| Conversation | `conversation` |
| Conversation Message | `conversationMessage` |
| Journal Entry | `journalEntry` |
| Note | `note` |
| Reminder | `reminder` |
| Tag | `tag` |
| Task | `task` |

### Operations

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create an activity |
| Delete | `delete` | Delete an activity |
| Get | `get` | Get an activity |
| Get Many | `getAll` | List activities |
| Update | `update` | Update an activity |
| Create | `create` | Create a call |
| Delete | `delete` | Delete a call |
| Get | `get` | Get a call |
| Get Many | `getAll` | List calls |
| Update | `update` | Update a call |
| Create | `create` | Create a contact |
| Delete | `delete` | Delete a contact |
| Get | `get` | Get a contact |
| Get Many | `getAll` | List contacts |
| Update | `update` | Update a contact |
| Create | `create` | Create a contact field |
| Delete | `delete` | Delete a contact field |
| Get | `get` | Get a contact field |
| Update | `update` | Update a contact field |
| Add | `add` | Add tags to a contact |
| Remove | `remove` | Remove tags from a contact |
| Create | `create` | Create a conversation |
| Delete | `delete` | Delete a conversation |
| Get | `get` | Get a conversation |
| Update | `update` | Update a conversation |
| Add | `add` | Add a message to a conversation |
| Update | `update` | Update a conversation message |
| Create | `create` | Create a journal entry |
| Delete | `delete` | Delete a journal entry |
| Get | `get` | Get a journal entry |
| Get Many | `getAll` | List journal entries |
| Update | `update` | Update a journal entry |
| Create | `create` | Create a note |
| Delete | `delete` | Delete a note |
| Get | `get` | Get a note |
| Get Many | `getAll` | List notes |
| Update | `update` | Update a note |
| Create | `create` | Create a reminder |
| Delete | `delete` | Delete a reminder |
| Get | `get` | Get a reminder |
| Get Many | `getAll` | List reminders |
| Update | `update` | Update a reminder |
| Create | `create` | Create a tag |
| Delete | `delete` | Delete a tag |
| Get | `get` | Get a tag |
| Get Many | `getAll` | List tags |
| Update | `update` | Update a tag |
| Create | `create` | Create a task |
| Delete | `delete` | Delete a task |
| Get | `get` | Get a task |
| Get Many | `getAll` | List tasks |
| Update | `update` | Update a task |

The operation list is scoped to the resource you pick, so most values appear once per resource. Contact Field and Conversation have no Get Many; Contact Tag offers only Add and Remove; Conversation Message offers only Add and Update.

### Parameters

#### Activity: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Activity Type ID | `string` | Yes | — | ID of the activity type. Retrieve available types from GET /activitytypes in your Monica CRM instance. |
| Contacts | `string` | Yes | — | Comma-separated list of IDs of the contacts to associate the activity with. Supports expressions. |
| Happened At | `string` | Yes | — | Date when the activity happened (ISO 8601 format). Supports expressions. |
| Summary | `string` | Yes | — | Brief description of the activity - max 255 characters. Supports expressions. |
| Additional Fields | `collection` | No | `{}` | Optional activity detail. |
| — Description | `string` | No | — | Description of the activity - max 100,000 characters. |

#### Activity: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Activity ID | `string` | Yes | — | ID of the activity. Supports expressions. |

#### Activity: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Activity ID | `string` | Yes | — | ID of the activity. Supports expressions. |

#### Activity: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Activity: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Activity ID | `string` | Yes | — | ID of the activity. Supports expressions. |
| Update Fields | `collection` | No | `{}` | The activity properties to change. |
| — Activity Type ID | `string` | No | — | ID of the activity type. Retrieve available types from GET /activitytypes in your Monica CRM instance. |
| — Contacts | `string` | No | — | Comma-separated IDs of the contacts to associate the activity with. |
| — Description | `string` | No | — | Description of the activity - max 100,000 characters. |
| — Happened At | `string` | No | — | Date when the activity happened (ISO 8601 format). |
| — Summary | `string` | No | — | Brief description of the activity - max 255 characters. |

#### Call: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | ID of the contact to associate the call with. Supports expressions like {{ $json.contactId }}. |
| Called At | `string` | Yes | — | Date when the call happened (ISO 8601 format). Supports expressions. |
| Description (`content`) | `string` | Yes | — | Description of the call - max 100,000 characters. Supports expressions. |

#### Call: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Call ID | `string` | Yes | — | ID of the call. Supports expressions. |

#### Call: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Call ID | `string` | Yes | — | ID of the call. Supports expressions. |

#### Call: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Call: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Call ID | `string` | Yes | — | ID of the call. Supports expressions. |
| Update Fields | `collection` | No | `{}` | The call properties to change. |
| — Called At | `string` | No | — | Date when the call happened (ISO 8601 format). |
| — Contact ID | `string` | No | — | ID of the contact to associate the call with. |
| — Description | `string` | No | — | Description of the call - max 100,000 characters. |

#### Contact: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| First Name | `string` | Yes | — | The contact's first name. Supports expressions. |
| Gender ID | `string` | Yes | — | ID of the gender. Retrieve available genders from GET /genders in your Monica CRM instance. |
| Additional Fields | `collection` | No | `{}` | The rest of the contact record. |
| — Birthdate | `string` | No | — | Birthdate in ISO 8601 format (e.g. 1990-05-15). |
| — Deceased Date | `string` | No | — | Deceased date in ISO 8601 format. |
| — Is Deceased | `boolean` | No | `false` | Whether the contact has passed away. |
| — Last Name | `string` | No | — | The contact's last name. |
| — Nickname | `string` | No | — | The contact's nickname. |
| — Type | `options` | No | `false` | Whether the contact gets their own contact sheet. |
| | | | | Options: `false` (Real — contact with their own contact sheet), `true` (Partial — contact without their own contact sheet) |

#### Contact: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | ID of the contact. Supports expressions. |

#### Contact: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | ID of the contact. Supports expressions. |

#### Contact: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Filters | `collection` | No | `{}` | Narrow and order the contacts returned. |
| — Search Term | `string` | No | — | Search term to filter results by. |
| — Sort | `options` | No | — | Ordering of the returned contacts. |
| | | | | Options: `created_at` (Ascended Created At), `-created_at` (Descended Created At), `updated_at` (Ascended Updated At), `-updated_at` (Descended Updated At) |
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Contact: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | ID of the contact. Supports expressions. |
| Update Fields | `collection` | No | `{}` | The contact properties to change. |
| — Birthdate | `string` | No | — | Birthdate in ISO 8601 format. |
| — Deceased Date | `string` | No | — | Deceased date in ISO 8601 format. |
| — First Name | `string` | No | — | The contact's first name. |
| — Gender ID | `string` | No | — | ID of the gender. Retrieve available genders from GET /genders. |
| — Is Deceased | `boolean` | No | `false` | Whether the contact has passed away. |
| — Last Name | `string` | No | — | The contact's last name. |
| — Nickname | `string` | No | — | The contact's nickname. |
| — Type | `options` | No | `false` | Whether the contact gets their own contact sheet. |
| | | | | Options: `false` (Real), `true` (Partial) |

#### Contact Field: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | ID of the contact to associate the contact field with. Supports expressions. |
| Contact Field Type ID | `string` | Yes | — | ID of the contact field type. Retrieve available types from GET /contactfieldtypes in your Monica CRM instance. |
| Content (`data`) | `string` | Yes | — | Content of the contact field - max 255 characters. Supports expressions. |

#### Contact Field: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact Field ID | `string` | Yes | — | ID of the contact field. Supports expressions. |

#### Contact Field: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact Field ID | `string` | Yes | — | ID of the contact field. Supports expressions. |

#### Contact Field: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | ID of the contact to associate the contact field with. Supports expressions. |
| Contact Field Type ID | `string` | Yes | — | ID of the contact field type. Retrieve available types from GET /contactfieldtypes in your Monica CRM instance. |
| Content (`data`) | `string` | Yes | — | Content of the contact field - max 255 characters. Supports expressions. |
| Contact Field ID | `string` | Yes | — | ID of the contact field. Supports expressions. |

#### Contact Tag: Add

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | ID of the contact. Supports expressions. |
| Tags to Add | `string` | Yes | — | Comma-separated tag names to add to the contact. These are tag names (strings), not IDs. |

#### Contact Tag: Remove

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | ID of the contact. Supports expressions. |
| Tags to Remove | `string` | Yes | — | Comma-separated tag IDs to remove from the contact. Use numeric tag IDs, not names. |

#### Conversation: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | ID of the contact to associate the conversation with. Supports expressions. |
| Contact Field Type ID | `string` | Yes | — | ID of the contact field type representing the communication channel. Retrieve from GET /contactfieldtypes. |
| Happened At | `string` | Yes | — | Date when the conversation happened (ISO 8601 format). Supports expressions. |

#### Conversation: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Conversation ID | `string` | Yes | — | ID of the conversation. Supports expressions. |

#### Conversation: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Conversation ID | `string` | Yes | — | ID of the conversation. Supports expressions. |

#### Conversation: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact Field Type ID | `string` | Yes | — | ID of the contact field type representing the communication channel. Retrieve from GET /contactfieldtypes. |
| Happened At | `string` | Yes | — | Date when the conversation happened (ISO 8601 format). Supports expressions. |
| Conversation ID | `string` | Yes | — | ID of the conversation. Supports expressions. |

#### Conversation Message: Add

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Conversation ID | `string` | Yes | — | ID of the conversation. Supports expressions like {{ $json.id }}. |
| Content (`content`) | `string` | Yes | — | Content of the message. Supports expressions. |
| Written At | `string` | Yes | — | Date when the message was written (ISO 8601 format). Supports expressions. |
| Written By | `options` | Yes | `true` | Author of the message. |
| | | | | Options: `true` (User), `false` (Contact) |

#### Conversation Message: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Conversation ID | `string` | Yes | — | ID of the conversation. Supports expressions. |
| Message ID | `string` | Yes | — | ID of the message to update. Supports expressions. |
| Update Fields | `collection` | No | `{}` | The message properties to change. |
| — Contact ID | `string` | No | — | ID of the contact to associate the message with. |
| — Content | `string` | No | — | Content of the message. |
| — Written At | `string` | No | — | Date when the message was written. |
| — Written By | `options` | No | `true` | Author of the message. |
| | | | | Options: `true` (User), `false` (Contact) |

#### Journal Entry: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Title | `string` | Yes | — | Title of the journal entry - max 250 characters. Supports expressions. |
| Content (`post`) | `string` | Yes | — | Content of the journal entry - max 100,000 characters. Supports expressions. |

#### Journal Entry: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Journal Entry ID | `string` | Yes | — | ID of the journal entry. Supports expressions. |

#### Journal Entry: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Journal Entry ID | `string` | Yes | — | ID of the journal entry. Supports expressions. |

#### Journal Entry: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Journal Entry: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Journal Entry ID | `string` | Yes | — | ID of the journal entry. Supports expressions. |
| Update Fields | `collection` | No | `{}` | The journal entry properties to change. |
| — Content | `string` | No | — | Content of the journal entry - max 100,000 characters. |
| — Title | `string` | No | — | Title of the journal entry - max 250 characters. |

#### Note: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | ID of the contact to associate the note with. Supports expressions. |
| Body | `string` | Yes | — | Body of the note - max 100,000 characters. Supports expressions. |
| Additional Fields | `collection` | No | `{}` | Optional note settings. |
| — Is Favorited | `boolean` | No | `false` | Whether the note has been favorited. |

#### Note: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Note ID | `string` | Yes | — | ID of the note. Supports expressions. |

#### Note: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Note ID | `string` | Yes | — | ID of the note. Supports expressions. |

#### Note: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Note: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Note ID | `string` | Yes | — | ID of the note. Supports expressions. |
| Update Fields | `collection` | No | `{}` | The note properties to change. |
| — Body | `string` | No | — | Body of the note - max 100,000 characters. |
| — Contact ID | `string` | No | — | ID of the contact to associate the note with. |
| — Is Favorited | `boolean` | No | `false` | Whether the note has been favorited. |

#### Reminder: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | No | — | ID of the contact to associate the reminder with. Supports expressions. |
| Frequency Type | `options` | Yes | `one_time` | Type of frequency of the reminder. |
| | | | | Options: `one_time` (Once), `week` (Weekly), `month` (Monthly), `year` (Yearly) |
| Recurring Interval | `number` | No | `0` | Interval for the reminder (e.g. every 2 weeks). _(shown when Frequency Type is `week`, `month`, `year`)_ |
| Initial Date | `string` | Yes | — | Date of the reminder (ISO 8601 format). Supports expressions. |
| Title | `string` | Yes | — | Title of the reminder - max 100,000 characters. Supports expressions. |
| Additional Fields | `collection` | No | `{}` | Optional reminder detail. |
| — Description | `string` | No | — | Description about the reminder - max 100,000 characters. |

#### Reminder: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Reminder ID | `string` | Yes | — | ID of the reminder. Supports expressions. |

#### Reminder: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Reminder ID | `string` | Yes | — | ID of the reminder. Supports expressions. |

#### Reminder: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Reminder: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Reminder ID | `string` | Yes | — | ID of the reminder. Supports expressions. |
| Update Fields | `collection` | No | `{}` | The reminder properties to change. |
| — Contact ID | `string` | No | — | ID of the contact to associate the reminder with. |
| — Description | `string` | No | — | Description about the reminder - max 100,000 characters. |
| — Frequency Type | `options` | No | `one_time` | Frequency of the reminder. |
| | | | | Options: `one_time` (One Time), `week` (Week), `month` (Month), `year` (Year) |
| — Initial Date | `string` | No | — | Date of the reminder (ISO 8601 format). |
| — Recurring Interval | `number` | No | `0` | Interval for the reminder. |
| — Title | `string` | No | — | Title of the reminder - max 100,000 characters. |

#### Tag: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Name | `string` | Yes | — | Name of the tag - max 250 characters. Supports expressions. |

#### Tag: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Tag ID | `string` | Yes | — | ID of the tag. Supports expressions. |

#### Tag: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Tag ID | `string` | Yes | — | ID of the tag. Supports expressions. |

#### Tag: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Tag: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Name | `string` | Yes | — | Name of the tag - max 250 characters. Supports expressions. |
| Tag ID | `string` | Yes | — | ID of the tag. Supports expressions. |

#### Task: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | ID of the contact to associate the task with. Supports expressions. |
| Title | `string` | Yes | — | Title of the task - max 250 characters. Supports expressions. |
| Additional Fields | `collection` | No | `{}` | Optional task detail. |
| — Description | `string` | No | — | Description of the task - max 100,000 characters. |

#### Task: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID | `string` | Yes | — | ID of the task. Supports expressions. |

#### Task: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID | `string` | Yes | — | ID of the task. Supports expressions. |

#### Task: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Task: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID | `string` | Yes | — | ID of the task. Supports expressions. |
| Update Fields | `collection` | No | `{}` | The task properties to change. |
| — Completed | `boolean` | No | `false` | Whether the task has been completed. |
| — Contact ID | `string` | No | — | ID of the contact to associate the task with. |
| — Description | `string` | No | — | Description of the task - max 100,000 characters. |
| — Title | `string` | No | — | Title of the task - max 250 characters. |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Max Concurrency | `number` | No | `10` | Maximum number of items to process concurrently. |

## Output Data

**This node never fans out** — every operation produces exactly one output item per input item. The Monica API envelope is unwrapped for you, so what you get is the record itself, not a wrapper.

| Operation shape | What lands on the item |
|-----------------|------------------------|
| Any `getAll` | `items` — the array of records. Use a Split Out node on `items` if you want one workflow item per record |
| `create`, `get`, `update`, `add`, `remove` | The record merged into the item JSON at the top level |
| Any `delete` | `success: true` |

Because single-record results are merged at the top level, the created record's `id` is available to the next node straight away — chain a create into a note or a tag with `{{ $json.id }}`.

The rest of the item JSON passes through unchanged and binary data is forwarded.

## Usage Examples

- Create a new contact in Monica CRM
- Get all activities from Monica CRM
- Update a reminder for a contact
- Add tags to a contact
- Create a journal entry

## Example Configuration

Create a contact:

```json
{
  "type": "monica_crm",
  "parameters": {
    "resource": "contact",
    "operation": "create",
    "firstName": "John",
    "genderId": "1",
    "additionalFields": {
      "last_name": "Doe",
      "birthdate": "1990-05-15",
      "nickname": "Johnny"
    }
  }
}
```

Log an activity against two contacts:

```json
{
  "type": "monica_crm",
  "parameters": {
    "resource": "activity",
    "operation": "create",
    "activityTypeId": "2",
    "contacts": "123,456",
    "happenedAt": "2023-12-01T10:00:00Z",
    "summary": "Meeting about project planning",
    "additionalFields": {
      "description": "Discussed project timeline and resource allocation"
    }
  }
}
```

Record a call:

```json
{
  "type": "monica_crm",
  "parameters": {
    "resource": "call",
    "operation": "create",
    "contactId": "123",
    "calledAt": "2023-12-01T14:30:00Z",
    "content": "Discussed upcoming meeting and shared project updates"
  }
}
```

Create a note and mark it a favourite:

```json
{
  "type": "monica_crm",
  "parameters": {
    "resource": "note",
    "operation": "create",
    "contactId": "123",
    "body": "Remember to follow up on the project proposal discussed during our last meeting",
    "additionalFields": {
      "isFavorited": true
    }
  }
}
```

Add tags to a contact — tag *names*, not IDs:

```json
{
  "type": "monica_crm",
  "parameters": {
    "resource": "contactTag",
    "operation": "add",
    "contactId": "123",
    "tagsToAdd": "client,important,vip"
  }
}
```

Create a recurring reminder:

```json
{
  "type": "monica_crm",
  "parameters": {
    "resource": "reminder",
    "operation": "create",
    "contactId": "123",
    "frequencyType": "month",
    "frequencyNumber": 3,
    "initialDate": "2024-01-15T09:00:00Z",
    "title": "Quarterly check-in call",
    "additionalFields": {
      "description": "Schedule quarterly business review with client"
    }
  }
}
```

Update contact information:

```json
{
  "type": "monica_crm",
  "parameters": {
    "resource": "contact",
    "operation": "update",
    "contactId": "123",
    "updateFields": {
      "first_name": "Jonathan",
      "last_name": "Smith",
      "birthdate": "1990-05-20"
    }
  }
}
```

List contacts matching a search, oldest first:

```json
{
  "type": "monica_crm",
  "parameters": {
    "resource": "contact",
    "operation": "getAll",
    "filters": {
      "query": "john",
      "sort": "created_at"
    },
    "returnAll": false,
    "limit": 50
  }
}
```

**Chaining nodes.** A create returns the new record on the item, so the node that follows can read its `id` directly. Put these two nodes in sequence to create a contact and immediately attach a note to it:

```json
{
  "type": "monica_crm",
  "parameters": {
    "resource": "contact",
    "operation": "create",
    "firstName": "Sarah",
    "genderId": "2",
    "additionalFields": {
      "last_name": "Johnson",
      "birthdate": "1985-08-22",
      "nickname": "SJ"
    }
  }
}
```

```json
{
  "type": "monica_crm",
  "parameters": {
    "resource": "note",
    "operation": "create",
    "contactId": "{{ $json.id }}",
    "body": "Initial contact established through networking event"
  }
}
```

The same pattern opens a conversation and posts its first message:

```json
{
  "type": "monica_crm",
  "parameters": {
    "resource": "conversation",
    "operation": "create",
    "contactId": "123",
    "contactFieldTypeId": "5",
    "happenedAt": "2023-12-01T15:00:00Z"
  }
}
```

```json
{
  "type": "monica_crm",
  "parameters": {
    "resource": "conversationMessage",
    "operation": "add",
    "conversationId": "{{ $json.id }}",
    "content": "Hi Sarah, thanks for the meeting today. Here are the action items we discussed...",
    "writtenAt": "2023-12-01T15:05:00Z",
    "writtenByMe": true
  }
}
```

### Error Handling

| Mode | Behavior |
|------|----------|
| **stop** | Halts workflow on first error |
| **continue** | Skips failed items, passes successful ones through |
| **errorPort** | Routes failed items to Error output port |

## Tips

Manage personal contacts, activities, calls, notes, conversations, journal entries, reminders, tags, and tasks in Monica CRM.

### Key Notes

- **Look up the reference IDs first.** Activity Type ID, Gender ID and Contact Field Type ID are numeric IDs from your own instance — read them from `/activitytypes`, `/genders` and `/contactfieldtypes` in Monica before hard-coding them.
- **Tags add by name, remove by ID.** Tags to Add takes tag names; Tags to Remove takes numeric tag IDs. They are not interchangeable.
- **Written By is a boolean, not a string.** `true` means you wrote the message, `false` means the contact did.
- **Recurring Interval only appears for recurring reminders** — pick `week`, `month` or `year` in Frequency Type first.
- **Update Fields use snake_case keys** (`first_name`, `happened_at`, `is_favorited`) even though the create fields use camelCase.
- **List results are not separate items.** Every Get Many returns one item with the array on `items`; add a Split Out node on `items` when downstream nodes should see one record at a time.