IP Warmup
Gradually increase sending volume on new domains to establish sender reputation
When you start sending from a new domain, mailbox providers have no history to judge your reputation. Sending too much too fast triggers spam filters. IP warmup gradually increases your daily sending volume over multiple stages, giving providers time to build trust in your domain.
How Warmup Works
MailLand tracks warmup status per domain. Each domain progresses through stages with increasing daily limits:
Start sending
When you verify a new domain and send your first email, MailLand automatically begins the warmup process for that domain.
Daily limits enforced
Each stage has a maximum number of emails allowed per day. MailLand enforces this limit: emails exceeding the daily cap are rejected with a 429 WARMUP_LIMIT_EXCEEDED error.
Advance through stages
After meeting the minimum days at each stage, the domain advances to the next stage with a higher daily limit. Advancement happens automatically.
Warmup completes
Once all stages are completed, the domain has no daily limit and can send at your plan's full capacity.
Warmup Stages
The exact stage configuration depends on your plan. A typical warmup schedule:
Free plan (30 days total):
| Stage | Daily Limit | Minimum Days |
|---|---|---|
| 1 | 50 | 5 |
| 2 | 100 | 5 |
| 3 | 250 | 5 |
| 4 | 500 | 5 |
| 5 | 750 | 5 |
| 6 | 1,000 | 5 |
Pro plan (14 days total):
| Stage | Daily Limit | Minimum Days |
|---|---|---|
| 1 | 500 | 2 |
| 2 | 1,000 | 2 |
| 3 | 2,500 | 2 |
| 4 | 5,000 | 2 |
| 5 | 10,000 | 3 |
| 6 | 25,000 | 3 |
Max plans skip warmup entirely: there is no daily limit from the first send.
After the final stage, the warmup is complete and no daily limit applies.
Stage limits and minimum days are plan defaults (seeded, editable by the Owner). Contact support if you need a custom schedule.
Warmup Status
Check the warmup status for all your domains through the subscription policy summary endpoint:
GET https://api.mail.land/v1/account/subscription/policy-summaryAuthenticate with Authorization: Bearer <token> or X-API-Key: <api key>.
curl https://api.mail.land/v1/account/subscription/policy-summary \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."The response includes a domainWarmup array with each domain's current warmup state:
{
"domainWarmup": [
{
"domainId": "k3v9x2m8q1w7z4",
"domainName": "yourdomain.com",
"currentStage": 3,
"totalStages": 6,
"todaySentCount": 450,
"dailyLimit": 1000,
"progressPercent": 50,
"completed": false,
"bypassed": false,
"authoritativeUsedToday": 460,
"authoritativeRemainingToday": 540
},
{
"domainId": "n7p2q9x4m8w1z3",
"domainName": "notifications.yourdomain.com",
"currentStage": 6,
"totalStages": 6,
"todaySentCount": 12500,
"dailyLimit": 50000,
"progressPercent": 100,
"completed": true,
"bypassed": false,
"authoritativeUsedToday": 12520,
"authoritativeRemainingToday": 37480
}
]
}| Field | Type | Description |
|---|---|---|
domainId | string | Domain's public id |
domainName | string | Domain name |
currentStage | int | Current warmup stage (1-based) |
totalStages | int | Total number of stages in the plan |
todaySentCount | int | A lower bound on today's consumption, kept for compatibility and the progress bar. It advances only after a batch commits, so it can lag behind what has actually been admitted. Not what the gate enforces on, and not a fallback for the authoritative fields below. |
dailyLimit | int | Maximum emails allowed today |
progressPercent | int | Overall warmup progress (0–100) |
completed | bool | Whether warmup is finished |
bypassed | bool | Whether warmup was manually bypassed |
authoritativeUsedToday | long or null | Today's consumption as the admission gate's per-domain Redis counter records it. null when warm-up does not apply to this domain or the counter could not be established. |
authoritativeRemainingToday | long or null | The governing stage's daily limit less authoritativeUsedToday, floored at zero: the same arithmetic the admission gate applies. null on the same terms as authoritativeUsedToday. |
Daily Counter Reset
Both the lower-bound todaySentCount and the authoritative Redis counters reset at midnight UTC each day. Use authoritativeRemainingToday for what is left today; todaySentCount can lag behind in-flight sends.
Exceeding the Limit
When you attempt to send beyond the daily warmup limit, the API returns:
{
"code": "WARMUP_LIMIT_EXCEEDED",
"message": "Warmup limit reached for stage 3. Daily limit: 1000",
"details": {
"stage": 3,
"dailyLimit": 1000,
"remainingToday": 0
}
}Separately, 429 WARMUP_POOL_BUDGET_EXCEEDED and 429 WARMUP_POOL_EMPTY mean the platform's own daily sending capacity is limiting new sends; they are not caused by your usage and need no action. The message says sending is paused and resumes automatically, and Retry-After points at the next 00:00 UTC. The SMTP relay returns a transient 421 with the same text for the same refusal. See Platform Capacity.
Warmup limits are enforced across all sending methods. API and SMTP sends over the limit are refused immediately (not queued). Campaigns and automations are not rejected the same way: they are paced/deferred to the next day instead.
Bypassing Warmup
If you are migrating from another email provider and already have established reputation on the IP/domain, you can request warmup bypass through support. When bypassed, the bypassed field is true and no daily limits apply.
Best Practices
- Start with transactional emails: password resets and order confirmations have high engagement rates, which builds reputation faster.
- Send to your most engaged recipients first: during early stages, prioritize recipients who regularly open and click your emails.
- Don't send to old or unverified lists: high bounce rates during warmup severely damage reputation. Validate your lists before importing.
- Monitor deliverability daily: check your sender score and bounce rates during warmup. A spike in bounces or complaints may require pausing and cleaning your list.
- Maintain consistent volume: sudden spikes trigger spam filters. Spread your sending evenly throughout the day.
- Authenticate your domain first: ensure SPF, DKIM, and DMARC are all properly configured before starting warmup.
Warmup Timeline
A warmup from 0 to full volume takes 14–30 days depending on your plan: 14 days on Pro, 30 days on Free. Max plans skip warmup entirely.
| Plan | Approximate Daily Volume Over Time | Focus |
|---|---|---|
| Free (~30 days) | 50 → 100 → 250 → 500 → 750 → 1,000 | Transactional emails, highest-engagement recipients first |
| Pro (~14 days) | 500 → 1,000 → 2,500 → 5,000 → 10,000 → 25,000 | Expand to broader transactional + engaged marketing |
| Max | No warmup | Full volume, all message types from day one |
Next Steps
- Deliverability Overview: monitor sender reputation during warmup
- DNS Setup: configure authentication before warmup
- Email Validation: validate lists before sending
- Bounces: monitor bounces closely during warmup