For the complete documentation index, see llms.txt. This page is also available as Markdown.

Webhook

List webhooks

get
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Query parameters
pageinteger · min: 1 · max: 9007199254740991Optional

Which page to fetch

Default: 1
pageSizeinteger · min: 1 · max: 30Optional

Page size to use

Default: 30
Responses
200

Successful response

application/json
pagenumberRequired

Current page

nextnumber · nullableRequired

Next page or null if there is none

prevnumber · nullableRequired

Previous page or null if there is none

pageSizenumberRequired

Max count of items per page

totalnumberRequired

Total count of items

get/notifications/webhooks
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
      }
    }
  ]
}

Create a webhook

post
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Body
namestring · min: 1 · max: 60Required

What an admin calls this endpoint

descriptionstring · max: 500Optional

What the endpoint is for; free text

urlstring · uri · max: 255Required

Full URL of the webhook

secretstring · min: 1 · max: 255Optional

Existing signing secret to reuse; generated when omitted

scopeUserIdsstring[]Optional

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.

Default: []
retryStrategystring · enumOptional

Backoff shape between delivery attempts

Default: EXPONENTIALPossible values:
maxRetriesinteger · max: 20Optional

Max delivery attempts

Default: 10
initialIntervalMsinteger · min: 100 · max: 60000Optional

Initial backoff interval (ms)

Default: 5000
Responses
200

Successful response

application/json
idstringRequired

Webhook id

namestringRequired

What an admin calls this endpoint

descriptionstring · nullableRequired

What the endpoint is for; free text

urlstring · uriRequired

Full URL of the webhook

statusstring · enumRequired

Lifecycle status

Possible values:
scopeUserIdsstring[]Required

Operator ids narrowing delivery

retryStrategystring · enumRequired

Backoff shape

Possible values:
maxRetriesnumberRequired

Max delivery attempts

initialIntervalMsnumberRequired

Initial backoff interval (ms)

createdAtstringRequired

Creation timestamp

updatedAtstringRequired

Last update timestamp

secretstringRequired

Signing secret, shown once and never retrievable again

post/notifications/webhooks
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"
}

Get webhook by ID

get
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
idstringRequired

Id of the target webhook

Responses
200

Successful response

application/json
idstringRequired

Webhook id

namestringRequired

What an admin calls this endpoint

descriptionstring · nullableRequired

What the endpoint is for; free text

urlstring · uriRequired

Full URL of the webhook

statusstring · enumRequired

Lifecycle status

Possible values:
scopeUserIdsstring[]Required

Operator ids narrowing delivery

retryStrategystring · enumRequired

Backoff shape

Possible values:
maxRetriesnumberRequired

Max delivery attempts

initialIntervalMsnumberRequired

Initial backoff interval (ms)

createdAtstringRequired

Creation timestamp

updatedAtstringRequired

Last update timestamp

consecutiveFailuresnumberRequired

Settled failures in a row; explains a BROKEN status

brokenSincestring · nullableRequired

When the endpoint broke; events are kept from that date for a replay

get/notifications/webhooks/{id}
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
  }
}

Delete a webhook

delete
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
idstringRequired

Id of the target webhook

Responses
200

Successful response

application/json
successbooleanRequired

Always true

delete/notifications/webhooks/{id}
DELETE /rest/notifications/webhooks/{id} HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "success": true
}

Update a webhook

patch
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
idstringRequired

Id of the target webhook

Body
namestring · min: 1 · max: 60Optional

What an admin calls this endpoint

descriptionstring · max: 500 · nullableOptional

What the endpoint is for; free text

urlstring · uri · max: 255Optional

Full URL of the webhook

statusstring · enumOptional

Lifecycle status

Possible values:
scopeUserIdsstring[]Optional

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.

retryStrategystring · enumOptionalPossible values:
maxRetriesinteger · max: 20Optional
initialIntervalMsinteger · min: 100 · max: 60000Optional
Responses
200

Successful response

application/json
idstringRequired

Webhook id

namestringRequired

What an admin calls this endpoint

descriptionstring · nullableRequired

What the endpoint is for; free text

urlstring · uriRequired

Full URL of the webhook

statusstring · enumRequired

Lifecycle status

Possible values:
scopeUserIdsstring[]Required

Operator ids narrowing delivery

retryStrategystring · enumRequired

Backoff shape

Possible values:
maxRetriesnumberRequired

Max delivery attempts

initialIntervalMsnumberRequired

Initial backoff interval (ms)

createdAtstringRequired

Creation timestamp

updatedAtstringRequired

Last update timestamp

patch/notifications/webhooks/{id}
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"
}

List the recent deliveries of a webhook

get
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
idstringRequired

Id of the target webhook

Query parameters
pageinteger · min: 1 · max: 9007199254740991Optional

Which page to fetch

Default: 1
pageSizeinteger · min: 1 · max: 30Optional

Page size to use

Default: 30
Responses
200

Successful response

application/json
pagenumberRequired

Current page

nextnumber · nullableRequired

Next page or null if there is none

prevnumber · nullableRequired

Previous page or null if there is none

pageSizenumberRequired

Max count of items per page

totalnumberRequired

Total count of items

get/notifications/webhooks/{id}/deliveries
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"
    }
  ]
}

Replay the failed deliveries of a webhook

post
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
idstringRequired

Id of the target webhook

Responses
200

Successful response

application/json
replayednumberRequired

Deliveries put back in the queue

remainingnumberRequired

Failures left to replay; a lower bound on a large dead letter

post/notifications/webhooks/{id}/replay-failed
POST /rest/notifications/webhooks/{id}/replay-failed HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "replayed": 1,
  "remaining": 1
}

Rotate a webhook signing secret

post
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
idstringRequired

Id of the target webhook

Responses
200

Successful response

application/json
idstringRequired

Webhook id

secretstringRequired

Signing secret, shown once and never retrievable again

post/notifications/webhooks/{id}/rotate-secret
POST /rest/notifications/webhooks/{id}/rotate-secret HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "id": "text",
  "secret": "text"
}

Webhook delivery

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.

Header parameters
X-Ledger-SignaturestringRequired

Delivery signature, see above.

Payload
or
or
or
or
or
Responses
2XX

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