Webhooks offer a versatile and efficient solution for real-time communication and integration between various applications. They provide a way for applications to communicate and share information without the need for constant polling or manual intervention.
The process typically starts with the application that wants to be notified (the "sender" or "source") and then setting up a webhook URL in the recipient application (the "receiver" or "destination"). The webhook URL acts as an endpoint to which the sender will send HTTP requests. When the specified event or trigger occurs in the sender application, it will initiate an HTTP request to the webhook URL provided by the receiver. This request contains relevant data or information related to the event. The receiver application can then process this data, perform specific actions, or trigger further processes based on the received information.
Outgoing Webhooks
Outgoing webhooks is a mechanism from Act-On to send real-time notifications and data to another system in response to specific Act-On events. Instead of waiting for a client or external system to request information, the Act-On will initiate the communication by sending a webhook to a predefined endpoint URL. This outgoing webhook carries data related to the event that occurred.
Act-On Outgoing Webhook Event Types
Generic Events
The following tables list events that accounts can subscribe to and connect to any 3rd party platform
Event Type: automated-program.started
Field Name | Title | Data Type | Required | OBJECT |
description | Automated Program description | string | Optional |
{ "description": "Program Description Example", "entryType": "Manual", "link": "https://example.actonsoftware.com/app/automation/programs/##-####/program-performance", "name": "Program Name Example", "programSchedule": "Pending contacts added manually", "startedTime": 1686597624671, "waitingCount": 0 } |
entrytype | Automated Program entry type | string | Optional | |
link | Automated Program program link | string | Optional | |
name | Automated Program name | string | Required | |
programSchedule | Automated Program program schedule | string | Optional | |
startedTime | Automated Program started time | Integer | Optional | |
waitingCount | Automated Program waiting count | number | Optional |
Event Type: automated-program.stopped
Field Name | Title | Data Type | Required | OBJECT |
description | Automated Program description | string | Optional |
{ "description": "Program Description Example", "entryType": "Manual", "link": "https://example.actonsoftware.com/app/automation/programs/##-####/program-performance", "name": "Program Name Example", "programSchedule": "Pending contacts added manually", "stoppedTime": 1686597624671, "waitingCount": 0 } |
entrytype | Automated Program entry type | string | Optional | |
link | Automated Program program link | string | Optional | |
name | Automated Program name | string | Required | |
programSchedule | Automated Program program schedule | string | Optional | |
startedTime | Automated Program started time | Integer | Optional | |
waitingCount | Automated Program waiting count | number | Optional |
Event Type: contact-bounce.hard
Field Name | Title | Data Type | Required | OBJECT |
The email from the contact who joined the hard bounce list | string | Required |
{ "email": "contact@test.com", "isHardBounce": true } |
|
isHardBounce | A boolean value indicating if the contact joined the hard bounce list. Should always be true for this event. | string | Required |
Event Type: contact-bounce.soft
Field Name | Title | Data Type | Required | OBJECT |
The email from the contact who joined the hard bounce list | string | Required |
{ "email": "contact@test.com", "isHardBounce": true } |
|
isHardBounce | A boolean value indicating if the contact joined the hard bounce list. Should always be true for this event. | string | Required |
Event Type: contact-opt.global-opt-in
Field Name | Title | Data Type | Required | OBJECT |
The email from the contact who opted in | string | Required |
{ "email": "contact@test.com", "hasOptedOut": false } |
|
hasOptedOut | A boolean value indicating if the contact has opted out. Should always be false for this event. | string | Required |
Event Type: contact-opt.global-opt-out
Field Name | Title | Data Type | Required | OBJECT |
The email from the contact who opted out | string | Required |
{ "email": "contact@test.com", "hasOptedOut": true } |
|
hasOptedOut | A boolean value indicating if the contact has opted out. Should always be true for this event. | string | Required |
Event Type: subscription-category.opt-in
Field Name | Title | Data Type | Required | OBJECT |
categoryChecked | Indicates if the contact is opted into the category | boolean | Required |
{ "categoryChecked": true, "categoryDescription": "News about our best offers", "categoryId": "1", "categoryName": "Discounts", "email": "contact@test.com", "timestamp": 1689343863 } |
categoryDescription | Description of the category | string | Required | |
categoryId | Unique ID of the category | string | Required | |
categoryName | The name of the category | string | Required | |
|
The email from the contact that opted into the category | string | Required | |
timestamp | A timestamp of the moment in which the opt-in happened. | number | Required |
Event Type: subscription-category.opt-out
Field Name | Title | Data Type | Required | OBJECT |
categoryChecked | Indicates if the contact is opted into the category | boolean | Required |
{ "categoryChecked": false, "categoryDescription": "News about our best offers", "categoryId": "1", "categoryName": "Discounts", "email": "contact@test.com", "timestamp": 1689343863 } |
categoryDescription | Description of the category | string | Required | |
categoryId | Unique ID of the category | string | Required | |
categoryName | The name of the category | string | Required | |
|
The email from the contact that opted out of the category | string | Required | |
timestamp | A timestamp of the moment in which the opt-out happened. | number | Required |
Preconfigured Event Types
Act-on will be providing platform-specific pre-configured events for certain use cases to facilitate the integration setup process with the webhook.
Platform | Event Type | Object |
Slack | automated-program.started.slack |
{ "text": "The following Automated Program has started.\n\n*Program Name:* Program Name Example \n*Program Description:* Program Description Example \n*Started on:* mm-dd-yyyy \n*People Entering Program:* 0 \n*Program Entry Type:* Manual \n*Schedule:* Pending contacts added manually \n*Link to Program:* https://example.actonsoftware.com/app/automation/programs/##-####/program-performance" } |
Slack | automated-program.stopped.slack |
{ "text": "The following Automated Program has stopped.\n\n*Program Name:* Program Name Example \n*Program Description:* Program Description Example \n*Stopped on:* mm-dd-yyyy \n*People Entering Program:* 0 \n*Program Entry Type:* Manual \n*Schedule:* Pending contacts added manually \n*Link to Program:* https://example.actonsoftware.com/app/automation/programs/##-####/program-performance" } |
Teams | automated-program.started.teams |
{ "text": "**Program Name:** Program Name Example \n**Program Description:** Program Description Example \n**Started on:** mm-dd-yyyy \n**People Entering Program:** 0 \n**Program Entry Type:** Manual \n**Schedule:** Pending contacts added manually \n**Link to Program:** https://example.actonsoftware.com/app/automation/programs/##-####/program-performance", "title": "The following Automated Program has started." } |
Teams | automated-program.stopped.teams |
{ "text": "**Program Name:** Program Name Example \n**Program Description:** Program Description Example \n**Started on:** mm-dd-yyyy \n**People Entering Program:** 0 \n**Program Entry Type:** Manual \n**Schedule:** Pending contacts added manually \n**Link to Program:** https://example.actonsoftware.com/app/automation/programs/##-####/program-performance", "title": "The following Automated Program has started." } |
Authentication
Act-On will send a payload with a signature. Customers can validate the signature using the secret key provided for the endpoint and the payload received by generating an HMAC SHA-256 hash. In addition, custom headers can be added to authenticate the webhook based on the destination platform’s requirements. See here how to create and manage an outgoing webhook.
Incoming Webhooks
Incoming webhooks in Act-On are special endpoint URLs that act as communication channels between a third party which is triggering the Outgoing Webhook and Act-On. The purpose of the incoming webhook is to receive the message, aka payload, parse it, and take action based on it. The communication channels can be used for any type of use case; from updating Act-On databases to triggering specific processes in Act-On. Currently, the only communication channel is for contact data for All Contacts. See here how to create and manage an outgoing webhook.