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

  1. Open the dashboard at app.supersendtx.com.
  2. Sign up with email + password (or email code if you prefer).
  3. If using email code: enter the code emailed to you.

2. Create an API key

  1. Go to API Keys → Create (or use an existing stx_… key).
  2. Copy the secret — it is shown once.
export SUPERSENDTX_API_KEY=stx_your_key_here

3. Verify a sending domain (CLI or dashboard)

  1. Optional but easiest: Settings → Integrations → paste a Cloudflare API token (Zone DNS Edit) → Save.
  2. Go to Domains → Add domain and enter your domain (e.g. yourdomain.com).
  3. 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.
  4. Optional after verification: set Delivery settings on the domain detail page for:
    • open tracking
    • click tracking
    • tls_mode (opportunistic or enforced)
  5. 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.com

Optional 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 supersendtx
import { 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)

  1. Go to Webhooks in the dashboard (or use the API).
  2. Add your HTTPS endpoint URL.
  3. Copy the signing secret (whsec_…) — shown once.
  4. Verify SuperSendTX-Signature on incoming POSTs.
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?

  1. Create a dedicated inbound subdomain such as inbound.example.com.
  2. Add it with inbound_enabled: true (API) or supersendtx domains add inbound.example.com --inbound true (CLI).
  3. Verify the domain, then publish the returned MX record.
  4. Subscribe to email.received and/or poll GET /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