Skip to main content

Ticketing Webhooks

Webhooks enable your applications to receive real-time notifications when events occur in your ticketing and issue tracking systems. This eliminates the need for polling and ensures your systems stay synchronized with ticket updates, status changes, comments, and attachment activities across all integrated platforms.

Unizo normalizes webhook events from Jira, ServiceNow, Zendesk, GitHub Issues, and other ticketing providers into a consistent format. This means you write your webhook handler once and it works with all supported platforms.

Webhook Configuration

To set up webhooks for your integration, visit the Unizo Console Webhooks section for step-by-step configuration guide.

Supported Event Types

These are the event types currently supported by Unizo's Ticketing webhooks. The list keeps growing as we add support for more events across different platforms.

Event TypeDescriptionTrigger Conditions
ticket:created A new ticket has been createdTicket creation via UI, API, email, or automation
ticket:updatedTicket information has been modifiedTitle, description, status, priority, or assignee changes
ticket:deletedA ticket has been deletedTicket deletion or permanent removal
attachment:createdA new attachment has been added to a ticketFile upload or attachment addition to ticket
attachment:deletedAn attachment has been removed from a ticketAttachment deletion or removal from ticket
comment:createdA new comment has been added to a ticketUser or system adds a comment
comment:updatedAn existing comment has been modifiedUser edits an existing comment
comment:deletedA comment has been deleted from a ticketComment deletion via UI, API, or automation
user:createdA new user has been addedUser creation via UI, API, or synchronization from provider
user:updatedAn existing user has been modifiedUser updated via UI, API, or synchronization from provider
user:deletedA user has been removedUser deletion via UI, API, or provider sync
link:createdA new issue/ticket link has been createdLinking issues or tickets via UI or API
link:deletedAn issue/ticket link has been removedUnlinking issues or tickets via UI or API

Webhook Security

All webhooks from Unizo include security headers to verify authenticity:

Headers

HeaderDescription
x-unizo-event-typeThe type of event that triggered the webhook
x-unizo-signatureHMAC SHA-256 signature for request validation
x-unizo-timestampUnix timestamp when the event was sent
x-unizo-delivery-idUnique identifier for this webhook delivery

Signature Verification

Verify the authenticity of incoming webhooks using HMAC SHA-256:

const crypto = require('crypto');

function verifyWebhookSignature(payload, signature, secret) {
  const expectedSignature = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');
  
  return crypto.timingSafeEqual(
    Buffer.from(signature, 'hex'),
    Buffer.from(expectedSignature, 'hex')
  );
}

Ticket Events

Ticket Created

ticket:created

Triggered when a new ticket is created in the ticketing system
POSThttps://api.yourapp.com/webhooks/unizo/ticketing
Headers
NameTypeRequiredDescription
x-unizo-event-typestringYesEvent type: ticket:created
x-unizo-signaturestringYesHMAC SHA-256 signature
Request Body Schema
PropertyTypeRequiredDescription
typestringYesEvent type identifier
versionstringYesWebhook payload version
contentTypestringYesBranch name/identifier
collectionstringYesCollection name
collection.idstringYesCollection ID
collection.namestringYesCollection Display Name
organizationstringYesOrganization name
organization.idstringYesOrganization ID
organization.namestringYesOrganization Display Name
ticketstringYesTicket Name
ticket.idstringYesTicket Id
ticket.statestringNoTicket key or number
ticket.summarystringYesTicket title or summary
ticket.createdDateTimestringNoTicket Creation Timestamp
integrationstringYesIntegration Name
integration.typestringNoIntegration type
integration.idstringYesIntegration id
integration.namestringYesIntegration Display Name
Example Payload
{
"type": "ticket:created",
"version": "1.0.0",
"contentType": "application/json",
"collection": {
"id": "169133028",
"name": "GH-DemoOrg411"
},
"organization": {
"id": "797087929",
"name": "DemoRepo1"
},
"ticket": {
"id": "78",
"state": "open",
"summary": "New issue",
"createdDateTime": "May 5, 2025 2:50 PM",
"createdBy": "User089"
},
"integration": {
"type": "TICKETING",
"id": "13348832-e545-4b33-aa32-51ad1b92afdf",
"name": "Gi_Secu_1746456420866"
}
}
Response
200 OKWebhook processed successfully
400 Bad RequestInvalid webhook payload
401 UnauthorizedInvalid or missing signature

