A load balancer, an orchestrator and a monitoring system each want a health endpoint, and two services answering differently is two integrations.
GET /health
{
"status": "ok",
"checks": {
"database": { "status": "ok", "ms": 2 },
"cache": { "status": "ok", "ms": 1 }
},
"version": "2021.11.3",
"commit": "a41f2b8"
}
// 200 for ok and degraded, 503 for down.
// no external dependencies in the check.
Excluding third-party dependencies is the rule that matters most: including a payment provider means their outage restarts your containers, which converts their incident into yours. The version and commit fields are the underrated part — during an incident, “which build is actually running” is a question that otherwise requires shell access. Agreeing the shape once and implementing it in both runtimes is an afternoon that pays back on every subsequent tool.