Developer API
CronWizard HTTP API Reference
Generate, validate, preview, and export cron schedules through the same JSON endpoints used by the web application. The API is public, requires no authentication, and usesapplication/json for request and response bodies.
Published and reviewed . Source repository identity: Mehmet Uşanmaz (repository owner).
Base URL
https://cronwizard.comAll cron operations use POST. Send a valid JSON body and a Content-Type: application/json header. The health endpoint uses GET.
Endpoints
/api/v1/cron/generateGenerate a cron expression
Build a Unix or Quartz expression from a supported wizard mode and parameters.
curl -X POST 'https://cronwizard.com/api/v1/cron/generate' \
-H 'Content-Type: application/json' \
-d '{"mode":"daily","params":{"at":{"hour":9,"minute":0}},"format":"unix"}'Example response
{
"cron": "0 9 * * *",
"description": "At 09:00",
"warnings": [],
"normalized": {
"unix": "0 9 * * *",
"quartz": "0 0 9 * * ?"
}
}/api/v1/cron/nextCalculate upcoming run times
Return the next 1–50 matching run times in an IANA timezone.
curl -X POST 'https://cronwizard.com/api/v1/cron/next' \
-H 'Content-Type: application/json' \
-d '{"cron":"0 9 * * 1-5","format":"unix","timezone":"Europe/Istanbul","count":5}'/api/v1/cron/validateValidate a cron expression
Validate a Unix or supported Quartz cron expression. The Unix normalization is null when a valid Quartz schedule has no lossless 5-field equivalent.
curl -X POST 'https://cronwizard.com/api/v1/cron/validate' \
-H 'Content-Type: application/json' \
-d '{"cron":"*/15 * * * *","format":"unix"}'Example response
{
"valid": true,
"errors": [],
"normalized": "*/15 * * * *"
}/api/v1/cron/exportExport a scheduler configuration
Render a schedule for Kubernetes, GitHub Actions, systemd, Docker, AWS EventBridge Scheduler Terraform, crontab, or launchd. Export requires a lossless 5-field Unix equivalent.
curl -X POST 'https://cronwizard.com/api/v1/cron/export' \
-H 'Content-Type: application/json' \
-d '{"cron":"0 9 * * 1-5","format":"unix","target":"k8s","options":{"name":"weekday-job","image":"busybox:latest","command":"echo hello","timezone":"Europe/Istanbul"}}'Example response
{
"text": "apiVersion: batch/v1\nkind: CronJob\n..."
}/api/healthzCheck service health
Return the health state and current server timestamp.
curl 'https://cronwizard.com/api/healthz'Example response
{
"status": "ok",
"timestamp": "2026-08-05T09:00:00.000Z"
}Request fields
| Operation | Required fields | Optional fields and limits |
|---|---|---|
generate | mode, params, format | Modes: minutes, hourly, daily, weekly, monthly, yearly, and advanced. |
next | cron, format, timezone, count | count is 1–50. timezone is an IANA name. startDate is an optional ISO 8601 date-time. |
validate | cron, format | Invalid syntax is represented by valid: false. A valid Quartz expression can have normalized: null. |
export | cron, format, target | HTTP API targets: k8s, gha, systemd, docker, terraform, crontab, or launchd. Options: name, image, command, description, and an IANA timezone. Kubernetes, GitHub Actions, systemd, Ofelia, and AWS EventBridge Scheduler embed the timezone. Portable crontab and launchd cannot; omit that option and configure the daemon or host timezone explicitly. Every target requires a lossless 5-field Unix equivalent, and a target can reject additional constructs it cannot encode without changing the schedule. |
Generate parameter constraints
every: one of1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30. These values divide a 60-minute hour evenly.at.hour: integer from 0 through 23.at.minute: integer from 0 through 59.days: array of integers from 0 through 6.month: integer from 1 through 12.dayOfMonth: integer from 1 through 31.expression: expression used by advanced mode.
The format field accepts unix or quartz. Generated responses contain a normalized object whose unix and quartz keys are always present but may be null when no lossless equivalent exists.
Quartz support and lossless normalization
Quartz validation and next-run calculation support 6- or 7-field expressions. Exactly one of day-of-month or day-of-week must be ?. Seconds, optional year values from 1970 through 2099, L, and day-of-week # are supported. The nearest-weekday W and hashed/random H extensions are not.
Validity does not guarantee cross-dialect portability. A Quartz expression has no lossless Unix equivalent when it uses nonzero seconds, a restricted year, or day-of-month L, weekday nL, or # syntax. A bare weekday L means Saturday and can be converted exactly. For example, validating 30 0 9 ? * MON as Quartz returns:
{
"valid": true,
"errors": [],
"normalized": null
}The inverse limitation also applies: a Unix expression that restricts both day-of-month and day-of-week uses Unix OR semantics, which cannot be represented losslessly in Quartz. Its normalized.quartz value is null.
Errors
Invalid request shapes and invalid cron values return HTTP 400 where applicable. Unexpected processing failures return HTTP 500. Error bodies use this shape:
{
"code": "VALIDATION_ERROR",
"message": "Invalid input",
"details": []
}The validation endpoint is intentionally different: a well-formed request containing an invalid cron expression returns HTTP 200 with valid: false and an errors array.
Export accepts only schedules with a lossless 5-field Unix equivalent. A valid but non-portable Quartz schedule returns HTTP 400 with this explicit error:
{
"code": "UNSUPPORTED_EXPORT_FORMAT",
"message": "This expression has no lossless 5-field Unix equivalent and cannot be exported to this target."
}Machine-readable contract
The canonical OpenAPI 3.1 document is available at /openapi.json. Use it to generate clients or import the API into tools that understand OpenAPI. The document lists only targets and fields accepted by the deployed HTTP route schemas.