> For the complete documentation index, see [llms.txt](https://docs.fortifiedid.se/pipes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fortifiedid.se/pipes/valves/item.md).

# Item

The Flow Items valves

## Introduction

The Flow Items API defines how to create, remove and iterate over uniquely identified objects stored in the currently executing Flow's state called items.

Valves that support item iteration is executed on each item surviving item filtering.

## Common configuration

These configuration properties applies to all valves that support item iteration

{% tabs %}
{% tab title="Properties" %}

| Name                | Description                                                                                                       |
| ------------------- | ----------------------------------------------------------------------------------------------------------------- |
| `item_include_expr` | Predicate expression for controlling if an item should be included in [iteration](#iteration) ("item filtering"). |
|                     |                                                                                                                   |
| {% endtab %}        |                                                                                                                   |

{% tab title="Example" %}

```json
{
    "name":"ItemPropertyAdd",
    "config": {
        "item_include_expr":"item.id.startsWith('tmp_')",
        "name":"mv_pipe_exec",
        "value":"${utils.now}"
    }
}
```

{% endtab %}
{% endtabs %}

## Iteration

To control which items that are included in iteration you can enable *item filtering*. Filtering is based on a predicate expression (a boolean expression that returns `true` or `false`) deciding if the current item should be included or not.

The actual filter is an ECMA-script (JavaScript) that MUST evaluate to `true`, `false` or a `function` returning `true` or `false`.

```
// Skip all items
"item_include_expr": "false"

// Include items with property "mobile"
"item_include_expr": "item.mobile != null"
```

During expression evaluation data is made available in *scopes*. A scope is a map (i.e key-values or hash) where values are accessed using a name and plain dot notation.

<pre><code><strong>// Get id of current item
</strong><strong>item.id
</strong><strong>
</strong>// Get first value of item property displayName 
// Note: item properties are multivalue
item.displayname[0]

// or
item.displayname

<strong>// Get id of current session
</strong><strong>session.id
</strong><strong>
</strong><strong>// Get first value of multivalue "roles" stored in session
</strong><strong>session.roles[0]
</strong><strong>
</strong><strong>// Get value "otp" from state set by previous valve
</strong><strong>state.otp
</strong></code></pre>

The following scopes are available:

| Name      | Description                                                            |
| --------- | ---------------------------------------------------------------------- |
| `item`    | The current item. All item properties are multi-value except for `id`. |
| `session` | The current session                                                    |
| `state`   | The current (pipe) state                                               |
| `request` | The current (pipe) request                                             |
| `exports` | AuthN exports                                                          |
| `items`   | List of all items                                                      |
