Email delivery failed
Triggered when an email permanently fails to deliver (hard fail).
Common causes include:
- Invalid recipient address (
invalid_recipient) - Account disabled or suspended (
inactive_mailbox) - Domain doesn’t exist (
invalid_domain) - Blocked by spam filters (
spam_block,spam_content) - Policy rejection like DMARC failures (
policy_rejection)
Unlike bounces, delivery failures may not generate a bounce notification to the sender.
Bounce Classification: This event includes classification data to help you understand
why delivery failed permanently. Use the classification field for the category and
smtp_enhanced_code for the standardized SMTP status code.
Suppression Lists: For invalid_recipient, inactive_mailbox, and invalid_domain
classifications, you should add the address to your suppression list to avoid
continued delivery attempts.
Documentation Index
Fetch the complete documentation index at: https://arkhq.io/docs/llms.txt
Use this file to discover all available pages before exploring further.
Authorizations
Use your API key from arkhq.io/org/credentials
Authorization: Bearer YOUR_API_KEYBody
Webhook event payload sent to your configured endpoint.
The payload structure varies by event type:
- Delivery events (MessageSent, MessageDelayed, MessageDeliveryFailed, MessageHeld): Include
message,status,details,output,sent_with_ssl,timestamp,time - MessageBounced: Includes
original_messageandbounce(both are message objects) - Engagement events (MessageLoaded, MessageLinkClicked): Include
message,ip_address,user_agent - DomainDNSError: Includes
server,domain,uuid,dns_checked_at, and DNS status fields - SendLimit events: Include
server,volume,limit
Bounce Classification: For MessageDelayed and MessageDeliveryFailed events, additional classification
fields are included to help you understand why delivery failed:
classification- Category likeinvalid_recipient,mailbox_full,spam_blockclassification_code- Numeric code (10-49, 99) for grouping related classificationssmtp_enhanced_code- RFC 3463 enhanced status code (e.g., "5.1.1")remote_host- Hostname of the server that returned the error
Note: The event type is determined by which webhook events you subscribe to, not by a field in the payload.
Use the status field to identify delivery event types: Sent, SoftFail, HardFail, Held.
Email message information included in webhook payloads
The original message that bounced (for MessageBounced events)
The bounce notification message (for MessageBounced events)
Delivery status. Values correspond to event types:
Sent(MessageSent)SoftFail(MessageDelayed)HardFail(MessageDeliveryFailed)Held(MessageHeld)
Sent, SoftFail, HardFail, Held "Sent"
Human-readable summary of the delivery attempt. Format varies by status:
- Sent:
Message for {recipient} accepted by {ip}:{port} ({hostname}) - SoftFail/HardFail:
{code} {classification}: Delivery to {recipient} failed at {ip}:{port} ({hostname}) - Connection errors:
Connection error: Could not connect to any mail server for {domain}
"Message for user@example.com accepted by 1.2.3.4:25 (mx.example.com)"
Raw SMTP response from the receiving server. Contains the full error message for failures.
"250 2.0.0 OK"
Whether the message was delivered over a TLS connection
true
Time taken to deliver in seconds
1.51
Unix timestamp of the delivery attempt (with microsecond precision)
1704672000.123456
Bounce classification category explaining why delivery failed.
Only present for MessageDelayed and MessageDeliveryFailed events.
Recipient Issues (10-19):
invalid_recipient- Mailbox doesn't exist (5.1.1)inactive_mailbox- Account disabled or suspendedmailbox_full- Over quota (5.2.2)
Domain Issues (20-29):
invalid_domain- Domain doesn't existdns_failure- Temporary DNS resolution failurerouting_error- Relay denied or routing problems
Reputation/Policy (30-39):
spam_block- IP or domain blocklistedspam_content- Content flagged as spampolicy_rejection- Rejected by policy (DMARC, etc.)
Technical (40-49):
connection_error- Connection timeout or refusedprotocol_error- SMTP protocol issuestransient_failure- General temporary failure
Other:
unclassified- Could not classify the bounce
invalid_recipient, inactive_mailbox, mailbox_full, invalid_domain, dns_failure, routing_error, spam_block, spam_content, policy_rejection, connection_error, protocol_error, transient_failure, unclassified "invalid_recipient"
Numeric code for the bounce classification. Useful for grouping related classifications:
- 10-19: Recipient issues
- 20-29: Domain issues
- 30-39: Reputation/policy issues
- 40-49: Technical issues
- 99: Unclassified
Only present when classification is present.
10, 11, 12, 20, 21, 22, 30, 31, 32, 40, 41, 42, 99 10
RFC 3463 enhanced SMTP status code from the receiving server (e.g., "5.1.1", "4.2.2"). Provides standardized bounce reason codes. Only present for delivery failures where the remote server provided an enhanced code.
^[245]\.[0-9]+\.[0-9]+$"5.1.1"
Hostname of the remote SMTP server that returned the error. Only present for delivery failures.
"mx1.gmail.com"
The URL that was clicked (for MessageLinkClicked events)
"https://yourdomain.com/welcome"
Unique token for the clicked link (for MessageLinkClicked events)
"abc123def456"
IP address of the recipient (for MessageLoaded and MessageLinkClicked events)
"203.0.113.45"
User agent of the recipient's email client (for MessageLoaded and MessageLinkClicked events)
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"
Server information (for DomainDNSError and SendLimit events)
Domain name with DNS issues (for DomainDNSError events)
"yourdomain.com"
Unique identifier for the domain (for DomainDNSError events)
"a1b2c3d4-e5f6-7890"
Unix timestamp when DNS was checked (for DomainDNSError events)
1704672000.123456
SPF record status (for DomainDNSError events)
OK, Missing, Invalid "Missing"
SPF error message if status is not OK
"No SPF record exists for this domain"
DKIM record status (for DomainDNSError events)
OK, Missing, Invalid "OK"
DKIM error message if status is not OK
MX record status (for DomainDNSError events)
OK, Missing, Invalid "OK"
MX error message if status is not OK
Return path record status (for DomainDNSError events)
OK, Missing, Invalid "Missing"
Return path error message if status is not OK
"There is no return path record at rp.yourdomain.com"
Current send volume in the last hour (for SendLimit events)
950
Configured send limit per hour (for SendLimit events)
1000
Response
Webhook received successfully