Ticket Updated

ticket:updated

Triggered when ticket information is modified
POSThttps://api.yourapp.com/webhooks/unizo/ticketing
Headers
NameTypeRequiredDescription
x-unizo-event-typestringYesEvent type: ticket:updated
x-unizo-signaturestringYesHMAC SHA-256 signature
Request Body Schema
PropertyTypeRequiredDescription
typestringYesEvent type identifier
versionstringYesWebhook payload version
contentTypestringYesBranch name/identifier
collectionstringYesCollection name
collection.idstringYesCollection ID
collection.namestringYesCollection Display Name
organizationstringYesOrganization name
organization.idstringYesOrganization ID
organization.namestringYesOrganization Display Name
ticketstringYesTicket Name
ticket.idstringYesTicket Id
ticket.statestringNoTicket key or number
ticket.summarystringYesTicket title or summary
ticket.createdDateTimestringNoTicket Creation Timestamp
ticket.changeLogstringYesTicket Change Log
ticket.changeLog.updatedDateTimestringYesTicket Change Log Updated Timestamp
ticket.changeLog.itemsstringYesTicket Change Log Items
integrationstringYesIntegration Name
integration.typestringNoIntegration type
integration.idstringYesIntegration id
integration.namestringYesIntegration Display Name
Example Payload
{
"type": "ticket:updated",
"version": "1.0.0",
"contentType": "application/json",
"collection": {
"id": "169133028",
"name": "GH-DemoOrg411"
},
"organization": {
"id": "797087929",
"name": "DemoRepo1"
},
"ticket": {
"id": "78",
"state": "open",
"summary": "New issue123",
"createdDateTime": "May 5, 2025 2:50 PM",
"changeLog": {
"updatedDateTime": "May 5, 2025 2:50 PM",
"items": [
{
"field": "body",
"fieldId": "body",
"from": ""
},
{
"field": "title",
"fieldId": "title",
"from": "New issue"
}
]
}
}
}
Response
200 OKWebhook processed successfully
400 Bad RequestInvalid webhook payload
401 UnauthorizedInvalid or missing signature

Ticket Deleted

ticket:deleted

Triggered when a ticket is deleted from the system
POSThttps://api.yourapp.com/webhooks/unizo/ticketing
Headers
NameTypeRequiredDescription
x-unizo-event-typestringYesEvent type: ticket:deleted
x-unizo-signaturestringYesHMAC SHA-256 signature
Request Body Schema
PropertyTypeRequiredDescription
typestringYesEvent type identifier
versionstringYesWebhook payload version
contentTypestringYesBranch name/identifier
collectionstringYesCollection name
collection.idstringYesCollection ID
collection.namestringYesCollection Display Name
organizationstringYesOrganization name
organization.idstringYesOrganization ID
organization.namestringYesOrganization Display Name
ticketstringYesTicket Name
ticket.idstringYesTicket Id
ticket.statestringNoTicket key or number
ticket.summarystringYesTicket title or summary
ticket.createdDateTimestringNoTicket Creation Timestamp
integrationstringYesIntegration Name
integration.typestringNoIntegration type
integration.idstringYesIntegration id
integration.namestringYesIntegration Display Name
Example Payload
{
"type": "ticket:deleted",
"version": "1.0.0",
"contentType": "application/json",
"collection": {
"id": "169133028",
"name": "GH-DemoOrg411"
},
"organization": {
"id": "797087929",
"name": "DemoRepo1"
},
"ticket": {
"id": "78",
"state": "open",
"summary": "New issue123",
"createdDateTime": "May 5, 2025 2:50 PM"
},
"integration": {
"type": "TICKETING",
"id": "13348832-e545-4b33-aa32-51ad1b92afdf",
"name": "Gi_Secu_1746456420866"
}
}
Response
200 OKWebhook processed successfully
400 Bad RequestInvalid webhook payload
401 UnauthorizedInvalid or missing signature

