Skip to main content

Tools

Free public tools for email header analysis and domain health checks. These endpoints do not require authentication and are rate-limited per IP.

Header Analyzer

POST /v1/tools/header-analyzer

Parse and analyze raw email headers to trace the delivery path, extract authentication results, identify the sending infrastructure, and detect anomalies. Each hop IP is enriched with ASN, country, and threat data from LimesIndex.

Authentication

None required (public endpoint).

Request Body

{
"headers": "Received: from mail-wr1-f41.google.com (209.85.221.41) by mx.example.com with ESMTPS; Sun, 13 Apr 2026 10:00:00 +0000\r\nAuthentication-Results: mx.example.com; spf=pass smtp.mailfrom=user@gmail.com\r\nDKIM-Signature: v=1; a=rsa-sha256; d=gmail.com; s=20230601; ..."
}
FieldTypeRequiredDescription
headersstringYesRaw email headers to analyze

Response (200)

{
"data": {
"received_chain": [
{
"from_host": "mail-wr1-f41.google.com",
"from_ip": "209.85.221.41",
"by_host": "mx.example.com",
"protocol": "ESMTPS",
"timestamp": "2026-04-13T10:00:00Z",
"delay": "0s",
"asn": 15169,
"asn_name": "Google LLC",
"country": "US",
"cloud_provider": "Google Cloud",
"connection_type": "datacenter",
"threat_score": 0
}
],
"authentication": {
"spf_result": "pass",
"dkim_result": "present",
"dkim_selector": "20230601",
"dkim_domain": "gmail.com"
},
"infrastructure": {
"origin_ip": "209.85.221.41",
"from_domain": "gmail.com",
"x_mailer": "",
"user_agent": ""
},
"anomalies": []
},
"meta": {
"processing_time_ms": 25
}
}

Response Fields

Received Chain (per hop)

FieldTypeDescription
from_hoststringSending host name
from_ipstringSending IP address
by_hoststringReceiving host name
protocolstringTransfer protocol (SMTP, ESMTP, ESMTPS)
timestampstringRFC 3339 timestamp from header
delaystringTime delay since previous hop
asnintegerASN of the sending IP (enriched)
asn_namestringASN organization name (enriched)
countrystringCountry code of the sending IP (enriched)
cloud_providerstringCloud provider if detected (enriched)
connection_typestringConnection type (enriched)
threat_scoreintegerThreat score of the sending IP (enriched)

Authentication

FieldTypeDescription
spf_resultstringSPF result (pass, fail, softfail, none)
dkim_resultstringDKIM status (present, absent)
dkim_selectorstringDKIM selector used
dkim_domainstringDKIM signing domain
dmarc_resultstringDMARC result if found

Infrastructure

FieldTypeDescription
origin_ipstringOriginating IP (first hop with an IP)
from_domainstringSending domain
x_mailerstringX-Mailer header value
user_agentstringUser-Agent header value

Anomalies

Array of detected anomalies (strings). Examples:

  • "Negative time delay between hops -- possible forged Received header"

Domain Check

GET /v1/tools/domain-check/{domain}

Quick public domain health check. Combines MX, SPF, DKIM, and DMARC validation into a single grade. Similar to the /v1/email/domain/{domain}/dns endpoint but designed as a free tool without requiring authentication.

Authentication

None required (public endpoint).

Path Parameters

ParameterTypeRequiredDescription
domainstringYesDomain name to check

Response (200)

{
"data": {
"domain": "example.com",
"grade": "B",
"score": 80,
"mx": {
"records": ["mx1.example.com", "mx2.example.com"],
"is_valid": true
},
"spf": {
"raw": "v=spf1 include:_spf.google.com ~all",
"mechanisms": ["include:_spf.google.com", "~all"],
"all_qualifier": "~",
"is_valid": true,
"is_permissive": false,
"dns_lookup_count": 3,
"exceeds_lookups": false
},
"dkim": [
{
"selector": "google",
"found": true,
"key_type": "rsa",
"key_bits": 2048,
"is_valid": true
}
],
"dmarc": {
"raw": "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com",
"policy": "quarantine",
"subdomain_policy": "quarantine",
"percentage": 100,
"aggregate_report_uris": ["mailto:dmarc@example.com"],
"dkim_alignment": "r",
"spf_alignment": "r",
"strength_rating": "moderate",
"is_valid": true
},
"recommendations": [
"Consider upgrading DMARC policy from quarantine to reject for maximum protection"
]
},
"meta": {
"processing_time_ms": 500
}
}

Response Fields

FieldTypeDescription
domainstringThe checked domain
gradestringLetter grade (A-F)
scoreintegerNumeric score (0-100)
mxobjectMX record results
spfobjectSPF record analysis
dkimarrayDKIM records found
dmarcobjectDMARC record analysis
recommendationsarrayActionable improvement suggestions

