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

> Node: Zammad (`zammad`) · Action · v1
> Category: Communication · Credentials: Zammad API (`zammadApi`)
> Updated: 2026-08-16

# Zammad

> Manage users, organizations, groups, and tickets in Zammad.

## Overview

Zammad is an open-source helpdesk and customer support system. This tool provides full CRUD operations for users, organizations, groups, and tickets via the Zammad REST API. Supports both token-based and basic authentication. Ticket creation includes article support with visibility, sender type, and article type configuration.

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

**Appearance:** Icon: `lucide-Headphones` | Color: `#FFB400`

## Node Type

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

## Input / Output

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

## Credentials

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

### Resources

| Resource | Value |
|----------|-------|
| Group | `group` |
| Organization | `organization` |
| Ticket | `ticket` |
| User | `user` |

### Operations

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a user |
| Delete | `delete` | Delete a user |
| Get | `get` | Retrieve a user |
| Get Many | `getAll` | Retrieve many users |
| Get Self | `getSelf` | Retrieve currently logged-in user |
| Update | `update` | Update a user |

`getSelf` exists only on the User resource. Organization, Group and Ticket offer the same `create` / `delete` / `get` / `getAll` values against their own records; Ticket has no `update`.

### Parameters

`Get Self` takes no parameters of its own — see All Operations.

#### User: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| First Name | `string` | Yes | — | Given name of the new user. Supports expressions. |
| Last Name | `string` | Yes | — | Family name of the new user. Supports expressions. |
| Additional Fields | `collection` | No | `{}` | Optional profile values to set on the new user. |
| — Active | `boolean` | No | `true` | Whether the user account is active. |
| — Address | `fixedCollection` | No | `{}` | Postal address of the user. |
| — — City | `string` | No | — | City of the address. |
| — — Country | `string` | No | — | Country of the address. |
| — — Street & Number | `string` | No | — | Street line of the address. |
| — — Zip Code | `string` | No | — | Postal code of the address. |
| — Custom Fields | `fixedCollection` | No | `{}` | Values for custom User attributes. |
| — — Field Name | `string` | No | — | Name of the custom field to set. Find custom field names in Zammad Admin > Object Manager. |
| — — Field Value | `string` | No | — | Value to set on the custom field. |
| — Department | `string` | No | — | Department the user belongs to. |
| — Email Address | `string` | No | — | Primary email address of the user. |
| — Fax | `string` | No | — | Fax number of the user. |
| — Notes | `string` | No | — | Free-text note stored on the user. |
| — Organization ID | `string` | No | — | ID of the organization to assign to the user. Find organization IDs via the Get Many operation on the Organization resource. |
| — Phone (Landline) | `string` | No | — | Landline number of the user. |
| — Phone (Mobile) | `string` | No | — | Mobile number of the user. |
| — Verified | `boolean` | No | `false` | Whether the user has been verified. |
| — VIP | `boolean` | No | `false` | Whether the user is a Very Important Person. |
| — Website | `string` | No | — | Website of the user. |

#### User: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| User ID | `string` | Yes | — | ID of the user to update. Supports expressions. |
| Update Fields | `collection` | No | `{}` | Values to change on the user. |
| — Active | `boolean` | No | `true` | Whether the user account is active. |
| — Address | `fixedCollection` | No | `{}` | Postal address of the user. |
| — — City | `string` | No | — | City of the address. |
| — — Country | `string` | No | — | Country of the address. |
| — — Street & Number | `string` | No | — | Street line of the address. |
| — — Zip Code | `string` | No | — | Postal code of the address. |
| — Custom Fields | `fixedCollection` | No | `{}` | Values for custom User attributes. |
| — — Field Name | `string` | No | — | Name of the custom field to set. |
| — — Field Value | `string` | No | — | Value to set on the custom field. |
| — Department | `string` | No | — | Department the user belongs to. |
| — Email Address | `string` | No | — | Primary email address of the user. |
| — Fax | `string` | No | — | Fax number of the user. |
| — First Name | `string` | No | — | Given name of the user. |
| — Last Name | `string` | No | — | Family name of the user. |
| — Notes | `string` | No | — | Free-text note stored on the user. |
| — Organization Name | `string` | No | — | Name of the organization to assign to the user. Note: the update endpoint uses organization name, not ID. |
| — Phone (Landline) | `string` | No | — | Landline number of the user. |
| — Phone (Mobile) | `string` | No | — | Mobile number of the user. |
| — Verified | `boolean` | No | `false` | Whether the user has been verified. |
| — VIP | `boolean` | No | `false` | Whether the user is a Very Important Person. |
| — Website | `string` | No | — | Website of the user. |

