Skip to content

Add a Contact Form

This is the shortest path from a website page to a working html.contact inbox.

Create a form in html.contact. The form workspace shows a public form action URL like:

https://html.contact/f/hc_pub_REPLACE

Replace hc_pub_REPLACE with the public form key from your form. Public form keys start with hc_pub_ and are safe to put in frontend HTML.

Email is optional. You can leave notifications off and use the html.contact dashboard as the submission inbox. This does not require a recipient.

To receive email notifications, choose the inbox that should receive submissions and enable notification email. If html.contact asks you to verify that recipient, finish verification before expecting delivery.

Recipients, CC/BCC, and sender behavior are configured inside html.contact. Do not add hidden public form fields to route email.

Notifications arrive from forms@notify.html.contact with the visible name {Form name} via html.contact. See Email Notifications & Safe Sender before creating mailbox rules.

Add the exact hostname that serves the page with the form.

Examples:

  • example.com
  • www.example.com
  • contact.example.com

If both example.com and www.example.com serve the form, add both.

Use your public endpoint as the form action and submit with method="POST". Every input you want to receive needs a name attribute.

<form action="https://html.contact/f/hc_pub_REPLACE" method="POST">
<label for="name">Name</label>
<input id="name" name="name" autocomplete="name" required>
<label for="email">Email</label>
<input id="email" name="email" type="email" autocomplete="email" required>
<label for="message">Message</label>
<textarea id="message" name="message" required></textarea>
<button type="submit">Send</button>
</form>

Publish the page and submit the form from the hostname you added. You should see the accepted submission in html.contact. If notification email is enabled with a verified recipient, you should also receive the email notification.

Testing from a different site can return domain_not_allowed. Testing with a raw server or curl request can return origin_missing unless direct submissions are enabled for that form.