https://app.hiveku.com/api/v1/email/resend. An app built on Resend’s SDK or REST API moves to Hiveku by changing its API key and base URL. The requests and answers are Resend’s, and every email runs the same checks as Hiveku’s own REST API.
Before you switch
1
Verify your domain in Hiveku
Add the domain you send from and publish its records. Keep Resend’s DNS records until the switch is done: Hiveku’s records sit beside them. See Moving from another provider.
2
Create a key
Create a Production key in Settings > API Keys. Add Read Emails only if your app calls
emails.get. See API keys.3
Recreate your webhooks
Add your endpoint as a Hiveku webhook. The event names match Resend’s, Hiveku sends the same signature headers, and an event’s
data carries the same email_id, from, to, subject and tags. Give your handler Hiveku’s signing secret, and check any other field it reads.4
Bring over your suppressions
Hiveku suppresses an address on its own after a hard bounce or a spam complaint, but it does not know who bounced, complained or unsubscribed at Resend. Add those addresses before you switch. See Suppressions.
Switch
Set two environment variables:The Resend SDK reads
RESEND_BASE_URL once, when it is first imported. Set it in the environment the app starts with, not in code after the import. Hiveku tests this with the resend package, version 6.hk_test_...) first. The answer adds a warning that nothing was delivered:
What works
The fields of an email:
from,to,cc,bcc, at most 50 recipients in allsubject,html,text, andreact, which the SDK turns intohtmlbefore it calls HivekureplyToheaders, of which only some are delivered: see Headerstags, as Resend’s list or as an object: see Tagsattachments, withcontent(base64 text or a Buffer),filename,contentTypeandcontentId, 25 MB in all- idempotency keys (
idempotencyKeyin the SDK, theIdempotency-Keyheader), kept 24 hours
content: buffer.toString("base64").
What is refused
Hiveku refuses what it cannot honor, rather than sending something else:
In a batch, these refuse the whole batch under
strict validation. Under permissive, the refused email is listed in errors and the others go.
Resend’s contacts, audiences and broadcasts have no compatible API here. Hiveku’s marketing email has its own audiences and campaigns.
Differences to know
- Warnings. An answer may add
warnings: what Hiveku left out, such as a header it does not deliver or a reserved tag, or what it did not deliver. The SDK hands the field back indata. - Suppressed recipients. An email whose every recipient is suppressed is not sent, but it is recorded and answered with its id and a warning. It reads back with
last_event: "suppressed". - Headers. Only some headers are delivered. See Headers.
- Reserved tags. Tags named
channelorcampaign_id, or starting withhiveku_, are dropped with a warning. - Limits. Rates and monthly emails follow your Hiveku plan. A
429carriesRetry-After. See Limits. - Old keys. A Resend key (
re_...) left in place is refused with401 invalid_api_key, and the message says to use a Hiveku key.
Errors
Errors come in Resend’s shape,{ "statusCode": 422, "name": "missing_required_field", "message": "Missing required field: subject" }. Resend clients branch on name:
Suppressions
Add each address that bounced, complained or unsubscribed at Resend withPOST /api/v1/email/suppressions:
201, and answers 409 already_exists for an address already on the list. The key needs the email:suppressions permission. The dashboard’s key form does not offer it, but your AI assistant can create such a key.
After the switch
- Watch Settings > Email Service > Email Logs, in the App sends (API and SMTP) view, as your app’s email moves over.
- Test with a test key, not a trickle of real sends. Simulated sends are not counted, so they do not set a small usual day for the daily volume check. If your account already sends API mail on most days, moving a large app over in one go can pass 5 times that usual day and hold API mail until 00:00 UTC.
- Once nothing sends through Resend, remove Resend’s DNS records and its
include:from your SPF record.