Scheduling and contact forms, behind one clean API.

Give every user a public booking page and an embeddable contact form, backed by typed ConnectRPC, a generated SDK, signed webhooks, and a dashboard you don't have to build.

Zero friction for the Free tier — no credit or debit card required. Keep your plastic in your wallet.

halomail.app/book/grace-hopper

Intro Call · 30 min

Pick a time

Inbox

live

POST /SubmitMessage · 200 OK

Built on the tools you already run

PostgreSQL
Redis
Google Calendar
Google Meet
Resend
ConnectRPC
Docker
OpenTelemetry
PostgreSQL
Redis
Google Calendar
Google Meet
Resend
ConnectRPC
Docker
OpenTelemetry

Everything a booking link needs, and nothing it doesn't

Two products sharing one identity layer, one API, and one deployable binary.

Scheduling that respects timezones

Weekly availability rules, date overrides, Google Calendar sync, and auto-generated Google Meet links. Slots are computed server-side so two people never book the same minute.

Weekly rules

Mon – Fri09:00 – 17:00
SaturdayUnavailable

Thu · 6 bookings

Next bookings

Intro CallTue 09:00
Design ReviewWed 14:30
PairingThu 11:00

Spam-proof by default

Honeypot fields, per-IP rate limiting, and a spam score on every submission.

free-crypto@pump.io
0.99
marc@studio.dev
0.05
winner@lottery.biz
0.97

Scoring live submissions…

Typed end to end

Protobuf definitions generate both the Go server and the TypeScript SDK, so a renamed field breaks the build instead of production.

const halo = new HaloMail({
  apiUrl: process.env.API_URL,
});

await halo.contact.submitMessage({
  formSlug:    "portfolio",
  senderName:  "Jane Visitor",
  senderEmail: "jane@example.com",
  data:        { message: "Let's talk." },
});

Emails that don't look templated

Five built-in themes plus custom HTML, with live preview before you send.

One dashboard for meetings and messages.

Every booking, every form submission, every API key and webhook delivery in a single place, with an audit log that records who changed what.

  • Read, search, and mark submissions without leaving the app
  • Rotate scoped API keys and replay failed webhooks
  • Per-form target addresses and redirect URLs
Open the dashboard

This week

Bookings

34

Messages

128

Show rate

92%

MonTueWedThuFriSatSun
This weekLast week

Embed forms anywhere with an access key.

Just like Web3Forms, generate a unique access key for your website. When users submit the form, data is stored and email notifications are instantly routed to you.

See the embed guide

Live on your site in three steps

No SDK required for the basics: a slug, two lines of HTML, and you're receiving.

1

Create a form or event type

From the dashboard or one API call. You get a slug and a public booking handle.

halomail.app/book/you

2

Paste two lines into your site

A script tag and a data-halomail attribute on the form you already designed.

<form data-halomail="portfolio">

3

Messages and bookings land

Stored, forwarded to your inbox, and pushed to your endpoints as signed webhooks.

POST /SubmitMessage · 200 OK

Two lines of HTML, or the raw API

The widget is progressive enhancement over a form you already have. Prefer to own the request? It's plain JSON over POST.

index.html · drop-in widget
<script src="https://api.halomail.app/widget.js" defer></script>

<form data-halomail="portfolio">
  <input name="name" required>
  <input name="email" type="email" required>
  <textarea name="message" required></textarea>
  <input name="_hl_hp" tabindex="-1" style="display:none">
  <button type="submit">Send</button>
</form>
terminal · book a meeting
curl https://api.halomail.app/halomail.scheduling.v1.BookingService/CreateBooking \
  -H 'Content-Type: application/json' \
  -d '{
    "eventTypeId":  "evt_01a01b8f",
    "inviteeName":  "Grace Hopper",
    "inviteeEmail": "grace@example.com",
    "start":        "2026-06-15T09:00:00Z"
  }'
Signed webhooks
Scoped API keys
Resend or SMTP
Fast and reliable

Everything you need, nothing you don't

One typed API powers the dashboard, the SDK, and your own integrations.

Scheduling

A cal.com-style booking experience for every user.

  • Availability rules with per-date overrides
  • Google Calendar sync & auto-generated Google Meet links
  • Reschedule and cancel links built in

Contact forms

Web3Forms-style access keys for your website.

  • Spam scoring plus rate limiting
  • Stored, searchable submissions
  • Instant email forwarding to your inbox

Email designer

Notification emails that match your brand.

  • Five built-in themes, custom HTML too
  • Template variables, safely substituted
  • Live preview before you send

Developer surface

Everything is an API before it's a screen.

  • Scoped keys and signed webhooks
  • Generated TypeScript SDK
  • Audit logs on sensitive actions

99.9%

uptime SLA

Global

edge network

100%

secure

24/7

support

Have a question? We've got answers.

Confused or curious? The docs cover the whole surface, from the first embed to using the raw API.

Read the docs

A platform that gives every user a public booking page and an embeddable contact form, behind one typed API.

Create an account, make a form or event type, then paste a script tag into your site. The integration guide walks through both, with copy-paste snippets for plain HTML and React.

Yes. Verify a domain with your email provider, then point EMAIL_FROM at an address on it. Without a verified domain, delivery is limited to your own account address.

No. One price covers your whole team, however many people that is.

Cancel whenever; billing stops at the end of the period.

Ship scheduling and contact in an afternoon.

Run the whole platform seamlessly.