How requests are made

Every request names the service, comes from a known address, and carries a link that stops it. The page is written as much for people who find the requests in a log as for the people who schedule them.

Identification

Each request carries these headers. The stop token is unique to one job and changes whenever the job is resumed.

User-Agent: Mozilla/5.0 (compatible; cronjob.dev/1.0; +https://cronjob.dev/stop/<token>)
From: stop+<token>@cronjob.dev
X-CronJob-Stop: https://cronjob.dev/stop/<token>
X-CronJob-Run: <job id>:<scheduled time>

Mail to the From address is answered with the stop link. Replying to it never stops anything on its own.

Addresses

Requests leave from a short, fixed set of addresses in the EU. The list is machine-readable at /ips and /ips.txt. Allowlisting what the endpoint returns keeps working when a node moves.

Address
165.227.168.138
174.138.11.112
54.38.224.71

Requests are made over IPv4. A hostname with no A record cannot be reached, and its runs are recorded as unknown rather than failed, because the limit belongs to the service.

Headers the service sets
HeaderValueChangeable
HostFrom the URLNo
User-AgentAs aboveNo
Fromstop+<token>@cronjob.devNo
X-CronJob-StopThe stop URL for the jobNo
X-CronJob-RunJob id and scheduled timeNo
Content-Typetext/plain; charset=utf-8Yes, with a body
Accept-EncodingidentityNo
What happens to the response

The status line is read and the connection closes. The body is not read beyond what closing cleanly needs, and none of it is stored. A response slower than the job's timeout is recorded as a timeout.