Events
Check Webhooks
Lists all webhooks configured on the instance or returns a single one by label
GET
Check Webhooks
Auth:
After
Envelope:
TokenAccount or TokenInstance • Rate limit: Global (100/min) • Idempotent: yes
Description
Read endpoint. Without query, returns all webhooks (enabled and disabled) on the instance. With?label=<name>, returns the single webhook with that label (or 404).
Examples
List all
Without a query string, returns thewebhooks[] array with all webhooks on the instance (enabled and disabled), sorted alphabetically by label.
A specific one
Passing?label=analytics-pipeline, returns just the webhook with that label in the envelope’s webhook field (or 404 if it doesn’t exist).
Explicit default
Fetches the default webhook by passing?label=default. Useful when you created the webhook without specifying a label and want to read just that entry instead of the full list.
Success response
Without?label=, returns webhooks[] (sorted alphabetically by label, always present, comes back as [] if no webhook exists, and also includes the ones with enabled=false for operational inspection). With ?label=<name>, returns the single object in webhook (same shape as POST). The authorization is decrypted when ENCRYPTION_KEY is configured; if the key was rotated and some value cannot be decrypted, the field is returned encrypted instead of failing the request.
200 OK (list, no ?label=)
200 OK (?label=analytics-pipeline)
Present only when there is no
?label=. Sorted alphabetically by label. Always returned even when no webhook exists (webhooks: []).Present only when
?label=<name> is used. Same shape as POST.Path parameters
Instance name.
Headers
TokenAccount or TokenInstance.Query parameters
When present, returns a single webhook (
webhook in the envelope). When absent, returns the list (webhooks[]).Passing ?label= (empty) is still considered “present” → it becomes "default" and looks up the row with that label.- Listing includes
enabled=false, operators see the full history. To list only active ones, filter on the client byw.enabled === true. authorizationdecrypted: ifENCRYPTION_KEYis configured and the value is encrypted at rest, the repository decrypts it before returning. If the key was rotated and a value cannot be decrypted, the field is returned encrypted (with a warning in the log) instead of failing the request.
Delivery: queue, retry, DLQ
Webhook delivery is async and persisted. Every event that matches a webhook is enqueued inwebhook_queue and processed by parallel workers.
Flow
Exponential backoff
| Attempt | Next retry |
|---|---|
| 1 (fail) | +1s |
| 2 (fail) | +5s |
| 3 (fail) | +30s |
| 4 (fail) | +5min |
| 5 (fail) | +30min |
| 6+ | +1h (cap) |
max_attempts (default 5), status becomes failed (DLQ). The row is not deleted automatically, operators can inspect last_error and re-enqueue manually (UPDATE webhook_queue SET status='pending', next_retry_at=now()).
webhook_queue table (ops summary)
| Column | Description |
|---|---|
id | BIGSERIAL PK |
instance_name | Instance name |
url | Final destination (already with /event-name suffix if byEvents) |
payload | BYTEA, JSON body of the event |
auth_header | Configured Authorization (encrypted at rest) |
event_type | Event name (message.exchange etc.) |
status | pending | delivered | failed |
attempts | Attempt counter |
max_attempts | Default 5 |
next_retry_at | Next attempt window |
last_error | Last error message from the consumer |
created_at / updated_at | Timestamps |
Delivered headers
EachPOST to your webhook arrives with:
Errors
| HTTP | error.message | Applies to |
|---|---|---|
| 400 | label too long (max 50 chars) | ?label= |
| 400 | label may only contain letters, digits, underscore or dash | ?label= |
| 401 | Invalid token | both |
| 404 | Instance not found | both |
| 404 | Webhook not configured for this label | ?label= |
| 429 | Rate limit exceeded. Try again later. | both |
| 500 | Failed to get instance | both |
| 500 | Failed to list webhook configurations | no query |
Next
Configure webhook
POST /api/events/webhook/:instanceEvent catalog
Schemas of the 6 event types.