Notification Triggers
Detector turns the result of a check into one of three events and delivers it to the channels you pick on the monitor: e-mail, mobile push, in-app notification and your team's webhook endpoint. Nothing is sent unless the change crosses the threshold; a "no change" result only shows up in the monitor's history.
Events
| Event | When it is sent | Default channels |
|---|---|---|
| page.changed | When the change score crosses the monitor's sensitivity threshold | E-mail, in-app, webhook |
| price.changed | When a value marked as a price changes (with the previous and new value) | E-mail, mobile, webhook |
| monitor.failed | After three consecutive failed checks, as the monitor is paused | E-mail, webhook |
A price change is also a page change. In that case Detector does not send both events: price.changed goes out and page.changed is suppressed, so you do not get two notifications for the same change.
Mark the Price Field
For price.changed, add a price_selector to the monitor. Detector parses that element's text into a number (1.249,90 TL β 1249.90, currency TRY) and only triggers when the numeric value changes; formatting changes are ignored.
Choose the Channels
In the dashboard, open the monitor β Notifications tab and switch channels on or off per event. Channels add to your team-level notification preferences; if a team member has turned e-mail off, the monitor setting does not override that.
Verify the Webhook
Webhook calls are signed with the X-Incapon-Signature header. Verify the signature before processing, as shown in Webhook Signature Verification, and drop duplicate deliveries using X-Incapon-Event-Id.
Sample Webhook Payload
{
"event_type": "price.changed",
"event_id": "evt_live_5c1e9a",
"created_at": "2026-10-29T08:14:03Z",
"payload": {
"monitor_id": "mon_8f2c",
"url": "https://supplier.example.com/prices",
"previous": { "amount": 1249.90, "currency": "TRY" },
"current": { "amount": 1399.00, "currency": "TRY" },
"snapshot_url": "https://app.incapon.com/detector/mon_8f2c/snapshots/snp_77"
}
}{
"event_type": "monitor.failed",
"event_id": "evt_live_5c1f02",
"created_at": "2026-10-29T11:00:12Z",
"payload": {
"monitor_id": "mon_8f2c",
"status": "paused",
"consecutive_failures": 3,
"last_error": { "code": "selector_not_found", "message": "#pricing-table did not match" }
}
}If your endpoint does not return a 2xx within 10 seconds, delivery is retried with exponential backoff (1 min, 5 min, 30 min ... 24 h; 8 attempts in total). Push heavy work onto a queue and return 200 right away.