# Step Configuration (Mapping)

When building an integration in FlowMate, the step configuration defines how data flows between two systems. On the left side, you see the the target system, and on the right side, the **outgoing API** (the source of the data).

FlowMate supports different types of mapping to give you full flexibility depending on the data, the structure, and the integration needs.

## Default Field Mapping

**Default Field Mapping** allows you to select a value directly from the available schema fields—typically used to map fields with identical or similar names.

<figure><img src="/files/0Nm3j6ilRMuo4CwWX5af" alt=""><figcaption></figcaption></figure>

## Core Mappers

FlowMate includes a set of Core Mappers for common transformations - such as strings, arrays, or passthrough.

### String (Free Text)

Use the **String Mapper** when you want to pass a fixed string value in your mapping.\
For example, when creating a new lead in HubSpot, you might always assign the same status like `"new"` .

<figure><img src="/files/8KvjQWGpKFHfcrw5vhcc" alt=""><figcaption></figcaption></figure>

### Array Mapper

The **Array Field Mapper** allows you to define custom array structures. You can add multiple arrays and include any number of objects or values within them—perfect for APIs that expect nested array data.

<figure><img src="/files/CtBPirCaofsU9sPgYHX4" alt=""><figcaption></figcaption></figure>

### Passthrough Mapper

Use the **Passthrough Mapper** in multi-step flows when you need to reference data from previous steps. It lets you access values from earlier actions or triggers and reuse them in later mappings.

<figure><img src="/files/DGdP7QjqfjmzHALS5YIS" alt=""><figcaption></figcaption></figure>

## User Input Configuration

**User Inputs** allow you to collect information directly from the end user - either through text fields, dropdowns, or dynamic lookups. These inputs are used to personalize or parameterize the behavior of a flow.

### User Input – Text

Use the **Text Input** when the user should manually enter a value into a text field.\
This is suitable for fields like names, email addresses, or static configuration values that cannot be selected from a list.\
You can define a **label** (e.g. *“Enter Email Address”*) to guide the user.

<figure><img src="/files/ZpfnawZVchU1fhO1uFYo" alt=""><figcaption></figcaption></figure>

### Lookups

Use a **Lookup** when the user should select a value from a dropdown.\
This is useful for fields like "Slack Channel", where the user needs to choose which channel a message should be sent to.

The Lookup performs an additional API request to fetch available options.\
You can define:

* **Key Path**: The value to send in the API request (e.g. `channel_id`)
* **Label Path**: The value shown to the user in the Integration Center (e.g. `channel_name`)

You can also define a **prompt** such as *“Select Slack Channel”*, which will be displayed to the user as the input label.

<figure><img src="/files/7LxjKzUIuIOQ5ysSvVTl" alt=""><figcaption></figcaption></figure>

### **Dynamic Mapping**

This is a special kind of Lookup. It fetches the **custom fields** that a user has defined in the target system and allows them to map the incoming data themselves in the Integration Center.\
Note: On the right side (outgoing API), this must be combined with a **Lookup** or **User Input**.

<figure><img src="/files/izaxm46iJQ681d0iUCd1" alt=""><figcaption></figcaption></figure>

### **Predefined User Select**

Define static options - such as booleans (true/false) or custom dropdowns—that will be shown in the Integration Center. Customers can toggle or select a value without needing to know the underlying logic.

<figure><img src="/files/EbW6hPPNuO3dz4DnAMkg" alt=""><figcaption></figcaption></figure>

### Step Input Reference

Use **Reused Input** when the same user value is needed across multiple steps in a flow.\
Instead of prompting the user again, you can reference an existing input from an earlier step, ideal for create/update flows that require consistent data (e.g. email address, Slack channel, or user ID).

<figure><img src="/files/7UEABeMED7yXDzKhzGY0" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
When not using dropdown fields and switching to:

* `JSONata`
* `Lookups`
* `Passthrough`\
  You must follow FlowMate's naming conventions (`data.`, `passthrough.`) to ensure compatibility.
  {% endhint %}

## Data Transformation Configuration

**Data Transformations** let you modify, format, or translate data between systems. Whether it's changing a value using a mapping table or restructuring arrays, these tools help ensure compatibility between APIs.

### **JSONata**

Use [JSONata](https://jsonata.org/) to write powerful expressions that transform or filter the incoming data. JSONata lets you access nested data, apply conditions, and even perform calculations directly within the mapping.

<figure><img src="/files/Z9rhN6KZdmBpAauiZs0w" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
When not using dropdown fields and switching to:

* `JSONata`
* `Lookups`
* `Passthrough`\
  You must follow FlowMate's naming conventions (`data.`, `passthrough.`) to ensure compatibility.
  {% endhint %}

### Mapping Tables

Use a **Mapping Table** to define how specific values within a field should be translated between systems.\
This is especially useful for fields like `"Status"` where the values used in the source and target APIs differ.\
For example, you can map `"open"` from System A to `"new"` in System B, allowing consistent and meaningful data transfer.

<figure><img src="/files/7DxWNGW4JlGJnnbDygg4" alt=""><figcaption></figcaption></figure>

***


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://flowmate.gitbook.io/flowmate-documentation/step-configuration-mapping.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
