# The basic form

Part of the sendm8 docs: https://sendm8.com/docs#basic-form. Index for AI assistants: https://sendm8.com/llms.txt

Point any HTML form at your sendm8 endpoint with `method="POST"`. Every field with a `name` is stored and delivered, using the names you chose. Keep your own markup, styling and validation: we don’t inject anything into your page.

There are two kinds of endpoint, and they work the same way:

- **`/f/you@example.com`**: no account needed. Great for trying it out and for small sites. [How it works](https://sendm8.com/docs/zero-signup).
- **`/f/k3x9q2m7ab`**: a form you created in the dashboard. The id keeps your email address out of your page source, and unlocks channels, allowed domains and your own Resend key.

**HTML: `contact.html`**

```html
<form action="https://sendm8.com/f/k3x9q2m7ab" method="POST">
  <label>Email <input name="email" type="email" required></label>
  <label>Message <textarea name="message"></textarea></label>
  <button>Send</button>
</form>
```

**React: `ContactForm.jsx`**

```jsx
export function ContactForm() {
  return (
    <form action="https://sendm8.com/f/k3x9q2m7ab" method="POST">
      <input name="email" type="email" required />
      <textarea name="message" />
      <button>Send</button>
    </form>
  );
}
```

**Vue: `ContactForm.vue`**

```vue
<template>
  <form action="https://sendm8.com/f/k3x9q2m7ab" method="POST">
    <input name="email" type="email" required />
    <textarea name="message" />
    <button>Send</button>
  </form>
</template>
```

**Astro: `src/components/Contact.astro`**

```astro
---
const endpoint = "https://sendm8.com/f/k3x9q2m7ab";
---
<form action={endpoint} method="POST">
  <input name="email" type="email" required />
  <textarea name="message" />
  <button>Send</button>
</form>
```

**Next.js: `app/contact/page.tsx`**

```tsx
export default function Contact() {
  // Plain HTML post: works with JavaScript off, no API route needed
  return (
    <form action="https://sendm8.com/f/k3x9q2m7ab" method="POST">
      <input name="email" type="email" required />
      <textarea name="message" />
      <button>Send</button>
    </form>
  );
}
```

We accept `application/x-www-form-urlencoded` (a normal form post), `multipart/form-data` (for [files](https://sendm8.com/docs/uploads)) and `application/json`. A submission can have up to 100 fields and 64 KB of text.

> **Fields need a name**
>
> Browsers only send inputs that have a `name` attribute. If a field is missing from your submissions, that’s nearly always why. An `id` on its own isn’t enough.