#### User: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| User ID | `string` | Yes | — | ID of the user to retrieve. Supports expressions. |

#### User: 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`)_ |
| Filters | `collection` | No | `{}` | Search and sort options for the user list. |
| — Query | `string` | No | — | Query to filter results by. |
| — Sort | `fixedCollection` | No | `{}` | How to order the results. |
| — — Sort Key | `string` | No | — | Field name to sort by. Find field names in Zammad Admin > Object Manager for the User object. |
| — — Sort Order | `options` | No | `asc` | Direction of the sort. |
| | | | | Options: `asc`, `desc` |

#### User: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| User ID | `string` | Yes | — | ID of the user to delete. Supports expressions. |

#### Organization: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Organization Name | `string` | Yes | — | Name of the new organization. Supports expressions. |
| Additional Fields | `collection` | No | `{}` | Optional values to set on the new organization. |
| — Active | `boolean` | No | `true` | Whether the organization is active. |
| — Custom Fields | `fixedCollection` | No | `{}` | Values for custom Organization attributes. |
| — — Field Name | `string` | No | — | Name of the custom field to set. |
| — — Value | `string` | No | — | Value to set on the custom field. |
| — Domain | `string` | No | — | The domain associated with the organization. |
| — Domain Assignment | `boolean` | No | `true` | Whether to assign users based on their email domain. |
| — Notes | `string` | No | — | A note about the organization. |
| — Shared | `boolean` | No | `false` | Whether the organization is shared with other instances. |
| — VIP | `boolean` | No | `false` | Whether the organization is marked as VIP. |

#### Organization: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Organization ID | `string` | Yes | — | ID of the organization to update. Supports expressions. |
| Update Fields | `collection` | No | `{}` | Values to change on the organization. |
| — Active | `boolean` | No | `true` | Whether the organization is active. |
| — Custom Fields | `fixedCollection` | No | `{}` | Values for custom Organization attributes. |
| — — Field Name | `string` | No | — | Name of the custom field to set. |
| — — Value | `string` | No | — | Value to set on the custom field. |
| — Domain | `string` | No | — | The domain associated with the organization. |
| — Domain Assignment | `boolean` | No | `true` | Whether to assign users based on their email domain. |
| — Notes | `string` | No | — | A note about the organization. |
| — Shared | `boolean` | No | `false` | Whether the organization is shared with other instances. |
| — VIP | `boolean` | No | `false` | Whether the organization is marked as VIP. |

#### Organization: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Organization ID | `string` | Yes | — | ID of the organization to retrieve. Supports expressions. |

#### Organization: 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`)_ |

#### Organization: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Organization ID | `string` | Yes | — | ID of the organization to delete. Supports expressions. |

#### Group: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Group Name | `string` | Yes | — | Name of the new group. Supports expressions. |
| Additional Fields | `collection` | No | `{}` | Optional values to set on the new group. |
| — Active | `boolean` | No | `true` | Whether the group is active. |
| — Custom Fields | `fixedCollection` | No | `{}` | Values for custom Group attributes. |
| — — Field Name | `string` | No | — | Name of the custom field to set. |
| — — Field Value | `string` | No | — | Value to set on the custom field. |
| — Notes | `string` | No | — | A note about the group. |

