> ## Documentation Index
> Fetch the complete documentation index at: https://darkbanner.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Web Form

> Collect input from users through a shareable, published form

The **Web Form** node creates a form that users can fill out in their browser. When submitted, the form data flows into the next node. Use it to build intake forms, approval workflows, multi-step wizards, and any flow that needs human input.

## When to Use It

* Collecting information from customers or team members
* Building multi-step intake processes
* Creating approval workflows where a human reviews and submits data
* Gathering structured input before running automations

## How It Works

**1. Add a Web Form node**

Drag a Web Form node onto your canvas. It can be the first node (trigger) or placed mid-flow for multi-step forms.

**2. Design the form**

Open the Form Builder to add fields, text, and layout elements.

**3. Publish the flow**

The form is only accessible when the flow is published.

**4. Share the URL**

Each form gets a public URL:

```
https://your-zygo-instance.com/api/forms/{node_id}
```

Anyone with the link can view and submit the form — no login required.

## Form Builder

The form builder lets you visually design your form with a variety of elements.

### Input Fields

| Element | Description |
| - | - |
| **Text Input** | Single-line text field |
| **Text Area** | Multi-line text field |
| **Number** | Numeric input |
| **Email** | Email input with validation |
| **Select / Dropdown** | Choose one option from a list |
| **Multi-Select** | Choose multiple options |
| **Checkbox** | Single true/false checkbox |
| **Date** | Date picker |
| **File Upload** | File attachment |

### Layout & Content

| Element | Description |
| - | - |
| **Heading** | Section heading text |
| **Paragraph** | Static text or instructions |
| **Divider** | Horizontal separator |

### Form Settings

| Setting | Description |
| - | - |
| **Title** | The form's heading, displayed at the top |
| **Description** | Explanatory text shown below the title |
| **Password Protection** | Require a password before the form loads |

## Dynamic Content

Form titles, descriptions, and field labels support **template syntax**. This is especially useful in multi-step forms where earlier submissions populate later forms:

```
Welcome back, {{1_Web Form.form_data.name}}!
```

Templates are resolved when the form loads, pulling data from previous nodes via the form session.

## Output

When a user submits the form, the Web Form node outputs:

| Field | Description |
| - | - |
| `form_data` | An object containing all field values, keyed by field name |
| `session_data` | URL parameters passed to the form (if any) |

Reference submitted values in downstream nodes:

```
Name: {{1_Web Form.form_data.name}}
Email: {{1_Web Form.form_data.email}}
Selected plan: {{1_Web Form.form_data.plan}}
```

## Multi-Step Forms

You can chain multiple Web Form nodes together to create multi-step wizards. Zygo manages a **form session** that carries data between steps.

**1. First form**

The user fills out the initial form. On submission, the flow runs until it hits the next Web Form node.

**2. Processing**

Nodes between the forms can transform data, call APIs, or apply conditions to determine the next step.

**3. Next form**

The user is redirected to the next form. Data from previous steps is available via templates, so you can prefill fields or personalize the form.

**4. Completion**

After the last form, the flow continues to completion — sending emails, writing to tables, creating tickets, etc.

> [!TIP]
>
> Use the **Condition** node between form steps to route users to different forms based on their previous answers — for example, showing a different set of questions based on their role or department.

## URL Parameters

You can pass data into a form via URL query parameters:

```
https://your-zygo-instance.com/api/forms/{node_id}?name=Jane&source=email
```

These are accessible in the form's templates and in the node output under `session_data`:

```
{{1_Web Form.session_data.name}}
{{1_Web Form.session_data.source}}
```

This is useful for pre-filling forms from email links, embedding forms with context, or tracking where submissions come from.

## Rate Limiting

Public form endpoints are rate-limited to **5 requests per second** to prevent abuse. This applies to both viewing and submitting the form.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.