Menu QaldyDocs

Resend (send email)

Send email from your own domain with Resend.

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

  1. 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_.
  2. Add and verify the domain you send from (resend.com/domains). Resend refuses a from address on an unverified domain.
  3. 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

Hostapi.resend.com (pinned, every resolved address public)
MethodsPOST
Paths/emails and below (/emails, /emails/batch)
KeyAuthorization: Bearer <key>, added by the gate; the app's own Authorization is dropped
Fixed headerUser-Agent: qaldy-cloud (Resend rejects requests without one)

Use it from an app

The manifest names the connection in scope:

json
{ "id": "http", "actions": ["request"], "scope": "conn_k3v9…" }
ts
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 seeWhyDo
403 with a domain messageThe from domain isn't verifiedVerify it in Resend → Domains
401 or restricted_api_keyThe key was revoked, mistyped, or lacks sending accessReplace the key on the connection
Blocked: method_not_allowed / path_not_allowedThe 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_connectedNo key is storedConnect it

Type to search. Up and down to choose, Enter to open, Esc to close.