Managing your Webhooks

How do I manage my Webhooks?

In order to be able to manage Webhooks through our API, please contact our sales team to enable that functionality on your account.

Authentication

All webhook endpoints require a valid API key passed via the Authorization header. If you don't have a valid API key, please contact our sales team.

Rate Limits

EndpointRate Limit
Create a Webhook5 requests per hour
All other endpoints120 requests per minute

Limits

Each API key can have a maximum of 10 webhooks.

Event Types

The following event types are currently available for webhooks:

ValueLabel
clientview_updatedTriggers when a ClientView Updated
incremental_updateTriggers with each Incremental Update
series_updatedTriggers when a Series is updated

You can also retrieve the list of available event types programmatically via GET /api/v2/webhooks/event-types.

Webhook Object

FieldTypeDescription
idintegerUnique identifier for the webhook.
urlstringThe URL that will receive webhook deliveries.
event_typestringThe event type this webhook is subscribed to.
activebooleanWhether the webhook is currently active. At creation, this will be automatically enabled.
is_testbooleanWhether this is a test webhook. Test webhooks do not receive production deliveries.
header_namestringName of the authentication header sent with each delivery.
prefixstringPrefix prepended to the auth secret in the header value (e.g. Bearer).
masked_auth_secretstringMasked version of the auth secret, showing only the last 4 characters (e.g. ****7890).
created_atdatetimeTimestamp of when the webhook was created.

Webhook Actions

Create a Webhook

API Reference: https://docs.daloopa.com/reference/create_webhook

curl --request POST \
     --url https://app.daloopa.com/api/v2/webhooks \

Creates a new webhook for the authenticated user.

Request Body

FieldTypeRequiredDescription
urlstringYesThe URL that will receive webhook deliveries.
event_typestringYesOne of the available event types. See the Event Types section for more information.
is_testbooleanYesSet to true to create a test webhook that won't receive production deliveries.
header_namestringNoName of the authentication header to include in deliveries. (e.g, Authorization, X-API-KEY)
prefixstringNoPrefix for the auth secret value (e.g. Bearer).
auth_secretstringNoSecret value used for authenticating deliveries. Stored encrypted; only the last 4 characters are visible after creation.

Example Request

{
  "url": "https://example.com/webhook",
  "event_type": "clientview_updated",
  "is_test": false,
  "header_name": "Authorization",
  "prefix": "Bearer",
  "auth_secret": "my-secret-token"
}

Response 201 Created

Returns the created Webhook object.

Errors

StatusDescription
400 Bad RequestInvalid or missing required fields.
403 ForbiddenWebhook limit reached (max 10 per API key), rate limit reached or account not enabled.

List your Webhooks

API Reference: https://docs.daloopa.com/reference/list_webhooks

curl --request GET \
     --url https://app.daloopa.com/api/v2/webhooks \

Returns all webhooks owned by the authenticated user. Supports pagination and filtering.

Query Parameters

ParameterTypeRequiredDescription
event_typestringNoFilter by event type.
is_testbooleanNoFilter by test/production webhooks.
activebooleanNoFilter by active/inactive webhooks.
limitintegerNoMaximum number of results to return.
offsetintegerNoNumber of results to skip for pagination.

Response 200 OK

{
  "count": 2,
  "next": null,
  "previous": null,
  "results": [
    {
      "id": 1,
      "url": "https://example.com/webhook",
      "event_type": "clientview_updated",
      "active": true,
      "is_test": false,
      "header_name": "Authorization",
      "prefix": "Bearer",
      "masked_auth_secret": "****oken",
      "created_at": "2025-01-15T10:30:00Z"
    }
  ]
}

Retrieve a Webhook

API Reference: https://docs.daloopa.com/reference/retrieve_webhook

curl --request GET \
     --url https://app.daloopa.com/api/v2/webhooks/{id} \

Returns a single webhook by its ID.

Path Parameters

ParameterTypeDescription
idintegerThe webhook ID.

Response 200 OK

Returns the Webhook object.

Errors

