AI app builder · Base44
Make your Base44 contact form actually send email
Base44 builds a working contact form fast, and it usually wires the submit handler to a database entity it creates for you — so the data gets saved, but nothing actually emails you. Doing that "properly" means asking Base44 for a backend function that calls one of its built-in integrations, and backend functions are gated behind the Pro plan — a lot to pay just to get notified about a form.
Point the form at a PostTo endpoint instead and skip backend functions entirely — the frontend can already make a plain request to any URL, on any Base44 plan including Free. Paste one prompt into Base44's chat and the existing form's submit handler is rewired; keep the entity it created or drop it, your call.
Free plan, no credit card required.
Three steps, a few minutes
Create an endpoint
Sign up free and create a PostTo endpoint with your destination email. You get an endpoint URL immediately — no Base44 integration or connection to configure.
Paste the prompt into Base44
Give Base44 the prompt below with your endpoint URL swapped in. It edits the existing form's submit handler in place — no backend function required, so it works on the Free plan too.
Test it in the preview
Submit the form from Base44's live preview. The email lands in your inbox, and the submission shows up in the PostTo dashboard immediately.
The prompt and the code
Replace YOUR_TOKEN
with the endpoint URL from your dashboard.
Update the contact form's submit handler to send its data to PostTo, instead
of only saving it to the database entity you created for it. On submit, POST
the form fields as JSON to https://postto.dev/api/v1/send/YOUR_TOKEN with a
"Content-Type: application/json" and "Accept: application/json" header —
this is a plain frontend fetch call, so it doesn't need a backend function.
Show the existing success state if the response is ok, and the existing
error state otherwise. Add a hidden "_hp" honeypot input that real visitors
never see. Keep all other current fields, validation, and styling unchanged.
export default function Contact() {
const [status, setStatus] = useState('idle');
async function handleSubmit(e) {
e.preventDefault();
const payload = Object.fromEntries(new FormData(e.currentTarget));
const res = await fetch('https://postto.dev/api/v1/send/YOUR_TOKEN', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
},
body: JSON.stringify(payload),
});
setStatus(res.ok ? 'sent' : 'error');
}
return (
<form onSubmit={handleSubmit}>
<input type="text" name="name" placeholder="Name" required />
<input type="email" name="email" placeholder="Email" required />
<textarea name="message" required />
{/* Honeypot: bots fill this in, humans never see it */}
<input type="text" name="_hp" tabIndex={-1} autoComplete="off" style={{ display: 'none' }} />
<button type="submit">Send</button>
</form>
);
}
Good to know
No backend function or Pro-plan upgrade needed
Base44 gates custom server-side logic — and most of its built-in integrations, like sending email through Gmail or Resend — behind backend functions, which require the Pro plan. The fetch call above runs entirely in the frontend, so it works on Base44's Free and Starter plans too.
Token only — never signed mode here
This request runs client-side in the shipped frontend bundle, so use the plain endpoint URL with its token. Never enable signed mode for a browser-side integration — the HMAC secret would ship inside your app's JavaScript, visible to anyone.
Spam protection is already wired in
The hidden _hp field is a honeypot — humans never see it, bots fill it in, and PostTo silently discards those submissions. Server-side baseline filtering (heuristics and optional AI classification) runs on every submission after that, so you don't need a CAPTCHA to start.
Frequently asked questions
- Can I just tell Base44 to add this instead of editing code myself?
- Yes — paste the prompt above into Base44's chat with your endpoint URL swapped in. Base44 treats it like any other feature request and rewires the existing submit handler.
- Do I still need the database entity Base44 created for submissions?
- No, but you can keep it. Ask Base44 to remove it if PostTo's dashboard is enough, or leave it in place if you also want a copy inside your own app's database.
- Does this need the Pro plan or backend functions?
- No — that's the point. The fetch call is plain frontend code, so it works on Base44's Free plan, with no backend function and no Gmail/Resend integration to configure.
- Will this survive Base44's GitHub sync or a redeploy?
- Yes — it's a plain fetch call inside your component code (available from the Builder plan up for GitHub export), so it persists through redeploys and further edits the same as any other code Base44 writes.
- What does it cost?
- The free plan includes 50 submissions per month with the full dashboard — no credit card required. Paid plans start at $9/month.
Add a working form to your Base44 app today
Create an endpoint, paste the prompt, and see your first submission in the dashboard — all on the free plan.
Try PostTo free