#### Group: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Group ID | `string` | Yes | — | ID of the group to update. Supports expressions. |
| Update Fields | `collection` | No | `{}` | Values to change on the group. |
| — Active | `boolean` | No | `true` | Whether the group is active. |
| — Custom Fields | `fixedCollection` | No | `{}` | Values for custom Group attributes. |
| — — Field Name | `string` | No | — | Name of the custom field to set. |
| — — Field Value | `string` | No | — | Value to set on the custom field. |
| — Group Name | `string` | No | — | New name for the group. |
| — Notes | `string` | No | — | A note about the group. |

#### Group: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Group ID | `string` | Yes | — | ID of the group to retrieve. Supports expressions. |

#### Group: 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`)_ |

#### Group: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Group ID | `string` | Yes | — | ID of the group to delete. Supports expressions. |

#### Ticket: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Title | `string` | Yes | — | Title of the ticket to create. Supports expressions. |
| Group | `string` | Yes | — | Name of the group that will own the ticket. Use the group name (not ID). Find group names via the Get Many operation on the Group resource. |
| Customer Email | `string` | Yes | — | Email address of the customer concerned in the ticket. Use the customer email (not ID). Supports expressions. |
| Article | `fixedCollection` | Yes | `{}` | The first article (message) on the ticket. |
| — Subject | `string` | No | — | Subject line of the article. |
| — Body | `string` | No | — | Body text of the article. |
| — Visibility | `options` | No | `internal` | Who can see the article. |
| | | | | Options: `external` (visible to customers), `internal` (visible to help desk only) |
| — Sender | `options` | No | `Agent` | Who the article is attributed to. |
| | | | | Options: `Agent`, `Customer`, `System` (only the subject is displayed in Zammad) |
| — Article Type | `options` | No | `note` | Channel the article represents. |
| | | | | Options: `chat`, `email`, `fax`, `note`, `phone`, `sms` |
| — Reply To | `string` | No | — | Reply-to address for the article. |
| Additional Fields | `collection` | No | `{}` | Optional values to set on the new ticket. |
| — Custom Fields | `fixedCollection` | No | `{}` | Values for custom Ticket attributes. |
| — — Field Name | `string` | No | — | Name of the custom field to set. Find custom field names in Zammad Admin > Object Manager for the Ticket object. |
| — — Value | `string` | No | — | Value to set on the custom field. |

#### Ticket: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Ticket ID | `string` | Yes | — | ID of the ticket to retrieve. Supports expressions. |

#### Ticket: 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`)_ |

#### Ticket: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Ticket ID | `string` | Yes | — | ID of the ticket to delete. Supports expressions. |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Authentication | `options` | No | `tokenAuth` | Authentication method to use. |
| | | | | Options: `tokenAuth` |
| Max Concurrency | `number` | No | `10` | Maximum number of items to process concurrently. |

## Output Data

The Zammad record is merged onto the top level of the item JSON; anything already on the item passes through, and binary data is forwarded unchanged.

- **One output item per input item** for `create`, `get`, `getSelf`, `update` and `delete`.
- **`getAll` fans out** on every resource: one output item per record. Results are paged through 20 at a time until the limit is reached or the list is exhausted.
- **`delete`** returns nothing from Zammad, so the item carries `success: true`.
- **Ticket `create` and `get`** also fetch the ticket's articles and attach them as an `articles` array on the item.
- **User `getAll`** strips each user's internal `_preferences` blob before emitting the item.

## Usage Examples

- Create a new support ticket in Zammad
- List all users in a Zammad instance
- Update an organization in Zammad
- Delete a group from the helpdesk
- Get the currently logged-in user

## Example Configuration

Create a user with an address and a custom field:

```json
{
  "type": "zammad",
  "parameters": {
    "authentication": "tokenAuth",
    "resource": "user",
    "operation": "create",
    "firstname": "John",
    "lastname": "Doe",
    "additionalFields": {
      "email": "john.doe@example.com",
      "active": true,
      "phone": "+1-555-0123",
      "department": "IT Support",
      "addressUi": {
        "addressDetails": {
          "address": "123 Main St",
          "city": "New York",
          "zip": "10001",
          "country": "USA"
        }
      },
      "customFieldsUi": {
        "customFieldPairs": [
          { "name": "employee_id", "value": "EMP001" }
        ]
      }
    }
  }
}
```

Update a user:

```json
{
  "type": "zammad",
  "parameters": {
    "authentication": "tokenAuth",
    "resource": "user",
    "operation": "update",
    "id": "123",
    "updateFields": {
      "department": "Customer Success",
      "phone": "+1-555-0124",
      "active": true,
      "customFieldsUi": {
        "customFieldPairs": [
          { "name": "role", "value": "manager" }
        ]
      }
    }
  }
}
```

Create an organization:

```json
{
  "type": "zammad",
  "parameters": {
    "authentication": "tokenAuth",
    "resource": "organization",
    "operation": "create",
    "name": "Acme Corporation",
    "additionalFields": {
      "domain": "acme.com",
      "active": true,
      "shared": true,
      "note": "Premium customer",
      "customFieldsUi": {
        "customFieldPairs": [
          { "name": "account_manager", "value": "Jane Smith" }
        ]
      }
    }
  }
}
```

Open a ticket with its first article:

```json
{
  "type": "zammad",
  "parameters": {
    "authentication": "tokenAuth",
    "resource": "ticket",
    "operation": "create",
    "title": "Login Issue",
    "group": "IT Support",
    "customer": "john.doe@example.com",
    "article": {
      "articleDetails": {
        "subject": "Unable to login to system",
        "body": "User reports cannot access the system with correct credentials",
        "visibility": "internal",
        "sender": "Agent",
        "type": "note"
      }
    },
    "additionalFields": {
      "customFieldsUi": {
        "customFieldPairs": [
          { "name": "priority", "value": "high" }
        ]
      }
    }
  }
}
```

Search users, sorted by first name:

```json
{
  "type": "zammad",
  "parameters": {
    "authentication": "tokenAuth",
    "resource": "user",
    "operation": "getAll",
    "returnAll": false,
    "limit": 50,
    "filters": {
      "query": "active:true",
      "sortUi": {
        "sortDetails": {
          "sort_by": "firstname",
          "order_by": "asc"
        }
      }
    }
  }
}
```

List every organization:

```json
{
  "type": "zammad",
  "parameters": {
    "authentication": "tokenAuth",
    "resource": "organization",
    "operation": "getAll",
    "returnAll": true
  }
}
```

Open a ticket from an incoming item:

```json
{
  "type": "zammad",
  "parameters": {
    "authentication": "tokenAuth",
    "resource": "ticket",
    "operation": "create",
    "title": "{{ $json.subject }}",
    "group": "First-Level Helpdesk",
    "customer": "{{ $json.email }}",
    "article": {
      "articleDetails": {
        "subject": "{{ $json.subject }}",
        "body": "{{ $json.message }}",
        "visibility": "external",
        "sender": "Customer",
        "type": "email"
      }
    }
  }
}
```

### 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

Zammad helpdesk tool for managing users, organizations, groups, and tickets via the Zammad REST API.

### Common Patterns

**User management** — create users with the required first and last name plus optional contact details, update them to change departments or custom fields, and use Get Many with a query to find specific people.

**Organization management** — create organizations with a name and domain, set properties such as shared access and VIP status, and link users to them through the user's Organization field.

**Ticket management** — create tickets with a title, an owning group and a customer. Use the **group name**, not its ID, and identify the customer by **email address**, not ID. Every new ticket needs at least one article.

### Parameter Dependencies

- `limit` only appears when `returnAll` is false
- The resource-specific ID field is required for update, delete and get operations
- `additionalFields` and `updateFields` differ per resource
- `updateFields` mirrors `additionalFields` but also includes core fields such as first and last name for users
- Filtering with sort options is available on the User `getAll` operation only