Cronbolt

Delivery and errors

Understand retries, deduplication, polling, and safe failures.

Delivery is at least once

A recurring delivery may arrive more than once after worker recovery or a retryable failure. Every request includes a stable Cronbolt-Run-Id header. Store that value before applying a non-idempotent effect.

New jobs retry network failures, timeouts, HTTP 408, HTTP 425, HTTP 429, and HTTP 5xx responses twice by default. The first retry waits 30 seconds, then the delay grows exponentially. Set max_retries to 0 to disable retries.

Cronbolt prevents overlapping deliveries for the same job. If a recurring occurrence becomes due while prior work is queued or running, Cronbolt records the new occurrence as skipped.

The default success check accepts HTTP 200 through 299. Jobs can narrow that range and require response text. Cronbolt evaluates response text in memory and never stores the response body. An application-level mismatch is retryable.

An optional alert webhook receives best-effort, secret-free failure and recovery events.

After downtime, Cronbolt does not replay a burst of old callbacks. The first materialized run includes coalesced_missed_count and coalesced_window_ends_at so the gap remains visible. Counts are exact up to 10,000; that value with a later window end means the safety cap was reached.

Polling runs

Manual run and retry responses include Location and Retry-After headers. Wait for the stated number of seconds, then fetch the Location until the run reaches a terminal state.

Error shape

Public API errors include:

{
  "code": "invalid_schedule",
  "message": "Enter a valid 5-field cron expression.",
  "request_id": "request identifier"
}

Validation errors also include errors. Rate limits include Retry-After. If action_url is present, open it for the developer rather than guessing how to resolve the account limit.

Callback safety

V1 accepts public http:80 and https:443 targets. It rejects localhost, private networks, unsafe ports, embedded credentials, unsafe headers, and DNS results that change to a private address.

Run history does not return callback headers, request bodies, response bodies, or raw exception text.