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

> Node: Agile CRM (`agile_crm`) · Action · v1
> Category: Marketing · Credentials: Agile CRM API (`agileCrmApi`)
> Updated: 2026-08-16

# Agile CRM

> Manage contacts, companies, and deals in Agile CRM.

## Overview

Agile CRM is a customer relationship management platform. This node works with three resources — contacts, companies and deals — and covers the full create, get, get many, update and delete cycle on each. Contact and company lists can be filtered dynamically, either by building conditions in the editor or by supplying raw JSON filter rules, and the results can be sorted, simplified and paginated. Deals carry their own pipeline fields: name, milestone, expected value, probability and close date.

**Category:** Marketing  
**Tool Name:** `agile_crm`  
**Version:** 1

**Appearance:** Icon: `lucide-CircleDollarSign` | Color: `#64b9c4`

## Node Type

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

## Input / Output

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

## Credentials

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

### Resources

| Resource | Value |
|----------|-------|
| Company | `company` |
| Contact | `contact` |
| Deal | `deal` |

### Operations

The operation list depends on the resource you select.

**Contact**

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a new contact |
| Delete | `delete` | Delete a contact |
| Get | `get` | Get a contact |
| Get Many | `getAll` | Get many contacts |
| Update | `update` | Update contact properties |

**Company**

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a new company |
| Delete | `delete` | Delete a company |
| Get | `get` | Get a company |
| Get Many | `getAll` | Get many companies |
| Update | `update` | Update company properties |

**Deal**

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a new deal |
| Delete | `delete` | Delete a deal |
| Get | `get` | Get a deal |
| Get Many | `getAll` | Get many deals |
| Update | `update` | Update deal properties |

### Parameters

#### Contact: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| JSON Parameters | `boolean` | No | `false` | Whether to pass all fields as raw JSON. |
| Additional Fields (`additionalFieldsJson`) | `json` | No | — | Object of values to set as described in the Agile CRM contacts API. Supply it as a JSON string. _(shown when JSON Parameters is `true`)_ |
| Additional Fields (`additionalFields`) | `collection` | No | `{}` | Field values to set on the new contact. _(shown when JSON Parameters is `false`)_ |
| — Address (`addressOptions`) | `fixedCollection` | No | `{}` | Contact address. |
| — — Type | `options` | Yes | — | The kind of address. |
| | | | | Options: `home`, `postal`, `office` |
| — — Address (`address`) | `string` | Yes | — | Full address. |
| — Company | `string` | No | — | Company name. |
| — Email (`emailOptions`) | `fixedCollection` | No | `{}` | Contact email. |
| — — Type | `options` | Yes | — | The kind of email address. |
| | | | | Options: `work`, `personal` |
| — — Email (`email`) | `string` | Yes | — | Email address. |
| — First Name | `string` | No | — | Contact first name. |
| — Last Name | `string` | No | — | Contact last name. |
| — Lead Score | `number` | No | — | Lead score of contact. |
| — Star Value | `options` | No | — | Rating of contact (Max value 5). |
| | | | | Options: `0`, `1`, `2`, `3`, `4`, `5` |
| — Phone (`phoneOptions`) | `fixedCollection` | No | `{}` | Contact phone numbers. |
| — — Type | `options` | Yes | — | The kind of phone number. |
| | | | | Options: `home`, `homeFax`, `main`, `mobile`, `other`, `work`, `workFax` |
| — — Number | `string` | Yes | — | Phone number. |
| — Tags | `string` | No | `[]` | Unique identifiers added to contact for easy management. Accepts several values. |
| — Title | `string` | No | — | Professional title. |
| — Website | `fixedCollection` | No | `{}` | Contact websites. |
| — — Type | `options` | Yes | — | The kind of website or profile link. |
| | | | | Options: `facebook`, `feed`, `flickr`, `github`, `googlePlus`, `linkedin`, `skype`, `twitter`, `url`, `xing`, `youtube` |
| — — URL | `string` | Yes | — | Website URL. |
| — Custom Properties | `fixedCollection` | No | `{}` | Custom properties to set on the contact. |
| — — Name | `string` | Yes | — | Property name. |
| — — Sub Type | `string` | No | — | Property sub type. |
| — — Value | `string` | No | — | Property value. |

