Deliverability Overview
Monitor sender reputation, delivery rates, and DNS health across all your domains
MailLand tracks your sender reputation through a composite score, delivery trends, provider-level breakdowns, and DNS health monitoring. Use the deliverability API to surface these metrics in your own dashboards or trigger alerts when reputation declines.
Sender Score
Get a 0–100 reputation score broken into four weighted components:
GET https://api.mail.land/v1/deliverability/scoreAuthenticate with Authorization: Bearer <token> or X-API-Key: <api key>.
curl https://api.mail.land/v1/deliverability/score \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."{
"totalScore": 87,
"label": "Good",
"hasSufficientData": true,
"totalSentLast30Days": 142500,
"dnsScore": {
"name": "DNS Authentication",
"score": 25,
"maxScore": 25,
"detail": "2/2 domains fully authenticated"
},
"bounceScore": {
"name": "Bounce Rate",
"score": 20,
"maxScore": 25,
"detail": "Bounce rate: 1.80%"
},
"complaintScore": {
"name": "Complaint Rate",
"score": 25,
"maxScore": 25,
"detail": "Complaint rate: 0.020%"
},
"engagementScore": {
"name": "Engagement",
"score": 25,
"maxScore": 25,
"detail": "Open rate: 32.0%"
},
"calculatedAt": "2026-02-17T12:00:00Z"
}Each component contributes up to 25 points. Below 100 sends in the last 30 days, hasSufficientData is false. totalScore is still calculated but is not meaningful at that volume: with zero sends, the bounce and complaint components each score full marks (25), so a brand-new account can show up to 75 before it has sent anything.
Score History
Track how your score changes over time:
GET https://api.mail.land/v1/deliverability/score/history?days=30curl "https://api.mail.land/v1/deliverability/score/history?days=30" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."| Parameter | Type | Default | Description |
|---|---|---|---|
days | int | 30 | History window (7–90) |
[
{
"date": "2026-02-17",
"totalScore": 87,
"label": "Good",
"dnsScore": 25,
"bounceScore": 22,
"complaintScore": 25,
"engagementScore": 15,
"bounceRate": 0.8,
"complaintRate": 0.02,
"openRate": 32.0,
"deliveryRate": 98.5,
"totalSent": 4750,
"hasSufficientData": true
}
]Deliverability Overview Stats
Get aggregate delivery metrics for a period:
GET https://api.mail.land/v1/deliverability/overview?days=30curl "https://api.mail.land/v1/deliverability/overview?days=30" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."| Parameter | Type | Default | Description |
|---|---|---|---|
days | int | 30 | Period window (normalizes to 7, 30, or 90) |
{
"totalSent": 142500,
"totalDelivered": 140325,
"totalBounced": 1125,
"totalComplained": 28,
"totalOpened": 44878,
"totalClicked": 5843,
"totalUnsubscribed": 312,
"deliveryRate": 98.47,
"bounceRate": 0.79,
"complaintRate": 0.02,
"openRate": 31.49,
"clickRate": 4.1,
"unsubscribeRate": 0.22
}Daily Trends
Get per-day delivery metrics to visualize trends:
GET https://api.mail.land/v1/deliverability/trends?days=30curl "https://api.mail.land/v1/deliverability/trends?days=30" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."[
{
"date": "2026-02-17T00:00:00Z",
"sent": 4750,
"delivered": 4680,
"bounced": 38,
"complained": 1,
"opened": 1498,
"deliveryRate": 98.53,
"bounceRate": 0.8,
"complaintRate": 0.02,
"openRate": 31.53
}
]Provider Breakdown
See deliverability metrics grouped by recipient mailbox provider (Gmail, Yahoo, Outlook, etc.):
GET https://api.mail.land/v1/deliverability/providers?days=30&limit=10curl "https://api.mail.land/v1/deliverability/providers?days=30&limit=10" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."| Parameter | Type | Default | Description |
|---|---|---|---|
days | int | 30 | Period window (normalizes to 7, 30, or 90) |
limit | int | 10 | Max providers to return (1–50) |
[
{
"domain": "gmail.com",
"sent": 58200,
"delivered": 57800,
"bounced": 210,
"opened": 19500,
"clicked": 2540,
"complained": 8,
"deliveryRate": 99.31,
"openRate": 33.51,
"bounceRate": 0.36
},
{
"domain": "outlook.com",
"sent": 31400,
"delivered": 30800,
"bounced": 350,
"opened": 8650,
"clicked": 1120,
"complained": 12,
"deliveryRate": 98.09,
"openRate": 27.55,
"bounceRate": 1.11
}
]Bounce Breakdown
See bounces categorized by type and reason:
GET https://api.mail.land/v1/deliverability/bounce-breakdown?days=30curl "https://api.mail.land/v1/deliverability/bounce-breakdown?days=30" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."{
"hardBounces": 450,
"softBounces": 625,
"blockedBounces": 40,
"unknownBounces": 10,
"totalBounces": 1125,
"topReasons": [
{ "reason": "InvalidRecipient", "count": 380 },
{ "reason": "QuotaIssues", "count": 290 },
{ "reason": "SpamBlock", "count": 40 },
{ "reason": "BadDomain", "count": 70 },
{ "reason": "PolicyRelated", "count": 95 },
{ "reason": "TransientFailure", "count": 55 }
]
}topReasons uses the MTA's own classification names (see Bounces for the full vocabulary), not the keyword-derived snake_case categories used by the transactional bounce endpoints.
See Bounces for full bounce category details and handling behavior.
DNS Status
Check DNS authentication status across all your domains:
GET https://api.mail.land/v1/deliverability/dns-statuscurl https://api.mail.land/v1/deliverability/dns-status \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."[
{
"domainId": "k3v9x2m8q1w7z4",
"domainName": "yourdomain.com",
"spfStatus": "Valid",
"dkimStatus": "Valid",
"dmarcStatus": "Valid",
"lastCheckedAt": "2026-02-17T10:00:00Z",
"isFullyAuthenticated": true
},
{
"domainId": "n7p2q9x4m8w1z3",
"domainName": "notifications.yourdomain.com",
"spfStatus": "Valid",
"dkimStatus": "Valid",
"dmarcStatus": "Invalid",
"lastCheckedAt": "2026-02-17T10:00:00Z",
"isFullyAuthenticated": false
}
]A domain is isFullyAuthenticated only when SPF, DKIM, and DMARC are all Valid.
| Status | Description |
|---|---|
Pending | Record not yet checked |
Valid | Record correctly configured |
Invalid | Record missing or misconfigured |
Recommendations
Get actionable recommendations to improve your sender reputation:
GET https://api.mail.land/v1/deliverability/recommendationscurl https://api.mail.land/v1/deliverability/recommendations \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."[
{
"id": "dns_dmarc_missing_notifications.yourdomain.com",
"category": "dns",
"severity": "critical",
"titleKey": "deliverability.recommendations.dns.dmarcMissing.title",
"descriptionKey": "deliverability.recommendations.dns.dmarcMissing.description",
"actionUrl": "/domains",
"impact": 8,
"parameters": {
"domain": "notifications.yourdomain.com"
}
},
{
"id": "bounce_high",
"category": "bounce",
"severity": "warning",
"titleKey": "deliverability.recommendations.bounce.high.title",
"descriptionKey": "deliverability.recommendations.bounce.high.description",
"actionUrl": "/deliverability",
"impact": 15
}
]| Field | Type | Description |
|---|---|---|
id | string | Recommendation identifier. Not a stable enum: DNS ids embed the domain name (for example dns_dmarc_missing_{domain}), so the same issue on two domains produces two different ids. |
category | string | dns, bounce, complaint, engagement, warmup, or volume |
severity | string | critical, warning, or info |
impact | int | Potential score improvement (0–100) if fixed |
actionUrl | string | Frontend route to address the issue: one of /domains, /deliverability, /suppression-lists, /analytics, or /dashboard. These are hints for your own UI, not a guaranteed dashboard URL: in the Mail.Land dashboard the matching pages are Domains, Deliverability, Suppressions and Analytics in the sidebar |
parameters | object | Values for i18n interpolation. Only present on DNS recommendations ({"domain": "..."}); bounce, complaint, engagement, warmup and volume recommendations have no parameters. |
At most 10 recommendations are returned, sorted by severity (critical first) then by impact descending.
Caching
All deliverability endpoints are cached server-side to reduce query load on ClickHouse:
| Endpoint | Cache TTL |
|---|---|
/score | 15 minutes |
/overview | 5 minutes |
/trends | 3 minutes |
/providers | 5 minutes |
/bounce-breakdown | 5 minutes |
/score/history | Not cached |
/dns-status | Not cached (real-time) |
/recommendations | 10 minutes |
The days parameter normalizes to 7, 30, or 90: values ≤ 7 round to 7, 8–30 round to 30, and anything over 30 rounds to 90. A value like 14 rounds to 30, not 7.
Next Steps
- Bounces: understand bounce types and automatic handling
- Suppressions: manage suppression lists
- IP Warmup: warm up new sending domains
- DNS Setup: configure SPF, DKIM, and DMARC