Loading...

Free Contact Form and Verification Service

Send messages safely with one-time verification keys. 100% free, fast, and easy to integrate — no signup required.
Create Access Key
HTML Form — How It Works
<form action="https://vericontact.xyz/api/contact-api/" method="POST" >
  <input type="hidden" id="access_key" name="access_key" value="YOUR_ACCESS_KEY" >
                                
  <label for="name">Full Name</label>
  <input type="text" id="name" name="name" required>

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

  <label for="subject">Subject</label>
  <select id="subject" name="subject" required>
    <option value="" disabled selected>Select a subject</option>
    <option value="general">General Inquiry</option>
    <option value="support">Technical Support</option>
    <option value="billing">Billing Question</option>
    <option value="feedback">Feedback</option>
  </select>

  <label for="message">Message</label>
  <textarea id="message" name="message" rows="3" required></textarea>

  <button type="submit">Submit Form</button>
</form>
Domain-Restricted Keys
Stylish Email Templates
Built-in Success & Error Pages

Works Seamlessly with Any Technology

HTML5
CSS3
JavaScript
Bootstrap
React
Angular
Vue.js
Node.js
Python
PHP
WordPress
GitHub

Why People Choose Us

No Backend Code Required

Skip the hassle of setting up servers or PHP. Your forms just work — simple and code-free.

No Login or Dashboard

Forget about managing accounts. Authenticate once with your access key — no login required.

No Databases Needed

Form submissions are sent directly to your inbox. Nothing is stored on our servers.

GDPR & Privacy First

We only use your email for authentication. Your data is never shared or sold to third parties.

Custom Redirects

Choose any URL for success or error redirects. No forced lock-ins, full flexibility.

Minimal Email Branding

Clean, professional emails with minimal branding. Pro users unlock full customization.

About VeriContact

About VeriContact

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.

  • Fast & reliable multi-channel messaging
  • Real-time delivery analytics & reporting
  • Built for institutes, companies & teams of all sizes
  • Secure, scalable, and easy to use
Create Access Key
Get started in 3 easy steps

How It Works

Free forever — no signup required.

1
Create Access Key

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.

Please enter a valid email address.
Key created and sent to your email.
2
Create Contact Form

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;
            
3
Add Key in Form

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" >
            
VeriContact Owner

Meet the Creator

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.

— Umair Ashraf

Founder of VeriContact

Frequently Asked Questions

Everything you need to know about using VeriContact.

No signup is required. VeriContact is completely free and ready to use instantly. Just generate your access key and add it to your form.

Each email address can generate up to 10 active access keys. You can delete old keys anytime if you need to create new ones.

Yes! You can either use VeriContact’s built-in pages or provide your own redirect URLs for custom success and error handling.

Absolutely. VeriContact is 100% free for all users — with no hidden costs, subscriptions, or limits on form submissions.