SuperSend TX — Quickstart
Send your first transactional email in about five minutes.
Migrating from Resend? Start with docs/migration.md for the minimal send-payload differences and sandbox guidance, then mirror your existing send + webhook flows from the hosted API reference.
Hosted docs: docs.supersendtx.com
Dashboard: app.supersendtx.com
API: https://api.supersendtx.com
1. Create an account
- Open the dashboard at app.supersendtx.com.
- Sign up with email + password (or email code if you prefer).
- If using email code: enter the code emailed to you.
2. Create an API key
- Go to API Keys → Create (or use an existing
stx_…key). - Copy the secret — it is shown once.
export SUPERSENDTX_API_KEY=stx_your_key_here3. Verify a sending domain (CLI or dashboard)
Dashboard (recommended)
- Optional but easiest: Settings → Integrations → paste a Cloudflare API token (Zone DNS Edit) → Save.
- Go to Domains → Add domain and enter your domain (e.g.
yourdomain.com). - On the domain page:
- If Cloudflare is connected: click Apply DNS (Cloudflare), then Verify DNS.
- If your DNS is at GoDaddy: switch to GoDaddy, paste an API key + secret for a one-time apply, then Verify DNS.
- Otherwise paste the shown TXT records at your DNS host (merge SPF if you already have one), then Verify DNS.
- Optional after verification: set Delivery settings on the domain detail page for:
- open tracking
- click tracking
tls_mode(opportunisticorenforced)
- Check the built-in DMARC/BIMI guidance on the same page before you roll out branded inbox features.
| Type | Purpose |
|---|---|
TXT _supersendtx.yourdomain.com |
Domain ownership |
TXT {postal-selector}._domainkey.yourdomain.com |
DKIM (Postal signing key) |
CNAME rp.yourdomain.com |
Return path → rp.core.superesp.com |
TXT yourdomain.com |
SPF (include:spf.supersendtx.com) |
TXT _dmarc.yourdomain.com |
DMARC |
Ownership, SPF, DKIM, and return-path are required to verify. Local Docker auto-verifies when SUPERSENDTX_DEV_AUTO_VERIFY=true.
If a domain is already attached to another SuperSend TX team, POST /domains returns a 409 with claim instructions instead of creating a duplicate owner.
CLI (from your editor / terminal)
Save a Cloudflare token under Settings → Integrations first (recommended). Then:
export SUPERSENDTX_API_KEY=stx_your_key_here
npx -y --package=supersendtx-cli -- supersendtx domains add yourdomain.com
# Uses the Cloudflare token stored in SuperSend TX (no local CLOUDFLARE_API_TOKEN needed)
npx -y --package=supersendtx-cli -- supersendtx domains apply yourdomain.com --provider cloudflare
npx -y --package=supersendtx-cli -- supersendtx domains verify yourdomain.comOptional override: set CLOUDFLARE_API_TOKEN locally to apply with a machine token instead of the dashboard one. GoDaddy still uses local GODADDY_API_KEY / GODADDY_API_SECRET.
4. Send your first email
Pick one integration method below. Replace you@yourdomain.com with an address on your verified domain.
Need a quick self-test before DNS is ready? Use the shared sandbox sender on mail.supersendtx.com, but only send to your own account email:
curl -X POST https://api.supersendtx.com/emails \
-H "Authorization: Bearer $SUPERSENDTX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "noreply@mail.supersendtx.com",
"to": "you@example.com",
"subject": "Sandbox check",
"html": "<p>SuperSend TX sandbox works.</p>"
}'Once your domain is verified, switch from to your own domain.
curl (production)
curl -X POST https://api.supersendtx.com/emails \
-H "Authorization: Bearer $SUPERSENDTX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "you@yourdomain.com",
"to": "user@example.com",
"subject": "Hello from SuperSend TX",
"html": "<p>It works.</p>"
}'Node.js SDK
npm install supersendtximport { SuperSendTX } from 'supersendtx'
const client = new SuperSendTX(process.env.SUPERSENDTX_API_KEY!)
const { id, status } = await client.emails.send({
from: 'you@yourdomain.com',
to: 'user@example.com',
subject: 'Hello from SuperSend TX',
html: '<p>It works.</p>',
})
console.log(id, status)CLI
SUPERSENDTX_API_KEY=$SUPERSENDTX_API_KEY npx -y --package=supersendtx-cli -- supersendtx emails send \
--from you@yourdomain.com \
--to user@example.com \
--subject "Hello from SuperSend TX" \
--html "<p>It works.</p>"Or install globally: npm install -g supersendtx-cli, then run supersendtx emails send ….
Success response
{
"id": "msg_abc123…",
"status": "sent"
}Plan limits
When billing is enabled, Free / Pro / Scale enforce hard monthly (and Free daily) caps. Over limit:
{ "error": { "message": "…", "code": "plan_limit", "upgrade_url": "/settings/billing" } }HTTP 429. Upgrade in the dashboard under Settings → Billing.
Common errors
| HTTP | Meaning | Fix |
|---|---|---|
| 401 | Invalid or missing API key | Check Authorization: Bearer stx_… |
| 403 | From domain not verified | Verify domain in dashboard; from must match |
| 400 | Missing from, to, or subject |
Send required fields + html or text |
| 429 | Plan send limit (code: plan_limit) |
Upgrade at Settings → Billing |
| 503 | Mail delivery temporarily unavailable | Retry later or contact support |
Full reference: docs.supersendtx.com/api-reference
5. Webhooks (optional)
- Go to Webhooks in the dashboard (or use the API).
- Add your HTTPS endpoint URL.
- Copy the signing secret (
whsec_…) — shown once. - Verify
SuperSendTX-Signatureon incomingPOSTs.
await client.webhooks.create({
url: 'https://yourapp.com/webhooks/supersendtx',
})See docs.supersendtx.com/api-reference for payload shape and signature verification.
6. Receive email (optional)
Want an app inbox or agent mailbox?
- Create a dedicated inbound subdomain such as
inbound.example.com. - Add it with
inbound_enabled: true(API) orsupersendtx domains add inbound.example.com --inbound true(CLI). - Verify the domain, then publish the returned MX record.
- Subscribe to
email.receivedand/or pollGET /received-emails.
See docs/api/inbound.md for the full flow and the MX conflict warning.
7. Event-driven automations (optional)
SuperSend TX can trigger transactional sequences from custom events.
Dashboard: open Automations, create from a starter (or blank) on the visual canvas, configure steps in the side panel (send-email can use a published Templates entry or inline HTML), then Activate.
CLI / API: create and activate from a JSON file (handy in Cursor or CI):
supersendtx automations create --file ./welcome.json
supersendtx automations activate --id "$AUTOMATION_ID"Then send the trigger event from your app:
curl -X POST https://api.supersendtx.com/events \
-H "Authorization: Bearer $SUPERSENDTX_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: evt_user_created_123" \
-d '{
"name": "user.created",
"user_id": "user_123",
"email": "user@example.com",
"data": {
"name": "Ada Lovelace"
}
}'Response:
{
"event": {
"id": "ae_123",
"name": "user.created",
"user_id": "user_123",
"email": "user@example.com",
"data": { "name": "Ada Lovelace" },
"source": "api",
"created_at": "2026-07-26T12:00:00.000Z"
},
"matched_automations": 1,
"resumed_runs": 0
}See docs/api/automations.md and docs/api/events.md.
Next steps
- Docs home: docs.supersendtx.com
- API reference: docs.supersendtx.com/api-reference
- Next.js quickstart: docs.supersendtx.com/frameworks/nextjs
- Node.js quickstart: docs.supersendtx.com/frameworks/node
- Send API:
docs/api/emails.md - Domains API:
docs/api/domains.md - Inbound email API:
docs/api/inbound.md - Deliverability:
docs/api/deliverability.md - Events:
docs/api/events.md - Templates:
docs/api/templates.md - Automations:
docs/api/automations.md - SMTP status:
docs/api/smtp.md - Webhooks:
docs/api/webhooks.md - AI onboarding: docs.supersendtx.com/llms.txt,
public/llms.txt,docs/ai/agent-skill.md,docs/ai/mcp.md - OpenAPI spec: docs.supersendtx.com/openapi.yaml ·
openapi/supersendtx.yaml - Product plan:
PLAN.md