Resend (send email)
Send email from your own domain with Resend.
- Status: Available
- Shelf: Email
- How you connect: API key
- Regions: global (not available to Kazakhstan-only workspaces)
- The service’s own API reference: https://resend.com/docs/api-reference/emails/send-email
Apps send email from your own domain through Resend. Resend is reached through the HTTP API
connector with a preset: the gate calls only api.resend.com, only with POST, only under
/emails. The API key is sealed to the gate and apps never see it.
Status: Available through the HTTP API preset. The preset follows Resend's API reference (checked 2026-10-16). It has not been run against a live Resend account; the first real send is the first real test.
Connect it#
- In Resend, open API Keys and create a key with Sending access
(resend.com/api-keys). A sending-only key is enough and is the
least privilege: it cannot read or change anything else. It starts with
re_. - Add and verify the domain you send from (resend.com/domains).
Resend refuses a
fromaddress on an unverified domain. - Qaldy → Connectors → Resend → Connect Resend → paste the key → Seal and connect.
Test connection only checks that the sealed key opens. A sending-only key can't read anything and the only call the gate allows is a send, so a test would have to send an email; it does not.
To send from your own domain, see send-from-your-domain.md: the records to add, and a check in Settings, Domains that reads your DNS and says which are in place.
What the gate allows#
| Host | api.resend.com (pinned, every resolved address public) |
| Methods | POST |
| Paths | /emails and below (/emails, /emails/batch) |
| Key | Authorization: Bearer <key>, added by the gate; the app's own Authorization is dropped |
| Fixed header | User-Agent: qaldy-cloud (Resend rejects requests without one) |
Use it from an app#
The manifest names the connection in scope:
{ "id": "http", "actions": ["request"], "scope": "conn_k3v9…" }const api = ctx.connectors.http('conn_k3v9…')
await api.post('/emails', {
json: {
from: 'Moss & Ember <orders@mossember.example>',
to: ['aigerim@example.com'],
subject: 'Beans are below 5 kg',
html: '<p>Reorder before Friday.</p>',
},
})A reply outside 2xx throws a ConnectorError with Resend's own message (upstream_error), for
example 403 for an unverified domain or 422 for a bad address.
When it breaks#
| You see | Why | Do |
|---|---|---|
403 with a domain message | The from domain isn't verified | Verify it in Resend → Domains |
401 or restricted_api_key | The key was revoked, mistyped, or lacks sending access | Replace the key on the connection |
Blocked: method_not_allowed / path_not_allowed | The app called something other than POST /emails… | The preset only allows sending; use the HTTP API connector with your own fence if you need more |
connector_not_connected | No key is stored | Connect it |