Email
inbound

turn any
email address
into an
endpoint

receive emails as structured JSON with full type safety. set up catch-all domains, forward to teams, or block unwanted senders.no more email parsing headaches.

Catch-All Domains

Capture any email to your domain. Block unwanted addresses with one click

*@yourapp.com → webhook
+ granular blocking

Email → Webhook

Every email becomes a typed JSON payload delivered to your endpoint instantly

POST /your-webhook
{ email: ParsedEmailData }

Smart Routing

Forward to individual emails or distribution groups with full headers

support@ → team@yourapp.com
+ attachments preserved

see it in action

To:support@yourapp.com
Subject:

Hi there,

I'm having trouble setting up the webhook endpoint. Could you help?

Thanks!

Smart Routing Engine

Analyzing recipient: support@yourapp.com
Found endpoint configuration: Webhook
Spam/virus checks: Passed
Routing to: https://api.yourapp.com/webhook

Your Webhook Receives

POST https://api.yourapp.com/webhook
{
  "event": "email.received",
  "email": {
    "id": "em_1o2jaosd8daks",
    "messageId": "0000014a-deb8-4e72-9e83-123456789012",
    "from": "customer@gmail.com",
    "to": ["support@yourapp.com"],
    "subject": "Help with API integration",
    "receivedAt": "2025-01-15T12:00:00.000Z",
    "parsedData": {
      "textBody": "Hi there,\n\nI'm having trouble...",
      "htmlBody": "<p>Hi there,</p><p>I'm having trouble...</p>",
      "from": {
        "addresses": [{"address": "customer@gmail.com", "name": "John Doe"}]
      },
      "attachments": [],
      "headers": { "message-id": "<abc123@gmail.com>" }
    }
  }
}
✓ Fully typed with TypeScript SDK

typesafe from day one

our typescript sdk gives you full type safety for webhook payloads, api responses, and email data structures.

Install & Configure

$ npm install exon-inbound
import { createInboundClient } from 'exon-inbound'

const inbound = createInboundClient({
  apiKey: process.env.INBOUND_API_KEY
})

Handle Webhooks

import { InboundEmailPayload } from 'exon-inbound'

app.post('/webhook', (req, res) => {
  const email: InboundEmailPayload = req.body

  // Full type safety!
  console.log(email.parsedData.textBody)
  console.log(email.parsedData.attachments)

  res.status(200).send('OK')
})

Manage Everything

// Add domains
await inbound.addDomain('yourapp.com')

// Create email addresses
await inbound.createEmail({
  email: 'support@yourapp.com',
  webhook: webhookId
})

// Enable catch-all
await inbound.enableCatchAll(domainId, webhookId)

perfect for

AI Agents

Connect AI agents directly to email addresses for automated responses

Support Systems

Route support emails to your ticketing system with full context

Email Proxies

Forward emails to teams while maintaining privacy and control

Simple Pricing

Start free, scale as you grow. No hidden fees, no email parsing headaches.