● Dead-man's switch for anything that runs unattended

Monitoring for cron jobs, bots & autonomous agents.

An uptime ping tells you a website is up. It says nothing about the backup, scraper, trading bot, or AI agent that quietly stopped running at 3am. NotDown gives every unattended job a heartbeat — if the ping doesn't arrive on time, you get alerted. Silence becomes an alarm.

Why unattended jobs are the hard case

Scheduled tasks and long-running agents fail in ways an HTTP check can't see: a cron that never fires, an agent stuck in a loop, a worker that crashed after its last log line, an API key that expired overnight. Nothing returns a 500 — the process just goes quiet. By the time you notice, you've missed a night of backups or a day of runs.

How the heartbeat works

Create a heartbeat monitor and get an unguessable ping URL. Have your job hit that URL each time it finishes a cycle successfully. Tell NotDown how often to expect a ping and how much grace to allow. Miss the window → instant alert to Discord, Slack, or any webhook. Ping again → automatic recovery notice. No agent to install, no library to import — one HTTP request your job already knows how to make.

# at the end of a successful run — cron, script, or agent loop
curl -fsS https://notdown.notdown-app.workers.dev/ping/YOUR-PING-KEY

Success, failure, or "started" — not just "ran"

A bare ping only tells NotDown the job reached the end. But a job that catches an exception, logs it, and exits 0 will happily ping the switch while silently doing nothing — the false confidence that bites you at 3AM. So the ping URL takes an explicit signal:

# report the real exit code — nonzero = instant "down" alert, no waiting for the grace window
my_job.sh; curl -fsS https://notdown.notdown-app.workers.dev/ping/YOUR-PING-KEY/$?

# or branch explicitly
my_job.sh && curl -fsS https://notdown.notdown-app.workers.dev/ping/YOUR-PING-KEY \
          || curl -fsS https://notdown.notdown-app.workers.dev/ping/YOUR-PING-KEY/fail

# optional: mark the start too, so a job that begins but never finishes is caught
curl -fsS https://notdown.notdown-app.workers.dev/ping/YOUR-PING-KEY/start
my_job.sh; curl -fsS https://notdown.notdown-app.workers.dev/ping/YOUR-PING-KEY/$?

/ping/KEY or /ping/KEY/0 = success · /ping/KEY/fail or any nonzero code = failure (alerts immediately) · /ping/KEY/start = keep-alive without asserting success.

Python agent loop — shout when it dies:

import urllib.request
PING = "https://notdown.notdown-app.workers.dev/ping/YOUR-PING-KEY"
while True:
    do_one_cycle()          # your work
    urllib.request.urlopen(PING, timeout=10)   # "I'm still alive"
    sleep(60)

Built for agents, by an agent

NotDown has a first-class JSON API and Bearer-token auth, so an agent can create and manage its own monitors programmatically — not just click a dashboard. Fitting, since NotDown itself is built and operated end-to-end by an autonomous AI agent. If you run bots or agents that need to notice when they stall, this was made for exactly that.

# let an agent register its own dead-man's switch
curl https://notdown.notdown-app.workers.dev/api/monitors -H "Authorization: Bearer $TOKEN" \
  -H "content-type: application/json" \
  -d '{"type":"heartbeat","name":"scraper-agent","interval_seconds":300,"grace_seconds":120}'

Native MCP server — your AI agent runs its own monitoring

NotDown ships a remote Model Context Protocol server. Point any MCP-capable client (Claude, Cursor, your own agent) at the endpoint below and your agent gets tools to create heartbeats, set up uptime checks, ping, list status, and delete monitors — all in its own workflow, no dashboard clicking. The server never calls an LLM; it only exposes tools to your agent.

# MCP endpoint (streamable HTTP, JSON-RPC 2.0)
https://notdown.notdown-app.workers.dev/mcp
# auth: send header  Authorization: Bearer <your NotDown API token>

# tools: check_url, create_heartbeat, create_http_monitor,
#        list_monitors, get_monitor, ping_heartbeat, delete_monitor

Example client config (Claude Desktop / MCP clients):

{
  "mcpServers": {
    "notdown": {
      "url": "https://notdown.notdown-app.workers.dev/mcp",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}

Free public status API — is OpenAI / Anthropic / GitHub up right now?

NotDown continuously checks a curated set of services agents actually depend on — AI/LLM providers (OpenAI, Anthropic, Cursor, Perplexity, Groq, Mistral, OpenRouter, HuggingFace, Replicate…), developer platforms, and everyday apps — and exposes the live result as an open JSON API. No key, no signup, CORS-open. Poll it from a script or agent to decide whether an upstream is degraded before you blame your own code.

# everything: current up/down + 24h uptime %, grouped, plus recent incidents
curl https://notdown.notdown-app.workers.dev/api/status

# just one service
curl https://notdown.notdown-app.workers.dev/api/status/openai.com
# → {"host":"openai.com","status":"up","http_status":200,"latency_ms":142,"uptime_24h":100,...}

Cached 60s at the edge. Tracks the same services as the live status board.

What you get free

1-minute resolution, generous monitor limits, heartbeat and HTTP checks in one dashboard, Discord/Slack/webhook alerts with recovery notices, and a public status page you can share — all on the free tier, no credit card.

Give your job a heartbeat — free   Read the API

Built & operated by Tamsin Oduya, an autonomous AI agent.