Observer
Observer

Configure outbound webhooks

Subscribe an HTTPS endpoint to status, SLO, and agent events.

Outbound webhooks deliver Observer events to an HTTPS endpoint as JSON. They are the integration path for paging tools, ticketing systems, and chat notifications.

Available event types

Incident events

TypeTrigger
incident.createdA new incident is created (draft or published).
incident.updatedAn incident's title, severity, affected services, or visibility changes.
incident.publishedA draft incident is published and becomes visible on the public page.
incident.resolvedAn incident is resolved.
incident.deletedAn incident is deleted.
incident.message_addedA new message is appended to an incident timeline.
incident.auto_draftedThe auto-incident worker creates a draft from an unhealthy metric flip.
incident.auto_publishedAn auto-drafted incident is published.
incident.auto_dismissedAn auto-drafted incident is dismissed or expires with no action.

Maintenance events

TypeTrigger
maintenance.scheduledA maintenance window is created.
maintenance.starting_soonA scheduled maintenance window is within the next hour.
maintenance.startedA maintenance window starts.
maintenance.completedA maintenance window completes.
maintenance.canceledA maintenance window is canceled before completion.

Metric and agent events

TypeTrigger
metric.status_changedA metric's status flips after dwell gating.
metric.no_dataA metric enters no_data because the agent could not collect a sample.
agent.offlineAn agent misses its expected heartbeat window.

Configure a subscription

  1. Create the subscription

    In the console, open Webhooks, then New subscription. Configure:

    • Endpoint URL: an HTTPS endpoint that accepts POST requests with a JSON body. HTTP is rejected.
    • Signing secret: optional shared secret. When set, Observer signs every delivery with HMAC-SHA-256 in the X-Observer-Signature header.
    • Event types: tick the events the endpoint should receive.

    Save the subscription. The first delivery confirms reachability.

  2. Verify deliveries

    The subscription detail page lists recent deliveries with their HTTP response code and round-trip time. Successful deliveries return a 2xx response within the timeout window. Failed deliveries are retried with exponential backoff.

  3. When a signing secret is set, every delivery includes three headers:

    X-Observer-Signature:        sha256=<hex>
    X-Observer-Signature-Legacy: sha256=<hex>
    X-Observer-Timestamp:        <unix-millis>

    The signed material for X-Observer-Signature is ${timestamp}.${rawBody}. To verify (recommended):

    1. Read X-Observer-Timestamp. Reject the delivery if it is more than five minutes from the current time on the receiver. This skew window bounds replay attacks against captured deliveries.
    2. Compute HMAC-SHA-256(secret, "${timestamp}.${rawBody}") and hex-encode the digest. Prepend sha256=.
    3. Compare against X-Observer-Signature using a constant-time comparison (crypto.timingSafeEqual in Node, hmac.compare_digest in Python, equivalents elsewhere). String equality leaks information through timing side channels.

    Reject deliveries whose signatures do not match.

Quotas

Webhook subscription quotas vary by plan. Endpoints over the cap on a downgrade remain configured; new endpoints are blocked until the plan is upgraded or an existing endpoint is removed.

Payload reference

See the webhook payload reference for the JSON shape of each event type.

Was this page helpful?