Cronlytic cron job scheduler API via curl. Use this skill to create, manage, pause/resume scheduled HTTP requests and webhook automation.
/plugin marketplace add vm0-ai/api0/plugin install api0@api0This skill inherits all available tools. When active, it can use any tool Claude has access to.
Use Cronlytic via direct curl calls to schedule and manage cron jobs that trigger HTTP requests/webhooks.
Official docs:
https://www.cronlytic.com/api-documentation
Use this skill when you need to:
export CRONLYTIC_API_KEY="your-api-key"
export CRONLYTIC_USER_ID="your-user-id"
https://api.cronlytic.com/prog/
Important: When using
$VARin a command that pipes to another command, wrap the command containing$VARinbash -c '...'. Due to a Claude Code bug, environment variables are silently cleared when pipes are used directly.bash -c 'curl -s "https://api.example.com" -H "Authorization: Bearer $API_KEY"' | jq .
Check if API is available (no auth required):
bash -c 'curl -s -X GET "https://api.cronlytic.com/prog/ping"' | jq .
Response: {"message": "pong"}
Create a scheduled job to call a webhook:
bash -c 'curl -s -X POST "https://api.cronlytic.com/prog/jobs" -H "X-API-Key: ${CRONLYTIC_API_KEY}" -H "X-User-ID: ${CRONLYTIC_USER_ID}" -H "Content-Type: application/json" -d '"'"'{
"name": "daily-backup",
"url": "https://api.example.com/backup",
"method": "POST",
"headers": {"Authorization": "Bearer token123"},
"body": "{\"type\": \"full\"}",
"cron_expression": "0 2 * * *"
}'"'"' | jq '"'"'{job_id, name, status, next_run_at}'"'"''
Simple health check every 5 minutes:
bash -c 'curl -s -X POST "https://api.cronlytic.com/prog/jobs" -H "X-API-Key: ${CRONLYTIC_API_KEY}" -H "X-User-ID: ${CRONLYTIC_USER_ID}" -H "Content-Type: application/json" -d '"'"'{
"name": "health-check",
"url": "https://api.example.com/health",
"method": "GET",
"headers": {},
"body": "",
"cron_expression": "*/5 * * * *"
}'"'"' | jq .'
Get all your scheduled jobs:
bash -c 'curl -s -X GET "https://api.cronlytic.com/prog/jobs" -H "X-API-Key: ${CRONLYTIC_API_KEY}" -H "X-User-ID: ${CRONLYTIC_USER_ID}"' | jq '.[] | {job_id, name, status, cron_expression, next_run_at}'
Update an existing job (all fields required):
JOB_ID="your-job-id"
bash -c 'curl -s -X PUT "https://api.cronlytic.com/prog/jobs/${JOB_ID}" -H "X-API-Key: ${CRONLYTIC_API_KEY}" -H "X-User-ID: ${CRONLYTIC_USER_ID}" -H "Content-Type: application/json" -d '"'"'{
"name": "daily-backup-v2",
"url": "https://api.example.com/backup/v2",
"method": "POST",
"headers": {"Authorization": "Bearer newtoken"},
"body": "{\"type\": \"incremental\"}",
"cron_expression": "0 3 * * *"
}'"'"' | jq .'
Stop a job from executing:
JOB_ID="your-job-id"
bash -c 'curl -s -X POST "https://api.cronlytic.com/prog/jobs/${JOB_ID}/pause" -H "X-API-Key: ${CRONLYTIC_API_KEY}" -H "X-User-ID: ${CRONLYTIC_USER_ID}"' | jq '{job_id, status}'
Resume a paused job:
JOB_ID="your-job-id"
bash -c 'curl -s -X POST "https://api.cronlytic.com/prog/jobs/${JOB_ID}/resume" -H "X-API-Key: ${CRONLYTIC_API_KEY}" -H "X-User-ID: ${CRONLYTIC_USER_ID}"' | jq '{job_id, status, next_run_at}'
View execution history (last 50 entries):
JOB_ID="your-job-id"
bash -c 'curl -s -X GET "https://api.cronlytic.com/prog/jobs/${JOB_ID}/logs" -H "X-API-Key: ${CRONLYTIC_API_KEY}" -H "X-User-ID: ${CRONLYTIC_USER_ID}"' | jq '.logs[] | {timestamp, status, response_code, response_time}'
Permanently delete a job and its logs:
JOB_ID="your-job-id"
bash -c 'curl -s -X DELETE "https://api.cronlytic.com/prog/jobs/${JOB_ID}" -H "X-API-Key: ${CRONLYTIC_API_KEY}" -H "X-User-ID: ${CRONLYTIC_USER_ID}"' | jq .
Standard 5-field cron: minute hour day month day-of-week
┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31)
│ │ │ ┌───────────── month (1-12)
│ │ │ │ ┌───────────── day of week (0-6, Sun=0)
│ │ │ │ │
* * * * *
| Expression | Description |
|---|---|
*/5 * * * * | Every 5 minutes |
0 * * * * | Every hour at minute 0 |
0 9 * * * | Daily at 9:00 AM |
0 9 * * 1-5 | Weekdays at 9:00 AM |
0 0 1 * * | First day of month at midnight |
30 14 * * 0 | Sunday at 2:30 PM |
0 */6 * * * | Every 6 hours |
| Status | Description |
|---|---|
pending | Scheduled, waiting for next_run_at |
paused | Paused, won't execute |
success | Last execution succeeded |
failed | Last execution failed |
quota_reached | Skipped due to plan quota |
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Job name (1-50 chars, alphanumeric/-/_) |
url | string | Yes | Target URL (HTTP/HTTPS) |
method | string | Yes | HTTP method (GET, POST, PUT, DELETE) |
headers | object | Yes | Request headers (can be {}) |
body | string | Yes | Request body (can be "") |
cron_expression | string | Yes | 5-field cron expression |
-), underscores (_)^[a-zA-Z0-9_-]+$Valid: my-job, test_job_1, API-Health-Check
Invalid: my job (space), test@job (@), api.health (.)
| Field | Description |
|---|---|
job_id | Unique job identifier |
name | Job name |
url | Target URL |
method | HTTP method |
status | Current job status |
cron_expression | Schedule expression |
next_run_at | Next scheduled execution (ISO timestamp) |
created_at | Creation timestamp |
/ping to warm up the API (Lambda cold start)