Grading

GradeScoreDescription
A90-100Excellent email authentication
B75-89Good, minor improvements possible
C55-74Moderate risk, missing configurations
D35-54Poor, significant gaps
F0-34Critical, minimal or no authentication

Telemetry Ingestion

POST /v1/email/telemetry/ingest

Submit email sending telemetry observations from your system. This data feeds into the reputation scoring engine. Maximum 100 observations per request.

Authentication

Required (API key).

Request Body

{
"observations": [
{
"ip": "198.51.100.25",
"bounce_rate": 0.03,
"complaint_rate": 0.001,
"volume_24h": 5000,
"observed_at": "2026-04-13T10:00:00Z"
},
{
"ip": "203.0.113.50",
"bounce_rate": 0.15,
"complaint_rate": 0.005,
"volume_24h": 800,
"observed_at": "2026-04-13T10:00:00Z"
}
]
}

Observation Fields

FieldTypeRequiredDescription
ipstringYesSending IP address
bounce_ratenumberNoBounce rate (0.0 to 1.0)
complaint_ratenumberNoComplaint rate (0.0 to 1.0)
volume_24hintegerNoSending volume in last 24h
observed_atstringNoISO 8601 timestamp (defaults to now, must be within last 48h)

Response (200)

{
"data": {
"accepted": 2,
"rejected": 0,
"errors": []
},
"meta": {
"processing_time_ms": 15
}
}

Response Fields

FieldTypeDescription
acceptedintegerNumber of observations stored
rejectedintegerNumber of observations rejected
errorsarrayError messages for rejected observations

Validation Rules

  • bounce_rate must be 0.0 to 1.0
  • complaint_rate must be 0.0 to 1.0
  • volume_24h must be >= 0
  • observed_at must be within the last 48 hours and not in the future
  • Maximum 100 observations per request
  • Invalid IPs are rejected with an error message

Error Responses

400 Bad Request

{
"data": {
"error": "headers field is required",
"code": "MISSING_HEADERS"
},
"meta": {
"processing_time_ms": 0
}
}

401 Unauthorized (Telemetry only)

{
"data": {
"error": "authentication required",
"code": "AUTH_REQUIRED"
},
"meta": {
"processing_time_ms": 0
}
}

Code Examples

cURL

# Header analysis (no auth needed)
curl -X POST "https://api.limesindex.com/v1/tools/header-analyzer" \
-H "Content-Type: application/json" \
-d '{"headers": "Received: from mail.example.com (198.51.100.25) by mx.google.com..."}'

# Domain check (no auth needed)
curl -X GET "https://api.limesindex.com/v1/tools/domain-check/example.com"

# Telemetry ingestion (auth required)
curl -X POST "https://api.limesindex.com/v1/email/telemetry/ingest" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"observations": [
{
"ip": "198.51.100.25",
"bounce_rate": 0.03,
"complaint_rate": 0.001,
"volume_24h": 5000,
"observed_at": "2026-04-13T10:00:00Z"
}
]
}'

Python

import requests

BASE_URL = "https://api.limesindex.com"

# Header analysis (public, no auth)
raw_headers = """Received: from mail.example.com (198.51.100.25) by mx.google.com
with ESMTPS; Sun, 13 Apr 2026 10:00:00 +0000
Authentication-Results: mx.google.com; spf=pass"""

resp = requests.post(
f"{BASE_URL}/v1/tools/header-analyzer",
json={"headers": raw_headers}
)
analysis = resp.json()["data"]
for hop in analysis["received_chain"]:
print(f"Hop: {hop.get('from_ip', '?')} -> {hop.get('by_host', '?')}")
if hop.get("asn"):
print(f" ASN: {hop['asn']} ({hop['asn_name']})")

# Domain check (public, no auth)
resp = requests.get(f"{BASE_URL}/v1/tools/domain-check/example.com")
check = resp.json()["data"]
print(f"Grade: {check['grade']} (Score: {check['score']})")
for rec in check["recommendations"]:
print(f" - {rec}")

# Telemetry ingestion (auth required)
API_KEY = "YOUR_API_KEY"
resp = requests.post(
f"{BASE_URL}/v1/email/telemetry/ingest",
headers={"X-API-Key": API_KEY},
json={
"observations": [
{
"ip": "198.51.100.25",
"bounce_rate": 0.03,
"complaint_rate": 0.001,
"volume_24h": 5000
}
]
}
)
result = resp.json()["data"]
print(f"Accepted: {result['accepted']}, Rejected: {result['rejected']}")

Use Cases

  • Header forensics: Trace email delivery issues by analyzing Received headers
  • Domain auditing: Check any domain's email auth setup before sending to it
  • Telemetry contribution: Share your sending metrics to improve the global reputation model
  • Onboarding: Validate domain DNS before adding to your platform