Deep dependency health check — deephealthcheck
const url = 'https://example.com/api/health/deep';const options = {method: 'GET', headers: {cookie: 'sb-access-token=<sb-access-token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/api/health/deep \ --cookie sb-access-token=<sb-access-token>Superadmin only. Runs external probes (Supabase, Mailgun, Stripe, Fly API) and returns per-service latency and status, plus chores[]: the newest run of every /api/cron/* chore. Use for dashboards/monitoring, not Fly LB checks. The HTTP status follows the Supabase probe only; a failing chore does not change it.
Authorizations
Section titled “Authorizations ”Responses
Section titled “ Responses ”All dependencies healthy
Per-dependency health report (getHealthReport) plus chores[].
object
Newest run of one /api/cron/* chore (public.chore_runs, read through chore_runs_latest()).
object
Chore name, the /api/cron/ route segment
A running row with no finished_at past its timeout reads as timeout
Failure text from the response’s error/errors field, or the thrown message
Newest unbroken streak of failed/timeout runs; a run still inside its window is neither
Present only when the chore read failed; chores is then empty
Not authenticated
object
Human-readable error message
Stable machine-readable error code for client branching
First validation message per field path
object
Structured validation issues (Zod)
object
Seconds until rate limit resets (429 responses)
True if re-linking GitHub may fix the issue
Forbidden
object
Human-readable error message
Stable machine-readable error code for client branching
First validation message per field path
object
Structured validation issues (Zod)
object
Seconds until rate limit resets (429 responses)
One or more dependencies unhealthy
Per-dependency health report (getHealthReport) plus chores[].
object
Newest run of one /api/cron/* chore (public.chore_runs, read through chore_runs_latest()).
object
Chore name, the /api/cron/ route segment
A running row with no finished_at past its timeout reads as timeout
Failure text from the response’s error/errors field, or the thrown message
Newest unbroken streak of failed/timeout runs; a run still inside its window is neither
Present only when the chore read failed; chores is then empty