ekx-resendlisted
Install: claude install-skill Ekinoxis-evm/claude-skills
# Resend
Our transactional email vendor across the portfolio.
There is a bundled `resend` skill in this Claude installation and a **`resend` MCP
server** — both are authoritative over this file for API detail.
Docs: https://resend.com/docs
---
## Environment
```bash
RESEND_API_KEY= # SECRET
RESEND_FROM= # "Ekinoxis <alerts@ekinoxis.xyz>"
RESEND_FROM_EMAIL= # same thing, older name — pick one per repo
RESEND_DRY_RUN=true # local: log instead of send
```
`RESEND_DRY_RUN` came out of a scheduled scanner and is worth copying everywhere. That
scanner emails on every detected opportunity; without a dry-run flag, a local debugging
session sends a few hundred real emails and burns the domain's reputation.
```ts
if (process.env.RESEND_DRY_RUN === "true") {
console.log("[resend:dry-run]", { to, subject });
return { id: "dry-run" };
}
```
---
## Sending
```ts
import { Resend } from "resend";
const resend = new Resend(process.env.RESEND_API_KEY!);
const { data, error } = await resend.emails.send({
from: process.env.RESEND_FROM!,
to: [user.email],
subject: "Oportunidad detectada — spread 4.2%",
react: <OpportunityEmail opportunity={opp} />, // or: html / text
headers: { "X-Entity-Ref-ID": opportunity.id }, // idempotency hint
});
if (error) {
// Resend returns { data: null, error } — it does NOT throw.
console.error("resend failed", error);
}
```
**Resend returns errors, it does not throw.** Code that only wraps the call in