verification
use it
# add to stunt.yaml
services:
resend:
adapter: embedded:resend-style
# then
$ stunt upThe embedded: source extracts this adapter from the binary — no git clone, fully offline.
how to mock the Resend API locally
Install stunt, paste the service block above into stunt.yaml, run stunt up — then point your client at localhost instead of Resend API. It works offline, keeps state across requests and restarts, and every response is synthetic: the route shapes, status codes, pagination, and webhook delivery follow the real Resend API 1.0.0 surface — the data is fake, the behavior is real.
backing stores
emails
api surface (6)
generated from the adapter manifest — exactly what boots, nothing more · covers 10% of the real API's 20 routes (derived from sdk resend-node @ 6.22.0 (floor))
6 routes
POST/emails
GET/emails
GET/emails/{id}
POST/webhooks
GET/webhooks
DELETE/webhooks/{id}
SDK-verified behaviors (4)
- ✓emails.send mints a re_* id
- ✓emails.get round-trips the message
- ✓emails.list includes it
- ✓delivery state derives on read (sent -> delivered)
Not implemented (6)
- No domains surface (create, list, verify, delete)
- No API keys management (/api-keys)
- No batch send (POST /emails/batch)
- No scheduled sends (schedule, cancel schedule)
- No audiences or contacts
- No broadcasts or tags
Differs from the real API (3)
- Delivery derives on read: sent at +1s, delivered at +3s — fixed, not async
- simulate_fail: true in POST /emails forces bounced terminal (simulator extension)
- Webhook events fire exactly once on the first deriving read, not on real delivery
want more of the Resend API surface? adapters are YAML + Starlark — the authoring guide covers adding routes, fixtures, and state machines. Open an issue for anything big first, or just file a PR — merged routes ship in the next release.