Domains
Add, verify, and monitor sending domains: DKIM/SPF/DMARC records, domain health scoring, and DMARC aggregate-report summaries. Full /domains API reference.
/domainsAdd a sending domainReturns the DNS records you need to add — a DKIM TXT record, an SPF MX and TXT pair on the sending subdomain, and an optional DMARC record. There is no webhook for domain status changes yet: poll GET /domains/:id or call POST /domains/:id/verify to re-check records on demand and see them move from not_started to verified. The response's capabilities object ({ sending, receiving }) reflects whether this domain sends, receives, or both — see Receiving to turn receiving on.
curl -X POST https://api.irisend.com/domains \
-H "Authorization: Bearer $IRISEND_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "yourdomain.com", "region": "eu-west-1" }'{
"object": "domain",
"id": "dom_4kP1qR9zL7vT2yB6wC0nS3x",
"name": "yourdomain.com",
"status": "not_started",
"created_at": "2026-09-25T09:00:12.481Z",
"region": "eu-west-1",
"capabilities": { "sending": "enabled", "receiving": "disabled" },
"records": [
{ "record": "DKIM", "type": "TXT", "name": "irisend._domainkey", "value": "p=MIGfMA0GCSq...", "ttl": "Auto", "status": "not_started", "required": true },
{ "record": "SPF", "type": "MX", "name": "send", "value": "feedback-smtp.eu-west-1.amazonses.com", "priority": 10, "ttl": "Auto", "status": "not_started", "required": true },
{ "record": "SPF", "type": "TXT", "name": "send", "value": "v=spf1 include:amazonses.com ~all", "ttl": "Auto", "status": "not_started", "required": true },
{ "record": "DMARC", "type": "TXT", "name": "_dmarc", "value": "v=DMARC1; p=none;", "ttl": "Auto", "status": "not_started", "required": false }
],
"open_tracking": false,
"click_tracking": false,
"tls": "opportunistic",
"reputation_status": "ok",
"bimi_logo_url": null,
"bimi_vmc_url": null
}/domains/:idRetrieve a domainSame shape as create, with each record's current verification status. GET /domains lists every domain on the team, but omits records — fetch a single domain to see the DNS records.
curl https://api.irisend.com/domains/dom_4kP1qR9zL7vT2yB6wC0nS3x \
-H "Authorization: Bearer $IRISEND_API_KEY"/domains/:idUpdate tracking settingsAccepts open_tracking, click_tracking, tls (opportunistic or enforced), bimi_logo_url/bimi_vmc_url, and capabilities ({ sending?, receiving? }, each "enabled"/"disabled", at least one must stay enabled) — see Receiving for the MX record and webhook this turns on. Omitted fields keep their current value. Returns the { object, id } mutation shape.
curl -X PATCH https://api.irisend.com/domains/dom_4kP1qR9zL7vT2yB6wC0nS3x \
-H "Authorization: Bearer $IRISEND_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "open_tracking": true, "click_tracking": true }'/domains/:id/unpauseLift a reputation pauseManual override once the bounce/complaint issue behind a domain_reputation_paused error is resolved.
curl -X POST https://api.irisend.com/domains/dom_4kP1qR9zL7vT2yB6wC0nS3x/unpause \
-H "Authorization: Bearer $IRISEND_API_KEY"/domains/:id/healthDomain health scoreIrisend extension, no Resend equivalent. A 0–100 score from two weighted factors (60% bounce/complaint reputation, 40% live DNS record verification) — each factor carries its own 0–100 score and a human-readable detail string. This endpoint doesn't return a band label (that only appears in domain.health.* webhook payloads) — derive one yourself if you need it: score ≥ 80 good, ≥ 50 degraded, below that critical.
curl https://api.irisend.com/domains/dom_4kP1qR9zL7vT2yB6wC0nS3x/health \
-H "Authorization: Bearer $IRISEND_API_KEY"{
"object": "domain_health",
"domain_id": "dom_4kP1qR9zL7vT2yB6wC0nS3x",
"score": 92,
"factors": [
{ "key": "reputation", "label": "Bounce/complaint reputation", "weight": 0.6, "score": 100, "detail": "hard-bounce rate 0.41%, complaint rate 0.02% over last 500 sends (ok)" },
{ "key": "dns", "label": "DNS record verification", "weight": 0.4, "score": 66, "detail": "drifted: SPF" }
],
"reputation": {
"sample_size": 500,
"hard_bounces": 2,
"complaints": 0,
"hard_bounce_rate": 0.0041,
"complaint_rate": 0.0002,
"status": "ok"
},
"dns": { "status": "verified", "drifted_records": ["SPF"] }
}/domains/:id/dmarc/summaryDMARC summaryIrisend extension. Aggregate pass rates and a ramp recommendation computed from received DMARC aggregate reports — useful for deciding when it's safe to move published_policy from none toward quarantine/reject.
curl https://api.irisend.com/domains/dom_4kP1qR9zL7vT2yB6wC0nS3x/dmarc/summary \
-H "Authorization: Bearer $IRISEND_API_KEY"{
"object": "dmarc_summary",
"domain_id": "dom_4kP1qR9zL7vT2yB6wC0nS3x",
"published_policy": "none",
"pass_rate_7d": 0.98,
"pass_rate_30d": 0.97,
"total_messages_7d": 4310,
"unknown_source_count_7d": 1,
"recommended_policy": "quarantine",
"recommendation_reason": "ramp_ready",
"last_report_at": "2026-09-25T04:00:00.000Z",
"reports_received_total": 212
}/domains/:id/dmarc/sourcesSending sources seen in DMARC reportswindow is 7d (default), 30d, or 90d. Cursor is the source IP address, ordered lexicographically rather than by recency.
curl https://api.irisend.com/domains/dom_4kP1qR9zL7vT2yB6wC0nS3x/dmarc/sources?window=30d&limit=20 \
-H "Authorization: Bearer $IRISEND_API_KEY"{
"object": "list",
"has_more": false,
"data": [
{
"object": "dmarc_source",
"source_ip": "54.240.0.12",
"reverse_dns": "a12-0.smtp-out.eu-west-1.amazonses.com",
"classification": "ours",
"messages": 4288,
"pass_rate": 0.99,
"first_seen": "2026-08-27T00:00:00.000Z",
"last_seen": "2026-09-25T04:00:00.000Z"
}
]
}/domains/:id/dmarc/reportsRaw DMARC aggregate reportscurl https://api.irisend.com/domains/dom_4kP1qR9zL7vT2yB6wC0nS3x/dmarc/reports?limit=20 \
-H "Authorization: Bearer $IRISEND_API_KEY"{
"object": "list",
"has_more": false,
"data": [
{
"object": "dmarc_report",
"id": "c2f7a910-1e4d-4b7a-9c3f-5a0e8d2b6f41",
"org_name": "google.com",
"report_id": "12345678901234567890",
"date_range_begin": "2026-09-24T00:00:00.000Z",
"date_range_end": "2026-09-25T00:00:00.000Z",
"policy_p": "none",
"policy_pct": 100,
"total_messages": 318,
"aligned_pass_messages": 318,
"created_at": "2026-09-25T04:00:00.000Z"
}
]
}/domains/:idRemove a domainReturns { object, id, deleted: true }.
curl -X DELETE https://api.irisend.com/domains/dom_4kP1qR9zL7vT2yB6wC0nS3x \
-H "Authorization: Bearer $IRISEND_API_KEY"