Skip the hassle of setting up servers or PHP. Your forms just work — simple and code-free.
Forget about managing accounts. Authenticate once with your access key — no login required.
Form submissions are sent directly to your inbox. Nothing is stored on our servers.
We only use your email for authentication. Your data is never shared or sold to third parties.
Choose any URL for success or error redirects. No forced lock-ins, full flexibility.
Clean, professional emails with minimal branding. Pro users unlock full customization.
VeriContact is a modern communication platform built to simplify how organizations connect with students, parents, employees, and communities. Designed with speed, reliability, and automation in mind, VeriContact helps you deliver the right message to the right audience—instantly.
Whether you are managing announcements, SMS, email campaigns, WhatsApp messages, or engagement analytics, VeriContact provides a powerful dashboard that ensures clarity, transparency, and efficiency in every interaction.
Free forever — no signup required.
Generate a free one-time access key linked to your email. You can create up to 10 keys and even restrict them by domain for extra security.
Build your contact form using your favorite web technology. VeriContact supports both JSON requests and simple form-POST submissions.
<form action="https://vericontact.xyz/api/contact-api/" method="POST">
<!-- Replace with your Access Key -->
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY_HERE">
<input type="text" name="name" placeholder="Your Name" required>
<input type="email" name="email" placeholder="you@example.com" required>
<input type="text" name="subject" placeholder="Enter Subject" required>
<textarea name="message" placeholder="Write your message..." required></textarea>
<button type="submit">Submit</button>
</form>
<form
id="veriContactForm"
action="https://vericontact.xyz/api/contact-api/"
method="POST"
>
<!-- Alert -->
<div
class="form-alert"
style="
display: none;
padding: 10px;
margin-bottom: 10px;
border-radius: 6px;
"
></div>
<!-- Replace with your Access Key -->
<input type="hidden" name="access_key" value="3BEAF1" />
<input
type="text"
name="name"
placeholder="Your Name"
required
/>
<input
type="email"
name="email"
placeholder="you@example.com"
required
/>
<input
type="text"
name="subject"
placeholder="Subject"
required
/>
<textarea
name="message"
placeholder="Write your message..."
rows="4"
required
></textarea>
<button type="submit">Submit</button>
</form>
<script>
document.addEventListener("DOMContentLoaded", () => {
const form =
document.getElementById("veriContactForm") ||
document.querySelector('form[action*="/api/contact-api/"]');
if (!form) return;
const alertBox = form.querySelector(".form-alert");
const submitBtn = form.querySelector('button[type="submit"]');
const originalText = submitBtn.textContent;
const showAlert = (msg, type = "success") => {
if (!alertBox) return;
alertBox.style.display = "block";
alertBox.textContent = msg;
alertBox.style.background =
type === "success" ? "#d1fae5" : "#fee2e2";
alertBox.style.color =
type === "success" ? "#065f46" : "#b91c1c";
alertBox.style.border = "1px solid #ccc";
setTimeout(() => {
alertBox.style.display = "none";
}, 5000);
};
const setLoading = (loading) => {
submitBtn.disabled = loading;
submitBtn.textContent = loading
? "Sending..."
: originalText;
};
form.addEventListener("submit", async (e) => {
e.preventDefault();
if (alertBox) alertBox.style.display = "none";
setLoading(true);
const json = JSON.stringify(
Object.fromEntries(new FormData(form))
);
try {
const res = await fetch(form.action, {
method: form.method,
body: json,
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
});
const data = await res.json().catch(() => ({}));
if (
res.ok &&
(data.success === true ||
data.success === undefined)
) {
showAlert(
data.message || "Message sent!",
"success"
);
form.reset();
} else {
showAlert(
data.message || "Something went wrong.",
"error"
);
}
} catch {
showAlert("Network error. Try again.", "error");
}
setLoading(false);
});
});
</script>
import React, { useState } from "react";
const VeriContactForm = () => {
const [loading, setLoading] = useState(false);
const [alert, setAlert] = useState({
visible: false,
message: "",
type: "success", // "success" | "error"
});
const showAlert = (message, type = "success") => {
setAlert({ visible: true, message, type });
// Auto hide after 5 seconds
setTimeout(() => {
setAlert((prev) => ({ ...prev, visible: false }));
}, 5000);
};
const handleSubmit = async (e) => {
e.preventDefault();
setLoading(true);
setAlert((prev) => ({ ...prev, visible: false }));
const form = e.currentTarget;
const formData = new FormData(form);
const json = JSON.stringify(Object.fromEntries(formData));
try {
const res = await fetch(form.action, {
method: form.method || "POST",
body: json,
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
});
const data = await res.json().catch(() => ({}));
if (res.ok && (data.success === true || data.success === undefined)) {
showAlert(data.message || "Message sent!", "success");
form.reset();
} else {
showAlert(data.message || "Something went wrong.", "error");
}
} catch (err) {
showAlert("Network error. Try again.", "error");
}
setLoading(false);
};
return (
<form
id="veriContactForm"
action="https://vericontact.xyz/api/contact-api/"
method="POST"
onSubmit={handleSubmit}
>
{/* Alert */}
<div
className="form-alert"
style={{
display: alert.visible ? "block" : "none",
padding: "10px",
marginBottom: "10px",
borderRadius: "6px",
backgroundColor:
alert.type === "success" ? "#d1fae5" : "#fee2e2",
color: alert.type === "success" ? "#065f46" : "#b91c1c",
border: "1px solid #ccc",
}}
>
{alert.message}
</div>
{/* Access key */}
<input type="hidden" name="access_key" value="3BEAF1" />
<input
type="text"
name="name"
placeholder="Your Name"
required
/>
<input
type="email"
name="email"
placeholder="you@example.com"
required
/>
<input
type="text"
name="subject"
placeholder="Subject"
required
/>
<textarea
name="message"
placeholder="Write your message..."
rows={4}
required
/>
<button type="submit" disabled={loading}>
{loading ? "Sending..." : "Submit"}
</button>
</form>
);
};
export default VeriContactForm;
Embed your access key in the form payload. This ensures that every submission is verified, secure, and delivered with built-in success or error handling.
<input type="hidden" name="key" value="YOUR_ACCESS_KEY_HERE" >
Hi, I’m Umair Ashraf, the creator of VeriContact. I built this project to make contact forms secure, simple, and free for everyone. With VeriContact, there’s no need for backend code, logins, or complex setups — just a straightforward way to manage messages with one-time verification keys.
Founder of VeriContact
Everything you need to know about using VeriContact.