#### Contact: Delete

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

#### Contact: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | Unique identifier for a particular contact. Supports expressions. |

#### Contact: 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 | `20` | Max number of results to return. _(shown when Return All is `false`)_ |
| Filter | `options` | No | `none` | How to filter contacts. |
| | | | | Options: `none`, `manual` (Build Manually), `json` |
| Must Match | `options` | No | `anyFilter` | Whether any or all filter conditions must match. _(shown when Filter is `manual`)_ |
| | | | | Options: `anyFilter` (Any Filter), `allFilters` (All Filters) |
| Simplify | `boolean` | No | `false` | Whether to return a simplified version of the response instead of the raw data. |
| Filters | `fixedCollection` | No | `{}` | Filter conditions to match contacts against. Add one row per condition. _(shown when Filter is `manual`)_ |
| — Field | `string` | No | — | Any searchable field. |
| — Condition Type | `options` | No | `EQUALS` | How the field is compared to the value. |
| | | | | Options: `AFTER`, `BEFORE`, `BETWEEN`, `EQUALS`, `LAST`, `NOTEQUALS`, `ON` |
| — Value | `string` | No | — | The value to compare the field against. |
| — Value 2 | `string` | No | — | The second value, closing a range. _(shown when Condition Type is `BETWEEN`)_ |
| Filters (JSON) | `string` | No | — | Raw JSON filter rules. See Agile CRM REST API docs for format. _(shown when Filter is `json`)_ |
| Options | `collection` | No | `{}` | Extra options applied to the query. |
| — Sort | `fixedCollection` | No | `[]` | Sort the returned records. |
| — — Direction | `options` | No | `ASC` | The sorting direction. |
| | | | | Options: `ASC` (Ascending), `DESC` (Descending) |
| — — Field | `string` | No | — | The sorting field. |

#### Contact: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | Unique identifier for a particular contact. Supports expressions. |
| JSON Parameters | `boolean` | No | `false` | Whether to pass all fields as raw JSON. |
| Additional Fields (`additionalFieldsJson`) | `json` | No | — | Object of values to set as described in the Agile CRM contacts API. Supply it as a JSON string. _(shown when JSON Parameters is `true`)_ |
| Additional Fields (`additionalFields`) | `collection` | No | `{}` | Field values to change on the contact. _(shown when JSON Parameters is `false`)_ |
| — Address (`addressOptions`) | `fixedCollection` | No | `{}` | Contact address. |
| — — Type | `options` | Yes | — | The kind of address. |
| | | | | Options: `home`, `office`, `postal` |
| — — Address (`address`) | `string` | Yes | — | Full address. |
| — Company | `string` | No | — | Company name. |
| — Email (`emailOptions`) | `fixedCollection` | No | `{}` | Contact email. |
| — — Type | `options` | Yes | — | The kind of email address. |
| | | | | Options: `work`, `personal` |
| — — Email (`email`) | `string` | Yes | — | Email address. |
| — First Name | `string` | No | — | Contact first name. |
| — Last Name | `string` | No | — | Contact last name. |
| — Lead Score | `number` | No | — | Lead score of contact. |
| — Star Value | `options` | No | — | Rating of contact (Max value 5). |
| | | | | Options: `0`, `1`, `2`, `3`, `4`, `5` |
| — Phone (`phoneOptions`) | `fixedCollection` | No | `{}` | Contact phone numbers. |
| — — Type | `options` | Yes | — | The kind of phone number. |
| | | | | Options: `home`, `homeFax`, `main`, `mobile`, `other`, `work`, `workFax` |
| — — Number | `string` | Yes | — | Phone number. |
| — Tags | `string` | No | `[]` | Unique identifiers added to contact for easy management. Accepts several values. |
| — Title | `string` | No | — | Professional title. |
| — Website | `fixedCollection` | No | `{}` | Contact websites. |
| — — Type | `options` | Yes | — | The kind of website or profile link. |
| | | | | Options: `facebook`, `feed`, `flickr`, `github`, `googlePlus`, `linkedin`, `skype`, `twitter`, `url`, `xing`, `youtube` |
| — — URL | `string` | Yes | — | Website URL. |
| — Custom Properties | `fixedCollection` | No | `{}` | Custom properties to set on the contact. |
| — — Name | `string` | Yes | — | Property name. |
| — — Sub Type | `string` | No | — | Property sub type. |
| — — Value | `string` | No | — | Property value. |