Attachment Events

Attachment Created

attachment:created

Triggered when a new attachment is added to a ticket
POSThttps://api.yourapp.com/webhooks/unizo/ticketing
Headers
NameTypeRequiredDescription
x-unizo-event-typestringYesEvent type: attachment:created
x-unizo-signaturestringYesHMAC SHA-256 signature
Request Body Schema
PropertyTypeRequiredDescription
typestringYesEvent type identifier
versionstringYesWebhook payload version
contentTypestringYesContent type
collectionstringYesCollection name
collection.idstringYesCollection ID
collection.namestringYesCollection Display Name
organizationstringYesOrganization name
organization.idstringYesOrganization ID
organization.namestringYesOrganization Display Name
ticketstringYesTicket information
ticket.idstringYesTicket Id
ticket.statestringNoTicket state or status
ticket.summarystringYesTicket title or summary
attachmentobjectYesAttachment information
attachment.idstringYesAttachment unique identifier
attachment.filenamestringYesOriginal filename of the attachment
attachment.mimeTypestringNoMIME type of the attachment
attachment.sizenumberNoFile size in bytes
attachment.urlstringNoDownload URL for the attachment
attachment.createdDateTimestringNoAttachment creation timestamp
attachment.createdBystringNoUser who uploaded the attachment
integrationstringYesIntegration Name
integration.typestringNoIntegration type
integration.idstringYesIntegration id
integration.namestringYesIntegration Display Name
Example Payload
{
"type": "attachment:created",
"version": "1.0.0",
"contentType": "application/json",
"attachment": {
"id": "10430",
"filename": "testfile.png",
"mimeType": "image/png",
"sizeBytes": "4910",
"createdDateTime": "2025-08-29T13:02:50.352+0530"
},
"integration": {
"type": "TICKETING",
"id": "f2ae41b8-6aa9-434b-84ab-ddc0a7321351",
"name": "Ji_Secu_1756452472351"
}
}
Response
200 OKWebhook processed successfully
400 Bad RequestInvalid webhook payload
401 UnauthorizedInvalid or missing signature

Attachment Deleted

attachment:deleted

Triggered when an attachment is removed from a ticket
POSThttps://api.yourapp.com/webhooks/unizo/ticketing
Headers
NameTypeRequiredDescription
x-unizo-event-typestringYesEvent type: attachment:deleted
x-unizo-signaturestringYesHMAC SHA-256 signature
Request Body Schema
PropertyTypeRequiredDescription
typestringYesEvent type identifier
versionstringYesWebhook payload version
contentTypestringYesContent type
collectionstringYesCollection name
collection.idstringYesCollection ID
collection.namestringYesCollection Display Name
organizationstringYesOrganization name
organization.idstringYesOrganization ID
organization.namestringYesOrganization Display Name
ticketstringYesTicket information
ticket.idstringYesTicket Id
ticket.statestringNoTicket state or status
ticket.summarystringYesTicket title or summary
attachmentobjectYesAttachment information
attachment.idstringYesAttachment unique identifier
attachment.filenamestringYesOriginal filename of the attachment
attachment.mimeTypestringNoMIME type of the attachment
attachment.sizenumberNoFile size in bytes
attachment.createdDateTimestringNoAttachment original creation timestamp
attachment.createdBystringNoUser who originally uploaded the attachment
attachment.deletedDateTimestringNoAttachment deletion timestamp
attachment.deletedBystringNoUser who deleted the attachment
integrationstringYesIntegration Name
integration.typestringNoIntegration type
integration.idstringYesIntegration id
integration.namestringYesIntegration Display Name
Example Payload
{
"type": "attachment:deleted",
"version": "1.0.0",
"contentType": "application/json",
"attachment": {
"id": "10397",
"filename": "google_workspace_128.png",
"mimeType": "image/png",
"sizeBytes": "1482",
"createdDateTime": "2025-08-28T15:36:38.302+0530"
},
"integration": {
"type": "TICKETING",
"id": "f2ae41b8-6aa9-434b-84ab-ddc0a7321351",
"name": "Ji_Secu_1756452472351"
}
}
Response
200 OKWebhook processed successfully
400 Bad RequestInvalid webhook payload
401 UnauthorizedInvalid or missing signature

