Understanding ping URLs

Every check has one ping URL. In production, ping URLs use the ping subdomain:

https://ping.checkilo.app/<slug>/<label>?run=<run_id>

Example:

https://ping.checkilo.app/abc123xyz9mZ/start?run=zap-run-123

URL parts

  • <slug>: the 12-character check slug. It is created by Checkilo and shown on the check detail page.
  • <label>: optional path segment that tells Checkilo what happened.
  • run: optional query value that groups pings from the same automation execution.

Accepted methods

Checkilo accepts GET and POST for ping URLs.

Use GET for normal pings. Use POST when you want to send JSON metadata, usually on /fail.

Labels

| URL label | Meaning | |---|---| | no label | Single-ping heartbeat if no run is provided; checkpoint if run is provided. | | start | Starts or joins an in-progress run. | | success | Marks the run as successful. | | ok | Same as success. | | fail | Marks the run as failed and fires a failure alert. | | failure | Same as fail. | | anything else | Checkpoint label shown in the run timeline. |

Checkpoint labels may use letters, numbers, underscores, and hyphens. They must be 64 characters or shorter.

Using run

Use the same run value for every ping in one automation execution.

Good Zapier pattern:

https://ping.checkilo.app/abc123xyz9mZ/start?run={{trigger.id}}
https://ping.checkilo.app/abc123xyz9mZ/sheet_saved?run={{trigger.id}}
https://ping.checkilo.app/abc123xyz9mZ/success?run={{trigger.id}}

Without run, each ping becomes its own single-ping run. That is useful for very simple heartbeats, but not for multi-step Zap debugging.

The run value must be 128 characters or shorter. It may contain letters, numbers, _, -, ., :, and @.

JSON metadata

Send JSON metadata with POST:

curl -X POST 'https://ping.checkilo.app/abc123xyz9mZ/fail?run=zap-run-123' \
  -H 'Content-Type: application/json' \
  -d '{"error":"CRM returned 500","record_id":"row-4421"}'

Metadata must be valid JSON and 4 KB or smaller.

Checkilo stores metadata on the ping, shows it on the run detail page, and may include it in alerts.

Do not send passwords, API keys, card numbers, national IDs, or other sensitive data.

Response

A successful ping returns JSON:

{
  "run_id": "00000000-0000-0000-0000-000000000000",
  "run_status": "in_progress",
  "received_at": "2026-05-14T10:00:00Z"
}

Errors

| Status | Meaning | |---:|---| | 400 | Invalid JSON, invalid label, invalid run, or another malformed request. | | 404 | The slug does not match a check. | | 413 | The request body is larger than 4 KB. | | 429 | The check exceeded its ping rate limit. |


Next: Configuring alerts · Reading the run detail page

Checkilo © 2026 Checkilo Help
All systems operational