# FlowApps (Plugins) (Reference: https://docs.iqra.bot/build/script/flowapps)
**FlowApps** are the plugin system of Iqra AI. They allow you to add complex capabilities—like booking a meeting, creating a CRM contact, or sending a Slack message—without writing a single line of API code.
Unlike generic [Custom Tools](/build/tools/custom-tools), FlowApps provide a **Native UI Experience**.
Why use FlowApps? [#why-use-flowapps]
} title="Dynamic Dropdowns">
**No more ID hunting.** Instead of asking for a "Calendar ID", the node connects to your account and shows a dropdown of your available calendars.
} title="Validated Inputs">
The node knows what is required (e.g., Email, Date). It validates your inputs before you save, preventing runtime errors.
} title="Latency Masking">
APIs take time. FlowApps allow the agent to speak a filler phrase ("Let me check that for you...") *while* the tool is executing, eliminating dead air.
***
Configuring a FlowApp Node [#configuring-a-flowapp-node]
Add the Node [#add-the-node]
Drag your desired app (e.g., **Cal.com**) from the **Integrations** category in the Sidebar Palette onto the canvas.
Select Action [#select-action]
Click the node. In the configuration panel, select the **Action** you want to perform (e.g., "Book a Meeting").
* *Note:* The form below will change dynamically based on the action you choose.
Configure Inputs [#configure-inputs]
You will see a list of fields required by the API. For each field, you have two choices:
**Option A: Static / Template (You define it)**
You provide the value. It can be a hardcoded string or a [Script Variable](/build/script/variables).
* *Example:* `Email` -> `{{ variables.user_email }}`
**Option B: AI Generated (Agent defines it)**
You verify the checkbox **"AI Generated"**.
* The system will instruct the LLM to extract this information from the conversation history.
* *Example:* `Reason` -> The agent listens to the user and fills this field automatically.
Select Credentials [#select-credentials]
If the app requires authentication (e.g., HubSpot), select the **Integration** account you connected in the [Integrations Tab](/build/tools/integrations).
* *Public Apps:* Some apps (like Weather) do not require an account.
***
Advanced Features [#advanced-features]
Smart Fetchers (Context Aware) [#smart-fetchers-context-aware]
Some dropdowns are "Smart." They depend on other fields.
* **Scenario:** You want to book a meeting.
* **Step 1:** Select **User** (Dropdown lists your team members).
* **Step 2:** Select **Event Type**.
* *Magic:* The Event Type dropdown automatically updates to show only events belonging to the *selected User*.
Latency Masking (Speaking Before Execution) [#latency-masking-speaking-before-execution]
External APIs can be slow. A 2-second delay feels like an eternity in a voice conversation.
Use the **Speaking Before Execution** field to mask this delay.
* **Text:** *"One moment, let me see what times are available..."*
* **Behavior:** The Agent starts speaking this text *immediately*. While speaking, the system executes the API call in the background. By the time the agent finishes speaking, the data is ready.
If you use Latency Masking, remember to provide the filler phrase for **every language** enabled in your business.
Output Mapping [#output-mapping]
When the FlowApp finishes, it returns data (e.g., `booking_id`, `status`).
You can map these results to **Script Variables** to use them later in the flow.
* *Output:* `booking_id` -> *Map to Variable:* `my_booking_ref`
* *Usage:* In a later SMS node, use `Your ref is {{ variables.my_booking_ref }}`.