API Reference
Full REST API for managing monitors, alerts, and API keys programmatically.
Authentication
All API endpoints (except ping URLs) require an API key passed as a Bearer token in the Authorization header.
Authorization: Bearer crnd_YOUR_API_KEYGenerate API keys in your dashboard under Settings → API Keys.
Base URL
https://crond.io/api/v1Ping endpoints
/ping/{uuid}Record a successful job run.
/ping/{uuid}Record a successful run with optional metadata.
{ "message": "optional note", "duration_ms": 1234 }/ping/{uuid}/failRecord an explicit failure and trigger alerts immediately.
{ "message": "error description" }/ping/{uuid}/startSignal that a job has started (enables run duration tracking).
Monitors
/monitorsList all monitors.
/monitorsCreate a new monitor.
{
"name": "Nightly backup",
"schedule": "0 2 * * *",
"grace_seconds": 300
}/monitors/{id}Get a single monitor.
/monitors/{id}Update a monitor.
/monitors/{id}Delete a monitor.
Ping history
/monitors/{id}/pingsRetrieve ping history for a monitor. Supports ?limit and ?before query params.
Alert rules (per monitor)
/monitors/{id}/alertsList alert rules attached to a monitor.
/monitors/{id}/alertsAttach an alert rule. Provide EITHER channel_id (named channel) OR channel_type + channel_config (inline, legacy).
{
"channel_id": "uuid-of-named-channel",
"enabled": true
}/alerts/{id}Update an alert rule (toggle enabled or switch channel).
/alerts/{id}Detach an alert rule.
Alert channels (named, reusable)
/alert-channelsList named channels owned by the caller. URL-bearing config fields are masked in this view.
/alert-channelsCreate a named channel. Pass generate_secret_token=true to receive an HMAC signing secret in the response (only shown once).
{
"name": "On-call Slack",
"type": "webhook",
"config": { "url": "https://hooks.slack.com/services/..." },
"generate_secret_token": true
}/alert-channels/{id}Detail view with unmasked config (no secret_token).
/alert-channels/{id}Update name/config or rotate the signing secret in place.
{
"rotate_secret": true
}/alert-channels/{id}Delete a channel. Returns 409 if any monitors still reference it.
/alert-channels/dedupe?dry_run=trueAnalyze duplicate inline alert configs and (when dry_run=false) collapse them into named channels with full transactional safety + backup.
Status page
/status-pageCombined view: slug, slug_editable (Pro gate), public_url, branding fields, and monitor visibility summary.
/status-pageUpdate title, description, slug (Pro+), and visibility toggles. Slug edits return 409 on collision, 400 on reserved name.
{
"title": "Acme Status",
"description": "Real-time status",
"show_uptime": true,
"show_last_ping": false
}/monitors/show-on-statusBulk-toggle which monitors are publicly visible on the status page.
{
"monitor_ids": ["uuid-a", "uuid-b"],
"show": true
}Response format
All responses return JSON. Errors follow this shape:
{
"error": "monitor_not_found",
"message": "No monitor with that UUID exists"
}