Skip to main content
WEBHOOK

When it is sent

Once for every check that ran — completed, partial or failed — with the check’s summary counts and what it was charged. It is also sent once when a monitor starts being skipped for lack of credits (skipped_no_credits), so you hear that checks have stopped. It is not repeated for every skipped check after that, and checks skipped because the previous one was still running (skipped_overlap) send nothing. success is true only for a completed check. For a partial or failed check, data.error says why. To receive only this event and not one per page, set the monitor’s webhook events to ["monitor.check.completed"].

Responding

Answer with any 2xx within 10 seconds; failures are retried after 1, 5 and 15 minutes. The request is signed exactly like monitor.page — verify it the same way.

Reading the page results

The event carries counts, not pages. To see what changed, fetch the check:
monitor_id and check_id are both in the event.

monitor.page

One event per changed page, with its diff.

GET /monitor/{id}/checks/{checkId}

Everything a check found.

Authorizations

X-API-Key
string
header
required

Your Prefetch API key. Obtain one from the dashboard.

Headers

X-Prefetch-Event
string
required

The event type.

X-Prefetch-Delivery
string
required

The delivery id — the same as id in the body, and stable across retries.

X-Prefetch-Signature
string
required

t=<unix seconds>,v1=<hex>, where hex is HMAC-SHA256 of "<t>.<raw body>" keyed with the monitor's webhook.secret.

Example:

"t=1760248862,v1=5f2b8c..."

Body

application/json
success
boolean

true only for a completed check.

id
string

Delivery id, also sent as X-Prefetch-Delivery. Stable across retries — use it to de-duplicate.

Example:

"whd_5c1e9a2b7d3f4e6a8b0c2d4e6f8a1b3c"

created_at
string<date-time>
monitor_id
string
monitor_name
string
check_id
string
metadata
object

The metadata you set on the webhook.

type
enum<string>
Available options:
monitor.check.completed
data
object

Response

200

Answer any 2xx within 10 seconds. Anything else, or no answer, is retried after 1, 5 and 15 minutes.