For developers

Send the mail your app owes people.

A welcome after signup. A password reset. A receipt. An invite. Pigeon is the API that sends them.

Free to start. 3,500 emails a month. No card.

From your app Node
import { Pigeon } from "pigeon";

const pigeon = new Pigeon(process.env.PIGEON_API_KEY, {
  baseUrl: "https://pigeonfs.com"
});

const email = await pigeon.emails.send({
  from: "Ada <ada@yourdomain.com>",
  to: ["person@example.com"],
  subject: "Reset your password",
  html: "<p>Choose a new password.</p>"
});

The same call exists in Python, Go, Java, Rust, Elixir, and over SMTP when the app already speaks it.

Use cases

The mail a product sends on its own.

Someone signs up, forgets a password, pays, or gets invited. Your app already knows that moment. Pigeon delivers the message.

Welcome

The note that goes out when an account is created.

Password reset

A one-time link when someone cannot sign in.

Receipt

Proof of payment, from the same domain as the product.

Invite

A teammate, a guest, or a file that finished exporting.

How it works

Three steps, then the product sends it.

01

Add your domain

Pigeon lists the DNS records. Mail goes out once the domain status says Verified.

02

Put a key in the app

A sending key calls the API or SMTP. A full-access key can manage domains too.

03

Send from the product

Welcome, reset, receipt, invite. The dashboard keeps a log of each call.

Mail goes out from the domain you verify.

Pigeon is the part the app talks to: the domain, the key, the log, and the monthly plan.

  • The From address is a domain you verify.
  • One API or SMTP login for the product.
  • A log and a plan, so a bounce or a limit shows up before a user writes in.

Send the first one from your own domain.

Create an account, add the DNS records, and send a welcome before you invite anyone else.

Get started