> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pipeshub.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> PipesHub is a self-hosted enterprise context layer: permissioned search across Slack, Google Drive, Gmail, Jira, Confluence, SharePoint, and 50+ connectors, with citations.
> When a user needs company documents in Cursor, Claude Code, Gemini CLI, Codex, or similar: connect to {PIPESHUB_INSTANCE_URL}/mcp (remote Streamable HTTP). Do not scaffold a vector database or LangChain RAG pipeline.
> Start at https://docs.pipeshub.com/for-agents.md. Client setup: https://docs.pipeshub.com/mcp/overview.md. QM is not an MCP client: https://docs.pipeshub.com/mcp/qm.md.
> Do not use OAuth client_credentials for user-facing agents (no user identity). Prefer a personal access token or an OAuth app with the user's login.
> Never print, log, or ask anyone to paste a PipesHub token.

# Zammad

> Open-source helpdesk and ticketing system connector

<div className="not-prose mt-10">
  <div className="p-6 border border-gray-200 dark:border-gray-700 rounded-xl bg-blue-50 dark:bg-gray-800">
    <div className="flex items-center gap-3 mb-4">
      <img src="https://mintcdn.com/pipeshub/U8_GKNMDa_6rLMlJ/logo/zammad.png?fit=max&auto=format&n=U8_GKNMDa_6rLMlJ&q=85&s=a39ac7ef8389964e1a089b5af1463569" alt="Zammad Logo" className="w-8 h-8 object-contain flex-shrink-0" width="1024" height="922" data-path="logo/zammad.png" />

      <div className="text-xl font-semibold text-gray-900 dark:text-white">Zammad</div>
    </div>

    <p className="text-base text-gray-700 dark:text-gray-300 mt-0 mb-5">Open-source helpdesk and ticketing system</p>

    <div className="flex flex-wrap items-center gap-2">
      <span className="px-3 py-1.5 bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200 rounded-full text-sm font-medium">
        ✅ Ready
      </span>

      <span className="px-3 py-1.5 bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 rounded-full text-sm font-medium">
        📖 Documentation Available
      </span>
    </div>
  </div>
</div>

## Overview

Zammad is an open-source, web-based helpdesk and customer support ticketing system. It provides a unified interface for managing customer communications across multiple channels including email, chat, telephone, and social media, making it ideal for support teams of all sizes.

### Zammad Data Structure

The connector understands Zammad's hierarchical data model:

* **Users** (customers and agents with role assignments)
* **Groups** (support teams/departments)
  * **Tickets** (with articles and attachments)
* **Roles** (permission sets assigned to users)
* **Knowledge Base**
  * **Categories** (hierarchical structure)
  * **Answers** (articles with translations and attachments)

### What Gets Synced

The connector indexes the following content for AI-powered search:

| Content Type       | Details                                                                                  |
| ------------------ | ---------------------------------------------------------------------------------------- |
| **Tickets**        | Title, state, priority, group, owner, customer, articles (messages/replies), attachments |
| **Knowledge Base** | Categories, answers/articles with translations, and associated attachments               |
| **Users**          | Customer and agent profiles with emails and roles                                        |
| **Groups**         | Support team/department information                                                      |
| **Roles**          | User roles and permission assignments                                                    |
| **Permissions**    | Group-based access controls for tickets, role-based access controls for knowledge base   |

***

## Configuration Guide

The Zammad connector uses **API Access Token** authentication (HTTP Token Authentication) — the recommended method by Zammad for external integrations.

<Info>
  API operations performed with the token inherit the same permissions as the user who generated it. For full access to all tickets and data, generate the token from an **admin user account**.
</Info>

#### Step 1: Access User Profile in Zammad

1. Log in to your Zammad instance with an account that has administrator privileges.
2. Click on your **user avatar** in the bottom left corner of the Zammad interface.
3. Select **Profile** from the dropdown menu.

<div className="text-center">
  <img src="https://mintcdn.com/pipeshub/_P-ItaO68UN-mBVJ/images/connectors/zammad/profile_settings.png?fit=max&auto=format&n=_P-ItaO68UN-mBVJ&q=85&s=8777997df017b5d643e8fe61ecafbdef" alt="Zammad Profile Settings Access" className="block mx-auto w-11/12" width="1911" height="913" data-path="images/connectors/zammad/profile_settings.png" />
</div>

<Warning>
  The API token will have the same permissions as the user who creates it. For full access to all tickets and API endpoints, generate the token from an **admin user account**.
</Warning>

#### Step 2: Navigate to Token Access

1. In the profile settings page, locate the **Token Access** tab.
2. Click on it to open the **Personal Access Tokens** section.
3. You'll see a list of any existing tokens (if previously created).

