> ## Documentation Index
> Fetch the complete documentation index at: https://learn.nexudus.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Search WebHooks

> Search and list WebHook records with filtering, sorting, and pagination.

A webhook makes Nexudus send an HTTP POST with a JSON payload to an external URL whenever one chosen event happens in a location, so other systems can react in real time without polling the API. Each record has exactly one Action, so a separate webhook is needed per event, and a webhook registered on a network parent location also receives events from that parent's child locations. Delivery is signed with the location's Webhooks.SharedSecret setting when one is configured, retried with an increasing delay after each failure, and skipped when the same record would be sent with an identical payload twice. Delivery health is visible in LastTrigger, LastError and ErrorCount; the webhook is deactivated automatically once ErrorCount passes 10 or the URL does not start with http, and it is deleted automatically if the endpoint answers 410 Gone. Set Active to false to pause delivery without deleting the record.

## Authentication

<Note>
  This endpoint requires OAuth2 authentication. Include a valid bearer token in the `Authorization` header.
  The authenticated user must be a full unrestricted administrator or have the **`WebHook-List`** role.
</Note>

## Enums

<Accordion title="eWebhookAction — Action values">
  | Value | Name                                 |
  | ----- | ------------------------------------ |
  | 1     | None                                 |
  | 2     | CoworkerUpdate                       |
  | 3     | CoworkerCreate                       |
  | 4     | BlogPostCreate                       |
  | 5     | BlogPostUpdate                       |
  | 6     | BookingCreate                        |
  | 7     | BookingUpdate                        |
  | 8     | BookingDelete                        |
  | 9     | SendWelcomeEmail                     |
  | 10    | CoworkerContractActivate             |
  | 11    | CoworkerContractCancel               |
  | 12    | CoworkerContractRenew                |
  | 13    | CoworkerContractUpgradeDowngrade     |
  | 14    | CoworkerContractActivateFirst        |
  | 15    | CoworkerInvoiceCreateFirst           |
  | 16    | CoworkerInvoiceCreate                |
  | 17    | CoworkerInvoiceDelete                |
  | 18    | CoworkerInvoiceUpdate                |
  | 19    | CoworkerInvoiceRefund                |
  | 20    | CoworkerInvoiceCreditNote            |
  | 21    | CoworkerInvoicePaid                  |
  | 22    | CoworkerInvoiceFailedPayment         |
  | 23    | CoworkerInvoiceReceivedPayment       |
  | 24    | CoworkerInvoiceAwaitingPayment       |
  | 25    | CalendarEventCreate                  |
  | 26    | CalendarEventUpdate                  |
  | 27    | CalendarEventAttendeeDelete          |
  | 28    | CalendarEventAttendeeCreate          |
  | 29    | CalendarEventAttendeeUpdate          |
  | 30    | GlobalChatMessageCreate              |
  | 31    | NewsLetterSubscriberCreate           |
  | 32    | NewsLetterSubscriberSubscribed       |
  | 33    | NewsLetterSubscriberUnSubscribed     |
  | 34    | NewsLetterSubscriberRemovedFromGroup |
  | 35    | CoworkerCheckout                     |
  | 36    | CoworkerCheckin                      |
  | 37    | CoworkerCheckinFailed                |
  | 38    | VisitorNotification                  |
  | 39    | CommunityBoardNewThread              |
  | 40    | CommunityBoardNewReply               |
  | 41    | VisitorCheckedin                     |
  | 42    | VisitorRegistered                    |
  | 43    | BlogPostDelete                       |
  | 44    | CalendarEventDelete                  |
  | 45    | HelDeskMessageCreated                |
  | 46    | HelpDeskCommentCreated               |
  | 47    | CheckinCreated                       |
  | 48    | CheckinUpdated                       |
  | 49    | CheckinDeleted                       |
  | 50    | CoworkerDelete                       |
  | 51    | CoworkerMessageCreate                |
  | 52    | DeliveryCreated                      |
  | 53    | DeliveryAssigned                     |
  | 54    | ProposalCreated                      |
  | 55    | ProposalUpdated                      |
  | 56    | ProposalDeleted                      |
  | 57    | TeamCreated                          |
  | 58    | TeamUpdated                          |
  | 59    | TeamDeleted                          |
  | 60    | CoworkerContractUpdate               |
  | 61    | AccessControlUpdate                  |
  | 62    | CoworkerContractCreate               |
  | 63    | FailedCheckin                        |
  | 64    | VisitorDeleted                       |
  | 65    | CoworkerInvoiceLedgerEntryCreate     |
  | 66    | CoworkerInvoiceLedgerEntryDelete     |
  | 67    | CoworkerInvoiceLedgerEntryUpdate     |
  | 68    | CoworkerProductCreate                |
  | 69    | CoworkerProductUpdate                |
  | 70    | CoworkerProductDelete                |
  | 71    | FloorPlanDeskCreate                  |
  | 72    | FloorPlanDeskDelete                  |
  | 73    | FloorPlanDeskUpdate                  |
  | 74    | TariffCreate                         |
  | 75    | TariffDelete                         |
  | 76    | TariffUpdate                         |
  | 77    | CoworkerContractDelete               |
  | 78    | FloorPlanCreate                      |
  | 79    | FloorPlanDelete                      |
  | 80    | FloorPlanUpdate                      |
  | 81    | ProductCreate                        |
  | 82    | ProductDelete                        |
  | 83    | ProductUpdate                        |
  | 84    | BusinessUpdate                       |
  | 85    | CommunityGroupCreate                 |
  | 86    | CommunityGroupDelete                 |
  | 87    | CommunityGroupUpdate                 |
  | 88    | CoworkerPaymentMethodCreate          |
  | 89    | CoworkerPaymentMethodDelete          |
  | 90    | CoworkerPaymentMethodUpdate          |
