---
id: plugins-guides-pins-and-routing
title: "Pins and routing"
summary: "How records move between components - pin kinds, the type on each connection, route ids, several connections on one pin, and what happens when no connection matches."
audience: user
keywords: "pins, routing, connection, route id, type, AnyData, NoInputData, branch, parallel, Scatter, Continue pin, Start pin"
---
# Pins and routing

Every component sends and receives records through its pins, and every connection between two pins carries one type.
This page shows how a record finds its way: which connections it takes, and how you branch, fan out and route by
name.

## Pin kinds

| Kind | What it does |
|---|---|
| **Input** | Receives records. |
| **Output** | Sends records on. Plugins name their outputs after what they carry: `Output`, `NoData`, `Timeout`, `Catch`. |
| **Continue** | Sends the record on after the component's own work is done, usually unchanged. |
| **Start** | Starts the component. Leave it unconnected and the flow calls it once when it starts. |

The plugin's page lists its pins and what each one carries. Select a pin in the designer to see its types.

## How a record picks its connections

When a component sends a record out of a pin, each connection on that pin decides whether to take it:

| The connection has | It takes |
|---|---|
| A **Route Id** | Only records sent with that route id, such as the branch a [Decision router](/documentation/scripting/decision-conditions) picked |
| The type `NoInputData` | Only the start signal of the flow |
| The type `AnyData` | Every record, whatever its type |
| Any other type | Records of that type |

The route id is used once: after the record has left the pin, it is cleared, so the next component sends its records
without one.

## One pin, several connections

Draw several connections from one output pin and every connection that takes the record is called, one after another,
with the same record. A change one branch makes to the record is visible to the branches after it.

To run branches in parallel, use these flow plugins:

- **Scatter** sends the record to every connected branch at the same time; **Gather** waits for all of them and
  combines the answers.
- **Fork** runs its branch in the background and returns at once, with an optional limit on how many run together.

To run steps in order with the same record, use **Sync call**: it runs its `Output` branch to the end, then sends the
same record to `Continue`.

## Branch by condition

Put a **Decision router** in front of the branches, give each outgoing connection a **Route Id**, and return the name
of the branch from the condition. See [Decision conditions](/documentation/scripting/decision-conditions).

## When nothing matches

- **The pin has no connections.** The record stops there. That is how you end a branch.
- **The pin has connections, but none takes the record.** The flow stops with an error, because a record has nowhere
  to go. Give the connection the right type, use `AnyData`, or add a branch for the missing route.

To stop one request on purpose and keep the flow running, use **Stop execution**; to fail it, use **Error** and
handle the failure with **Try catch** or **Retry**.