Comment Events

Comment Created

comment:created

Triggered when a new comment is added to a ticket
POSThttps://api.yourapp.com/webhooks/unizo/ticketing
Headers
NameTypeRequiredDescription
x-unizo-event-typestringYesEvent type: comment:created
x-unizo-signaturestringYesHMAC SHA-256 signature
Request Body Schema
PropertyTypeRequiredDescription
typestringYesEvent type identifier
versionstringYesWebhook payload version
contentTypestringYesContent type
collectionstringYesCollection name
collection.idstringYesCollection ID
collection.namestringYesCollection Display Name
organizationstringYesOrganization name
organization.idstringYesOrganization ID
organization.namestringYesOrganization Display Name
ticketstringYesTicket information
ticket.idstringYesTicket Id
ticket.statestringNoTicket state or status
ticket.summarystringYesTicket title or summary
commentobjectYesComment information
comment.idstringYesComment unique identifier
comment.bodystringYesComment text
comment.createdDateTimestringYesComment creation timestamp
comment.createdBystringYesUser who created the comment
integrationstringYesIntegration Name
integration.typestringNoIntegration type
integration.idstringYesIntegration id
integration.namestringYesIntegration Display Name
Example Payload
{
"type": "comment:created",
"version": "1.0.0",
"contentType": "application/json",
"collection": {
"id": "10099",
"name": "NewProject"
},
"ticket": {
"id": "10132",
"summary": "Task2Summary"
},
"comment": {
"id": "10297",
"body": "Looks good!",
"createdDateTime": "2025-08-29T13:08:28.506+0530",
"updatedDateTime": "2025-08-29T13:08:28.506+0530",
"createdBy": "user",
"updatedBy": "user"
},
"integration": {
"type": "TICKETING",
"id": "f2ae41b8-6aa9-434b-84ab-ddc0a7321351",
"name": "Ji_Secu_1756452472351"
}
}
Response
200 OKWebhook processed successfully
400 Bad RequestInvalid webhook payload
401 UnauthorizedInvalid or missing signature

Comment Updated

comment:updated

Triggered when an existing comment is edited
POSThttps://api.yourapp.com/webhooks/unizo/ticketing
Headers
NameTypeRequiredDescription
x-unizo-event-typestringYesEvent type: comment:updated
x-unizo-signaturestringYesHMAC SHA-256 signature
Request Body Schema
PropertyTypeRequiredDescription
typestringYesEvent type identifier
versionstringYesWebhook payload version
contentTypestringYesContent type
collectionstringYesCollection name
collection.idstringYesCollection ID
collection.namestringYesCollection Display Name
organizationstringYesOrganization name
organization.idstringYesOrganization ID
organization.namestringYesOrganization Display Name
ticketstringYesTicket information
ticket.idstringYesTicket Id
ticket.statestringNoTicket state or status
ticket.summarystringYesTicket title or summary
commentobjectYesComment information
comment.idstringYesComment unique identifier
comment.bodystringYesUpdated comment text
comment.updatedDateTimestringYesComment update timestamp
comment.updatedBystringYesUser who updated the comment
integrationstringYesIntegration Name
integration.typestringNoIntegration type
integration.idstringYesIntegration id
integration.namestringYesIntegration Display Name
Example Payload
{
"type": "comment:updated",
"version": "1.0.0",
"contentType": "application/json",
"collection": {
"id": "10099",
"name": "NewProject"
},
"ticket": {
"id": "10132",
"summary": "Task2Summary"
},
"comment": {
"id": "10297",
"body": "Looks good! update",
"createdDateTime": "2025-08-29T13:08:28.506+0530",
"updatedDateTime": "2025-08-29T13:08:49.968+0530",
"createdBy": "user",
"updatedBy": "user"
},
"integration": {
"type": "TICKETING",
"id": "f2ae41b8-6aa9-434b-84ab-ddc0a7321351",
"name": "Ji_Secu_1756452472351"
}
}
Response
200 OKWebhook processed successfully
400 Bad RequestInvalid webhook payload
401 UnauthorizedInvalid or missing signature

