# Forms

Forms are a way to collect submissions directly through Sentinel — a shortcut when you don't want to build and host a verification endpoint yourself, per [Server Integration](/docs/integration/server/).

## Create a form

1. Open the **Forms** section in the admin interface.
2. Click **Create Form**.
3. Give it a name (e.g. "Contact Form").
4. Leave the remaining settings at their defaults for now — see [Form settings](#form-settings) below to adjust them later.
5. Click **Save**.

This assigns the form a unique **slug**, used in its submission URL.

## Using a form

Point your HTML form's `action` at Sentinel's submission endpoint, with `method="post"`, and include the [ALTCHA widget](/docs/integration/widget/) inside the form:

```html
<form method="post" action="https://sentinel.example.com/v1/submit/your-form-slug">
<!-- your form fields -->

<altcha-widget
challenge="https://sentinel.example.com/v1/challenge?apiKey=key_..."
></altcha-widget>

<button type="submit">Send</button>
</form>
```

Submissions without a valid ALTCHA payload are rejected. If you renamed the widget's hidden field (via its `name` attribute), tell Sentinel which field to expect by appending `?altchaField=custom_name` to the submission URL.

Content submitted through a Form can be scored using Sentinel's content-moderation features — see [Classifier](/docs/sentinel/features/classifier/), [Phishing Detection](/docs/sentinel/features/phishing-detection/), and [Similarity & Training Data](/docs/sentinel/features/similarity-training-data/).

## Form settings

- **Slug** — a unique, URL-friendly identifier used in the submission URL. Must be unique across all accounts on the instance.
- **Status** — **Active** accepts submissions; **Inactive** rejects them with an error response.
- **Uploads** — enable file uploads and optionally cap the maximum file size. Requires the `altcha/upload` plugin to be installed — uploads won't work without it.
- **Proxy** — forward accepted submissions on to another backend service, preserving the original POST method and `Content-Type` header, with the submission forwarded unmodified.
- **Email Notifications** — send an email whenever a submission comes in. Configure your SMTP connection as a URL:

```
smtp://USER:PASSWORD@smtp.example.email
```

Optional parameters: `from`, `replyTo`, `secure=true`, `ignoreTLS=true`, `requireTLS=true`, `rejectUnauthorized=false`.

> **Note:**
>
> The exact response format for a submission (success/error status codes, and whether a post-submission redirect can be configured) isn't covered here — check the [API reference](/sentinel-api-docs-v1.html) for the `/v1/submit/:slug` endpoint's response details.

## Related

- **[Security Groups](/docs/sentinel/configure/security-groups/)** — Forms are subject to their Security Group's rules.
- **[Secure Form Submissions](/docs/sentinel/use-cases/secure-form-submissions/)** — a walkthrough for a general-purpose contact/feedback form.
