communication email_delivery ai_generated partial

SendGrid batch send returns 202 Accepted but some recipients don't receive email

ID: communication/sendgrid-batch-partial-failure-silent

Also available as: JSON · Markdown
70%Fix Rate
82%Confidence
3Evidence
2023-01-01First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
any active

Root Cause

SendGrid's v3 mail/send API returns 202 Accepted (queued) not 200 (sent). A 202 means SendGrid accepted the request, not that delivery succeeded. Batch sends with invalid/bounced recipients silently skip those recipients. No per-recipient status in the API response.

generic

Workarounds

  1. 95% success Set up Event Webhooks to track per-recipient delivery status
    SendGrid Settings -> Event Webhooks -> Enable delivered, bounced, dropped events. Track delivery per recipient.
  2. 88% success Check suppression list before sending batches
    GET /v3/suppression/bounces, /v3/suppression/blocks, /v3/suppression/spam_reports  # check before sending
  3. 85% success Use personalizations array for per-recipient tracking
    Each personalization gets a unique message_id. Use this to track delivery status per recipient group.

Dead Ends

Common approaches that don't work:

  1. Assume 202 response means all recipients will receive the email 88% fail

    202 = queued for sending, not delivered. Invalid addresses, bounced domains, and spam-flagged recipients are silently dropped after queuing.

  2. Send to large batches without checking bounce/suppression lists 82% fail

    SendGrid maintains a suppression list. Addresses on it are silently skipped. Sending to previously-bounced addresses hurts your sender reputation.