#### Company: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| JSON Parameters | `boolean` | No | `false` | Whether to pass all fields as raw JSON. |
| Additional Fields (`additionalFieldsJson`) | `json` | No | — | Object of values to set as described in the Agile CRM companies API. Supply it as a JSON string. _(shown when JSON Parameters is `true`)_ |
| Additional Fields (`additionalFields`) | `collection` | No | `{}` | Field values to set on the new company. _(shown when JSON Parameters is `false`)_ |
| — Address (`addressOptions`) | `fixedCollection` | No | `{}` | Company address. |
| — — Type | `options` | Yes | — | The kind of address. |
| | | | | Options: `postal`, `office` |
| — — Address (`address`) | `string` | Yes | — | Full address. |
| — Email (`email`) | `string` | No | — | Company email. |
| — Name | `string` | No | — | Company name. |
| — Phone (`phone`) | `string` | No | — | Company phone. |
| — Star Value | `options` | No | — | Rating of company (Max value 5). |
| | | | | Options: `0`, `1`, `2`, `3`, `4`, `5` |
| — Tags | `string` | No | `[]` | Unique identifiers added to company for easy management. Accepts several values. |
| — Website | `fixedCollection` | No | `{}` | Company websites. |
| — — Type | `options` | Yes | — | The kind of website or profile link. |
| | | | | Options: `facebook`, `feed`, `flickr`, `github`, `googlePlus`, `linkedin`, `skype`, `twitter`, `url`, `xing`, `youtube` |
| — — URL | `string` | Yes | — | Website URL. |
| — Custom Properties | `fixedCollection` | No | `{}` | Custom properties to set on the company. |
| — — Name | `string` | Yes | — | Property name. |
| — — Sub Type | `string` | No | — | Property sub type. |
| — — Value | `string` | No | — | Property value. |

#### Company: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Company ID | `string` | Yes | — | ID of company to delete. Supports expressions. |

#### Company: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Company ID | `string` | Yes | — | Unique identifier for a particular company. Supports expressions. |

#### Company: 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 | `20` | Max number of results to return. _(shown when Return All is `false`)_ |
| Filter | `options` | No | `none` | How to filter companies. |
| | | | | Options: `none`, `manual` (Build Manually), `json` |
| Must Match | `options` | No | `anyFilter` | Whether any or all filter conditions must match. _(shown when Filter is `manual`)_ |
| | | | | Options: `anyFilter` (Any Filter), `allFilters` (All Filters) |
| Simplify | `boolean` | No | `false` | Whether to return a simplified version of the response instead of the raw data. |
| Filters | `fixedCollection` | No | `{}` | Filter conditions to match companies against. Add one row per condition. _(shown when Filter is `manual`)_ |
| — Field | `string` | No | — | Any searchable field. |
| — Condition Type | `options` | No | `EQUALS` | How the field is compared to the value. |
| | | | | Options: `AFTER`, `BEFORE`, `BETWEEN`, `EQUALS`, `LAST`, `NOTEQUALS`, `ON` |
| — Value | `string` | No | — | The value to compare the field against. |
| — Value 2 | `string` | No | — | The second value, closing a range. _(shown when Condition Type is `BETWEEN`)_ |
| Filters (JSON) | `string` | No | — | Raw JSON filter rules for company search. _(shown when Filter is `json`)_ |
| Options | `collection` | No | `{}` | Extra options applied to the query. |
| — Sort | `fixedCollection` | No | `[]` | Sort the returned records. |
| — — Direction | `options` | No | `ASC` | The sorting direction. |
| | | | | Options: `ASC` (Ascending), `DESC` (Descending) |
| — — Field | `string` | No | — | The sorting field. |

