Skip to main content
GET
/
health
Health
curl --request GET \
  --url https://api.example.com/health
Posture: Public no-auth read. This endpoint is part of the current promoted public surface.
GET /health is public and returns a direct object, not a success wrapper. The endpoint now includes a runtime block derived from the internal data SDK. That block is the fastest way to confirm whether the API is seeing self-hosted Convex or a fallback posture.

Response Shape

{
  "status": "healthy",
  "timestamp": "2026-04-20T12:00:00.000Z",
  "version": "v1",
  "uptime": 1234.56,
  "environment": "development",
  "services": {
    "database": {
      "status": "healthy",
      "responseTime": 12
    },
    "api": {
      "status": "healthy",
      "version": "v1"
    },
    "configuration": {
      "supabaseUrl": true,
      "anonKey": true,
      "serviceKey": false,
      "ready": false
    }
  },
  "runtime": {
    "targetBackend": "convex_self_hosted",
    "currentPersistence": "mixed_runtime_and_legacy",
    "apiCutoverStage": "d3_internal_runtime_authoritative",
    "publicReadSurface": "internal_runtime_proof_only",
    "notes": [
      "Self-hosted Convex is currently authoritative for internal runtime proof at http://[::1]:3210."
    ]
  }
}

Notes

  • 200 means healthy or degraded-but-operational.
  • 503 means unhealthy.
  • The endpoint also returns system info, endpoint URLs, and feature flags for the local runtime.
  • services.configuration still reports legacy Supabase env readiness during the Wave D cutover.
  • runtime.currentPersistence is the field to use when checking Convex runtime authority.