Webhook
Which page to fetch
1Page size to use
30Successful response
Current page
Next page or null if there is none
Previous page or null if there is none
Max count of items per page
Total count of items
Invalid input data
Authorization not provided
Insufficient access
Not found
Internal server error
GET /rest/notifications/webhooks HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"page": 1,
"next": 1,
"prev": 1,
"pageSize": 1,
"total": 1,
"results": [
{
"id": "text",
"name": "text",
"description": "text",
"url": "https://example.com",
"status": "ENABLED",
"rules": [
{
"id": "text",
"actions": [
"RequestCreated"
],
"requestTypes": [
"UPDATE_QUORUM"
]
}
],
"scopeUserIds": [
"text"
],
"retryStrategy": "FIXED",
"maxRetries": 1,
"initialIntervalMs": 1,
"createdAt": "text",
"updatedAt": "text",
"consecutiveFailures": 1,
"brokenSince": "text",
"stats": {
"windowDays": 1,
"delivered": 1,
"failed": 1,
"successRate": 1
}
}
]
}What an admin calls this endpoint
What the endpoint is for; free text
Full URL of the webhook
Existing signing secret to reuse; generated when omitted
Operator ids narrowing delivery. Empty delivers every event of the workspace. When set, an event is delivered only if one of these operators is a recipient of it, so the endpoint receives no administration event: those go to admins, and this list holds operators.
[]Backoff shape between delivery attempts
EXPONENTIALPossible values: Max delivery attempts
10Initial backoff interval (ms)
5000Successful response
Webhook id
What an admin calls this endpoint
What the endpoint is for; free text
Full URL of the webhook
Lifecycle status
Operator ids narrowing delivery
Backoff shape
Max delivery attempts
Initial backoff interval (ms)
Creation timestamp
Last update timestamp
Signing secret, shown once and never retrievable again
Invalid input data
Authorization not provided
Insufficient access
Internal server error
POST /rest/notifications/webhooks HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 249
{
"name": "text",
"description": "text",
"url": "https://example.com",
"rules": [
{
"actions": [
"RequestCreated"
],
"requestTypes": [
"UPDATE_QUORUM"
]
}
],
"secret": "text",
"scopeUserIds": [
"text"
],
"retryStrategy": "EXPONENTIAL",
"maxRetries": 10,
"initialIntervalMs": 5000
}{
"id": "text",
"name": "text",
"description": "text",
"url": "https://example.com",
"status": "ENABLED",
"rules": [
{
"id": "text",
"actions": [
"RequestCreated"
],
"requestTypes": [
"UPDATE_QUORUM"
]
}
],
"scopeUserIds": [
"text"
],
"retryStrategy": "FIXED",
"maxRetries": 1,
"initialIntervalMs": 1,
"createdAt": "text",
"updatedAt": "text",
"secret": "text"
}Id of the target webhook
Successful response
Webhook id
What an admin calls this endpoint
What the endpoint is for; free text
Full URL of the webhook
Lifecycle status
Operator ids narrowing delivery
Backoff shape
Max delivery attempts
Initial backoff interval (ms)
Creation timestamp
Last update timestamp
Settled failures in a row; explains a BROKEN status
When the endpoint broke; events are kept from that date for a replay
Invalid input data
Authorization not provided
Insufficient access
Not found
Internal server error
GET /rest/notifications/webhooks/{id} HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"id": "text",
"name": "text",
"description": "text",
"url": "https://example.com",
"status": "ENABLED",
"rules": [
{
"id": "text",
"actions": [
"RequestCreated"
],
"requestTypes": [
"UPDATE_QUORUM"
]
}
],
"scopeUserIds": [
"text"
],
"retryStrategy": "FIXED",
"maxRetries": 1,
"initialIntervalMs": 1,
"createdAt": "text",
"updatedAt": "text",
"consecutiveFailures": 1,
"brokenSince": "text",
"stats": {
"windowDays": 1,
"delivered": 1,
"failed": 1,
"successRate": 1
}
}Id of the target webhook
Successful response
Always true
Invalid input data
Authorization not provided
Insufficient access
Not found
Internal server error
DELETE /rest/notifications/webhooks/{id} HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"success": true
}Id of the target webhook
What an admin calls this endpoint
What the endpoint is for; free text
Full URL of the webhook
Lifecycle status
Operator ids narrowing delivery. Empty delivers every event of the workspace. When set, an event is delivered only if one of these operators is a recipient of it, so the endpoint receives no administration event: those go to admins, and this list holds operators.
Successful response
Webhook id
What an admin calls this endpoint
What the endpoint is for; free text
Full URL of the webhook
Lifecycle status
Operator ids narrowing delivery
Backoff shape
Max delivery attempts
Initial backoff interval (ms)
Creation timestamp
Last update timestamp
Invalid input data
Authorization not provided
Insufficient access
Not found
Internal server error
PATCH /rest/notifications/webhooks/{id} HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 242
{
"name": "text",
"description": "text",
"url": "https://example.com",
"status": "ENABLED",
"rules": [
{
"actions": [
"RequestCreated"
],
"requestTypes": [
"UPDATE_QUORUM"
]
}
],
"scopeUserIds": [
"text"
],
"retryStrategy": "FIXED",
"maxRetries": 1,
"initialIntervalMs": 1
}{
"id": "text",
"name": "text",
"description": "text",
"url": "https://example.com",
"status": "ENABLED",
"rules": [
{
"id": "text",
"actions": [
"RequestCreated"
],
"requestTypes": [
"UPDATE_QUORUM"
]
}
],
"scopeUserIds": [
"text"
],
"retryStrategy": "FIXED",
"maxRetries": 1,
"initialIntervalMs": 1,
"createdAt": "text",
"updatedAt": "text"
}Id of the target webhook
Which page to fetch
1Page size to use
30Successful response
Current page
Next page or null if there is none
Previous page or null if there is none
Max count of items per page
Total count of items
Invalid input data
Authorization not provided
Insufficient access
Not found
Internal server error
GET /rest/notifications/webhooks/{id}/deliveries HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"page": 1,
"next": 1,
"prev": 1,
"pageSize": 1,
"total": 1,
"results": [
{
"id": "text",
"status": "SUCCEEDED",
"action": "text",
"eventId": "text",
"createdAt": "text",
"replayedAt": "text"
}
]
}Id of the target webhook
Successful response
Deliveries put back in the queue
Failures left to replay; a lower bound on a large dead letter
Invalid input data
Authorization not provided
Insufficient access
Internal server error
POST /rest/notifications/webhooks/{id}/replay-failed HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"replayed": 1,
"remaining": 1
}Id of the target webhook
Successful response
Webhook id
Signing secret, shown once and never retrievable again
Invalid input data
Authorization not provided
Insufficient access
Internal server error
POST /rest/notifications/webhooks/{id}/rotate-secret HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"id": "text",
"secret": "text"
}Sent to the URL of every enabled webhook whose rules match the event.
Each delivery is signed with the endpoint's secret, as X-Ledger-Signature: t=<unix seconds>,v1=<signature>, where the signature is the hex HMAC-SHA256 of "<t>.<body>" over the raw request body. Verify it against those exact bytes rather than against a re-serialized payload.
Answer with any 2xx. Anything else, including no answer at all, is retried following the endpoint's retry strategy. Once it fails too many times in a row the endpoint is parked as BROKEN: delivery stops until an admin re-enables it, which also makes the missed deliveries replayable.
Deliveries are not ordered; reconcile on timestamp.
Delivery signature, see above.
Delivery accepted; nothing is read from the response body.
No content
Payload
{
"eventId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2026-01-01T00:00:00.000Z",
"webhookId": "text",
"action": "RequestCreated",
"request": {
"id": "text",
"type": "text",
"targetId": "text"
}
}Last updated