Navigation

Webhooks

There's no programmatic webhook subscription endpoint in v1. Webhooks are configured through Automation rules, which gives you fine-grained trigger filtering and the same audit trail as the rest of your automations.

How to set one up

  1. In the Konduit UI, create an Automation rule
  2. Pick a trigger — see the list below
  3. Add a Webhook action with your destination URL
  4. Save — the webhook fires on every matching event

That's it. No subscription, no key management, no separate dashboard.

Available triggers

Trigger Scope Fires when
task_created List New task created (any source — UI, API, form)
task_field_changed List A task field changed — status, priority, assignee, or a custom field (payload carries changed_field, old_value, new_value)
task_deleted List Task soft-deleted (payload includes pre-delete snapshot)
time_logged List Manual time entry created or running timer stopped
date_trigger List A task date field arrives (configurable lead time)
recurring List Fires on a recurring schedule
row_inserted DataTable New datatable row
row_updated DataTable Datatable row changed
row_deleted DataTable Datatable row deleted
form_submitted Form Form submission received

date_trigger and recurring are time-based (scheduled) triggers. Automations — and therefore webhooks — require a Pro or Business plan.

Each trigger supports filters — e.g., "only when severity = high" or "only on the Bugs list". Filters are configured in the same UI as the trigger.

Payload format

Webhook payloads are JSON. Shape varies by trigger; the common envelope:

{
  "rule_id": "...",
  "workspace_id": "...",
  "trigger_type": "task_created",
  "scope_type": "list",
  "scope_id": "...",
  "fired_at": "2026-01-01T00:00:00.000Z",
  "data": {
    "task": { "id": "...", "title": "..." }
  }
}

fired_at is an ISO 8601 timestamp string. scope_type is list, datatable, or form, and scope_id is the corresponding list / table / form ID.

For task_field_changed, the payload names the changed field and carries its old and new values alongside the full task:

{
  "trigger_type": "task_field_changed",
  "data": {
    "task": { "id": "...", "status_id": "in_progress" },
    "changed_field": "status_id",
    "old_value": "open",
    "new_value": "in_progress"
  }
}

Signing

Webhook payloads are signed with an HMAC header so you can verify the request came from Konduit. The shared secret is shown when you create the Webhook action.

X-Konduit-Signature: sha256=<hex>

Compute HMAC-SHA256(secret, raw_body) on your side and constant-time-compare against the header. Reject mismatches.

Discord webhooks

Discord webhook URLs (https://discord.com/api/webhooks/...) are auto-detected and the payload is reformatted as a Discord embed. Useful for piping task activity into a Discord channel without a separate bot.

Programmatic subscription (planned)

A programmatic webhook subscription API is planned for v1.1. If you need this before then for a specific integration, reach out at team@konduit.work.

Next