The soft-failure problem
The failure modes that hurt most are the ones that still return a success status. A search endpoint that returns an empty result set because the index is gone. A pricing API that falls back to a cached default when its upstream is down. An auth service that returns 200 with an error object in the body.
Every one of those looks perfectly healthy to a monitor that only reads the status line. Assertions on the body are what turn a liveness check into a correctness check.
- Empty-but-successfulA 200 with zero results where results are always expected.
- Error in the envelopeAPIs that wrap failures in a 200 response with an error field.
- Silent fallbackDegraded cached data served in place of a live upstream.
- Schema driftA field renamed or removed by a deploy, breaking clients while returning 200.
Latency as a failure condition
For an API, slow is a category of broken. A checkout endpoint that takes eleven seconds has failed even though it eventually answered, because the client timed out long before.
Set an explicit maximum response time per monitor and SutramX grades against it. Breaching the budget marks the check as failed and, once confirmed across regions, opens an incident with the same seriousness as a connection refusal.
Authenticated and stateful endpoints
Public health endpoints are easy to monitor and rarely representative. The routes that matter usually require credentials. SutramX stores per-monitor headers encrypted at rest and attaches them to every probe, letting you monitor authenticated paths directly.
For endpoints that mutate state, point monitors at a dedicated synthetic account or an idempotent verification route so that continuous checking does not pollute production data.
Specifications
| Methods | GET, POST, PUT, PATCH, HEAD, DELETE |
|---|---|
| Request body | JSON or arbitrary raw payload |
| Custom headers | Yes — stored encrypted at rest |
| Body assertions | Keyword and pattern matching |
| Latency budget | Configurable max response time per monitor |