# Resend (send email) Send email from your own domain with Resend. URL: https://docs.qaldy.com/connectors/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 1. In Resend, open **API Keys** and create a key with **Sending access** ([resend.com/api-keys](https://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](https://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 | | | |---|---| | Host | `api.resend.com` (pinned, every resolved address public) | | Methods | `POST` | | Paths | `/emails` and below (`/emails`, `/emails/batch`) | | Key | `Authorization: Bearer `, 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`: ```json { "id": "http", "actions": ["request"], "scope": "conn_k3v9…" } ``` ```ts const api = ctx.connectors.http('conn_k3v9…') await api.post('/emails', { json: { from: 'Moss & Ember ', to: ['aigerim@example.com'], subject: 'Beans are below 5 kg', html: '

Reorder before Friday.

', }, }) ``` 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 |