---
title: "Email to Webhook — Inbound Email API | WebhookRelay"
meta:
  "og:description": "Turn inbound email into webhooks. Get a unique address and every email is parsed to JSON — sender, subject, text, HTML, headers, attachments — and POSTed to your endpoint. A free, developer-friendly inbound email API and email parser, no SMTP server required."
  "og:title": "Email to Webhook — Inbound Email API"
  description: "Turn inbound email into webhooks. Get a unique address and every email is parsed to JSON — sender, subject, text, HTML, headers, attachments — and POSTed to your endpoint. A free, developer-friendly inbound email API and email parser, no SMTP server required."
---

# **Email to Webhook**

Turn **inbound email into webhooks**. Get a unique address, and every message you receive is parsed to clean JSON — sender, subject, text, HTML, headers and attachments — and delivered to your endpoint. A developer-friendly **inbound email API** and **email parser**, with no SMTP server to run.

[Create an email input](https://my.webhookrelay.com) [Read the docs](https://webhookrelay.com/email-to-webhook/docs/email/)

## **See exactly what your endpoint receives**

Pick a sample email — Webhook Relay parses it into the JSON on the right and POSTs it to your endpoint. These are real payload fields, not a mock-up.

**Incoming email**

From Jon Snow <jon@example.com>

To 5519fb0d-997a-46cd-b102-ac990b4c38fa@in.webhookrelay-mail.com

Subject Can't log in to my account

Hi, I've been unable to log in since this morning — it just says 'invalid credentials'. Thanks, Jon

POST to your endpoint · application/jsonX-Webhookrelay-Source: email

```
{
  "from": "jon@example.com",
  "from_name": "Jon Snow",
  "recipient": "5519fb0d-997a-46cd-b102-ac990b4c38fa@in.webhookrelay-mail.com",
  "to": [
    "5519fb0d-997a-46cd-b102-ac990b4c38fa@in.webhookrelay-mail.com"
  ],
  "subject": "Can't log in to my account",
  "date": "Fri, 26 Jun 2026 11:27:41 +0400",
  "message_id": "C70BE3E7-4B20-4240-A1B8-2D19E0032FFD@gmail.com",
  "text": "Hi,\r\n\r\nI've been unable to log in since this morning — it just says 'invalid credentials'.\r\n\r\nThanks,\r\nJon",
  "headers": {
    "From": "Jon Snow <jon@example.com>",
    "Subject": "Can't log in to my account",
    "Return-Path": "<jon@example.com>"
  },
  "spf": "pass",
  "dkim": "pass",
  "dmarc": "pass"
}
```

### **Fields you can use**

- `from` / `from_name` — sender address & name
- `subject` — the email subject
- `text` / `html` — body parts
- `to` / `cc` / `recipient` — recipients
- `attachments[]` — name, content_type, size, base64 content
- `spf` / `dkim` / `dmarc` — auth results
- `headers` — every raw header

Full [payload reference →](https://webhookrelay.com/email-to-webhook/docs/email/payload/)

### **Reshape it in flight (optional)**

Attach a transform function to turn the email into your own schema — or a Slack/Discord/Teams message:

```
const e = JSON.parse(r.body);
r.setBody(JSON.stringify({
  text: \`📧 ${e.subject} — ${e.from}\`
}));
```

Build it visually with the [Slack/Discord/Teams formatter →](https://webhookrelay.com/email-to-webhook/webhook-message-formatter/)

## **How email-to-webhook works**

1. Add an **email input** to a bucket in the dashboard. You get a unique address like `<uuid>@in.webhookrelay-mail.com`.
2. Point mail at it — from a person, an app, a payment provider, an alert, a report.
3. Webhook Relay parses each message (sender, subject, text, HTML, headers, attachments, SPF/DKIM/DMARC) and **POSTs it as JSON** to your endpoint.
4. Optionally [transform](https://webhookrelay.com/email-to-webhook/docs/webhooks/functions/) it first, [restrict senders](https://webhookrelay.com/email-to-webhook/docs/email/filtering-and-policy/), fan out to several destinations, or deliver to a server [behind a firewall](https://webhookrelay.com/email-to-webhook/webhooks/).

## **What you can build**

[Email → Slack](https://webhookrelay.com/email-to-webhook/docs/tutorials/email/slack/) [Email → Discord](https://webhookrelay.com/email-to-webhook/docs/tutorials/email/discord/) [Email → Teams](https://webhookrelay.com/email-to-webhook/docs/tutorials/email/microsoft-teams/) [Email → Google Sheets](https://webhookrelay.com/email-to-webhook/docs/tutorials/email/google-sheets/) [Email → Airtable](https://webhookrelay.com/email-to-webhook/docs/tutorials/email/airtable/) [Email → Notion](https://webhookrelay.com/email-to-webhook/docs/tutorials/email/notion/) [Email → your API](https://webhookrelay.com/email-to-webhook/docs/tutorials/email/api/) [Email → database](https://webhookrelay.com/email-to-webhook/docs/tutorials/email/database/)

## **A simpler inbound-email API**

If you've used SendGrid Inbound Parse, Mailgun Routes, CloudMailin or the Zapier Email Parser, this will feel familiar — but Webhook Relay gives you the parsed JSON _and_ the full delivery pipeline in one place: transforms, fan-out to multiple destinations, delivery to localhost or private servers, retries and an audit log. No DNS or MX setup to receive on the shared `in.webhookrelay-mail.com` domain, and a free tier to start.

## **Frequently asked questions**

<details>

<summary>**How do I turn an email into a webhook?**</summary>



Add an email input to a bucket in the [Webhook Relay dashboard](https://my.webhookrelay.com). You get a unique address like `<uuid>@in.webhookrelay-mail.com`; every message sent to it is parsed to JSON and POSTed to your endpoint. See the [docs](https://webhookrelay.com/email-to-webhook/docs/email).

</details>

<details>

<summary>**What does the JSON payload look like?**</summary>



A flat object with `from`, `from_name`, `subject`, `text`, `html`, `to`, `cc`, `headers`, `spf`/`dkim`/`dmarc` and an `attachments` array (base64 content). See the [payload reference](https://webhookrelay.com/email-to-webhook/docs/email/payload).

</details>

<details>

<summary>**Do I need to set up DNS or an MX record?**</summary>



No. You receive on the shared `in.webhookrelay-mail.com` domain at the address you are given — nothing to configure. Just send mail to it.

</details>

<details>

<summary>**Can I restrict who can email the address?**</summary>



Yes. Add an allowlist of `From` addresses to an email input and everything else is silently dropped. You also get per-input rate limiting and SPF/DKIM/DMARC results to check. See [filtering & policy](https://webhookrelay.com/email-to-webhook/docs/email/filtering-and-policy).

</details>

<details>

<summary>**How are attachments delivered?**</summary>



Inlined into the JSON as base64 in `attachments[].content`, with `name`, `content_type` and `size`. You can drop attachments or cap their total size per message.

</details>

<details>

<summary>**Is it free?**</summary>



Webhook Relay has a free tier you can start on. Receiving email works the same as any other input, so it uses your normal bucket quota.

</details>

## **Related**

[Email docs](https://webhookrelay.com/email-to-webhook/docs/email/) [Slack/Discord/Teams Formatter](https://webhookrelay.com/email-to-webhook/webhook-message-formatter/) [Webhook Tester](https://webhookrelay.com/email-to-webhook/webhook-bin/) [Webhook forwarding](https://webhookrelay.com/email-to-webhook/webhooks/) [All guides](https://webhookrelay.com/email-to-webhook/guides/)