# Pigeon

> Pigeon is a transactional email API on Amazon SES. Verify your domain, send with an API key or SMTP, and start free with 3,000 emails a month.

The public site is https://pigeonfs.com. A domain can send only after its status says Verified. Free includes 3,000 emails a month, 100 a day, and 3 domains. Pro 50,000 is $20 and Pro 100,000 is $35. Pro has no daily cap, 10 domains, and overage of $0.90 per 1,000 emails. Volumes above Pro are arranged on the account by hand.

Send with POST https://pigeonfs.com/api/emails and Authorization: Bearer pg_.... A sending key can send mail. Domain routes need a full-access key. Each address in to, cc, and bcc counts as one email. More than 10 requests in a second returns 429. Production SMTP is host pigeonfs.com, port 587, AUTH PLAIN or LOGIN. The From address has to be on a verified domain.

Pro is paid through Stripe Checkout. Pigeon is not in the Stripe Projects catalog, so stripe projects add pigeon/email does not create an account or an API key.

## Docs

- [Introduction](https://pigeonfs.com/llms/docs/introduction): Pigeon is a transactional email API on Amazon SES, with the dashboard, keys, and quotas in your own account.
- [Send an email](https://pigeonfs.com/llms/docs/send-email): POST /api/emails with a Bearer key. Each recipient in to, cc, and bcc counts as one email.
- [SMTP](https://pigeonfs.com/llms/docs/smtp): Use Pigeon as the SMTP server for Rails, Django, WordPress, or any app that already speaks SMTP. Credentials are unique per account.
- [Domains and SES](https://pigeonfs.com/llms/docs/domains): Sending is only allowed from a verified domain you added in the dashboard.
- [Verify a domain](https://pigeonfs.com/llms/docs/verify-domain): Pigeon accepts mail only from a domain you added and verified. The table on the domain card is the list to publish.
- [DNS records](https://pigeonfs.com/llms/docs/dns-records): These are the records on a domain card. Replace example.com with the hostname you added.
- [Quotas](https://pigeonfs.com/llms/docs/quotas): The same shape as a typical developer email plan.
- [Supabase guide](https://pigeonfs.com/llms/docs/supabase): Send with Pigeon from a Supabase Edge Function. The service role stays on Supabase. The Pigeon key stays in function secrets.
- [Webhooks](https://pigeonfs.com/llms/docs/webhooks): Your endpoint receives type and data. Signatures use HMAC SHA-256.
- [API reference](https://pigeonfs.com/llms/docs/api): HTTPS JSON at /api. Send Authorization: Bearer plus a pg_ key. Paste a key below to fill the curl examples, then copy a request.
- [SDK libraries](https://pigeonfs.com/llms/docs/sdks): Official clients for the same HTTP API. Every client uses a Bearer API key (`pg_`) and PIGEON_BASE_URL (default https://pigeonfs.com).
- [Node SDK](https://pigeonfs.com/llms/docs/node): A copy also lives in sdks/pigeon in the Pigeon app repo.
- [Python SDK](https://pigeonfs.com/llms/docs/python): Shape follows resend-python: pigeon.Emails.send({...}).
- [Go SDK](https://pigeonfs.com/llms/docs/go): Layout follows resend-go: client.Emails.Send.
- [Java SDK](https://pigeonfs.com/llms/docs/java): Shape follows resend-java: new Pigeon(apiKey).emails().send(params).
- [Rust SDK](https://pigeonfs.com/llms/docs/rust): Crate layout follows resend-rust. Set PIGEON_BASE_URL when the API is not local.
- [CLI](https://pigeonfs.com/llms/docs/cli): Auth: --api-key, then PIGEON_API_KEY, then ~/.config/pigeon/credentials.json.
- [Phoenix SDK](https://pigeonfs.com/llms/docs/phoenix): HTTP client is Pigeon.Client.send_email/2 if you are not using Swoosh.
- [MCP server](https://pigeonfs.com/llms/docs/mcp): Lets Cursor and Claude Code send mail with your Pigeon API key.
- [React Email](https://pigeonfs.com/llms/docs/react-email): Render React to HTML, then send with pigeon-node.

## Notes

- [Add Pigeon to a v0 project](https://pigeonfs.com/llms/blog/vercel): An install opens a Pigeon account for the Vercel email, writes a sending key into the project, and can publish the domain's SES records through Vercel DNS.
- [How Pigeon uses Stripe](https://pigeonfs.com/llms/blog/stripe-projects): Pro plans are charged in Stripe Checkout. The Stripe Projects catalog does not include Pigeon, so the CLI does not create an account or write an API key.
- [Set up domains and mail from a prompt](https://pigeonfs.com/llms/blog/mcp): The Pigeon MCP server lets Cursor and Claude Code call the API. A full-access key can add and verify domains. A sending key can send mail and add contacts.
- [Send from a Supabase project](https://pigeonfs.com/llms/blog/supabase): A Supabase Edge Function calls the Pigeon API when a row is inserted. The service role stays in Supabase. The Pigeon key stays in function secrets.
- [Pay for Pigeon with Stripe](https://pigeonfs.com/llms/blog/stripe): Pro plans are charged through Stripe Checkout. The free plan stays available, and a paid plan raises the monthly email cap on the same account.
- [Pigeon is in early testing](https://pigeonfs.com/llms/blog/early-access): You can register, verify a domain, and send real mail while we are still watching DNS, quotas, and Amazon SES. This is the path we expect the first teams to walk.

## Optional

- [Pricing](https://pigeonfs.com/pricing): Free is 3,000 emails a month. Pro 50,000 is $20 and Pro 100,000 is $35. Mail still sends through your Amazon SES account.
- [Product site](https://pigeonfs.com/): The public homepage.
- [Full text](https://pigeonfs.com/llms-full.txt): Every guide and note in one markdown file.
- [Sitemap](https://pigeonfs.com/sitemap.xml): The public URLs search engines crawl.
