Compare
Email API alternatives, compared on guardrails
8 email APIs compared with AgentiSend on what an agent-held key needs: Resend, Amazon SES, AgentMail, Postmark, SendGrid, Mailgun, Loops, Plunk. Every row is…
| Provider | A spending limit per key | What a refusal tells you | A retry never sends twice | How long the log keeps a message |
|---|---|---|---|---|
| AgentiSend | Every key is created with a send budget. The send path refuses with agent_budget_exceeded when it is spent, and a key cannot raise its own. The plan inclusion is a second ceiling (plan_limit_reached). | Every refused request carries code, message, fix (the call that repairs it), docs_url and retryable. | Idempotency-Key is accepted on every endpoint that changes something and remembered for 7 days. | 7 days on Free, 30 on Starter, 90 on Pro, 180 on Scale. It is part of the plan and there is no add-on to buy. |
| Resend | The pricing page lists API key permissions on every plan. It does not list a send budget per key. | The rate-limit page names daily_quota_exceeded and monthly_quota_exceeded. A fix field naming the next call is not on that page. | Idempotency-Key is supported on POST /emails and POST /emails/batch, kept for 24 hours. Keys can be up to 256 characters. | The Free plan lists 30-day data retention. Enterprise says flexible data retention. The other plan bullets on the pricing page do not state a retention period. |
| Amazon SES | A per-credential send budget is not on the pricing page or the account-sending page. | PutAccountSendingAttributes documents BadRequestException and TooManyRequestsException. A fix field naming the next call is not on that page. | The SendEmail reference does not document an idempotency key. A retried call is not described as returning the first result. | The pricing page does not include a message log. It prices storage you configure yourself, including S3 and CloudWatch. |
| AgentMail | Plan caps are on the pricing page (100 a day on Free, 1,000 a day on Developer). A per-key send budget is not. | A fix field is not documented on the pricing page or the idempotency guide. | Idempotency-Key on send expires 24 hours after the send completes. Create calls can also take a client_id, and a repeat returns the first resource. | Storage is sold in gigabytes: 3 GB on Free and 10 GB on Developer. The pricing page links a message-expiry document and does not state a retention period in days. |
| Postmark | A per-key send budget is not on the pricing page. API permission controls are listed as a feature. | A fix field naming the next call is not on the idempotency article or the webhooks overview. | Postmark does not support an idempotency key. The support article says to detect duplicates yourself. | 45 days of activity on every listed plan. Pro and Platform can buy custom retention from 7 to 365 days. |
| SendGrid | The pricing page lists API key permissions. It does not list a send budget per key. | A fix field naming the next call is not on the pricing page or the mail-send reference. | The mail-send reference does not document an idempotency key. | Searchable email activity is 3 days on the 60-day column and on Essentials, and 7 days on Pro and Premier. More history is an add-on. |
| Mailgun | A per-key send budget is not on the pricing page. Free and Basic list 2 API keys. | A fix field naming the next call is not on the pricing page or the webhook-signing page. | An idempotency key is not documented on the pricing page or the webhook-signing page. | Log retention is 1 day on Free and Basic, 5 days on Foundation, and 30 days on Scale. Scale lists message retention up to 7 days. |
| Loops | A per-key send budget is not on the pricing page or the MCP page. | The send-transactional page documents 409 for a reused key, 404 when the template is missing, and 400 for other errors. A fix field naming the next call is not on that page. | Idempotency-Key is optional, up to 100 characters. The send-transactional page says a key reused within 24 hours returns 409 Conflict. | A retention period is not stated on the pricing page or the MCP page. |
| Plunk | Caps are per project and per category, not per key. Crossing one returns 402 with error code BILLING_LIMIT_EXCEEDED. A per-key send budget is not on the billing page. | The billing page names 402 and BILLING_LIMIT_EXCEEDED when a cap is hit. A fix field naming the next call is not on that page. | An idempotency key is not documented on the billing page or the MCP guide. | A retention period is not stated on the pricing page, the billing page or the MCP guide. |
Each cell is a row from the full comparison, where its source and capture date are listed.
Every comparison
- AgentiSend vs Resend — 11 sourced rows, and the migration guide.
- AgentiSend vs Amazon SES — 9 sourced rows, and the migration guide.
- AgentiSend vs AgentMail — 9 sourced rows.
- AgentiSend vs Postmark — 9 sourced rows, and the migration guide.
- AgentiSend vs SendGrid — 9 sourced rows, and the migration guide.
- AgentiSend vs Mailgun — 10 sourced rows, and the migration guide.
- AgentiSend vs Loops — 8 sourced rows.
- AgentiSend vs Plunk — 9 sourced rows.