Skip to content

Webhook deliveries ​

A webhook posts task events to a URL you choose. The events are task.created, task.updated, task.deleted, task.archived, task.restored; * subscribes to all of them. The formats are json, slack, discord. Webhooks are managed with the routes under Webhooks.

A delivery in the json format is a POST with this body:

json
{
  "event": "task.updated",
  "companyId": "<company id>",
  "deliveredAt": "2026-10-01T09:30:00.000Z",
  "changedFields": ["Task_Priority"],
  "data": {
    "_id": "<task id>",
    "TaskKey": "WEB-12",
    "TaskName": "Write the release notes",
    "statusType": "active",
    "Task_Priority": "HIGH",
    "ProjectID": "<project id>",
    "sprintId": "<list id>",
    "AssigneeUserId": ["<user id>"],
    "assigneeNames": ["Sample Person"],
    "updatedAt": "2026-10-01T09:30:00.000Z"
  }
}

data is a fixed set of task fields, never the whole stored task. previous is added, with the same shape, when the server has delivered this task before. Each delivery carries the headers X-AlianHub-Event, X-AlianHub-Delivery-Attempt and X-AlianHub-Signature. The signature is sha256= followed by the HMAC-SHA256 of the raw request body, keyed with the secret returned when the webhook was created; compute it over the bytes received and compare before trusting a delivery. Changes to one task within a couple of seconds arrive as one delivery. A delivery that fails with a network error or a 5xx is sent once more, 30 seconds later.

Released under the AGPL-3.0 licence.