WebhooksOverview

Introduction

Webhooks are a way to receive notifications from Seismic when certain events occur. This allows you to build custom integrations with Seismic, such as updating a CRM system when a new piece of content is published.

Getting Started

To get started with Webhooks, you will need to create an app in Seismic and configure the webhook URL. This URL is where Seismic will send notifications when events occur.

Read the Events & webhooks for more information on how to setup an app and configure webhooks.

Event Types

Seismic support the following webhook events:

ContentManager

VersionDescription
ContentManagerActiveVersionChangedV1 Early AccessOccurs when content version is activated or deactivated in content manager.
ContentManagerContentVersionExpiredV1Occurs when a content version is expired.
ContentManagerCopyFileV1Occurs when a file is copied.
ContentManagerCreateFileV1Occurs when a file is created.
ContentManagerCopyFolderV1Occurs when a folder is copied.
ContentManagerCreateFileVersionV1Occurs when a file version is created.
ContentManagerDeleteFileV1Occurs when a file is deleted.
ContentManagerMoveFileV1Occurs when a file is moved.
ContentManagerUpdateContentCustomPropertyV1Occurs when a content custom property is updated.

ContentProfile

VersionDescription
ContentProfileAddToProfileV1Occurs when a file is added to profile.
ContentProfileRemoveFromProfileV1Occurs when a file is removed from profile.

CustomSchema

VersionDescription
CustomSchemaCreateV1Occurs when a custom schema is created.
CustomSchemaUpdateV1Occurs when a custom schema is updated.
CustomSchemaDeleteV1Occurs when a custom schema is deleted.

LiveDoc

VersionDescription
LiveDocCompletedV1Occurs when the requested format is generated from a LiveDoc template or there are failures during generating a LiveDoc.
LiveDocCompletedV2Occurs when the requested format is generated from a LiveDoc template or there are failures during generating a LiveDoc.

LiveDocExpress

VersionDescription
LDXJobStatusV1Occurs when job is done.Failed, Cancelled, Complete.

PlannerProject

VersionDescription
PlannerProjectUpdateV1Occurs when a project is updated.
PlannerProjectDeleteV1Occurs when a project is deleted.
PlannerProjectCreateV1Occurs when a project is created.

PlannerRequest

VersionDescription
PlannerRequestUpdateV1Occurs when a request is updated.
PlannerRequestDeleteV1Occurs when a request is deleted.
PlannerRequestCreateV1Occurs when a request is created.

PlannerTask

VersionDescription
PlannerTaskUpdateV1Occurs when a task is updated.
PlannerTaskDeleteV1Occurs when a task is deleted.
PlannerTaskCreateV1Occurs when a task is created.

Program

VersionDescription
ProgramUpdateV1 Early AccessOccurs when a program is updated.
ProgramDeleteV1 Early AccessOccurs when a program is deleted.
ProgramCreateV1 Early AccessOccurs when a program is created.

ReadinessArchival

VersionDescription
ReadinessArchivalEventV1Occurs when the readiness archival process is completed.

User

VersionDescription
UserDeletedV1 Early AccessOccurs when user is Delted.
UserCreatedV1 Early AccessOccurs when a user is Created.
UserUpdatedV1 Early AccessOccurs when a user is Updated.

UserGroup

VersionDescription
UserGroupDeletedV1 Early AccessOccurs when a user group is Deleted.
UserGroupCreatedV1 Early AccessOccurs when a user group is Created.
UserGroupUpdatedV1 Early AccessOccurs when a user group is Updated.
UserGroupMemberChangeV1 Early AccessOccurs when there is a change in a user group's members.

Workflow

VersionDescription
WorkflowApproveStepV1Occurs when a workflow step is approved.
WorkflowRecallV1Occurs when workflow is recalled from a content version.
WorkflowRejectStepV1Occurs when a workflow step is rejected.
WorkflowRevokeStepV1Occurs when a workflow step is revoked.
WorkflowSubmitV1Occurs when a content version is submitted to workflow.

Legacy Events

The following events are powered by our Legacy webhooks services, known internally as Webhooks v1. As the name suggests, this was our first pass at allowing apps to subscribe to events within Seismic.

  • email - Details of an email that was sent
  • email_enriched - Details of an email that was sent with additional enrichment
  • interaction_session_summary - A summary of an interaction session
  • interaction_session_summary_enriched - A summary of an interaction session with additional enrichment

