Webhooks Overview
Get real-time notifications for email events.
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.
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 will have the following structure.
Field Descriptions
event_type(string): The name of the event. Currently, this will always bemessage.received.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.
