User guide

Everything you need to collect messages from your website, in plain language. No coding experience needed for the basics. Looking for the technical reference? See the docs.

What is FormFlux?

FormFlux receives the forms on your website — contact forms, sign-ups, enquiries — and sends each submission to your email. It also keeps a copy in your dashboard so you can read, search and manage them later. You don't need your own server.

Signing up and logging in

Go to Sign in, type your email and press Send magic link. Open the email and click the link — you're in. There is no password to remember. Signing in for the first time creates your account on the free plan.

Creating a form and getting its address

In the dashboard, open Forms and create a new form. Give it a name and the email address where submissions should go. FormFlux gives the form its own address (its “endpoint”), which looks like this:

https://api.formflux.online/f/YOUR_FORM_ID

Open the form and go to its Settings tab: the Copy this HTML box contains a ready-made form with your real address already filled in.

In a hurry? You can also skip the dashboard and use https://api.formflux.online/email/[email protected] as the address. The first submission sends you a verification email; click it once and you're set. This shows your email address in your page's code, so switch to a dashboard form before going live.

Connecting it to your website

Pick whichever matches your site. Replace YOUR_FORM_ID with the ID from your dashboard.

Copy-paste HTML

Works on any website or site builder that lets you add HTML.

<form action="https://api.formflux.online/f/YOUR_FORM_ID" method="POST">
  <input type="text" name="name" placeholder="Your name" required />
  <input type="email" name="email" placeholder="Your email" required />
  <textarea name="message" placeholder="Your message" required></textarea>

  <!-- hidden trap for bots: leave it empty and hidden -->
  <input type="text" name="_honey" style="display:none" tabindex="-1" autocomplete="off" />

  <button type="submit">Send</button>
</form>

JavaScript (fetch)

Keeps visitors on the page and shows a message instead of redirecting.

<form id="contact">
  <input type="text" name="name" required />
  <input type="email" name="email" required />
  <textarea name="message" required></textarea>
  <button type="submit">Send</button>
</form>

<script>
  document.getElementById("contact").addEventListener("submit", async (event) => {
    event.preventDefault();
    const response = await fetch("https://api.formflux.online/f/YOUR_FORM_ID", {
      method: "POST",
      headers: { Accept: "application/json" },
      body: new FormData(event.target),
    });
    const result = await response.json();
    // Errors come back as { success: false, errors: [{ field, message }] } for
    // invalid fields, or { success: false, error: "..." } for everything else.
    const problem = result.errors
      ? result.errors.map((e) => e.message).join(", ")
      : result.error;
    alert(result.success ? "Thanks! We got your message." : problem);
  });
</script>

React

A ready-made contact form component.

import { useState } from "react";

export function ContactForm() {
  const [status, setStatus] = useState("");

  async function handleSubmit(event) {
    event.preventDefault();
    setStatus("Sending…");
    const response = await fetch("https://api.formflux.online/f/YOUR_FORM_ID", {
      method: "POST",
      headers: { Accept: "application/json" },
      body: new FormData(event.currentTarget),
    });
    const result = await response.json();
    // { success: false, errors: [{ field, message }] } or { success: false, error }
    const problem = result.errors
      ? result.errors.map((e) => e.message).join(", ")
      : result.error;
    setStatus(result.success ? "Thanks! We got your message." : problem);
  }

  return (
    <form onSubmit={handleSubmit}>
      <input type="text" name="name" required />
      <input type="email" name="email" required />
      <textarea name="message" required />
      <button type="submit">Send</button>
      <p>{status}</p>
    </form>
  );
}

Hidden fields and options

Add these as hidden inputs, like <input type="hidden" name="_subject" value="New enquiry" />. They change how one submission is handled and are removed before the submission is saved or emailed. Many of them can also be set once for the whole form in its settings.

_next
Where to send the visitor after they submit, for example your own thank-you page. Overrides the form's default redirect.
_subject
The subject line of the email you receive.
_honey
A hidden trap for bots (_honeypot works too). People never see it; if a bot fills it in, the submission is quietly thrown away.
_replyto
Lets you hit Reply in your inbox and answer the sender directly.
_cc
Extra people to copy on the email, separated by commas.
_blacklist
Words or phrases, separated by commas (up to 20), that mark a submission as spam.
_captcha
Ignored when the form requires a captcha, so it cannot be used to get around it.
_autoresponse
A custom thank-you email sent to the visitor. You can use {{name}}-style placeholders. Pro plan.
_template
Look of the email you receive: "table" (the default) or "plain".
_webhook
An extra web address that receives a copy of the submission. Pro plan.
_format
Set to "json" to get a short JSON reply instead of being redirected (useful with JavaScript).

