Skip to content
form koi.

Contact form backend.
No server code.

Connect your existing form to one endpoint. Save submissions in a searchable inbox, filter spam and check each notification’s delivery status.

Works with HTML, React, Next.js and Astro.

Free for 250 submissions a month. No credit card required.

LIVE API

Send a sample. See the saved submission.

This sends a real request to our API. No account needed.

Use sample details. Messages expire after one hour, with scheduled cleanup. This demo does not send email.

Works with your existing website

No SDK required. Use a standard HTML form, JSON or multipart request.

How it works

Connect your website form
in three steps.

  1. 1

    Create a form and pick who gets notified

    Each recipient confirms their address by email before anything is sent to them.

  2. 2

    Paste the endpoint into your site

    Copy the endpoint, or a generated HTML, React, Next.js or Astro example that already includes your Turnstile and upload settings.

  3. 3

    Send a test and check the saved message

    Send a test from the workspace, then submit from your real page. Open the message to see its fields, recipients and delivery status.

Read the quickstart
Plain HTML example
<form action="https://api.formkoi.com/f/YOUR_PUBLIC_FORM_KEY" method="POST">
  <label for="name">Your name</label>
  <input id="name" name="name" autocomplete="name" required>

  <label for="email">Email address</label>
  <input id="email" name="email" type="email" autocomplete="email" required>

  <label for="message">Your message</label>
  <textarea id="message" name="message" required></textarea>

  <!-- Leave this hidden anti-spam field empty. -->
  <input type="text" name="botcheck"
    tabindex="-1" autocomplete="off" style="display:none" hidden>

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

Replace the action URL with the endpoint from your workspace. The hidden honeypot field is the only extra markup; Turnstile and upload markup are generated when you enable them.

Using React, Next.js or Astro?

What you get

Store form submissions.
Track email delivery.

Built for freelance developers, small studios and technical founders. Every site needs a contact or quote form; none of them needs its own mail setup, spam filter and retry logic.

01Inbox

Every form, one searchable inbox

Messages from all your sites and clients land in one place, tagged by form, so you never dig through email threads to find a lead.

  • Search
  • Archive
  • CSV export
  • Attachments
How submissions are stored

02Delivery status

See what happened to each notification.

Check whether an email is queued, delivered to the receiving mail server or bounced. Review the attempt history and retry eligible failures from the saved submission.

  • Delivery status
  • Attempt history
  • Retry eligible failures

Delivered means accepted by the receiving mail server. It does not confirm inbox placement or that the email was read.

Receipt versus delivery

03Spam protection

Review suspicious messages before notifying recipients

Four layers of protection on every plan. Suspicious messages are held in a Spam folder with the reason shown, and a false positive is one click from restored.

  • Turnstile
  • Honeypot
  • Rate limits
  • Allowed origins
See the spam controls

Pricing

Free to start. Room to grow.

Free for 250 submissions a month, with spam protection and delivery tracking included. Need file uploads or more submissions? Pro includes private attachments and 10,000 monthly submissions, shared across your forms.

Pro: $12/month or $120/year — save $24 a year.

Pro billed as $120 once a year, instead of $144.

Free

No card required

For portfolios, side projects and a client site or two.

$0forever

250 submissions a month

After that, new submissions pause until the month resets.

  • Unlimited forms in one workspace
  • Searchable inbox, Spam review and CSV export
  • Turnstile, honeypot, rate limits and allowed origins
  • Per-email delivery status with retries
  • Recipient routing and consent-based auto-replies
  • Signed webhooks and management API access
Start free

Pro

Uploads + volume

For higher-volume forms and file uploads.

$10per month, billed yearly

10,000 submissions a month

After that, $1.50 per 1,000 more, only if you turn extra usage on.

  • Everything in Free
  • 10,000 submissions a month, shared across forms
  • Keep going past 10,000 for $1.50 per 1,000, only if you turn it on
  • 5 GiB of private file storage, then $0.25 per GiB
  • Up to 3 files per submission: 5 MiB each, 10 MiB total
  • Choose file expiry from 1–365 days
  • 100 auto-replies an hour, 1,000 a day
  • Email support
Get Pro

Create your free account without a card, then upgrade in Billing when you need Pro. Submissions are counted across all forms in a workspace and reset each month. Questions? Contact us.

Explore routing and spam handling

Choose different fields and see which team would receive the message. This separate browser preview uses sample rules and recipients.

Your website · contact formDEMO · NOTHING IS SENT

Send a sample quote request

Runs entirely in your browser. See what your inbox, routing and notification screens would show for it.

Try adding the word “urgent” to change the routing result.

Browser-only demo with made-up recipients. Turnstile, attachments, webhooks and email sending are not simulated.

File uploads, routing
and auto-replies.

Quote requests, support forms and project briefs need extras. Switch each one on per form instead of wiring up another service.

Browse the docs

FAQ

Common
questions.

Read the docs
Do I have to rebuild my form or add an SDK?

No. Keep your fields, styles and website. Point a standard HTML form at your Form Koi endpoint, or send JSON or multipart from JavaScript. Your workspace generates an example that already matches your form’s Turnstile and upload settings.

Does it work with React, Next.js and Astro?

Yes. Form Koi accepts regular HTML form posts, JSON and multipart requests, so it fits static sites as well as framework apps. The quickstart includes HTML, React, Next.js and Astro examples, and the API reference covers custom integrations.

What happens to spam?

Combine Cloudflare Turnstile, a hidden honeypot field, rate limits and allowed origins. Messages that trip the honeypot or contain many links are held in a Spam folder without notifying anyone. You can review and restore them. No filter catches everything.

How do I know an email actually went out?

Each notification has its own status: Queued, Sending, Accepted by email service, Delivered to mail server, Bounced or Needs attention. You can retry eligible failures from the message page. A delivery status does not guarantee inbox placement or that someone read the email.

What happens when I reach the monthly limit?

Usage is shared across the forms in a workspace and resets each calendar month. Free includes 250 submissions and stops there: the endpoint returns a 429 error with a clear message, and the visitor is asked to contact the website owner. Pro includes 10,000 and can keep collecting past that for $1.50 per 1,000 once you turn on extra usage and choose a monthly spending cap.

What is the difference between monthly and yearly Pro?

Same plan, same limits. Monthly is $12 billed each month and can be cancelled any time. Yearly is $120 billed once a year, which works out to 2 months free. You choose at checkout. Contact support if you need to change your billing cycle later.

Can I manage forms from my own code?

Yes. Create scoped API tokens for your server, read messages with cursor pagination, and manage supported form settings through the REST API. The docs include copyable requests and a downloadable OpenAPI specification.

How long are messages kept?

By default messages stay until you delete them. Per form, you can set automatic expiry from 1 to 365 days after receipt. Attachments have their own shorter lifetime that you choose when you enable uploads.

Start receiving
form submissions.

Create a free form