Webhook Automation
Comprehensive, event-driven webhook automation for VaakLoom. Trigger workflows via inbound webhooks with cryptographic signature verification, and stream real-time events to Slack, Discord, or external APIs with automatic retries and HMAC signing.
Overview: Why Webhook Automation?
Webhooks are the backbone of modern event-driven architectures. VaakLoom provides complete event-driven automation capabilities while maintaining ultra-low latency, 75% memory/compute resource guardrails, and persistent audit telemetry in Anvesh or your chosen database.
Third-Party Ingestion
Expose dedicated endpoints for Stripe, GitHub, Shopify, or custom services. Automatic HMAC signature verification and configurable immediate 202 vs sync execution modes.
Event Subscriptions
Subscribe external URLs to system events (e.g. workflow:completed, dlq:created). Includes exponential backoff retries and payload signing.
Zero-Loss Telemetry
Every webhook delivery attempt, latency split, HTTP status code, and payload is audited in Anvesh distributed storage or PostgreSQL/MongoDB.
Inbound Webhook Triggers
Workflows can be triggered directly via HTTP POST/PUT/PATCH webhooks. When enabled, VaakLoom exposes a dedicated endpoint at /webhooks/:workflowId (or a custom path) that bypasses standard API key invoke protection in favor of HMAC signature verification.
Cryptographic Signature Verification
VaakLoom validates signatures using timing-safe comparisons to prevent timing attacks. Built-in header formats include:
- GitHub:
x-hub-signature-256(formatted assha256=<hex>) - Stripe:
stripe-signature(formatted ast=<timestamp>,v1=<hex>) - Shopify:
x-shopify-hmac-sha256(Base64-encoded HMAC) - Generic / Custom:
x-signatureorx-webhook-signaturewith SHA256 or SHA1
Execution Response Modes
| Mode | Status Code | Behavior & Best For |
|---|---|---|
immediate |
202 Accepted |
Responds immediately with { "acknowledged": true, "runId": "...", "mode": "async" }, then executes the workflow DAG asynchronously in the background. Prevents 5-second provider timeouts from Stripe and GitHub.
|
sync |
200 OK |
Waits for DAG execution to complete and returns the final transformed response directly to the caller. |
Workflow Spec Example
{
"version": 1,
"id": "stripe-webhook-handler",
"name": "Stripe Payment Ingestion",
"webhook": {
"enabled": true,
"path": "/webhooks/stripe-charge",
"secret": "${env.STRIPE_WEBHOOK_SECRET}",
"signatureHeader": "stripe-signature",
"signatureAlgorithm": "sha256",
"responseMode": "immediate"
},
"nodes": [
{
"type": "step",
"step": {
"id": "notify-fulfillment",
"kind": "rest",
"config": {
"method": "POST",
"url": "https://erp.internal/orders/fulfill",
"body": { "chargeId": "${attrs.body.data.object.id}" }
}
}
}
]
}
Outbound Webhook Dispatcher
VaakLoom's background Webhook Dispatcher listens to internal system events and streams them to external platforms like Slack, PagerDuty, Zapier, or customer data lakes.
Supported Trigger Events
*— Dispatches all platform events.workflow:completed— Fired whenever any workflow DAG completes successfully.workflow:failed— Fired on unhandled workflow failures.dlq:created— Fired whenever an item fails and is isolated in the Dead Letter Queue.governor:shed_load— Fired when CPU/Memory limits reach the 75% guardrail.cicd:deployed— Fired on automated CI/CD deployments.
Security & Signature Header
When an outbound subscription has a configured secret, VaakLoom automatically signs every dispatch payload with HMAC-SHA256 and includes the following headers:
POST /webhook-target HTTP/1.1
Host: hooks.example.com
Content-Type: application/json
User-Agent: VaakLoom-Webhook-Dispatcher/1.0
x-vaakloom-event: workflow:completed
x-vaakloom-delivery: del_99a812bf01
x-vaakloom-signature: sha256=a1b2c3d4e5f6...
x-hub-signature-256: sha256=a1b2c3d4e5f6...
Hub Management & REST API
Webhooks can be created, updated, inspected, and tested directly through the Hub Webhooks UI (/webhooks) or programmatically via the Platform REST API:
| Method | Endpoint | Description |
|---|---|---|
GET |
/hub/webhooks |
List all registered outbound webhook subscriptions. |
POST |
/hub/webhooks |
Create a new webhook subscription with events, URL, secret, and max retries. |
GET |
/hub/webhooks/:id |
Retrieve details for a specific webhook subscription. |
PUT |
/hub/webhooks/:id |
Update target URL, active status, secret, or subscribed events. |
DELETE |
/hub/webhooks/:id |
Delete a webhook subscription. |
POST |
/hub/webhooks/:id/test |
Dispatch an immediate live test ping to verify connectivity and latency. |
GET |
/hub/webhooks/deliveries |
Query delivery audit log history with optional subscriptionId and status filters. |