Sendable
One line, and your app knows how to talk to its users.
You describe what happened; Sendable writes the message and sends it. No templates to maintain, no dashboard step — your data is never rewritten, only the words around it.
npm i sendableme
import { send } from 'sendableme';
await send('sam@example.com', 'order_shipped', { orderId: 'A-1042', eta: 'Friday' });
That's a complete integration. Adding a new message type is a new string.
Get a free API key at sendable.me/keys — 500 messages a month, no card.
Try it in your browser
One click imports the SaaS-welcome example and runs it on Replit — add your
SENDABLE_API_KEY in Secrets and hit Run:
What's in this repo
| Directory | What it is |
|---|---|
sdk/ | The sendableme npm package — the client SDK |
mcp/ | sendableme-mcp — an MCP server, so Claude and Cursor can send email by asking |
templates/ | Three runnable examples against the live API |
Your data is never rewritten
The model that writes the copy never sees your values — only your field names. It
writes copy containing {{placeholders}}, and your values are substituted
afterwards, so a price, a date, or a reset link cannot be altered. A second model
checks every draft for claims your data doesn't support and refuses rather than
guess.
await send(user.id, 'payment_failed', { amount: '$99.00' });
// "$99.00" appears exactly as written, always
MCP
npx -y sendableme-mcp
Add it to Claude Desktop or Cursor and send transactional email straight from the
editor. See mcp/ for the config block.
Docs
Full reference, written to be pasted into an AI assistant: sendable.me/llms.txt
License
MIT