All integrations

Any JSON webhook

Anything we haven't built a translator for - Linear, custom scripts.

LiveWebhooksigned URL
webhook (success-200) Live Activity preview
any JSON webhook

The catch-all inbound endpoint - paste into any service's webhook field and Chirp's normalizer makes a best-effort attempt to extract a title and body for a push notification. Recognizes the common shapes: top-level `title` / `text` / `message` / `body`, GitHub-style nested `event.action`, Slack-style `attachments[0].title`, and a handful of others. Falls back to a sensible default if nothing matches.

When the dedicated translators (@stripe, @github, @sentry, @grafana) don't exist for a tool you use - Linear, Notion, Pipedream, your homegrown internal tool - drop the inbound URL in. Test it once with a real payload from the source; if the title/body extraction looks wrong, file an issue with a payload sample and Chirp will add a translator.

Prerequisites

  • A Chirp inspector / webhook URL.
  • A third-party service that fires JSON webhooks.

Setup

  1. 1

    Grab the inbound URL

    chirpapp.dev/dashboard → Webhook URLs card → "Generic Inbound". The URL is https://api.chirpapp.dev/v1/webhooks/inbound?key=....

  2. 2

    Paste into the third party's webhook field

    Whatever the service calls it: "Webhook URL", "Payload URL", "Endpoint", "POST URL". Set content type to application/json if the service offers a choice.

  3. 3

    Trigger an event + verify the format

    Most services have a "Send test event" button. Trigger one and check the Chirp inspector's recent-events log. The log shows the raw payload received and the extracted title/body. If the extraction is wrong, see the override options below.

  4. 4

    (Optional) Promote to a Live Activity

    Append &mode=activity&schema=@alert to fire a persistent card instead of a one-shot push. Useful for incident-style alerts that should stay visible until acked.

    shell
    # One-shot push (default):
    https://api.chirpapp.dev/v1/webhooks/inbound?key=YOUR_KEY
    
    # Persistent Live Activity:
    https://api.chirpapp.dev/v1/webhooks/inbound?key=YOUR_KEY&mode=activity&schema=@alert

What you’ll see

One-shot mode: notification with the extracted title + body, source service name in the action label. Activity mode: a persistent yellow @alert card with the title, body, and timestamp; closes only on explicit dismissal or another inbound event with `?action=end`.

Troubleshooting

Notification body is empty or generic.
Auto-extraction couldn't find a recognizable field in the payload (it tries top-level title / text / message / body and a few common nested shapes). Check the inspector's recent-events log to see the raw payload - if your service uses a non-standard shape, file an issue with a sample and we'll add a translator (or use a dedicated /v1/webhooks/<provider> endpoint if one exists).
Source service requires HMAC-signed webhooks.
The generic inbound endpoint trusts the inspector key in the URL as the shared secret - no per-payload signature verification. If your source service requires you to provide a signing secret to enable webhooks, paste the inspector URL anyway and let the service generate its own secret (we just won't validate it). For dedicated HMAC verification, use a provider-specific endpoint (/v1/webhooks/stripe, /v1/webhooks/github, etc.) that handles the provider's signature scheme.
I want different sources to fire different schemas.
Generate one inspector per source - the URL is the routing key. Linear → /inbound?key=A&schema=@alert; internal-tool → /inbound?key=B&schema=@deploy.