Skip to content

From SendGrid

Field mapping, webhook equivalents, and a migration checklist for moving off SendGrid.

The short version

Change the base URL, swap the API key, and rename three fields. Most SendGrid integrations migrate in under an hour.

Field mapping

SendGridOutSend
personalizations[].to[].emailto
from.emailfrom
subjectsubject
content[].value (text/html)html
content[].value (text/plain)text
reply_to.emailreplyTo
send_at (unix)scheduled_at (ISO 8601)
X-Message-Idid in the response

OutSend takes a flat JSON body rather than SendGrid’s personalizations array. If you were using personalizations for per-recipient substitution, that becomes one request per recipient, or a campaign with a segment.

Event mapping

SendGrid eventOutSend
deliveredemail.delivered
bounce / blockedemail.bounced
deferreddelivery_delay (dashboard + event log)
openemail.opened
clickemail.clicked
spamreportemail.complained
unsubscribe / group_unsubscribeemail.unsubscribed

SendGrid posts events in batched arrays. OutSend posts one event per request, signed with an X-OutSend-Signature HMAC — see Webhooks.

Checklist

  1. Verify your domain in OutSend and publish DKIM, SPF, and DMARC. Merge SPF into your existing record rather than adding a second one.
  2. Export your suppression list from SendGrid and import it before you send anything. This is the step people skip and regret.
  3. Move a low-volume, non-critical stream first. Watch the event log for a day.
  4. Point your webhook consumer at the new payload shape.
  5. Cut over the rest, then leave your SendGrid account open for a week so you can compare.

What is different

SendGrid pools sending reputation across customers on shared IPs. OutSend isolates it per domain and per workspace, which means your early sending history is genuinely yours — and also that you are building it from scratch rather than inheriting a pool’s. For high volume, consider a warm-up campaign rather than switching everything at once.