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

# input

> The entry point. Declares the trigger type and validates the input payload against a schema.

Every workflow has exactly one `input` node. It's the source of the run-context `input.*` object.

## Configuration

```jsonc theme={null}
{
  "id": "in-1",
  "type": "input",
  "data": {
    "label": "Applicant Form Submitted",
    "triggerType": "webhook",
    "description": "What triggers this workflow.",
    "schema": [
      {
        "name": "applicant_id",
        "type": "string",
        "required": true,
        "nullable": false,
      },
      {
        "name": "declared_country",
        "type": "string",
        "required": true,
        "nullable": false,
        "description": "ISO 3166-1 alpha-2",
      },
      {
        "name": "declared_address",
        "type": "object",
        "required": true,
        "nullable": false,
        "description": "{ street, city, state, postal_code, country }",
      },
    ],
  },
}
```

## Schema validation

The schema is enforced at ingest. Required fields missing → 422 with a structured error. Type mismatches → same.

| Type                                                         | Notes                                                               |
| ------------------------------------------------------------ | ------------------------------------------------------------------- |
| `string`, `integer`, `number`, `boolean`, `date`, `datetime` | Standard JSON-Schema-ish primitives.                                |
| `object`                                                     | Free-form sub-object. Use `description` to document its shape.      |
| `array`                                                      | Free-form list.                                                     |
| `enum`                                                       | When `enumValues` is set — `enumValues: ["deposit", "withdrawal"]`. |

`required: true` means absent is an error; `nullable: false` means explicit `null` is an error. Both apply independently.
