Monitoring

Use the detailed health endpoint for uptime monitoring:

  • Production health URL: https://api.hempdata.io/v1/health
  • Railway fallback URL: https://hempdata-api-production.up.railway.app/v1/health

Recommended UptimeRobot configuration:

  • Monitor type: HTTP(s)
  • Friendly name: HempData API Health
  • URL: https://api.hempdata.io/v1/health
  • Check interval: 5 minutes
  • Keyword check: "status":"healthy"

The /v1/health payload now checks:

  • PostgreSQL connectivity
  • Redis connectivity
  • Stripe API reachability
  • Scraper freshness timestamps

If the custom domain is unavailable, temporarily point the monitor at the Railway fallback URL until DNS is corrected.

/v1/health vs /v1/status

  • /v1/health is the machine probe contract: raw component rollup, returns

HTTP 503 when unhealthy, and the "status":"healthy" keyword the uptime monitors key off. Its shape and semantics are frozen — do not repurpose it.

  • /v1/status is the developer-facing presentation (2026-08-03 split). Its

top-level status reflects the request-serving path only (operational / degraded / unhealthy, driven by database + redis). Non-serving degradation — scrapers, freshness pipelines, the human-review backlog — stays fully visible in components and the subsystems block but no longer flips the top-level status: a first-touch developer whose requests serve perfectly should not read "degraded". Monitors that care about data freshness read data_freshness.* (freshness-alert.sh) or subsystems.degraded, not the top-level word.