Comment Deleted

comment:deleted

Triggered when an existing comment is deleted from a ticket
POSThttps://api.yourapp.com/webhooks/unizo/ticketing
Headers
NameTypeRequiredDescription
x-unizo-event-typestringYesEvent type: comment:deleted
x-unizo-signaturestringYesHMAC SHA-256 signature
Request Body Schema
PropertyTypeRequiredDescription
typestringYesEvent type identifier
versionstringYesWebhook payload version
contentTypestringYesContent type
collectionstringYesCollection name
collection.idstringYesCollection ID
collection.namestringYesCollection Display Name
organizationstringYesOrganization name
organization.idstringYesOrganization ID
organization.namestringYesOrganization Display Name
ticketstringYesTicket information
ticket.idstringYesTicket Id
ticket.statestringNoTicket state or status
ticket.summarystringYesTicket title or summary
commentobjectYesComment information
comment.idstringYesComment unique identifier
comment.bodystringNoComment text (if available)
comment.deletedDateTimestringYesComment deletion timestamp
comment.deletedBystringYesUser who deleted the comment
integrationstringYesIntegration Name
integration.typestringNoIntegration type
integration.idstringYesIntegration id
integration.namestringYesIntegration Display Name
Example Payload
{
"type": "comment:deleted",
"version": "1.0.0",
"contentType": "application/json",
"collection": {
"id": "10099",
"name": "NewProject"
},
"ticket": {
"id": "10132",
"summary": "Task2Summary"
},
"comment": {
"id": "10297",
"body": "Looks good! update",
"createdDateTime": "2025-08-29T13:08:28.506+0530",
"updatedDateTime": "2025-08-29T13:08:49.968+0530",
"createdBy": "user",
"updatedBy": "user"
},
"integration": {
"type": "TICKETING",
"id": "f2ae41b8-6aa9-434b-84ab-ddc0a7321351",
"name": "Ji_Secu_1756452472351"
}
}
Response
200 OKWebhook processed successfully
400 Bad RequestInvalid webhook payload
401 UnauthorizedInvalid or missing signature

User Events

User Created

user:created

Triggered when a new user is created in the system
POSThttps://api.yourapp.com/webhooks/unizo/user
Headers
NameTypeRequiredDescription
x-unizo-event-typestringYesEvent type: user:created
x-unizo-signaturestringYesHMAC SHA-256 signature
Request Body Schema
PropertyTypeRequiredDescription
typestringYesEvent type identifier
versionstringYesWebhook payload version
contentTypestringYesContent type
collectionstringYesCollection name
collection.idstringYesCollection ID
collection.namestringYesCollection Display Name
organizationstringYesOrganization name
organization.idstringYesOrganization ID
organization.namestringYesOrganization Display Name
userobjectYesUser information
user.idstringYesUnique identifier of the user
user.usernamestringYesUsername of the user
user.emailstringNoEmail address of the user
user.createdDateTimestringYesUser creation timestamp
user.createdBystringNoUser or system who created the account
integrationstringYesIntegration Name
integration.typestringNoIntegration type
integration.idstringYesIntegration id
integration.namestringYesIntegration Display Name
Example Payload
{
"type": "user:created",
"version": "1.0.0",
"contentType": "application/json",
"collection": {
"id": "169133028",
"name": "GH-DemoOrg411"
},
"organization": {
"id": "797087929",
"name": "DemoOrg"
},
"user": {
"id": "usr-101",
"username": "alice_w",
"email": "alice@example.com",
"createdDateTime": "May 6, 2025 10:05 AM",
"createdBy": "system_admin"
},
"integration": {
"type": "",
"id": "a123b456-c789-0123-def4-567890abcd",
"name": "Okta_IDP_Integration"
}
}
Response
200 OKWebhook processed successfully
400 Bad RequestInvalid webhook payload
401 UnauthorizedInvalid or missing signature

