Automations

Webhooks

Build automated workflows and business logic.

Webhooks let your automations send data out to any external service. When an automation fires, the Send Webhook action POSTs a payload you define to the URL you configure.

The Send Webhook action

A Send Webhook action is configured with the fields below. These exact field names matter — the automation engine reads them directly, so a webhook configured under any other keys is ignored and never sends.

FieldRequiredDescription
webhook_urlYesThe destination URL the request is sent to.
webhook_methodNoHTTP method. Defaults to POST.
webhook_headersNoAn object of custom headers, sent exactly as written (use this for an auth token or shared secret). Content-Type: application/json is added automatically.
webhook_bodyNoA JSON object sent as the request body. Its values can contain the template variables listed below.
{
  "webhook_url": "https://api.example.com/webhook",
  "webhook_method": "POST",
  "webhook_headers": {
    "X-Webhook-Secret": "your-shared-secret"
  },
  "webhook_body": {
    "event": "new_lead",
    "lead_id": "${trigger.record.id}",
    "name": "${trigger.record.name}",
    "email": "${trigger.record.email}"
  }
}

Field names are exact

The action only recognises webhook_url, webhook_method, webhook_headers and webhook_body. Configurations that use other keys (such as url or body) are ignored, and the webhook silently never sends.

Template variables

Inside webhook_body values, these placeholders are replaced with live data when the automation runs:

VariableResolves to
${trigger.record.id}The ID of the record that triggered the automation.
${trigger.record.<field>}Any field on the trigger record — e.g. ${trigger.record.email}. The field's original value type is preserved.
${uuid()}A newly generated UUID.
${today()}The current date.
${now()}The current timestamp.

Supported Methods

MethodUse Case
POSTSend data to create resources (most common)
PUTUpdate existing resources
PATCHPartial update of resources
DELETERemove external resources

What gets sent

The request body is exactly the webhook_body you configured, with every template variable resolved to its live value. For the example above, a new lead would send:

{
  "event": "new_lead",
  "lead_id": "8f3c1e7a-2b9d-4c1a-9f6e-1d2c3b4a5e6f",
  "name": "Jane Smith",
  "email": "jane@example.com"
}

There is no automatic envelope or metadata wrapper — the payload shape is controlled entirely by your webhook_body.

Retry policy

Outbound webhooks are dispatched by a background worker and retried automatically on failure, up to 5 attempts, before being marked failed. A webhook is treated as failed if the target returns a non-2xx status code or the request errors.

Common Integrations

  • Slack — Post notifications to channels using Slack webhook URLs
  • Zapier — Trigger Zapier workflows from Kantos events
  • Make (Integromat) — Build complex multi-app workflows
  • Custom APIs — Sync data with your internal systems

Slack example

{
  "webhook_url": "https://hooks.slack.com/services/T000/B000/XXXX",
  "webhook_method": "POST",
  "webhook_body": {
    "text": "New high-value lead: ${trigger.record.name} (${trigger.record.company})"
  }
}

Debugging

Check the automation execution logs for webhook details:

  • Request URL — Where the webhook was sent
  • Request body — The payload that was sent
  • Response status — HTTP status code from the target
  • Response body — What the target returned
  • Retry attempts — How many times the request was retried

Test with RequestBin

Use a service like RequestBin or webhook.site to inspect webhook payloads during development before connecting to your real endpoints.

Next Steps

    Webhooks - Automations | Kantos Docs