The following tables list generic outgoing webhook event types that accounts can subscribe to and connect to any third-party platform.
automated-program.started
This webhook is triggered when an Automated Program is 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 | The time that the Automated Program started | integer | Optional | |
waitingCount | Automated Program waiting count | number | Optional |
automated-program.stopped
This webhook is triggered when an Automated Program is 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 | |
stoppedTime | The time that the Automated Program stopped | integer | Optional | |
waitingCount | Automated Program waiting count | number | Optional |
contact-bounce.hard
When a contact is added to the hard bounce list, it triggers a webhook with this object as its payload.
Field Name | Title | Data Type | Required | OBJECT |
Diagnostic | The SMTP error code for this bounce | string | Optional |
{ "bounceDiagnostic": "User upload", "categoryReason": "User", "email": "contact@test.com", "isHardBounce": true "msgId": "s-002e-2303", "timestamp": 1689559644 } |
categoryReason | Why the message failed to send | string | Required | |
The email from the contact who joined the hard bounce list | string | Required | ||
isHardBounce | A boolean value indicating if the contact joined the hard bounce list. Should always be true for this event. | boolean | Required | |
msgId | The message ID | string | Required | |
timestamp | A timestamp of the moment the contact hard bounced | integer | Required |
contact-bounce.soft
When a contact is added to the soft bounce list, it triggers a webhook with this object as its payload.
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 | boolean | Required |
contact-email.marked-as-spam
This webhook is triggered every time a contact marks an email as spam.
Field Name | Title | Data Type | Required | OBJECT |
The email from the contact that marked an email as spam | string | Required |
{ "email": "contact@test.com", "msgId": "s-002e-2303", "recId": "l-0001:14", "srcId": "l-0001", "timestamp": 1689343863 } |
|
msgId |
The message ID |
string | Required | |
recId | The contact ID | string | Required | |
srcId | The source ID | string | Required | |
timestamp |
A timestamp of the moment the contact marked an email as spam |
integer | Required |
contact-lead-score.upper-threshold-surpassed
Triggers a webhook the first time a contact lead score exceeds a certain value. That value can be configured on the score sheets page for each score sheet you want to trigger on.
Field Name | Title | Data Type | Required | OBJECT |
contactReportLink string |
A link for this contact in the CRM that it belongs to | string | Optional |
{ |
emailstring | Contact email | string | Required | |
fieldsobject | Additional contact fields | string | Optional | |
leadscoreinteger | Lead score | string | Required | |
scoresheetIdstring | Score Sheet ID | integer | Required |
The webhook listens for score changes every 5 minutes. Score changes can occur if a new behavior is recorded, a profile field is changed, or score rules are updated.
contact-opt.global-opt-in
When a contact opts in to all email communication, it triggers a webhook with this object as its payload.
Field Name | Title | Data Type | Required | OBJECT |
The email from the contact who opted in | string | Required |
{ "email": "contact@test.com", "hasOptedOut": false "timestamp": 1689559644 } |
|
hasOptedOut | A boolean value indicating if the contact has opted out. Should always be false for this event | boolean | Required | |
timestamp | A timestamp of the moment the contact opted in | integer | Required |
contact-opt.global-opt-out
When a contact opts out from all email communication, it triggers a webhook with this object as its payload.
Field Name | Title | Data Type | Required | OBJECT |
The email from the contact who opted out | string | Required |
{ "email": "contact@test.com", "hasOptedOut": true "timestamp": 1689559644 } |
|
hasOptedOut | A boolean value indicating if the contact has opted out. Should always be true for this event | boolean | Required | |
timestamp | A timestamp of the moment the contact opted out | integer | Required |
contact.added
This webhook is triggered when a contact is added to Act-On Contacts.
Field Name | Title | Data Type | Required | OBJECT |
contact |
An object that contains the standard and custom fields (name, e-mail, etc.) for this contact |
object | Required |
{ "contact": { } |
contactReportLink |
A link to the Contact Report which provides a complete view of an individual in Act-On |
string | Required | |
The email for the contact added to Act-On Contacts |
string | Required | ||
timestamp |
Timestamp with the date and time in UTC identifying when the contact was added |
integer | Required |
contact.updated
This webhook is triggered when a contact is updated in Act-On Contacts.
Field Name | Title | Data Type | Required | OBJECT |
contact |
An object that contains the standard and custom fields (name, e-mail, etc.) for this contact |
object | Required |
{ "contact": { } |
contactReportLink |
A link to the Contact Report which provides a complete view of an individual in Act-On |
string | Required | |
The email for the updated Act-On Contact |
string | Required | ||
timestamp |
Timestamp with the date and time in UTC identifying when the contact was updated |
integer | Required |
crm.connected
This webhook is triggered every time a user connects to a CRM.
Field Name | Title | Data Type | Required | OBJECT |
crmDisplayName |
The name of the CRM the user was connected to |
string | Required |
{ "crmDisplayName": "Salesforce", "detail": "Successful connection", "timestamp": 1689343863 } |
detail | The details of the CRM connection | string | Required | |
timestamp |
A timestamp of when the CRM connection occurred |
integer | Required |
crm.disconnected
This webhook is triggered every time a user disconnects from a CRM.
Field Name | Title | Data Type | Required | OBJECT |
crmDisplayName | The name of the CRM the user was connected to | string | Required |
{ "crmDisplayName": "Salesforce", "detail": "Fail connection due to credential", "timestamp": 1689343863 } |
detail | The details of the CRM connection | string | Required | |
timestamp | A timestamp of when the CRM disconnection occurred | integer | Required |
email-message.scheduled
This webhook is triggered every time a message is scheduled.
Field Name | Title | Data Type | Required | OBJECT |
accountId |
The message's Account ID |
integer | Required |
{ "accountId": "4", "accountName": "Name", "creatorId": "5", "creatorName": "Creator's Name", "messageId": "s-002e-2303", "numTargetedRecipients": "2", "previewText": "preview text", "scheduledTimeZone": "America/Sao_Paulo", "scheduledTimestamp": "1694004008962", "schedulingOfEmail": "1694003951450", "selectedSender": "FirstName LastName|contact@test.com|user", "subject": "subject", "title": "Title" } |
accountName | The message's Account Name | string | Required | |
creatorId | The creator ID | integer | Required | |
creatorName | The creator name | string | Required | |
messageId | The message ID | string | Required | |
numTargetedRecipients | The total number of recipients | integer | Required | |
previewText | The message preview text | string | Required | |
scheduledTimeZone | The timezone in which the message was scheduled | string | Required | |
scheduledTimestamp | A timestamp of when the message was scheduled | integer | Required | |
schedulingOfEmail | A timestamp of when the scheduled message was created | string | Required | |
selectedSender | Sender's name and email | string | Required | |
subject | The message subject | string | Required | |
title | The message title | string | Required |
form.submitted
When a Form is submitted, it triggers a webhook with this object as its payload.
Field Name | Title | Data Type | Required | OBJECT |
browser |
The browser from the registration was submitted |
string | Optional |
{ "browser": , "campaignSource": , "contact": { "cookieId": "0076d7", "formId": "e23a97da-3346-4c32-9bc9-15ab0dc9ca8a", "formName": "Form name", "referrer": "referrer example", "submissionTime": 1234567890 } |
campaignSource | The campaign source of the Form where the registration was submitted | string | Optional | |
contact | object | Required | ||
cookieId | The cookie ID of the form where the registration was submitted | string | Required | |
formId | The ID of the form where the registration was submitted. | string | Required | |
formName | The name of the Form where the registration was submitted | string | Required | |
referrer | The referrer of the Form where the registration was submitted | string | Optional | |
submissionTime | The submission time when the registration was submitted | integer | Optional |
subscription-category.added
This webhook is triggered every time a contact adds a new subscription category.
Field Name | Title | Data Type | Required | OBJECT |
checked |
If the user added a category |
boolean | Required |
{ "checked": true, "description": "News about our best offers", "id": "1", "name": "Discounts", "timestamp": 1689343863 } |
description | The description of the category | string | Required | |
id | The ID of the category from Act-On | string | Required | |
name | The name of the category | string | Required | |
timestamp | A timestamp of when the category was added | integer | Required |
subscription-category.deleted
This webhook is triggered every time a contact deletes a subscription category.
Field Name | Title | Data Type | Required | OBJECT |
checked |
If the user deleted a category |
boolean | Required |
{ "checked": true, "description": "News about our best offers", "id": "1", "name": "Discounts", "timestamp": 1689343863 } |
description | The description of the category | string | Required | |
id | The ID of the category from Act-On | string | Required | |
name | The name of the category | string | Required | |
timestamp | A timestamp of when the category was deleted | integer | Required |
subscription-category.opt-in
This webhook is triggered whenever a contact opts in to a subscription category.
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. | integer | Required |
subscription-category.opt-out
This webhook is triggered whenever a contact opts out from a subscription category.
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. | integer | Required |
subscription-category.updated
This webhook is triggered every time a contact updates a subscription category.
Field Name | Title | Data Type | Required | OBJECT |
checked | If the contact updated a category | boolean | Required |
{ "checked": true, "description": "News about our best offers", "id": "1", "name": "Discounts", "timestamp": 1689343863 } |
description | Description of the category | string | Required | |
id | Unique ID of the category | string | Required | |
name | The name of the category | string | Required | |
timestamp | A timestamp of the moment in which the opt-out happened. | integer | Required |
Preconfigured Event Types
Act-on provides 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.