User Updated

user:updated

Triggered when existing user is updated in the system
POSThttps://api.yourapp.com/webhooks/unizo/user
Headers
NameTypeRequiredDescription
x-unizo-event-typestringYesEvent type: user:updated
x-unizo-signaturestringYesHMAC SHA-256 signature
Request Body Schema
PropertyTypeRequiredDescription
typestringYesEvent type identifier
versionstringYesWebhook payload version
contentTypestringYesContent type
collectionstringYesCollection name
collection.idstringYesCollection ID
collection.namestringYesCollection Display Name
organizationstringYesOrganization name
organization.idstringYesOrganization ID
organization.namestringYesOrganization Display Name
userobjectYesUser information
user.idstringYesUnique identifier of the user
user.usernamestringYesUsername of the user
user.emailstringNoEmail address of the user
user.updatedDateTimestringYesUser creation timestamp
user.updatedBystringNoUser or system who created the account
integrationstringYesIntegration Name
integration.typestringNoIntegration type
integration.idstringYesIntegration id
integration.namestringYesIntegration Display Name
Example Payload
{
"type": "user:updated",
"version": "1.0.0",
"contentType": "application/json",
"user": {
"id": "712020:83f15549-eb75-4b51-b4d8-889acf47a176",
"username": "vehay78581",
"displayName": "vehay78581",
"accountType": "atlassian",
"status": "inactive",
"avatarUrl": "https://secure.gravatar.com/avatar/ee533f6c3869a66c3bfddb6dd4db5b3c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FV-2.png",
"createdDateTime": "2025-08-29 13:12:51.353"
},
"integration": {
"type": "TICKETING",
"id": "f2ae41b8-6aa9-434b-84ab-ddc0a7321351",
"name": "Ji_Secu_1756452472351"
}
}
Response
200 OKWebhook processed successfully
400 Bad RequestInvalid webhook payload
401 UnauthorizedInvalid or missing signature

User Deleted

user:deleted

Triggered when a user account is deleted
POSThttps://api.yourapp.com/webhooks/unizo/user
Headers
NameTypeRequiredDescription
x-unizo-event-typestringYesEvent type: user:deleted
x-unizo-signaturestringYesHMAC SHA-256 signature
Request Body Schema
PropertyTypeRequiredDescription
typestringYesEvent type identifier
versionstringYesWebhook payload version
contentTypestringYesContent type
collectionstringYesCollection name
collection.idstringYesCollection ID
collection.namestringYesCollection Display Name
organizationstringYesOrganization name
organization.idstringYesOrganization ID
organization.namestringYesOrganization Display Name
userobjectYesUser information
user.idstringYesUnique identifier of the user
user.usernamestringYesUsername of the user
user.emailstringNoEmail address of the user
user.deletedDateTimestringYesUser deletion timestamp
user.deletedBystringYesUser or system who deleted the account
integrationstringYesIntegration Name
integration.typestringNoIntegration type
integration.idstringYesIntegration id
integration.namestringYesIntegration Display Name
Example Payload
{
"type": "user:deleted",
"version": "1.0.0",
"contentType": "application/json",
"user": {
"id": "712020:83f15549-eb75-4b51-b4d8-889acf47a176",
"createdDateTime": "2025-08-29 07:43:09.881"
},
"integration": {
"type": "TICKETING",
"id": "f2ae41b8-6aa9-434b-84ab-ddc0a7321351",
"name": "Ji_Secu_1756452472351"
}
}
Response
200 OKWebhook processed successfully
400 Bad RequestInvalid webhook payload
401 UnauthorizedInvalid or missing signature

