Start here

Migrate from Resend

Map Resend HTTP sends to SendHQ and account for the compatibility boundaries before cutover.

Compatibility boundary

SendHQ accepts the common Resend-style JSON fields for direct HTTP sends, but it is not a drop-in replacement for the Resend SDK. Point your own server-side HTTP adapter at /api/v1/emails; do not assume an SDK with a hard-coded Resend host can be reconfigured.

Field mapping

from, to, cc, bcc, subject, html, text, reply_to, and safe custom headers map directly. SendHQ also accepts message_class, hosted template references, draft_id, and reply/thread fields. Resend-specific React payloads, inline attachment arrays, tags, audiences, broadcasts, and scheduled-send fields are not accepted equivalents.

Attachments and templates

Upload attachments to a SendHQ draft, then send with draft_id. Hosted templates are SendHQ resources with published versions and typed data; migrate template IDs and rendering calls explicitly rather than copying a provider template identifier.

Retries

Generate one stable Idempotency-Key per logical send. Retry the identical JSON payload with that key. If a subject, body, recipient, header, or template data changes, use a new key; otherwise SendHQ returns 409. A replayed stored response includes Idempotent-Replayed: true.

Cutover checklist

  1. Verify every From domain and exact sender address you will use.
  2. Send controlled text and HTML messages to an owned inbox.
  3. Confirm provider acceptance separately from delivery events.
  4. Exercise 409, 422, 423, 429, and 5xx handling.
  5. Keep the previous provider adapter available until both transactional and lifecycle paths pass.