{% extends "layouts/workspace_settings.html" %} {% block title %}Webhook · DemandTrail Messaging{% endblock %} {% block page_header %}

Webhook endpoint

{% endblock %} {% block content %}

{{ webhook.url }}

{% if not webhook.enabled and webhook.disabled_at %} {% comment %} Auto-disabled. Re-enabling clears the failure counter (see apps/api/services.py::update_webhook) — without that it would switch itself off again on the next failed delivery, which reads as "re-enabling is broken". {% endcomment %}

Switched off after {{ failure_limit }} consecutive failed deliveries. Fix the endpoint, then tick Enabled below to start delivering again.

{% endif %}

Settings

{% csrf_token %}
Events {% for choice in event_choices %} {% endfor %}

Signing secret

Every delivery carries an HMAC of the body over this secret. Rotating it invalidates signatures immediately. Update your receiver first, or deliveries will start failing verification the moment you rotate.

{% csrf_token %}

Test

Sends a webhook.test event to this endpoint right now. Test deliveries are not retried and never count towards the auto-disable limit.

{% csrf_token %}

Recent deliveries

{% if deliveries %} {% for delivery in deliveries %} {% endfor %}
WhenEventResultCodeDurationAttempt
{{ delivery.created_at }} {{ delivery.event }} {{ delivery.get_status_display }} {% if delivery.error %}
{{ delivery.error }}{% endif %}
{{ delivery.response_code|default:"N/A" }} {{ delivery.duration_ms }} ms {{ delivery.attempt }}
{% else %}

Nothing delivered yet.

{% endif %} {% comment %} Destructive, so a red link below a rule, and it asks first (HANDOFF §2.4). {% endcomment %}
{% csrf_token %}

Back to webhooks

{% endblock %}