There is a specific dread in learning your app was down from a customer, not a tool. For a solo builder, the first job of monitoring is simple: tell me the instant the API stops answering, before anyone else notices.
Down Costs the Same as Slow
A slow API and a dead API lose you the same visitor. Both end with someone closing the tab. The first time we learned an API was down from a customer rather than a tool, we added the check that follows. Downtime is easy to catch, but only if the check exists before the launch, not after the outage.
What Are the Two Layers of API Health?
| Layer | What it catches | What it misses |
|---|---|---|
| Reachability ping | A total outage, DNS or TLS failure | The half-down state where some requests 500 |
| Real-traffic errors | A rising error rate on live requests | Almost nothing while traffic is flowing |
The second layer is the one most cheap uptime tools miss. An endpoint returning 500s on every third request is technically up. Your users would disagree. The Datadog alternatives roundup covers flat-priced tools that watch both.
What Makes a Good API Health Check?
Give your external check something honest to hit. A dedicated /health route that returns a small JSON payload beats pinging your homepage, because it can also verify the things that break quietly: a live database connection, a required environment variable, a downstream API you depend on. Keep it cheap to compute so the check never adds load of its own, and let real-traffic instrumentation catch the failures a single ping cannot see, like a route that errors for one region or fails on one request in three. Together the two layers cover both total outages and the messier half-down states:
import { Statvisor } from "@statvisor/sdk";
const sv = new Statvisor({ apiKey: process.env.STATVISOR_API_KEY! });
app.use(sv.express());
app.get("/health", (_req, res) => res.json({ ok: true }));Statvisor watches error rate and latency from real requests at a flat price, so the half-down state that a plain ping calls healthy shows up as a spike you can act on.
Where Should the Alert Land?
Detection is useless if the alert dies in an inbox you check twice a day. Route failures to a channel you cannot ignore: a phone push or an SMS for a total outage, a Slack or Discord message for a rising error rate that is not yet critical. Set a threshold that fires on real problems, not single blips, for example three failed checks in a row, or an error rate above two percent sustained for five minutes. Then decide, before launch, who is actually on call. For a solo founder that is always you, so make the alert loud enough to survive being asleep.
Keep It Cheap and Boring
You do not need a status-page empire for a product with a hundred users. One external ping, one health route, and real-traffic error tracking cover it, read as percentiles rather than averages. Check every 30 to 60 seconds from at least two regions so a single network blip does not wake you, and keep a short grace period before the alert fires. When the app grows, layer on the rest from the indie hacker monitoring stack.
Ready to monitor your API in production?
Statvisor gives you latency percentiles, error rates, and request volume for every route, in minutes, not days.
Get started free →