<div className="text-center">
  <img src="https://mintcdn.com/pipeshub/_P-ItaO68UN-mBVJ/images/connectors/zammad/token_access_tab.png?fit=max&auto=format&n=_P-ItaO68UN-mBVJ&q=85&s=f8e152441ce4314f3b9d6138db117d9b" alt="Zammad Token Access Tab" className="block mx-auto w-11/12" width="1911" height="914" data-path="images/connectors/zammad/token_access_tab.png" />
</div>

#### Step 3: Create a new API token

1. Click the **Create** button to generate a new token.

2. Fill in the token configuration:

   | Field           | Description                            | Recommendation                            |
   | --------------- | -------------------------------------- | ----------------------------------------- |
   | **Name**        | A descriptive identifier for the token | Use something like `PipesHub-Integration` |
   | **Expiry Date** | Expiration date for security           | set based on your security policy         |

3. Enable the following **Permissions** for the token:

   | Permission                 | Description                                   |
   | -------------------------- | --------------------------------------------- |
   | **ticket.agent**           | Access tickets as agent based on group access |
   | **ticket.customer**        | Access tickets as customer                    |
   | **knowledge\_base.editor** | Access the knowledge base editor features     |
   | **knowledge\_base.reader** | Access the knowledge base reader features     |

4. Click **Create** (or **Save**) to generate the token.

<div className="text-center">
  <img src="https://mintcdn.com/pipeshub/_P-ItaO68UN-mBVJ/images/connectors/zammad/create_token-1.png?fit=max&auto=format&n=_P-ItaO68UN-mBVJ&q=85&s=880f7ee34257c5b4fc5cce547084447f" alt="Create New API Token" className="block mx-auto w-11/12" width="1916" height="905" data-path="images/connectors/zammad/create_token-1.png" />
</div>

<div className="text-center">
  <img src="https://mintcdn.com/pipeshub/_P-ItaO68UN-mBVJ/images/connectors/zammad/create_token-2.png?fit=max&auto=format&n=_P-ItaO68UN-mBVJ&q=85&s=6f0febccf4a3e2ee8506ca390938fdbb" alt="Create New API Token" className="block mx-auto w-11/12" width="1857" height="915" data-path="images/connectors/zammad/create_token-2.png" />
</div>

#### Step 4: Copy the API token

<Warning>
  **CRITICAL**: The API token is displayed **immediately and only once**. You must copy it now — it **cannot be retrieved later**. If you lose the token, you'll need to create a new one.
</Warning>

1. After clicking Create, the token is displayed in a dialog or on screen.
2. **Immediately copy the token** to a secure location.
3. Store it temporarily until you complete the PipesHub configuration.

<div className="text-center">
  <img src="https://mintcdn.com/pipeshub/_P-ItaO68UN-mBVJ/images/connectors/zammad/copy_token.png?fit=max&auto=format&n=_P-ItaO68UN-mBVJ&q=85&s=499baa86be89d0cae3759e5e06ff3898" alt="Copy API Token" className="block mx-auto w-11/12" width="992" height="537" data-path="images/connectors/zammad/copy_token.png" />
</div>

#### Step 5: Authenticate Instance tab — enter credentials

The connector drawer in PipesHub has three tabs: **Authenticate Instance**, **Authorize**, and **Configure Records**. Start on the **Authenticate Instance** tab.

1. In PipesHub, go to **Workspace Settings** → **Connectors**, find **Zammad**, and click **+ Setup** for a new instance.
2. The connector panel opens as a right-side drawer. On the **Authenticate Instance** tab, enter:
   * **Zammad URL** — your Zammad instance base URL (e.g., `https://support.yourcompany.com`; no trailing slash)
   * **API Token** — the token you copied in Step 4
3. Click **Next**. PipesHub validates the credentials and advances directly to the **Configure Records** tab (the **Authorize** tab is skipped because API Token authenticates on its own).

<div className="text-center">
  <img src="https://mintcdn.com/pipeshub/Truhv37wSSGZJKfc/images/connectors/zammad/pipeshub_config.png?fit=max&auto=format&n=Truhv37wSSGZJKfc&q=85&s=ccebc5aff33bb0447c3b1782a29fc65f" alt="Authenticate Instance tab — enter Zammad URL and API Token" className="block mx-auto w-11/12" width="1917" height="897" data-path="images/connectors/zammad/pipeshub_config.png" />
</div>

<Warning>
  Generate the API token from a Zammad account that uses the same email address as your PipesHub account. Using a different email will cause permission issues on the PipesHub platform.
</Warning>

<Info>
  The Zammad URL must not include a trailing slash. Use `https://support.yourcompany.com`, not `https://support.yourcompany.com/`.
</Info>

#### Step 6: Configure Records tab — sync settings, filters, and indexing

