# v0 + Furrow Forms — contact form recipe

Official recipe from Furrow Forms. This is the agent-readable version of
https://furrowforms.com/forms-for/v0 (category: AI site builders).
Full agent instructions: https://furrowforms.com/ai.md

## When to use this

Ask v0 for a landing page and it will produce a polished React contact form in seconds — fields, validation states, the lot. Press submit, and the data goes nowhere: generated UIs don’t come with a backend. The usual fix is bolting on a database and an email service, which is a lot of machinery for a contact form. The better fix matches the workflow that built the site: Furrow Forms is a form backend an AI can operate — tell v0 to point the form at your endpoint, or let your agent provision the whole thing, account included, over API and MCP.

## The integration

Or hand your coding agent the prompt below the snippet and it will provision the backend too.

**Prompt to paste into v0**

```text
Wire the contact form to my form backend:
- POST the FormData to https://api.furrowforms.com/s/fp_k7m2
- add a hidden text input named "_gotcha" (honeypot — keep it empty)
- add a hidden input named "_ft" set to Date.now() on page load (timing check)
- on { ok: true } response, show the success state
- no API route needed; the endpoint handles spam, storage, and email
```

Replace `fp_k7m2` with the form's real public key. Public keys are safe in
client-side HTML — protection comes from the spam stack, not secrecy.

## Endpoint facts

- Submit: `POST https://api.furrowforms.com/s/<public_key>` (JSON,
  urlencoded, or multipart).
- Classic HTML POST → 303 redirect to the configured thank-you page.
  `fetch()` → `{ "ok": true, "id": "<submission_id>" }`.
- Spam stack: honeypot field `_gotcha` (keep hidden and empty), timing
  field `_ft` (hidden input the page sets to `Date.now()` on load;
  omitting it from JSON/agent clients is fine), optional Cloudflare
  Turnstile (project-level keys), per-project domain allowlist, per-IP
  per-form rate limiting (default 10 req / 60 s), and server-side filtering.
- Caught spam gets a normal 200 and is quarantined — never emailed, never
  delivered by webhook, never counted toward quota.
- File uploads: opt-in per project (off by default), inherited by every
  form. Multipart with a normal file input only — JSON cannot carry files;
  multi-file fields use the `[]` suffix (`name="resume[]"`). Default
  types: PDF, JPEG, PNG, WebP. Files land in a private per-project inbox
  linked from emails and webhooks — never raw file URLs.
- CORS honors the project's allowed domains; add the site's domain before
  testing from a browser.
- Webhooks (optional): HMAC-SHA256 signed, retried with backoff up to 8
  attempts over ~24 h, logged, testable via `test_webhook`.

## Agent setup (recommended)

1. No `frw_` token? Cold-start: `GET https://api.furrowforms.com/api/register`
   for the flow, `POST /api/register`, have the user read the 6-digit email
   code, `POST /api/register/verify`. The token is shown exactly once.
2. Connect MCP at `https://api.furrowforms.com/mcp`
   (`Authorization: Bearer frw_...`) or use REST.
3. `bootstrap_site` — one idempotent call creates the client, the project
   (domains, Turnstile keys, notify emails, webhook), and all forms.
4. `get_snippet` — generated frontend code from the field contract.
5. `test_webhook` — verify the signed delivery before going live.

## Manual setup

1. Create a free Furrow account and form — or paste the agent prompt and let your agent cold-start everything.
2. Tell v0 (or your editor’s agent) to POST the form to your endpoint, honeypot included.
3. Set allowed domains and notify emails once at the project level.
4. Deploy from v0 to Vercel as usual — the form now actually works.

## FAQ

### Do forms generated by v0 work out of the box?

No — v0 generates the frontend, so the form has no backend until you provide one. Pointing it at a Furrow Forms endpoint makes it functional in one edit: submissions are stored, spam-filtered, and emailed to you.

### Why Furrow instead of adding a database to my v0 project?

For contact and lead forms, a database plus mail service plus API route is infrastructure you then own. Furrow is that stack as a managed endpoint — including honeypot, Turnstile, rate limits, and HMAC-signed webhooks with retries when you want the data in your own systems.

### Can the AI set up the form backend itself?

Yes — that is Furrow’s defining feature. An agent can register the account via API (you read one email code), provision the site and forms in one bootstrap_site call over MCP, and verify webhook delivery. The prompt on this page is all it needs.

## Related recipes

- https://furrowforms.com/forms-for/lovable.md
- https://furrowforms.com/forms-for/bolt.md
- https://furrowforms.com/forms-for/nextjs.md
- https://furrowforms.com/forms-for/vercel.md
- All stacks: https://furrowforms.com/forms-for

## Reference

- Pricing: free tier = 100 submissions/mo, unlimited forms, full API + MCP.
  Pro = $199/yr flat per workspace (10k subs/mo). https://furrowforms.com/pricing
- Docs: https://furrowforms.com/docs · MCP: https://furrowforms.com/docs/mcp
- This recipe: https://furrowforms.com/forms-for/v0.md
