Vendors that “just POST JSON” rarely let you rewrite the message. AlertHub does: reserved ah_* fields plus Mustache {{path.to.field}} over the rest of the payload (nested objects, up to 10 levels). You can put templates in the query string so Stripe and Shopify never need a middleware server.
The Webhook Builder generates or parses those URLs. The Ingestion API is the contract.
Reserved vs custom
| Field | Role |
|---|---|
ah_key | Project secret (required) |
ah_title | Title template (required) |
ah_description | Body template |
ah_level | info | warning | critical (default info) |
ah_source | Label in the feed |
| Anything else | Custom variable for {{name}} |
If the same key appears in the URL and JSON body, the body wins. Mix them: keep ah_key in the query (easy to rotate in Shopify Admin) and send a fat Stripe event as POST JSON.
Setup (once)
- Copy the secret from app.thealerthub.com.
- Open the Webhook Builder, paste the key, set title/source/level/description.
- Copy the URL into the vendor, or import an existing URL to see what it encodes.
Example 1: Shopify order (query templates)
Shopify POSTs the order JSON to your URL. Title/description in the query refer to flat fields:
ah_title=New sale {{name}}
ah_description={{email}} spent {{total_price}} {{currency}}
Walkthrough: Shopify order alerts.
Example 2: Stripe nested objects
Stripe events nest under data.object. Use dot paths:
ah_title=Stripe {{type}}
ah_description=Amount {{data.object.amount}} {{data.object.currency}}
Failed-payment widgets live in that guide. Same idea for GitHub: {{repository.name}}, {{sender.login}} — repo webhooks.
Example 3: Full JSON from your app
When you control the client, skip query templates and send:
{
"ah_key": "YOUR_KEY",
"ah_title": "Deploy {{commit.id}}",
"ah_description": "Author {{commit.author}}",
"ah_level": "warning",
"ah_source": "API",
"commit": { "id": "abc1234", "author": "Ada" }
}
Resulting title: Deploy abc1234. Arrays: {{line_items.0.title}}.
Ideas to squeeze more value
- Never put the key in a public repo. Prefer GitHub Actions secrets or vendor webhook config.
- Import URL in the Builder when a colleague sends a mystery link.
- Level in the query (
ah_level=critical) is how UptimeRobot and Vercel page without a code change. Levels.
FAQ
Do placeholders run in n8n before the POST?
n8n {{ $json }} runs first. AlertHub {{data.object.id}} runs on the server after ingest. n8n guide.
What if the path is missing?
The placeholder typically renders empty. Inspect a real payload once.
GET or POST?
POST JSON is preferred. Query-only works for vendors that cannot set a body.
Next steps
Build one URL in the Webhook Builder, paste it into Shopify or Stripe, and confirm interpolation in the dashboard.
Related: Ingestion API · send from Node, Python, PHP