
Deploy Reloop | (Just Updated) Resend Alternative, Email API for Agents, No Setup
Reloop email API and dashboard, a Resend alternative with its own MTA
auth
Just deployed
/run/reloop
campaigns
Just deployed
inbox
Just deployed
upload
Just deployed
proxy
Just deployed
domain
Just deployed
smtp
Just deployed
/var/spool/kumomta
contacts
Just deployed
redis
Just deployed
/data
postgres
Just deployed
/var/lib/postgresql
nats
Just deployed
/data
dashboard
Just deployed
template
Just deployed
links
Just deployed
Just deployed
api-key
Just deployed
Just deployed
workflow
Just deployed
webhook
Just deployed
logs
Just deployed
Deploy and Host Reloop on Railway
Built for an LLM agent to deploy and use. There is no setup wizard and nothing to fill in: the admin account, its password, the internal secrets and every database password are generated at deploy time, the first-run setup is completed at boot, and the contract below lists every URL, variable name and one script that proves it works.
Reloop is an open-source email platform: a REST API and dashboard for transactional email, with domains, templates, contacts, campaigns, webhooks and logs, built on its own MTA (KumoMTA). It is a self-hosted alternative to Resend and SendGrid. This template runs the full stack.
About Hosting Reloop
This template runs twenty services: a Caddy proxy that is the single public entry point, the auth service, the API services (domain, api-key, webhook, contacts, mail, logs, workflow, upload, template, campaigns, inbox, email), the smtp MTA, the dashboard and links frontends, and postgres, redis and nats as storage and messaging. Postgres, Redis, NATS and the MTA spool sit on volumes. All Reloop images are pinned by digest, so a redeploy never changes the version underneath you.
Everything is served from one domain, the proxy service: the dashboard at /dashboard, the APIs under /api/SERVICE/v1. The first sign-in is the admin user ADMIN_EMAIL (default admin@example.com) with ADMIN_PASSWORD, both on the auth service. Public sign-up is closed.
Limits to know before sending mail. Reloop sends from your own verified domain, so you add the domain, publish the DNS records it shows (SPF, DKIM, DMARC) and verify it before POST /api/mail/v1/send accepts a message. Railway allows outbound SMTP only on the Pro plan, and does not allow inbound port 25, so receiving mail at your own address is not possible on Railway. The API, dashboard, templates, contacts and API keys all work without that.
Agent contract
- Public URL:
https://plus theRAILWAY_PUBLIC_DOMAINof theproxyservice, used below asRELOOP_URL - Private URL:
http://auth.railway.internal:8000(auth); the API services listen on8011to8028on their ownSERVICE.railway.internalname - Credentials:
ADMIN_EMAILandADMIN_PASSWORDon theauthservice; API keys are minted through the API - Auth: sign in once to get a session cookie, mint an API key, then send it as the header
x-api-key: KEYon every API call. No key returns 401. - Health:
GET /healthzreturns 200 with no credentials;GET /api/auth/v1/okreturns{"ok":true}
# run with RELOOP_URL, ADMIN_EMAIL and ADMIN_PASSWORD set
JAR=$(mktemp)
curl -s -o /dev/null -w 'health %{http_code}\n' "$RELOOP_URL/healthz"
curl -s -c "$JAR" -o /dev/null -w 'sign-in %{http_code}\n' -X POST "$RELOOP_URL/api/auth/v1/sign-in/email" \
-H 'content-type: application/json' -d "{\"email\":\"$ADMIN_EMAIL\",\"password\":\"$ADMIN_PASSWORD\"}"
KEY=$(curl -s -b "$JAR" -X POST "$RELOOP_URL/api/api-key/v1/" -H 'content-type: application/json' -d '{"name":"agent"}' | grep -o '"key":"[^"]*"' | head -1 | cut -d'"' -f4)
echo "key ${#KEY} chars"
curl -s -o /dev/null -w 'list-with-key %{http_code}\n' "$RELOOP_URL/api/api-key/v1/" -H "x-api-key: $KEY"
curl -s -o /dev/null -w 'list-no-key %{http_code}\n' "$RELOOP_URL/api/api-key/v1/"
A fresh deploy prints health 200, sign-in 200, a key length above zero, list-with-key 200 and list-no-key 401. From there the same key drives the other services (/api/domain/v1, /api/template/v1, /api/contacts/v1, /api/mail/v1, and so on); the OpenAPI document of each is at its own /openapi path.
Why Deploy Reloop on Railway?
Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.
By deploying Reloop on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.
- Agent-ready - generated secrets, a bootstrapped admin, a contract block and one working script; no wizard before the first API call.
- One public domain - a single proxy fronts the dashboard and every API, with the services private behind it.
- Redeploy-safe - databases, the broker and the MTA spool sit on volumes; passwords and secrets are stable across redeploys.
- Pinned images - every Reloop image is pinned by digest.
Common Use Cases
- Transactional email for your own product - send receipts, password resets and notifications through your own domain instead of a per-email hosted plan.
- Email for AI agents - give an agent an API key to manage domains, templates and contacts and to send mail.
- Campaigns and contact lists - run newsletters with templates, segments and webhooks on infrastructure you control.
Dependencies for Reloop Hosting
- Postgres, Redis and NATS JetStream, all included in this template.
- A sending domain whose DNS you control, and the Railway Pro plan for outbound SMTP.
Deployment Dependencies
- reloop-labs/reloop - upstream project
- KumoMTA - the mail transfer agent Reloop sends through
- Resend API reference - the API style Reloop follows
Template Content
auth
reloopsh/be-authcampaigns
reloopsh/be-campaignsinbox
reloopsh/be-inboxupload
reloopsh/be-uploadproxy
caddy:2.10-alpinedomain
reloopsh/be-domainsmtp
reloopsh/be-smtpcontacts
reloopsh/be-contactsredis
redis:7.4-alpinepostgres
postgres:17.10-alpinenats
nats:2.10-alpinedashboard
reloopsh/fe-dashboardtemplate
reloopsh/be-templatelinks
reloopsh/fe-linksapi-key
reloopsh/be-api-keyworkflow
reloopsh/be-workflowwebhook
reloopsh/be-webhooklogs
reloopsh/be-logs