Link Created

link:created

Triggered when a new link is created between two tickets/issues
POSThttps://api.yourapp.com/webhooks/unizo/ticketing
Headers
NameTypeRequiredDescription
x-unizo-event-typestringYesEvent type: link:created
x-unizo-signaturestringYesHMAC SHA-256 signature
Request Body Schema
PropertyTypeRequiredDescription
typestringYesEvent type identifier
versionstringYesWebhook payload version
contentTypestringYesContent type
collectionstringYesCollection name
collection.idstringYesCollection ID
collection.namestringYesCollection Display Name
organizationstringYesOrganization name
organization.idstringYesOrganization ID
organization.namestringYesOrganization Display Name
linkobjectYesLink information
link.idstringYesLink unique identifier
link.sourceTicketIdstringYesSource ticket ID
link.targetTicketIdstringYesTarget ticket ID
link.linkTypestringYesType of link (e.g. relates_to, blocks, duplicates)
link.createdDateTimestringYesLink creation timestamp
link.createdBystringYesUser who created the link
integrationstringYesIntegration Name
integration.typestringNoIntegration type
integration.idstringYesIntegration id
integration.namestringYesIntegration Display Name
Example Payload
{
"type": "ticketlink:created",
"version": "1.0.0",
"contentType": "application/json",
"ticketLink": {
"id": "10198",
"type": "Relates",
"sourceTicket": {
"id": "10178"
},
"targetTicket": {
"id": "10179"
}
},
"integration": {
"type": "TICKETING",
"id": "f2ae41b8-6aa9-434b-84ab-ddc0a7321351",
"name": "Ji_Secu_1756452472351"
}
}
Response
200 OKWebhook processed successfully
400 Bad RequestInvalid webhook payload
401 UnauthorizedInvalid or missing signature

Link Deleted

link:deleted

Triggered when a link between two tickets/issues is removed
POSThttps://api.yourapp.com/webhooks/unizo/ticketing
Headers
NameTypeRequiredDescription
x-unizo-event-typestringYesEvent type: link:deleted
x-unizo-signaturestringYesHMAC SHA-256 signature
Request Body Schema
PropertyTypeRequiredDescription
typestringYesEvent type identifier
versionstringYesWebhook payload version
contentTypestringYesContent type
collectionstringYesCollection name
collection.idstringYesCollection ID
collection.namestringYesCollection Display Name
organizationstringYesOrganization name
organization.idstringYesOrganization ID
organization.namestringYesOrganization Display Name
linkobjectYesLink information
link.idstringYesLink unique identifier
link.sourceTicketIdstringYesSource ticket ID
link.targetTicketIdstringYesTarget ticket ID
link.linkTypestringYesType of link (e.g. relates_to, blocks, duplicates)
link.deletedDateTimestringYesLink deletion timestamp
link.deletedBystringYesUser who deleted the link
integrationstringYesIntegration Name
integration.typestringNoIntegration type
integration.idstringYesIntegration id
integration.namestringYesIntegration Display Name
Example Payload
{
"type": "ticketlink:deleted",
"version": "1.0.0",
"contentType": "application/json",
"ticketLink": {
"id": "10198",
"type": "Relates",
"sourceTicket": {
"id": "10178"
},
"targetTicket": {
"id": "10179"
}
},
"integration": {
"type": "TICKETING",
"id": "f2ae41b8-6aa9-434b-84ab-ddc0a7321351",
"name": "Ji_Secu_1756452472351"
}
}
Response
200 OKWebhook processed successfully
400 Bad RequestInvalid webhook payload
401 UnauthorizedInvalid or missing signature

Attachment

Attachments let your applications handle files, screenshots, logs, and documents linked to tickets and issues in real time. Instead of treating each platform’s attachment model differently, Unizo delivers a normalized event stream so your systems always stay in sync when files are added, updated, or removed.

Unizo supports attachment events from Jira, ServiceNow, Zendesk, GitHub Issues, and other providers, ensuring your integration works seamlessly across platforms with a single, consistent format.