#### Company: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Company ID | `string` | Yes | — | Unique identifier for a particular company. Supports expressions. |
| JSON Parameters | `boolean` | No | `false` | Whether to pass all fields as raw JSON. |
| Additional Fields (`additionalFieldsJson`) | `json` | No | — | Object of values to set as described in the Agile CRM companies API. Supply it as a JSON string. _(shown when JSON Parameters is `true`)_ |
| Additional Fields (`additionalFields`) | `collection` | No | `{}` | Field values to change on the company. _(shown when JSON Parameters is `false`)_ |
| — Address (`addressOptions`) | `fixedCollection` | No | `{}` | Company address. |
| — — Type | `options` | Yes | — | The kind of address. |
| | | | | Options: `postal`, `office` |
| — — Address (`address`) | `string` | Yes | — | Full address. |
| — Email (`email`) | `string` | No | — | Company email. |
| — Star Value | `options` | No | — | Rating of company (Max value 5). |
| | | | | Options: `0`, `1`, `2`, `3`, `4`, `5` |
| — Tags | `string` | No | `[]` | Unique identifiers added to company for easy management. Accepts several values. |
| — Name | `string` | No | — | Company name. |
| — Phone (`phone`) | `string` | No | — | Company phone. |
| — Website | `fixedCollection` | No | `{}` | Company websites. |
| — — Type | `options` | Yes | — | The kind of website or profile link. |
| | | | | Options: `facebook`, `feed`, `flickr`, `github`, `googlePlus`, `linkedin`, `skype`, `twitter`, `url`, `xing`, `youtube` |
| — — URL | `string` | Yes | — | Website URL. |
| — Custom Properties | `fixedCollection` | No | `{}` | Custom properties to set on the company. |
| — — Name | `string` | Yes | — | Property name. |
| — — Sub Type | `string` | No | — | Property sub type. |
| — — Value | `string` | No | — | Property value. |

#### Deal: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| JSON Parameters | `boolean` | No | `false` | Whether to pass all fields as raw JSON. |
| Close Date | `dateTime` | Yes | — | Closing date of deal. _(shown when JSON Parameters is `false`)_ |
| Expected Value | `number` | Yes | `1` | Expected monetary value of deal. _(shown when JSON Parameters is `false`)_ |
| Milestone | `string` | Yes | — | Milestone/stage of deal (e.g. "Negotiation", "Won", "Lost"). _(shown when JSON Parameters is `false`)_ |
| Name | `string` | Yes | — | Name of deal. _(shown when JSON Parameters is `false`)_ |
| Probability | `number` | Yes | `50` | Expected probability of closing (0-100). _(shown when JSON Parameters is `false`)_ |
| Additional Fields (`additionalFieldsJson`) | `json` | No | — | Object of values to set as described in the Agile CRM deals API. Supply it as a JSON string. _(shown when JSON Parameters is `true`)_ |
| Additional Fields (`additionalFields`) | `collection` | No | `{}` | Optional extras to attach to the new deal. _(shown when JSON Parameters is `false`)_ |
| — Contact IDs | `string` | No | `[]` | Unique contact identifiers to associate with the deal. Accepts several values. |
| — Custom Data | `fixedCollection` | No | `{}` | Custom properties to set on the deal. |
| — — Name | `string` | Yes | — | Property name. |
| — — Value | `string` | No | — | Property value. |

#### Deal: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Deal ID | `string` | Yes | — | ID of deal to delete. Supports expressions. |

#### Deal: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Deal ID | `string` | Yes | — | Unique identifier for a particular deal. Supports expressions. |

#### Deal: 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 | `20` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Deal: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Deal ID | `string` | Yes | — | ID of deal to update. Supports expressions. |
| JSON Parameters | `boolean` | No | `false` | Whether to pass all fields as raw JSON. |
| Additional Fields (`additionalFieldsJson`) | `json` | No | — | Object of values to set as described in the Agile CRM deals API. Supply it as a JSON string. _(shown when JSON Parameters is `true`)_ |
| Additional Fields (`additionalFields`) | `collection` | No | `{}` | Field values to change on the deal. _(shown when JSON Parameters is `false`)_ |
| — Expected Value | `number` | No | — | Expected monetary value of deal. |
| — Name | `string` | No | — | Name of deal. |
| — Probability | `number` | No | `50` | Expected probability of closing (0-100). |
| — Contact IDs | `string` | No | `[]` | Unique contact identifiers. Accepts several values. |
| — Custom Data | `fixedCollection` | No | `{}` | Custom properties to set on the deal. |
| — — Name | `string` | Yes | — | Property name. |
| — — Value | `string` | No | — | Property value. |

