API Reference
Base URL:
https://cronly.eu/api/v1
Authentication
All API requests require an API key. Include it in the Authorization header:
Authorization: Bearer pk_live_xxx.sk_live_yyy
Queue API
The simplest way to execute a webhook immediately. Just POST the URL and it runs right away.
Queue a request for immediate execution. Creates a one-time job and executes it right away.
Request Body
| Field | Type | Description |
|---|---|---|
url |
string | The URL to call (required) |
method |
string | HTTP method: GET, POST, PUT, PATCH, DELETE (default: POST) |
headers |
object | Custom headers to send (optional) |
body |
string | Request body, max 256KB (optional) |
name |
string | Display name (auto-generated if omitted) |
timeout_ms |
integer | Request timeout in milliseconds (default: 30000) |
retry_attempts |
integer | Number of retry attempts on failure (default: 5) |
curl -X POST https://cronly.eu/api/v1/queue \ -H "Authorization: Bearer pk_live_xxx" \ -H "Content-Type: application/json" \ -d '{ "url": "https://myapp.com/api/webhook", "method": "POST", "headers": {"X-Custom": "value"}, "body": "{\"event\": \"test\"}" }'
Jobs API
Full CRUD operations for managing scheduled jobs.
List all jobs for your organization.
curl https://cronly.eu/api/v1/jobs \
-H "Authorization: Bearer pk_live_xxx"
Get a single job by ID.
curl https://cronly.eu/api/v1/jobs/job_abc123 \
-H "Authorization: Bearer pk_live_xxx"
Create a new scheduled job.
Request Body
| Field | Type | Description |
|---|---|---|
name |
string | Display name for this job (required) |
url |
string | The URL to call (required) |
method |
string | HTTP method: GET, POST, PUT, PATCH, DELETE (default: POST) |
schedule_type |
string | "cron" for recurring or "once" for one-time (required) |
cron_expression |
string | Cron expression (required if schedule_type is "cron") |
scheduled_at |
string | ISO 8601 timestamp (required if schedule_type is "once") |
timezone |
string | Timezone for cron jobs (default: UTC) |
headers |
object | Custom headers to send (optional) |
body |
string | Request body, max 256KB (optional) |
timeout_ms |
integer | Request timeout in ms (default: 30000) |
retry_attempts |
integer | Retry attempts for one-time jobs (default: 5) |
enabled |
boolean | Whether the job is active (default: true) |
curl -X POST https://cronly.eu/api/v1/jobs \ -H "Authorization: Bearer pk_live_xxx" \ -H "Content-Type: application/json" \ -d '{ "name": "Daily backup", "url": "https://myapp.com/api/backup", "method": "POST", "schedule_type": "cron", "cron_expression": "0 6 * * *" }'
curl -X POST https://cronly.eu/api/v1/jobs \ -H "Authorization: Bearer pk_live_xxx" \ -H "Content-Type: application/json" \ -d '{ "name": "Send reminder", "url": "https://myapp.com/api/remind", "schedule_type": "once", "scheduled_at": "2025-02-01T09:00:00Z" }'
Update a job. Only include the fields you want to change.
curl -X PUT https://cronly.eu/api/v1/jobs/job_abc123 \ -H "Authorization: Bearer pk_live_xxx" \ -H "Content-Type: application/json" \ -d '{ "cron_expression": "0 7 * * *", "enabled": false }'
Delete a job and all its execution history.
curl -X DELETE https://cronly.eu/api/v1/jobs/job_abc123 \
-H "Authorization: Bearer pk_live_xxx"
Trigger a job to run immediately. Creates a new execution that runs right away.
curl -X POST https://cronly.eu/api/v1/jobs/job_abc123/trigger \
-H "Authorization: Bearer pk_live_xxx"
Executions
Get execution history for a job.
Query Parameters
| Field | Type | Description |
|---|---|---|
limit |
integer | Max results to return, 1-100 (default: 50) |
# Response { "data": [{ "id": "exec_123", "status": "success", "scheduled_for": "2025-01-29T10:00:00Z", "started_at": "2025-01-29T10:00:01Z", "finished_at": "2025-01-29T10:00:01Z", "status_code": 200, "duration_ms": 145, "attempt": 1 }] }
Declarative Sync
Push your entire configuration in one call. Perfect for infrastructure-as-code workflows.
Sync your entire project configuration. This is idempotent - safe to call repeatedly with the same config.
Request Body
| Field | Type | Description |
|---|---|---|
jobs |
array | Array of job configurations |
jobs[].key |
string | Unique key for this job (your identifier) |
jobs[].name |
string | Display name for this job |
jobs[].url |
string | The URL to call |
jobs[].method |
string | HTTP method (default: POST) |
jobs[].cron |
string | Cron expression for recurring jobs |
jobs[].headers |
object | Custom headers (optional) |
jobs[].body |
string | Request body, max 256KB (optional) |
delete_removed |
boolean | Delete jobs not in config (default: false) |
curl -X PUT https://cronly.eu/api/v1/sync \ -H "Authorization: Bearer pk_live_xxx" \ -H "Content-Type: application/json" \ -d '{ "jobs": [{ "key": "daily-backup", "name": "Daily backup", "url": "https://myapp.com/api/backup", "cron": "0 6 * * *" }], "delete_removed": true }'
Limits
| Limit | Value | Description |
|---|---|---|
| Request body size | 256 KB |
Maximum size of the body field sent to webhooks |
| Response body storage | 256 KB |
Responses larger than this are truncated in execution history |
| Request timeout | 1s - 5min |
Configurable per job (default: 30s) |
| Retry attempts | 0 - 10 |
For one-time jobs only (default: 5) |
Errors
The API returns standard HTTP status codes:
| Code | Meaning |
|---|---|
200 |
Success |
201 |
Created |
202 |
Accepted (for async operations like queue/trigger) |
204 |
No content (successful delete) |
400 |
Bad request - check your parameters |
401 |
Unauthorized - invalid API key |
404 |
Not found |
422 |
Validation error |
429 |
Rate limited - slow down |
500 |
Server error - try again |
Error responses include details:
{
"error": {
"message": "Invalid cron expression",
"field": "cron_expression"
}
}