Pular para o conteúdo principal

Webhooks

Webhooks let you react to events inside Skills Workflow in real time — no polling needed. When something happens (a stage changes, a field is updated, a document is created), the platform calls a URL you define or triggers an internal automation.

Quick Start

Goal: Create a webhook that fires an Azure DevOps automation whenever the custom field "Is Customization" changes on a User Story deliverable.

StepFieldValue
1NameCreate Work Item when Is Customization is unchecked
2ActiveOn
3EventUserFieldValueUpdated
4DocumentDeliverable
5AutomationOn
6Automation WorkflowAzure DevOps – Create Work Item in Visual Studio
7Business Object Type NameUser Story
8Detail Path ExpressionColumnName   Condition: Equal   Value: Is Customization

That's it — the webhook is ready. Read on to understand each section of the form.


Configuring a Webhook

Navigate to Maintenance > Webhooks and click Create New Webhook.

img

Webhook configuration form

The form is divided into four sections, from top to bottom. Fill them out in order.


1. General

FieldDescription
NameA descriptive title for the webhook. Used internally to identify it.
ActiveToggle to enable or disable the webhook. Only active webhooks fire.
DescriptionA short explanation of what the webhook does and when it should trigger.
Created On / Modified ByAutomatically filled metadata.

2. Document

This section defines what triggers the webhook.

Event

The type of event that should fire the webhook. Choose from the dropdown or type a custom value.

EventWhen it fires
CreatedA document was created.
UpdatedA document property was modified.
DeletedA document was deleted.
UserFieldValueUpdatedA custom (user-defined) field on a document changed.
TimeUpdatedTimesheet data was updated.

Document Type

The entity type the webhook listens to. Loaded from the system and varies per tenant.

Full list of document types
Document TypeFull Type Name
AssignmentSkill.Module.BusinessObjects.Assignment
BillSkill.Module.BusinessObjects.Bill
BrandSkill.Module.BusinessObjects.Brand
ClientSkill.Module.BusinessObjects.Client
Client Credit NoteSkill.Module.BusinessObjects.ClientCreditNote
Commercial ClientSkill.Module.BusinessObjects.CommercialClient
Commercial Client ProductSkill.Module.BusinessObjects.CommercialClientProduct
ContractSkill.Module.BusinessObjects.Contract
Deliverable (Job)Skill.Module.BusinessObjects.Deliverable
Document BriefSkill.Module.BusinessObjects.DocumentBrief
Document StateSkill.Module.BusinessObjects.DocumentState
Document TagSkill.Module.BusinessObjects.DocumentTag
Document TaskSkill.Module.BusinessObjects.DocumentTask
EstimateSkill.Module.BusinessObjects.Estimate
ExpenseSkill.Module.BusinessObjects.Expense
Expense ItemSkill.Module.BusinessObjects.ExpenseItem
FileSkill.Module.BusinessObjects.FileSystemObject
Job TypeSkill.Module.BusinessObjects.JobType
LeadSkill.Module.BusinessObjects.CRM.Lead
PersonSkill.Module.BusinessObjects.Person
ProjectSkill.Module.BusinessObjects.Project
Purchase OrderSkill.Module.BusinessObjects.PurchaseOrder
Supplier InvoiceSkill.Module.BusinessObjects.SupplierInvoice
Supplier NoteSkill.Module.BusinessObjects.SupplierNote
Supplier RequestSkill.Module.BusinessObjects.SupplierRequest
TaskSkill.Module.BusinessObjects.Task
TenderSkill.Module.BusinessObjects.Tender
TimesheetSkill.Module.BusinessObjects.Timesheet
UserSkill.Module.BusinessObjects.User
Workflow StateSkill.Module.BusinessObjects.WorkflowState
Workflow State TransitionSkill.Module.BusinessObjects.WorkflowStateTransition

Additional document types may be available depending on your tenant configuration. Use the GET /api/v3/document-types/lookup endpoint to retrieve the full list.


3. Destination

Where the webhook sends its payload when triggered.

Leave Automation toggled off and fill in:

  • URL — The external endpoint to call.
    Example: https://example.com/webhooks/my-webhook

    img-box-shadow

    External URL destination

  • Secret — A key shared with the destination to authenticate the webhook request.

4. Filters

Filters let you narrow when the webhook fires. Without filters, every occurrence of the selected Event + Document triggers it.

Business Object Type Name

Optionally limit the webhook to a specific business object type (e.g., User Story, Estimate).

Detail Filters

Each filter row has four parts:

PartDescription
Group ConditionAnd (all filters must match) or Or (any filter can match).
Detail Path ExpressionThe property name inside the event's detail payload to evaluate.
ConditionEqual, NotEqual, Contains, or NotContains.
ValueThe value to compare against.

Click + Add filter to add more rows.

Important

The fields you can use in Detail Path Expression depend on the Event you selected. Each event type produces a different payload. See the reference below.

Detail Path Expression Fields per Event

Use the tabs below to find the exact field names available for each event type.

Fired when a document's workflow stage changes.

Detail Path ExpressionTypeDescription
WorkflowStageTransitionIdguidID of the stage transition.
WorkflowStageTransitionNamestringName of the transition.
WorkflowStageTransitionLocalizedNamestringLocalized name of the transition.
FromWorkflowStageIdguidID of the source stage.
FromWorkflowStageNamestringName of the source stage.
FromWorkflowStageLocalizedNamestringLocalized name of the source stage.
ToWorkflowStageIdguidID of the destination stage.
ToWorkflowStageNamestringName of the destination stage.
ToWorkflowStageLocalizedNamestringLocalized name of the destination stage.
WorkflowIdguidID of the workflow.
WorkflowNamestringName of the workflow.
DepartmentIdguidID of the department (if applicable).
observação