</Accordion>

## Query Parameters

### Pagination & Sorting

<ParamField query="page" type="integer" default="1">
  The page number to retrieve.
</ParamField>

<ParamField query="size" type="integer" default="25">
  The number of records per page.
</ParamField>

<ParamField query="orderBy" type="string">
  The property name to sort results by (e.g. `Name`, `CreatedOn`).
</ParamField>

<ParamField query="dir" type="integer">
  Sort direction. `0` for ascending, `1` for descending.
</ParamField>

### Filters

<ParamField query="WebHook_Business" type="integer">
  Filter by iD of the location that owns this webhook. Events raised in this location trigger it, and a webhook registered on a network parent location also receives events from that parent's child locations..
</ParamField>

<ParamField query="WebHook_Name" type="string">
  Filter by display name used to identify this webhook in the location's webhook list; it is not sent to the endpoint..
</ParamField>

<ParamField query="WebHook_Action" type="integer">
  Filter by the single event that triggers this webhook, such as CoworkerCreate, BookingCreate or CoworkerInvoicePaid. Only one action per webhook, so create a separate record for each event you need. Defaults to None, which never fires, so always set this explicitly..
</ParamField>

<ParamField query="WebHook_Description" type="string">
  Filter by optional free-text note describing the webhook's purpose. It is not shown in the admin form and is not sent to the endpoint..
</ParamField>

<ParamField query="WebHook_URL" type="string">
  Filter by endpoint that receives the HTTP POST JSON payload when the webhook fires, up to 1024 characters. It must start with http or https; any other value records an error and deactivates the webhook on the first delivery attempt..
</ParamField>

<ParamField query="WebHook_Active" type="boolean">
  Filter by whether the webhook is enabled and will fire when its action occurs. Set false to pause delivery without deleting the record. Nexudus sets it to false automatically once ErrorCount passes 10, or when the URL does not start with http..
</ParamField>

<ParamField query="WebHook_LastError" type="string">
  Filter by message from the most recent failed delivery attempt, cleared at the start of each new attempt. Read-only diagnostic written by the delivery service; fix the endpoint rather than trying to change this value..
</ParamField>

