Inbound Email Parse
Every bin has an email address: <bin-id>@i.webhooks.xyz. Mail sent there becomes a request on the bin, as JSON. It is shown, searched, filtered, forwarded to your destinations and sent through your actions like any other request. Free on every plan, anonymous bins included.
Use it
- Open a bin. The address is under the capture URL; press Copy address.
- Send a mail to it, or put the address where a system sends notifications: a payment provider's receipt, a monitoring alert, a form service, a scanner, your own app's sign-up mail.
- The request appears in a few seconds with method
POSTand path/email.
Add a tag to route or filter: <bin-id>+orders@i.webhooks.xyz arrives on path /email/orders with header x-mail-tag: orders. A filter such as path starts /email/orders or header:x-mail-from contains stripe.com works in actions and mock-response rules.
What the request looks like
POST /email/orders
content-type: application/json
x-mail-from: Acme Billing <billing@acme.example>
x-mail-to: k7f3abc+orders@i.webhooks.xyz
x-mail-subject: Receipt for order ORD-20481
x-mail-tag: orders
x-spf: PASS x-dkim: PASS x-dmarc: PASS
x-spam: PASS x-virus: PASS
x-ses-message-id: 0102019a…
{
"from": "Acme Billing <billing@acme.example>",
"to": "k7f3abc+orders@i.webhooks.xyz",
"cc": null, "reply_to": null,
"subject": "Receipt for order ORD-20481",
"date": "Thu, 09 Oct 2026 10:12:03 +0000",
"message_id": "<…@acme.example>",
"recipient": "k7f3abc+orders@i.webhooks.xyz", "tag": "orders",
"text": "Thanks for your order…",
"html": "<html>…</html>",
"headers": [["Received", "…"], ["From", "…"], …],
"attachments": [{"name": "receipt.pdf", "type": "application/pdf", "size": 48213, "content_b64": "JVBERi0…"}],
"spf": "PASS", "dkim": "PASS", "dmarc": "PASS", "spam": "PASS", "virus": "PASS",
"size": 61520
}
Search finds it with provider:email, the subject is the event (event:receipt matches), and the usual free text. The AI assistant explains it like any request. Export, replay and the API return the same JSON.
Limits and checks
- Mail up to 40 MB is accepted. The stored request is at most 2 MB: above that, attachment content is left out (name, type and size stay;
attachments_omittedsays so), then the HTML part. - SPF, DKIM, DMARC, spam and virus verdicts come from the receiving service (
PASS,FAIL,GRAY,PROCESSING_FAILED). A mail that fails the virus scan is still stored; look atx-virusbefore you open attachments. - Same rate limit as HTTP capture: 100 mails an hour per sender address per bin. Each mail counts once; a mail sent to two bins of yours is stored on both.
- Retention follows the bin: 24 hours on an anonymous bin, your plan's days on an account bin. The raw mail is deleted from the receiving service as soon as the request is stored.
- The addresses receive only. Replies to them are not read by anyone; put a real
Reply-Toon mail you send to a bin if a person might answer.
Send email from a bin
The other direction needs no SMTP of yours. On your account page add the connection Email from webhooks.xyz with a recipient, then on the bin add an action: a trigger (a request arrives, a delivery fails, silence), an optional filter, a subject and a message with {{ field }} placeholders. The mail comes from <bin-id>@o.webhooks.xyz, DKIM-signed, with a footer that names your account.
- Signed-in accounts only. Anonymous bins show the option disabled.
- Recipients: your account address at once; any other address after one confirmation mail from us (the person agrees to receive mail from your account).
- 100 mails a day per account (all limits: Quotas). Replies are not read; set a Reply-To on the connection if a person might answer.
- An address that bounces or reports a mail as spam is blocked for good: you get an inbox note, the recipient shows "blocked", and the action refuses it. Mail that bounces twice costs the sender domain its reputation, so there is no retry.
- Example: a browser uploads a file to S3 with a presigned POST. The bucket event reaches the bin. An action with filter
body.Records.0.eventName starts ObjectCreatedemails the client "Your file {{ body.Records.0.s3.object.key }} arrived", a second action posts to Slack.
Ideas
- Test your own transactional mail: sign up to your app with a bin address and read the exact message your users get, headers and all.
- Mail to Slack or Teams: an action on trigger request with filter
path starts /emailand a template that uses{{ header:x-mail-subject }}. - Mail to your API: a destination forwards the JSON to your endpoint with retries; parse
textor an attachment there. - Legacy systems that only send mail (scanners, alarms, old ERPs) join your webhook pipeline without a connector.