# Unique

{% hint style="info" %}
See the changelog of this Action type [here](https://app.gitbook.com/s/IXj83By4f20oCrZZ0gyP/unique).
{% endhint %}

## Overview

The **Unique** Action stores a list of unique values received from a given event field. An event will be sent out via an output port each time a new value is identified. Furthermore, you can configure a list of all the events stored in its memory to be sent periodically via a different port.

<figure><img src="https://965373739-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkxZeV4nlXcIAjMGZxzLI%2Fuploads%2FbkSqro6FUQHrocnDyC6I%2FComp%2B1.gif?alt=media&#x26;token=1ac480c9-c27e-4845-8f06-5e08852318b2" alt=""><figcaption></figcaption></figure>

In order to configure this action, you must first link it to a Listener. Go to [Building a Pipeline ](https://docs.onum.com/the-workspace/pipelines/building-a-pipeline)to learn how to link.

{% hint style="info" %}
**AI Action Assistant**

This Action has an AI-powered chat feature that can help you configure its parameters. Read more about it in [this article](https://docs.onum.com/the-workspace/pipelines/building-a-pipeline/ai-assistant/ai-action-assistant).
{% endhint %}

## Ports

These are the input and output ports of this Action:

<details>

<summary>Input ports</summary>

* **Default port** - All the events to be processed by this Action enter through this port.

</details>

<details>

<summary>Output ports</summary>

* **Default port** - Events are sent through this port if no error occurs while processing them.
* **Error port** - Events are sent through this port if an error occurs while processing them.
* **New port** - Emits any event that is not already on the list as soon as it is detected.

</details>

## Configuration

{% stepper %}
{% step %}
Find **Unique** in the **Actions** tab (under the **Utils** group) and drag it onto the canvas.
{% endstep %}

{% step %}
To open the configuration, click the Action in the canvas and select **Configuration**.
{% endstep %}

{% step %}
Enter the required parameters:

<table><thead><tr><th width="178">Parameter</th><th>Description</th><th data-hidden></th></tr></thead><tbody><tr><td><strong>Field in the event to be hashed</strong><mark style="color:red;"><strong>*</strong></mark></td><td>The field providing the events to the Action.</td><td></td></tr><tr><td><strong>Hashed output field</strong><mark style="color:red;"><strong>*</strong></mark></td><td>Give the output field a name.</td><td></td></tr><tr><td><strong>Hash function</strong><mark style="color:red;"><strong>*</strong></mark></td><td>Select the hash operation to apply to the input values (<a href="../transformation/field-transformation/field-transformation-operations/utils/crc8-checksum">CRC-8</a>, <a href="../transformation/field-transformation/field-transformation-operations/utils/crc16-checksum">CRC-16</a>, <a href="../transformation/field-transformation/field-transformation-operations/utils/crc24-checksum">CRC-24</a>, <a href="../transformation/field-transformation/field-transformation-operations/utils/crc32-checksum">CRC-32</a>, or <a href="../transformation/field-transformation/field-transformation-operations/hashing">Hash 64</a>).</td><td></td></tr><tr><td><strong>Seconds of warm up</strong></td><td>You can optionally add a warm-up period. This will be the number of seconds to wait until the first version of the list of stored events is marked as complete and ready to be sent. </td><td></td></tr><tr><td><strong>Bypass hash calculation</strong><mark style="color:red;"><strong>*</strong></mark></td><td>Select <em>true</em> to bypass the hash calculation if the value is null, or <em>false</em> to ignore it.</td><td></td></tr></tbody></table>
{% endstep %}

{% step %}
Click **Save** to complete the process.
{% endstep %}
{% endstepper %}
