Install in two minutes
Botalive is a dead-man switch. Your routine says "start" and "ok" (or "fail"). If "ok" stops arriving on schedule, you get alerted. Nothing to install on your side beyond two HTTP calls.
1. Get a key
Sign in, open API key & settings, click Generate new key. Keys look like ba_…. Treat it like a password.
2a. Grok Bot (one paste)
Send this to your bot in chat. It reads the skill, adds a heartbeat to every routine and, on Pro, creates the nightly backup routine.
Install the Botalive skill from https://botalive.dev/skill.md My Botalive key is ba_xxxxxxxxxxxxxxxx Add a heartbeat to every routine and set up the nightly backup.
When the bot asks for approval to run the install, approve it. Then open the dashboard: a setup-test monitor should appear within seconds. The bot's own routines appear after their next run.
The skill file is plain Markdown and works for any agent that can read instructions and make HTTP requests: botalive.dev/skill.md.
2b. Any script, cron job or agent
BOTALIVE_KEY=ba_xxxxxxxx
# at the start of the job
curl -s -X POST https://botalive.dev/api/beat \
-H "Authorization: Bearer $BOTALIVE_KEY" -H "Content-Type: application/json" \
-d '{"monitor":"nightly-report","status":"start"}'
# ... the job does its work ...
# at the end
curl -s -X POST https://botalive.dev/api/beat \
-H "Authorization: Bearer $BOTALIVE_KEY" -H "Content-Type: application/json" \
-d '{"monitor":"nightly-report","status":"ok","duration_ms":8120,"interval_s":86400}'
Only a URL available? A GET works too: https://botalive.dev/api/beat?monitor=nightly-report&status=ok with the same Authorization header.
How detection works
- Monitors are created automatically on the first beat. Free plan allows 3; Pro 200; Team 500.
- Interval: pass
interval_sonce, or let Botalive learn it from the median gap of your last runs (after 3 completed runs, with 15% slack, minimum 5 minutes). - Grace: 5 minutes after the expected time the monitor turns late; after that it is down and you are alerted. One alert per incident, then a recovered note when the next ok arrives.
- A
startwith nook/failinside the interval counts as down, with a note that the run probably hung. failalerts immediately, at most once per hour per monitor.- Checks run every minute.
API reference
POST /api/beat
Auth: Authorization: Bearer ba_…. JSON body:
{
"monitor": "string, required, max 120 chars",
"status": "start | ok | fail (default ok)",
"duration_ms": 1234, // optional
"note": "max 500 chars", // optional, shown in dashboard and alerts
"bot": "label", // optional, e.g. the bot's display name
"interval_s": 86400, // optional, 300..2678400
"meta": {"usage_pct": 42} // optional object
}
Returns {"ok":true,"state":"ok","expected_interval_s":86400}. Errors: 401 bad key, 402 plan limit, 400 bad input.
POST /api/backup Pro
Raw body up to 50 MB, any content type. Optional header X-Label. Keeps the 14 most recent. GET /api/backup lists them. Download from the dashboard (signed URLs, 5 minutes).
GET /api/status
Public. Anonymous fleet aggregates plus Grok Bot platform component status. Cached 60 s.
Alert channels
Email is included on every plan and goes to your account address by default. Pro and Team add Slack incoming webhooks, Discord webhooks and generic JSON webhooks. Generic payload:
{"title":"Bot silent: morning-brief","body":"…","kind":"missed","monitor":"morning-brief","expected_interval_s":86400,"last_beat_at":"2026-11-01T06:00:12Z"}
Use Send test alert in the dashboard to verify a channel.
Backups: what to put in them
For Grok Bot: your skills folder, routine definitions and memory files, tarred and gzipped. The skill file instructs the bot to do this nightly at 03:00. Botalive never opens the archive. Restore is manual: download, extract, paste back into the bot.
Support
hello@botalive.dev. Replies within one business day.