For API request rate limits (requests per minute), see Rate Limits.
Plan-based sending limits
Every account has sending limits based on its billing plan, enforced at three levels:
| Plan | Hourly | Daily | Monthly |
|---|---|---|---|
| Free | 50 | 1,000 | 2,500 |
| Starter | 500 | 2,000 | 10,000 |
| Higher Limits | Upon request | Upon request | Upon request |
Higher Limits requires at least 25,000 emails sent and a reputation score of 80 or above. Contact us to discuss your requirements.
If you exceed any limit, further sends are rejected with an error until the next period begins (next hour, next day, or next month).
Account warmup
All new accounts go through a warmup period regardless of billing plan. This protects the platform from abuse and gives new senders time to establish good sending practices.
First 24 hours
New workspaces are limited to 10 emails in the first 24 hours.
Ongoing warmup
After the first 24 hours, sending limits are raised but remain capped:
- Hourly limit: the lower of your plan limit or 100
- Daily limit: the lower of your plan limit or 100
- Monthly limit: the lower of your plan limit or 1,000
Exiting warmup
The warmup period ends when both conditions are met:
- Your account has sent a total of 500 emails
- Your reputation score is 80 or above (healthy status)
Until both conditions are satisfied, the reduced warmup limits remain in effect. After warmup completes, your plan's standard limits apply.
Domain warmup
Newly verified domains go through a separate progressive warmup to build domain-level sender reputation and avoid triggering spam filters.
| Stage | Daily sending limit |
|---|---|
| Stage 1 | 50 emails |
| Stage 2 | 100 emails |
| Stage 3 | 200 emails |
Stages advance based on sending volume, not calendar days. Once you reach the cap for your current stage, the next stage unlocks automatically. After the warmup period, your plan's standard sending limits take effect.
Domain warmup and account warmup run independently. During the overlap period, the most restrictive limit applies.
Reputation monitoring
IvyMail continuously monitors your bounce rate and complaint rate. Your account is assigned a reputation status that determines whether and how you can send.
| Status | Condition | Effect |
|---|---|---|
| Healthy | Score of 80 or above | No restrictions |
| Degraded | Score between 50 and 79 | Warning alert in dashboard |
| At risk | Score below 50 | Warning alert in dashboard |
| Throttled | Bounce rate >= 5%, or complaint rate >= 0.08% | Sending limited to 10 emails per hour |
| Paused | Bounce rate >= 10%, or complaint rate >= 0.5% | All sending blocked |
Enforcement only applies after a minimum of 75 emails sent to ensure a meaningful sample size. Status changes trigger alerts visible in your dashboard.
Recommended targets
For optimal deliverability, aim for:
- Bounce rate below 2%
- Complaint rate below 0.05%
If your account is throttled or paused
- Review your suppression list and remove problematic recipients from your own systems
- Investigate the source of bounces or complaints (list hygiene, content issues, expired addresses)
- Take corrective action and wait for your rates to improve as older events age out
- If you believe the restriction is in error, contact support@ivymail.io
Suppression list
IvyMail maintains a global suppression list to prevent repeated delivery to invalid or complaining recipients. When an email is sent to a suppressed address, the send is blocked before reaching SES and logged with status: suppressed.
| Event | Suppression behaviour |
|---|---|
| Hard bounce (permanent failure) | Immediate suppression |
| Soft bounce (temporary failure) | Suppressed after 3 occurrences |
| Spam complaint | Immediate suppression |
In the dashboard, only suppression entries relevant to your workspace are shown. See Bounce & Complaint Handling for more details.
Content limits
All emails are subject to the following payload limits:
| Field | Maximum |
|---|---|
| HTML body | 512,000 characters |
| Text body | 512,000 characters |
| Subject line | 998 characters |
| From address / Reply-to | 320 characters |
Requests exceeding these limits are rejected at the API level.
Resource limits
Each plan has limits on the number of resources you can create:
| Resource | Free | Starter |
|---|---|---|
| Domains | 1 | 1 |
| API keys | 1 | 3 |
| Webhook endpoints | 0 | 1 |
| Team members | 1 | 3 |
Higher Limits plans have custom resource allocations agreed upon request.
Pre-send check sequence
When you call POST /v1/send, IvyMail runs the following checks in order before any email reaches SES:
- Reputation check - paused status blocks all sends
- Domain ownership - the sending domain must belong to your workspace
- Domain enabled - suspended domains are rejected
- Rate limiting - hourly, daily, and monthly limits per plan
- Domain warmup - stage-based daily limits for new domains
- Payment status - past-due or blocked billing halts sending
- Suppression list - suppressed recipients are logged and skipped
If all recipients are suppressed, the send is rejected entirely.
Payment enforcement
Sending is tied to your billing status:
- First payment failure - your account is marked as past due. Brief payment processing delays are handled gracefully.
- Repeated failures - your account is blocked from sending until the outstanding balance is resolved.
Sending resumes automatically once payment issues are cleared.
For AI agents & LLMs
Key limits to be aware of when integrating with IvyMail:
- New accounts: limited to 10 emails in the first 24 hours, then capped at 100/hour and 100/day until 500 emails sent with a healthy reputation score
- New domains: start at 50 emails/day (Stage 1), increasing to 100 then 200 as you send more volume
- Plan limits: Free accounts can send 50/hour, 1,000/day, 2,500/month. Starter accounts can send 500/hour, 2,000/day, 10,000/month
- Reputation: if bounce rate exceeds 5% or complaint rate exceeds 0.08%, sending is throttled to 10/hour. At 10% bounce rate or 0.5% complaint rate, sending is paused entirely
- Content: subject max 998 chars, HTML/text body max 512,000 chars, from/reply-to max 320 chars
If a send is rejected, check the error message for which limit was hit. Do not retry rate-limited or warmup-limited sends immediately; wait for the next period.