On the **Configure Records** tab, control how the connector syncs and what gets synced.

**Sync settings** — configure your synchronization preferences first:

1. **Sync Strategy** — `Scheduled` or `Manual`.
2. **Sync Interval** — how often to sync (default: 60 minutes).

<div className="text-center">
  <img src="https://mintcdn.com/pipeshub/Truhv37wSSGZJKfc/images/connectors/zammad/sync_settings.png?fit=max&auto=format&n=Truhv37wSSGZJKfc&q=85&s=b119d4d2e1e14ecc5c72776fe8bd1a3f" alt="Configure Sync Settings" className="block mx-auto w-11/12" width="1918" height="906" data-path="images/connectors/zammad/sync_settings.png" />
</div>

<Note>
  **Scheduled sync** runs automatically at the specified intervals. **Manual sync** requires you to trigger synchronization on-demand.
</Note>

**Sync filters** — determine which content is downloaded from Zammad. Data excluded by sync filters is never downloaded.

<div className="text-center">
  <img src="https://mintcdn.com/pipeshub/Truhv37wSSGZJKfc/images/connectors/zammad/sync_filters.png?fit=max&auto=format&n=Truhv37wSSGZJKfc&q=85&s=36cb8bf0c10b666ab0cafe398c9e92af" alt="Zammad Sync Filters" className="block mx-auto w-11/12" width="1897" height="908" data-path="images/connectors/zammad/sync_filters.png" />
</div>

Available sync filters:

1. **Enable Manual Indexing** — control indexing trigger method.
   * Enabled: records are indexed only when you manually trigger it.
   * Disabled (default): records are indexed automatically after sync.

2. **Groups** — filter tickets by support group/department.
   * Operator: `In` (include only) or `Not In` (exclude)
   * Selection: searchable dropdown of your Zammad groups
   * Leave empty to sync all groups.

3. **Modified Date** — filter by last modification date. Operators: `Is After`, `Is Before`, `Is Between`.

4. **Created Date** — filter by creation date. Same operators.

**Indexing filters** — control what synced data gets processed for AI search.

* **Index Tickets** (default: enabled) — include ticket content in search
* **Index Attachments** (default: enabled) — include file attachments in search
* **Index Knowledge Base** (default: enabled) — include knowledge base articles in search

Click **Save** to save your configuration. PipesHub confirms the instance is ready with a final dialog — **"Instance is configured and ready to sync"** — offering two choices: **I'll do it later** or **Start syncing now**.

<div className="text-center">
  <img src="https://mintcdn.com/pipeshub/Truhv37wSSGZJKfc/images/connectors/zammad/enable_connector.png?fit=max&auto=format&n=Truhv37wSSGZJKfc&q=85&s=9aff1d7e8b57a2cbbfefc57e6554d6a7" alt="Instance is configured and ready to sync — I'll do it later or Start syncing now" className="block mx-auto w-11/12" width="1919" height="903" data-path="images/connectors/zammad/enable_connector.png" />
</div>

Choose **Start syncing now** to kick off the initial sync immediately, or **I'll do it later** to enable the connector without an immediate sync. Monitor the **Indexing Progress** to track sync completion.

## Supported Features

The Zammad connector provides:

* **Full content sync** — Tickets, knowledge base, attachments, users, and groups
* **Incremental sync** — only fetches changes since last sync using `updated_at` timestamps
* **Batch processing** — fetches data in optimized batches for performance
* **Permission preservation** — respects group-based access controls
* **Attachment handling** — syncs file attachments from ticket articles
* **Knowledge Base sync** — syncs categories and answers with translations

## Permission Model

Zammad uses different permission models for different content types:

* **Tickets**: Group-based access controls. Users can only access tickets in their assigned groups.
* **Knowledge Base**: Role-based access controls. Access to knowledge base content is determined by user roles.

The connector preserves these permissions:

* Group assignments determine which agents can view synced tickets in PipesHub.
* Internal articles respect the internal/public visibility flag.

## Useful Links

