Webhooks receive. This one understands.
Stop writing
webhook handlers.
Write one English instruction. The AI reads every incoming event, decides what to do, and takes action using your connected tools — no code, no flowcharts, no maintenance.
app.post('/webhook/stripe', (req, res) { const event = req.body; if (event.type === 'payment_intent.failed') { if (event.data.amount > 5000) { await slack.send('#billing', ...); await jira.createTicket(...); } } else if (event.type === 'customer.sub...') { // 47 more branches... } });
“When a payment fails for a customer on a plan over $50, notify #billing on Slack with the customer name and amount. Create a support ticket in Jira with priority high.”
40 lines of code. Or one sentence.
app.post('/webhook/stripe', async (req, res) => {
const sig = req.headers['stripe-signature'];
const event = stripe.webhooks.construct(req.body, sig, secret);
if (event.type === 'payment_intent.failed') {
const amount = event.data.object.amount / 100;
const customer = await stripe.customers.retrieve(
event.data.object.customer
);
if (amount > 50) {
await slack.chat.postMessage({
channel: '#billing',
text: `Payment failed: ${customer.name} - $${amount}`
});
await jira.issues.createIssue({
fields: {
project: { key: 'SUP' },
summary: `Failed payment: ${customer.email}`,
priority: { name: 'High' },
issuetype: { name: 'Bug' }
}
});
}
}
// ... 12 more event types
res.json({ received: true });
});“When a payment fails for more than $50, notify #billing on Slack with the customer name and amount. Create a high-priority support ticket in Jira.”
Stripe — payment_intent.failed
The AI adapts. No code change needed.
Four steps. Zero code.
Webhook fires
Stripe, GitHub, Shopify, or any service sends a POST to your smart webhook URL. HMAC signature is verified automatically.
AI reads the payload
The AI receives the full event payload plus your plain-English instructions. It understands context — not just keywords.
AI calls your tools
Based on your instructions, the AI selects and executes MCP tools — Slack, Jira, CRM, database, anything connected to your workspace.
Done
Actions completed. Run logged with what the AI did, which tools it called, and cost. No polling, no callbacks needed.
Not another automation tool.
The difference isn't incremental — it's architectural.
| Zapier / n8n | Custom Code | Aerostack | |
|---|---|---|---|
| Configuration | |||
| Setup method | Visual node graph | Code handler | English sentence |
| Handle new event types | Build new workflow | Write new handler | AI adapts automatically |
| Conditional logic | Pre-configure every branch | if/else code | AI reasons from context |
| Edge cases | Must anticipate each one | Must code each one | AI handles novel events |
| Security | |||
| HMAC signature verification | |||
| Silent rejection (always 200) | |||
| Constant-time comparison | |||
| Replay protection | |||
| Operations | |||
| MCP tool ecosystem | |||
| Run history & audit trail | |||
| Async mode with callbacks | |||
| Edge-deployed (sub-50ms) | |||
Natural language replaces nodes
Zapier needs a visual graph with explicit branches for every condition. Here: one English sentence covers every variation the AI can reason about.
AI adapts to novel events
New event type from Stripe? With Zapier, you build a new workflow. With Aerostack, the same instruction handles it — the AI reads the payload and decides.
Enterprise-grade security
Every invalid request returns 200 OK. Attackers can't enumerate webhooks, discover signatures, or probe event filters. Constant-time HMAC verification.
Works with any webhook source.
Native support for Stripe, GitHub, and Shopify event formats. Or bring any custom webhook.
Stripe
“When a subscription is cancelled for a customer with lifetime value over $500, notify #retention on Slack and create a win-back task in the CRM.”
GitHub
“When a PR is merged that changes database migrations, post in #deployments with the author, PR title, and list of migration files.”
Shopify
“When a new order comes in for more than $200, check inventory levels. If any item is below 10 units, send a restock alert to #operations.”
Custom
“When an error event arrives with severity "critical", create an incident in PagerDuty and post the error details to #incidents on Slack.”
Silent rejection. By design.
Every failure returns 200 OK. Attackers learn nothing.
| Scenario | Traditional webhook | Aerostack |
|---|---|---|
| Unknown slug | 404 Not FoundAttacker enumerates valid webhooks | 200 { "ok": true } |
| Bad HMAC signature | 401 UnauthorizedAttacker confirms signature is checked | 200 { "ok": true } |
| Rate limited | 429 Too Many RequestsAttacker discovers rate limit threshold | 200 { "ok": true } |
| Filtered event type | 400 Bad RequestAttacker probes event filter config | 200 { "ok": true, "skipped": true } |
| Oversized body | 413 Payload Too LargeAttacker discovers size limits | 200 { "ok": true } |
HMAC-SHA256
Supports Stripe, GitHub, Slack, and custom HMAC signatures. Verified before any processing.
Constant-time comparison
HMAC verification uses timingSafeEqual — immune to timing side-channel attacks.
Replay protection
Timestamp verification with configurable window. Rejects stale requests silently.
Replace your webhook handlers
with one sentence.
Write what should happen. The AI handles the rest.