---
title: Migrate from Resend | SendHQ Docs
description: Map Resend HTTP sends to SendHQ and account for the compatibility boundaries before cutover.
canonical: https://sendhq.cc/docs/resend-migration
last-updated: 2026-09-07
updated: 2026-09-07
---
# 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.
