Send downpipes alerts to incident.io
incident.io takes alerts through a custom HTTP alert source. There is no dedicated incident.io channel here; you add a generic webhook channel pointed at the alert source, and map downpipes’ event JSON with incident.io’s transform.
What you need
- An incident.io account where you can create a custom HTTP alert source and read its URL and token.
- Access to the downpipes console with the notify-config capability (Operator, Approver or Owner) to add and test the channel.
Set it up
- In incident.io, create a custom HTTP alert source and copy its URL and token.
- In the downpipes console, open Notifications, choose Add a channel and pick Webhook (generic HTTPS POST). Adding a channel needs the notify-config capability, so an Operator, Approver or Owner can add one.
- Paste the alert source URL into the HTTPS URL field. It must be https and carry no embedded credentials. Name the channel and save it, then a rule routes events to it.
- In incident.io, write the transform that maps downpipes’
downpipe-event-v1body (the event name, severity, downpipe id and name, and a one-line detail) to the alert fields. - Set the dedup key to a dot-pointer path at a stable field such as the downpipe id, so repeated events for one downpipe land on the same alert.
- Choose Test on the channel to confirm delivery without sending real alert content, then check the alert arrived in incident.io.
Good to know
- The dedup key path drives correlation and resolve. incident.io correlates on the dedup key you point at a stable field, and resolves the alert when it later sees a status of resolved on that same key. Point the key at the downpipe id and derive the status in your transform, because a recovery arrives as an ordinary event on the generic webhook rather than a dedicated resolve. The resolve payload has no dedicated status field: a recovery event has the same
downpipe-event-v1shape as any other event (kind,at,event,severity, an optionaldownpipe,detail); downpipes does not add astatusfield. The event name itself carries the recovery signal, for examplecanary-recovered, or a laterbackup-successfollowing abackup-failure, so your transform reads theeventfield and sets incident.io’s resolved status from it rather than looking for a status value in the payload. - The webhook channel sends only the JSON body. downpipes posts the
downpipe-event-v1body to the URL and adds no auth header of its own, so give incident.io the token in a form its HTTP alert source accepts, and confirm the exact URL and token placement in the incident.io console rather than assuming it here.
Last updated .