Migration from Resend

Also migrating from other providers?


If you are moving an existing Resend integration, the Groundmail send flow maps closely:

  • Bearer API keys
  • POST /emails with a familiar JSON body
  • Webhooks / activity for delivery outcomes

The main migration steps are:

  1. swap the base URL
  2. swap your API key to gm_...
  3. verify a sending domain in Groundmail
  4. update any provider-specific optional fields

Quick mapping

Resend Groundmail
https://api.resend.com https://api.groundmail.dev
re_... API key gm_... API key
POST /emails POST /emails
from must be verified from must be verified
dashboard activity dashboard activity + deliverability summary

Minimal curl diff

curl -X POST https://api.groundmail.dev/emails \
  -H "Authorization: Bearer $GROUNDMAIL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "you@yourdomain.com",
    "to": "user@example.com",
    "subject": "Hello",
    "html": "<p>It works.</p>"
  }'

Accepted payload aliases

Groundmail accepts a few migration-friendly aliases on the HTTP send API:

  • htmlBody or html_body -> html
  • textBody, text_body, or plain_body -> text
  • replyTo -> reply_to
  • scheduledAt -> scheduled_at

Attachment aliases are also accepted:

  • filename -> name
  • contentType -> content_type
  • content -> data
  • contentId -> content_id

These aliases are meant to make low-friction migrations easier; new code should still prefer the canonical field names in docs/examples.


Domain verification differences

Unlike provider-managed sandbox products, Groundmail expects you to verify your own sending domain for production traffic.

Before DNS is ready, you can still self-test with the shared sandbox sender:

{
  "from": "noreply@mail.groundmail.dev",
  "to": "you@example.com",
  "subject": "Sandbox check",
  "html": "<p>Sandbox works.</p>"
}

Sandbox restriction:

  • the sandbox from domain is only allowed when all recipients match the account email on the API key owner

Once your own domain is verified, switch from back to your branded domain.


DNS apply

Groundmail can write DNS for you in two ways:

  • Cloudflare: save a token once under Settings -> Integrations
  • GoDaddy: paste one-time API credentials on the domain detail page, or pass them through the SDK/CLI locally

See docs/api/domains.md.


SMTP

If your old integration still depends on SMTP, create credentials in the dashboard (SMTP) or via POST /smtp-credentials, then connect to smtp.groundmail.dev:587 with username groundmail. Same verified domains and plan limits as the HTTP API. Prefer POST /emails for new app code. Details: docs/api/smtp.md.