# uip flow registry

> `uip flow registry` browses the **Flow node registry** — the catalog of building blocks usable inside a `.flow` file. The registry contains OOTB activities (`uipath.agent`, `uipath.http`, …) and connector nodes that call third-party APIs (Slack, Salesforce, Jira, …). When logged in, the registry additionally includes connector nodes installed in your tenant.

`uip flow registry` browses the **Flow node registry** — the catalog of building blocks usable inside a `.flow` file. The registry contains OOTB activities (`uipath.agent`, `uipath.http`, …) and connector nodes that call third-party APIs (Slack, Salesforce, Jira, …). When logged in, the registry additionally includes connector nodes installed in your tenant.

The registry is shared across UiPath workflow surfaces; the same implementation backs `uip maestro` (see [maestro registry](./uip-maestro.md#runtime), exposed via `uip maestro bpmn registry`).

All subcommands honor [global options](./global-options.md). Exit codes follow the [standard contract](./exit-codes.md).

## Synopsis

```
uip flow registry pull   [-f, --force]
uip flow registry list   [-l, --limit <n>] [--local]
uip flow registry search [<keyword>] [-f, --filter <expr>] [--local]
uip flow registry get    <nodeType> [--connection-id <id>] [--local]
```

## Typical workflow

```bash
# 0. (Optional) Login for the full, tenant-enriched registry
uip login

# 1. Sync the registry (once per session — cache expires after 30 minutes)
uip flow registry pull

# 2. Search for a candidate node
uip flow registry search slack --filter "displayname:contains=send"

# 3. Inspect the full schema
uip flow registry get uipath.connector.slack.send-message

# 4. Extract just the input field definitions (useful for building requests)
uip flow registry get uipath.connector.slack.send-message \
  --output-filter "Node.inputDefinition.fields"
```

Without login, only built-in (OOTB) nodes are returned.

---

## uip flow registry pull

Fetches the node registry and writes it to a local cache. Subsequent `list`, `search`, and `get` calls read from this cache.

### Options

- `-f, --force` — force refresh, ignoring the cache.

### Cache behavior

- Cache expires after 30 minutes. An expired or missing cache triggers a live fetch.
- When not logged in, OOTB nodes are returned without updating the cache.
- On an authenticated-fetch failure, the command falls back to OOTB nodes without updating the cache.

### Data shape (`--output json`)

```json
{
  "Code": "NodePullSuccess",
  "Data": {
    "NodesCount":   184,
    "FromCache":    false,
    "AgeMinutes":   null,
    "Source":       "authenticated",
    "CacheWritten": true,
    "Message":      "Synced fresh nodes",
    "Info":         null
  }
}
```

`Source` is `"ootb"` (unauthenticated) or `"authenticated"` (tenant-specific). `AgeMinutes` is populated when `FromCache: true`.

---

## uip flow registry list

Sample cached nodes. Defaults to the first 20 entries.

### Options

| Option | Default | Description |
|---|---|---|
| `-l, --limit <n>` | `20` | Number of nodes to return. Pass `-1` for all. Must be a positive integer or `-1`. |
| `--local` | off | Show only in-solution project nodes. Requires a `.uipx` in the CWD, parent, or grandparent. |

If `list` is called without a prior `pull`, the service fetches live data first.

### Data shape

```json
{
  "Code": "NodeListSuccess",
  "Data": [
    {
      "NodeType":    "uipath.slack.connector.send-message",
      "Category":    "connector",
      "DisplayName": "Send Message",
      "Description": "Post a message to a Slack channel",
      "Version":     "1.0.0",
      "Tags":        "slack, messaging"
    }
  ]
}
```

If the result is truncated, a log line is emitted on stderr showing total vs shown.

---

## uip flow registry search

Find nodes by keyword, by structured filter, or both.

### Arguments

- `[keyword]` — substring matched against `nodeType`, `category`, `tags`, `display.label`, `description`.

### Options

| Option | Description |
|---|---|
| `-f, --filter <expr>` | Structured field filter (see syntax below). |
| `--local` | Search only in-solution nodes (requires `.uipx` nearby). |

At least one of `<keyword>` or `--filter` is required.

### Filter syntax

```
field=value                     # equality (default operator)
field:operator=value            # operator variant
field1=v1,field2=v2             # multiple conditions (AND)
```

Operators: `equals` (default), `contains`, `startsWith`, `endsWith`, `in`.

Filterable fields (aliases shown in brackets):

- `category` [`cat`] — e.g. `connector`, `agent`, `trigger`
- `type` [`nodetype`] — node type identifier
- `tags` [`tag`] — node tags
- `displayname` [`display_name`, `name`, `label`] — human-readable name

#### Examples

```bash
uip flow registry search slack
uip flow registry search --filter "category=connector"
uip flow registry search --filter "displayname:contains=send message"
uip flow registry search slack --filter "category=connector"
uip flow registry search --filter "tags:in=ai,automation"
uip flow registry search --filter "category=connector,displayname:contains=slack"
```

**Data shape**: same shape as `list` — `Code: "NodeSearchSuccess"`, `Data: [flattened nodes…]`.

---

## uip flow registry get

Return full details for a single node.

### Arguments

- `<nodeType>` *(required)* — node type identifier (case-insensitive).

### Options

| Option | Description |
|---|---|
| `--connection-id <id>` | Connection ID for Integration Service enrichment. Required for connector **trigger** nodes; optional for connector **activity** nodes. |
| `--local` | Get node from in-solution projects only. |

### Integration Service enrichment

For nodes tagged `"connector"`, `get` automatically calls Integration Service and merges live metadata:

**Connector activity nodes** (`uipath.connector.*`, not trigger):

- `inputDefinition.fields[]` — fields to configure. Each has `name`, `displayName`, `type`, `required`, and optionally `reference` (lookup: `objectName`, `path`, `lookupValue`, `lookupNames`, `childPath`) or `enum`.
- `outputResponseDefinition` — fields produced after the node runs.
- `connectorMethodInfo` — HTTP method, path, operationId.
- `--connection-id` is optional; passing one adds custom fields specific to that account.

**Connector trigger nodes** (`uipath.connector.trigger.*`):

- `eventParameters` — fields that configure the trigger (e.g. which folder to watch).
- `filterFields` — fields used to filter which events fire the trigger.
- `outputResponseDefinition` — fields produced by the event payload.
- `eventMode` — `"webhooks"` or `"polling"`.
- Login **and** `--connection-id` are required — without both, no enrichment is returned.

### Per-input-field metadata

Each entry under `inputDefinition.fields`:

| Property | Description |
|---|---|
| `name` | JSON key for the request/response. |
| `displayName` | Human-readable label. |
| `type` | Data type (`string`, `boolean`, `integer`, …). |
| `required` | `true` if mandatory (input fields only). |
| `description` | What the field does. |
| `enum` | Allowed values (if restricted). |
| `reference` | Object-reference metadata — field expects an ID, not a plain name. |
| `responseOnly` | `true` on output fields. |

#### Data shape

```json
{
  "Code": "NodeGetSuccess",
  "Data": {
    "Node": {
      "nodeType":        "uipath.slack.connector.send-message",
      "category":        "connector",
      "display":         { "label": "Send Message" },
      "inputDefinition": {
        "fields": [
          { "name": "channel", "required": true, "type": "string" }
        ]
      }
    }
  }
}
```

## Examples

```bash
# Basic activity lookup (anonymous, OOTB)
uip flow registry get uipath.agent

# Connector activity with optional account-specific enrichment
uip flow registry get uipath.connector.uipath-salesforce-slack.send-message \
  --connection-id <connection-id>

# Connector trigger — requires login + connection-id
uip flow registry get uipath.connector.trigger.uipath-microsoft-outlook365.email-received \
  --connection-id <connection-id>

# Just the input fields, for building a request body
uip flow registry get uipath.connector.slack.send-message \
  --output-filter "Node.inputDefinition.fields" --output json
```

## See also

- [`uip flow node add`](./uip-flow-node-edge.md#uip-flow-node-add) and [`uip flow node configure`](./uip-flow-node-edge.md#uip-flow-node-configure) — consume node types discovered here
- [Flow overview](./uip-flow.md)