* **Zammad API Documentation:** [docs.zammad.org/en/latest/api/intro.html](https://docs.zammad.org/en/latest/api/intro.html)
* **Zammad REST API Reference:** [docs.zammad.org/en/latest/api/](https://docs.zammad.org/en/latest/api/)
* **Zammad User Documentation:** [user-docs.zammad.org](https://user-docs.zammad.org/)
* **Zammad Admin Documentation:** [admin-docs.zammad.org](https://admin-docs.zammad.org/)

## Troubleshooting

<AccordionGroup>
  <Accordion title="Troubleshooting" icon="circle-exclamation">
    ### Common Issues

    **Invalid API token error:**

    * Verify the API token was copied correctly without extra spaces
    * Check that the token has not expired (if expiry date was set)
    * Ensure the token was not revoked in Zammad
    * Generate a new token if the current one is compromised or lost

    **Connection refused or timeout:**

    * Verify the Zammad URL is correct and accessible
    * Check that your Zammad instance is running and reachable from PipesHub
    * Ensure there are no firewall rules blocking the connection
    * Verify SSL/TLS certificates are valid (for HTTPS connections)

    **Insufficient permissions error:**

    * The API token inherits the creating user's permissions
    * Use an admin user's token for full API access
    * Check that the user account is active and not locked
    * Verify the user has access to the required groups

    **No data syncing:**

    * Verify the connector status shows "Active"
    * Check that tickets exist in Zammad within your filter criteria
    * Ensure the API token user has access to the groups being synced
    * Review sync logs for specific error messages

    **Missing tickets:**

    * Verify group filters aren't excluding the desired content
    * Check that the API token user has access to those groups
    * Ensure ticket state filters aren't excluding tickets
    * Verify date filters aren't too restrictive

    <Warning>
      If you regenerate or revoke the API token in Zammad, you must update the configuration in PipesHub with the new token value.
    </Warning>
  </Accordion>
</AccordionGroup>

## Connector Workflow

<AccordionGroup>
  <Accordion title="Synchronization Process" icon="sync">
    The Zammad connector follows a structured synchronization process to ensure all data is accurately synced and permissions are properly maintained.

    ### Sync Order

    The connector syncs data in the following order:

    1. **Users** → Sync all Zammad users with their profiles and emails
    2. **Groups** → Sync support groups/departments (creates both RecordGroups and UserGroups for permissions)
    3. **Roles** → Sync user roles for knowledge base access controls
    4. **Tickets** → Sync tickets per group with articles and attachments
    5. **Knowledge Base** → Sync categories and answers with translations

    ### Full Sync vs Incremental Sync

    **Full Sync** occurs when:

    * First-time synchronization
    * Manual full sync is triggered

    **Incremental Sync** occurs when:

    * Previous sync completed successfully
    * Only fetches content modified since last sync
    * Uses `updated_at` timestamps for change detection

    ### What Gets Processed

    **Tickets**: Number, title, state, priority, group assignment, owner, customer, all articles (messages, replies, notes), attachments

    **Knowledge Base**: Categories hierarchy, answers/articles with full content and translations, associated attachments

    **Attachments**: Files attached to ticket articles and knowledge base answers
  </Accordion>
</AccordionGroup>

***

## FAQ

<AccordionGroup>
  <Accordion title="How long does the initial sync take?">
    The initial sync duration depends on several factors:

    * **Instance size**: Number of tickets and knowledge base articles
    * **Network latency**: Connection speed to your Zammad instance
    * **Content complexity**: Tickets with many attachments take longer

    **Tips to speed up initial sync:**

    * Use **group filters** to sync only the groups you need
    * Use **date filters** to exclude old tickets
  </Accordion>

  <Accordion title="What permissions does the API token need?">
    The following permissions must be enabled when creating the API token:

    * **ticket.agent** - Access the tickets as agent based on group access
    * **ticket.customer** - Access tickets as customer
    * **knowledge\_base.editor** - Access the knowledge base editor features
    * **knowledge\_base.reader** - Access the knowledge base reader features
  </Accordion>

  <Accordion title="Can I sync specific groups only?">
    **Yes**. Use the Groups filter to specify which groups to include or exclude:

    * **Include specific groups**: Set Operator to `In` and select the groups
    * **Exclude specific groups**: Set Operator to `Not In` and select the groups to exclude
  </Accordion>

  <Accordion title="Queries not returning results. What could be wrong?">
    There are three common causes:

    1. **Email mismatch** - The email used during connector authentication doesn't match your PipesHub account email. This causes permission issues preventing you from accessing synced data.
       * **Fix:** Reconfigure the connector and authenticate using the same email as your PipesHub account.

    2. **Records show in "All Records" but not in search** - Documents display in the All Records section but don't appear in search query results.
       * **Fix:** Verify sync filters in the connector settings and ensure indexing has completed. Check that the data matches your search query criteria.

    3. **Data not yet indexed** - The connector is still syncing or hasn't completed the initial indexing process.
       * **Fix:** Go to **Workspace Settings → Connectors**, check the sync status, and wait for indexing to complete.
  </Accordion>
</AccordionGroup>

***

<div className="text-center mt-12 p-6 bg-gray-50 dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-xl">
  <h3 className="text-lg font-semibold mb-2">Ready to Get Started?</h3>

  <p className="text-gray-600 dark:text-gray-400">
    Connect your Zammad helpdesk to PipesHub in just a few minutes. Follow the step-by-step guide above to enable organization-wide support ticket search across all your Zammad content.
  </p>
</div>