#### All Operations

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

## Output Data

The Agile CRM response is merged onto the input item JSON — the fields you sent in survive unless the record uses the same key — and binary data is forwarded unchanged.

`Get`, `Create`, `Update` and `Delete` produce exactly one output item per input item. **`Get Many` fans out** for all three resources: one output item per record returned, so a single input item that matches 40 contacts leaves 40 items. A `Get Many` that matches nothing produces no output items for that input item.

A contact or company record arrives with an `id` and a `properties` array; every other field is whatever Agile CRM returns for that record:

```json
{
  "orderId": "A-1042",
  "id": 5723456789012345,
  "properties": [
    { "type": "SYSTEM", "name": "first_name", "value": "John" },
    { "type": "SYSTEM", "name": "last_name", "value": "Doe" },
    { "type": "SYSTEM", "subtype": "work", "name": "email", "value": "john.doe@acme.com" }
  ]
}
```

With **Simplify** on, that `properties` array is flattened into top-level keys alongside `id`, which is far easier to address downstream:

```json
{
  "orderId": "A-1042",
  "id": 5723456789012345,
  "first_name": "John",
  "last_name": "Doe",
  "email": "john.doe@acme.com"
}
```

What lands per operation:

| Resource / Operation | Output item |
|----------------------|-------------|
| Contact, Company — `get`, `create` | The record, merged onto the input item. |
| Contact, Company — `getAll` | One item per matching record. `Simplify` flattens each record's properties; leave it off for the raw record. |
| Contact, Company — `update` | The response of the last update stage that ran, or nothing at all when no updatable field was supplied — in which case the item passes through unchanged. |
| Deal — `get`, `create`, `update` | The deal record, merged onto the input item. |
| Deal — `getAll` | One item per deal returned. |
| Any resource — `delete` | Agile CRM returns an empty body, so the item passes through unchanged. Use it to confirm the delete ran rather than to read the deleted record. |

Records returned by a paginated `Get Many` (Return All on) may also carry a `cursor` field on the last record of each page. Ignore it downstream — it is Agile CRM's paging marker, not part of the record.

Reference the result downstream by expression, for example `{{ $json.id }}` or, with Simplify on, `{{ $json.email }}`.

## Usage Examples

- Create a new contact in Agile CRM
- Get all companies from Agile CRM
- Update a deal milestone in Agile CRM
- Delete a contact by ID
- Filter contacts by email in Agile CRM

## Example Configuration

Create a contact from an upstream item, with a work email, a phone number and tags:

```json
{
  "type": "agile_crm",
  "parameters": {
    "resource": "contact",
    "operation": "create",
    "jsonParameters": false,
    "additionalFields": {
      "firstName": "{{ $json.firstName }}",
      "lastName": "{{ $json.lastName }}",
      "company": "{{ $json.company }}",
      "title": "Operations Manager",
      "starValue": 4,
      "tags": ["prospect", "qualified"],
      "emailOptions": {
        "emailProperties": [
          { "subtype": "work", "email": "{{ $json.email }}" }
        ]
      },
      "phoneOptions": {
        "phoneProperties": [
          { "subtype": "mobile", "number": "{{ $json.phone }}" }
        ]
      }
    }
  }
}
```

Find contacts whose email matches the current item and that are tagged as qualified, newest first, returning simplified records:

```json
{
  "type": "agile_crm",
  "parameters": {
    "resource": "contact",
    "operation": "getAll",
    "returnAll": false,
    "limit": 50,
    "filterType": "manual",
    "matchType": "allFilters",
    "simple": true,
    "filters": {
      "conditions": [
        { "field": "email", "condition_type": "EQUALS", "value": "{{ $json.email }}" },
        { "field": "tags", "condition_type": "EQUALS", "value": "qualified" }
      ]
    },
    "options": {
      "sort": {
        "sort": { "direction": "DESC", "field": "created_time" }
      }
    }
  }
}
```

