Skip to main content

Webhook

Outgoing webhook configuration.

Defines webhooks that listen to events and deliver HTTP
notifications to external endpoints with optional filtering.

Attributes:
name: Unique webhook identifier
event: Event to listen to (e.g., "doc.created", "doc.updated")
doctype_filter: Optional DocType filter (e.g., "Invoice")
condition: Optional JMESPath/SimpleEval expression to filter events
url: Webhook endpoint URL
method: HTTP method (POST or PUT)
headers: Custom HTTP headers to send
payload_transform: Optional Jinja2 template to transform event payload
enabled: Whether the webhook is active
secret: Secret for HMAC-SHA256 signature verification

Source: webhook.py

Fields

FieldTypeRequiredDescriptionValidators
namestrUnique webhook identifierminLen: 1, maxLen: 255
eventstrEvent to listen to (e.g., 'doc.created')minLen: 1
doctype_filterstrNoneFilter by DocType (e.g., 'Invoice', 'Order')
conditionstrNoneJMESPath or SimpleEval expression to filter events (e.g., 'status == paid')
urlstrWebhook endpoint URLminLen: 1
methodstrHTTP method (POST or PUT)-
headersdict[str, Any]Custom HTTP headers to send with request-
payload_transformstrNoneJinja2 template to transform event payload (e.g., '{"text": "{{ doc.name }}"}')
enabledboolWhether the webhook is active-
secretstrNoneSecret for HMAC-SHA256 signature (X-Webhook-Signature header)

Permissions

RoleCreateDeleteReadWrite
Admin
Manager

Configuration

SettingValue
SubmittableFalse
Track ChangesTrue

Controller

Controller hooks are implemented in *_controller.py files. Available lifecycle hooks:

  • validate() - Called before save, raise exceptions for validation errors
  • before_insert() - Called before inserting a new document
  • after_insert() - Called after successfully inserting
  • before_save() - Called before saving (insert or update)
  • after_save() - Called after saving
  • before_delete() - Called before deleting
  • after_delete() - Called after deleting