A secondary inbox built for developers.
Receive email through an API for tests, automations, and AI agents. Read messages, retrieve email OTPs, and route matching mail to webhooks. Use the hosted app or self-host on your own infrastructure.
No credit card required.
- Multiple ways to access
- API ยท SDK ยท MCP
- Last code, one call
- /otp
- Auto categories
- 10+
- Open source license
- AGPL v3
Use cases
What developers build with it
One programmable secondary inbox โ receive, filter, extract, automate โ for tests, automations, and the mail you'd rather keep out of your primary inbox.
- CI & testing
Test transactional email in CI
Use a separate address for each test, trigger the email, and retry within a deadline. Check message content, retrieve email OTPs, or follow verification and magic links as part of your application tests.
Learn more - Parse & route
Turn alert emails into webhooks
Built for legacy services that only speak email. Programmable Inbox categorizes every alert automatically, lets you search the subject and body for the keywords that matter, and routes matches straight to a webhook โ turning notification-only email into automation your systems can act on.
Learn more - Secondary inbox
A clean inbox for signups & noise
Point your signups and subscriptions at one address and keep the promo, notification, and update noise out of your primary inbox. Everything is categorized and queryable over the API โ self-host it for full control, or run it on our managed cloud.
- Agent builders
An MCP server for your agents
Connect an HTTP-capable MCP client with a scoped API key. Authorized tools can create inboxes, read messages, and retrieve email OTPs. Read links from message content; the documented MCP tools do not send replies.
Learn more
What you get
The inbox layer, done once and done right
Stop rebuilding the same receive โ parse โ store โ automate plumbing on top of a forwarder. Programmable Inbox is a real, persistent secondary inbox you address in code.
Addresses in seconds
Create receiving addresses via API or UI on an approved domain. Use separate inboxes for tests, environments, or signups within your plan limits. Custom domains and self-hosting require mail infrastructure setup.
Email codes extracted
Retrieve extracted email OTPs through the /otp endpoint. For sign-in and verification URLs, read the message body and parse the link your application expects; test extraction against your own templates.
Categorized automatically
Inbound mail is classified out of the box across 10+ categories โ OTP, promotional, time-sensitive, updates, notifications, and more โ so you can filter and route on meaning, not brittle keyword matches.
Automate on arrival
Set rules that run on every message: when the subject or body matches, contains a code, or lands in a category โ forward it to an address or fire a webhook. No server to stand up.
API-first, always
List, search, and read received messages over the documented REST API. Use /otp to retrieve a recent extracted email code; retry within a deadline if delivery is still pending.
Own your data
Open source under AGPL v3 and self-hostable. Choose where you store messages and manage your own infrastructure. Review your deployment and external integrations to control where email data is sent.
REST API
Every message, one API call away
Read received messages through the documented REST API and retrieve email codes with /otp. Links can be parsed from message text. These snippets and sample responses illustrate the API shape; adapt them to your SDK version, approved domain, unique test addresses, and scoped key. They are not executed integration tests.
import { Configuration, EmailInboxesApi } from '@programmableinbox/sdk'
const config = new Configuration({ accessToken: process.env.PI_API_KEY })
const api = new EmailInboxesApi(config)
const inbox = await api.createEmailInbox({
createEmailInboxRequest: {
email: '[email protected]',
name: 'CI signup',
},
})
console.log(inbox.data)
// {
// id: 'inbox-1',
// organizationId: 'org-1',
// email: '[email protected]',
// name: 'CI signup',
// createdAt: '2026-07-13T12:00:00Z',
// updatedAt: '2026-07-13T12:00:00Z'
// }const otp = await api.getEmailInboxOtp({
id: inbox.data.id,
withinMinutes: 10, // freshness window; not a wait-for-delivery timeout
})
console.log(otp.data.otp)
// Illustrative response: "418902". Retry within a deadline if mail is still in transit.const page = await api.getEmailInboxMessages({
id: inbox.data.id,
limit: 25,
q: 'verification code',
tags: ['signup'],
})
console.log(page.data.messages[0])
// {
// id: 'msg-1',
// subject: 'Your verification code',
// from: '[email protected]',
// categories: ['otp'],
// extractedOtp: '418902',
// createdAt: '2026-07-13T12:00:42Z'
// }// A rule that runs on every received message
{
"name": "Route receipts to accounting",
"when": {
"category": "notifications",
"from_contains": "receipts@"
},
"then": [
{ "forward": "[email protected]" },
{ "webhook": "https://your-app.com/ingest" }
]
}
// Conditions: contains ยท has code ยท category
// Actions: forward ยท fire webhookCompare programmable email inboxes
Choose the inbox that fits your workflow. Here is how Programmable Inbox compares with testing and agent-email alternatives.
| Capability | Programmable Inbox | MailSlurp | Mailosaur | AgentMail |
|---|---|---|---|---|
| Inbound email API | Yes | Yes | Yes | Yes |
| Email code extraction | Yes | Yes | Yes | No |
| Extracted email links | Yes | Yes | Yes | No |
| Official SDKs | YesTS, Python, Go, C# | Yes10 languages | Yes7 languages | YesTS, Python |
| Official MCP access | Yes | Yes | No | Yes |
| Incoming-email automation | Yes | Yes | YesPaid plans | NoWebhooks only |
| Deployment | Hosted or self-hosted | Hosted | Hosted | Hosted or AWS BYOC |
Based on official documentation reviewed , not live-account tests.
Open source forever
Your infra, your rules
We will always maintain a fully open source, self-hosted version of Programmable Inbox for the community. No lock-in. No paywalled features. No surprises.
Self-hosted
Deploy on your own infrastructure โ Postgres, Next.js, and an inbound email pipe is all you need. Your OTPs, receipts, and PII never leave your box. Full source on GitHub under an AGPL v3 license โ fork it, extend it, own it.
- AGPL v3 licensed, forever
- No feature gating
- Bring your own domain
- Community support on GitHub
Managed SaaS
Skip the ops. We'll handle uptime, backups, and scaling while you focus on your product. Every feature from the open source version, plus managed deliverability and priority support.
- Zero-ops deployment
- Managed uptime & backups
- Priority support
- Generous free tier, paid plan starts at $5/month
Community first. The self-hosted version will always be free, feature-complete, and actively maintained. That's a promise, not a pricing tier.
Spin up your secondary inbox
Create a programmable address, grab your first OTP, and wire up a rule in minutes. Self-host for free, or sign up for managed cloud โ either way, you own your data.
No credit card required ยท AGPL v3 license ยท Community supported