**TL;DR:** The Node SDK returns { data, error } from resend.emails.send instead of throwing. If you only read data, validation failures and 403s disappear without a trace. Node SDK: always branch on the error half resend.emails.send resolves to an object with two halves. Never paste the key into source. - Branch on error immediately after every send. data is only meaningful when error is empty. - data.id is the id of the created email.

## The error

```text
, not as a
thrown exception. Code that only reads
```

## The fix

1. Read the key from `process.env.RESEND_API_KEY`. Never paste the key into source.

2. Branch on `error` immediately after every send. `data` is only meaningful when `error` is empty.

3. `data.id` is the id of the created email. Log it; you will need it when debugging delivery later.

4. A try/catch around the call still makes sense for transport failures (DNS, network), but it will not catch API errors. You need both.

5. The from address must belong to a verified domain, or the error half tells you so with a 403.

## When to use this

- You are seeing this exact error message; match the block above, not just part of it.
- The failing call matches the scenario in the title: Resend Node SDK.
- You want the fastest verified fix before digging through logs.

## When not to use this

- Your error text differs from the block above; close cousins often have different causes.
- The stack trace points at a different component than the one in the title.
- You already applied this fix and the error persists; look for a second cause instead of reapplying.

## Compatibility

- Not pinned to a specific version; follows current Resend behavior.

## Also seen as

- `treats failures as successes.

## The shape`