Svelte form to email

In Svelte or SvelteKit, post the form to FormDoc and each submission is emailed to you. You don’t need a SvelteKit form action or server route.

A plain form

SVELTE
<form action="https://api.formdoc.dev/v1/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
  <input type="text" name="name" required />
  <input type="email" name="email" required />
  <textarea name="message" required></textarea>
  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off" />
  <button type="submit">Send</button>
</form>

With fetch and a message

SVELTE
<script>
  let status = $state("");

  async function onsubmit(event) {
    event.preventDefault();
    const form = event.currentTarget;
    status = "Sending…";
    const res = await fetch("https://api.formdoc.dev/v1/submit", {
      method: "POST",
      headers: { Accept: "application/json" },
      body: new FormData(form),
    });
    const result = await res.json();
    status = result.success ? "Thanks, message sent." : result.error.message;
    if (result.success) form.reset();
  }
</script>

<form {onsubmit}>
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
  <input type="text" name="name" required />
  <input type="email" name="email" required />
  <textarea name="message" required></textarea>
  <button type="submit">Send</button>
  <p role="status">{status}</p>
</form>

The second example uses Svelte 5 syntax ($state, onsubmit).