Overview
title: “Webhooks Overview” subtitle: “Get real-time notifications for email events.” slug: overview description: “Learn how to use Webhooks to build responsive, event-driven email agents with AgentMail.”
Webhooks are the best way to get real-time information about what’s happening with your emails. Instead of constantly asking the AgentMail API if there’s a new email (a process called polling), you can register a URL, and we will send you a POST request with the details as soon as an event happens.
This event-driven approach is more efficient and allows you to build fast, responsive agents that can react instantly to incoming messages.
Why Use Webhooks?
- Real-Time Speed: Build conversational agents that can reply to incoming emails in seconds.
- Efficiency: Eliminates the need for constant polling, which saves you computational resources and simplifies your application logic.
Available Events
AgentMail supports seven webhook event types. When creating a webhook, you can subscribe to specific events or receive all of them. See Webhook Events for full payload details.
Message events:
message.received— New email received and processed in one of your inboxesmessage.sent— Message successfully sent from your inboxmessage.delivered— Delivery confirmed by the recipient’s mail servermessage.bounced— Message failed to deliver and bounced backmessage.complained— Recipient marked your message as spammessage.rejected— Message rejected before send (validation or policy)
Domain events:
domain.verified— Custom domain successfully verified
The Webhook Workflow
The process is straightforward:
1. Create a Webhook Endpoint
This is a public URL on your server that can accept POST requests. For local development, a tool like ngrok is perfect for creating a secure, public URL that tunnels to your local machine. Your endpoint should immediately return a 200 OK response to acknowledge receipt and process the payload in the background to avoid timeouts.
Payload Structure
When AgentMail sends a webhook, the payload includes event_type and event_id, plus event-specific data. The example below shows a message.received payload; other events use different top-level objects (send, delivery, bounce, etc.). See Webhook Events for each event’s payload shape.
Field Descriptions
event_type(string): The event type (e.g.message.received,message.sent,message.delivered). Payload structure varies by event—see Webhook Events for each event’s shape.event_id(string): A unique identifier for this specific event delivery.message(object): A dictionary containing the full details of the received email message.from_(array<string>): The sender’s email address. Note the trailing underscore to avoid conflict with the Python keyword.organization_id(string): The ID of your organization.inbox_id(string): The ID of the inbox that received the message.thread_id(string): The ID of the conversation thread.message_id(string): The unique ID of this specific message.labels(array<string>): Labels associated with the message (e.g.,received,sent).subject(string): The subject line of the email.preview(string): A short plain-text preview of the email body.text(string): The full plain-text body of the email.html(string): The full HTML body of the email, if present.attachments(array<object>): A list of attachments, each with its ownattachment_id,filename,content_type,size, andinlinestatus.in_reply_to(string): Themessage_idof the email this message is a reply to, if applicable.
