External Cron Job Service — Documentation
Your cron jobs, running like clockwork — without you having to think about it.
This guide walks you through everything you need to know to get the most out of your External Cron Service dashboard. Whether you're triggering WordPress scheduled tasks, pinging an API, or firing webhooks on a schedule, you'll find it covered here.
Your Dashboard
When you log in and visit your cron jobs page, you'll see the Cron Jobs Dashboard — your central command center.
The Stats Bar
At the top of the dashboard you'll find a quick summary showing:
- Total Jobs — how many cron jobs you've created
- Active — jobs currently running on schedule
- Paused — jobs you've temporarily stopped
- Errors — jobs that have hit repeated failures
- Jobs Used — how many of your plan's job slots you've used (e.g. 3/10)
This gives you a bird's-eye view of your setup without having to dig into each job individually.
Filtering and Searching
Need to find a specific job? Two tools make that easy:
- Status Filter — Filter the list to show only Active, Paused, or Error jobs
- Search — Type part of a job name or URL to quickly locate what you're looking for
Creating a Cron Job
Click the "Add New Job" button in the top-right corner of the dashboard. A form will appear with two sections: the essentials and advanced options.
The Essentials
| Field | What It Does |
|---|---|
| Job Name | A friendly label so you can quickly identify this job (e.g. "Nightly Database Cleanup") |
| Method | The HTTP method to use: GET, POST, PUT, DELETE, PATCH, or HEAD |
| URL | The full URL to call when the job runs (e.g. https://yoursite.com/wp-cron.php?doing_wp_cron) |
| Schedule Type | How often the job should run — choose from Interval, Daily, or Weekly |
Schedule Types Explained
Interval — Runs repeatedly at a fixed interval. Options include every 1 minute, 5 minutes, 10 minutes, 15 minutes, 30 minutes, 1 hour, 2 hours, 6 hours, 12 hours, or 24 hours. The minimum interval available depends on your plan.
Daily — Runs once per day at a specific time you choose (e.g. 03:00 AM). Great for nightly cleanup tasks, backups, or report generation.
Weekly — Runs once per week on the day and time you choose (e.g. every Monday at 06:00 AM). Perfect for weekly summaries or maintenance tasks that don't need to run daily.
Using Templates
Don't want to fill everything in from scratch? When creating a new job, you'll see a selection of pre-built templates to get you started quickly:
- WordPress WP-Cron — Automatically fills in the URL for triggering WordPress scheduled tasks
- Laravel Scheduler — Pre-configured for Laravel's schedule runner endpoint
- Generic Health Check — Simple GET request to check if a URL is responding
- Webhook Trigger — POST request with a JSON payload, ready for webhook integrations
Just pick a template, adjust the URL, and you're done.
Advanced Options
Click "Advanced Options" to reveal additional configuration:
Custom Headers — Add any HTTP headers your endpoint requires. Click "+ Add Header" to add key-value pairs. Common uses include authentication tokens (Authorization: Bearer your-token) or custom identifiers.
Request Body — Available when using POST, PUT, or PATCH methods. Choose from:
- JSON — Sends a JSON payload (e.g.
{"trigger": "cron"}) - Form Data — Sends traditional form-encoded data
- Raw — Sends the body as plain text
Timeout — How long (in seconds) the service should wait for a response before considering the request failed. Default is 30 seconds, and the maximum depends on your plan.
Retry Attempts — If a request fails, how many times should it retry? Set between 0 and 5 attempts. Defaults to 3 retries, giving your endpoint a fair chance to recover from temporary hiccups.
Timezone — Sets which timezone the job's schedule should follow. Particularly important for daily and weekly schedules where you want tasks to run at a specific local time.
Managing Your Jobs
Each job in your list shows its name, URL, current status, schedule, last run time, and most recent HTTP status code.
Pausing and Resuming
Need to temporarily stop a job? Pause it. The job stays in your list but won't execute until you Resume it. When you resume a paused job, its failure counter resets and it's immediately queued for execution — no waiting for the next scheduled time.
Run Now
Want to trigger a job immediately without waiting for the next scheduled time? Hit "Run Now". The job gets queued for immediate execution by the next available node. This is perfect for testing a new job or verifying that a fix worked.
Editing a Job
Click on a job to open the edit form. Update any field — name, URL, method, schedule, headers, body, timeout, retries, or timezone — and save. Changes take effect immediately.
Deleting a Job
No longer need a job? Delete it. You'll be asked to confirm, and once deleted, the job and all its execution logs are permanently removed.
Execution Logs
Click on any job to open its Job Details view, which includes a full Execution History.
Each log entry shows:
| Column | What It Shows |
|---|---|
| Time | When the execution happened |
| Status Code | The HTTP response code (e.g. 200, 404, 500) |
| Response Time | How long the request took, in milliseconds |
| Node | Which execution node handled the request |
| Result | Whether the execution was successful or failed |
| Error | If something went wrong, what the error message was |
What Counts as Success?
An execution is considered successful if it receives an HTTP response code in the 2xx range (200–299). Anything else — 4xx errors, 5xx errors, timeouts, or connection failures — is treated as a failure.
Log Retention
The service automatically keeps the last 10 successful and last 10 failed executions per job. Older logs are pruned automatically to keep things tidy. A broader cleanup also runs daily based on your platform's log retention policy.
Exporting Logs
Need to share or analyze your job's execution history? Click the "Export Logs" button at the bottom of the Job Details view to download them.
Alerts and Notifications
The service keeps an eye on your jobs and lets you know when something goes wrong — and when it recovers.
Failure Alerts
When a job hits a streak of consecutive failures (the default threshold is 3 in a row), you'll receive a Failure Alert email containing:
- The job name and URL
- The HTTP status code or error
- The number of consecutive failures
- When it last ran
You won't be spammed — only one failure alert is sent per failure sequence. You'll only receive another if the job recovers and then fails again.
Recovery Alerts
When a job that previously failed starts working again, you'll automatically receive a Recovery Alert email confirming:
- The job name and URL
- The new successful status code
- When it recovered
Webhook Notifications
Prefer to handle alerts programmatically? Set up a Webhook URL in your settings. Every failure and recovery event is sent as a JSON POST to your endpoint, including full job details. The payload is signed with HMAC-SHA256 for verification if you've configured a webhook secret.
Email Digests
For a periodic overview of your cron jobs, enable Email Digests in your settings. Choose between:
- Weekly — Receive a summary every week
- Monthly — Receive a summary every month
The digest includes your total job count, how many are active, paused, or in error state.
Settings
Click the Settings (gear) button on the dashboard to configure your notification preferences.
| Setting | What It Does |
|---|---|
| Default Timezone | Sets your preferred timezone for displaying times and scheduling |
| Alert Email | Where failure and recovery alerts are sent. Leave empty to use your account email |
| Alert After Consecutive Failures | How many failures in a row before triggering an alert (1–10, default: 3) |
| Email Digest | Choose None, Weekly, or Monthly summaries |
| Webhook URL | URL to receive JSON notifications for job failures and recoveries |
Understanding Job Statuses
| Status | What It Means |
|---|---|
| 🟢 Active | The job is running normally on its schedule |
| ⏸️ Paused | You've manually paused this job — it won't execute until resumed |
| 🔴 Error | The job has failed 10 or more times in a row and has been automatically stopped. Resume it to try again |
Tip: When you resume an error-state job, its failure counter resets to zero and it's immediately queued for execution. This gives your endpoint a fresh start.
Plan Limits
Your plan determines three things:
| Limit | What It Controls |
|---|---|
| Maximum Jobs | How many cron jobs you can have at once |
| Minimum Interval | The shortest interval available (e.g. Free plans start at 15-minute intervals, higher plans unlock 1-minute intervals) |
| Maximum Timeout | How long each request can wait for a response |
Your current usage is always visible in the "Jobs Used" stat on the dashboard. If you need more capacity, simply upgrade your plan.
Troubleshooting
My job keeps failing
- Check the URL — Open it in your browser and make sure it's accessible. A common mistake is using a URL that requires authentication but not sending the right headers.
- Check the logs — Open the job details and look at the error messages. They'll tell you exactly what's going wrong (e.g.
Connection refused,Timeout,404 Not Found). - Increase the timeout — If your endpoint takes a while to respond (heavy database queries, large file operations), try bumping the timeout up.
- Check your headers — If your endpoint requires an API key or auth token, make sure it's set correctly in the Advanced Options.
- Check for firewall blocks — Some servers block requests that don't come from a browser. You may need to whitelist our execution nodes.
My job is in "Error" status
After 10 consecutive failures, a job is automatically moved to Error status. This prevents unnecessary traffic to an endpoint that's clearly not responding. To fix it:
- Investigate and fix the underlying issue using the execution logs
- Click Resume — this resets the failure counter and immediately queues the job
I'm not receiving alert emails
- Check your Settings to make sure an alert email is configured (or that your account email is valid)
- Check your spam/junk folder
- Make sure the failure threshold hasn't been set too high — if it's set to 10, you won't get an alert until 10 consecutive failures
My job runs at the wrong time
- Verify the timezone is set correctly on the job itself (Advanced Options → Timezone)
- For daily and weekly schedules, also check the Default Timezone in your Settings
I've hit my job limit
Your plan determines how many jobs you can have. If you've maxed out, you can either:
- Delete jobs you no longer need
- Upgrade your plan for a higher limit
FAQ
Can I send POST requests with a JSON body? Yes. When creating or editing a job, set the method to POST, open Advanced Options, choose "JSON" as the body type, and enter your JSON payload in the body field.
What happens when a job fails? The service retries it automatically (up to your configured retry count). If it keeps failing, consecutive failures are tracked. Once the failure threshold is hit (default: 3), you receive an alert. After 10 consecutive failures, the job is moved to Error status.
Can I run a job on demand? Yes — click "Run Now" on any active or paused job. It'll be queued for immediate execution.
Do retries count as separate failures? Retries happen within a single execution cycle. If all retries fail, that counts as one failure toward the consecutive failure count.
What HTTP methods are supported? GET, POST, PUT, DELETE, PATCH, and HEAD.
Can I add authentication headers?
Absolutely. Use the Custom Headers section in Advanced Options to add Authorization, X-API-Key, or any other headers your endpoint requires.
What's the webhook format? Webhook payloads are sent as JSON POST requests with the following structure:
{
"event": "job_failure",
"timestamp": "2025-01-15T10:30:00+00:00",
"job": {
"id": 42,
"name": "My Cron Job",
"url": "https://example.com/api/cron",
"status": "active",
"last_status_code": 500,
"consecutive_failures": 3,
"last_run_at": "2025-01-15 10:30:00"
}
}
Events are either job_failure or job_recovery. If you've set a webhook secret, the payload is signed via HMAC-SHA256 in the X-Signature header.
How are my jobs actually executed? Your jobs are executed by distributed server nodes across multiple locations. Each node polls for pending jobs, claims them atomically (preventing duplicate execution), makes the HTTP request, and reports back the result. If a node goes down, another node automatically picks up its work.
Is there a way to get a summary without logging in? Yes — enable Email Digests in your Settings. You'll receive a periodic summary with your total, active, paused, and error job counts.
Can I set different alert emails for different jobs? Not currently — alert emails are set at the account level in Settings. All job alerts go to the same email address.