<ParamField query="WebHook_ErrorCount" type="integer">
  Filter by consecutive failed delivery attempts. Reset to 0 after a successful call, incremented on each failure, and the webhook is deactivated once it passes 10. Read-only diagnostic written by the delivery service..
</ParamField>

<ParamField query="WebHook_LastTrigger" type="string">
  Filter by uTC date and time of the most recent delivery attempt, recorded when the attempt starts rather than when it succeeds; check LastError and ErrorCount to tell whether that attempt succeeded. Read-only diagnostic written by the delivery service..
</ParamField>

### Range Filters

<ParamField query="from_WebHook_ErrorCount" type="integer">
  Filter by consecutive failed delivery attempts. Reset to 0 after a successful call, incremented on each failure, and the webhook is deactivated once it passes 10. Read-only diagnostic written by the delivery service. greater than or equal to this value.
</ParamField>

<ParamField query="to_WebHook_ErrorCount" type="integer">
  Filter by consecutive failed delivery attempts. Reset to 0 after a successful call, incremented on each failure, and the webhook is deactivated once it passes 10. Read-only diagnostic written by the delivery service. less than or equal to this value.
</ParamField>

<ParamField query="from_WebHook_LastTrigger" type="string">
  Filter by uTC date and time of the most recent delivery attempt, recorded when the attempt starts rather than when it succeeds; check LastError and ErrorCount to tell whether that attempt succeeded. Read-only diagnostic written by the delivery service. greater than or equal to this value. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

<ParamField query="to_WebHook_LastTrigger" type="string">
  Filter by uTC date and time of the most recent delivery attempt, recorded when the attempt starts rather than when it succeeds; check LastError and ErrorCount to tell whether that attempt succeeded. Read-only diagnostic written by the delivery service. less than or equal to this value. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

<ParamField query="from_WebHook_CreatedOn" type="string">
  Filter records created on or after this date. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

<ParamField query="to_WebHook_CreatedOn" type="string">
  Filter records created on or before this date. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

<ParamField query="from_WebHook_UpdatedOn" type="string">
  Filter records updated on or after this date. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

<ParamField query="to_WebHook_UpdatedOn" type="string">
  Filter records updated on or before this date. Format: `YYYY-MM-DDTHH:mm`.
</ParamField>

## Code Examples

### Simple listing

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET \
    "https://spaces.nexudus.com/api/sys/webhooks?page=1&size=15&orderBy=Name&dir=0" \
    -H "Authorization: Bearer YOUR_TOKEN"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://spaces.nexudus.com/api/sys/webhooks?' + new URLSearchParams({
      page: 1,
      size: 15,
      orderBy: 'Name',
      dir: 1 // Ascending
    }),
    {
      headers: {
        'Authorization': 'Bearer YOUR_TOKEN'
      }
    }
  );

  const data = await response.json();
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      'https://spaces.nexudus.com/api/sys/webhooks',
      params={
          'page': 1,
          'size': 15,
          'orderBy': 'Name',
          'dir': 0 // Ascending
      },
      headers={
          'Authorization': 'Bearer YOUR_TOKEN'
      }
  )

  data = response.json()
  ```
</CodeGroup>

### Filtering by Name

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET \
    "https://spaces.nexudus.com/api/sys/webhooks?WebHook_Name=example-value&orderBy=Name&dir=0" \
    -H "Authorization: Bearer YOUR_TOKEN"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://spaces.nexudus.com/api/sys/webhooks?' + new URLSearchParams({
      WebHook_Name: 'example-value',
      orderBy: 'Name',
      dir: 1
    }),
    {
      headers: {
        'Authorization': 'Bearer YOUR_TOKEN'
      }
    }
  );

  const data = await response.json();
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      'https://spaces.nexudus.com/api/sys/webhooks',
      params={
          'WebHook_Name': 'example-value',
          'orderBy': 'Name',
          'dir': 0 // Ascending
      },
      headers={
          'Authorization': 'Bearer YOUR_TOKEN'
      }
  )

  data = response.json()
  ```
</CodeGroup>

