API Endpoint Monitoring: Beyond the 200 OK
Your HTTP monitor says UP. Status: 200. Response time: 142ms. Everything looks fine.
Meanwhile, your payment API is returning {"error": "database connection timeout"} with a 200 status code, and your users are watching their checkouts fail while your monitoring dashboard shows green.
This is the most common blind spot in API monitoring: treating HTTP status codes as the source of truth for whether an API is actually working.
A 200 means your server received the request and sent back a response. It says nothing about whether that response was correct, fast enough, or from a database that's still connected. Here's what you should actually be monitoring.
Status Codes Are the Floor, Not the Ceiling
Status codes matter and you should absolutely check them. If your API starts returning 500s, you want to know immediately. But the absence of 4xx and 5xx errors doesn't mean your API is healthy.
Several failure modes produce misleading status codes:
Error responses wrapped in 200 — Some APIs (especially older ones, or APIs with custom error handling layers) return {"success": false, "error": "..."} with HTTP 200. Your status code check passes, but the API is failing for every request.
Cached responses after a backend failure — A reverse proxy or CDN returns a cached 200 response while your actual backend is down. Users see stale data; your monitor sees green.
Partial failures — A microservice that aggregates data from multiple sources might return 200 with partial results when some upstream services are down. From the outside, it looks fine. Your users notice the missing data.
Authentication infrastructure failures — Your API returns 200 for unauthenticated routes while your auth service is down. Any endpoint that requires authentication is silently failing.
Response Time Is a First-Class Signal
Response time degradation is often the first warning sign before an outage.
A database that's about to fall over starts responding slowly before it stops responding entirely. A query that normally takes 20ms starts taking 800ms, then 2000ms, then times out. If your monitoring only checks status codes, you miss the 30-minute window where you could have caught the problem and intervened.
Track response times over time and set thresholds that actually match your API's expected behavior. Not a generic "alert if over 30 seconds" -- that's the default for catching complete timeouts, not degradation. For a health check endpoint that normally responds in 50ms, a threshold of 500ms will catch early degradation long before users start complaining.
Different endpoints have different baselines. A lightweight status check and a complex aggregation query should have separate, calibrated thresholds. StatusDude lets you configure response time alerts per monitor.
What to Actually Check
Beyond status codes and response times, here's what's worth monitoring for different API types:
Authentication endpoints
Your login endpoint is business-critical. Set a 1-minute check interval and monitor it from at least two regions. What to verify:
- Returns 401 on invalid credentials (not 200 or 500)
- Returns something valid on a test account (if you maintain one)
- Response time is under your defined threshold
- SSL certificate is valid and not expiring soon
Payment and transactional APIs
These carry the most business risk. If Stripe webhook processing goes down, you're losing revenue silently.
- Monitor your webhook receiver endpoint with POST requests, not just GET
- Check that it returns the correct status code your payment provider expects (usually 200)
- Use a heartbeat monitor alongside the HTTP monitor to verify your payment processing workers are actually running
Public-facing REST APIs
If you expose an API to customers, they're depending on it. Monitor your most-used endpoints at short intervals and set up a public status page so customers can see your API's historical uptime.
Internal service endpoints
These are easier to overlook because they're not directly customer-facing. But a slow internal service creates cascading slowdowns in every API that depends on it. Monitor your internal service health endpoints and treat them with the same seriousness as public endpoints -- they just don't need multi-region verification.
External vs. Internal Monitoring — You Need Both
External monitoring (from a third-party location outside your network) tells you what your users experience. If your API is returning 200 from inside your network but requests from the internet are timing out, external monitoring catches that. Internal monitoring won't.
Internal monitoring (from a private agent inside your network) lets you monitor services that aren't and shouldn't be publicly exposed: database health endpoints, internal microservices, Redis status pages, queue worker APIs.
This isn't an either/or. The right setup is:
- External monitors on all public API endpoints to catch networking, DNS, and CDN issues
- A private agent on your internal network for services behind your firewall
StatusDude's private agent runs inside your network and reports results back to the cloud dashboard. You get full visibility into internal services without exposing them to the internet -- no open firewall ports, no VPN tunnels.
Multi-Region Matters for APIs Especially
A single monitoring probe can report DOWN because of a routing issue between the probe and your server. If that's a false positive, you've woken up your on-call engineer for nothing. If it's a real regional outage, you need to know which region is affected.
For APIs that serve global traffic, multi-region monitoring does both things: it filters out single-location false positives and tells you whether an outage is global or geographically contained. "Our EU endpoint is down but US is fine" is actionable information that a single-region monitor can't give you.
Set up multi-region verification on any API endpoint that international users depend on, or any endpoint where false positives would trigger expensive on-call responses.
The Silent Failures That Will Get You
Here's the honest list of API failures that status-code-only monitoring completely misses:
- The database is slow — API returns 200, response time creeps from 80ms to 4 seconds over two hours
- A downstream service is down — Your API returns 200 with degraded data because it has graceful fallback logic, but the degraded state is customer-visible
- Authentication is broken — Authenticated endpoints return errors while unauthenticated ones are fine
- A background processor stopped — Your API accepts requests and returns 202 Accepted but the worker processing them has been down since midnight
- Rate limiting is firing at customers — Your API is up, but your highest-traffic customers are getting 429s you're not monitoring for
- An SSL certificate expired on an internal service — Your public API still works, but it can't talk to the internal service that has the expired cert
None of these show up as a 5xx on your main endpoint. They all show up as user complaints.
A Practical Monitoring Checklist for Your API
If you're starting from scratch or auditing your current setup:
- HTTP monitor on your public API health endpoint, 1-minute interval, response time threshold set
- HTTP monitors on your top 3-5 most critical endpoints (auth, core feature, payment)
- SSL certificate monitoring on all domains serving your API
- Heartbeat monitors for any background workers processing API requests
- Private agent monitors for internal service health endpoints
- Multi-region verification enabled for public endpoints
- On-call notification routing for critical endpoints (not just email -- use Slack, WhatsApp, or voice for immediate alerts)
- Status page showing API uptime for customers
The goal isn't perfect monitoring -- it's catching the failures your users will actually feel before they feel them. Status codes are a start. Everything else on this list is what separates monitoring from actually knowing your API is healthy.