StatusDescription
404 Not FoundWebhook does not exist or does not belong to the authenticated user.

Update a Webhook

API Reference: https://docs.daloopa.com/reference/update_webhook

curl --request PATCH \
     --url https://app.daloopa.com/api/v2/webhooks/{id} \

Updates an existing webhook. Only the fields you include in the request body will be modified. At least one field must be provided.

Path Parameters

ParameterTypeDescription
idintegerThe webhook ID.

Request Body

All fields are optional, but at least one must be provided.

Field

Type

Description

url

string

The new delivery URL.

event_type

string

The new event type.

is_test

boolean

Whether this is a test webhook.

active

boolean

Whether the webhook is active.

header_name

string

New authentication header name.

prefix

string

New auth secret prefix.

auth_secret

string

New auth secret value. This value will be encrypted
before storing into the database.

Example Request

{
  "url": "https://example.com/new-webhook-endpoint",
  "active": false
}

Response 200 OK

Returns the updated Webhook object.

Errors

StatusDescription
400 Bad RequestNo fields provided or invalid field values.
404 Not FoundWebhook not found.

Delete a Webhook

API Reference: https://docs.daloopa.com/reference/delete_webhook

curl --request DELETE \
     --url https://app.daloopa.com/api/v2/webhooks/{id} \

Permanently deletes a webhook. This action cannot be undone.

Path Parameters

ParameterTypeDescription
idintegerThe webhook ID.

Response 204 No Content

No response body.

Errors

StatusDescription
404 Not FoundWebhook not found.

List Event Types

API Reference: https://docs.daloopa.com/reference/list_webhook_types

curl --request GET \
     --url https://app.daloopa.com/api/v2/webhooks/event-types \

Returns the list of supported webhook event types.

Response 200 OK

[
  { "value": "clientview_updated", "label": "Clientview Updated" },
  { "value": "incremental_update", "label": "Incremental Update" },
  { "value": "series_updated", "label": "Series Updated" }
]

List Webhook Deliveries

curl --request GET \
     --url https://app.daloopa.com/api/v2/webhooks/deliveries \

Returns delivery history of webhooks registered under the authenticated user in reverse chronological order. Supports pagination and filtering.

Query Parameters

ParameterTypeRequiredDescription
webhook_idintegerNoFilter deliveries by a specific webhook.
is_testbooleanNoFilter by test or production deliveries.
limitintegerNoMaximum number of results to return (default: 500, max: 500).
offsetintegerNoNumber of results to skip for pagination.

Response 200 OK

{
  "count": 1,
  "next": null,
  "previous": null,
  "results": [
    {
      "id": 1,
      "timestamp": "2025-01-15T10:30:00Z",
      "event_type": "clientview_updated",
      "company_id": 12345,
      "response_status": 200,
      "response_body": "OK",
      "is_test": false,
      "duration_ms": 142
    }
  ]
}

Delivery Object

FieldTypeDescription
idintegerUnique identifier for the delivery.
timestampdatetimeWhen the delivery was sent.
event_typestringThe event type that triggered the delivery.
company_idintegerThe company ID associated with the event.
response_statusinteger or nullHTTP status code returned by the endpoint. null if the request failed (e.g. timeout).
response_bodystring or nullTruncated response body from the endpoint.
is_testbooleanWhether this was a test delivery.
duration_msinteger or nullRound-trip time in milliseconds.

FAQ

Is the auth_secret stored securely?

Yes. The auth_secret is stored encrypted. After creation, only the last 4 characters are visible via the masked_auth_secret field (e.g. ****oken).

What happens when I hit the webhook limit?

The POST /api/v2/webhooks endpoint returns 403 Forbidden with a message indicating the limit of 10 webhooks has been reached.

Can I deactivate a webhook without deleting it?

Yes. Send PATCH /api/v2/webhooks/{id} with {"active": false}. The webhook will stop receiving deliveries but can be reactivated later by setting active back to true.

What does a null response status on a delivery mean?

It means the request failed before receiving a response — typically a timeout or a connection error. Check the response_body field for the specific error message.