High-Volume Webhook Dispatch
A massively resilient, asynchronous, event-driven Webhook dispatcher enabling secure, instantaneous data synchronization with immense external APIs.
Modern enterprise systems must communicate. Instead of forcing clients to aggressively poll your REST API, SCRIPE includes a native, massively efficient outbound Webhook dispatcher. Push critical domain events instantly to any external system securely over HTTPS.
Globally Broadcast Supported Events
| Event | Trigger | Payload |
|---|---|---|
| user.created | New user registration | User details, tenant, role |
| user.updated | User profile change | Changed fields, before/after |
| user.deleted | User soft-deleted | User ID, tenant, timestamp |
| tenant.created | New tenant provisioned | Tenant settings, parent |
| tenant.deactivated | Tenant suspended | Tenant ID, reason, timestamp |
| role.permissions.changed | Permission assignment | Role, added/removed permissions |
| entity.created/updated/deleted | Any entity CRUD | Entity type, ID, changes |
| auth.login.failed | Failed login attempt | Email, IP, attempt count |
HMAC Cryptographic Signatures
Every outbound payload is securely signed using an HMAC-SHA256 signature generated from the tenant's secret key. Third-party integrations can definitively verify that the webhook originated from your SCRIPE servers and the payload was not intercepted or mutated globally.
POST /your-webhook-endpoint HTTP/1.1
Content-Type: application/json
X-Webhook-Signature: sha256=abc123...
X-Webhook-Id: evt_abc123
X-Webhook-Timestamp: 2026-02-20T12:00:00Z
{
"event": "user.created",
"timestamp": "2026-02-20T12:00:00Z",
"tenantId": "tenant_123",
"data": { ... }
}
// Verify: HMAC-SHA256(secret, body) == X-Webhook-SignatureExponential Persistent Backoff
If a subscriber's server goes offline, SCRIPE does not discard the payload. Utilizing an intelligent, exponentially backed-off persistent outbox pattern, it mathematically retries the request (e.g., 5 seconds, 1 minute, 1 hour, 1 day) until receipt is confirmed via an HTTP 2xx status.
| Attempt | Delay | Timeout |
|---|---|---|
| 1st | Immediate | 30 seconds |
| 2nd | 1 minute | 30 seconds |
| 3rd | 5 minutes | 30 seconds |
| 4th | 30 minutes | 30 seconds |
| 5th | 2 hours | 30 seconds |
| 6th (final) | 12 hours | 30 seconds |
Forensic Dispatch Auditing
| Log Field | Description |
|---|---|
| Event ID | Unique identifier for the webhook delivery |
| Status | Pending, Delivered, Failed, Retrying |
| HTTP Status | Response code from your endpoint |
| Duration | Time taken for delivery (ms) |
| Attempt # | Current retry attempt number |
| Response Body | First 500 chars of response (for debugging) |
Dynamic Subscription Management
| Method | Endpoint | Description | Auth |
|---|---|---|---|
| GET | /api/webhooks | List subscriptions | 🔒 Required |
| POST | /api/webhooks | Create subscription | 🔒 Required |
| PUT | /api/webhooks/{id} | Update subscription | 🔒 Required |
| DELETE | /api/webhooks/{id} | Delete subscription | 🔒 Required |
| POST | /api/webhooks/{id}/test | Send test event | 🔒 Required |
| GET | /api/webhooks/{id}/logs | View delivery logs | 🔒 Required |