# One-prompt setup

Building with an AI tool? Copy this prompt, swap in your access key and paste it in. It tells the model everything it needs.

## Before you paste

1. Create a form at [app.formwire.com](https://app.formwire.com) and copy its access key from the form's **Settings** tab, under **General**.
2. Replace `YOUR-ACCESS-KEY` in the prompt below. The key is public, so it's fine to have it in your project.

## The prompt

```text wrap
Add a contact form to this site and connect it to Formwire.

Requirements:
- Fields: name, email (required) and message (required).
- The <form> posts to https://formwire.io/submit with method="POST".
- Include a hidden input named "access_key" with the value YOUR-ACCESS-KEY.
- Include a hidden input named "redirect" with the URL of a thank-you page on this site,
  and create that page if it doesn't exist.
- Include a honeypot: a text input named "fax", positioned off-screen with tabindex="-1",
  autocomplete="off" and aria-hidden="true". Leave it empty.
- Do not add any JavaScript unless the site already handles forms with fetch; if it does,
  send the same fields as JSON with an "Accept: application/json" header and show the
  response's "message" to the user.
- Keep the field names exactly as written; Formwire reads "name" and "email" as the sender.

Integration reference: https://formwire.com/llms.txt
```

It works as written in **Lovable**, **v0**, **Bolt**, **Replit** and **Cursor**, and in Claude Code or Codex. The last line points the model at [formwire.com/llms.txt](/llms.txt), a plain-text version of these docs written for agents, so it can look up field names and the response shape on its own.

## If the site submits with fetch

React and Vue projects often intercept form submits. The main prompt already allows for that; if the model still writes a plain form where you wanted a fetch call, follow up with:

```text wrap
The site handles forms with fetch. Submit the contact form to https://formwire.io/submit
as JSON with the headers Content-Type: application/json and Accept: application/json, including
access_key: "YOUR-ACCESS-KEY" in the body. On a response with success: true, show a thank-you
message; otherwise show the response's "message" field. Keep the "fax" honeypot input in the
markup and send its value too.
```

## Check the result

- The form's `action` is `https://formwire.io/submit` and its method is POST.
- There's a hidden `access_key` input with your key.
- The `fax` input is present, empty and off-screen. Without it, bot submissions aren't caught.
- Submit once from the running site. The submission shows on the form's Submissions tab and the email arrives.

## Going further

Once the form works, the [submit endpoint reference](/docs/submit) lists the option fields the model can add: `subject` for the email's subject line, `replyto` to route replies, file inputs for attachments. For an agent that should also read submissions or create forms itself, connect the [MCP server](/docs/mcp).