AI agents can sometimes retry requests due to network errors, timeouts, or logic bugs. Without safeguards, this can cause the same email to be sent multiple times. Here is how to prevent that.
AgentMail supports idempotency for all create operations via the clientId parameter. When you provide a clientId, AgentMail checks if a resource with that ID already exists. If it does, it returns the existing resource instead of creating a duplicate.
This works for creating inboxes, pods, webhooks, and drafts:
The clientId parameter is for resource creation, not for messages.send. To prevent duplicate email sends, you need to handle this in your application logic. Here are common patterns:
Use labels to mark messages that your agent has already processed, so it does not reply twice:
For high-stakes emails, use drafts instead of sending directly. Create a draft, verify it has not been sent already, then send:
Since drafts support clientId, creating the same draft multiple times is safe. And once a draft is sent, it is deleted, so calling drafts.send again will fail rather than send a duplicate.
clientId on all create operations (inboxes, pods, webhooks, drafts) to make them safe to retryclientId from your business logic (e.g., order-${orderId}-confirmation), not random UUIDsFor more details, see the Idempotent Requests guide.