One API for every notification channel.

Posthorn is a self-hosted, multi-tenant notification platform. Email, SMS, and WhatsApp today — mobile push, Telegram, and WeChat next — behind one API, one template system, and one delivery timeline you can trust.

How it works

  1. 1

    Create your workspace

    Sign up, get an API key, and verify a sender identity. Sandbox mode works immediately — real delivery unlocks as each channel is verified.

  2. 2

    Configure your channels

    Prove your email domain with three DNS records. Pick an SMS sender. Connect your WhatsApp business profile. Posthorn owns every provider account and integration; you complete only the identity steps that are legally yours.

  3. 3

    Send with one POST

    One request shape for every channel. Templates are versioned and rendered per channel; the response is a message you can follow to its final state.

import { Posthorn } from "@posthorn/sdk";

const posthorn = new Posthorn({ apiKey: process.env.POSTHORN_API_KEY! });

const msg = await posthorn.messages.send({
  template: "team-invitation",
  channel: "email",
  to: { email: "alice@example.com" },
  idempotency_key: `invite-${invitationId}`,
  variables: { inviter_name: "Priya", team_name: "Orion", accept_url: acceptUrl },
});

The whole integration. msg.id polls the delivery timeline; webhooks accelerate it. Full API reference in the docs.

Built for teams that read their logs

An honest timeline for every message
Accepted, queued, each delivery attempt, provider errors, bounce or delivery — one ordered event log per message. When something cannot be sent, it parks with the reason. Posthorn never fakes success.
Idempotency the database enforces
Every send carries a mandatory idempotency key, unique per workspace at the database level. Retrying a timed-out request returns the original message; a changed payload is refused. Duplicate sends are impossible, not unlikely.
Compliance tracking built in
India DLT template registration and WhatsApp template approval are first-class state, visible per template. An unregistered template parks the message with the reason — it never silently drops.
Self-hosted
Runs in your own cloud account. Your provider relationships, your data, your logs — no third party between you and your recipients.

Channels

  • Email

    Domain verification via DKIM, bounce and complaint handling, suppression, unsubscribe.

  • SMS

    Sender IDs and provisioned numbers, with India DLT registration tracked per template.

  • WhatsApp

    Business templates submitted and tracked through Meta approval, per-client senders.

Coming next: mobile push, Telegram, and WeChat — same API, same templates, same timeline.