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 the Outgoing Webhook Management article for how to create and manage an outgoing webhook.