# Bootstrap

Point a Bootstrap 5 contact form at FormsReach with form-control classes and your API key - no backend required.

## What you will achieve

A working contact form on a Bootstrap 5 page using classic HTML form POST - no npm, no SDK.

## Prerequisites

- A [FormsReach form and API key](/docs/getting-started/create-form-api-key/)
- A page that already loads Bootstrap 5 CSS (CDN or npm)

## Steps

### 1. Create a form and copy the API key

Sign in at [app.formsreach.com](https://app.formsreach.com/?utm_source=docs&utm_medium=content&utm_campaign=docs&utm_content=bootstrap), create a form, and copy the API key.

### 2. Paste the Bootstrap form

```html
<form action="https://api.formsreach.com/submit" method="POST">
  <input type="hidden" name="api_key" value="YOUR_ACCESS_KEY" />

  <div class="mb-3">
    <label for="name" class="form-label">Name</label>
    <input type="text" class="form-control" id="name" name="name" required />
  </div>

  <div class="mb-3">
    <label for="email" class="form-label">Email</label>
    <input type="email" class="form-control" id="email" name="email" required />
  </div>

  <div class="mb-3">
    <label for="message" class="form-label">Message</label>
    <textarea class="form-control" id="message" name="message" rows="4" required></textarea>
  </div>

  <button type="submit" class="btn btn-primary">Submit Form</button>
</form>
```

Replace `YOUR_ACCESS_KEY` with your real key. Do not add a Bootstrap `<link>` if the page already has Bootstrap 5 CSS.

### 3. Submit a test

Open the page, fill the fields, and submit.

## Verify

- A new row appears under the form's **Submissions** in the dashboard
- Field values match what you typed

## Common failures

| Symptom | Check |
|---|---|
| Nothing in dashboard | Wrong key or wrong form in the app |
| Missing API key error | Hidden input `name="api_key"` missing |
| Looks unstyled | Bootstrap 5 CSS is not loaded; the form still submits |
| Domain denied | Add your host to the [domain allowlist](/docs/submit-api/domains/) |
| Missing fields | Each input needs a `name` attribute |

## Next

- [Test your form](/docs/getting-started/test-your-form/)
- [Email channel](/docs/channels/email/)
- [HTML](/docs/frameworks/html/) for the unstyled markup
- [JavaScript](/docs/frameworks/javascript/) if you need AJAX without full page reload
- Marketing landing: [/frameworks/bootstrap/](/frameworks/bootstrap/)
