Slack
Post every new lead to a Slack channel, with the message you choose.
Authenticated with ?privateKey=YOUR_KEY (see Authentication).
| POST | /admin/automations | Create a new automation |
| GET | /admin/automations | Get all automations for a website |
| PATCH | /admin/automations/{id} | Enable or disable an automation |
| GET | /v3/slack/channels | List Slack channels |
| GET | /v3/slack/message-template | Get the Slack message template |
| PUT | /v3/slack/message-template | Set the Slack message template |
| POST | /v3/slack/test-message | Send a Slack test message |
/admin/automationscurl -X POST "https://rest-dash.revealid.xyz/admin/automations?privateKey=YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Docs example: send-to-slack", "isActive": true, "website": "64b7f0a1c2d3e4f5a6b7c8d9", "when": "new-lead-is-identified", "then": "send-to-slack", "interval": "immediately", "actions": { "sentToSlack": { "sendMessagesTo": "#leads", "howManyToAdd": 5 } }}'What each field accepts
| Field | Type | Limits and format | Accepted values |
|---|---|---|---|
| name* | string | — | any |
| isActive* | boolean | — | any |
| website* | string | — | any |
| filter | object | — | any |
| trigger | string | default "only-on-first-visit" | only-on-first-visiton-every-visitnone |
| when* | string | — | Show all 7 valuesnew-lead-is-identifiednew-intent-data-triggerednew-prospector-leadnew-web-scraping-signalnew-scout-leadnew-linkedin-engagementnew-tag-added-to-lead |
| then* | string | — | Show all 16 valuessend-to-slacksend-to-hubspotsend-to-pipedrivesend-to-salesforcesend-to-zohosend-to-gohighleveltrigger-webhooksend-to-zapiersend-to-claysend-to-emailCampaignsend-to-linkedinCampaignsend-email-alertsend-csv-on-emailsend-to-googleAdsCampaignsend-to-linkedinAdsAudiencesend-to-metaAdsAudience |
| interval | string | default "daily" | immediatelyafter-sessiondailyweeklymonthly |
| contactPersona | object | — | any |
| contactPersona.roles | string[] | — | any |
| contactPersona.excludedRoles | string[] | — | any |
| emailVerification | object | — | any |
| emailVerification.allowOnlyValidEmails | boolean | default false | any |
| emailVerification.allowCatchAllEmails | boolean | default false | any |
| emailVerification.allowGuessedEmails | boolean | default true | any |
| emailVerification.allowWithoutEmails | boolean | default false | any |
| contactSelectionStrategy | string | default "exact-job-titles" | exact-job-titlesflexible-job-titlesflexible-find-at-least-one-job-titles |
| maxContactsToSend | integer | min 1 · whole number · default 5 | any |
| actions | object | — | any |
| actions.sentToSlack | object | — | any |
| actions.sentToSlack.sendMessagesTo | string | — | any |
| actions.sentToSlack.messageTemplate | string | — | any |
| actions.sentToSlack.howManyToAdd | integer | whole number | any |
| actions.sentToWebhook | object | — | any |
| actions.sentToWebhook.url | string | — | any |
| actions.sentToWebhook.whenToPush | string | — | every-timeonly-with-suggested-contacts |
| actions.sendToClay | object | — | any |
| actions.sendToClay.url | string | — | any |
| actions.sendToClay.whenToPush | string | — | every-timeonly-with-suggested-contacts |
| actions.sentToEmailCampaign | object | — | any |
| actions.sentToEmailCampaign.emailCampaign | string | — | any |
| actions.sentToEmailCampaign.emailAccounts | string[] | — | any |
| actions.sentToHubspot | object | — | any |
| actions.sentToHubspot.action | string | — | create-a-contact |
| actions.sentToHubspot.assignContactsTo | string | — | any |
| actions.sentToHubspot.createDeal | boolean | — | any |
| actions.sentToHubspot.pipelineId | string | — | any |
| actions.sentToHubspot.dealStageId | string | — | any |
| actions.sentToHubspot.dealAmount | number | — | any |
| actions.sentToPipedrive | object | — | any |
| actions.sentToPipedrive.assignContactsTo | string | — | any |
| actions.sentToSalesforce | object | — | any |
| actions.sentToSalesforce.assignContactsTo | string | — | any |
| actions.sentToZoho | object | — | any |
| actions.sentToZoho.assignContactsTo | string | — | any |
| actions.sentToGoHighLevel | object | — | any |
| actions.sentToGoHighLevel.assignContactsTo | string | — | any |
| actions.sentToGoHighLevel.createOpportunity | boolean | — | any |
| actions.sentToGoHighLevel.pipelineId | string | — | any |
| actions.sentToGoHighLevel.pipelineStageId | string | — | any |
| actions.sentToGoHighLevel.opportunityStatus | string | — | openwonlostabandoned |
| actions.sentToGoHighLevel.tags | string[] | — | any |
Use case: Pick the channel first
GET /v3/slack/channels lists the channels of the connected workspace (archived ones left out), each with id, name, isPrivate, isMember and members; use a name as sendMessagesTo. The app can post to any public channel without being in it; a private channel only shows up after you invite the app to it (/invite in Slack). Without Slack connected the call answers 405 Slack Integration not connected.
Use case: Change the message
PUT /v3/slack/message-template with websiteId and template (up to 3,000 characters, merge fields like {{lead.company.name}}) saves the message for every Slack automation of the website; an empty template goes back to the default. The answer lists unknownFields when the template uses a merge field that doesn't exist, since it would show empty. GET /v3/slack/message-template returns the saved template (null = default) and the defaultTemplate.
Use case: Try the message
POST /v3/slack/test-message posts a sample lead, marked [Test Notification], with the saved template or the template you pass. Give channelName (a name from the channel list), or leave it out to use the channel of your first active Slack automation. It answers { "success": true, "channel": "leads" }, plus unknownFields when the template uses a merge field that doesn't exist (it would show empty). When Slack refuses the post (the channel was renamed or archived, or the app isn't in it) it answers 400 with the reason in status and the Slack code in slackError.