This page documents the canonical HTTP contract. Switch to the CLI example when you want the operator workflow.
Creation inserts the subscription and returns the new signing_secret once. Save it securely; later reads omit it. Filters and metadata default to empty objects. Unknown event names return 400.
Delivery is asynchronous. The compact JSON event body is signed with HMAC-SHA256 over timestamp + "." + body, using a v1=<hex> signature. Headers include X-SmartTable-Webhook-Id, X-SmartTable-Webhook-Timestamp, X-SmartTable-Webhook-Signature, X-SmartTable-Event-Type, X-SmartTable-Webhook-Delivery-Id, and Idempotency-Key. A 2xx response succeeds; every other HTTP status or request exception schedules exponential retry until the attempt limit.
Body parameters
urlrequiredstring
Absolute http(s) URL without embedded username/password. Production requires HTTPS; public-host restrictions apply in production.
eventsrequiredarray<string>
At least one supported event or family. Values are trimmed, lowercased, deduplicated, then validated against the event catalog.
enabled· optionalboolean
Set false to create paused.
filters· optionalobject
Delivery matching filters: exact nested paths plus conditions using field/path/key, operator, and value/expected/equals. Operators: eq, neq, gt, gte, lt, lte, exists, not_exists, in, not_in, contains, not_contains; condition mode is and (default) or or.
metadata· optionalobject
Opaque metadata for client use.
retryPolicy· optionalobject
max_attempts 1-50 (default 8), base_delay_seconds 1-3600 (default 10), max_delay_seconds 1-86400 (default 900 and raised to at least base), timeout_seconds 1-120 (default 10). Values are clamped; invalid values fall back to defaults.
| Name | Type | Description |
|---|---|---|
| urlrequired | string | Absolute http(s) URL without embedded username/password. Production requires HTTPS; public-host restrictions apply in production. |
| eventsrequired | array<string> | At least one supported event or family. Values are trimmed, lowercased, deduplicated, then validated against the event catalog. |
| enabled | boolean | Set false to create paused. |
| filters | object | Delivery matching filters: exact nested paths plus conditions using field/path/key, operator, and value/expected/equals. Operators: eq, neq, gt, gte, lt, lte, exists, not_exists, in, not_in, contains, not_contains; condition mode is and (default) or or. |
| metadata | object | Opaque metadata for client use. |
| retryPolicy | object | max_attempts 1-50 (default 8), base_delay_seconds 1-3600 (default 10), max_delay_seconds 1-86400 (default 900 and raised to at least base), timeout_seconds 1-120 (default 10). Values are clamped; invalid values fall back to defaults. |
Errors
| Status | Meaning |
|---|---|
| 400 | Invalid URL or unsupported/empty events. |
| 401 | Invalid API key or missing auth. |
| 403 | Missing webhooks:write scope. |
| 422 | Missing or malformed required body fields. |
