# Forms

A form lets a visitor send a message to the owner.

A form has two halves in two places:

- **the declaration**, which Clave holds: what fields the form has, and
  where mail about it goes;
- **the page**, which the site's own source holds: the HTML the visitor
  fills in.

The page posts to Clave at `POST /f/{public_id}`. That address is baked
into the published HTML, so it keeps working whatever else moves.

## Enquiries

What comes through a form is an enquiry. Clave stores every one and can
mail it.

- `GET /v1/forms/{id}/submissions` lists them, newest first.
- `?format=csv` exports them.

Submissions are kept for 180 days. They are somebody else's contact
details, and Clave is not an indefinite store of those.

## Where mail goes

`notify_to` must be an address **on the account**: the owner's, or a
collaborator's.

Without that rule an account could point a form at a stranger and have
Clave deliver a visitor's words there, on the same mail stream every other
customer's form mail uses.

Clave reports `notify_options` on every surface, so the legal values are
learned by lookup. A solo owner has exactly one: the address they sign in
with.

The rule is checked when the form is written. A form written before the
rule keeps the address it has.

## What a form needs to exist

Forms need a Turnstile key on the deployment. Without one, Clave
advertises no form tools at all: a tool that fails is worse than an absent
one.

Mail needs a configured sender. Without one, an enquiry is stored and not
mailed.

Read [Forms](/api/forms).

---

## Where this page sits

This is one page of the Clave documentation.
Read it as a web page at https://docs.heyclave.party/concepts/forms.
Every page has a `.md` address, and https://docs.heyclave.party/llms.txt lists them all.

- Previous: [Domains](https://docs.heyclave.party/concepts/domains.md)
- Next: [Bookings](https://docs.heyclave.party/concepts/bookings.md)
- Index: [Overview](https://docs.heyclave.party/index.md)
