SendLit logoSendLit Docs
Self-Hosting

Monitoring and status page

What to watch on a SendLit deployment, and how to publish a status page.

Point an uptime monitor (Uptime Kuma, Upptime, Better Stack, ...) at these endpoints. None of them needs a credential. Check every minute or so.

ComponentCheckHealthy
API processGET <api>/health200
API dependencies (Postgres, Redis)GET <api>/ready200; 503 while starting, shutting down, or when Postgres or Redis is unreachable
DashboardGET <web>/api/health200
MCP endpointPOST <api>/mcp with body {}401 (it's up and asking for a credential)
Open trackingGET <api>/track/open?d=check200 with an image
Unsubscribe pagesGET <api>/unsubscribe/check404 page reading "Invalid unsubscribe link"
API referenceGET <api>/openapi.json200

/ready is the one to alert on: it fails when the API can't reach its database or Redis, which stops sending. Its JSON body lists each check:

{"status":"ready","checks":{"started":true,"accepting_requests":true,"database":true,"redis":true}}

Publish a status page

A public status page shows readers and customers whether sending, the dashboard and links work, with past incidents. Two common options:

  • Upptime: open source, runs on GitHub Actions and GitHub Pages, and records incidents as GitHub issues. Create a repository from the Upptime template, list the checks above in .upptimerc.yml, and point a domain such as status.example.com at its GitHub Pages site with a CNAME record.
  • Uptime Kuma: open source and self-hosted (one Docker container), with built-in status pages and incident posts. Run it somewhere other than the SendLit server, so it still works when that server is down.

Set STATUS_PAGE_URL on the web app to the page's address and the dashboard shows a System status link in the user menu.

On this page