Send email from your app in about five minutes. Transactional send is included on the free tier (3,000 emails/mo). Hire Ranla when you want lifecycle campaigns and the agent on top of the same stack.
Ranla — Quickstart
Send your first transactional email in about five minutes.
Migrating from another provider? Start with Resend, Postmark, Amazon SES, or SendGrid, then mirror send + webhook flows from the hosted API Explorer.
Building auth email? See password reset, Supabase Auth, and Clerk / Auth.js.
Using React Email components? See Send React Email.
Hosted docs: docs.ranla.ai
Dashboard: app.ranla.ai
API: https://api.ranla.ai
For AI agents
- Index: docs.ranla.ai/llms.txt
- Full bundle: docs.ranla.ai/llms-full.txt
- OpenAPI: docs.ranla.ai/openapi.yaml
- Agent skill notes: docs.ranla.ai/ai/agent-skill
- MCP server: docs.ranla.ai/ai/mcp (
ranla-mcpon npm) - AI app builders: docs.ranla.ai/builders (Lovable, Replit, Bolt, Base44, v0 prompts)
Use the dashboard Get started page to copy a personalized setup prompt with your API key and sandbox rules.
1. Create an account
- Open the dashboard at app.ranla.ai.
- Sign up with email + password (or email code if you prefer).
- If using email code: enter the code emailed to you.
2. Send a sandbox test (fastest path)
On Get started (/overview), choose one of two doors:
Set it up here (dashboard)
- Click Send test email. We create an API key if needed and send to your account email (sandbox sender before DNS; your verified domain after).
- Check your inbox for the test message.
- Copy the
rnl_…secret if shown (once).
No domain or DNS required for the first sandbox send. After you verify a domain, the same button self-tests from that domain (still to your account email on Sandbox).
Use with Cursor or Claude
- On Get started, click Copy setup prompt or Install in Cursor.
- Paste the prompt into your editor, or add the
ranla-mcpMCP server with your API key. - Let the agent wire
POST /emails(or the SDK) into your app and run the sandbox self-test.
See docs/ai/agent-skill.md and docs/ai/mcp.md.
3. Create an API key (if you skipped the dashboard flow)
- Go to API Keys → Create (or use an existing
rnl_…key). - Copy the secret — it is shown once.
export RANLA_API_KEY=rnl_your_key_here4. Verify a sending domain (DNS setup — self-test from your domain on free)
Add and verify your domain on Sandbox to complete DNS setup. On the free plan you can self-test from your verified domain to your account email to confirm DNS and branding. Free production (send to other recipients) unlocks after a verified domain and a payment method on file — we do not charge until you upgrade. Caps: 3,000 emails/mo · 100/day · 1 domain. Upgrade to Pro or Scale for more volume.
Dashboard (recommended)
- Go to Domains → Add domain and enter your domain (e.g.
yourdomain.com). - On the domain page (or in guided setup):
- If your DNS is on Cloudflare: click Sign in to Cloudflare when offered — authorize once and we add the records.
- Or Settings → Integrations → paste a Cloudflare API token (Zone DNS Edit) → Save, then Apply DNS (Cloudflare).
- If your DNS is at GoDaddy: switch to GoDaddy, paste an API key + secret for a one-time apply.
- Otherwise paste the shown TXT records at your DNS host (merge SPF if you already have one).
- Click 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 {selector}._domainkey.yourdomain.com |
DKIM (domain signing key) |
CNAME rp.yourdomain.com |
Return path → rp.supersendtx.com |
TXT yourdomain.com |
SPF (include:spf.supersendtx.com) |
TXT _dmarc.yourdomain.com |
DMARC |
Ownership, SPF, DKIM, and return-path are required to verify. Verify also confirms mail-server DKIM readiness so sends are signed with your domain (not the shared pool). Local Docker auto-verifies when RANLA_DEV_AUTO_VERIFY=true.
If a domain is already attached to another Ranla 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 RANLA_API_KEY=rnl_your_key_here
npx -y --package=ranla-cli -- ranla domains add yourdomain.com
# Uses the Cloudflare token stored in Ranla (no local CLOUDFLARE_API_TOKEN needed)
npx -y --package=ranla-cli -- ranla domains apply yourdomain.com --provider cloudflare
npx -y --package=ranla-cli -- ranla domains verify yourdomain.comOptional override: set CLOUDFLARE_API_TOKEN locally to apply with a machine token instead of the dashboard one. Vercel uses VERCEL_API_TOKEN and optional VERCEL_TEAM_ID the same way. GoDaddy can use stored dashboard credentials or local GODADDY_API_KEY / GODADDY_API_SECRET.
5. Send from your app
Pick one integration method below. Replace [email protected] with an address on your verified domain.
Sandbox self-test (before DNS)
Use the shared sandbox sender on mail.supersendtx.com, but only send to your own account email:
curl -X POST https://api.ranla.ai/emails \
-H "Authorization: Bearer $RANLA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "[email protected]",
"to": "[email protected]",
"subject": "Sandbox check",
"html": "<p>Ranla sandbox works.</p>"
}'Once your domain is verified, you can self-test from your own domain to your account email:
curl -X POST https://api.ranla.ai/emails \
-H "Authorization: Bearer $RANLA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "[email protected]",
"to": "[email protected]",
"subject": "Verified domain check",
"html": "<p>My domain works.</p>"
}'Add a payment method at Settings → Billing to unlock Free production (send to other recipients). Upgrade to Pro or Scale for more volume.
curl (production)
curl -X POST https://api.ranla.ai/emails \
-H "Authorization: Bearer $RANLA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "[email protected]",
"to": "[email protected]",
"subject": "Hello from Ranla",
"html": "<p>It works.</p>"
}'Node.js SDK
npm install @supersend/ranlaimport { Ranla } from '@supersend/ranla'
const client = new Ranla(process.env.RANLA_API_KEY!)
const { id, status } = await client.emails.send({
from: '[email protected]',
to: '[email protected]',
subject: 'Hello from Ranla',
html: '<p>It works.</p>',
})
console.log(id, status)CLI
RANLA_API_KEY=$RANLA_API_KEY npx -y --package=ranla-cli -- ranla emails send \
--from [email protected] \
--to [email protected] \
--subject "Hello from Ranla" \
--html "<p>It works.</p>"Or install globally: npm install -g ranla-cli, then run @supersend/ranla emails send ….
Success response
{
"id": "msg_abc123…",
"status": "sent"
}Plan limits
When billing is enabled, Sandbox is for integration and self-test sends (hard daily and monthly caps). Until Free production is unlocked, sends are limited to your account email — from the shared sandbox sender or from a verified domain. Unlock Free production with a verified domain and a payment method on file (no charge until you upgrade). Paid Pool and Dedicated plans meter overage past included volume. Over Free/Sandbox 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 rnl_… |
| 403 | From domain not verified, sandbox/verified-domain recipient mismatch, or send to other recipients without Free production unlocked | Verify domain; self-test to your account email; add a payment method at Settings → Billing to unlock Free production |
| 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.ranla.ai/api-reference
6. 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.ranla.ai/api-reference for payload shape and signature verification.
7. 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.
8. Event-driven automations (optional)
Ranla 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.ranla.ai/events \
-H "Authorization: Bearer $RANLA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: evt_user_created_123" \
-d '{
"name": "user.created",
"user_id": "user_123",
"email": "[email protected]",
"data": {
"name": "Ada Lovelace"
}
}'Response:
{
"event": {
"id": "ae_123",
"name": "user.created",
"user_id": "user_123",
"email": "[email protected]",
"data": { "name": "Ada Lovelace" },
"source": "api",
"created_at": "2026-07-26T12:00:00.000Z"
},
"matched_automations": 1,
"resumed_runs": 0,
"cancelled_runs": 0
}See docs/api/automations.md and docs/api/events.md.
Next steps
- Docs home: docs.ranla.ai
- API reference: docs.ranla.ai/api-reference
- Next.js quickstart: docs.ranla.ai/frameworks/nextjs
- React Email: docs.ranla.ai/guides/react-email
- Node.js quickstart: docs.ranla.ai/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 relay:
docs/api/smtp.md - Webhooks:
docs/api/webhooks.md - AI onboarding: docs.ranla.ai/llms.txt, docs.ranla.ai/llms-full.txt,
docs/ai/agent-skill.md,docs/ai/mcp.md(ranla-mcpnpm package) - OpenAPI spec: docs.ranla.ai/openapi.yaml