Inbound email,
built for developers
Receive, store, thread, and reply to email. Structured JSON, named inboxes, Reply API, and AI agent support. No MIME parsing.
Free plan available. No credit card required.
Other providers hand you a MIME payload and walk away
Legacy inbound email webhooks POST a raw payload to your server: the full MIME message, base64-encoded attachments, all headers. You are then responsible for parsing it, decoding attachments, persisting messages, grouping threads, handling duplicates, and scaling your receiver. Behind the checkbox is a basic HTTP forwarder. Nuntly handles all of that for you.
From inbox to API in five steps
Email arrives
An email is sent to your domain. MX records route it to Nuntly.
Parse and route
Nuntly parses the MIME payload and routes it to the matching inbox.
Store as JSON
The message is stored as structured JSON with sender, subject, body, and attachments.
Thread and notify
The message is grouped into a thread. A webhook event fires in real time.
Read and reply
Your app reads the message via REST and sends a reply with the Reply API.
Read threads and reply via REST
No MIME parsing, no base64 decoding, no infrastructure. Access messages as structured JSON and reply with a single API call.
import { Nuntly } from '@nuntly/sdk';const nuntly = new Nuntly({ apiKey: process.env.NUNTLY_API_KEY });// List recent threads in an inboxconst { data: threads } = await nuntly.inbound.threads.list({domainId: 'dom_xxx',inboxId: 'inb_xxx',labels: ['unread'],});// Fetch message content (no MIME parsing required)const content = await nuntly.inbound.messages.content('msg_xxx');console.log(content.text); // Plain text bodyconsole.log(content.html); // HTML body// Reply to a message, linked to its threadawait nuntly.inbound.messages.reply('msg_xxx', {subject: 'Re: Your support request',html: '<p>Thanks for reaching out. Here is how we can help...</p>',});
Everything in the inbound stack
Nuntly handles every layer of inbound email, from MX routing to AI agent assignment.
Named inboxes
Create named inboxes to route incoming emails. Route support@, billing@, and hello@ to separate handlers. Default catch-all for unmatched addresses.
Automatic thread grouping
Nuntly groups emails by conversation thread automatically using In-Reply-To, References headers, and subject matching. Full conversation history via REST.
Structured message storage
Messages are stored as structured JSON with 30-day retention. Access sender, subject, headers, body, and attachments without parsing raw MIME payloads.
Reply API
Send replies programmatically, linked to the original thread. Supports reply-all and forward. Requires the domain to have sending enabled.
Real-time webhook events
Receive message.received events the moment an email arrives. Also available: message.security.flagged, message.agent.triggered, and message.sent.
AI agent support
Assign AI agents to inboxes. Agents receive structured payloads and have access to per-inbox and per-thread memory for context-aware responses.
Multi-tenant namespaces
Group inboxes into namespaces with an externalId to map your internal customer or tenant IDs. Provision per-customer receiving pipelines from a single domain.
Frequently asked questions
Common questions about this topic.
Explore more
Ship emails,
Not infrastructure
Trusted by Echo Analytics, DiliTrust, Ogury, and 100+ developer teams.
Free plan available. No credit card required.