File uploads (not available yet)

Not available yet: file storage is still being set up, so uploads can't be accepted right now. When it's ready, file uploads will be part of the Pro plan. Add a file input and set enctype="multipart/form-data" on the form. Each submission can include up to 10 files, 10 MB in total. The email you receive contains download links.

Form with a file upload

The enctype attribute is required for files.

<form action="https://api.formflux.online/f/YOUR_FORM_ID" method="POST" enctype="multipart/form-data">
  <input type="email" name="email" required />
  <input type="file" name="attachment" />
  <button type="submit">Send</button>
</form>

What happens when someone submits

  1. FormFlux checks the submission: the bot trap, captcha (if on), your validation rules and the hourly limit.
  2. It is saved to your dashboard, where you can see it under the form's Submissions tab.
  3. An email with every field is sent to you. On Pro, an automatic thank-you email can go to the visitor, and webhooks can send a copy to Slack, Discord or another app.
  4. The visitor is taken to a thank-you page — yours if you set one, otherwise FormFlux's.
  5. Every submission stays searchable on the Archive page until it reaches the form's retention limit.

Spam protection and captcha

FormFlux protects your forms in several ways:

  • Bot trap: the hidden _honey field. Bots that fill it in are silently ignored.
  • Spam filter: messages with 3 or more links or common spam phrases, or words from your blacklist, are saved and marked as spam but never emailed. The sender still sees a normal success message.
  • Captcha (not available yet): captcha checking is still being set up. Please leave Require hCaptcha switched off for now — while it's on, submissions can't get through. Once it's live, you'll add the hCaptcha box below to your page.
  • Hourly limit: stops one visitor from flooding a form.

If a real message was marked as spam by mistake, you can correct it from the dashboard.

hCaptcha box

Not available yet. For later: paste inside your form, using your own hCaptcha site key.

<div class="h-captcha" data-sitekey="YOUR_HCAPTCHA_SITEKEY"></div>
<script src="https://js.hcaptcha.com/1/api.js" async defer></script>

Settings

Each form's Settings tab has these sections:

Delivery
Form name, the email that receives submissions, a default subject line, default CC and a default redirect page.
Spam protection
Turn hCaptcha on or off and manage blacklist phrases.
Webhooks
Send each submission to your own web addresses, Slack or Discord (Pro).
Autoreply
An automatic thank-you email to the visitor (Pro).
Validation rules
Make fields required or check them against a pattern.
Retention & limits
How many days to keep submissions (90 by default) and how many submissions per hour to accept (100 by default).

The account Settings page shows your plan and usage.

Limits and plans

Free
1 form and 50 submissions per month. Email delivery, dashboard, archive and spam protection are included. Captcha isn't available yet.
Pro
Unlimited forms and submissions, plus webhooks, autoreply and analytics. File uploads are not available yet.
Upgrading
Paid upgrades are coming later. For now, every account is on the free plan.

Troubleshooting

I submitted the form but got no email.
Check your spam folder first. If you used the email-address URL, you must click the verification link FormFlux sent you before anything is delivered. Submissions flagged as spam are saved but never emailed. Every submission still shows up in the dashboard, so look there too.
It says “This form is not verified yet”.
You are using the email-address URL. Open the verification email FormFlux sent to that address and click the link once. After that, submissions go through.
It says the captcha is required.
Captcha is not available yet. Switch off Require hCaptcha in the form's settings and try again.
It says “Too many submissions” or a rate limit was hit.
Each form accepts a set number of submissions per hour (100 by default) from the same visitor. Wait a while, or raise the limit in the form's settings.
File uploads are rejected.
File uploads are not available yet. When they are, they'll need the Pro plan, enctype="multipart/form-data" on the form, and 10 MB or less in total (10 files at most).
Some fields come back with errors.
Your form has validation rules (Settings → Validation rules). The reply lists which fields failed so you can show the message to the visitor.
I can't sign in.
Sign-in uses a magic link. Use the newest link in your inbox, open it in the same browser, and check your spam folder.

FAQ

Do I need to write any server code?
No. You point your form at a FormFlux address and FormFlux does the rest.
Do I need a password?
No. You sign in with a magic link sent to your email.
Is my email address visible on my website?
Only if you use the email-address URL. A dashboard form uses a random ID instead, so your address stays private.
Can I use any website builder?
Yes, as long as you can paste HTML or add a form that posts to a web address.
How long are submissions kept?
Each form has a retention setting (90 days by default). A daily clean-up removes submissions older than that, along with their files.
Can I search old submissions?
Yes. The Archive page searches every submission across all your forms.
How do I get Pro?
Paid upgrades are coming later. For now, every account is on the free plan.