When the transition is resolved from individual stage objects, the WorkflowStageTransition* fields may not be present.

Common example:

Detail Path ExpressionConditionValue
ToWorkflowStageNameEqualUnder Development

Dynamic Filter Values

You can use System Parameters as dynamic values in the Value field. Reference them with:

{{SystemPreferenceName/KeyName}}

Example: {{MyAutomationPreferences/departments}}

MyAutomationPreferences
{
"user": "skills-user",
"password": "my-strong-password",
"departments": [
"6f51b21e-2dcc-4f5e-aebb-491b54800bf1",
"a733e914-18ea-4c92-94b4-59491badc974",
"ecc30504-1f5c-4b3b-a864-da85d04ebabe",
"d42168e4-f690-4546-8197-54ba344a1806"
]
}

img-box-shadow


Examples

Trigger when a custom field changes

Fire a webhook when "Is Customization" changes on a deliverable, filtered to the User Story business object type:

FieldValue
EventUserFieldValueUpdated
DocumentDeliverable
Business Object Type NameUser Story
Detail Path ExpressionColumnName
ConditionEqual
ValueIs Customization

Trigger on a stage transition

Fire a webhook when a deliverable moves to "Under Development":

FieldValue
EventStageUpdated
DocumentDeliverable
Detail Path ExpressionToWorkflowStageName
ConditionEqual
ValueUnder Development

Trigger on login failure

Fire a webhook when a specific user fails to log in:

FieldValue
EventLoginFailed
Detail Path ExpressionUsername
ConditionEqual
Valuejohn.doe

Multiple filters with AND logic

Trigger only when a deliverable's custom field "Priority" is set to "High":

#Group ConditionDetail Path ExpressionConditionValue
1AndColumnNameEqualPriority
2AndValueEqualHigh

API Reference

Webhook subscriptions can also be managed via REST API. Base URL: /api/webhook-subscriptions

Endpoints

List All Webhooks

GET /api/webhook-subscriptions

Returns all webhook subscriptions for the current tenant.

Response: 200 OK — Array of WebhookSubscription objects.

Get Webhook by ID

GET /api/webhook-subscriptions/{id}
ParameterTypeDescription
idguidThe webhook subscription ID.

Response: 200 OK — A single WebhookSubscription object.

Create Webhook

POST /api/webhook-subscriptions

Request Body:

{
"Name": "My Webhook",
"Description": "Triggers when a deliverable is created",
"ActionType": "Created",
"DocumentType": "Skill.Module.BusinessObjects.Deliverable",
"Url": "https://example.com/webhook-endpoint",
"Secret": "my-secret-key",
"Active": true,
"IsAutomation": false,
"AutomationId": null,
"BusinessObjectTypeName": null,
"DetailFilters": [
{
"groupCondition": "And",
"jsonPathExpression": "ColumnName",
"condition": "Equal",
"value": "Priority"
}
]
}
FieldTypeRequiredDescription
NamestringYesDisplay name of the webhook.
DescriptionstringNoPurpose description.
ActionTypestringYesThe event type (e.g., Created, StageUpdated).
DocumentTypestringYesFull type name (e.g., Skill.Module.BusinessObjects.Deliverable).
UrlstringYes*Destination URL. Required unless IsAutomation is true.
SecretstringNoSecret key for request authentication.
ActivebooleanNoWhether the webhook is enabled. Defaults to false.
IsAutomationbooleanNotrue to trigger an internal automation instead of a URL.
AutomationIdguidNoID of the automation workflow. Required when IsAutomation is true.
BusinessObjectTypeNamestringNoFilter by business object type name.
DetailFiltersarrayNoArray of detail filter objects.

DetailFilter object:

FieldTypeDescription
groupConditionstringAnd or Or.
jsonPathExpressionstringThe property name to evaluate in the event detail payload.
conditionstringEqual, NotEqual, Contains, NotContains.
valuestringThe value to compare against.

Response: 201 Created

Update Webhook

PUT /api/webhook-subscriptions/{id}

Same body as Create. Response: 200 OK

Delete Webhook

DELETE /api/webhook-subscriptions/{id}

Response: 200 OK

Get Invocation History

GET /api/webhook-subscriptions/{id}/invocation-history
ParameterTypeRequiredDescription
idguidYesWebhook subscription ID.
fromDateUtcdatetimeNoStart date filter (UTC).
toDateUtcdatetimeNoEnd date filter (UTC).
takeintNoNumber of records (default: 100).
continuationTokenstringNoPagination token.

Response: 200 OK — Array of invocation records.

Response Object
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"tenantId": "c8d054c7-9933-4b6d-9e55-66ed1ba9526d",
"name": "My Webhook",
"description": "Triggers when a deliverable is created",
"url": "https://example.com/webhook-endpoint",
"secret": "my-secret-key",
"actionType": "Created",
"documentType": "Skill.Module.BusinessObjects.Deliverable",
"active": true,
"createdOnUtc": "2026-04-08T12:00:00Z",
"createdById": "315d6513-3418-4369-8e87-c204316c27c2",
"modifiedOnUtc": "2026-04-08T12:00:00Z",
"modifiedById": "315d6513-3418-4369-8e87-c204316c27c2"
}

Required Permissions

OperationRequired Role
List / GetWebhookSubscriptionGet
CreateWebhookSubscriptionCreate
UpdateWebhookSubscriptionWrite
DeleteWebhookSubscriptionDelete
Navigate (UI)WebhookSubscriptionNavigate