“Centralize webhook notifications” usually means this: too many vendors POST to too many Slack URLs, and nobody can search what fired last Tuesday. AlertHub is the other shape. Each system keeps its own webhook (or plugin, or email). They all land in one project. You label them with ah_source. The dashboard is the inbox; Slack, Telegram, and the rest are optional last miles.
This is not a product intro and not a destination-migration guide. Those already exist: Introducing AlertHub and switch tools without touching code. This post is the ingest side — many webhooks, one feed.
Vendors still POST JSON to https://api.thealerthub.com/sendAlert. You do not host that endpoint. Placeholders live in the query string so Stripe and Shopify never need a parser you maintain. Contract: Ingestion API. Builder: Webhook Builder.
What belongs in the same project
| Source | How it reaches AlertHub | Suggested ah_source |
|---|---|---|
| Stripe | Dashboard webhook URL with {{type}} | Stripe |
| GitHub | Repo Settings → Webhooks, JSON | GitHub |
| Shopify | Admin Settings → Notifications → Webhooks | Shopify |
| WordPress / WooCommerce | Official plugin, any hook | Shared source name in Tools → AlertHub |
| Cron / bash | POST JSON from the host | BackupScripts, VPS |
| Tools that only email | {key}@warning.sendalert.thealerthub.com | Always Email: + From |
Filter the feed by source instead of opening four Slack workspaces. Retention and read state are project-wide — inbox.
Do not mix production and staging in that project. Staging noise will drown Stripe. Use a second project (or keep staging at info).
Setup (once)
- Create a project at app.thealerthub.com and copy the One-Way Secret Key.
- Connect at least one destination if you want a phone ping.
infonever leaves the dashboard — levels. - Point each vendor at that key. Do not paste
hooks.slack.cominto Stripe, GitHub, or Shopify.
Source 1: Stripe (nested JSON)
Stripe POSTs an Event object. Title with {{type}} so the feed is a readable webhook log:
https://api.thealerthub.com/sendAlert?ah_key=YOUR_KEY&ah_source=Stripe&ah_title=Stripe:{{type}}
In Stripe: Developers → Webhooks → Add endpoint, paste the URL, select the events you actually care about. Full field examples: Stripe source. Failed charges as critical are a second URL — failed Stripe payments and Stripe webhook monitoring.
Source 2: GitHub
GitHub Admin → Webhooks → payload URL to AlertHub, content type application/json. Typical title GitHub Event: {{repository.name}}. Walkthrough: GitHub webhooks. CI failures are a curl step, not this webhook: GitHub Actions.
Source 3: Shopify and WordPress
Shopify order payloads are mostly flat ({{name}}, {{total_price}}). Guide: Shopify order alerts. WordPress does not POST a vendor webhook; the plugin watches hooks (wp_login_failed, woocommerce_payment_complete, …) and calls ingest for you — WordPress docs.
Ideas to squeeze more value
- One project per client if you are an agency. Retention, unread, and WhatsApp quota are per project, not per source.
- Email as the odd one out. NAS and uptime tools that cannot POST still join the same feed — email ingest.
- n8n / Zapier / Make when the SaaS has no webhook. Last node is still AlertHub, not a Slack module in every scenario — Zapier.
- HMAC / retries. Ingest does not verify provider signatures. If you need that plumbing, Hookdeck in front of AlertHub is the documented pattern.
FAQ
Does each vendor need its own Slack app?
No. Vendors talk to AlertHub. Slack is a Connection on the project.
Can I keep Shopify orders out of the Stripe billing channel?
Not by destination. Warning and critical go to every connected channel. Split with info vs warning, or use two projects — on-call vs team.
Will Info events clutter Telegram?
No. Info is dashboard-only.
Next steps
Create the project, paste one Stripe URL and one GitHub URL, send a test from each, and confirm both rows show up with different sources.
Related: fan-out to Slack / Telegram / WhatsApp · Webhook Builder · Ingestion API