Supported Event Types

These are the event types currently supported by Unizo's Ticketing Attachments . The list keeps growing as we add support for more events across different platforms.

Event TypeDescriptionTrigger Conditions
Attachment :created A new Attachment has been created
Attachment :updatedAttachment information has been modified
Attachment :deletedA Attachment has been deleted

Attachment Events

Attachment Created

Attachment:created

Triggered when a new Attachment is created in the Attachment system
POSThttps://api.yourapp.com/webhooks/unizo/ticketing
Headers
NameTypeRequiredDescription
x-unizo-event-typestringYesEvent type: ticket:created
x-unizo-signaturestringYesHMAC SHA-256 signature
Request Body Schema
PropertyTypeRequiredDescription
Example Payload
{}
Response
200 OKWebhook processed successfully
400 Bad RequestInvalid webhook payload
401 UnauthorizedInvalid or missing signature

Attachment Updated

Attachment:updated

Triggered when Attachment information is modified
POSThttps://api.yourapp.com/webhooks/unizo/Attachment
Headers
NameTypeRequiredDescription
x-unizo-event-typestringYesEvent type: ticket:created
x-unizo-signaturestringYesHMAC SHA-256 signature
Request Body Schema
PropertyTypeRequiredDescription
Example Payload
{}
Response
200 OKWebhook processed successfully
400 Bad RequestInvalid webhook payload
401 UnauthorizedInvalid or missing signature

Attachment Deleted

Attachment:deleted

Triggered when a Attachment is deleted from the system
POSThttps://api.yourapp.com/webhooks/unizo/ticketing
Headers
NameTypeRequiredDescription
x-unizo-event-typestringYesEvent type: ticket:created
x-unizo-signaturestringYesHMAC SHA-256 signature
Request Body Schema
PropertyTypeRequiredDescription
Example Payload
{}
Response
200 OKWebhook processed successfully
400 Bad RequestInvalid webhook payload
401 UnauthorizedInvalid or missing signature

Webhook Delivery & Retries

Unizo implements automatic retry logic for failed webhook deliveries:

  1. Initial Delivery: Immediate
  2. First Retry: After 1 minute
  3. Second Retry: After 5 minutes
  4. Third Retry: After 15 minutes
  5. Final Retry: After 1 hour

Webhooks are considered failed if:

  • Your endpoint returns a non-2xx status code
  • Connection timeout (30 seconds)
  • SSL/TLS errors

Best Practices

1. Idempotency

Idempotent Webhook Handler

async function handleWebhook(request) {
const deliveryId = request.headers['x-unizo-delivery-id'];

// Check if already processed
if (await isProcessed(deliveryId)) {
  return { status: 200, message: 'Already processed' };
}

// Process webhook
await processWebhook(request.body);

// Mark as processed
await markProcessed(deliveryId);

return { status: 200 };
}

2. Async Processing

Asynchronous Processing

app.post('/webhooks/ticketing', (req, res) => {
// Validate signature
if (!verifySignature(req)) {
  return res.status(401).send('Invalid signature');
}

// Queue for processing
ticketQueue.add(req.body);

// Return immediately
res.status(200).send('OK');
});

3. Error Handling

Comprehensive Error Handling

async function processWebhook(payload) {
try {
  switch (payload.type) {
    case 'ticket:created':
      await handleTicketCreated(payload);
      break;
    case 'ticket:updated':
      await handleTicketUpdated(payload);
      break;
    case 'ticket:deleted':
      await handleTicketDeleted(payload);
      break;
    case 'attachment:created':
      await handleAttachmentCreated(payload);
      break;
    case 'attachment:deleted':
      await handleAttachmentDeleted(payload);
      break;
    default:
      logger.warn(`Unknown webhook type: ${payload.type}`);
  }
} catch (error) {
  logger.error('Webhook processing failed', {
    error: error.message,
    payload,
    stack: error.stack
  });
  throw error;
}
}

Need Help?

For webhook-related support: