Spam and fraud checks for your Next.js forms, in one call
Call Doorman from your route handler or server action before you save the lead, create the account or capture the order. You get deliver, hold or drop in about 160 ms, with the sentence behind it.
Free for 1,000 checks a month. Paid plans from $12. No card required.
Example: Doorman screening next.js api route, each judged in under half a second and delivered or kept out with the reason.
Sound familiar?
Captchas cost you conversions
A challenge on sign-up or checkout is friction on your most valuable page, and it doesn't read what people send.
Rolling your own filter never ends
Word lists, disposable-domain lists and rate limits catch last month's spam and block this month's customers.
Fake sign-ups skew everything
Throwaway accounts inflate trials, burn onboarding emails and make activation numbers meaningless.
Add it to a route handler
- Install: npm i doorman-client, then put DOORMAN_KEY in your environment.
- Check before you act: save the lead, create the account or capture the order only when the action isn't drop.
- Fails safe: a timeout or network error returns hold, not an exception, so nothing real is lost.
- Or skip the code: point a plain form's action at the hosted URL, or let your coding agent set it up from one prompt.
import { Doorman } from "doorman-client";
const doorman = new Doorman(process.env.DOORMAN_KEY!);
export async function POST(req: Request) {
const f = await req.formData();
const r = await doorman.check({
form: "f_yourForm",
email: String(f.get("email") ?? ""),
message: String(f.get("message") ?? ""),
});
if (r.action !== "drop") await saveLead(f, { review: r.action === "hold" });
return Response.json({ ok: true }); // same answer for everyone
}Checked, not guessed
Every decision comes from Doorman's models reading the submission, in milliseconds, with the reason attached.
Labelled test set: 104 invented but labelled contact-form and checkout submissions, judged live; latency is the median of those checks. Questions were not tuned to the set.
Questions
Does it work with server actions?
Yes. Call doorman.check from the server action exactly as in the route handler; it only needs the key on the server.
Is there a client-side script?
No. Doorman runs on your server or as the form's action URL, so nothing is added to your pages.
Can it check sign-ups and checkouts too?
Yes: pass kind signup or checkout with the signals you have, such as payment attempts or card and IP country.
How much does it cost?
Free for 1,000 checks a month. Pro is $12 a month for 25,000 and Business is $49 a month for 250,000. Every plan gets the same models. See pricing.
Try it on your own Next.js form
Free for your first 1,000 checks every month. Start in watch mode and see every call before you trust it.