Refer to the Legacy Webhooks for more information on these events.

Filtering Events

You can filter the events that you receive by specifying the filter expression in the app. The filter expression is a JSONPath expression that is used to filter the events that are sent to the webhook URL.

Note: The filter expression uses Newtonsoft.Json.Linq.JToken.SelectTokens method to filter the events. This implements the original Stefan Goessner's JSONPath implementation which has some limitations. Read the documentation carefully to understand what is supported.

For example, to only receive ContentManagerCreateFileV1 events where the event occurred in a specific TeamSite you can use the following filter expression:

$.data..[?(@.teamSiteId == '1')]

Supported JsonPath Filter Expressions

JsonPathDescriptionSupported
$The root object/element
@The current object/element
..Recursive descent.
[]Subscript operator.
[?()]Applies a filter (script) expression.
*Wildcard. All objects/elements regardless of name
&&, ||, !=Logical operators

Refer to the below steps to learn how to write a filter expression.

Suppose you have the following JSON payload:

{
    "id": "26a6d425-d0f1-4002-b7ca-ee3c1f64c431",
    "version": "DemoEventV1",
    "occurredAt": "2024-03-31T09:13:57.948Z",
    "tenantId": "234b9f0d-853d-4210-b5d2-b0574e003fcc",
    "tenantName": "demo",
    "data": {
        "contentId": "foo",
        "followers": [
            {
                "userId": "b26fa7a6-5060-7ce1-8cf2-9fc6a414dfdf",
                "userId": "d8c64a61-ca1a-4535-8877-c0d0ba170e38"
            }
        ]
    },
    "application": "DemoService",
    "productArea": "Demo"
}

Suppose you want to filter the events where the contentId is foo.

  1. Start with the root object $.
$
  1. Navigate to the data object.
$.data
  1. Convert the data object to an array by using the recursive descent operator ... This step is important as the script expression ?() only works with arrays.
$.data..
  1. Add subscript operator [].
$.data..[]
  1. Add the script expression [?()] inside the subscript operator.
$.data..[?()]
  1. The final step is to add the filter expression @.contentId == 'foo' inside the script expression [?()].
    @ refers to the object being evaluated.
$.data..[?(@.contentId == 'foo')]

This expression will evaluate to true and the event will be sent to the webhook URL if the contentId is foo.

More examples of filter expressions

Filter events where the tenantId is 234b9f0d-853d-4210-b5d2-b0574e003fcc.

$..[?(@.tenantId == '234b9f0d-853d-4210-b5d2-b0574e003fcc')]

Filter events where the tenantName is demo.

$..[?(@.tenantName == 'demo')]

ContentManagerCreateFileV1

See the documentation for the ContentManagerCreateFileV1 event to understand the structure of the event.

Filter events where the contentId is foo.

$.data..[?(@.contentId == '5a5699ac-49a7-43ba-82cc-0eea22cea051')]

Filter events where the teamSiteId is 1.

$.data..[?(@.teamSiteId == '1')]

Filter events where content format is pptx.

$.data..[?(@.format == 'PPTX')]

LiveDocCompletedV2

See the documentation for the LiveDocCompletedV2 event to understand the structure of the event.

Filter events where the LiveDoc generation requestId is c9c564af-e5c9-4a4b-ac55-4f9f85662888.

$.data..[?(@.requestId == 'c9c564af-e5c9-4a4b-ac55-4f9f85662888')]

Filter events where the LiveDoc generation requestId is c9c564af-e5c9-4a4b-ac55-4f9f85662888 and output format is PPTX.

$.data..[?(@.requestId == 'c9c564af-e5c9-4a4b-ac55-4f9f85662888' && @.output.format == 'PPTX')]

Filter events where the LiveDoc generation requestId is c9c564af-e5c9-4a4b-ac55-4f9f85662888 and output format is PPTX and the status is Generated.

$.data..[?(@.requestId == 'c9c564af-e5c9-4a4b-ac55-4f9f85662888' && @.output.format == 'PPTX' && @.status == 'Generated')]