Update a contact's name and lead score by passing the raw contact payload as a JSON string:

```json
{
  "type": "agile_crm",
  "parameters": {
    "resource": "contact",
    "operation": "update",
    "contactId": "{{ $json.contactId }}",
    "jsonParameters": true,
    "additionalFieldsJson": "{\"properties\":[{\"type\":\"SYSTEM\",\"name\":\"last_name\",\"value\":\"Smith\"}],\"lead_score\":85}"
  }
}
```

Create a company with a postal address and a custom property:

```json
{
  "type": "agile_crm",
  "parameters": {
    "resource": "company",
    "operation": "create",
    "jsonParameters": false,
    "additionalFields": {
      "name": "{{ $json.accountName }}",
      "email": "{{ $json.accountEmail }}",
      "phone": "{{ $json.accountPhone }}",
      "starValue": 5,
      "tags": ["enterprise"],
      "addressOptions": {
        "addressProperties": [
          { "subtype": "postal", "address": "{{ $json.address }}" }
        ]
      },
      "customProperties": {
        "customProperty": [
          { "name": "Industry", "subtype": "TEXT", "value": "Software" }
        ]
      }
    }
  }
}
```

Page through every company matching a raw JSON filter:

```json
{
  "type": "agile_crm",
  "parameters": {
    "resource": "company",
    "operation": "getAll",
    "returnAll": true,
    "simple": true,
    "filterType": "json",
    "filterJson": "{\"rules\":[{\"LHS\":\"name\",\"CONDITION\":\"EQUALS\",\"RHS\":\"Tech Solutions Inc\"}]}"
  }
}
```

Open a deal for the account on the current item and link it to a contact:

```json
{
  "type": "agile_crm",
  "parameters": {
    "resource": "deal",
    "operation": "create",
    "jsonParameters": false,
    "name": "{{ $json.accountName }} annual license",
    "expectedValue": 50000,
    "probability": 75,
    "milestone": "Negotiation",
    "closeDate": "2026-03-15T00:00:00.000Z",
    "additionalFields": {
      "contactIds": ["{{ $json.contactId }}"],
      "customData": {
        "customProperty": [
          { "name": "Deal Source", "value": "Referral" }
        ]
      }
    }
  }
}
```

### 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 contacts, companies, and deals in Agile CRM -- create, read, update, delete records and filter contacts with dynamic conditions.

### Parameter Dependencies Summary

1. **Resource selection:** the `operation` list changes with the `resource` value — each resource offers Create, Delete, Get, Get Many and Update.
2. **ID parameters:** `contactId`, `companyId` and `dealId` are required for `get`, `delete` and `update`. When the parameter is left empty, the node falls back to a field of the same name on the incoming item, so `{{ $json.contactId }}` and a bare `contactId` field both work.
3. **Pagination:** `limit` only appears when `returnAll` is `false`. With `returnAll` on, the node pages through the whole result set for you.
4. **Filtering:** `matchType` and `filters` only appear when `filterType` is `manual`; `filterJson` only when it is `json`. Filtering is available on contact and company Get Many only — deal Get Many takes `returnAll` and `limit` and nothing else.
5. **Field input:** `additionalFields` (structured) versus `additionalFieldsJson` (raw) is chosen by `jsonParameters`. The raw variant is parsed as JSON text, so pass it as a JSON **string**, not as an object.
6. **Deal fields:** `closeDate`, `expectedValue`, `milestone`, `name` and `probability` are set directly on deal Create and only when `jsonParameters` is `false`. Deal Update carries the equivalents inside `additionalFields` instead.

### Behavior notes

- **Manual filters need at least one condition.** Selecting Build Manually and leaving Filters empty fails the item rather than returning everything.
- **Contact and company updates are applied in stages** — properties, lead score, tags, then star value. If a later stage fails, the earlier changes stay applied and the error names the stage that failed, so re-running an update is the safe recovery.
- **Lead Score is applied on update only.** Setting it in the structured Additional Fields of a contact Create has no effect; set the contact's score with a follow-up Update, or pass the raw payload with JSON Parameters on.
- **Get Many fans out.** Downstream nodes see one item per record, not one item holding an array — no Split Out node is needed.