AVAILABLE

Scheduling

Cron Schedule & Runtime Guard

Inspect strict five-field UNIX cron expressions, return bounded prior or future reference runs, summarize windows, compare schedules, and apply explicit runtime policy with IANA timezone evidence.

CONTRACT

Predictable for agents. Legible for reviewers.

REST
POST /v1/cron-schedules/policy-check
MCP tool
check_cron_schedule_policy
Inputs
One strict numeric UNIX_5_FIELD expression, a separate IANA timezone, offset-aware reference or half-open window times, and optional caller run-budget, minimum-gap, local-hour, weekday, and offset-change policy.
Returns
CLEAR, REVIEW_REQUIRED, or BLOCKED with normalized fields, bounded local and UTC occurrences, exact gaps, UTC-offset changes, schedule differences, stable findings, and a non-executing next action.
Latency
Synchronous
Usage unit
Cron schedule operation

The suite also exposes /v1/cron-schedules/inspect, /next-runs, /previous-runs, /window-summary, and /compare plus /mcp/cron. Version one intentionally rejects names, aliases, embedded TZ/CRON_TZ, seconds, year, ?, L, W, #, H, and provider-specific extensions. It creates no job, invokes no target, accesses no scheduler, predicts no delivery guarantee, and stores no payload. Its RapidAPI release is queued behind the provider's twenty-public-API cap.

AGENT-READABLE EXCEPTIONS

CRON_DIALECT_MISMATCHCRON_UNSUPPORTED_SYNTAXCRON_FIELD_OUT_OF_RANGECRON_DAY_FIELDS_USE_ORCRON_TIMEZONE_UNKNOWNCRON_OCCURRENCE_HORIZON_EXCEEDEDCRON_OCCURRENCE_LIMIT_EXCEEDEDCRON_TIMEZONE_OFFSET_CHANGEDCRON_SCHEDULES_DIVERGECRON_RUN_BUDGET_EXCEEDEDCRON_MINIMUM_GAP_VIOLATEDCRON_LOCAL_HOUR_NOT_ALLOWEDCRON_LOCAL_WEEKDAY_NOT_ALLOWEDCRON_OFFSET_CHANGE_BLOCKED
HTTP request
POST /v1/cron-schedules/policy-check
Authorization: Bearer apc_...
Content-Type: application/json

{
  "schedule": {
    "expression": "0 9 * * 1-5",
    "timezone": "America/Denver",
    "dialect": "UNIX_5_FIELD"
  },
  "window_start": "2026-08-10T00:00:00Z",
  "window_end": "2026-08-20T00:00:00Z",
  "maximum_occurrences": 100,
  "minimum_gap_minutes": 60,
  "maximum_runs_in_window": 10,
  "allowed_local_hours": [
    9
  ],
  "allowed_local_weekdays": [
    0,
    1,
    2,
    3,
    4
  ],
  "block_timezone_offset_changes": true
}
cURL (bash)
curl --request POST \
  --url 'https://api-production-9502.up.railway.app/v1/cron-schedules/policy-check' \
  --header 'Authorization: Bearer ${AP_CONTROL_API_KEY}' \
  --header 'Content-Type: application/json' \
  --data '{
  "schedule": {
    "expression": "0 9 * * 1-5",
    "timezone": "America/Denver",
    "dialect": "UNIX_5_FIELD"
  },
  "window_start": "2026-08-10T00:00:00Z",
  "window_end": "2026-08-20T00:00:00Z",
  "maximum_occurrences": 100,
  "minimum_gap_minutes": 60,
  "maximum_runs_in_window": 10,
  "allowed_local_hours": [
    9
  ],
  "allowed_local_weekdays": [
    0,
    1,
    2,
    3,
    4
  ],
  "block_timezone_offset_changes": true
}'
Representative response
{
  "status": "COMPLETED",
  "decision": "CLEAR",
  "normalized_expression": "0 9 * * 1-5",
  "timezone": "America/Denver",
  "window_start": "2026-08-09T18:00:00-06:00",
  "window_end": "2026-08-19T18:00:00-06:00",
  "occurrence_count": 8,
  "first_occurrence": {
    "local_time": "2026-08-10T09:00:00-06:00",
    "utc_time": "2026-08-10T15:00:00Z",
    "utc_offset": "-06:00",
    "fold": 0
  },
  "last_occurrence": {
    "local_time": "2026-08-19T09:00:00-06:00",
    "utc_time": "2026-08-19T15:00:00Z",
    "utc_offset": "-06:00",
    "fold": 0
  },
  "minimum_gap_seconds": 86400,
  "maximum_gap_seconds": 259200,
  "offset_change_count": 0,
  "truncated": false,
  "findings": [],
  "allowed_by_policy": true,
  "evaluated_policy": {
    "minimum_gap_minutes": 60,
    "maximum_runs_in_window": 10,
    "allowed_local_hours": [
      9
    ],
    "allowed_local_weekdays": [
      0,
      1,
      2,
      3,
      4
    ],
    "block_timezone_offset_changes": true
  },
  "ruleset_version": "UNIX_5_FIELD_REFERENCE_2026",
  "scope": "CALLER_SUPPLIED_CRON_FACTS_ONLY",
  "scheduler_accessed": false,
  "job_created": false,
  "target_invoked": false,
  "delivery_guaranteed": false,
  "payload_stored": false,
  "next_action": "Verify the target platform preview, permissions, concurrency, misfire, retry, and idempotency settings before deployment."
}
One explicit UNIX dialectVersion one accepts exactly five numeric fields with bounded wildcard, list, range, and step syntax; incompatible aliases and provider extensions are rejected.
Local and UTC evidenceOccurrences include IANA-zone wall time, UTC time, offset, fold, gap statistics, and offset-change findings inside caller-bounded horizons.
No scheduler or job actionThe service creates no job, invokes no target, accesses no scheduler, predicts no delivery guarantee, and stores no payload.

Try Cron Schedule & Runtime Guard with your own workflow.

Start with the workspace, inspect the typed result, then integrate with REST or the focused MCP server.