### Range filters

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET \
    "https://spaces.nexudus.com/api/sys/webhooks?from_WebHook_UpdatedOn=2025-01-01T00:00&to_WebHook_UpdatedOn=2025-12-31T23:59&orderBy=UpdatedOn&dir=0" \
    -H "Authorization: Bearer YOUR_TOKEN"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://spaces.nexudus.com/api/sys/webhooks?' + new URLSearchParams({
      from_WebHook_UpdatedOn: '2025-01-01T00:00',
      to_WebHook_UpdatedOn: '2025-12-31T23:59',
      orderBy: 'UpdatedOn',
      dir: 1 // Descending
     }),
    {
      headers: {
        'Authorization': 'Bearer YOUR_TOKEN'
      }
    }
  );

  const data = await response.json();
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      'https://spaces.nexudus.com/api/sys/webhooks',
      params={
          'from_WebHook_UpdatedOn': '2025-01-01T00:00',
          'to_WebHook_UpdatedOn': '2025-12-31T23:59',
          'orderBy': 'UpdatedOn',
          'dir': 1 // Descending
      },
      headers={
          'Authorization': 'Bearer YOUR_TOKEN'
      }
  )

  data = response.json()
  ```
</CodeGroup>

## Response

### 200

<ResponseField name="Records" type="WebHook[]">
  The list of WebHook records matching the query. See the [Get one WebHook](/rest-api/sys/get-webhooks-by-id) endpoint for the full list of properties returned for each record.
</ResponseField>

<Warning>
  **Partial records** — The listing endpoint returns a summary representation of each WebHook. The following fields are **not populated** in the `Records[]` response: `Description`.

  To get all fields, fetch the full record using the [Get one WebHook](/rest-api/sys/get-webhooks-by-id) endpoint.

  **Important for updates:** When updating a record via `PUT`, always retrieve the full record with a `GET` request first, apply your changes to that complete data, and then send the updated record. Do not use data from a listing response as the base for a `PUT` request, as missing fields may be unintentionally cleared.
</Warning>

<ResponseField name="CurrentPage" type="integer">
  Current page number.
</ResponseField>

<ResponseField name="CurrentPageSize" type="integer">
  Number of records per page.
</ResponseField>

<ResponseField name="CurrentOrderField" type="string">
  The field used for sorting.
</ResponseField>

<ResponseField name="CurrentSortDirection" type="integer">
  The sort direction (`0` = ascending, `1` = descending).
</ResponseField>

<ResponseField name="FirstItem" type="integer">
  Index of the first item on the current page.
</ResponseField>

<ResponseField name="LastItem" type="integer">
  Index of the last item on the current page.
</ResponseField>

<ResponseField name="TotalItems" type="integer">
  Total number of matching records across all pages.
</ResponseField>

<ResponseField name="TotalPages" type="integer">
  Total number of pages.
</ResponseField>

<ResponseField name="HasNextPage" type="boolean">
  Whether there is a next page of results.
</ResponseField>

<ResponseField name="HasPreviousPage" type="boolean">
  Whether there is a previous page of results.
</ResponseField>

```json Example Response theme={null}
{
  "Records": [
    {
      "BusinessId": 0,
      "Name": "",
      "Action": 0,
      "URL": "",
      "Active": false,
      "LastError": null,
      "ErrorCount": 0,
      "LastTrigger": null,
      "Id": 87654321,
      "UpdatedOn": "2025-01-15T10:30:00Z",
      "CreatedOn": "2025-01-10T08:00:00Z",
      "UniqueId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "UpdatedBy": "admin@example.com",
      "IsNew": false,
      "SystemId": null,
      "ToStringText": "WebHook Example",
      "LocalizationDetails": null,
      "CustomFields": null
    }
  ],
  "CurrentPageSize": 15,
  "CurrentPage": 1,
  "CurrentOrderField": "Name",
  "CurrentSortDirection": 1,
  "FirstItem": 1,
  "HasNextPage": false,
  "HasPreviousPage": false,
  "LastItem": 1,
  "PageNumber": 1,
  "PageSize": 15,
  "TotalItems": 1,
  "TotalPages": 1
}
```
