<formaction="https://api.formkoi.com/f/YOUR_PUBLIC_FORM_KEY"method="POST"><labelfor="name">Your name</label><inputid="name"name="name"autocomplete="name"required><labelfor="email">Email address</label><inputid="email"name="email"type="email"autocomplete="email"required><labelfor="message">Your message</label><textareaid="message"name="message"required></textarea><!-- Leave this hidden anti-spam field empty. --><inputtype="text"name="botcheck"tabindex="-1"autocomplete="off"style="display:none"hidden><buttontype="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.
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.
Could you quote a redesign for our bakery site before spring?
Quote request
J
Jonas Weber1h
The checkout page shows an error on Safari, screenshot attached.
Support 1 file
M
Mara EllisonYesterday
Loved the portfolio. Are you taking on new clients in May?
Contact
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.
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.
No notification email was sent for held messages.Restore to inbox
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
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.
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.