Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
190 views

Application Events For Developers

This document provides an introduction to Guidewire App Events, which enables near real-time integration between Guidewire InsuranceSuite applications and external systems without coding. It discusses key terminology, the two delivery mechanisms for App Events - App Events Webhooks and Integration Gateway - and how to structure App Event payloads. It also includes lists of standard events for ClaimCenter and PolicyCenter and instructions for configuring custom events and initial synchronization of existing data.

Uploaded by

mpdevfus1983
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
190 views

Application Events For Developers

This document provides an introduction to Guidewire App Events, which enables near real-time integration between Guidewire InsuranceSuite applications and external systems without coding. It discusses key terminology, the two delivery mechanisms for App Events - App Events Webhooks and Integration Gateway - and how to structure App Event payloads. It also includes lists of standard events for ClaimCenter and PolicyCenter and instructions for configuring custom events and initial synchronization of existing data.

Uploaded by

mpdevfus1983
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 136

Guidewire Cloud Platform™

App Events
Release 2022.09
© 2022 Guidewire Software, Inc.
For information about Guidewire trademarks, visit https://www.guidewire.com/legal-notices.
Guidewire Proprietary & Confidential — DO NOT DISTRIBUTE

Product Name: Guidewire App Events


Product Release: 2022.09
Document Name: App Events
Document Revision: 09-November-2022
Guidewire Cloud Platform 2022.09 App Events

Contents

Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6

1 Introduction to App Events .................................................... 7


Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
Delivery mechanisms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
App Events Webhooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
Integration Gateway. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
App Event structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
Event context attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
Event data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
ClaimCenter event data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
PolicyCenter event data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
Event groups. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
Event destinations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
ClaimCenter list of events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
PolicyCenter list of events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27

2 Getting started with App Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31


Initial provisioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
Access groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32
Payload signature verification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32
OAuth authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35

3 Configuring App Events Webhooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37


Configure a subscription . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
Filtering with JMESPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
Configure an endpoint. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
Manage an endpoint. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
Configure auth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
Configure allowed domains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50

4 Configuring custom events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51


Triggering custom events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
Tutorial: Configure a custom event for a standard entity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
Tutorial: Configure an event for a custom entity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
Tutorial: Test the custom entity configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55

5 Using Integration Gateway . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57


App Events component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
Installing the App Events component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
Using the App Events component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
Recording and replaying events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
Recording app events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62
Replaying app events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
Event snapshot reference expansion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
Configuring the snapshot reference expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78

3
Guidewire Cloud Platform 2022.09 App Events

6 Using App Events API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81


App Events Webhooks API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
Webhooks API authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
Standard Event API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87

7 Initializing App Events for existing data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113


Initializing App Events for existing ClaimCenter data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Prioritizing the synchronization order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Initializing App Events for existing PolicyCenter data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

8 Appendix I: Sample event payloads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .119

9 Appendix II: List of Claim subentities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

10 Guidewire Community request templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

11 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135


App Events 2022.09.0 (Flaine) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

4
Guidewire Cloud Platform 2022.09 App Events

5
Guidewire Cloud Platform 2022.09 App Events

Support

For assistance, visit the Guidewire Community.


Guidewire customers
https://community.guidewire.com
Guidewire partners
https://partner.guidewire.com

6 Support
chapter 1

Introduction to App Events

What is App Events?


App Events is an essential part of the Guidewire Integration Framework that represents the new approach for
outbound integrations between InsuranceSuite and external systems. App Events enable downstream systems to
subscribe to business events and receive up-to-date claim and policy information in near-real time without coding.
App Events supports two delivery mechanisms:
• App Events Webhooks
A User Interface (UI) that provides customers with a no-code way to subscribe external systems to events
occurring in the InsuranceSuite application.
• Integration Gateway
Integration Gateway apps deliver events to external systems using protocols that Apache Camel supports.
Developers write Camel routes to read events and invoke routes when events occur to deliver them to recipients.

App Events acts as an outbound API for ClaimCenter and PolicyCenter. It makes it easy to publish events and full
claim graph snapshots from the InsuranceSuite apps to downstream systems such as external applications, internal
systems, and third-party services.
Downstream systems need to be notified of business events occurring in an InsuranceSuite app. For example, a
medical bill review system needs to know when injury claims and medical exposures are opened, an auto physical
damage system needs to know vehicle claims and incidents are opened or updated. Another example, a billing
Introduction to App Events 7
Guidewire Cloud Platform 2022.09 App Events

system needs to know when a new policy is created or and existing policy is changes. These kind of integrations are
known as outbound asynchronous delivery.
Traditionally, in InsuranceSuite implementations, developers use event messaging with Gosu rules and custom
message transport plugins to send messages from InsuranceSuite to external applications. Consequently, changes to
this integration logic require Gosu changes. The new App Events framework enables event-driven, outbound
asynchronous integrations without requiring custom Gosu code. This allows integration logic changes to be made on
a different lifecycle outside of the InsuranceSuite application changes.

Guarantees
App Events provides several important guarantees concerning event delivery:
• Events are delivered at-least once
• Events are safe-ordered by the primary object that they are associated with
• Webhooks subscriptions and Integration Gateway Camel route subscriptions are isolated. If a Webhooks endpoint
goes down, it does not affect the delivery of other subscriptions. For details, see “Delivery Guarantees” on
page 11. If a Camel route cannot deliver to an endpoint, it does not block other Camel route deliveries.
• Consumers do not affect the performance of InsuranceSuite. A consumer is a downstream system that consumes,
or reads application events.
Note: At-least once delivery guarantees that App Events will deliver an event to a consumer even if
errors occur. As a result, the consumer might repeatedly receive the same event. Therefore, a
consumer must be idempotent: the outcome of processing the same message repeatedly must be the
same as processing the message once.
It is a responsibility of the consumer to handle duplicate messages correctly. Some consumers are
naturally idempotent. Others must track the messages that they have processed in order to detect and
discard duplicates.

See also
• “Getting started with App Events” on page 31
• ClaimCenter Integration Views
• PolicyCenter Integration Views

Terminology
Term Definition
Bitbucket (BB) Atlassian service used to store code of Insurance Platform applications that are
developed by the insurer. bitbucket.org
CCO Guidewire Cloud Operations team
Cluster An isolated runtime environment that includes Kubernetes and AWS
supporting services. Maps to Quadrant.
Consumer A consumer reads the event and acts upon it. It uses the context attributes and
event data to execute some logic, which may lead to the occurrence of new
events.
Endpoint External system that consumes application events.
Environment A holistic deployment of InsuranceSuite and supporting applications, for
example dev1, dev2, qa, preprod, prod. Maps to planet.
Event An event is an abstract notification of a change in InsuranceSuite that might be
interesting to an external system. An event most often represents a user action
to application data, or an API that changed application data. Entity types
defined with the <events> tag trigger an event if a user action or API adds,
8 chapter 1: Introduction to App Events
Guidewire Cloud Platform 2022.09 App Events

Term Definition
changes, or removes data associated with an instance of the entity. Each event
is identified by a String name.
Galaxy Galaxy corresponds to an AWS geographic region where cloud customers are
deployed. For example, the galaxy Andromeda represents AWS region US-
EAST-1.

Guidewire Cloud Console (GCC) Guidewire Cloud Console (GCC) is a one-stop control center for Guidewire
Cloud.
Insurance Platform All applications deployed in a project environment on Guidewire Cloud
Console.
InsuranceSuite (IS) InsuranceSuite, a subset of core applications (PC, CC, BC, CM) that is deployed
in a project environment.
Integration Gateway Application events delivery mechanism that is a purpose-built service for
running integration applications that bridge InsuranceSuite APIs and third-
party or custom applications.
IS App An InsuranceSuite (IS) application, such as PolicyCenter (PC) or ClaimCenter
(CC).
JMESPath A JSON query language. jmespath.org
JMESPath Payload Filter An expression in a Webhooks subscription used to specify data elements to
include in the event subscription, not specify data to exclude.
Planet Planet is a namespace (or environment) in which customers deploy and run
code. A star system can have any number of planets. A planet is where insurer
developers do their work. A planet is also where actual production instances of
IS are deployed.
Quadrant Quadrant corresponds to an Amazon Kubernetes services cluster (Amazon
EKS). There are multiple quadrants in a galaxy. Their names are named based
on the Greek alphabet, starting with Alpha and ending with Omega. Within a
galaxy, there are quadrants reserved for non–production and for production
use. There is one quadrant (Omega) in each galaxy that is reserved for the
Guidewire microservices. The microservices quadrant provides the common
services available for tenant self service, in addition to common services
consumed by all tenants and quadrants within the Galaxy.
Snapshot All event data in the entity graph at the time an event occurs in InsuranceSuite.
Events relating to the same InsuranceSuite transaction will share the same
graph snapshot.
Star System Star system corresponds to a tenant. An insurer may have multiple star
systems, designated to different projects, to non-production or production use.
Star system has its own RDS, its own instance of BitBucket and TeamCity, and it
does not share any data with other star systems.
App Events Webhooks Application events delivery mechanism that uses HTTP webhooks to send
events to an endpoint. An administrator uses a web-based user interface to
create and edit event subscriptions.
Subscription A mechanism used by Webhooks that specifies what events to subscribe to
and the delivery address URL to publish the event to (the endpoint).
TeamCity (TC) Service used to build and deploy Insurance Platform apps.
Tenant Representation of the insurer. Maps to a Star System.

Introduction to App Events 9


Guidewire Cloud Platform 2022.09 App Events

Delivery mechanisms
There are two supported delivery mechanisms for App Events:
App Events Webhooks
Delivers events to an endpoint using HTTP hooks
Integration Gateway
Delivers events through Integration Gateway apps. The apps use the App Events Camel component to read events
and invoke routes when events occur to deliver them to recipients.
App Events uses Kafka as a distributed streaming platform for publishing and delivering InsuranceSuite events.
Kafka is an open source software that provides a framework for storing, reading, and analyzing streaming data.

App Events Webhooks


App Events Webhooks provides customers with a no-code way to subscribe external systems to events occurring
within the InsuranceSuite application by using HTTP webhooks. A webhook is an HTTP request, triggered by an
event in a source system and sent to a destination system, often with a payload of data.
App Events Webhooks provides UI (User Interface) and Webhooks API for creating and managing subscriptions.
Using Webhooks, users can control the downstream delivery endpoints, events and payload selection.
App Events Webhooks delivers events to endpoints using HTTP hooks. Admins and developers use a web-based
user interface to create and edit event subscriptions. The subscription specifies what events to subscribe to and the
delivery address URL (endpoint) to publish the event to. Optionally, a payload filter can also be supplied. App
Events Webhooks publishes event data in a standard JSON format to form a data graph (known as a payload) of the
related Integration Views . For example, a payload is comprised of a claim with associated incidents, exposures, and
parties involved.
Subscriptions are for specific InsuranceSuite instances, but endpoints are not. Endpoints are shared across star
systems. For example, you could have two subscriptions in different star systems sending events to the same
endpoint.
The structure and content of the claim graph snapshot is derived from the Integration Views that are used by the
Guidewire Cloud API. Guidewire uses Integration Views to define the external contract that governs the custom
processes for publishing and retrieving data. The technical implementation of an Integration View consists of two
mandatory components, a mapping and a schema, and an optional component, a filter. In terms of the InsuranceSuite
application events, the Guidewire Cloud API Integration Views define the mapping of a InsuranceSuite entity to a
JSON schema.

About the App Events Webhooks process

At a high level, the App Events Webhooks follows this process:


1. An administrator creates a subscription for one or more InsuranceSuite app events using the Webhooks UI
2. An endpoint URL where the event will be sent is specified. For example, an endpoint that is exposed by a
fraud scoring system.
10 chapter 1: Introduction to App Events
Guidewire Cloud Platform 2022.09 App Events

3. The subscription is enabled by setting its status to ACTIVE


4. Events are triggered in an InsuranceSuite app as a result of user activity or other processes. As transactions are
committed in InsuranceSuite, events are triggered.
Note: It is possible that a single InsuranceSuite transaction raises multiple events. In this case,
the event data in the graph snapshot will contain the same claim data for each event.
5. For each subscription to generated events, events and claim graph payloads are serialized in JSON and
delivered to the endpoint over HTTP.
App Events Webhooks uses a standardized JSON claim graph schema for message payloads sent to endpoints. The
format of the payload is fixed. Most integrations only require a subset of the claim graph fields. Subscribers can use
a JMESPath filter to limit the payload data to include only the fields required for the integration. See “Filtering with
JMESPath” on page 42.

Delivery Guarantees

• In the event that events are not sent successfully to an endpoint system, App Events follows a process for
performing retries. This is to ensure that events are delivered seamlessly
• App Events Webhooks provides guaranteed, in order message delivery. All events relating to a particular claim
are delivered in order. App Events Webhooks uses HTTP webhooks to send events to an endpoint.
• If an event is delivered successfully, then the endpoint responds with an HTTP 2xx status code that is interpreted
as a message acknowledgment
• If there is a failure, then the endpoint responds with an HTTP failure status code (such as 4xx or 5xx), that causes
the App Events Webhooks to retry delivery three times in rapid succession
• If these retries are still unsuccessful, App Events Webhooks waits for what is known as a back-off period before
attempting further retries. If the number of successive delivery failures exceeds a threshold,App Events
Webhooks automatically suspends the subscription, that places the subscription in an ERROR state.
• While the subscription is suspended, events are saved for later delivery up to the event retention period. An
administrator can resume a suspended (ERROR state) subscription using App Events Webhooks UI after the
problem with the downstream system has been corrected.

Related information

“Configuring App Events Webhooks” on page 37

Integration Gateway
Integration Gateway is a purpose-built service for running integration applications that bridge InsuranceSuite APIs
and third-party or custom applications. Traditionally, in InsuranceSuite implementations, integrations are coded in
Gosu that runs as part of InsuranceSuite.
Integration Gateway simplifies the integration development and management on Guidewire Cloud Platform. With
Integration Gateway, developers create integration microservices using Apache Camel's low-code Java DSL.
Apache Camel is the leading open-source integration framework which provides comprehensive support for both
legacy systems and modern services across a variety of patterns and protocols. Using Integration Gateway, events
can be delivered to a downstream system using any of the protocols that Apache Camel supports.
The Integration Gateway provides developers with the infrastructure to build, manage, and deploy integrations
written using a curated set of Apache Camel components. The integrations run microservices that are hosted by
Guidewire Cloud Platform outside of InsuranceSuite applications. An integration app microservice is implemented
as one or more Apache Camel routes written using Camel Java DSL. A route subscribes to one or more events as
specified in the route. The route filter, transforms, and delivers events to a downstream system using any of the
protocols that Apache Camel supports.

Introduction to App Events 11


Guidewire Cloud Platform 2022.09 App Events

To develop applications using the Integration Gateway, you do the following:


• Write integration logic
• Write mediation code to another system
• Discover events
• Discover APIs and generate clients

Related information

“Using Integration Gateway” on page 57

Comparison
The following table explains the differences between App Events Webhooks and Integration Gateway event delivery
mechanisms:

App Events Webhooks Integration Gateway


Configuration Metadata-based configuration, Integration microservice written using
configured with a web-based Apache Camel's low-code DSL.
administrator user interface.
Full claim graph? Yes Yes
Delivery protocol App Events Webhooks (JSON over HTTP) Any protocol supported by Apache
Camel
Payload structure JSON Claim graph with a fixed structure Claim graph structure can be customized
defined by integration views. and delivered in different formats (such
as JSON or XML). Graphs can be
manipulated and transformed with
Camel routes.
Authentication Supports OAuth2 Uses any auth protocol that is supported
by Apache Camel
When to use? • Publishing data to a downstream • When action needs to be triggered in
system that need to keep its data in an external system in response to an
sync with InsuranceSuite event occurring in ClaimCenter or
• Integrating with a flexible system PolicyCenter
that can expose a webhook that can • Publishing data to a system that does
process Guidewire standard claim not support webhooks or needs
and policy graphs claim or policy information in a
specific format

12 chapter 1: Introduction to App Events


Guidewire Cloud Platform 2022.09 App Events

Use case examples


Downstream systems need to be notified of business events occurring in PolicyCenter and ClaimCenter. The
following scenarios illustrate the most common integrations that can be implemented using App Events:
• PolicyCenter
◦ Keep a fraud scoring system up to date with the latest changes on a policy or account. A policy lifecycle events
occur in PolicyCenter and trigger sending policy or account snapshots to the fraud scoring system. The
outbound part of the integration is handled by App Events. The fraud system registers a receiving endpoint for
the events they are interested in. App Events delivers the events over HTTP.
◦ Send an SMS text message to a policyholder when a new policy is issued, for example IssuePeriod event.
This use case uses App Events with Integration Gateway. Integration Gateway would be needed because the
SMS system will have its own API for sending text messages. The SMS system would not know what to do
with an application event. Instead, an integration gateway route would subscribe to an event such as
IssuePeriod, then it would make a REST call to the SMS system to send the message.
◦ A billing system needs to know when a new policy is created or and existing policy is changes
• ClaimCenter
◦ A medical bill review system needs to know when injury claims and medical exposures are opened
◦ An auto physical damage system needs to know vehicle claims and incidents are opened or updated

App Event structure


In InsuranceSuite, an event is an abstract notification of a change in InsuranceSuite that might be interesting to an
external system. An event most often represents a user action to application data, or an API that changed application
data. Entity types defined with the <events> tag trigger an event if a user action or API adds, changes, or removes
data associated with an instance of the entity. Each event is identified by a String name.
App Events supports the Cloud Events specification (version 1.0) to deliver events from InsuranceSuite to external
systems. In terms of the specification, an event is a data record expressing an occurrence and its context. Events are
routed from an event producer (the source) to interested event consumers.
An event consists of context attributes and event data. The context attributes contain metadata about the event.
Tools and application code can use this information to identify the relationship of events to aspects of the system or
to other events.
The event data contain the entity graph snapshots. The graph structure is derived from the Cloud API Integration
Views. Each Integration View has a JSON schema definition that is used to serialize the corresponding entity.

When using App Events Webhooks to deliver events, App Events sends the context attributes in the HTTP request
headers, and the event data in the HTTP request body that is known as a payload. When using Integration Gateway
Introduction to App Events 13
Guidewire Cloud Platform 2022.09 App Events

to deliver events, App Events includes the context attributes in the message headers and the event data in the
message body.

Event context attributes


The event context attributes are based on the Cloud Events specification (version 1.0). For more information on this
specification, see https://cloudevents.io/ and https://github.com/cloudevents/spec/blob/v1.0/spec.md.
The Cloud Events specification classifies the context attributes into the following types:
• Required attributes
• Optional attributes
• Extension attributes
The specification well-defines some of the attributes and leaves the rest to interpretation by the event producer. The
following sections document the attributes that App Events uses.

Required attributes
The following attributes are required by the Cloud Events specification. Some of the following attributes are used in
ways unique to InsuranceSuite, such as type.
id
The universal unique identifier (UUID) of the event.
Example: 01234567-89ab-cdef-0123-456789abcdef
source
The source identifies the origin of the event. This is specified using Guidewire Resource Notation (GRN).
The GRN syntax is grn:version:app:insurer-code:insurer-project:supercluster:quadrant:planet-
class:planet:resource_id
Example: grn:v1:cc:acme:proj:northamerica:alpha1:dev:dev1:/deployment/andromeda
Note: According to the CloudEvents specification, the combination of id and source attributes is
a globally unique value.
specversion
The version of the CloudEvents specification in use.
Example: com.guidewire.ispc.PolicyChanged
type
The name of the InsuranceSuite event, qualified by com.guidewire.iscc.<EventName>. See “ClaimCenter list
of events” on page 25 and “PolicyCenter list of events” on page 27.
Examples:
ClaimCenter: com.guidewire.iscc.ClaimChanged, PolicyCenter: com.guidewire.ispc.PolicyChanged

Optional attributes
The following attributes are optional according to the CloudEvents specification. Some of the following attributes
are used in ways unique to InsuranceSuite, such as subject.
subject
Resource path of the event object within Cloud API. Null for event objects that do not have a resource path
defined in the InsuranceSuite Cloud API.
Examples:
ClaimCenter: /claim/v1/claims/cc:123, PolicyCenter: contacts[id='pc:1016']
time
Timestamp of events that occur in an InsuranceSuite transaction. Due to the way timestamps are generated in
InsuranceSuite, and due to the unreliable nature of computer clocks in general, do not rely on this attribute for
strict ordering of events in transactions.
14 chapter 1: Introduction to App Events
Guidewire Cloud Platform 2022.09 App Events

Note: This is the same timestamp used to populate the CreateTime and UpdateTime fields.
Example: 2011-12-03T10:15:30+01:00

Extension attributes
The following attributes are not part of the core CloudEvents specification but are either common extensions or
extensions that are unique to InsuranceSuite.
Note: All attributes are of type String unless otherwise noted in the description below.
language
Required. The language used to render the event data. Currently, events are only rendered in the InsuranceSuite
application's default language.
Example: en-US
objectid
Required. The ID of the event object.
Examples:
ClaimCenter: cc:317, PolicyCenter: pc:7
objecttype
Required. The name of the event object entity in the InsuranceSuite data model.
Examples:
ClaimCenter: Exposure, PolicyCenter: AccountContact
primaryeventcount
Required. Integer representing the number of events associated with the same primary object in the same
transaction.
Example: 8
primaryobjectid
Required. The ID of the primary object entity associated with the event object.
For ClaimCenter, this identifies the Claim. Example: cc:123
For PolicyCenter, this identifies the Policy. Example: pc:123
primaryobjecttype
The primary object entity.
For ClaimCenter, this identifies the Claim. Example: Claim
For PolicyCenter, this identifies the Policy, Account, PolicyPeriod, or Job. Example: Policy
traceabilityid
The traceability ID that is present in the InsuranceSuite transaction in which the event occurred.
Example: d6b73a4d-8402-470d-8594-b663789edf33
transactionid
Unique ID of the InsuranceSuite transaction in which the event occurred. In the base configuration, transactions
do not have IDs. Therefore, this is generated for use by application events to group events that occurred within
the same transaction.
Example: b08020d6-f06b-499c-862a-617d84aaca13

Event headers examples


Note: Attributes prefixed with ce- adhere to the CloudEvents specification.
• ClaimCenter:
The following example headers are for an ExposureChanged event.
content-length: 8669
ce-specversion: 1.0
ce-id: a921b37b-57bf-4033-b22c-bd95359431d0

Introduction to App Events 15


Guidewire Cloud Platform 2022.09 App Events

x-b3-sampled: 1
ce-time: 2021-02-04T21:27:04.656Z
gw-event-signature: vQ2yBEo6emvjZca8Q+hAUyYGnuOQIfFD2aRE5C+Jy/
hcgNunEdDqejP1g1x9yl8grndz4yYHLZqPJrmo1IAg6P4f8oQqMAoyH
+0yjgptJmvJTmTl9dDxWJ2bsJLW9puSjv2Rm07Raa90KjB7R7nlsgu968M4hAsMOF6qrNf58jmY+1ZM6OSJC7hv7QNRhn1Py+qha7l/
yXNUN00S1DUmYQ4TDfDzyXmJZGjb7fzYXez8ncnyj2+B4EFVdSOGPMy/VpnZ6roXhND
+pRiHIkBqWgXKcEPFG7jMx8IUfO8AXGcLx6Jo7XukUbm9y08pJ3Wk0dBTto6M7kEFpi8F6AvnUA==
ce-traceabilityid: bca664a7-f793-4aec-bb01-8c035cb085af
ce-type: com.guidewire.iscc.ExposureChanged
host: streamingapiendpoint-devconnect.internal.us-east-2.service.guidewire.net
content-type: application/json; charset=utf-8
ce-objecttype: Exposure
x-request-id: a5932fd0-1370-99ae-abb9-78925e93111f
x-envoy-internal: true
ce-transactionid: cd66aa9b-91ee-416d-aa4c-63389a959f33
ce-partitionkey: cc:90
x-forwarded-proto: https
ce-subject: /claim/v1/claims/cc:90/exposures/cc:11
ce-language: en-US
x-forwarded-for: 10.78.125.44
ce-primaryeventcount: 1
ce-source: grn:v1:cc:futurest:banffdemo:namerica:beta1:dev:demo:
ce-objectid: cc:11
x-b3-traceid: 2bdb5936b488376f0e1feb1043c5654e
x-b3-spanid: 0e1feb1043c5654e
ce-primaryobjecttype: Claim
accept-encoding: gzip
ce-primaryobjectid: cc:90
user-agent: okhttp/4.4.0

• PolicyCenter:
The following example headers are for a PolicyChanged event.
connection close
user-agent okhttp/4.4.0
accept-encoding gzip
host webhook.site
content-length 1099
content-type application/json; charset=utf-8
ce-graphobjectid pc:315
ce-graphobjecttype Policy
ce-updateuserid default_data:1
ce-time 2021-07-20T21:37:47.59Z
ce-specversion 1.0
ce-primaryobjectid pc:315
ce-primaryobjecttype Account
ce-transactionid 8d20cd24-b6f9-47f1-bb60-a944a57f8619
ce-version 1.1
ce-primaryeventcount 22
ce-traceabilityid 00298b87-7b55-4e28-a0c9-eee28e15a4db
ce-source grn:v1:pc:guidewire:gwinteg:namerica:rho9:dev:int:/deployment/andromeda
ce-id 9663b42f-a568-4a04-9dde-913024c136a3
ce-type com.guidewire.ispc.PolicyChanged
ce-objectid pc:315
ce-objecttype Policy
ce-language en-US
ce-subject
ce-worksetid DEFAULT
ce-partitionkey pc:315
gw-event-signature A+dEOPv4gPszs6foQD68igrep2fJpYld8ey1PkFR8QG

See also

• For a complete sample of an event payload generated by the Webhooks, refer to .

Event data
Event data is common across all InsuranceSuite events. The event data is a JSON serialization of the graph that is
associated with an event. The graph structure is derived from the Cloud API Integration Views. Each integration
view has a JSON schema definition which is used to serialize the corresponding entity.

16 chapter 1: Introduction to App Events


Guidewire Cloud Platform 2022.09 App Events

Each event is associated with at most one Integration View. If an event is associated with an Integration View, then
the event data is the result of rendering that Integration View's mapping on the object associated with the event.
Otherwise, the event has no event data. Fields that are empty or null are not present in the event data output.

ClaimCenter event data


In ClaimCenter, the claim graph is created by combining the serialized entities which constitute the claim. The claim
graph reflects a snapshot of the claim at the time the event occurred. The event data is a JSON serialization of the
claim graph. The claim graph includes data related to the claim including activities, exposures and incidents.
The following example shows the structure of an ExposureChanged event in ClaimCenter:
{
"claim": {
"v1": {
"claims": {
"cc:87": {
<Claim data>
},
"exposures": {
<Exposures data>
},
"contacts": {
<Contact data>
},
"vehicle-incidents": {
<Vehicle Incidents data>
},
"policy": {
<Policy data>
},
"reserves": {
<Reserves data>
},
"payments": {
<Payments data>
}
...

PolicyCenter event data


The PolicyCenter events are triggered by user actions that change the application data related to the Policy,
Account, Job, or PolicyPeriod entities. For example, the Policy graph contains information about the contract of
insurance, including the term, coverage, premiums, and deductible.
The following example shows headers and the event data of an AccountAdded event:
Payload headers:
connection close
user-agent okhttp/4.4.0
accept-encoding gzip
host webhook.site
content-length 2557
content-type application/json; charset=utf-8
ce-graphobjectid pc:314
ce-graphobjecttype Account
ce-updateuserid default_data:1
ce-time 2021-07-20T21:33:38.443Z
ce-specversion 1.0
ce-primaryobjectid pc:314
ce-primaryobjecttype Account
ce-transactionid 64393c60-aab6-42ab-8278-7e314c52bf74
ce-version 1.1
ce-primaryeventcount 23
ce-traceabilityid 05bbed70-3af0-4527-88fe-87a0fcf743dc
ce-source grn:v1:pc:guidewire:gwinteg:namerica:rho9:dev:int:/deployment/andromeda
ce-id c432f1ec-5377-4ee1-af0b-ec6956839389
ce-type com.guidewire.ispc.AccountAdded
ce-objectid pc:314
ce-objecttype Account
ce-language en-US
ce-subject

Introduction to App Events 17


Guidewire Cloud Platform 2022.09 App Events

ce-worksetid DEFAULT
ce-partitionkey pc:314
gw-event-signature bcEaJvrPZG8V5Ht1dRJ6WuS8A==

Payload data:
{
"preferredSettlementCurrency": {
"code": "usd",
"name": "USD"
},
"preferredCoverageCurrency": {
"code": "usd",
"name": "USD"
},
"frozen": false,
"accountNumber": "Walter Green 35",
"industryCode": {
"code": "0740",
"description": "Veterinarians / Veterinarian / Veterinary Services",
"id": "SIC:0740"
},
"organizationType": {
"code": "commonownership",
"name": "Common ownership"
},
"accountStatus": {
"code": "Active",
"name": "Active"
},
"producerCodes": [
{
"displayName": "100-002541",
"id": "pc:6"
}
],
"accountHolder": {
"displayName": "Gregory 0013 House 0013",
"id": "pc:1016"
},
"createdDate": "2021-07-20T21:33:38.443Z",
"primaryLocation": {
"displayName": "1: 0013 Bridgepointe Parkway, San Mateo, CA",
"id": "pc:1128"
},
"locations": [
{
"country": "US",
"nonSpecific": false,
"city": "San Mateo",
"CEDEX": "11",
"displayName": "1: 0013 Bridgepointe Parkway, San Mateo, CA",
"addressType": {
"code": "home",
"name": "Home"
},
"postalCode": "94404-0013",
"county": "San Mateo",
"active": true,
"phone": {
"displayName": "650-333-3333",
"number": "6503333333"
},
"addressLine1": "0013 Bridgepointe Parkway",
"addressLine2": "Floor 0013",
"locationNum": 1,
"addressLine3": "Developer Unit Habitation Cube #0013",
"state": {
"code": "CA",
"name": "California"
},
"id": "pc:1128",
"locationCode": "0000"
}
],
"id": "pc:314",
"numberOfContacts": "1",
"businessOperationsDescription": "business description",
"primaryLocale": {

18 chapter 1: Introduction to App Events


Guidewire Cloud Platform 2022.09 App Events

"code": "en_US",
"name": "United States (English)"
},
"contacts": [
{
"lastName": "House 0013",
"primaryPhoneType": {
"code": "mobile",
"name": "Mobile"
},
"licenseState": {
"code": "CA",
"name": "California"
},
"displayName": "Gregory 0013 House 0013",
"emailAddress1": "0013@guidewire.com",
"externalId": "pcext:1016",
"dateOfBirth": "1970-01-01",
"emailAddress2": "0013@hotmail.com",
"industryCode": {
"code": "0740",
"description": "Veterinarians / Veterinarian / Veterinary Services",
"id": "SIC:0740"
},
"primaryPhone": "650-333-3333",
"firstName": "Gregory 0013",
"taxId": "***-**-0013",
"licenseNumber": "B0000013",
"primaryAddress": {
"CEDEX": "11",
"addressLine1": "0013 Bridgepointe Parkway",
"addressLine2": "Floor 0013",
"addressLine3": "Developer Unit Habitation Cube #0013",
"city": "San Mateo",
"country": "US",
"county": "San Mateo",
"displayName": "0013 Bridgepointe Parkway, Floor 0013, Developer Unit Habitation Cube #0013, San
Mateo, CA 94404-0013",
"id": "pc:1127",
"postalCode": "94404-0013",
"state": {
"code": "CA",
"name": "California"
}
},
"id": "pc:1016",
"maritalStatus": {
"code": "S",
"name": "Single"
},
"cellPhone": {
"countryCode": {
"code": "US",
"name": "United States (1)"
},
"displayName": "650-333-3333",
"number": "6503333333"
},
"contactSubtype": "Person"
}
],
"primaryLanguage": {
"code": "en_US",
"name": "English (US)"
}
}

Policy graphs
The snapshots for App Events conform to the graph schemas that are defined in the IS applications. The graph
schemas define the structure and content of the event data, and snapshots are the actual runtime graph data. The
event payload contains event data that is defined by one of these four graph schemes:
1. The Account graph contains information about the primary insured, related contacts, location data, policies,
policy transactions, and producer codes.
Introduction to App Events 19
Guidewire Cloud Platform 2022.09 App Events

2. The Policy graph contains information that describes the contract of insurance, including the term, coverage,
premiums, and deductible. A policy also lists the people or properties being insured against loss. Policies are
defined by dates or periods of time. Most of the data in PolicyCenter is in the Policy graph.
3. The Job graph contains information about policy transactions, such as submissions and policy changes. The
Submission, Rewrite, and Renewal jobs (policy transactions) create new policy periods and new policy
terms.
4. The PolicyPeriod graph stores information for a specific revision of the contractual period of a policy. Each
PolicyPeriod entity is the root of a complex graph of subentities such as policy lines, vehicles, coverages,
and many others. These subentities have EffectiveDate and ExpirationDate fields which specify when the
entity becomes effective and when it expires. The EffectiveDate and ExpirationDate are bounded by the
contractual period (represented by the PeriodStart and PeriodEnd fields on the PolicyPeriod entity).
App Events for PolicyCenter tracks four different snapshot roots, Account, Job, Policy, and PolicyPeriod.

Snapshot formats
The PolicyCenter events adhere to one the following two formats:
1. Basic - The Account snapshot uses basic JSON format schema
2. Sliced - The sliced format captures the different versions, also known as slices that exist within a
PolicyPeriod. Slices represent a series of planned changes that take effect at different times over the course
of the policy term that is associated with the PolicyPeriod. Therefore, the PolicyPeriod snapshot keeps
track of all its slices, and consumers must decide which time they are interested in. The format for a sliced
snapshot is an object with a single property, $slices. The $slices value is an array of slices. The first slice
of a sliced snapshot does not have a start date and represents data that is related to the start of the associated
policy term. The last slice represents data that is related to the end of the associated policy term. After the first
slice, slices in the array are ordered by start date.
The schema of the data depends on the type of object the snapshot is associated with: Policy, Job, or
PolicyPeriod.
{
"$schema": "http://json-schema.org/draft/2019-09/schema#",
"type": "object",
"properties": {
"$slices": {
"type": "array",
"items": {
"$ref": "#/definitions/Slice"
}
}
},
"additionalProperties": false,
"required": [
"$slices"
],
"definitions": {
"Slice": {
"type": "object",
"properties": {
"start": {
"type": "string",
"format": "date-time"
},
"data": {
}
},
"additionalProperties": false,
"required": [
"data"
]
}
}
}

20 chapter 1: Introduction to App Events


Guidewire Cloud Platform 2022.09 App Events

Snapshot Roots
A root object for an event is the entity instance that is most associated with the event. This might be the primary
entity that is the top of a hierarchy of objects. The graphobjecttype property in the payload header defines the
graph type for the snapshot:
Headers:

bound:"true"
graphobjectid:"pc:785"
graphobjecttype:"Policy"
id:"47e91b84-3e4f-42b4-9c98-5e777fce3f9a"
language:"en-US"
objectid:"pc:895"
objecttype:"PolicyPeriod"
partitionkey:"pc:785"
primaryeventcount:"12"
primaryobjectid:"pc:785"
primaryobjecttype:"Account"
slicestart:"2021-07-01T07:01:00Z"
...

The App Events for policy snapshot contains one of the following four entities:
1. Account
The Account snapshot uses the basic snapshot format. An event belongs to an Account snapshot if its
graphobjecttype property in the payload header is Account.
Headers:
graphobjectid:"pc:904"
graphobjecttype:"Account"
id:"332de620-be97-4fb7-8748-870719068195"
language:"en-US"
objectid:"pc:904"
objecttype:"Account"
partitionkey:"pc:904"
primaryeventcount:"29"
primaryobjectid:"pc:904"
primaryobjecttype:"Account"
source:"grn:v1:pc:guidewire:gwinteg:namerica:rho9:dev:int:/deployment/andromeda"
specversion:"1.0"
subject:""
time:"2021-06-30T16:56:29.672Z"
traceabilityid:"4878ae6a-0316-49c4-930d-c4ab65253869"
transactionid:"15db4a11-375b-435e-b4d9-44f030c35a57"
type:"com.guidewire.ispc.AccountAdded"
updateuserid:"default_data:1"
version:"1.1"
worksetid:"DEFAULT"

2. PolicyPeriod
The PolicyPeriod snapshot uses the sliced snapshot format. An event belongs to a PolicyPeriod snapshot if
the event object is EffDated or is the PolicyPeriod itself. This can be determined from the format of the
objectid. The format of an EffDated objectid is <branchId>/<fixedId>. An event for a PolicyPeriod does
not have an EffDated objectid, but the objecttype is PolicyPeriod.
To synchronize the PolicyPeriod with the related Policy and Job snapshots, the Policy snapshot contains
the id of the selecting Job (if any), and the id of the selecting Policy (if any). Policy and Job snapshots do
not share PolicyPeriods, so these metadata attributes are single-valued, meaning a PolicyPeriod can be
selected by at most one Job and at most one Policy at a time.
accountid:"pc:1008"
accountref:"https://appeventsnapshots-devconnect.int.ccs.guidewire.net/api/v1/snapshots/Account:pc:
1008/7529e63b-7a7d-4a5f-978d-a76e5166d8f9"
bound:"true"
graphobjectid:"pc:1008"
graphobjecttype:"Policy"
id:"a863da2a-89c9-428d-a3ec-a13ef75276ff"

Introduction to App Events 21


Guidewire Cloud Platform 2022.09 App Events

jobid:"pc:1108"
jobref:"https://appeventsnapshots-devconnect.int.ccs.guidewire.net/api/v1/snapshots/Job:pc:
1108/7529e63b-7a7d-4a5f-978d-a76e5166d8f9"
language:"en-US"
objectid:"pc:1108"
objecttype:"PolicyPeriod"
partitionkey:"pc:1008"
policyid:"pc:1008"
policyref:"https://appeventsnapshots-devconnect.int.ccs.guidewire.net/api/v1/snapshots/Policy:pc:
1008/7529e63b-7a7d-4a5f-978d-a76e5166d8f9"
primaryeventcount:"24"
primaryobjectid:"pc:1008"
primaryobjecttype:"Account"
source:"grn:v1:pc:guidewire:gwinteg:namerica:rho9:dev:int:/deployment/andromeda"
specversion:"1.0"
subject:""
time:"2021-07-08T21:10:54.784Z"
traceabilityid:"adf9cd33-eb90-4f28-8e79-b7638fa2438f"
transactionid:"7529e63b-7a7d-4a5f-978d-a76e5166d8f9"
type:"com.guidewire.ispc.PolicyPeriodChanged"
updateuserid:"default_data:1"
version:"1.1"
worksetid:"DEFAULT"

3. Job
The Job snapshot use the sliced snapshot format. An event belongs to a Job snapshot if its graphobjecttype is
Job and it is not a PolicyPeriod event.
Headers:
graphobjectid:"pc:1005"
graphobjecttype:"Job"
id:"09d73af1-0407-451c-b7d7-060ba01a2efb"
language:"en-US"
objectid:"pc:1005"
objecttype:"Job"
partitionkey:"pc:904"
primaryeventcount:"29"
primaryobjectid:"pc:904"
primaryobjecttype:"Account"
source:"grn:v1:pc:guidewire:gwinteg:namerica:rho9:dev:int:/deployment/andromeda"
specversion:"1.0"
subject:""
time:"2021-06-30T16:56:29.672Z"
traceabilityid:"4878ae6a-0316-49c4-930d-c4ab65253869"
transactionid:"15db4a11-375b-435e-b4d9-44f030c35a57"
type:"com.guidewire.ispc.JobAdded"
updateuserid:"default_data:1"
version:"1.1"
worksetid:"DEFAULT"

4. Policy
As the Job snapshot, the Policy snapshots uses the sliced snapshot format. An event belongs to a Policy
snapshot if its graphobjecttype is Policy and it is not a PolicyPeriod event.
Headers:
graphobjectid:"pc:904"
graphobjecttype:"Policy"
id:"49ddadba-2078-47fb-a563-36c6b9ba2980"
language:"en-US"
objectid:"pc:904"
objecttype:"Policy"
partitionkey:"pc:904"
primaryeventcount:"29"
primaryobjectid:"pc:904"
primaryobjecttype:"Account"
source:"grn:v1:pc:guidewire:gwinteg:namerica:rho9:dev:int:/deployment/andromeda"
specversion:"1.0"
subject:""
time:"2021-06-30T16:56:29.672Z"
traceabilityid:"4878ae6a-0316-49c4-930d-c4ab65253869"
transactionid:"15db4a11-375b-435e-b4d9-44f030c35a57"
type:"com.guidewire.ispc.PolicyAdded"
updateuserid:"default_data:1"

22 chapter 1: Introduction to App Events


Guidewire Cloud Platform 2022.09 App Events

version:"1.1"
worksetid:"DEFAULT"

Event groups
Depending on the root object of the event instance, the app events are classified in three groups, primary events,
admin events and cross-primary events.
A root object for an event is the entity instance that is most associated with the event. This might be the primary
entity that is the top of a hierarchy of objects, or it might a small subobject.
A primary entity represents a type of high-level object that a Guidewire application uses to group and sort related
event messages. A primary object is a specific instance of a primary entity. Each Guidewire application specifies a
default primary entity type for the application, or no default primary entity type.

Primary events
A primary event is an event that is associated with a primary entity. A primary entity is used in InsuranceSuite to
partition messages into logical queues. This guarantees that the messages within the same queue are sent in order.
For example, in ClaimCenter, the primary entity is Claim, and in PolicyCenter, it is Account.

Non-primary events
A non-primary event is an event that is not associated with a primary entity. For example, the User is not associated
with a particular Claim or Account entity, but information related to a user is still useful to external systems.
There are two types of non-primary entities, admin and cross-primary :
1. Admin entities are entities that do not have relationship to any primary entities. An example of admin entity
is User.
2. Cross-primary entities are entities that have relationship to many primary entities. In ClaimCenter,
Catastrophe is an example of cross-primary entity, that is a grouping of many Claims related to the same
real-world event.
In the standard InsuranceSuite event messaging, the messages with non-primary events are also known as non-safe-
ordered messages. In this case, the messaging system assigns a special queue for these messages, and in each round,
processes all non-safe-ordered messages before processing safe-ordered messages. Non-safe-ordered messages
block the sending of safe-ordered messages until all non-safe-ordered messages are sent. By default, messaging does
not guarantee the send order of messages in the non-safe-ordered queue.
App Events aims to send consumers an ordered view of the events that happen to objects in InsuranceSuite.
Therefore, App Events uses two different sets of destinations for these messages to ensure that processing events for
admin entities does not impact processing events for entities with a primary object.

Event destinations
App Events configure the destinations by using separate properties for standard (primary and cross-primary), and
admin events.
An event destination is an abstraction that represents an external system such as a distinct remote system, or
different remote APIs. Each destination can specify a list of events that are of interest to it, along with some basic
configuration information. You use the Messaging editor in Guidewire Studio to set up and define message
destinations, including the destination ID, name, and the transport plugin to use with this destination.
By default, the App Events are posted to two different destinations:
1. A destination 500 that processes both primary events and cross-primary events
2. A destination 599 that processes admin events

Configuring event destinations


The destinations are configured in two files in the InsuranceSuite applications:
1. Defining destinations in events.yaml
Introduction to App Events 23
Guidewire Cloud Platform 2022.09 App Events

App Events use two properties to define the destinations in events.yaml:


• The destinationIds property handles all primary and cross-primary events
• The adminEventDestinationId property defines the destination for all admin events

version: '2.0'
apiConfigs:
- ext.claim.v1.claim_combined_ext-1.0
- ext.common.v1.common_ext-1.0
viewExcludedEventPatterns:
- .*Removed
entityViews:
"VehicleRU": "VehicleRiskUnit"
"LocationBasedRU": "LocationBasedRiskUnit"
crossPrimaryEntities:
- BulkInvoice
- Catastrophe
- ClaimAssociation
destinationIds:
- 500
adminEventDestinationId: 599

2. Configuring destinations in messaging-config.xml


The messaging-config.xml contains the configuration details about each destination.
To view the destination configurations, open Guidewire Studio. To open the Messaging editor, navigate to
configuration > config > Messaging, and then open the messaging-config.xml file. If you create your own
standard messaging destination, you must add attributes to the message destination in the Messaging editor
Text tab manually.
The following examples show the default definitions for the App Events destinations:
Note: To ensure that messages are sent in the order they were created, even for non-primary
events, App Events require the use of the
singlethreadandblockonnonsafeorderedmessages=”true” to be set for all application event
destinations.
a. Primary and cross-primary entity destination - 500:

<destination
disabled="${MESSAGING_APPEVENTS_DISABLED:true}"
id="500"
internal="true"
name="Java.MessageDestination.EventBus"
numsenderthreads="10"
pollinterval="1000"
singlethreadandblockonnonsafeorderedmessages="true"
transportplugin="EventMessageTransport"
useprimaryobjectidcolumn="true"
extendedprimaryobjectsearch="true">
<event
name=".*"/>
</destination>

b. Admin entity destination - 599:

<destination
disabled="${MESSAGING_APPEVENTS_DISABLED:true}"
id="599"
internal="true"
name="Java.MessageDestination.EventBusAdmin"
pollinterval="1000"
24 chapter 1: Introduction to App Events
Guidewire Cloud Platform 2022.09 App Events

singlethreadandblockonnonsafeorderedmessages="true"
transportplugin="EventMessageTransport"
extendedprimaryobjectsearch="true">
<event
name="AuthorityLimitProfile(Added|Changed|Removed)"/>
<event
name="Group(Added|Changed|Removed)"/>
<event
name="Organization(Added|Changed|Removed)"/>
<event
name="Role(Added|Changed|Removed)"/>
<event
name="User(Added|Changed|Removed)"/>
</destination>

Customers can change the destinations or define new destinations using the Guidewire Studio.
Note: To configure valid destinations for App Events, the destination IDs that you define in
events.yaml must match the destinations IDs in messaging-config.xml.
For information on how to use the Messaging Editor, see:
• Messaging editor
• ClaimCenter Integration Guide>Messaging
• PolicyCenter Integration Guide>Messaging

ClaimCenter list of events


The following table describes the application events that ClaimCenter raises. In this table, standard events refer to
the added, changed, and removed events for entities that generate events. For example, the entity would generate
events whenever code adds, changes, or removes entities of that type in the database.

Entity/Event Description
Activity Standard events for the Activity entity. ActivityChanged indicates that an
• ActivityAdded activity changed, including marking the activity completed or skipped.
• ActivityChanged
• ActivityRemoved
Claim • ClaimOpened -A non-draft claim is opened
• ClaimOpened • ClaimReopened - A claim is reopened
• ClaimReopened • ClaimClosed - A claim is closed
• ClaimClosed • ClaimAdded is fired when a claim is created in the ClaimCenter data
• ClaimAdded model. If a claim is created using the New Claim wizard, the claim will be
• ClaimChanged in draft state when this event fires and the event will only be delivered if
Subscribe to events on draft claims? is Yes.
• ClaimRemoved
• ClaimChanged is fired if there is a change to fields directly on the Claim
entity or if there is a change to an entity which belongs to the claim graph
but does not trigger its own events. In the latter case, these are known as
entities that are not event-aware. For example, the Incident entity is not
event-aware, and adding a new incident will trigger the ClaimChanged
event.
Note: An easy way to determine if an entity is event-aware is to check if
the entity has the EventAware delegate in the ClaimCenter Data
Dictionary. All delegate links are visible at the top of each entity in the
Data Dictionary.
For more information on event-aware entities, see the "<events>" topic
in the ClaimCenter Configuration Guide.

Introduction to App Events 25


Guidewire Cloud Platform 2022.09 App Events

Entity/Event Description
Document Standard events for documents. The DocumentAdded events trigger if a docu-
• DocumentAdded ment links to the claim file. Most implementations do not permit users to re-
• DocumentChanged move documents once added, so this event may never trigger.
• DocumentRemoved
Exposure Standard events for exposures.
• ExposureOpened • ExposureOpened - The Exposure is opened on a non-draft claim
• ExposureClosed • ExposureClosed - The Exposure is closed
• ExposureReopened • ExposureReopened - The exposure is reopened
• ExposureAdded
• ExposureChanged
• ExposureRemoved

PolicyCoverage Standard events for Coverage entities.


• CoverageAdded
• CoverageChanged
• CoverageRemoved
PropertyCoverage Standard events for Coverage entities.
• CoverageAdded
• CoverageChanged
• CoverageRemoved
VehicleCoverage Standard events for Coverage entities.
• CoverageAdded
• CoverageChanged
• CoverageRemoved
ServiceRequest Standard events for ServiceRequest entities.
• ServiceRequestAdded
• ServiceRequestChanged
• ServiceRequestRemoved
ServiceRequestDocumentInfo Standard events for ServiceRequestDocumentInfo entities.
• ServiceRequestDocumentInfoAdded
• ServiceRequestDocumentInfoChanged
• ServiceRequestDocumentInfoRemoved
ServiceRequestMessage Standard events for ServiceRequestMessage entities.
• ServiceRequestMessageAdded
• ServiceRequestMessageChanged
• ServiceRequestMessageRemoved
• ServiceRequestMessageToVendorRemoved

Financial transaction events


Check Standard events for the Check entity.
• CheckAdded
• CheckChanged
• CheckRemoved
• CheckStatusChanged The check.status property changed.
Reserve Standard events for reserves. Check for changes to the status property with-
• ReserveAdded in rules that catch the ReserveChanged event.
• ReserveChanged
• ReserveRemoved
• ReserveStatusChanged The reserve.status property changed.

26 chapter 1: Introduction to App Events


Guidewire Cloud Platform 2022.09 App Events

Entity/Event Description
Payment Standard events for Payment entities. Check for changes to the status prop-
• PaymentAdded erty within rules that catch the PaymentsChanged event.
• PaymentChanged
• PaymentRemoved
• PaymentStatusChanged The payment.status property changed, possibly but not necessarily because
of a change to the associated check.
Transaction Standard events for Transaction, which is the supertype of other transac-
• TransactionAdded tions.
• TransactionChanged
• TransactionRemoved
Contacts and address book events
ClaimContact Standard events for ClaimContact entities. The ClaimContactChanged event
• ClaimContactAdded is particularly important if you track changes to claim contacts within Claim-
• ClaimContactChanged Center. For example, if the Tax ID or phone number of a claimant changed,
you might want to update the associated claimant or exposure records in an
• ClaimContactRemoved
external system.
ClaimContactRole Standard events for ClaimContactRole entities.
• ClaimContactRoleAdded
• ClaimContactRoleChanged
• ClaimContactRoleRemoved

PolicyCenter list of events


The following table describes the application events that PolicyCenter raises. PolicyCenter generates events
associated with a specific entity instance as the root object for the event. PolicyCenter triggers events for many
objects if an entity is added, removed (or retired), or if a property changes on the object. For example, selecting a
different policy type on any policy generates a changed event on the policy.

PolicyPeriod entity
Fired to notify an external system that an associated action has happened in PolicyCenter. Typically, the following
transactions in PolicyCenter fire events for the PolicyPeriod entity:
• Audit
• Cancellation
• Issuance
• Policy change
• Reinstatement
• Renewal
• Rewrite
• Submission

Introduction to App Events 27


Guidewire Cloud Platform 2022.09 App Events

Entity/Event Description
FinalAudit PolicyCenter has two types of audit transactions. Audits are
not applicable to all lines of business and are different than
other policy transactions in one important way. They do not
change the main branch of the policy which is used to form
the policy contract. Audits are in addition to the policy and
hand off the main branch. The FinalAudit type covers the
entire policy term and is used to adjust the premium estimat-
ed on the policy contract to an actual premium for the cov-
ered term. A final audit is needed when the policy premium is
calculated using an exposure to risk that is not fixed such as
payroll or sales.
PremiumReport PremiumReports are a series of non-overlapping periodic
audits (such as monthly) used to obtain exposures and bill
premiums throughout a policy term based actual exposures.
CancelPeriod A cancellation policy transaction is used to completely void a
policy or reducing the time a policy is in effect. This
cancellation of coverage may be initiated either by the insurer
or the policyholder. A flat cancellation results in voiding the
policy and a midterm cancellation reduces the time a policy is
in effect.
IssuePeriod The issuance policy transaction is a special transaction that is
only required when a submission transaction is bound, to cre-
ate a policy, but is not issued (released for the printing of the
contract). This transaction is used to include/complete con-
tractual details such as the proper effective date, locations, or
tax ids so that the policy contract may be issued upon bind.
For many policies the issuance actions happen when the sub‐
mission transaction is bound and issued together.
ChangePeriod A policy change transaction is used to modify the policy in
some way. This includes the amendment of who or what is
covered or to make changes to coverages, policy locations,
and other properties. A policy change may or may not result
in a premium change and always results in the addition of
contractual forms to document the amendments.
ReinstatePeriod A reinstatement transaction is used to void a cancellation
transaction. A cancellation transaction reduced the coverage
period, and a reinstatement restores the coverage and policy
term dates to pre-cancellation settings without any lapse in
coverage dates.
RenewPeriod A renewal transaction creates a new policy to a new
contractual policy term based on the existing policy. Often the
policy number is retained with a term extension change (term
01 becomes term 02, for example). The renewal transaction
may include changes to coverage and covered objects or
persons. A new term premium is generated utilizing newer
rates. The result is a new policy contract bound and issued.
CreatePeriod This event is typically generated by the Submission and
RewriteNewAccount transactions. Even though, these
transactions occur in different situations, they both generate a
new policy branch. Policies start with a Submission or a
RewriteNewAccount and then are extended by new versions
of that policy term or new terms added at the end of the

28 chapter 1: Introduction to App Events


Guidewire Cloud Platform 2022.09 App Events

Entity/Event Description
policyterm. Both transactions are a starting point of a new
policy.
• Submission. A submission transaction is used to collect in-
formation from an insurance application to potentially set
create a new policy. This transaction is the first to identify
who may be insured, the subject of insurance and the cov-
erages requested. This information is evaluated and ends
in a Declined, Not Taken or new policy state. Declined and
Not Taken do not result in a policy. A Declined status is
when the insurance company rejects the insurance appli-
cation and does not offer coverage. A Not Taken status is
the end result when the application is rated and offered to
the prospective policyholder only to be rejected by that
applicant. A submission that is offered and then accepted
by the applicant is bound to become a policy. In most cas-
es the submission is bound, and the policy contract is also
immediately issued. When the submission is bound but
not issued an issuance transaction is required.
• RewriteNewAccount is a policy transaction that allows an
existing policy to be closed within an existing policyholder
account and reissued as a completely new policy in a
different policyholder account. This transaction results in a
new policy branch with no remaining relationship to the
old policy. One reason for this type of transaction is a
change of the businessowners.
RewritePeriod A rewrite transaction is used to create a new policy term from
an existing canceled policy term. A rewrite to the entire policy
term may be needed when significant changes are required
such as a correction of the primary named insured on the
policy contract or a correction not allowed in a policy change
transaction such as the policy effective date. When a policy is
canceled midterm the insurance company may generate a
rewrite transaction to reestablish coverage but with a gap in
coverage dates from the cancellation effective date and the
new term created by the rewrite. Whatever the reason the
rewrite transaction creates a new policy term and contract.

Introduction to App Events 29


Guidewire Cloud Platform 2022.09 App Events

30 chapter 1: Introduction to App Events


chapter 2

Getting started with App Events

App Events runs in the Guidewire Cloud Platform (GWCP). To use and configure App Events, there are a set of
prerequisites and setup steps that must be performed:
• “Initial provisioning” on page 31
• “Access groups” on page 31
• “Authentication” on page 32

Initial provisioning
Access to a GWCP environment is required. Request access to features from the Guidewire Cloud Operations
(CCO) team, using the following “Guidewire Community request templates” on page 133. When requesting access,
ensure the following has been provisioned for your tenant:
• ClaimCenter version 2022.09.0 (Flaine) or later
• PolicyCenter version 2022.09.0 (Flaine) or later
• Integration Gateway 1.1.0 or later
• The App Events feature (includes access to Webhooks)

Related information
“Access groups” on page 31

Access groups
When setting up your Identity Provider (IDP) (such as Active Directory), create the following groups that are
designated for users accessing the Webhooks feature:
Insurer developers
gwa.any_planet_class.subscriptions.developer
Insurer system administrators
gwa.any_planet_class.subscriptions.admin
Permissions

Getting started with App Events 31


Guidewire Cloud Platform 2022.09 App Events

Insurer developers and insurer system administrators have different permissions when creating and managing
subscriptions:
• Insurer developers:
◦ Create and edit development and production Endpoints and link them to Subscriptions
◦ Enable development Endpoints for testing
◦ Cannot enable or disable production Endpoints
◦ Cannot modify Subscriptions or Endpoints that are enabled in production
• Insurer system administrators:
◦ Perform the same actions as insurer developers
◦ Enable and disable production Endpoints
◦ Manage the domain patterns allowed for Endpoints

Related information
“Authentication” on page 32

Authentication
To protect against unauthorized messages, App Events Webhooks recipients must be able to authenticate the sender
(Guidewire) of a particular event message. It is also desirable to ensure that the message was not tampered with
during transit. Webhooks support two methods for security verification:
• “Payload signature verification” on page 32
• “OAuth authentication” on page 35

Payload signature verification


To ensure events are transmitted securely to external endpoints, each event request includes a content signature.
Event consumers (the endpoints) use the signature to verify the integrity of the content and to ensure the event was
sent from Guidewire. Verification is performed using the RSA signature verification process.

About the Guidewire signature


The Guidewire authorization signature is included with messages sent through Webhooks in the gw-event-signature
header. Before each message is sent, the "ce-" headers and message body are concatenated together and hashed
using the SHA256 algorithm. Then the result is signed using RSA with Guidewire private key and is Base64-
encoded. The resulting signature protects against tempering with the headers and the body.
The string that is signed consists of all payload header name:value pairs followed by a space and a body string. The
following expression illustrates the process and resulting header, including the example components of the string to
be signed:

gw-event-signature:Base64(RSA-SHA256(“ce-header1:value1 ce-header2:value2 {“cc” : {“Id”:1,


“claim“:“cc:123”}}”))

where:
• gw-event-signature is the HTTP header that contains the Guidewire signature
• Base64 is the encoding scheme
• RSA-SHA256 - SHA256 is the method that is used to calculate a unique hash of the input data. The hash is then
encrypted with a private key using the RSA algorithm.
• ce-header1:value1 ce-header2:value2 represents the string of the concatenated header name: value pairs
• {“cc” : {“Id”:1, “claim“:“cc:123”}} represents the payload body
32 chapter 2: Getting started with App Events
Guidewire Cloud Platform 2022.09 App Events

Note:
• Only headers that are prefixed with ce- are included
• All header names are converted to lowercase
• Headers are sorted alphabetically
• Header names and values are separated by ": "
• Headers are separated by a space
• Any leading or trailing whitespace is trimmed from values
• The headers and body are separated by a space
• All header names are unique. You do not have to handle multiple header values with the same header
name.
• In cases when the request does not have a body, there is only a space after the last header value

Verifying the payload signature


To verify the event request, you must write code to verify the payload signature. Using the event payload headers
and body information, you must compute a hash and check it against the signed hash that Guidewire provides in the
gw-event-signature header. For that reason, you must compute the hash by using the same method that Guidewire
uses.
The following diagram illustrates the signature calculation process.

1. Obtain the value of gw-event-signature from the event payload header. This is found in the JSON event
output in the external endpoint. The following is an example signature:
gw-event-signature: iPihG/gPaNr7Hf2Or87Anx1r1dJ3nkA+ZMP9sGy3uoKsBuDCCjK8zeCIwptQTUJOFnSqJUy/
HCiUDwjSdFRe8mGTqgISkv4faenzISXMi6vcMFAFm4aCPzmAJaOE7JtHfjtA9wU21JQoV5L1it7mO5z0BBrp9a5az0vCWcebJb
+VGDqsOvHLvQMc/eSb1RARLP/A0fKkvmBLct6Qo608MVUEUtPArndC3bL3MwETrWT833HeOVzwW37KUNpxKy32o4NEgTT62Uw8QpXS
+E2gsTQCajNHFjcARMGSxKvdAthJxbyaahxw3CfBWa45tgCXgN8LpGFIX9TMIxSreAcfpg==

2. Obtain the Webhooks public key using the URL that corresponds to the environment you are working in.
The Webhooks API provides a REST endpoint Get /api/v1/security/signaturekeys/default that returns the
public keys. To construct the access URL, append the base URL for the cloud environment you are working in
to the endpoint relative URL:
<base-url>/api/v1/security/signaturekeys/default

Guidewire supports key rotation that allows minimizing the public key exposure to attackers. Key rotation is
when you retire an encryption key and replace that old key by generating a new cryptographic key. Rotating
keys on a regular basis help meet industry standards and cryptographic best practices.
Developers need to validate the payload signature by checking against both keys. The following is an example
of the response:
Getting started with App Events 33
Guidewire Cloud Platform 2022.09 App Events

pubKey: |-
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0wx5cvSoS3EduO61/92O
YDEhBcua7SmXBFbNlQpMULHXEF5BVb5526WmjMlrKCq1JKJ9BgvPBobd8OEww+o7
KkMTiUjSf6d4bjCpHGbduPR1FQXv8XrkG+Qr7RJvbUtOcJ4Q0yoIuYX1jdYhmOtR
g1mFBpj+UbYwIa9nE4AIhyLwUVTiQJRpe/P8hTaHQx/K7GEv4kXaj43LcVuGwqh7
qQxuomycrGZToSU+XjtUHd2+isQMLnXXlrceOZo3NFhFf1mx+Sx0OwIaYxMvGAHW
reOxMIdF4FXwYyy5CPXdP06wBZ0+1kCXIk61hkA//7B2y5eqwmyou/Xt+S6JvTHl
OQIDAQAB
-----END PUBLIC KEY-----
prev-pubKey: |-
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0wx5cvSoS3EduO61/92O
YDEhBcua7SmXBFbNlQpMULHXEF5BVb5526WmjMlrKCq1JKJ9BgvPBobd8OEww+o7
KkMTiUjSf6d4bjCpHGbduPR1FQXv8XrkG+Qr7RJvbUtOcJ4Q0yoIuYX1jdYhmOtR
g1mFBpj+UbYwIa9nE4AIhyLwUVTiQJRpe/P8hTaHQx/K7GEv4kXaj43LcVuGwqh7
qQxuomycrGZToSU+XjtUHd2+isQMLnXXlrceOZo3NFhFf1mx+Sx0OwIaYxMvGAHW
reOxMIdF4FXwYyy5CPXdP06wBZ0+1kCXIk61hkA//7B2y5eqwmyou/Xt+S6JvTHl
OQIDAQAB
-----END PUBLIC KEY-----

3. Prepare the concatenated string to sign.


4. Calculate a SHA256 hash of the string to sign
5. Decode the signature value in the gw-event-signature header from Base64 format. The message delivers the
signature encoded as Base64. Before you compare the signature value with the signature you have calculated,
make sure that you decode the signature value from Base64 so that you compare the values using the same
format.
6. Verify that the calculated signature matches the signature in the gw-event-signature header
The following Java program demonstrates how to verify the Guidewire payload signature using Java Security API.
The program takes the public keys, the request headers, the payload body, and Guidewire signature as input
parameters. Then the program calculates an expected signature for each public key, compares that signature to the
Guidewire signature, and returns true or false depending on the result from the comparison:
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;
import java.util.Base64;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;

@Slf4j
public final class CryptoUtil {
private static final String SIG_KEY_ENDPOINT = "https://appevents-delivery.us-east-2.service.guidewire.net/api/v1/
security/signaturekeys/default";

public static boolean verifySignature( Map<String, String> headers,


String payload, String headersAndPayloadSignature )
throws IOException, ParseException {

return JWKSet.load( new URL(SIG_KEY_ENDPOINT)).getKeys().stream()


.anyMatch(jwk -> verifyContent(jwk, headers, payload, headersAndPayloadSignature));
}

public static boolean verifyContent(JWK publicJWK, Map<String,


String> headers, String payload,
String headersAndPayloadSignature) {

try {
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initVerify(publicJWK.toRSAKey().toPublicKey());
final var headersContent = generateHeadersContent(headers);
final var body = payload.getBytes(StandardCharsets.UTF_8);

34 chapter 2: Getting started with App Events


Guidewire Cloud Platform 2022.09 App Events

signature.update(ByteBuffer.allocate(headersContent.length + body.length)
.put(headersContent)
.put(body)
.array());
return signature.verify(Base64.getDecoder().decode(headersAndPayloadSignature));
} catch(Exception e) {
log.error("Unable to verify content", e);
throw new RuntimeException(e);
}
}

protected static byte[] generateHeadersContent(Map<String, String> headers) {


return new TreeMap<>(headers.entrySet().stream()
.filter(header -> header.getKey().toLowerCase().startsWith("ce-"))
.collect(Collectors.toUnmodifiableMap(entry -> entry.getKey().toLowerCase(), entry ->
entry.getValue().trim())))
.entrySet().stream()
.collect(StringBuilder::new, (signatureBuilder, header) ->
signatureBuilder.append(header.getKey())
.append(": ")
.append(header.getValue())
.append(" "),
StringBuilder::append)
.toString()
.getBytes(StandardCharsets.UTF_8);
}
}

OAuth authentication
Webhooks support authentication of requests using OAuth 2.0 protocol with the Client Credentials grant type. For
that purpose, an OAuth 2.0 server issues an access token that is included in the Authorization header with each
request. The recipient must decode and verify this token.
Normally, the auth token is attached to an HTTPS request to verify the identity of the caller so that they can access
resources. In our case, we are verifying the identity of the caller only to determine whether to ignore the message
The authentication process includes the following steps:
1. A Webhooks user defines an Auth configuration using the UI and associates the configuration with an event
consumer (an Endpoint)
2. The user creates a Subscription specifying the events to subscribe and the delivery address (the Endpoint) that
consumes the events
3. Using the Auth configuration associated with the Endpoint, in the background, a Guidewire service makes a
direct connection to acquire and periodically refresh a security token
4. When events are delivered to that Endpoint, the POST request includes the current token in an Authorization
header
5. The recipient validates the token to ensure that it is a valid request. For example, they can use the standard
security framework Nimbus JOSE + JWT that checks the JWT token signature and fields such as Issuer,
Audience, Expiration Time.
For information on creating Auth configurations, see “Configure auth” on page 48.

Getting started with App Events 35


Guidewire Cloud Platform 2022.09 App Events

36 chapter 2: Getting started with App Events


chapter 3

Configuring App Events Webhooks

App Events Webhooks delivers events to an endpoint using HTTP webhooks. App Events Webhooks publishes
events and the associated graph snapshot (including related entities) in a standard JSON format based on Guidewire
Cloud APIs’ integration views.
Access the App Events Webhooks
To use App Events Webhooks, you must be provisioned for the App Events feature and complete the steps in the
“Getting started with App Events” on page 31 section.
1. In a web browser, login to Guidewire Cloud.

At logging time, Guidewire Cloud Home assigns a tenant, star system, and optionally planet to your session.
You have an option to Switch Context, and select a workset that includes a different start system or planet that
are available to you. For more information, see Getting started with Guidewire Cloud Home guide.
2. In Guidewire Cloud, click App Events Webhooks. The App Events Webhooks appears.

Configuring App Events Webhooks 37


Guidewire Cloud Platform 2022.09 App Events

The UI shows a list of the available subscriptions for the start system that you selected in Guidewire Home.
For example, the image above displays the subscriptions for gwinteg start system.
App Events Webhooks allows you to configure and manage event subscriptions, define endpoints, and set the
authentication for the endpoints. The user interface includes four tabs:
1. Subscriptions - Specifies what events to subscribe to. Optionally, a JMESPath filter can also be specified to
restrict claim graph elements. Subscriptions can be managed by changing the state of the subscription to either
active, paused, or inactive.
2. Endpoints - Specify the delivery address URL to publish the event to, the type of the endpoint, dev or prod,
and authentication that is associated with it.
3. Auth - Configures an authentication that can be assigned to an endpoint
4. Allowed Domains - Specifies the allowed domain patterns for the endpoint URLs
The typical configuration procedure follows this steps:
1. Define subscriptions
2. Define the endpoints for subscriptions in development and production environments
3. Define authentication for the endpoints in development and production environments
4. Specify the allowed domains
Using the UI, you can define endpoints, and auth at the time they define a subscription and an endpoint respectively.
However, multiple subscriptions can use the same endpoint. To streamline the process, you can configure the
possible endpoints before defining the subscriptions. This allows developers to select the desired endpoint during the
subscription creation.
Similarly, the same auth can be used for multiple endpoints. Defining the auth in advance, allows the developers to
select the auth during the endpoint definition.

Related information
“Configure a subscription” on page 38
“Configure an endpoint” on page 45
“Configure auth” on page 48

Related information
“Configure allowed domains” on page 50

Configure a subscription
Before you begin
Ensure you have the necessary prerequisites as outlined in “Getting started with App Events” on page 31.
38 chapter 3: Configuring App Events Webhooks
Guidewire Cloud Platform 2022.09 App Events

About this task


A subscription specifies what events to subscribe to and the delivery address URL to publish the event to (the
endpoint). Optionally, a JMESPath filter can also be specified to restrict claim graph elements. Subscriptions can be
managed by changing the state of the subscription to either active, paused, or inactive.

Click the icons on the Subscriptions screen to perform the following actions:

Manage a subscription. Shows the edit and delete menu entries.

Sort the subscription list by column.

Edit a subscription.

Delete a subscription.

Displays the endpoints the subscription is linked to.

Displays information messages.

Displays warning messages.

Procedure
1. In App Events Webhooks, click Subscriptions.
2. Click Add New.
The Add a New Subscription screen appears.

Configuring App Events Webhooks 39


Guidewire Cloud Platform 2022.09 App Events

3. In Add a New Subscription, provide the following information:


Subscription Name
Unique name or title of your subscription. Special characters are not allowed.
Star System
Displays the project name.
Development Planet(s)
Select one or more planets from the drop-down list. The list displays the development planets that are in
the specified star system.
Production Planet(s)
Select one or more planets from the drop-down list. The list displays the production planets that are in
the specified star system.
App
Select ClaimCenter or PolicyCenter.
App Events Webhooks verifies that the selected InsuranceSuite app has the App Events destination
enabled and running. If the verification fails, a warning icon appears next to the App text box.
Troubleshoot tip: Login to the InsuranceSuite app and go to Administration->Monitoring->Message
Queues to verify the App Events destination is present in the Message Queues. Resume the App Events if
it is suspended.
Event Name(s)
Select one or more events from the drop-down list. You may start typing the name of an entity (such as
Exposure, or Account) to filter the list to events for that entity. The event list displays event and the
entity that generates the event in brackets.

40 chapter 3: Configuring App Events Webhooks


Guidewire Cloud Platform 2022.09 App Events

Examples:
• ClaimCenter:
The ClaimOpened event that belongs to the Claim entity appears as ClaimOpened(Claim). For a list
of all ClaimCenter events supported by App Events Webhooks, see “ClaimCenter list of events” on
page 25.
Note: Some events are listed without an associated entity. Examples of such events are
the ClaimContactRoleAdded, ClaimContactRoleChanged, and
ClaimContactRoleRemoved events.
These events do not have graph schemas in the Cloud API integration views. There is
no endpoint in the Cloud API that allows you to access the ClaimContactRole entity.
Instead, ClaimContactRole and its events are inlined in the schema for ClaimContact.
• PolicyCenter:
The IssueSubmission event that belongs to the PolicyPeriod entity appears as
IssueSubmission(PolicyPeriod). For a list of all PolicyCenter events supported by App Events
Webhooks, see “PolicyCenter list of events” on page 27.
Show recommended events only?
Select this option if you want to see only the recommended events in the drop-down box.
InsuranceSuite applications generate internal events that consumers are not interested in. The purpose of
this option is to exclude these events from the drop-down list.
Note: If App Events Webhooks cannot retrieve the event status from the selected
InsuranceSuite app, the drop-down list displays only the recommended events.
Publish all events?
Select Yes if you want to subscribe to all events.
Subscribe to events for draft claims?
This entry appears only when selecting ClaimCenter as App. Select Yes if you want to subscribe to claim
draft events.
Subscribe to events for unbound changes?
This entry appears only when selecting PolicyCenter as App. Select Yes if you want to subscribe to
events on unbound policy changes events.
Development Endpoint
Specify a development endpoint URL. This is the URL of the system that consumes application event
payloads.
Defines the development endpoint for this subscription. Select an endpoint option from the drop-down
list. To add a new endpoint, select Add New Endpoint and add the new Endpoint Name, URL, and Auth in
the form that appears. To cancel the Add New Endpoint definition, select another endpoint option from
the drop-down list.
Production Endpoint
Defines the production endpoint for this subscription. Select an endpoint option from the drop-down list.
To add a new endpoint, select Add New Endpoint and add the new Endpoint Name, URL, and Auth in the
form that appears. To cancel the Add New Endpoint definition, select another endpoint option from the
drop-down list.
JMESPath Payload Filter
Specify a JMESPath expression. This expression is used to filter data to include in the JSON payload.
See “Filtering with JMESPath” on page 42.
Click the buttons to add the following expressions to the JMESPath Payload Filter:
No Payload
Sends only the event headers without the event payload to the endpoint.
All Fields
Sends the entire payload without filtering events.
Refer to “Terminology” on page 8 for further definitions of some of the fields in the screen.
Configuring App Events Webhooks 41
Guidewire Cloud Platform 2022.09 App Events

4. Click Create to save the new subscription.

Related information
“Configure an endpoint” on page 45
“Configure auth” on page 48

Related information
“Configure allowed domains” on page 50

Filtering with JMESPath


The entity graph snapshot can be filtered using JMESPath (a JSON query language) to include only the fields
necessary for an integration. This is done by specifying a JMESPath payload filter in the subscription definition. The
purpose of this filter is to specify data elements to include in the event subscription, not specify data to exclude.
The following examples show how the Guidewire Cloud event data can be filtered with JMESPath. The
fundamentals of JMESPath are not covered here. Many tutorials and resources for learning JMESPath are available
online at https://jmespath.org/.
Note: Do not use JMESPath expressions to reorganize elements in the JSON claim graph or to rename
elements. This behavior may not be supported in a future release of App Events.

ClaimCenter examples
1. Retrieve commonly used fields from the Claim path in payload
This example uses the following JMESPath expression:
{
claimNumber:claimNumber,
policyNumber:policyNumber,
insured:insured.displayName,
lobCode:lobCode.code,
lossCause:lossCause.code,
lossDate:lossDate,
state:state.code,
assignedUser:assignedUser.displayName,
reportedDate:reportedDate,
assignedGroup:assignedGroup.displayName,
exposures:exposures[].{
type:type.code,
coverageSubtype:coverageSubtype.code,
primaryCoverage:primaryCoverage.code,
vehicleIncident:vehicleIncident.displayName
},
vehicleIncidents:vehicleIncidents[].{
driver:driver.displayName,
vehicle:vehicle.displayName,
damageDescription:damageDescription
}
}

The result:
{
"claimNumber": "000-00-000813",
"policyNumber": "P1637277564490",
"insured": "Fred Jones1637277564496",
"lobCode": "PersonalAutoLine",
"lossCause": "vehcollision",
"lossDate": "2021-11-18T08:00:00.000Z",
"state": "open",
"assignedUser": null,
"reportedDate": "2021-11-18T08:00:00.000Z",
"assignedGroup": null,
"exposures": null,
"vehicleIncidents": [
{
"driver": "Fred Jones1637277564496",
"vehicle": "2000 Honda Civic (VL1637277564534 / California)",

42 chapter 3: Configuring App Events Webhooks


Guidewire Cloud Platform 2022.09 App Events

"damageDescription": "Description 1637277564533"


}
]
}

2. Retrieve fields for Medical Payment Exposures


This example uses the following JMESPath expression:
{
claimNumber:claimNumber,
insured:insured.displayName,
lobCode:lobCode.code,
state:state.code,
exposures:exposures[?type.code=='MedPay'].{
type:type.code,
jurisdiction:jurisdiction.code,
primaryCoverage:primaryCoverage.code,
coverageSubtype:coverageSubtype.code,
state:state.code,
lossParty:lossParty.code,
injuryIncident:injuryIncident.displayName,
segment:segment.code,
tier:tier.code
}
}

The result:
{
"claimNumber": "000-00-000069",
"insured": "Ray Newton",
"lobCode": "PersonalAutoLine",
"state": "open",
"exposures": [
{
"type": "VehicleDamage",
"jurisdiction": "CA",
"primaryCoverage": "PACollisionCov",
"coverageSubtype": "PACollisionCov",
"state": "open",
"lossParty": "insured",
"injuryIncident": null,
"segment": "auto_mid",
"tier": "1p_pd_low"
},
{
"type": "MedPay",
"jurisdiction": "CA",
"primaryCoverage": "PAMedPayCov",
"coverageSubtype": "PAMedPayCov",
"state": "open",
"lossParty": "third_party",
"injuryIncident": null,
"segment": "auto_mid",
"tier": "3p_med_low"
}
]
}

PolicyCenter examples
1. Retrieve commonly used fields from the PolicyPeriod path in payload
This example uses the following JMESPath expression:
{slices:"$slices"[].data.{
coverages:lines.*.keys(coverages),
account:account.displayName,
policyNumber:policyNumber,
baseState:baseState.code,
periodStart:periodStart,
periodEnd:periodEnd,
sliceDate:sliceDate,
jobEffectiveDate:jobEffectiveDate,
jobStatus:jobStatus.code,
product:product.id,
totalCost:totalCost,

Configuring App Events Webhooks 43


Guidewire Cloud Platform 2022.09 App Events

totalPremium:totalPremium
}}

The result:
{
"slices": [
{
"coverages": [
[
"PAUMPDCov",
"PAUMBICov",
"PALiabilityCov",
"PAMedPayCov",
"PALimitedMexicoCov"
]
],
"account": null,
"policyNumber": "4067649065",
"baseState": "CA",
"periodStart": "2021-11-18T08:01:00.000Z",
"periodEnd": "2022-05-18T07:01:00.000Z",
"sliceDate": "2021-11-18T08:01:00.000Z",
"jobEffectiveDate": "2021-11-18T08:01:00.000Z",
"jobStatus": "Bound",
"product": "PersonalAuto",
"totalCost": {
"amount": "702.00",
"currency": "usd"
},
"totalPremium": {
"amount": "655.00",
"currency": "usd"
}
}
]
}

2. Retrieve fields from the Account path in the payload


This example uses the following JMESPath expression:
{
accountNumber:accountNumber,
accountHolder:accountHolder.displayName,
accountStatus:accountStatus.code,
frozen:frozen,
primaryLocation:primaryLocation.displayName,
businessOperationsDescription:businessOperationsDescription,
producerCodes:producerCodes[].displayName,
industryCode:industryCode.code
}

The result:
{
"accountNumber": "Joe Hiller 2",
"accountHolder": null,
"accountStatus": "Active",
"frozen": false,
"primaryLocation": null,
"businessOperationsDescription": "business description",
"producerCodes": [],
"industryCode": "0740"
}

3. Retrieve fields from the Job path in the payload


This example uses the following JMESPath expression:
{slices:"$slices"[].data.{
jobType:jobType.code,
jobNumber:jobNumber,
account:account.displayName,
product:product.displayName,
jobStatus:jobStatus.code,
jobEffectiveDate:jobEffectiveDate,
termType:termType.code,

44 chapter 3: Configuring App Events Webhooks


Guidewire Cloud Platform 2022.09 App Events

primaryInsured:primaryInsured.displayName,
producerCode:producerCode.displayName,
quoteType:quoteType.code,
baseState:baseState.code,
primaryLocation:primaryLocation.displayName,
organization:organization.displayName,
periodStart:periodStart,
periodEnd:periodEnd
}}

The result:
{
"slices": [
{
"jobType": "Submission",
"jobNumber": "0006089903",
"account": null,
"product": "Workers' Compensation",
"jobStatus": "Bound",
"jobEffectiveDate": "2021-11-18T08:01:00.000Z",
"termType": "Annual",
"primaryInsured": null,
"producerCode": null,
"quoteType": "Full",
"baseState": "CA",
"primaryLocation": null,
"organization": null,
"periodStart": "2021-11-18T08:01:00.000Z",
"periodEnd": "2022-11-18T08:01:00.000Z"
}
]
}

See also
• JMESPath Tutorial: https://jmespath.org/tutorial.html
• JMESPath Examples: https://jmespath.org/examples.html

Configure an endpoint
App Events Webhooks delivers event payloads to registered HTTP endpoints. Using Endpoints UI, you can define
and manage endpoints for events subscriptions in your project.

About this task


The following procedure describes accessing Endpoints from the App Events Webhooks navigation bar.
Alternatively, you can define endpoints at the time you define a subscription.

Procedure
1. In App Events Webhooks, click Endpoints on the navigation bar.
The Endpoints screen appears:

Configuring App Events Webhooks 45


Guidewire Cloud Platform 2022.09 App Events

2. Click Add New.


The Add a New Endpoint dialog appears.

3. In Add a New Endpoint, enter the following:


a. In Endpoint Name, enter the name for your subscription. Do not use special characters in the name.
b. In URL, enter the URL of the endpoint where the event payload will be delivered.
Note: The URL must use the https: protocol and be in the allowed domain list. For
information on adding a domain to the allowed domain list, see “Configure allowed
domains” on page 50.
c. Select the type of the endpoint, Development or Production.
d. Select an Auth configuration to associate with the endpoint. Click Add New Auth to define a new
authentication. For details on defining Auth, see“Configure auth” on page 48.
e. Click Add.

Related information

“Configure a subscription” on page 38


“Configure auth” on page 48

Related information

“Configure allowed domains” on page 50


46 chapter 3: Configuring App Events Webhooks
Guidewire Cloud Platform 2022.09 App Events

Manage an endpoint
To manage the endpoints in your project, click at the right end of the selected endpoint in the list:

Change the endpoint state


The following are the endpoints states:
ACTIVE
Endpoint is enabled.
ERROR
A endpoint is automatically set to a suspended (error) state when all retries were unsuccessful due to an issue
with the endpoint system. Events that are waiting to be delivered are stored and queued for seven days. Once
the issue is resolved, set the endpoint status to ACTIVE to resume delivery of events in the queue.
INACTIVE
Endpoint is disabled. All events waiting to be delivered are discarded. When an inactive endpoint status is set
to ACTIVE, only new events are delivered.
PAUSED
Same as ERROR state, except the PAUSED state can only be set manually by a user in the Endpoints
administration page. To resume delivery of events, set the endpoint status to ACTIVE.
The set of actions that appear in the Actions menu depends on the current state of the selected endpoint. Using the
UI, you can perform the following actions:
Reactivate
Sets the endpoint to ACTIVE state.
Pause
Pauses the events delivery to this endpoint and sets the endpoint state to PAUSED.
Deactivate
Sets the endpoint to INACTIVE state.

Edit an endpoint
When editing an endpoint, you can update the Endpoint Name, the URL, and the Auth properties only.

Configuring App Events Webhooks 47


Guidewire Cloud Platform 2022.09 App Events

Note: You cannot change the Type, and cannot associate a production endpoint to a subscription in
development environment, or a development endpoint to a production subscription.

Delete an endpoint

Click to delete an endpoint. You can only delete endpoints that are not linked to subscriptions. To delete a
linked endpoint, unlink it first from all subscriptions that are using it.

Related information
“Configure a subscription” on page 38
“Configure an endpoint” on page 45
“Configure auth” on page 48

Related information
“Configure allowed domains” on page 50

Configure auth
Configuring Auth allows application events recipients to verify that a request containing the event payload is not
compromised and originated from Guidewire.

About this task


You use App Events Webhooks to define the credential configurations and choose the environment class,
Development or Production, that they are applicable to.
The Auth Configurations page lists the defined auth configurations showing the auth name, Authorization URL,
Type, Scopes, and the date when the auth was last updated. You can edit or delete a configuration by clicking

and links in the menu that is shown at the end of each row in the list.
The following procedure describes how to create an auth configuration by accessing the Auth tab from the App
Events Webhooks navigation bar. Alternatively, you can define auth at the time you define a subscription or an
endpoint.

Procedure
1. In App Events Webhooks, click Auth from the top navigation bar. The Auth Configurations page appears.
48 chapter 3: Configuring App Events Webhooks
Guidewire Cloud Platform 2022.09 App Events

2. In Auth Configurations, click Add New and enter the values for the following properties in the Add a New Auth
Config page:
Name
Unique name of the Auth configuration. Used to identify the Auth Config when selecting it later and
associating to a subscription endpoint.
ClientId
The client id. This id is requested from your IDP administrator. Allow using the special characters
dash(-) and underscore(_) in ClientId.
Client Secret
The client secret. Provided by your IDP administrator.
Authorization URL
The URL to connect for authorization. HTTPS protocol is required.
Type
The environment class, Development or Production that the Auth configuration applies to. Once created,
the Type cannot be changed.
Note: An Auth Config of certain Type can be associated only with an Endpoint of the same
Type.
Scopes
The desired scopes for the OAuth authorization request that are defined for your services. Defining
scopes is optional.
The following screenshot shows an example of the Add a New Auth Config page with already entered
information:

3. Click Add to save the new Auth Config.

Related information
“Configure a subscription” on page 38
“Configure an endpoint” on page 45

Related information
“Configure allowed domains” on page 50
Configuring App Events Webhooks 49
Guidewire Cloud Platform 2022.09 App Events

Configure allowed domains


You use the Allowed Domains UI to specify the allowed domain patterns for the endpoint URLs. App Events
Webhooks validates that the endpoints match the patterns in this list.

Defining an allowed domain requires providing the following:


Domain Name Pattern
Domain name pattern. Use a wildcard character, asterisk (*) to define a pattern. For example:
• *.com matches any single domain component
• *.my-company.com matches any subdomain component of my-company.com
• *.*.my-company.com matches any third and fourth level subdomains of my-company.com
Enabled for development
If selected, defines a domain pattern for development environments.
Enabled for production
If selected, defines a domain pattern for production environments.

Update an allowed domain

To update a domain pattern, click on the domain pattern row. You can update the pattern expression and the
environment the pattern applies to.

Delete an allowed domain

To delete a domain pattern, click on the domain pattern row.

Related information

“Configure a subscription” on page 38


“Configure an endpoint” on page 45
“Configure auth” on page 48

50 chapter 3: Configuring App Events Webhooks


chapter 4

Configuring custom events

Guidewire supports enabling application events on Guidewire or customer entities:


• Configure custom events for standard entities
Guidewire supports adding custom events to an existing Guidewire entity, such as Claim, for example. The
procedure requires, that you add the new event to the existing entity in ClaimCenter studio and define the
segmentation rules to trigger the event. See “Tutorial: Configure a custom event for a standard entity” on
page 52
• Configure events for custom entities
Guidewire supports enabling application events on customer entity only by inlining customer entity data into
existing REST resource. When creating a new custom entity, you must also create an integration view by adding
a JSON mapper and schema for the entity. The schema defines the format of the data in the event and the mapper
defines how the data in the entity is mapped to the schema. “Tutorial: Configure an event for a custom entity” on
page 53
Creating a new custom entity extends the REST framework to include new data in App Events. This requires
synchronization between the Claim Graph Schema and the App Events schema, so every time you add new
entities to App Events, you must update the Claim Graph Schema, as well. For more information on Claim Graph
Schema, see <link to be added>

See also
• “Triggering custom events” on page 51
• “Tutorial: Configure a custom event for a standard entity” on page 52
• “Tutorial: Configure an event for a custom entity” on page 53
• ClaimCenter Configuration Guide "<events>"
• PolicyCenter Configuration Guide "<events>"

Triggering custom events


A business rule can trigger a custom event by using the addEvent method of claim entities and most other entities
that are part of the claim graph. Events must also be added to the corresponding entity definition relating to the
event.
addEvent(strEventId : String) : void

You can also call the method from Java code that uses the Java API libraries, specifically from Java plugins or from
Java classes called from Gosu.
Configuring custom events 51
Guidewire Cloud Platform 2022.09 App Events

void addEvent(String strEventId)

The strEventId can be any text you wish to use to identify the event. The addEvent method has no return value.
The entity that adds an event is the root object of that event. The event is triggered when the entity's bundle is
committed.

See also
• “Configuring custom events” on page 51
• “Tutorial: Configure a custom event for a standard entity” on page 52
• “Tutorial: Configure an event for a custom entity” on page 53

Tutorial: Configure a custom event for a standard entity


Procedure
1. In Studio, in the Project window, navigate to configuration→config→Extensions→entity and open Claim.etx.
2. Click Add to add a new events element with the following values:
Note: An extension name cannot start with a number; it must start with a letter. Other than that,
an extension name can contain letters, numbers, or underscores (_). Guidewire does not permit
any other characters in extension names.
It is a good practice to append _Ext to the end of your custom entity to avoid conflicts with the
same entity names that Guidewire could add in future releases.

name ClaimSegmentedAutoHigh_Ext
description PA claim segmented as high complexity
3. Save your work.
4. Select Generate Metadata Classes from the Studio Codegen menu.
This action regenerates the Claim.java class.
5. After the Generate Metadata Classes task is complete, confirm that the Claim.java class in generated→entity
contains the following String property:
public static final java.lang.String CLAIMSEGMENTEDAUTOHIGH_EVENT = "ClaimSegmentedAutoHigh_Ext";

6. Navigate to config→Rule Sets→Segmentation→ClaimSegmentationRules and open CSG01100 - Auto.


7. Call the addEvent() method in the Auto claim segmentation rules to trigger the event. Add the following if
statement in the logic for the highest complexity auto claims.

if (highestExposure != null) {
claim.Segment = highestExposure.Segment
Logger.logDebug(DisplayKey.get("Rules.Segmentation.Claim", actions.ShortRuleName))
Logger.logDebug(DisplayKey.get("Rules.Segmentation.Claim.SegmentedTo",
claim.Segment))
//added code to test custom events
if(claim.Segment == ClaimSegment.TC_AUTO_HIGH){
claim.addEvent(Claim.CLAIMSEGMENTEDAUTOHIGH_EXT_EVENT)
}
actions.exit()
}

8. Save your work. Commit the code and deploy the ClaimCenter instance to GWCP.
9. To test, create a high complexity auto claim and verify that the custom event appears in the message queue.
a. Log in to ClaimCenter as administrator
52 chapter 4: Configuring custom events
Guidewire Cloud Platform 2022.09 App Events

b. Suspend the Standard Events Message Transport message queue.


To open this screen, click the Administration tab and then navigate in the left sidebar to
Monitoring→Message Queues. Click Standard Events Message Transport.
c. Create a high complexity auto claim. For example, if you set Total Loss? to 'Yes' on a vehicle incident, the
claim segmentation will be set to high complexity.
d. Verify that your newly added custom event (ClaimSegmentedAutoHigh_Ext) appears in the message
queue.

See also
• “Tutorial: Configure an event for a custom entity” on page 53

Tutorial: Configure an event for a custom entity


About this task
In the example in this section, the customer entity is inlined into Policy entity. The extension JSONs are combined
with the Claim Graph Schema that ensures that the two schemas are synchronized.
In this task, you will create a new custom entity (AppeventsTest_Ext) related to Policy, that is an existing REST
resource, and perform the necessary configurations to trigger events.
For complete steps and best practices when creating a new entity, refer to Modifying the base data model. For
complete steps and best practices when creating an integration view, refer to ClaimCenter Integration Views.

Procedure
1. In Studio, in the Project tool window, navigate to configuration→config→Extensions→Entity.
2. Right-click Entity, and then click New→Entity.
3. Enter the following:

Entity AppeventsTest_Ext
Desc Custom entity related to the Policy subentity
type retireable
Exportable true
4. Click OK in the Entity dialog.
The AppeventsTest_Ext.eti window entity definition screen appears.
5. In the entity definition editor, right-click on the entity element, choose Add new... and add the following values
in the implementsEntity element:

Element Primary Value


implementsEntity Extractable
6. Add a foreign key to your new AppeventsTest_Ext data entity to relate the custom entity directly to the
Policy subentity. In the Field drop-down list, select the foreignkey field type to add, and then click Add .
7. Specify the properties of the foreignkey field as follows:

name Policy
fkentity Policy
nullok false
columnName PolicyID
Configuring custom events 53
Guidewire Cloud Platform 2022.09 App Events

desc The Policy for this AppeventsTest_Ext


exportable false
importableagainstexistingobject false
8. Add a column field to your new AppeventsTest_Ext data entity. In the Field drop-down list, select the
column field type to add, and then click Add .
9. Specify the properties of the column field as follows:

name Description
type mediumtext
nullok true
desc Description of AppeventsTest_Ext
10. Click Add to add a new events element. There are no values for this element.
11. Stop and restart both Studio and ClaimCenter to deploy your changes.
12. Create a new integration view by configuring a mapping and a schema. First, configure the
claim_ext-1.0.mapping.json Claim mapper file. In Studio, in the Project tool window, navigate to
configuration→config→Integration→mappings.ext.
13. Navigate to the claim.v1 subfolder and open the claim_ext-1.0.mapping.json file.
14. Add the following to the bottom of the file:
"mappers": {
"AppeventsTest_Ext": {
"schemaDefinition": "AppeventsTest_Ext",
"root": "entity.AppeventsTest_Ext",
"properties": {
"description": {
"path": "AppeventsTest_Ext.Description"
},
"id": {
"path": "AppeventsTest_Ext.RestId"
}
}
},
"Policy": {
"schemaDefinition": "Policy",
"root": "entity.Policy",
"properties": {
"AppeventsTest_Ext": {
"path": "Policy.AppeventsTest_Ext",
"mapper": "#/mappers/AppeventsTest_Ext"
}
}
}
}

15. Configure the schema for your integration view by configuring the claim_ext-1.0.schema.json schema
file. In Studio, in the Project tool window, navigate to configuration→config→Integration→schemas.ext.
16. Navigate to the claim.v1 subfolder and open the claim_ext-1.0.schema.json file.
17. Add the following to the bottom of the file:
,
"definitions": {
"AppeventsTest_Ext": {
"type": "object",
"properties": {
"description": {
"type": "string",
"x-gw-extensions": {
"defaultViews": [
"detail"
]
}
},

54 chapter 4: Configuring custom events


Guidewire Cloud Platform 2022.09 App Events

"id": {
"type": "string"
}
}
},
"Policy": {
"properties": {
"AppeventsTest_Ext": {
"$ref": "#/definitions/AppeventsTest_Ext"
}
}
}
}

18. Commit the code and deploy the new ClaimCenter instance to GWCP.
19. To test the configuration, login to ClaimCenter, create a claim with the new custom entity and then review the
event payloads to validate that the new custom entity data appears in the related entity events.

See also
• “Tutorial: Test the custom entity configuration” on page 55
• ClaimCenter Configuration Guide "<events>"
• Modifying the base data model
• ClaimCenter Integration Views

Tutorial: Test the custom entity configuration


To test the configuration, login to ClaimCenter, create a claim with the new custom entity and then review the event
payloads to validate that the new custom entity data appears in the related entity events. If there is no easy way to
create a claim with the custom entity in ClaimCenter, for testing purpose only create a command that creates the
claim in ClaimCenter.

Procedure
1. To create a claim with the custom entity in ClaimCenter, add the following method to modules/
configuration/gsrc/gw/command/NewClaim.gs.
@Argument("Description", "description")
function withCustomerEntity() : void {
var claim = ClaimBuilder.uiReadyAuto()
.withNonConflictingClaimNumber()
.open()
.assigned()
.withAssignedGroupFoundByName("Auto1 - TeamA")
.withAssignedUserFoundByName("aapplegate")
.withDescription( (Argument == null || Argument.length() == 0) ? "description" : Argument )
.withSegment(TC_AUTO_LOW)
.createInNewBundle()
var customerEntity = new AppeventsTest(claim.Bundle)
customerEntity.Policy = claim.Policy
customerEntity.Description = "Test Customer Entity Description field"
claim.Policy.AppeventsTest = customerEntity
claim.Bundle.commit()
pcf.ClaimSummary.go( claim )
}

2. Commit the code and deploy the ClaimCenter instance to GWCP.


3. Log in to ClaimCenter as a user with administrative privileges.
4. Click the Administration tab and then navigate in the left sidebar to Monitoring→Message Queues.
5. On the Message Queues screen, select the check boxes next to the AppEvents and AppEvents(Admin) message
queues and then click Suspend.
6. In ClaimCenter,use QuickJump to enter commands. Select the top right input box with gray text Go to (Alt+/).
You can also use the shortcut keys Alt + / to enter that input. In the Go to (Alt+/) text box, enter the following
command and press return:
Configuring custom events 55
Guidewire Cloud Platform 2022.09 App Events

Run NewClaim withCustomerEntity "test"

7. Verify that the AppeventsTest_Ext data is included in the Policy events.


a. Navigate to Standard Events Message Transport and select the link for the claim you just created.
b. Examine the payload for the PolicyAdded event.
The custom entity appeventsTest_Ext appears in the PolicyAdded event payload.

{
"id": "7a19b860-40f6-4db6-b7b5-75b08cc44f14",
"type": "com.guidewire.iscc.PolicyAdded",
"data": "{\"accountNumber\":\"A2\",\"appeventsTest_Ext\":{\"description\":\"Test
Customer Entity Description field\",\"id\":\"cc:2\"},\"currency\":{\"code\":\"usd\",
\"name\":\"USD\"},\"effectiveDate\":\"2020-10-09T01:43:50.629Z\",\"expirationDate\":
\"2021-10-09T01:43:50.629Z\",\"id\":\"cc:2\",\"insured\":{\"displayName\":\"Fred
Jones1617932613391\",\"id\":\"cc:2\"},\"policyNumber\":\"P1617932613383\",\"policyType
\":{\"code\":\"PersonalAuto\",\"name\":\"Personal Auto\"},\"producerCode\":
\"1617932613383\",\"status\":{\"code\":\"inforce\",\"name\":\"In force\"},
\"verifiedPolicy\":false}",
"source": "grn:v1:cc:futurest:cortdemo:namerica:beta1:dev:appevents:/deployment/
andromeda",
"dataSchema": "grn:v1:cc:futurest:cortdemo:namerica:beta1:dev:appevents:/event/v1/
schemas/ext.claim.v1.claim_combined_ext-1.0/Policy",
"timestamp": 1617932630.637000000,
"language": "en_US",
"objectId": "cc:2",
"objectType": "Policy",
"subject": "policy",
"primaryObjectId": "cc:4",
"primaryObjectType": "Claim",
"primaryObjectMessageCount": 7,
"graphObjectType": "Claim",
"graphObjectId": "cc:4",
"sliceStart": null,
"sliceEnd": null,
"traceabilityId": "32becce7-4130-4e9e-8d31-031042de720b",
"transactionId": "adb50ec5-7582-4161-9cdc-ed0bfb21feb0",
"worksetId": "DEFAULT",
"version": "1.1",
"bound": null,
"extensions": {
"claimstate": "open"
}
}

56 chapter 4: Configuring custom events


chapter 5

Using Integration Gateway

Using Integration Gateway to deliver events

App Events provides a set of APIs and Camel components that you utilize when developing integrations:
• “App Events component” on page 57 - Reads the application events and associated claim snapshots and
invokes routes when events occur. The Camel routes in the integrations process event payloads, transform and
send them over a wide range of protocols to downstream systems.
• “App Events Webhooks API” on page 81 - A set of REST APIs that integrations can use to manage
subscriptions
• “Standard Event API” on page 87 - A set of REST APIs that allows integration developers determine exactly
what events InsuranceSuite publishes, and what the data inside those events look like.
Note: For details on how to implement integrations using Integration Gateway, see the Integration
Gateway for Developers Guide guide.

See also

• “Getting started with App Events” on page 31


• ClaimCenter Integration Views
• PolicyCenter Integration Views

App Events component


Note: App Events only supports InsuranceSuite applications deployed to the Guidewire Cloud
Platform (GWCP). App Events is not supported by self-managed InsuranceSuite or running
InsuranceSuite locally.
Integration Gateway provides App Events component to allow reading app events and the associated snapshots in
integration Camel routes. The component receives application events, filters the events, transforms the payload data,
and invokes specific Camel routes to deliver the data when the events occur.
Using the component, integration routes can subscribe to one or more events as specified in the routes. The Camel
routes transform, route, and deliver the events to a downstream system using any of the protocols that Apache
Camel supports.
For information on developing integrations using the Integration Gateway, refer to Integration Gateway for
Developers Guide guide.

Using Integration Gateway 57


Guidewire Cloud Platform 2022.09 App Events

Note: App Events runs on the Guidewire Cloud Platform (GWCP). The Camel routes that listen to
application events do not get triggered when ran locally. When running on GWCP, events that are
emitted from the InsuranceSuite instance on the same planet trigger these Camel routes. Events arrive
in order that is based on the primary object id for the event, for example claim for ClaimCenter.

Installing the App Events component


About this task
Developing App Events integrations using Integration Gateway requires that you first set up your local environment.
The Integration Gateway for Developers Guide guide provides information about developing integrations using the
Integration Gateway.
As a Guidewire Cloud InsuranceSuite customer, you get access to a full Continuous Integration/Continuous
Deployment (CI/CD) pipeline and code repository. During initial provisioning, Guidewire Cloud Operations provide
the following:
• A Bitbucket repository for your integration
• A TeamCity project for your integration
• Enabled App Events feature in the GWCP
Note: The product is still under development and the installation steps in this procedure are subject to
change.
To set up your local environment with Integration Gateway, follow the steps that are described in Set up a
development environment in Integration Gateway for Developers Guide. For information on setting up your
environment for App Events, see Getting started with App Events.
The Camel App Events component is distributed as a JAR file that is in the ig-maven-repository repository. To
install the component in your project follow these steps:

Procedure
1. Open build.gradle in your project
2. Add the following line to define the dependency to the App Events component in the dependencies { section.
dependencies {
....
implementation "com.guidewire.camel:gw-camel-appevents"
}

3. Save your changes and close the files.


4. Build your integration to validate the dependency to the App Events component is resolved.

Using the App Events component


The App Events Camel component includes a consumer that creates messages originating from the application
events pipeline in InsuranceSuite apps. These events have a complete graph of the corresponding root entity as their
body, along with various headers indicating what event occurred and which specific entity the event relates to. Refer
to the list of the App Events that are triggered from InsuranceSuite apps for Guidewire Cloud. For details, refer to
ClaimCenter list of events and PolicyCenter list of events.
The body of all application event messages are deserialized as ObjectNode objects. See the
com.guidewire.camel.AppEvents class for helpful methods for accessing data in an application event message.
Integration Gateway supports Java DSL (Domain Specific Language) for writing Camel routes. To create a route
you extend the Camel RouteBuilder class and implement the configure() method. For information on creating
integrations using Integration Gateway, see Getting started with integration development.

Configuring a Camel route


To configure a Camel route in your application, you must define the from endpoint URI. The App Events
component URI accepts options that are defined using the following format:
58 chapter 5: Using Integration Gateway
Guidewire Cloud Platform 2022.09 App Events

appevents:{app code}?id={id}&filterDraftClaim={true|false}&events={event1,event2,event3}
[&includePrevious=true]
The Camel component gives access to common filters on the events. Using the Camel component, you choose what
set of events your Camel route listens to. For example, you can filter events on different levels:
• Select the IS application that triggers the events
• Exclude draft claims, (filterDraftClaims=true) in ClaimCenter events
• Define the specific events based on the event names. For example, (events=CreatePeriod,ChangePeriod) in
Policy Center, or (events=ClaimOpened,AssinmentAdded).
The following table provides details about the URI options:

Name xCenter Description


id ClaimCenter (cc), Required. The unique id for the route. The consumers
String PolicyCenter (pc) sharing an id split incoming App Events between
them. This id must be unique for every route.
appevents:{app code} ClaimCenter (cc), Required. Defines the InsuranceSuite application
String PolicyCenter (pc) events that the route listens to.
• For ClaimCenter events set {app code} to cc
filterDraftClaim ClaimCenter (cc) Flag that filters draft claims when set to true. Note
Boolean that, this option applies only to ClaimCenter events.

events ClaimCenter (cc), Optional.Comma separated list of events that filters


String PolicyCenter (pc) the events that the route listens to. If events is not
defined or the list is empty, all events are received.
These events do not need to be fully-qualified, as they
are assumed to come from the application given as
{app code}.
For example, for ClaimCenter events you can define
ClaimAdded,ExposureAdded,ContactAdded.

includePrevious ClaimCenter (cc), Optional. Whether to fetch the previous snapshot


Boolean PolicyCenter (pc) data. The default value is true.

fetchData ClaimCenter (cc), Optional.Defines whether the data corresponding to


Boolean PolicyCenter (pc) each event must be fetched. For routes that only use
the event as a trigger, and do not need the
corresponding event data, this property has to be set
to false.
parallelConsumer ClaimCenter (cc), Optional.Defines the number of threads that
Integer PolicyCenter (pc) simultaneously read events when executing a route.
Guidewire ensures that a given safe-ordered entity is
only processed by one thread.
refExpansionProvider Integration developers register their Provides a reference to a callback method that the
RefExpansionProvider callback implementation using the integration developers must implement to define what
Camel context registry. reference types in the event graph are to be expanded.
getContext().getRegistry()
.bind("pcProvider",
(RefExpansionProvider) (snapshotType,
fieldPath) -> true);

includeRefs A Boolean parameter that defines whether to fetch the


Boolean related referenced snapshots.

Configuring Kafka properties


App Events uses Apache Kafka as a distributed streaming platform for publishing and delivering InsuranceSuite
events. The App Events component uses the Camel Kafka component to communicate with Kafka message broker.
Using Integration Gateway 59
Guidewire Cloud Platform 2022.09 App Events

The Camel Kafka component supports multiple producer and consumer configuring options. Typically, the
configuration is done on endpoints, as endpoints often have many options that allow you to configure what the
endpoint must do.
The App Events component provides a property gw.appevents.kafka.config that you could use to configure the
endpoint query parameters.
To configure the Kafka options, add the gw.appevents.kafka.config property with the selected options to
route.properties file. Enlist the options using the following format:
gw.appevents.kafka.config=[option1:value],[option2:value2],[option3:value3]...

Example:
The following example sets two options:
gw.appevents.kafka.config=maxPollIntervalMs:300000,reconnectBackoffMaxMs:1000
1. maxPollIntervalMs:300000 sets the maximum delay between invocations of poll() to 300000 milliseconds
2. reconnectBackoffMaxMs:1000 sets the maximum amount of time to wait when reconnecting to a broker to
1000 milliseconds
For the full list of the available options, see Camel Kafka component.

Write an App Events Camel route


The following URI defines an endpoint that listens only to AssignmentAdded non-draft events from ClaimCenter
cc. The route id is defined as AssingmentAddedEvents.
appevents:cc?id=AssignmentAddedEvents&filterDraftClaims=true&events=AssignmentAdded
The following class defines a Camel route with this endpoint:
package com.guidewire.cis.camel.routes;
import com.guidewire.camel.AppEvents;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import javax.inject.Named;

@Named
public class SampleAppEventComponentRoute extends RouteBuilder {
public void configure() throws Exception {
//route to look for non-draft claims and look for events of type AssignmentAdded
from("appevents:cc?id=AssingmentAddedEvents&filterDraftClaims=true&events=AssignmentAdded")
.routeId("ccNoDraftEvents")
}
}

Follow these steps to create the route:


1. Create SampleAppEventComponentRoute(...) class that extends RouteBuilder class and overrides the
configure() method
@Named
public class SampleAppEventComponentRoute extends RouteBuilder {
public void configure() throws Exception {

Annotate with @Named every Camel route class that extends the Camel RouteBuilder class. The Integration
Gateway uses the @Named annotation to automatically detect the route and add it to the CamelContext.
2. Define the from endpoint
from("appevents:cc?
id=AssignmentAddedEvents&filterDraftClaims=true&events=AssignmentAdded")
3. Assign unique id to the route. This is optional. If you do not provide route id, Camel automatically assigns a
route id. This id is different from the unique id in endpoint URI.
.routeId("ccNoDraftEvents")

Retrieve a field from the event payload


The following example defines a processor that extracts the claim number from the incoming event message. The
processor uses the AppEvents.getValueAt(...) method to retrieve the field from the root node.
60 chapter 5: Using Integration Gateway
Guidewire Cloud Platform 2022.09 App Events

from("appevents:cc?id=claimExposureRoute&events=ClaimAdded,ExposureAdded")
//Removes the API prefix from the incoming body if from ClaimCenter
.process(AppEvents::claimAsBody)
.process(ex -> {
//The body of the messages is already an ObjectNode
var body = ex.getMessage().getBody(ObjectNode.class);
//Uses a dot-delimeted path to get a value
var claimNum = AppEvents.getValueAt(body, "claimNumber").asText();
log.info("Claim number is " + claimNum);
})

Configure parallel consumers


Using the parallelConsumers property, you can directly configure the number of the consumers that connect to the
Kafka server. Configuring the consumers allows you to achieve optimal performance and resource usage in your
integration to process more events. By default, the App Events component sets the number of the parallel consumers
to 3. You can set the parallel consumers at route level or at application level. When set at application level, the
property applies to all routes in your integration project.
The following route demonstrates how to set the parallelConsumers property for a route:
from("appevents:cc?id=allEvents&parallelConsumers=7")
.routeId("ccEvents")
.process(this::processMessage);

Alternatively, you can define the number of the parallel consumers at application level by setting the
gw.appevents.parallel-consumers property in application.properties file. In this case, the setting applies to
all routes in your integration project.

Log debug messages


You can define your own method that acts as a processor. In this example the route calls this method
using .process(this::processMessage);. The processMessage(...) methods shows the usage of the
application component methods to log parts of the application event payload.
@Named
public class SampleAppEventComponentRoute extends RouteBuilder {
public void configure() throws Exception {
from("appevents:pc?id=pcEvents&events=BindSubmission")
.routeId("submissionEvents")
.process(this::processMessage);
}
private void processMessage(Exchange msg) {
log.info("Received {} event for entity {} in primary entity {} in route {}.",
AppEvents.getEventType(msg),
AppEvents.getObjectInfo(msg),
AppEvents.getPrimaryObjectInfo(msg),
msg.getFromRouteId());

if (log.isDebugEnabled()) {
log.debug("Message headers {}", msg.getMessage().getHeaders());
log.debug("Message body {}", msg.getMessage().getBody());
}
//add custom code to do processing
}
}

Recording and replaying events


The App Events component provides a record and replay feature that allows testing app events integrations locally
on the developer workstation.
The App Events component currently runs only on Guidewire Cloud. Using the record mode, developers can record
events when running integrations on Guidewire Cloud. Then using the replay mode, they can replay the recorded
data set locally to debug their integrations.
The App Events component uses Amazon Simple Storage Service (Amazon S3) to store the recorded events. To
record and replay events, customers need to have their own Amazon S3 subscription.
Using Integration Gateway 61
Guidewire Cloud Platform 2022.09 App Events

Related information
“Recording app events” on page 62
“Replaying app events” on page 76

Related information
“Tutorial: Create a record-mode integration” on page 64
“Tutorial: Run a record-mode integration” on page 66
“Tutorial: Store properties to Property Service” on page 74
“Tutorial: Replay recorded events” on page 77

Recording app events


In record mode, the App Events component delivers the messages to the intended endpoints and simultaneously
stores them to S3 for later retrieval.

About the record mode


The component stores the recorded messages as S3 objects in JSON format. The objects names use the following
format:
<prefix>/<appevent-routeId>.<timestamp>.json
• prefix is a configurable prefix in the S3 bucket under which to store recorded messages
• appevent-routeId is the unique id for the route that listens to the events
• timestamp is the time when the recording is created. The timestamp guarantees the uniqueness of the messages.
It is also a key in ordering the messages and ensuring that during replay the events are generated in the same
order.
The recorded messages are stored in an Amazon S3 bucket. The App Events component uses the following
properties to access the S3 bucket for storing the event messages:
• The AWS region where the S3 bucket is stored
• The S3 bucket name
• The S3 bucket prefix under which to store recorded messages
• The AWS Access Key
• The AWS Secret Key
The S3 region, bucket name and prefix properties can be set in the Guidewire Property Service or locally in the
application properties files. If you wish to change them dynamically, store them in the Property Service. Setting the
properties locally requires that you rebuild and redeploy your integration app.
Developers must store the AWS credentials as secrets in the Guidewire Property Service, rather than configure them
statically in the application properties files.

Configuring the record mode


In record mode the integration app must be deployed to Guidewire Cloud. Configuring your integration to record
event messages when running on Guidewire Cloud includes the following settings:
• Set up the mode to record
• Configure the access to AWS S3 bucket for storing the recordings
• Configure storing feature properties to Guidewire Property Service to allow dynamic changing without
rebuilding the app
1. Define the following properties to the route.properties file in your integration app:
gw.appevents.record-replay.mode=<MODE>
gw.appevents.record-replay.record.enabled.<APPEVENT_ROUTE_ID>=true
gw.appevents.record-replay.record.s3.region=<AWS_REGION>

62 chapter 5: Using Integration Gateway


Guidewire Cloud Platform 2022.09 App Events

gw.appevents.record-replay.record.s3.bucket=<S3_BUCKET_NAME>
gw.appevents.record-replay.record.s3.prefix=<S3_BUCKET_PREFIX>

<MODE>
The possible modes are normal, record, and replay.
<APPEVENT_ROUTE_ID>
The unique id for the route that listens to the events.
<AWS_REGION>
The AWS region where the S3 bucket resides. This property can be configured in the Guidewire Property
Service or locally.
<S3_BUCKET_NAME>
The S3 bucket name where the recording is saved. This property can be configured in the Guidewire
Property Service or locally.
<S3_BUCKET_PREFIX>
A prefix is a string at the beginning of the bucket name that helps you organize and then browse your keys
hierarchically. This property can be configured in the Guidewire Property Service or locally.
Note: Setting the S3 bucket name and prefix properties locally in the application properties files
requires that you rebuild and redeploy the integration app. If you wish to change them
dynamically, store them in the Property Service.
For details on how to set integration app properties in Guidewire Property Service, see
Managing applications in Property Service.
2. Add the following S3 credentials to the Guidewire Property Service. When creating the AWS Secret Key
property settings-definition, make sure isSecret is set to true.
AWS Access Key
{
"data": {
"applicationId": <APP_ID>,
"name": "gw.appevents.record-replay.record.s3.accessKey",
"value": <AWS_ACCESS_KEY>,
"applyTo": {
"layerType": "environment_level",
"environmentLevel": <environment>
}
}
}

AWS Secret Key


{
"data": {
"applicationId": <APP_ID>,
"name": "gw.appevents.record-replay.record.s3.secretKey",
"value": <AWS_SECRET_KEY>,
"applyTo": {
"layerType": "environment_level",
"environmentLevel": <environment>
}
}
}

Related information
“Tutorial: Create a record-mode integration” on page 64
“Tutorial: Run a record-mode integration” on page 66
“Tutorial: Store properties to Property Service” on page 74
“Tutorial: Replay recorded events” on page 77

Using Integration Gateway 63


Guidewire Cloud Platform 2022.09 App Events

Tutorial: Create a record-mode integration


About this task
The tutorial in this section assumes that you are provisioned to use Integration Gateway as described in Getting
started with integration development.
This tutorial provides instructions about developing an integration that uses the App Events component to record
events generated by ClaimCenter and storing them on Amazon S3.
Prerequisites:
As a prerequisite for this tutorial, you must complete the following setups. If you have all setups completed, proceed
to the tutorial steps:
1. Create an integration app named igrecordreplay by following the instructions in Tutorial: Creating an
integration app.
2. Set up your local development environment and configure your app project in IntelliJ. This setup requires that
you complete the instructions from step 1. to step 5. in Tutorial: Implementing an integration app.
3. Contact the Guidewire Cloud Operation team to provision your integration to use App Events. For details, see
How do I use the App Events component in my integration app?
4. Configure the access to Amazon S3 bucket for storing the recordings
• There are multiple ways to configure your access:
a. You can use AWS Command Line Interface (amazon.com) to configure your access to AWS by using
the aws configure command to set up the configuration files. Furthermore, downloading AWS CLI
will be useful for downloading multiple files from S3.
b. Alternatively, you can configure your AWS access by following the instructions at Set up AWS
Credentials and Region for Development.
• Store your Amazon S3 credentials as integration app properties to Guidewire Property Service. The
“Tutorial: Store properties to Property Service” on page 74 provides steps by steps instructions.

Procedure
1. Install the App Events component in your integration. For details, see “Installing the App Events component”
on page 58.
2. Create an ig-event-recorder bucket in S3.
a. Login to Amazon Web Services and select S3 from Services.
b. In S3, create a bucket named ig-event-recorder. Ensure you are logged in the region that you specified in
your credentials.
3. Open route.properties file and add the following properties:
gw.appevents.record-replay.mode=record
gw.appevents.record-replay.record.enabled.cc-recording=true
gw.appevents.record-replay.record.s3.region=<AWS_REGION>
gw.appevents.record-replay.record.s3.bucket=ig-event-recorder
gw.appevents.record-replay.record.s3.prefix=recorded-appevents

Replace <AWS_REGION> with the value that applies to your environment. For details, see “Recording app
events” on page 62.
4. In IntelliJ, create a new Java class TestRecordReplayRoute in the package
com.guidewire.integrationgateway; package.
package com.guidewire.integrationgateway;
import com.guidewire.camel.AppEvents;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import javax.inject.Named;

@Named
public class TestRecordReplayRoute extends RouteBuilder {
@Override
public void configure() throws Exception {

64 chapter 5: Using Integration Gateway


Guidewire Cloud Platform 2022.09 App Events

from("appevents:cc?id=cc-recording&filterDraftClaims=true&events=AssignmentAdded,ClaimOpened")
.routeId("CCRecordEvents")
.process(this::processMessage);
}
private void processMessage(Exchange exchange) {
log.info("Received igrecordreplay {} event for entity {} in primary entity {} in route {}.",
AppEvents.getEventType(exchange),
AppEvents.getObjectInfo(exchange),
AppEvents.getPrimaryObjectInfo(exchange),
exchange.getFromRouteId());
}
}

• The Camel route TestRecordReplayRoute class defines a from(...) endpoint, that specifies the source of
messages for the routing rule using the following properties:
◦ appevents:cc - the route listens to events from ClaimCenter
◦ id=cc-recording - the unique id for the route. This is the name of the route, we defined in
route.properties file.
◦ filterDraftClaims=true - filtering out the draft claim events from ClaimCenter
◦ events=AssignmentAdded,ClaimOpened - listing of events that the route listens to
• The process() method adds a processor processMessage( ...) that retrieves and logs information from
the Exchange object. The Exchange object contains the received message from ClaimCenter.
5. Commit and push the integration app to your Bitbucket repository:
a. In BitBucket, click Create branch, name the branch test-record-replay, and click Create.
b. Open Git Bash in your project folder.
c. In Git Bash, run the following commands in the provided order. Alternatively, you can use your preferred
Git tools, such as the IntelliJ Git plugin:
git pull
git checkout test-record-replay
git commit build.gradle route.properties gradle/integration-config.gradle src/main/java/com/guidewire/
integrationgateway/TestRecordReplayRoute.java -m'Test record replay feature in AE'

6. Build your integration app


a. In BitBucket, click Branches from the side menu and then click the test-record-replay branch.
b. In Compare, select master for the Destination and click Create pull request button. Enter the name of your
PR (pull request), such as Test recording events from CC. Click Create.
c. In the created pull request Test recording events from CC, click Builds to verify that the verification build
has passed and click Merge.
d. In the Cloud Console page for your integration, click Build Management.
The TeamCity build pipeline is opened in a new browser window. After merging the changes in your pull
request (PR) , the Build, Validate Integration, and Publish Integration App jobs start automatically. The
docker image for your integration microservice is built.
7. Deploy your integration
a. In TeamCity, validate that the Build Integration App jobs have been triggered completed successfully.
b. Click the Run button next to the Deploy to Dev job, and specify the options in the Run Custom Build
dialog.
c. In Run Custom Build, click the Parameters tab.
d. In the Publish Build Number, enter build number that appears in the Publish Integration App job.
e. In Environment, specify the environment your app is provisioned for. For example, dev for deploying to
the dev. You can specify any non-production environment that is available to you.
f. Click Run Build.
After successful deployment, the app appears on the provisioned app screen under the dev environment. In the
example on the following image, build 12 was deployed to dev environment.
Using Integration Gateway 65
Guidewire Cloud Platform 2022.09 App Events

Related information
“Tutorial: Store properties to Property Service” on page 74
“Tutorial: Run a record-mode integration” on page 66
“Installing the App Events component” on page 58

Tutorial: Run a record-mode integration

About this task


The tutorial in this section assumes that you already completed “Tutorial: Create a record-mode integration” on
page 64 and successfully deployed your integration to an environment that runs ClaimCenter.
This tutorial provides instructions about running and testing the record-mode integration. You learn how to:
• Generate events from ClaimCenter that your integration receives and stores to an Amazon S3 bucket
• Locate the log messages your integration writes to Datadog to validate the route processed the events
• Locate and download event snapshot record from the Amazon S3 bucket

Procedure
1. Generate events from ClaimCenter
a. In Cloud Console, click Environments in your project and select the environment that you deployed your
integration to.
b. Click the URL for ClaimCenter, as shown in the following image. The ClaimCenter console opens up in a
new browser tab.

66 chapter 5: Using Integration Gateway


Guidewire Cloud Platform 2022.09 App Events

c. Login to ClaimCenter using your credentials.


d. In ClaimCenter, create a new claim with an incident. Alternatively, you can run the following command in
the QuickJump.
Run NewClaim autoWithVehicleIncident

The command creates a new claim.

2. Review the log messages in Datadog


a. In the Cloud Console page of your integration, click ViewLogs button. The login screen for Datadog opens
in a new browser tab.
b. Login to Datadog using your credentials
c. In Datadog, click Logs from the left-side menu and type igrecordreplay in the Services box.
d. In Search for box type Received igrecordreplay. This is a part of the log message in the route
processMessage(...) processor method.
Using Integration Gateway 67
Guidewire Cloud Platform 2022.09 App Events

As shown in the following image, two messages appear. These messages correspond to the two events that
we filtered in the integration route, AssignmentAdded and ClaimOpened.

e. Browse the log message to identify its components:


log.info("Received igrecordreplay {} event for entity {} in primary entity {} in route {}.",
AppEvents.getEventType(exchange),
AppEvents.getObjectInfo(exchange),
AppEvents.getPrimaryObjectInfo(exchange),
exchange.getFromRouteId());

3. Review the recordings in Amazon S3.


To locate the recorded messages, refer to the S3 settings in the route.properties file in your integration:
gw.appevents.record-replay.mode=record
gw.appevents.record-replay.record.enabled.cc-recording=true
gw.appevents.record-replay.record.s3.region=<AWS_REGION>
gw.appevents.record-replay.record.s3.bucket=ig-event-recorder
gw.appevents.record-replay.record.s3.prefix=recorded-appevents

a. Login to Amazon Web Services and select S3.


b. In S3 > Buckets, type ig-event-recorder in the Buckets search box. The bucket link appears.
c. In S3 > Buckets, click the ig-event-recorder bucket. A list of prefixed objects appears.
d. In Objects, click recorded-appevents prefix object.
e. In Find objects by prefix, type the recording name you configured cc-recording. A list of .json files
appears.
f. Locate the two files that correspond to your testing session.

68 chapter 5: Using Integration Gateway


Guidewire Cloud Platform 2022.09 App Events

g. Select each file and click Open to view its content. The file appears in a new browser tab.
This is the snapshot for the ClaimOpened event. The event appears in the "ce_type" :
"com.guidewire.iscc.ClaimOpened" property. Validate that the ClaimNumber contains the same
number 000-00-000331 as the claim you generated from ClaimCenter.
{
"schema" : "https://json-schema.org/draft/2020-12/schema",
"title" : "AppEvents Message",
"messageId" : "684CD190DBDA197-0000000000000001",
"headers" : {
"kafka.TIMESTAMP" : 1660170960776,
"claimstate" : "open",
"subject" : "",
"primaryobjecttype" : "Claim",
"updateuserid" : "default_data:1",
"language" : "en-US",
"traceabilityid" : "1e34fdff-de74-407e-b0ce-490227bcc308",
"kafka.TOPIC" : "appevents.cc-snapshots.guidewire.dev.gwinteg",
"source" : "grn:v1:cc:guidewire:gwinteg:namerica:rho9:dev:dev:/deployment/andromeda",
"type" : "com.guidewire.iscc.ClaimOpened",
"transactionid" : "e2d71c7a-ee7e-4fc8-8df4-420c1aa48864",
"CamelMessageTimestamp" : 1660170960776,
"includes_previous" : false,
"primaryeventcount" : "9",
"X-B3-Sampled" : "0",
"X-B3-TraceId" : "052b8c85f6a17bc0",
"specversion" : "V1",
"kafka.OFFSET" : 42553,
"id" : "25ed946c-69f4-435c-a94e-5a549a8b19f4",
"kafka.PARTITION" : 2,
"kafka.KEY" : "cc:SUdh75iUmZKE_ZUe18hek",
"objecttype" : "Claim",
"worksetid" : "DEFAULT",
"primaryobjectid" : "cc:SUdh75iUmZKE_ZUe18hek",
"kafka.HEADERS" : {
"ce_traceabilityid" : "1e34fdff-de74-407e-b0ce-490227bcc308",
"ce_partitionkey" : "cc:SUdh75iUmZKE_ZUe18hek",
"ce_version" : "1.2",
"ce_source" : "grn:v1:cc:guidewire:gwinteg:namerica:rho9:dev:dev:/deployment/andromeda",
"ce_time" : "2022-08-10T22:35:56.386Z",
"X-B3-Sampled" : "0",
"X-B3-TraceId" : "052b8c85f6a17bc0",
"ce_graphobjectid" : "cc:SUdh75iUmZKE_ZUe18hek",
"ce_claimstate" : "open",
"ce_objectid" : "cc:SUdh75iUmZKE_ZUe18hek",
"ce_transactionid" : "e2d71c7a-ee7e-4fc8-8df4-420c1aa48864",
"ce_type" : "com.guidewire.iscc.ClaimOpened",
"X-B3-ParentSpanId" : "cd0bff3c918f3d1d",
"ce_specversion" : "1.0",
"ce_graphobjecttype" : "Claim",
"ce_worksetid" : "DEFAULT",
"ce_subject" : "",
"ce_primaryobjectid" : "cc:SUdh75iUmZKE_ZUe18hek",
"ce_updateuserid" : "default_data:1",
"ce_objecttype" : "Claim",
"X-B3-SpanId" : "0c4bb9371ff6f21d",

Using Integration Gateway 69


Guidewire Cloud Platform 2022.09 App Events

"ce_dataref" : "https://appeventsnapshots.api.int.ccs.guidewire.net/api/v1/snapshots/
Claim:cc:SUdh75iUmZKE_ZUe18hek/e2d71c7a-ee7e-4fc8-8df4-420c1aa48864",
"ce_language" : "en-US",
"ce_id" : "25ed946c-69f4-435c-a94e-5a549a8b19f4",
"ce_primaryeventcount" : "9",
"ce_primaryobjecttype" : "Claim"
},
"graphobjectid" : "cc:SUdh75iUmZKE_ZUe18hek",
"X-B3-ParentSpanId" : "cd0bff3c918f3d1d",
"dataref" : "https://appeventsnapshots.api.int.ccs.guidewire.net/api/v1/snapshots/
Claim:cc:SUdh75iUmZKE_ZUe18hek/e2d71c7a-ee7e-4fc8-8df4-420c1aa48864",
"version" : "1.2",
"graphobjecttype" : "Claim",
"partitionkey" : "cc:SUdh75iUmZKE_ZUe18hek",
"X-B3-SpanId" : "0c4bb9371ff6f21d",
"time" : "2022-08-10T22:35:56.386Z",
"objectid" : "cc:SUdh75iUmZKE_ZUe18hek"
},
"body" : {
"coverageInQuestion" : false,
"insured" : {
"displayName" : "Fred Jones1659047066782",
"id" : "cc:SF_xhEu8q5bjQQCrXkARE",
"jsonPath" : "$.contacts[?(@.id=='cc:SF_xhEu8q5bjQQCrXkARE')]",
"type" : "ClaimContact",
"uri" : "/claim/v1/claims/cc:SUdh75iUmZKE_ZUe18hek/contacts/cc:SF_xhEu8q5bjQQCrXkARE"
},
"policyNumber" : "P1659047066778",
"description" : "description",
"lossCause" : {
"code" : "vehcollision",
"name" : "Collision with motor vehicle"
},
"flagged" : {
"code" : "neverflagged",
"name" : "Never flagged"
},
"reportedDate" : "2022-08-10T07:00:00.000Z",
"policyAddresses" : [ {
"addressLine1" : "1659047066812 Somewhere Street",
"city" : "San Mateo",
"country" : "US",
"displayName" : "1659047066812 Somewhere Street, San Mateo, CA 94404",
"id" : "cc:SWAqjHkZbj-GLU0XMD1m6",
"policyAddress" : true,
"policyLabel" : "Policy Contact Address (Insured)",
"postalCode" : "94404",
"state" : {
"code" : "CA",
"name" : "California"
}
} ],
"segment" : {
"code" : "auto_low",
"name" : "Auto - low complexity"
},
"faultRating" : {
"code" : "nofault",
"name" : "No fault"
},
"state" : {
"code" : "open",
"name" : "Open"
},
"id" : "cc:SUdh75iUmZKE_ZUe18hek",
"lobCode" : {
"code" : "PersonalAutoLine",
"name" : "Personal Auto Line"
},
"assignedUser" : {
"id" : "demo_sample:1",
"type" : "User",
"uri" : "/admin/v1/users/demo_sample:1"
},
"claimNumber" : "000-00-000331",
"policy" : {
"insured" : {
"displayName" : "Fred Jones1659047066782",
"id" : "cc:SF_xhEu8q5bjQQCrXkARE",

70 chapter 5: Using Integration Gateway


Guidewire Cloud Platform 2022.09 App Events

"jsonPath" : "$.contacts[?(@.id=='cc:SF_xhEu8q5bjQQCrXkARE')]",
"type" : "ClaimContact",
"uri" : "/claim/v1/claims/cc:SUdh75iUmZKE_ZUe18hek/contacts/cc:SF_xhEu8q5bjQQCrXkARE"
},
"policyType" : {
"code" : "PersonalAuto",
"name" : "Personal Auto"
},
"verifiedPolicy" : false,
"policyNumber" : "P1659047066778",
"currency" : {
"code" : "usd",
"name" : "USD"
},
"producerCode" : "1659047066778",
"id" : "cc:SZpa5KQPQjBYy9Vsx9BP1",
"accountNumber" : "A9",
"effectiveDate" : "2022-02-10T23:35:56.363Z",
"status" : {
"code" : "inforce",
"name" : "In force"
},
"expirationDate" : "2023-02-10T23:35:56.363Z"
},
"reportedByType" : {
"code" : "self",
"name" : "Self/Insured"
},
"assignmentStatus" : {
"code" : "assigned",
"name" : "Assigned"
},
"assignedGroup" : {
"id" : "demo_sample:31",
"type" : "Group",
"uri" : "/admin/v1/groups/demo_sample:31"
},
"reporter" : {
"displayName" : "Fred Jones1659047066782",
"id" : "cc:SF_xhEu8q5bjQQCrXkARE",
"jsonPath" : "$.contacts[?(@.id=='cc:SF_xhEu8q5bjQQCrXkARE')]",
"type" : "ClaimContact",
"uri" : "/claim/v1/claims/cc:SUdh75iUmZKE_ZUe18hek/contacts/cc:SF_xhEu8q5bjQQCrXkARE"
},
"vehicleIncidents" : [ {
"driver" : {
"displayName" : "Fred Jones1659047066782",
"id" : "cc:SF_xhEu8q5bjQQCrXkARE",
"jsonPath" : "$.contacts[?(@.id=='cc:SF_xhEu8q5bjQQCrXkARE')]",
"type" : "ClaimContact",
"uri" : "/claim/v1/claims/cc:SUdh75iUmZKE_ZUe18hek/contacts/cc:SF_xhEu8q5bjQQCrXkARE"
},
"id" : "cc:S2zZlq6qcef_6nGdpIVID",
"vehicle" : {
"color" : "Black",
"displayName" : "2000 Honda Civic (VL1659049017802 / California)",
"id" : "cc:SmQ0ZexNgToSSNWNuI_55",
"licensePlate" : "VL1659049017802",
"make" : "Honda",
"model" : "Civic",
"policyVehicle" : false,
"state" : {
"code" : "CA",
"name" : "California"
},
"style" : {
"code" : "passengercar",
"name" : "Passenger car"
},
"vin" : "0HCM0000000000004",
"year" : 2000
},
"damageDescription" : "Description 1659049017801"
} ],
"lossType" : {
"code" : "AUTO",
"name" : "Auto"
},
"validationLevel" : {

Using Integration Gateway 71


Guidewire Cloud Platform 2022.09 App Events

"code" : "payment",
"name" : "Ability to pay"
},
"lossDate" : "2022-08-10T07:00:00.000Z",
"lossLocation" : {
"addressLine1" : "1659047066813 Somewhere Street",
"city" : "San Mateo",
"country" : "US",
"displayName" : "1659047066813 Somewhere Street, San Mateo, CA 94404",
"id" : "cc:Scetewhtc3yKLWx5ds-Yq",
"policyAddress" : false,
"postalCode" : "94404",
"state" : {
"code" : "CA",
"name" : "California"
}
},
"incidentOnly" : false,
"allValidationLevelsReached" : [ {
"code" : "payment",
"name" : "Ability to pay"
}, {
"code" : "external",
"name" : "Send to external system"
}, {
"code" : "iso",
"name" : "Valid for ISO"
}, {
"code" : "newloss",
"name" : "New loss completion"
}, {
"code" : "loadsave",
"name" : "Load and save"
} ],
"contacts" : [ {
"lastName" : "Jones1659047066782",
"primaryPhoneType" : {
"code" : "work",
"name" : "Work"
},
"displayName" : "Fred Jones1659047066782",
"homePhone" : {
"displayName" : "650-555-3334",
"number" : "6505553334"
},
"roles" : [ {
"active" : true,
"relatedTo" : {
"displayName" : "000-00-000331",
"id" : "cc:SUdh75iUmZKE_ZUe18hek",
"jsonPath" : "$",
"type" : "Claim",
"uri" : "/claim/v1/claims/cc:SUdh75iUmZKE_ZUe18hek"
},
"role" : {
"code" : "reporter",
"name" : "Reporter"
}
}, {
"active" : true,
"relatedTo" : {
"displayName" : "P1659047066778",
"id" : "cc:SZpa5KQPQjBYy9Vsx9BP1",
"jsonPath" : "$.policy",
"type" : "Policy",
"uri" : "/claim/v1/claims/cc:SUdh75iUmZKE_ZUe18hek/policy"
},
"role" : {
"code" : "insured",
"name" : "Insured"
}
}, {
"active" : true,
"relatedTo" : {
"displayName" : "2000 Honda Civic (VL1659049017802 / California)",
"id" : "cc:S2zZlq6qcef_6nGdpIVID",
"jsonPath" : "$.vehicleIncidents[?(@.id=='cc:S2zZlq6qcef_6nGdpIVID')]",
"type" : "VehicleIncident",
"uri" : "/claim/v1/claims/cc:SUdh75iUmZKE_ZUe18hek/vehicle-incidents/cc:S2zZlq6qcef_6nGdpIVID"

72 chapter 5: Using Integration Gateway


Guidewire Cloud Platform 2022.09 App Events

},
"role" : {
"code" : "driver",
"name" : "Driver"
}
} ],
"emailAddress1" : "fred@yahoo.com",
"emailAddress2" : "0000@hotmail.com",
"primaryPhone" : "650-555-3333",
"firstName" : "Fred",
"workPhone" : {
"displayName" : "650-555-3333",
"number" : "6505553333"
},
"primaryAddress" : {
"addressLine1" : "1659047066812 Somewhere Street",
"city" : "San Mateo",
"country" : "US",
"displayName" : "1659047066812 Somewhere Street, San Mateo, CA 94404",
"id" : "cc:SWAqjHkZbj-GLU0XMD1m6",
"postalCode" : "94404",
"state" : {
"code" : "CA",
"name" : "California"
}
},
"id" : "cc:SF_xhEu8q5bjQQCrXkARE",
"cellPhone" : {
"countryCode" : {
"code" : "US",
"name" : "United States (1)"
},
"displayName" : "650-555-3335",
"number" : "6505553335"
},
"contactSubtype" : "Person"
} ]
}
}

Repeat the same review steps for the AssignmentAdded event.


4. Download the recorded events from S3
Eventually, you must download the recorded events to replaying them locally when testing integrations. In
cases, where you recorded a few events, you can download each JSON file using the Download button in the
S3 console.
Note: To download multiple JSON files, you need to use an AWS CLI S3 command. To do that,
you must have the AWS CLI installed and configured. See the Getting started guide in the AWS
CLI User Guide for more information.
a. Open a Command Prompt on Windows or Terminal in Mac and navigate to your integration project root
folder
b. Run the following AWS CLI command, to download multiple files:
aws s3 sync s3://ig-event-recorder/recorded-appevents ./src/test/resources/replay-log-cc --delete --
exclude "*" --include "cc-recording*"

• The command syncs directories and S3 prefixes. Recursively, copies new and updated files from the
source directory to the destination. Only creates folders in the destination if they contain one or more
files.
• Filters all JSONs that do not contain the route id cc-recording* in their name
• Stores the files to ./src/test/resources/replay-log-cc folder in your IntelliJ project

Using Integration Gateway 73


Guidewire Cloud Platform 2022.09 App Events

Note: Getting the following error message means that your AWS credentials are not
properly set:
fatal error: Could not connect to the endpoint URL: "https://ig-event-recorder.s3.use-
east-2.amazonaws.com/?list-type=2&prefix=recorded-appevents%2F&encoding-type=url"

To set the environment variables in the current session, use the following commands:
• On Windows:
set AWS_ACCESS_KEY_ID=<Your AWS Access Key>
set AWS_SECRET_ACCESS_KEY=<Your AWS Secret Key>
set AWS_REGION=<Your AWS region>

• On Mac:
export AWS_ACCESS_KEY_ID=<Your AWS Access Key>
export AWS_SECRET_ACCESS_KEY=<Your AWS Secret Key>
export AWS_REGION=<Your AWS region>

For details see, Set up AWS Credentials and Region for Development.

Related information
“Tutorial: Replay recorded events” on page 77
“Tutorial: Create a record-mode integration” on page 64

Tutorial: Store properties to Property Service


About this task
The App Events component obtains the login credentials from the Property Service to store the recordings to S3. To
ensure that your integration, can record events, you must set the S3 access properties in Guidewire Property Service.
As a prerequisite for this tutorial, you must complete the following:
• Ensure you can access the Guidewire Property Service. See the setup instructions in Managing app properties in
Property Service.

Procedure
1. Obtain your integration app id from the Property Service.
a. Open Swagger UI in a browser, and press Authorize button. The Available authorizations dialog appears.
b. In Available authorizations, select groups and tenant_id and click Authorize.
A screen that confirms your authorization appears. Press Close. The Swagger UI has the required token to
execute the APIs.
c. In Swagger UI, click the GET /applications endpoint.
d. Set the application parameter to igrecordreplay.
e. Execute the request and review the response.
The response looks l this one. The integration id in this example is 996757:
[
{
"id": 996757,
"version": 0,
"name": "igrecordreplay",
"owner": "Guidewire-Cloud-Ops",
"ownerEmail": "gwcp-cco-ops@guidewire.com",
"isPublic": false,
"isTestData": false,
"isCustomerDeveloped": true,
"isShared": false,
"tenancyType": "single",
"createdBy": "0oasj4y8avxIag5rX0h7",
"createdOn": "2022-08-07T22:27:54.095281Z",
"modifiedBy": "0oasj4y8avxIag5rX0h7",
"modifiedOn": "2022-08-074T22:27:54.095281Z"

74 chapter 5: Using Integration Gateway


Guidewire Cloud Platform 2022.09 App Events

}
]

2. Create a settings-definition for the AWS Access Key


a. In Swagger UI, click the POST /applications/{applicationId}/setting-definitions endpoint.
b. Set the applicationId parameter to your integration id.
c. Update the Request body with the values of your integration, as shown below:
{
"nextPageToken": "",
"data": {
"settingName": "gw.appevents.record-replay.record.s3.accessKey",
"isSecret": false,
"settingDescription": "This is the access key for AWS S3 access.",
"insurerProject": null,
"permittedSubscribers": [],
"publisher": {},
"version": 0
}
}

d. Execute the request and review the response.


3. Create a settings-values for the AWS Access Key
a. In Swagger UI, click the POST /setting-values endpoint.
b. In the Request body, choose EnvironmentExample from the Examples: drop-down list.
c. In the example, update the JSON with the <ID>, "<environment>", and "<AWS_ACCESS_KEY>" values that
apply to your integration. For <environment>, provide the environment where you plan to deploy your
integration. For example, "dev":
{
"applicationId": <ID>,
"name": "gw.appevents.record-replay.record.s3.accessKey",
"value": <AWS_ACCESS_KEY>,
"isTenantSpecific": true,
"comment": "setting S3 access key for recording events",
"applyTo": {
"layerType": "environment_level",
"environmentLevel": <environment>}
}
}

d. Execute the request and review the response.


4. Create a settings-definition for the AWS Secret Key
The AWS Secret Key property is a secret. For secrets, you must create a settings-definition to set the
isSecret property to true.
a. In Swagger UI, click the POST /applications/{applicationId}/setting-definitions endpoint.
b. Set the applicationId parameter to your integration id.
c. Update the Request body with the values of your integration, as shown below:
{
"nextPageToken": "",
"data": {
"settingName": "gw.appevents.record-replay.record.s3.secretKey",
"isSecret": true,
"settingDescription": "This is the secret key for AWS S3 access.",
"insurerProject": null,
"permittedSubscribers": [],
"publisher": {},
"version": 0
}
}

d. Execute the request and review the response.


5. Create a settings-values for the AWS Secret Key
a. In Swagger UI, click the POST /setting-values endpoint.
Using Integration Gateway 75
Guidewire Cloud Platform 2022.09 App Events

b. In the Request body, choose EnvironmentExample from the Examples: drop-down list.
c. In the example, update the JSON with the <ID>, "<environment>", and "<AWS_SECRET_KEY>" values that
apply to your integration. For <environment>, provide the environment where you plan to deploy your
integration. For example, "dev":
{
"data": {
"applicationId": <ID>,
"name": "gw.appevents.record-replay.record.s3.secretKey",
"value": "<AWS_SECRET_KEY>",
"isTenantSpecific": true,
"comment": "Setting S3 secret key for recording events",
"applyTo": {
"layerType": "environment_level",
"environmentLevel": "<environment>"
}
}
}

d. Execute the request and review the response.


You can execute the corresponding GET /setting-values API to validate your settings.

Related information
“Tutorial: Create a record-mode integration” on page 64
“Tutorial: Run a record-mode integration” on page 66
“Tutorial: Replay recorded events” on page 77
“Installing the App Events component” on page 58

Replaying app events


In replay mode the integration app runs on your local machine.

About the replay mode


In replay mode, the App Events component reads event messages from a replay log, instead of reading and
processing events from the messaging service. The replay log represents an ordered sequence of messages. It is a
directory of JSON files, that have been previously recorded, stored on S3, and subsequently downloaded to a local
machine. Each JSON file represents a single event using the following schema:
Replay log schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "AppEvents Message"
"type": "object",
"properties": {
"body": {
"type": "object"
},
"headers": {
"type": "object"
},
"messageId": {
"type": "string"
},
},
"additionalProperties": false
}

The replay schema is a simple schema, as the headers are just a collection of key-value pairs, and the body is the
snapshot document content as a JSON object.

Configuring the replay mode


1. Define the following properties to the route.properties file in your integration app:
76 chapter 5: Using Integration Gateway
Guidewire Cloud Platform 2022.09 App Events

gw.appevents.record-replay.mode=<MODE>
gw.appevents.record-replay.replay.dir.<APPEVENT_ROUTE_ID>=<LOCAL_DIR_CONTAINING_EVENT_LOGS>

<MODE>
The possible modes are normal, record, and replay.
<APPEVENT_ROUTE_ID>
The unique id for the route that listens to the events.
<LOCAL_DIR_CONTAINING_EVENT_LOGS>
The folder path on the local machine that contains the of the recorded events
2. Download the recorded messages from AWS S3 and store them in the designated local folder.
3. Run your integration locally.

Related information

“Tutorial: Create a record-mode integration” on page 64


“Tutorial: Run a record-mode integration” on page 66
“Tutorial: Store properties to Property Service” on page 74
“Tutorial: Replay recorded events” on page 77

Tutorial: Replay recorded events

About this task

In replay mode, the App Events component reads events messages from a replay log, instead of reading and
processing events from the messaging service. This tutorial provides instructions about implementing and running a
replay-mode route in an integration app.
As a prerequisite for this tutorial in this section, you must complete the following:
• “Tutorial: Create a record-mode integration” on page 64
• “Tutorial: Run a record-mode integration” on page 66
• Successfully downloaded the recorded events to your local machine.

Procedure

1. In IntelliJ, open the igrecordreplay integration project.


2. In IntelliJ, open the route.properties file and add the following property:
The property defines the replay log folder where you stored the downloaded recordings from S3.
gw.appevents.record-replay.replay.dir.cc-recording=./src/test/resources/replay-log-cc

3. In route.properties, update the record-replay mode to replay.

gw.appevents.record-replay.mode=replay

4. In Gradle tool window, run the runIntegrationApp task.


The application starts and multiple messages appear in the Run console. Locate the message that your route
logged from the route processor processMessage.
2022-08-15T09:55:54,753 INFO [Camel (camel-1) thread #2 - file:./src/test/resources/replay-log-cc] :
Received igrecordreplay com.guidewire.iscc.ClaimOpened event
for entity AppEvents.ObjectInfo(id=cc:SUdh75iUmZKE_ZUe18hek, type=Claim)
in primary entity AppEvents.ObjectInfo(id=cc:SUdh75iUmZKE_ZUe18hek, type=Claim)
in route CCReplayEvents. - {}

Using Integration Gateway 77


Guidewire Cloud Platform 2022.09 App Events

Related information
“Tutorial: Create a record-mode integration” on page 64
“Tutorial: Run a record-mode integration” on page 66
“Tutorial: Store properties to Property Service” on page 74
“Installing the App Events component” on page 58

Event snapshot reference expansion


App Events snapshots represent a full data graph, such as Claim in ClaimCenter, Account, Policy, Job, or
PolicyPeriod in PolicyCenter. These graphs represent a complete picture of a primary object and contain references
to other objects. The references consist of references to admin data, such as Users, Groups, Organizations, and
ProducerCodes. The PolicyPeriod snapshots also contain references to the associated Account, Policy, Job (if any).
These references collectively are known as external references, as the data resides outside the snapshot, in the
snapshots service.
Another type of reference in a snapshot is an internal reference. Snapshot data is normalized, meaning that data is
not duplicated. If an object appears more than once in a snapshot, it is fully defined in one place, and all other places
contain a reference to that object. The reference is a JSON Path to the object where it is defined in the snapshot.
Enabling reference expansions expands all App Events reference headers appevents.*ref and the event body.

Configuring the snapshot reference expansion


The App Events component uses the following three parameters to configure the snapshot reference expansion:
1. refExpansionProvider
Provides a reference to a callback method that the integration developers must implement to define what
reference types in the event graph are to be expanded. If an integration does not define a
refExpansionProvider for its Camel route, then the App Events component does not expand the snapshot
references for that route.
The App Events component calls the RefExpansionProvider#shouldExpandRef() callback method for
every reference that is encountered in the graph.
@FunctionalInterface
public interface RefExpansionProvider {
* @param snapshotType the snapshot type
* @param fieldPath the field name path
* @return true if the reference needs to be expanded, otherwise false.
*/
boolean shouldExpandRef(String snapshotType, List<String> fieldPath);
}

Customers register their callback implementation by using the Camel context registry:
getContext().getRegistry().bind("pcProvider", (RefExpansionProvider) (snapshotType, fieldPath) -> true);

The snapshotType of an event body is defined by the graphobjecttype header of the event. The
snapshotType of an App Events reference header is defined by the type in the snapshot URI.
2. includeRefs
A Boolean parameter that defines whether to fetch the related referenced snapshots.
3. gw.appevents.ref-expansion.suffix
A suffix that is appended to the expanded references in the event message to distinguish the expanded
references from the regular ones. The gw.appevents.ref-expansion.suffix is defined in the
route.properties. If a suffix is not defined, by default, the App Events component uses '_ExpRef' as a
suffix.

Procedure
To configure a snapshot reference expansion for your integration, follow these steps:
78 chapter 5: Using Integration Gateway
Guidewire Cloud Platform 2022.09 App Events

1. Implement a RefExpansionProvider callback to determine what references are to be expanded. The


following Map defines expansion for a snapshot type Policy and field names organization, contacts, and
accountContact references in a snapshot graph.
private static final Map<String, Set<List<String>>> REFS_TO_EXPAND = Map.of(
"Policy", Set.of(List.of("organization"), List.of("contacts", "accountContact")));

2. Bind the implementation in the RouteBuilder route definition:


@Override
public void configure() {
// Expand internal and external references defined in REFS_TO_EXPAND.
context.getRegistry().bind("pcProvider", (RefExpansionProvider) (snapshotType, fieldPath) ->
Optional.ofNullable(REFS_TO_EXPAND.get(snapshotType))
.map(fieldPaths -> fieldPaths.contains(fieldPath))
.orElse(false)
);

from("appevents:pc?id=pc-events&refExpansionProvider=#pcProvider&includeRefs=true")
.routeId("PCEventExpansion")
.process(this::processMessage);
}

3. Define the suffix for expanded references. Set the gw.appevents.ref-expansion.suffix property in the
route.properties file.
gw.appevents.ref-expansion.suffix=_MyExpRef

Using Integration Gateway 79


Guidewire Cloud Platform 2022.09 App Events

80 chapter 5: Using Integration Gateway


chapter 6

Using App Events API

App Events provides a set of APIs that you utilize when developing integrations:
• Webhooks API - A set of REST APIs that integrations can use to manage subscriptions
• Standard Event API - A set of REST APIs that allows integration developers determine exactly what events
InsuranceSuite publishes, and what the data inside those events look like.

App Events Webhooks API


App Events Webhooks API is a REST API that enables caller applications to create and manage subscriptions using
an API instead of the App Events Webhooks UI. As a result, integrators can automate their solutions and provide
better customer experience without increasing the cost.

App Events Webhooks API schema


App Events Webhooks API is built using the OpenAPI Specification and uses the OAuth 2.0 method for
authorization. The schema is a set of JSON objects that define their naming, order, and contents. The
openjson.json file describes each part of the App Events Webhooks API.
Depending on your environment, you can download the openjson.json by using one of the URLs in the following
table:

Environment openjson.json URL


AMER https://webhooks.api.omega2-andromeda.guidewire.net/
(Andromeda) swagger-ui/omega2-andromeda-openapi.json

EU https://webhooks.api.omega2-cartwheel.guidewire.net/
(Cartwheel) swagger-ui/omega2-cartwheel-openapi.json

APAC https://webhooks.api.omega2-circinus.guidewire.net/
(Circinus) swagger-ui/omega2-circinus-openapi.json

Accessing the App Events Webhooks API


The App Events Webhooks API Reference provides full documentation on each API resource and a link to the
openjson.json file. Each endpoint has a URI, displayed in the Development Server field. The relative URI consists
of two parts, api/v1, and the endpoint URI. To access a specific endpoint, append the relative URI to the Webhooks
API service URL:
[webhooks-service-url]/[endpoint relative URI]

Using App Events API 81


Guidewire Cloud Platform 2022.09 App Events

The Webhooks API service URL [webhooks-service-url] depends on the environment and region you are working
in, as shown in the following table:

Environment Webhooks API Service URL


AMER https://webhooks.api.omega2-andromeda.guidewire.net
(Andromeda)
EU https://webhooks.api.omega2-cartwheel.guidewire.net
(Cartwheel)
APAC https://webhooks.api.omega2-circinus.guidewire.net
(Circinus)

For example, the following URL retrieves all subscriptions that are defined in the tenant account:
[webhooks-service-url]/api/v1/subscriptions

App Events Webhooks API resources


Resources refers to the information returned by an API. App Events Webhooks API provides various resources that
caller apps can access through their endpoints. Using the endpoints developers can programmatically execute the
actions that the App Events Webhooks UI provides.
For information on the resources and their endpoints, see the App Events Webhooks API Reference.
• Security
Provides an endpoint that the caller can use to obtain the App Events Webhooks public key for verifying event
payloads. For more information on App Events Webhooks security, see “Payload signature verification” on
page 32.
• Metadata
Provides various endpoints that can be used retrieve information about the environment where the caller uses
App Events in. For example, a list of production and non-production planets, a list of the events that are
82 chapter 6: Using App Events API
Guidewire Cloud Platform 2022.09 App Events

supported on a specified InsuranceSuite (IS) instance, the status of the App Events feature on an IS instance, and
more.
• Subscription management
Provides endpoints that caller apps can use to retrieve, update, create, delete, disable, or enable their
subscriptions. For information creating subscriptions using the Webhooks UI, see “Configure a subscription” on
page 38.
• Endpoint management
Provides endpoints that caller apps can use to retrieve, create, update, and delete the App Events Webhooks
endpoints that the subscriptions deliver events to. For information on endpoints management using the App
Events Webhooks UI, see “Configure an endpoint” on page 45.
• Endpoint domain management
Provides endpoints that caller apps can use to retrieve, create, update and delete the allowed domain patterns for
the App Events Webhooks endpoint URLs. For more information on domain management using the App Events
Webhooks UI, see “Configure allowed domains” on page 50.
• OAuth2 management
Provides endpoints that caller apps can use to retrieve, create, update, and delete auth configurations that are
associated with recipient App Events Webhooks endpoints. For more information on OAuth2 management using
the App Events Webhooks UI, see “Configure auth” on page 48.

App Events Webhooks API endpoints and methods


The endpoints indicate how the caller accesses the resource, while the method indicates the allowed interactions
(such as GET, POST, or DELETE) with the resource.
For information on the resource endpoints, see the App Events Webhooks API Reference.

Parameters
Parameters are options the caller can pass with the endpoint (such as specifying the response format, or the value
returned) to influence the response. There are several types of parameters: header parameters, path parameters, and
query string parameters.
See the App Events Webhooks API Reference for information on the App Events Webhooks API endpoint
parameters.

Response example and schema


The response example shows a sample response from the request example; the response schema defines all possible
elements in the response. The response example is not comprehensive of all parameter configurations or operations,
but it corresponds with the parameters passed in the request example. The response lets developers know if the
resource contains the information they want, the format, and how that information is structured and labeled.
For example, the following is a response example of the <webhooks-service-url>/api/v1/subscriptions
endpoint call.
[
{
"id": "3fa85f64-5717...",
"name": "string",
"events": "string",
"planetGrns": [
"string"
],
"tenantId": "string",
"payloadFilter": "string",
"includeIncompleteEvents": true,
"app": "string",
"createdAt": "2022-08-22",
"createdBy": "string",
"updatedAt": "2022-08-22",
"updatedBy": "string",
"subscriptionEndpoints": [
{

Using App Events API 83


Guidewire Cloud Platform 2022.09 App Events

"id": 0,
"endpointId": "3fa85f64-5717...",
"subscriptionId": "3fa85f64-5717...",
"enabled": true,
"project": "string",
"partitionId": 0,
"endpoint": {
"id": "3fa85f64-5717...",
"name": "string",
"description": "string",
"quadrantType": "DEV",
"status": "ACTIVE",
"url": "string",
"tenantId": "string",
"createdAt": "2022-08-22",
"createdBy": "string",
"updatedAt": "2022-08-22",
"updatedBy": "string",
"subscriptionEndpoints": [
null
],
"oauth2": {
"id": "3fa85f64-5717...",
"name": "string",
"clientId": "string",
"tenantId": "string",
"authorizationUrl": "string",
"scopes": "string",
"status": "VALID",
"createdAt": "2022-08-22",
"updatedAt": "2022-08-22",
"endpoints": [
null
],
"quadrantType": "DEV"
},
"errorMessage": "string"
}
}
]
}
]

The response schema documents the response in a more comprehensive, general way, listing each property that
could possibly be returned, what each property contains, the data format of the values, the structure, and other
details.
For example, the following is the response schema of the [webhooks-service-url]/api/v1/subscriptions
endpoint call.
[Subscription{
id string($uuid)
name* string
maxLength: 255
events* string
planetGrns* [
uniqueItems: true
string]
tenantId* string
payloadFilter string
minLength: 0
maxLength: 10000
includeIncompleteEvents boolean
app* string
createdAt string($date)
createdBy string
updatedAt string($date)
updatedBy string
subscriptionEndpoints [
uniqueItems: true
SubscriptionEndpoint{
id integer($int64)
endpointId* string($uuid)
subscriptionId* string($uuid)
enabled* boolean
project string
partitionId* integer($int32)
subscription {

84 chapter 6: Using App Events API


Guidewire Cloud Platform 2022.09 App Events

}
endpoint Endpoint{
id string($uuid)
name* string
description string
quadrantType* QuadrantTypestringEnum:
[ DEV, PROD ]
status* StatusstringEnum:
[ ACTIVE, PAUSED, INACTIVE, ERROR ]
url* string
tenantId* string
createdAt string($date)
createdBy string
updatedAt string($date)
updatedBy string
subscriptionEndpoints [
uniqueItems: true
{
}]
oauth2 OauthSecurity{
id* string($uuid)
name* string
clientId* string
tenantId* string
authorizationUrl* string
scopes string
status* OauthStatusstringEnum:
[ VALID, INVALID ]
createdAt string($date)
updatedAt string($date)
endpoints [
uniqueItems: true
{
}]
quadrantType* QuadrantTypestringEnum:
[ DEV, PROD ]
}
errorMessage string
}
}]
}]

Related information
“Configuring App Events Webhooks” on page 37
“Payload signature verification” on page 32

Webhooks API authentication


The Webhooks API control access to the data and actions within the Webhooks UI. When a caller tries to access data
or execute an action, the caller must be authenticated and authorized. Making calls from integration apps to
Webhooks through Webhooks API requires using the Client Credentials Flow that is defined in OAuth 2.0 RFC
6749, section 4.4.
OAuth 2.0 uses the bearer token authentication method in which the authentication information is stored in a JSON
Web Token (JWT). The JWT contains both authentication information and authorization information of the
integration app service.
The Webhooks API authorization process consists of the following steps:
1. Create an integration app
See Getting started with integration app development.
2. Add the following scopes to your integration app
• scp.subscriptions.read
• scp.subscriptions.write
• tenant.<tenantId>. To find your tenantId, login to Guidewire Cloud and click the icon with your initials
on the top navigation bar. The tenantId appears in the Tenant property.
Use the 2. Request for adding scopes to Integration Gateway application template to submit a request to
Guidewire Cloud Operations (CCO).
Using App Events API 85
Guidewire Cloud Platform 2022.09 App Events

3. Write a route using the Camel rest component


• Retrieve the security token using the GwAuth utility
• Call an Webhooks API endpoint

Example
The following Camel route calls to Webhooks API /api/v1/subscriptions endpoint to retrieve the list of
subscriptions. To authorize the API call, the route uses the GwAuth utility:
• Defines the webhooksApiURL in route.properties file
• Calls getAuthProcessor method with the two scopes to retrieve the security token
• The getAuthProcessor method stores the security token in the Authorization header
package com.guidewire.integrationgateway;

import org.apache.camel.Exchange;
import org.apache.camel.LoggingLevel;
import org.apache.camel.builder.RouteBuilder;
import javax.inject.Named;
import java.util.Set;
import gw.api.ig.GwUtilities;

@Named
public class GetWebhooksSubscriptions extends RouteBuilder {
@Override
public void configure() throws Exception {

GwUtilities gwUtilities = GwUtilities.get(getContext());

rest().get("/getWebhooksSubscriptions")
.produces("application/json")
.responseMessage()
.code(200)
.message("Webhooks subscriptions were retrieved.")
.endResponseMessage()
.to("direct:listSubscriptions");

from("direct:listSubscriptions")
.process(gwUtilities.getAuthUtils()
.getAuthProcessor(Set.of("scp.subscriptions.read","scp.subscriptions.write",
"tenant.guidewire")))))
.setHeader(Exchange.HTTP_METHOD, constant("GET"))
.removeHeader(Exchange.HTTP_PATH)
.routeId("WebhooksAPI")
.convertBodyTo(String.class)
.toD("{{webhooksApiURL}}/api/v1/subscriptions?bridgeEndpoint=true")
.id("direct:listSubscriptions")
.log(LoggingLevel.DEBUG, "listSubscriptions - The list of subscriptions was retrieved.");
}
}

After deploying your integration, invoke the Get /getWebhooksSubscriptions endpoint from the integration Swagger
UI. The endpoint returns the list of the subscriptions in JSON format:
[
{
"id": "6c0bce61-ba8c-4dta-888c-b5056r1896f8",
"name": "asdf",
"events": "[\"CheckAdded\"]",
"planetGrns": [
"grn:v1:cc:guidewire:ads:*:*:*:demoads"
],
"tenantId": "guidewire",
"payloadFilter": "@\n",
"includeIncompleteEvents": true,
"app": "ClaimCenter",
"createdAt": "2022-06-21",
"createdBy": "psorenson@guidewire.com",
"updatedAt": "2022-06-21",
"updatedBy": "psorenson@guidewire.com",
"subscriptionEndpoints": [
{
"id": 39901,
"endpointId": "735bf7ce-6de5-40bc-a9d1-3bf6fc13d7ec",

86 chapter 6: Using App Events API


Guidewire Cloud Platform 2022.09 App Events

"subscriptionId": "6c0bce61-ba8c-4dta-888c-b5056r1896f8",
"enabled": false,
"project": "ads",
"partitionId": 0,
"endpoint": {
"id": "735bf7ce-6de5-40bc-a9d1-3bf6fc13d7ec",
"name": "travis test prod",
"description": "initial description",
"quadrantType": "PROD",
"status": "ACTIVE",
"url": "https://asdf.com",
"tenantId": "guidewire",
"createdAt": "2021-07-19",
"updatedAt": "2021-07-19",
"errorMessage": ""
}
},
{
"id": 39902,
"endpointId": "6db1f918-ccc7-4fb8-a4cf-a67840264e66",
"subscriptionId": "6c0bce61-ba8c-4e2a-888c-b503b91896f8",
"enabled": true,
"project": "ads",
"partitionId": 3,
"endpoint": {
"id": "6db1f918-ccc7-4fb8-a4cf-a67840264e66",
"name": "Test Lag Offset Metric do not activate",
"description": "initial description",
"quadrantType": "DEV",
"status": "PAUSED",
"url": "https://webhook.site/840d68df-d37d-4d67-97ca-19371f0e3936",
"tenantId": "guidewire",
"createdAt": "2021-06-30",
"updatedAt": "2021-10-13",
"errorMessage": ""
}
}
]
}
]

Standard Event API


App Events provides Standard Event API that developers can use to obtain the App Events status, determine exactly
what events InsuranceSuite publishes, what the data inside those events looks like.
The Standard Event API is published as part of the Guidewire REST API framework. In the base configuration, each
InsuranceSuite application contains a static distribution of the Swagger UI tool. You can use this tool to browse
Standard Event API documentation live from the same server that is publishing the APIs.

Access the Standard Event API Swagger UI


Before you begin
You must have a running InsuranceSuite application server before you can access Swagger UI.
Procedure
1. Start the InsuranceSuite application server. You can run the server locally or on Guidewire Cloud.
2. After the application server starts, open a browser window, and enter a URL using the following syntax.
Replace <applicationURL> with the URL of the InsuranceSuite app:
<applicationURL>/resources/swagger-ui

Swagger UI opens and you can view information on the REST APIs.
3. In the Explore field, update the path to point to the following URL:
<applicationURL>/rest/event/v1/swagger.json

4. Click Explore. The Standard Event API Swagger UI appears.


Using App Events API 87
Guidewire Cloud Platform 2022.09 App Events

Access information about an API endpoint


The Swagger UI provides self-documenting information about each published Standard Event API. App Events
provides the following endpoints:
• Get /events/{eventId}/data
For internal use only. Retrieves a claim or policy event data from the snapshot repository using an event id.
• GET /schemas/{schemaName}/{definitionName}
For internal use only. Returns the schema for the requested definition.
• GET /status
Retrieves the App Events' status (enabled or disabled) on the InsuranceSuite application.
• POST /status/test
Generates an event of type AppEventsTest. Used to test that App Events is provisioned correctly. Downstream
systems, such as Webhooks can verify that they received the event.
• POST /swagger.json
Returns the Swagger schema for the API.
• GET /syncstatus
Get the synchronization status of all App Events EventMigratable instances
• GET /types
Returns the lists of all the events that a specific InsuranceSuite application generates.
Procedure:
The following procedure illustrates how to use GET /types endpoint to retrieve the events generated by a
ClaimCenter app.
1. Standard Event API Swagger UI, click Authorize and enter your credentials for the InsuranceSuite app you are
working with.
2. Select the endpoint you wish to test. For example, GET /types.
3. In the pane that opens, click Try it out, then click Execute. The GET /types operation returns a list of generated
events in the Response body area.
{
"types": [

88 chapter 6: Using App Events API


Guidewire Cloud Platform 2022.09 App Events

{
"dataSchema": {
"name": "Activity",
"packageName": "ext.common.v1.common_ext-1.0"
},
"description": "Activity was added",
"entity": "Activity",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ActivityAdded"
},
{
"dataSchema": {
"name": "Activity",
"packageName": "ext.common.v1.common_ext-1.0"
},
"description": "Activity was changed",
"entity": "Activity",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ActivityChanged"
},
{
"dataSchema": {
"name": "Activity",
"packageName": "ext.common.v1.common_ext-1.0"
},
"description": "Activity was completed",
"entity": "Activity",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ActivityCompleted"
},
{
"description": "Activity was removed",
"entity": "Activity",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ActivityRemoved"
},
{
"dataSchema": {
"name": "AppEventsTest",
"packageName": "gw.events.v1.app_events_test-1.0"
},
"description": "Fired when App Events test is requested.",
"entity": "AppEventsTest",
"group": "admin",
"name": "AppEventsTest"
},
{
"dataSchema": {
"name": "AuthorityLimitProfile",
"packageName": "ext.admin.v1.admin_ext-1.0"
},
"description": "AuthorityLimitProfile was added",
"entity": "AuthorityLimitProfile",
"group": "admin",
"name": "AuthorityLimitProfileAdded"
},
{
"dataSchema": {
"name": "AuthorityLimitProfile",
"packageName": "ext.admin.v1.admin_ext-1.0"
},
"description": "AuthorityLimitProfile was changed",
"entity": "AuthorityLimitProfile",

Using App Events API 89


Guidewire Cloud Platform 2022.09 App Events

"group": "admin",
"name": "AuthorityLimitProfileChanged"
},
{
"description": "AuthorityLimitProfile was removed",
"entity": "AuthorityLimitProfile",
"group": "admin",
"name": "AuthorityLimitProfileRemoved"
},
{
"description": "BulkInvoice was added",
"entity": "BulkInvoice",
"group": "cross",
"name": "BulkInvoiceAdded"
},
{
"description": "BulkInvoice was changed",
"entity": "BulkInvoice",
"group": "cross",
"name": "BulkInvoiceChanged"
},
{
"description": "BulkInvoice was removed",
"entity": "BulkInvoice",
"group": "cross",
"name": "BulkInvoiceRemoved"
},
{
"description": "Fired when the BulkInvoice is added, and each time its status changes.",
"entity": "BulkInvoice",
"group": "cross",
"name": "BulkInvoiceStatusChanged"
},
{
"description": "Catastrophe was added",
"entity": "Catastrophe",
"group": "cross",
"name": "CatastropheAdded"
},
{
"description": "Catastrophe was changed",
"entity": "Catastrophe",
"group": "cross",
"name": "CatastropheChanged"
},
{
"description": "Catastrophe was removed",
"entity": "Catastrophe",
"group": "cross",
"name": "CatastropheRemoved"
},
{
"dataSchema": {
"name": "Check",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Check was added",
"entity": "Check",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "CheckAdded"
},
{
"dataSchema": {
"name": "Check",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Check was changed",
"entity": "Check",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "CheckChanged"
},

90 chapter 6: Using App Events API


Guidewire Cloud Platform 2022.09 App Events

{
"dataSchema": {
"name": "Check",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Deprecated. Use CheckStatusChanged instead.",
"entity": "Check",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "CheckIssued"
},
{
"description": "Check was removed",
"entity": "Check",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "CheckRemoved"
},
{
"dataSchema": {
"name": "Check",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Fired when the check is added, and each time its status changes.",
"entity": "Check",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "CheckStatusChanged"
},
{
"dataSchema": {
"name": "Check",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Deprecated. Use CheckStatusChanged instead.",
"entity": "Check",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "CheckStopped"
},
{
"dataSchema": {
"name": "Check",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Deprecated. Use CheckStatusChanged instead.",
"entity": "Check",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "CheckSubmitted"
},
{
"dataSchema": {
"name": "Check",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Deprecated. Use CheckStatusChanged instead.",
"entity": "Check",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "CheckTransferred"

Using App Events API 91


Guidewire Cloud Platform 2022.09 App Events

},
{
"dataSchema": {
"name": "Check",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Deprecated. Use CheckStatusChanged instead.",
"entity": "Check",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "CheckVoided"
},
{
"dataSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Claim was added",
"entity": "Claim",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ClaimAdded"
},
{
"description": "ClaimAssociation was added",
"entity": "ClaimAssociation",
"group": "cross",
"name": "ClaimAssociationAdded"
},
{
"description": "ClaimAssociation was changed",
"entity": "ClaimAssociation",
"group": "cross",
"name": "ClaimAssociationChanged"
},
{
"description": "ClaimAssociation was removed",
"entity": "ClaimAssociation",
"group": "cross",
"name": "ClaimAssociationRemoved"
},
{
"dataSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Claim was changed",
"entity": "Claim",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ClaimChanged"
},
{
"dataSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Claim changed state to Closed",
"entity": "Claim",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ClaimClosed"
},
{
"dataSchema": {
"name": "ClaimContact",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"

92 chapter 6: Using App Events API


Guidewire Cloud Platform 2022.09 App Events

},
"description": "ClaimContact was added",
"entity": "ClaimContact",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ClaimContactAdded"
},
{
"dataSchema": {
"name": "ClaimContact",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "ClaimContact was changed",
"entity": "ClaimContact",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ClaimContactChanged"
},
{
"dataSchema": {
"name": "ClaimContact",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Fired when the contact of a claim contact changes.",
"entity": "ClaimContact",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ClaimContactContactChanged"
},
{
"description": "ClaimContact was removed",
"entity": "ClaimContact",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ClaimContactRemoved"
},
{
"description": "ClaimContactRole was added",
"entity": "ClaimContactRole",
"group": "primary",
"name": "ClaimContactRoleAdded"
},
{
"description": "ClaimContactRole was changed",
"entity": "ClaimContactRole",
"group": "primary",
"name": "ClaimContactRoleChanged"
},
{
"description": "ClaimContactRole was removed",
"entity": "ClaimContactRole",
"group": "primary",
"name": "ClaimContactRoleRemoved"
},
{
"dataSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Claim changed state from Draft to Open",
"entity": "Claim",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ClaimOpened"

Using App Events API 93


Guidewire Cloud Platform 2022.09 App Events

},
{
"dataSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Claim purged event.",
"entity": "Claim",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ClaimPurged"
},
{
"description": "Claim was removed",
"entity": "Claim",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ClaimRemoved"
},
{
"dataSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Claim changed state from Closed to Opened",
"entity": "Claim",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ClaimReopened"
},
{
"dataSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Claim resync event. Generated only as a result of an administrator requesting a claim
resync. All pending messages for the claim are dumped and the event is fired. Implementors will generally
handle this event to dump the entire claim to bring the remote system up to date.",
"entity": "Claim",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ClaimResync"
},
{
"dataSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Deprecated - test for validity directly in rules. Fired only if
DeprecatedEventGeneration is set to true in config.xml. This event denotes that a new Claim is valid or an
existing Claim has become valid. All other events raised in this database transaction related to the Claim,
including events related to Exposures and other objects associated with the Claim, will be subsumed into this
event.",
"entity": "Claim",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ClaimValid"
},
{
"dataSchema": {
"name": "Coverage",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Coverage was added",

94 chapter 6: Using App Events API


Guidewire Cloud Platform 2022.09 App Events

"entity": "Coverage",
"group": "primary",
"name": "CoverageAdded"
},
{
"dataSchema": {
"name": "Coverage",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Coverage was changed",
"entity": "Coverage",
"group": "primary",
"name": "CoverageChanged"
},
{
"description": "Coverage was removed",
"entity": "Coverage",
"group": "primary",
"name": "CoverageRemoved"
},
{
"dataSchema": {
"name": "Document",
"packageName": "ext.common.v1.common_ext-1.0"
},
"description": "Document was added",
"entity": "Document",
"group": "primary",
"name": "DocumentAdded"
},
{
"dataSchema": {
"name": "Document",
"packageName": "ext.common.v1.common_ext-1.0"
},
"description": "Document was changed",
"entity": "Document",
"group": "primary",
"name": "DocumentChanged"
},
{
"description": "Document was removed",
"entity": "Document",
"group": "primary",
"name": "DocumentRemoved"
},
{
"dataSchema": {
"name": "Document",
"packageName": "ext.common.v1.common_ext-1.0"
},
"description": "This is used by the asynchronous storage to inform the transport that this document needs
to be processed.",
"entity": "Document",
"group": "primary",
"name": "DocumentStore"
},
{
"dataSchema": {
"name": "Endorsement",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Endorsement was added",
"entity": "Endorsement",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "EndorsementAdded"
},
{
"dataSchema": {
"name": "Endorsement",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Endorsement was changed",
"entity": "Endorsement",
"graphSchema": {

Using App Events API 95


Guidewire Cloud Platform 2022.09 App Events

"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "EndorsementChanged"
},
{
"description": "Endorsement was removed",
"entity": "Endorsement",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "EndorsementRemoved"
},
{
"dataSchema": {
"name": "Exposure",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Exposure was added",
"entity": "Exposure",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ExposureAdded"
},
{
"dataSchema": {
"name": "Exposure",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Autopilot disabled on this exposure",
"entity": "Exposure",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ExposureAutopilotDisabled"
},
{
"dataSchema": {
"name": "Exposure",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Autopilot enabled on this exposure",
"entity": "Exposure",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ExposureAutopilotEnabled"
},
{
"dataSchema": {
"name": "Exposure",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Exposure was changed",
"entity": "Exposure",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ExposureChanged"
},
{
"dataSchema": {
"name": "Exposure",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "The exposure state has changed to Closed",
"entity": "Exposure",

96 chapter 6: Using App Events API


Guidewire Cloud Platform 2022.09 App Events

"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ExposureClosed"
},
{
"dataSchema": {
"name": "Exposure",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "The exposure state has changed from Draft to Open",
"entity": "Exposure",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ExposureOpened"
},
{
"description": "Exposure was removed",
"entity": "Exposure",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ExposureRemoved"
},
{
"dataSchema": {
"name": "Exposure",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "The Exposure state has changed from Closed to Open",
"entity": "Exposure",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ExposureReopened"
},
{
"dataSchema": {
"name": "Exposure",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Deprecated - test for validity directly in rules. Fired only if
DeprecatedEventGeneration is set to true in config.xml. This event denotes that a new Exposure is valid or an
existing Exposure has become valid. All events raised in this database transaction related to the Exposure,
including events related to objects off of the Exposure, will be subsumed into this event.",
"entity": "Exposure",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ExposureValid"
},
{
"dataSchema": {
"name": "Group",
"packageName": "ext.admin.v1.admin_ext-1.0"
},
"description": "Group was added",
"entity": "Group",
"group": "admin",
"name": "GroupAdded"
},
{
"dataSchema": {
"name": "Group",
"packageName": "ext.admin.v1.admin_ext-1.0"
},
"description": "Group was changed",
"entity": "Group",

Using App Events API 97


Guidewire Cloud Platform 2022.09 App Events

"group": "admin",
"name": "GroupChanged"
},
{
"description": "Group was removed",
"entity": "Group",
"group": "admin",
"name": "GroupRemoved"
},
{
"description": "Incident was added",
"entity": "Incident",
"group": "primary",
"name": "IncidentAdded"
},
{
"description": "Automation path has changed to VehicleRepair",
"entity": "Incident",
"group": "primary",
"name": "IncidentAutomatedVehicleRepair"
},
{
"description": "Automation path has been changed to VehicleTotalLoss",
"entity": "Incident",
"group": "primary",
"name": "IncidentAutomatedVehicleTotalLoss"
},
{
"description": "Incident was changed",
"entity": "Incident",
"group": "primary",
"name": "IncidentChanged"
},
{
"description": "Incident was removed",
"entity": "Incident",
"group": "primary",
"name": "IncidentRemoved"
},
{
"dataSchema": {
"name": "IntakeInteraction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "IntakeInteraction was added",
"entity": "IntakeInteraction",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "IntakeInteractionAdded"
},
{
"dataSchema": {
"name": "IntakeInteraction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "IntakeInteraction was changed",
"entity": "IntakeInteraction",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "IntakeInteractionChanged"
},
{
"dataSchema": {
"name": "IntakeInteraction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "The requested data was processed and saved to the claim.",
"entity": "IntakeInteraction",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",

98 chapter 6: Using App Events API


Guidewire Cloud Platform 2022.09 App Events

"name": "IntakeInteractionClosed"
},
{
"dataSchema": {
"name": "IntakeInteraction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "The requested data was provided and stored in the IntakeResults field.",
"entity": "IntakeInteraction",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "IntakeInteractionCompleted"
},
{
"dataSchema": {
"name": "IntakeInteraction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "An error occurred which meant the data could not be collected, or saved to the claim.",
"entity": "IntakeInteraction",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "IntakeInteractionError"
},
{
"dataSchema": {
"name": "IntakeInteraction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "The data request was opened.",
"entity": "IntakeInteraction",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "IntakeInteractionOpened"
},
{
"dataSchema": {
"name": "IntakeInteraction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "The data request was refused.",
"entity": "IntakeInteraction",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "IntakeInteractionRefused"
},
{
"description": "IntakeInteraction was removed",
"entity": "IntakeInteraction",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "IntakeInteractionRemoved"
},
{
"dataSchema": {
"name": "IntakeInteraction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "The data request was withdrawn.",
"entity": "IntakeInteraction",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},

Using App Events API 99


Guidewire Cloud Platform 2022.09 App Events

"group": "primary",
"name": "IntakeInteractionWithdrawn"
},
{
"description": "Matter was added",
"entity": "Matter",
"group": "primary",
"name": "MatterAdded"
},
{
"description": "Matter was changed",
"entity": "Matter",
"group": "primary",
"name": "MatterChanged"
},
{
"description": "Matter was removed",
"entity": "Matter",
"group": "primary",
"name": "MatterRemoved"
},
{
"description": "MetroReport was added",
"entity": "MetroReport",
"group": "primary",
"name": "MetroReportAdded"
},
{
"description": "MetroReport was changed",
"entity": "MetroReport",
"group": "primary",
"name": "MetroReportChanged"
},
{
"description": "MetroReport was removed",
"entity": "MetroReport",
"group": "primary",
"name": "MetroReportRemoved"
},
{
"description": "Negotiation was added",
"entity": "Negotiation",
"group": "primary",
"name": "NegotiationAdded"
},
{
"description": "Negotiation was changed",
"entity": "Negotiation",
"group": "primary",
"name": "NegotiationChanged"
},
{
"description": "Negotiation was removed",
"entity": "Negotiation",
"group": "primary",
"name": "NegotiationRemoved"
},
{
"dataSchema": {
"name": "Note",
"packageName": "ext.common.v1.common_ext-1.0"
},
"description": "Note was added",
"entity": "Note",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "NoteAdded"
},
{
"dataSchema": {
"name": "Note",
"packageName": "ext.common.v1.common_ext-1.0"
},
"description": "Note was changed",
"entity": "Note",
"graphSchema": {

100 chapter 6: Using App Events API


Guidewire Cloud Platform 2022.09 App Events

"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "NoteChanged"
},
{
"description": "Note was removed",
"entity": "Note",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "NoteRemoved"
},
{
"dataSchema": {
"name": "Organization",
"packageName": "ext.admin.v1.admin_ext-1.0"
},
"description": "Organization was added",
"entity": "Organization",
"group": "admin",
"name": "OrganizationAdded"
},
{
"dataSchema": {
"name": "Organization",
"packageName": "ext.admin.v1.admin_ext-1.0"
},
"description": "Organization was changed",
"entity": "Organization",
"group": "admin",
"name": "OrganizationChanged"
},
{
"description": "Organization was removed",
"entity": "Organization",
"group": "admin",
"name": "OrganizationRemoved"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Payment was added",
"entity": "Payment",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "PaymentAdded"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Payment was changed",
"entity": "Payment",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "PaymentChanged"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Deprecated - use PaymentStatusChanged instead (fired when the this object is submitted).",
"entity": "Payment",
"graphSchema": {
"name": "Claim",

Using App Events API 101


Guidewire Cloud Platform 2022.09 App Events

"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "PaymentRecoded"
},
{
"description": "Payment was removed",
"entity": "Payment",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "PaymentRemoved"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Fired when the payment is added, and each time its status changes.",
"entity": "Payment",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "PaymentStatusChanged"
},
{
"dataSchema": {
"name": "Policy",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Policy was added",
"entity": "Policy",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "PolicyAdded"
},
{
"dataSchema": {
"name": "Policy",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Policy was changed",
"entity": "Policy",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "PolicyChanged"
},
{
"dataSchema": {
"name": "PolicyLocation",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "PolicyLocation was added",
"entity": "PolicyLocation",
"group": "primary",
"name": "PolicyLocationAdded"
},
{
"dataSchema": {
"name": "PolicyLocation",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "PolicyLocation was changed",
"entity": "PolicyLocation",
"group": "primary",
"name": "PolicyLocationChanged"
},
{
"description": "PolicyLocation was removed",

102 chapter 6: Using App Events API


Guidewire Cloud Platform 2022.09 App Events

"entity": "PolicyLocation",
"group": "primary",
"name": "PolicyLocationRemoved"
},
{
"description": "Policy was removed",
"entity": "Policy",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "PolicyRemoved"
},
{
"description": "RITransaction was added",
"entity": "RITransaction",
"group": "primary",
"name": "RITransactionAdded"
},
{
"description": "RITransaction was changed",
"entity": "RITransaction",
"group": "primary",
"name": "RITransactionChanged"
},
{
"description": "RITransaction was removed",
"entity": "RITransaction",
"group": "primary",
"name": "RITransactionRemoved"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Recovery was added",
"entity": "Recovery",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "RecoveryAdded"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Recovery was changed",
"entity": "Recovery",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "RecoveryChanged"
},
{
"description": "Recovery was removed",
"entity": "Recovery",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "RecoveryRemoved"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "RecoveryReserve was added",
"entity": "RecoveryReserve",
"graphSchema": {
"name": "Claim",

Using App Events API 103


Guidewire Cloud Platform 2022.09 App Events

"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "RecoveryReserveAdded"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "RecoveryReserve was changed",
"entity": "RecoveryReserve",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "RecoveryReserveChanged"
},
{
"description": "RecoveryReserve was removed",
"entity": "RecoveryReserve",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "RecoveryReserveRemoved"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Fired when the recovery reserve is added, and each time its status changes.",
"entity": "RecoveryReserve",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "RecoveryReserveStatusChanged"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Deprecated. Use RecoveryReserveStatusChanged instead.",
"entity": "RecoveryReserve",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "RecoveryReserveSubmitted"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Fired when the recovery is added, and each time its status changes.",
"entity": "Recovery",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "RecoveryStatusChanged"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Deprecated. Use RecoveryStatusChanged instead.",
"entity": "Recovery",
"graphSchema": {

104 chapter 6: Using App Events API


Guidewire Cloud Platform 2022.09 App Events

"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "RecoverySubmitted"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Deprecated. Use RecoveryStatusChanged instead.",
"entity": "Recovery",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "RecoveryVoided"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Reserve was added",
"entity": "Reserve",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ReserveAdded"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Reserve was changed",
"entity": "Reserve",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ReserveChanged"
},
{
"description": "Reserve was removed",
"entity": "Reserve",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ReserveRemoved"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Fired when the reserve is added, and each time its status changes.",
"entity": "Reserve",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ReserveStatusChanged"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Deprecated. Use ReserveStatusChanged instead.",
"entity": "Reserve",

Using App Events API 105


Guidewire Cloud Platform 2022.09 App Events

"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ReserveSubmitted"
},
{
"description": "RiskUnit was added",
"entity": "RiskUnit",
"group": "primary",
"name": "RiskUnitAdded"
},
{
"description": "RiskUnit was changed",
"entity": "RiskUnit",
"group": "primary",
"name": "RiskUnitChanged"
},
{
"description": "RiskUnit was removed",
"entity": "RiskUnit",
"group": "primary",
"name": "RiskUnitRemoved"
},
{
"dataSchema": {
"name": "Role",
"packageName": "ext.admin.v1.admin_ext-1.0"
},
"description": "Role was added",
"entity": "Role",
"group": "admin",
"name": "RoleAdded"
},
{
"dataSchema": {
"name": "Role",
"packageName": "ext.admin.v1.admin_ext-1.0"
},
"description": "Role was changed",
"entity": "Role",
"group": "admin",
"name": "RoleChanged"
},
{
"description": "Role was removed",
"entity": "Role",
"group": "admin",
"name": "RoleRemoved"
},
{
"dataSchema": {
"name": "ServiceRequest",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "ServiceRequest was added",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestAdded"
},
{
"dataSchema": {
"name": "ServiceRequest",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "ServiceRequest was changed",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestChanged"
},

106 chapter 6: Using App Events API


Guidewire Cloud Platform 2022.09 App Events

{
"description": "ServiceRequestDocumentLink was added",
"entity": "ServiceRequestDocumentLink",
"group": "primary",
"name": "ServiceRequestDocumentLinkAdded"
},
{
"description": "ServiceRequestDocumentLink was changed",
"entity": "ServiceRequestDocumentLink",
"group": "primary",
"name": "ServiceRequestDocumentLinkChanged"
},
{
"description": "ServiceRequestDocumentLink was removed",
"entity": "ServiceRequestDocumentLink",
"group": "primary",
"name": "ServiceRequestDocumentLinkRemoved"
},
{
"description": "A new document sent from the Adjuster to Vendor",
"entity": "ServiceRequestDocumentLink",
"group": "primary",
"name": "ServiceRequestDocumentToVendorAdded"
},
{
"dataSchema": {
"name": "ServiceRequestStatement",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "ServiceRequestInvoice was added",
"entity": "ServiceRequestInvoice",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestInvoiceAdded"
},
{
"dataSchema": {
"name": "ServiceRequestStatement",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "ServiceRequestInvoice was changed",
"entity": "ServiceRequestInvoice",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestInvoiceChanged"
},
{
"dataSchema": {
"name": "ServiceRequestStatement",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request invoice operation is performed. This event is only intended to be used
with the 'Core Service Requests' feature.",
"entity": "ServiceRequestInvoice",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestInvoiceOperation_approveinvoice_gw"
},
{
"dataSchema": {
"name": "ServiceRequestStatement",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request invoice operation is performed. This event is only intended to be used
with the 'Core Service Requests' feature.",
"entity": "ServiceRequestInvoice",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},

Using App Events API 107


Guidewire Cloud Platform 2022.09 App Events

"group": "primary",
"name": "ServiceRequestInvoiceOperation_payinvoice_gw"
},
{
"dataSchema": {
"name": "ServiceRequestStatement",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request invoice operation is performed. This event is only intended to be used
with the 'Core Service Requests' feature.",
"entity": "ServiceRequestInvoice",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestInvoiceOperation_rejectinvoice_gw"
},
{
"dataSchema": {
"name": "ServiceRequestStatement",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request invoice operation is performed. This event is only intended to be used
with the 'Core Service Requests' feature.",
"entity": "ServiceRequestInvoice",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestInvoiceOperation_unpayinvoice_gw"
},
{
"dataSchema": {
"name": "ServiceRequestStatement",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request invoice operation is performed. This event is only intended to be used
with the 'Core Service Requests' feature.",
"entity": "ServiceRequestInvoice",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestInvoiceOperation_withdrawinvoice_gw"
},
{
"description": "ServiceRequestInvoice was removed",
"entity": "ServiceRequestInvoice",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestInvoiceRemoved"
},
{
"description": "ServiceRequestMessage was added",
"entity": "ServiceRequestMessage",
"group": "primary",
"name": "ServiceRequestMessageAdded"
},
{
"description": "ServiceRequestMessage was changed",
"entity": "ServiceRequestMessage",
"group": "primary",
"name": "ServiceRequestMessageChanged"
},
{
"description": "ServiceRequestMessage was removed",
"entity": "ServiceRequestMessage",
"group": "primary",
"name": "ServiceRequestMessageRemoved"
},
{
"description": "A new message from Adjuster to Vendor",
"entity": "ServiceRequestMessage",

108 chapter 6: Using App Events API


Guidewire Cloud Platform 2022.09 App Events

"group": "primary",
"name": "ServiceRequestMessageToVendorAdded"
},
{
"dataSchema": {
"name": "ServiceRequest",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request operation is performed. This event is only intended to be used with the
'Core Service Requests' feature.",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestOperation_addinvoice_gw"
},
{
"dataSchema": {
"name": "ServiceRequest",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request operation is performed. This event is only intended to be used with the
'Core Service Requests' feature.",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestOperation_addquote_gw"
},
{
"dataSchema": {
"name": "ServiceRequest",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request operation is performed. This event is only intended to be used with the
'Core Service Requests' feature.",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestOperation_approvequote_gw"
},
{
"dataSchema": {
"name": "ServiceRequest",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request operation is performed. This event is only intended to be used with the
'Core Service Requests' feature.",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestOperation_cancelservicerequest_gw"
},
{
"dataSchema": {
"name": "ServiceRequest",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request operation is performed. This event is only intended to be used with the
'Core Service Requests' feature.",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestOperation_requestrequote_gw"
},
{

Using App Events API 109


Guidewire Cloud Platform 2022.09 App Events

"dataSchema": {
"name": "ServiceRequest",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request operation is performed. This event is only intended to be used with the
'Core Service Requests' feature.",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestOperation_specialistacceptedwork_gw"
},
{
"dataSchema": {
"name": "ServiceRequest",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request operation is performed. This event is only intended to be used with the
'Core Service Requests' feature.",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestOperation_specialistcanceled_gw"
},
{
"dataSchema": {
"name": "ServiceRequest",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request operation is performed. This event is only intended to be used with the
'Core Service Requests' feature.",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestOperation_specialistcompletedwork_gw"
},
{
"dataSchema": {
"name": "ServiceRequest",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request operation is performed. This event is only intended to be used with the
'Core Service Requests' feature.",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestOperation_specialistdeclined_gw"
},
{
"dataSchema": {
"name": "ServiceRequest",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request operation is performed. This event is only intended to be used with the
'Core Service Requests' feature.",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestOperation_specialistresumedwork_gw"
},
{
"dataSchema": {
"name": "ServiceRequest",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},

110 chapter 6: Using App Events API


Guidewire Cloud Platform 2022.09 App Events

"description": "Service request operation is performed. This event is only intended to be used with the
'Core Service Requests' feature.",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestOperation_specialistwaiting_gw"
},
{
"dataSchema": {
"name": "ServiceRequest",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request operation is performed. This event is only intended to be used with the
'Core Service Requests' feature.",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestOperation_submitinstruction_gw"
},
{
"dataSchema": {
"name": "ServiceRequest",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request operation is performed. This event is only intended to be used with the
'Core Service Requests' feature.",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestOperation_updatequoteecd_gw"
},
{
"dataSchema": {
"name": "ServiceRequest",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Service request operation is performed. This event is only intended to be used with the
'Core Service Requests' feature.",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestOperation_updateserviceecd_gw"
},
{
"description": "ServiceRequest was removed",
"entity": "ServiceRequest",
"graphSchema": {
"name": "Claim",
"packageName": "ext.claim.v1.claim_graph_combined-1.0"
},
"group": "primary",
"name": "ServiceRequestRemoved"
},
{
"dataSchema": {
"name": "ServiceRequestStatement",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "ServiceRequestStatement was added",
"entity": "ServiceRequestStatement",
"group": "primary",
"name": "ServiceRequestStatementAdded"
},
{
"dataSchema": {
"name": "ServiceRequestStatement",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"

Using App Events API 111


Guidewire Cloud Platform 2022.09 App Events

},
"description": "ServiceRequestStatement was changed",
"entity": "ServiceRequestStatement",
"group": "primary",
"name": "ServiceRequestStatementChanged"
},
{
"description": "ServiceRequestStatement was removed",
"entity": "ServiceRequestStatement",
"group": "primary",
"name": "ServiceRequestStatementRemoved"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Transaction was added",
"entity": "Transaction",
"group": "primary",
"name": "TransactionAdded"
},
{
"dataSchema": {
"name": "Transaction",
"packageName": "ext.claim.v1.claim_combined_ext-1.0"
},
"description": "Transaction was changed",
"entity": "Transaction",
"group": "primary",
"name": "TransactionChanged"
},
{
"description": "Transaction was removed",
"entity": "Transaction",
"group": "primary",
"name": "TransactionRemoved"
},
{
"dataSchema": {
"name": "User",
"packageName": "ext.admin.v1.admin_ext-1.0"
},
"description": "User was added",
"entity": "User",
"group": "admin",
"name": "UserAdded"
},
{
"dataSchema": {
"name": "User",
"packageName": "ext.admin.v1.admin_ext-1.0"
},
"description": "User was changed",
"entity": "User",
"group": "admin",
"name": "UserChanged"
},
{
"description": "User was removed",
"entity": "User",
"group": "admin",
"name": "UserRemoved"
}
]
}

112 chapter 6: Using App Events API


chapter 7

Initializing App Events for existing data

Transitioning InsuranceSuite event data that was generated in apps where App Events were not enabled require
processing the existing events to create the initial snapshot of the entities that were generated when the entities were
created.
Downstream systems subscribe to events and receive JSON full entity graphs in near real-time. App Events stores
the event snapshots to external storage. This allows the App Events processor to deliver entity snapshots without
using the InsuranceSuite database and ensures that the entity snapshots are historically accurate.
The following diagram illustrates the App Events process:

When an entity, such as claim or policy is created, InsuranceSuite triggers an event that creates and saves the entity
snapshot on the external storage. When an entity is changed, InsuranceSuite triggers another event referencing the
same entity number and Event Messaging sends the event to Kafka. App Events processor picks up the event data
Initializing App Events for existing data 113
Guidewire Cloud Platform 2022.09 App Events

from Kafka and saves it to the same snapshot on the cloud storage, building a graph with data that is related to that
entity.
For a pre-existing entity, the initial snapshot does not exist. When an entity is changed, the change cannot be applied
against the existing snapshot as it does not exist. Synchronization processes create the initial snapshots for the
existing entities.
Typically, you synchronize existing data with App events in the following occasions:
• The InsuranceSuite data was migrated from legacy systems using Guidewire ClaimCenter Data Migration tool
(CMT) or Guidewire PolicyCenter Data Migration tool (PMT). For details, see Transition and Update Standards.
You need to process the migrated data to generate the initial claim graph snapshots and store them to the
application snapshot storage.
• InsuranceSuite app runs on Guidewire Cloud but does not have App Events option enabled. InsuranceSuite has a
database with existing entity data. After enabling App Events, the pre-existing entities do not have full graphs in
the snapshot store. You must process these claims to generate their full graphs.

Initializing App Events for existing ClaimCenter data


About this task
To initiate synchronization with App Events on ClaimCenter, you must ensure that:
• ClaimCenter has a database with existing claims. These claims might have been imported from legacy systems or
created on ClaimCenter before App Events was enabled.
• App Events is enabled on the ClaimCenter app
Synchronizing existing claims with enabled App Events in ClaimCenter requires running a batch process and
verifying the synchronization result.

Procedure
1. Log into ClaimCenter with account that has the admin permissions.
2. Access the Server Tools screens, pressing Alt+Shift+T on any ClaimCenter screen.
3. In Server Tools, open Work Queue Info screen and locate the MigrationApplicationEvents WQ.

4. Ensure that the MigrationApplicationEvents work queue is not stopped. The batch process uses the work queue
and if it is stopped the batch process will fail.
114 chapter 7: Initializing App Events for existing data
Guidewire Cloud Platform 2022.09 App Events

5. In Server Tools, open Batch Queue Info screen and locate the Migrate claims to Application Events batch
process.

6. Click the Run button in Claim Migration Tool and wait until the process finishes.
7. Use “Standard Event API” on page 87 to submit a request to the Get /syncstatus REST endpoint.

The endpoint returns a JSON file with the events that are still processing. Receiving a response like the
following indicates successful completion:
{
"eventMigratableEntitySyncStatus": {}
}

Prioritizing the synchronization order


Guidewire provides a new plugin interface IEventMigratablePriorityPlugin that you can use to prioritize the
order in which the claims are migrated. The plugin interface has one method:
Initializing App Events for existing data 115
Guidewire Cloud Platform 2022.09 App Events

Integer getWorkItemPriority(EventMigratable eventMigratable);

If you want to configure the priority of the migrated claims work item, you can write your own plugin
implementation of IEventMigratablePriorityPlugin plugin interface in Gosu. The Migrate claims to App Events
work queue uses this interface implementation to calculate the priority of each work item. In the implementation,
you return an Integer number for the Claim EventMigratable entity on the work item. This number sets the priority
for the work item. The bigger the number is, the higher the priority of this work item is, and earlier this work item is
picked up by the Migrate claims to App Events work queue for processing.
To implement the plugin, you need to do the following:
1. Write a Gosu or Java class that implements a plugin interface Guidewire Studio™ for ClaimCenter
2. Register the plugin implementation class
The following procedure shows the implementation steps:
1. Start Guidewire Studio™ for ClaimCenter.
2. In Studio, navigate to your own company hierarchy folder.
Note: Store your plugin class in a package located in your own hierarchy, such as
mycompany.plugins. Never store a class in the internal gw.* or com.guidewire.* package
hierarchies.
3. Create a class that implements the plugin interface and the prioritization logic for your system. The following
example implementation shows how to prioritize claims based on PolicyType:
package mycompany.plugin.events

class CCEventMigratablePriorityPlugin implements IEventMigratablePriorityPlugin {

/**
* Sample implementation of {@link IEventMigratablePriorityPlugin}
* to prioritize claims by policy type
*/
override function getWorkItemPriority(eventMigratable : EventMigratable) : Integer {
var priority = 0;
if (eventMigratable typeis Claim) {
switch (eventMigratable.Policy.PolicyType) {
case PolicyType.TC_PERSONALAUTO:
priority = 5
break
case PolicyType.TC_WORKERSCOMP:
priority = 4
break
case PolicyType.TC_HOPHOMEOWNERS:
priority = 3
break
case PolicyType.TC_GENERALLIABILITY:
priority = 2
break
default:
priority = 1
}
}
return priority;
}
}

4. Register your plugin.


a. In Studio in the Project window, navigate to configuration > config > Plugins > registry. Right-click on
registry, and choose New > Plugin. The Plugin window appears.
b. In Plugin, enter the name of your plugin and the interface class
gw.plugin.events.IEventMigratablePriorityPlugin. The registration interface creates a plugin
registry .gwp file, as shown in the following EventMigratablePriorityPlugin.gwp file:

<?xml version="1.0"?>
<plugin
interface="IEventMigratablePriorityPlugin"
name="EventMigratablePriorityPlugin">
116 chapter 7: Initializing App Events for existing data
Guidewire Cloud Platform 2022.09 App Events

<plugin-gosu
gosuclass="gw.plugin.events.CCEventMigratablePriorityPlugin"/>
</plugin>

The App Events WQ calls the registered plugin implementation for every work item it produces to obtain
the priority.

Initializing App Events for existing PolicyCenter data


About this task
To initiate synchronization with App Events on PolicyCenter, you must ensure that:
• PolicyCenter has a database with pre-existing Account, Policy, Job, and PolicyPeriod entities. These entities
might have been imported from legacy systems or created on PolicyCenter before App Events was enabled.
• App Events is enabled on PolicyCenter
Synchronizing existing entities with enabled App Events on PolicyCenter requires running separate batch process
for each entity and verifying the synchronization result. Be careful to run the synchronization batch processes in the
exact order that the following procedure shows.

Procedure
1. Log into PolicyCenter with account that has the admin permissions.
2. Access the Server Tools screens, pressing Alt+Shift+T on any PolicyCenter screen.
3. In Server Tools, open Work Queue Info screen and locate the following work queues:
• SyncAccountAppEvents - synchronizes the Account entities
• SyncJobAppEvents - synchronizes the Job entities
• SyncPolicyAppEvents - synchronizes the Policy entities
• SyncPolicyPeriodAppEvents - synchronizes the PolicyPeriod entities

4. Ensure that the work queues are not stopped. The batch processes use the work queues and if they are stopped
the batch processes will fail.
Initializing App Events for existing data 117
Guidewire Cloud Platform 2022.09 App Events

5. In Server Tools, open Batch Queue Info screen.


6. Click the Run button in Synchronize Accounts with App Events and wait until the process finishes.

7. To validate the synchronization completed, use “Standard Event API” on page 87 to submit a request to the
Get /syncstatus REST endpoint. The endpoint returns a JSON file with the events that are still processing.
Receiving a response like the following indicates successful completion:
{
"eventMigratableEntitySyncStatus": {}
}

8. Click the Run button in Synchronize Policies with App Events and wait until the process finishes.
9. Validate the synchronization completed by submitting a request to the Get /syncstatus REST endpoint.
10. Click the Run button in Synchronize Jobs with App Events and wait until the process finishes.
11. Validate the synchronization completed by submitting a request to the Get /syncstatus REST endpoint.
12. Click the Run button in Synchronize PolicyPeriods with App Events and wait until the process finishes.
13. Validate the synchronization completed by submitting a request to the Get /syncstatus REST endpoint.

118 chapter 7: Initializing App Events for existing data


chapter 8

Appendix I: Sample event payloads

Sample ClaimChanged event payload


The following is a sample entire payload generated by a ClaimChanged event.
{
"notes": {
"cc:17": {
"createdDate": "2021-02-04T22:17:28.202Z",
"author": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
"bodySummary": "Took a recorded statement from the policyholder.",
"topic": {
"code": "general",
"name": "General"
},
"updateTime": "2021-02-04T22:17:28.213Z",
"id": "cc:17",
"body": "Took recorded statement.",
"relatedTo": {
"displayName": "000-00-000461",
"id": "cc:460",
"type": "Claim"
},
"confidential": false
}
},
"insured": {
"displayName": "Ray Newton",
"id": "cc:303",
"policySystemId": "test_pp:2"
},
"jurisdiction": {
"code": "CA",
"name": "California"
},
"policyNumber": "8936642220",
"description": "Bicyclist hit door of car.",
"lossCause": {
"code": "bikecollision",
"name": "Collision with bicycle"
},
"mainContact": {
"displayName": "Ray Newton",
"id": "cc:303",
"policySystemId": "test_pp:2"
},
"$refs": {
"exposures": {
"cc:147": {}

Appendix I: Sample event payloads 119


Guidewire Cloud Platform 2022.09 App Events

},
"notes": {
"cc:17": {}
},
"activities": {
"cc:433": {},
"cc:434": {},
"cc:431": {},
"cc:432": {}
},
"reserves": {
"cc:118": {}
},
"vehicle-incidents": {
"cc:156": {}
},
"contacts": {
"cc:303": {},
"cc:302": {}
},
"policy": {}
},
"flagged": {
"code": "neverflagged",
"name": "Never flagged"
},
"reportedDate": "2021-02-04T22:16:06.602Z",
"policyAddresses": [
{
"addressLine1": "1253 Paloma Ave",
"addressLine2": "Floor 0000",
"addressLine3": "Developer Unit Habitation Cube #0000",
"city": "Arcadia",
"country": "US",
"county": "San Mateo",
"displayName": "1253 Paloma Ave, Floor 0000, Developer Unit Habitation Cube #0000, Arcadia, CA 91007",
"id": "cc:671",
"policyAddress": true,
"policyLabel": "Policy Location #1",
"postalCode": "91007",
"state": {
"code": "CA",
"name": "California"
}
},
{
"addressLine1": "1051 E. Hillsdale Blvd.",
"addressLine2": "Unit 800",
"city": "Foster City",
"country": "US",
"county": "San Mateo",
"displayName": "1051 E. Hillsdale Blvd., Unit 800, Foster City, CA 94404",
"id": "cc:670",
"policyAddress": true,
"policyLabel": "Policy Contact Address (Insured)",
"postalCode": "94404",
"state": {
"code": "CA",
"name": "California"
}
}
],
"segment": {
"code": "auto_mid",
"name": "Auto - mid complexity"
},
"faultRating": {
"code": "thirdparty",
"name": "Other party at fault"
},
"assignedByUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
"state": {
"code": "open",
"name": "Open"
},
"id": "cc:460",

120 chapter 8: Appendix I: Sample event payloads


Guidewire Cloud Platform 2022.09 App Events

"lobCode": {
"code": "PersonalAutoLine",
"name": "Personal Auto Line"
},
"assignedUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
"claimNumber": "000-00-000461",
"policy": {
"policyLocations": [
{
"displayName": "1 (1253 Paloma Ave, Floor 0000, Developer Unit Habitation Cube #0000, Arcadia, CA 91007)",
"id": "cc:120",
"policyLabel": "1 (1253 Paloma Ave, Floor 0000, Developer Unit Habitation Cube #0000, Arcadia, CA 91007)",
"policySystemId": "entity.PolicyLocation:9"
}
],
"policyType": {
"code": "PersonalAuto",
"name": "Personal Auto"
},
"verifiedPolicy": true,
"policyNumber": "8936642220",
"currency": {
"code": "usd",
"name": "USD"
},
"producerCode": "100-002541",
"id": "cc:272",
"accountNumber": "C000143542",
"effectiveDate": "2020-11-07T08:01:00.000Z",
"cancellationDate": "2020-11-07T08:01:00.000Z",
"status": {
"code": "canceled",
"name": "Canceled"
},
"expirationDate": "2021-05-07T07:01:00.000Z"
},
"reportedByType": {
"code": "self",
"name": "Self/Insured"
},
"assignmentStatus": {
"code": "assigned",
"name": "Assigned"
},
"assignedGroup": {
"displayName": "Auto1 - TeamA",
"id": "demo_sample:31"
},
"reporter": {
"displayName": "Ray Newton",
"id": "cc:303",
"policySystemId": "test_pp:2"
},
"reserves": {
"cc:118": {
"coverage": {
"code": "PACollisionCov",
"name": "Collision"
},
"reservingCurrency": {
"code": "usd",
"name": "USD"
},
"createdVia": {
"code": "bizrule",
"name": "Business Rule"
},
"reserveLine": {
"displayName": "(1) 1st Party Vehicle - Ray Newton; Expense - A&O/Vehicle inspection",
"id": "cc:116"
},
"type": {
"code": "Reserve",
"name": "Reserve"
},
"lineItems": [

Appendix I: Sample event payloads 121


Guidewire Cloud Platform 2022.09 App Events

{
"id": "cc:118",
"reservingAmount": {
"amount": "500.00",
"currency": "usd"
},
"transactionAmount": {
"amount": "500.00",
"currency": "usd"
}
}
],
"costCategory": {
"code": "inspection",
"name": "Vehicle inspection"
},
"exposure": {
"displayName": "(1) 1st Party Vehicle - Ray Newton",
"id": "cc:147"
},
"createTime": "2021-02-04T22:17:28.213Z",
"costType": {
"code": "aoexpense",
"name": "Expense - A&O"
},
"transactionAmount": {
"amount": "500.00",
"currency": "usd"
},
"currency": {
"code": "usd",
"name": "USD"
},
"id": "cc:118",
"reservingAmount": {
"amount": "500.00",
"currency": "usd"
},
"status": {
"code": "submitting",
"name": "Submitting"
}
}
},
"vehicle-incidents": {
"cc:156": {
"lossParty": {
"code": "insured",
"name": "Insured's loss"
},
"id": "cc:156",
"vehicle": {
"color": "Black",
"displayName": "2002 Toyota Avalon",
"id": "cc:278",
"make": "Toyota",
"model": "Avalon",
"policyLabel": "Policy Vehicle #2",
"policySystemId": "entity.PersonalVehicle:9",
"policyVehicle": true,
"state": {
"code": "CA",
"name": "California"
},
"style": {
"code": "other",
"name": "Other"
},
"vin": "2",
"year": 2002
}
}
},
"exposures": {
"cc:147": {
"coverage": {
"displayName": "2002 Toyota Avalon",
"id": "cc:480"
},

122 chapter 8: Appendix I: Sample event payloads


Guidewire Cloud Platform 2022.09 App Events

"coverageSubtype": {
"code": "PACollisionCov",
"name": "Collision"
},
"assignmentStatus": {
"code": "assigned",
"name": "Assigned"
},
"assignedGroup": {
"displayName": "Auto1 - TeamA",
"id": "demo_sample:31"
},
"lossParty": {
"code": "insured",
"name": "Insured's loss"
},
"createdVia": {
"code": "bizrule",
"name": "Business Rule"
},
"contactPermitted": true,
"claimOrder": 1,
"jurisdiction": {
"code": "CA",
"name": "California"
},
"type": {
"code": "VehicleDamage",
"name": "Vehicle"
},
"vehicleIncident": {
"displayName": "2002 Toyota Avalon",
"id": "cc:156"
},
"primaryCoverage": {
"code": "PACollisionCov",
"name": "Collision"
},
"tier": {
"code": "1p_pd_low",
"name": "1st Party Physical Damage - Low Complexity"
},
"claimantType": {
"code": "insured",
"name": "Insured"
},
"validationLevel": {
"code": "newloss",
"name": "New loss completion"
},
"segment": {
"code": "auto_mid",
"name": "Auto - mid complexity"
},
"assignedByUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
"state": {
"code": "open",
"name": "Open"
},
"id": "cc:147",
"strategy": {
"code": "unknown",
"name": "Unknown"
},
"claimant": {
"displayName": "Ray Newton",
"id": "cc:303",
"policySystemId": "test_pp:2"
},
"assignedUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
}
}
},
"lossType": {

Appendix I: Sample event payloads 123


Guidewire Cloud Platform 2022.09 App Events

"code": "AUTO",
"name": "Auto"
},
"howReported": {
"code": "internet",
"name": "Internet"
},
"validationLevel": {
"code": "payment",
"name": "Ability to pay"
},
"lossDate": "2021-02-04T15:24:00.000Z",
"activities": {
"cc:433": {
"assignmentStatus": {
"code": "assigned",
"name": "Assigned"
},
"assignedGroup": {
"displayName": "Auto1 - TeamA",
"id": "demo_sample:31"
},
"subject": "Initial 30 day file review",
"importance": {
"code": "notOnCalendar",
"name": "Not On Calendar"
},
"recurring": false,
"dueDate": "2021-03-06T22:17:28.171Z",
"escalated": false,
"description": "Initial 30 Day Review Activity Generated",
"escalationDate": "2021-02-04T22:17:28.171Z",
"priority": {
"code": "normal",
"name": "Normal"
},
"mandatory": false,
"activityPattern": "initial_30day_review",
"externallyOwned": false,
"createTime": "2021-02-04T22:17:28.213Z",
"assignedByUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
"id": "cc:433",
"activityType": {
"code": "general",
"name": "General"
},
"assignedUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
"status": {
"code": "open",
"name": "Open"
}
},
"cc:434": {
"assignmentStatus": {
"code": "assigned",
"name": "Assigned"
},
"assignedGroup": {
"displayName": "Auto1 - TeamA",
"id": "demo_sample:31"
},
"subject": "Get vehicle inspected",
"importance": {
"code": "notOnCalendar",
"name": "Not On Calendar"
},
"recurring": false,
"dueDate": "2021-02-11T22:17:28.184Z",
"escalated": false,
"description": "Vehicle Inspection Activity Generated",
"escalationDate": "2021-02-25T22:17:28.184Z",
"priority": {
"code": "normal",

124 chapter 8: Appendix I: Sample event payloads


Guidewire Cloud Platform 2022.09 App Events

"name": "Normal"
},
"mandatory": false,
"activityPattern": "vehicle_inspection",
"externallyOwned": false,
"createTime": "2021-02-04T22:17:28.213Z",
"assignedByUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
"id": "cc:434",
"activityType": {
"code": "general",
"name": "General"
},
"assignedUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
"status": {
"code": "open",
"name": "Open"
}
},
"cc:431": {
"assignmentStatus": {
"code": "assigned",
"name": "Assigned"
},
"assignedGroup": {
"displayName": "Auto1 - TeamA",
"id": "demo_sample:31"
},
"subject": "Review coverage in question",
"importance": {
"code": "notOnCalendar",
"name": "Not On Calendar"
},
"recurring": false,
"dueDate": "2021-02-08T22:16:06.602Z",
"escalated": false,
"description": "The claim was flagged as coverage in question for the following reason(s). Policy Status:
Canceled",
"escalationDate": "2021-02-18T22:16:06.602Z",
"priority": {
"code": "high",
"name": "High"
},
"mandatory": true,
"activityPattern": "coverage_question",
"externallyOwned": false,
"createTime": "2021-02-04T22:16:06.612Z",
"assignedByUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
"id": "cc:431",
"activityType": {
"code": "general",
"name": "General"
},
"assignedUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
"status": {
"code": "open",
"name": "Open"
}
},
"cc:432": {
"assignmentStatus": {
"code": "assigned",
"name": "Assigned"
},
"assignedGroup": {
"displayName": "Auto1 - TeamA",
"id": "demo_sample:31"
},

Appendix I: Sample event payloads 125


Guidewire Cloud Platform 2022.09 App Events

"subject": "Make initial contact with insured",


"importance": {
"code": "notOnCalendar",
"name": "Not On Calendar"
},
"recurring": false,
"dueDate": "2021-02-05T22:16:06.602Z",
"escalated": false,
"description": "Contact Insured Activity Generated",
"escalationDate": "2021-02-11T22:16:06.602Z",
"priority": {
"code": "urgent",
"name": "Urgent"
},
"mandatory": false,
"activityPattern": "contact_insured",
"externallyOwned": false,
"createTime": "2021-02-04T22:17:28.213Z",
"assignedByUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
"id": "cc:432",
"activityType": {
"code": "general",
"name": "General"
},
"assignedUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
"status": {
"code": "open",
"name": "Open"
}
}
},
"lossLocation": {
"addressLine1": "1051 E. Hillsdale Blvd.",
"addressLine2": "Unit 800",
"city": "Foster City",
"country": "US",
"county": "San Mateo",
"displayName": "1051 E. Hillsdale Blvd., Unit 800, Foster City, CA 94404",
"id": "cc:670",
"policyAddress": true,
"policyLabel": "Policy Contact Address (Insured)",
"postalCode": "94404",
"state": {
"code": "CA",
"name": "California"
}
},
"strategy": {
"code": "unknown",
"name": "Unknown"
},
"incidentOnly": false,
"contacts": {
"cc:303": {
"lastName": "Newton",
"primaryPhoneType": {
"code": "mobile",
"name": "Mobile"
},
"licenseState": {
"code": "CA",
"name": "California"
},
"policySystemId": "test_pp:2",
"displayName": "Ray Newton",
"homePhone": {
"countryCode": {
"code": "US",
"name": "United States (1)"
},
"displayName": "818-555-1212",
"number": "8185551212"
},

126 chapter 8: Appendix I: Sample event payloads


Guidewire Cloud Platform 2022.09 App Events

"editableRoles": [
{
"active": true,
"relatedTo": {
"displayName": "8936642220",
"id": "cc:272",
"type": "Policy"
},
"role": {
"code": "insured",
"name": "Insured"
}
}
],
"roles": [
{
"active": true,
"relatedTo": {
"displayName": "000-00-000461",
"id": "cc:460",
"type": "Claim"
},
"role": {
"code": "maincontact",
"name": "Main Contact"
}
},
{
"active": true,
"relatedTo": {
"displayName": "000-00-000461",
"id": "cc:460",
"type": "Claim"
},
"role": {
"code": "reporter",
"name": "Reporter"
}
},
{
"active": true,
"relatedTo": {
"displayName": "8936642220",
"id": "cc:272",
"type": "Policy"
},
"role": {
"code": "insured",
"name": "Insured"
}
},
{
"active": true,
"relatedTo": {
"displayName": "(1) 1st Party Vehicle - Ray Newton",
"id": "cc:147",
"type": "Exposure"
},
"role": {
"code": "claimant",
"name": "Claimant"
}
}
],
"emailAddress1": "8729@guidewire.com",
"dateOfBirth": "1970-01-01",
"emailAddress2": "8729@hotmail.com",
"primaryPhone": "650-333-3333",
"firstName": "Ray",
"addressBookUID": "pcext:138",
"taxId": "***-**-8729",
"licenseNumber": "B0008729",
"workPhone": {
"displayName": "818-446-1206",
"number": "8184461206"
},
"primaryAddress": {
"CEDEX": "11",
"addressLine1": "1051 E. Hillsdale Blvd.",

Appendix I: Sample event payloads 127


Guidewire Cloud Platform 2022.09 App Events

"addressLine2": "Unit 800",


"city": "Foster City",
"country": "US",
"county": "San Mateo",
"displayName": "1051 E. Hillsdale Blvd., Unit 800, Foster City, CA 94404",
"id": "cc:670",
"postalCode": "94404",
"state": {
"code": "CA",
"name": "California"
}
},
"id": "cc:303",
"cellPhone": {
"countryCode": {
"code": "US",
"name": "United States (1)"
},
"displayName": "650-333-3333",
"number": "6503333333"
},
"contactSubtype": "Person"
},
"cc:302": {
"primaryPhone": "317-333-5900",
"primaryPhoneType": {
"code": "work",
"name": "Work"
},
"policySystemId": "pc:124",
"displayName": "Armstrong and Sons",
"companyName": "Armstrong and Sons",
"editableRoles": [
{
"active": true,
"relatedTo": {
"displayName": "8936642220",
"id": "cc:272",
"type": "Policy"
},
"role": {
"code": "agent",
"name": "Agent"
}
}
],
"roles": [
{
"active": true,
"relatedTo": {
"displayName": "8936642220",
"id": "cc:272",
"type": "Policy"
},
"role": {
"code": "agent",
"name": "Agent"
}
}
],
"emailAddress1": "contact@armstrong.com",
"workPhone": {
"displayName": "317-333-5900",
"number": "3173335900"
},
"primaryAddress": {
"addressLine1": "610 Fifth Avenue",
"city": "Indianapolis",
"country": "US",
"displayName": "610 Fifth Avenue, Indianapolis, IN 46201",
"id": "cc:669",
"postalCode": "46201",
"state": {
"code": "IN",
"name": "Indiana"
}
},
"id": "cc:302",
"contactSubtype": "Company"

128 chapter 8: Appendix I: Sample event payloads


Guidewire Cloud Platform 2022.09 App Events

}
}
}

Sample PolicyChanged event payload


The following is a sample of the entire payload generated by a PolicyChanged event.
Event headers:
ce-time 2021-07-21T08:00:07.46Z
ce-specversion 1.0
ce-primaryobjectid pc:5
ce-primaryobjecttype Account
ce-transactionid f6e64758-ecc0-4f54-9adc-0b0366fbd1a3
ce-version 1.1
ce-primaryeventcount 28
ce-source grn:v1:pc:guidewire:gwinteg:namerica:rho9:dev:int:/deployment/andromeda
ce-id 33dd6cec-6d8c-4e95-bcb6-f59f17b2191c
ce-type com.guidewire.ispc.PolicyChanged
ce-objectid pc:3
ce-objecttype Policy
ce-language en-US
ce-subject
ce-worksetid DEFAULT
ce-partitionkey pc:5
gw-event-signature RUDpIZl0pG35aZGebERFPwVEyiKnKY3QXFI1xx8KDQY...

Event body:
{
"$slices": [
{
"data": {
"product": {
"displayName": "Personal Auto",
"id": "PersonalAuto"
},
"termType": {
"code": "HalfYear",
"name": "6 months"
},
"primaryInsured": {
"displayName": "Wendell Jackson",
"id": "test_pp:8"
},
"preferredCoverageCurrency": {
"code": "usd",
"name": "USD"
},
"policyNumber": "5809276439",
"totalPremium": {
"amount": "1338.00",
"currency": "usd"
},
"uwCompany": {
"code": {
"code": "1111_11111",
"name": "Acme Low Hazard Insurance"
},
"displayName": "Acme Low Hazard Insurance",
"id": "uwc:1"
},
"producerCode": {
"displayName": "100-002541",
"id": "pc:6"
},
"taxesAndSurcharges": {
"amount": "80.00",
"currency": "usd"
},
"mostRecentBoundDate": "2021-04-16T07:01:00.000Z",
"baseState": {
"code": "KY",
"name": "Kentucky"
},
"createdDate": "2021-07-15T16:24:20.175Z",
"primaryLocation": {

Appendix I: Sample event payloads 129


Guidewire Cloud Platform 2022.09 App Events

"displayName": "1: 1199 S Walnut St, Hopkinsville, KY",


"id": "5"
},
"organization": {
"displayName": "Armstrong and Company",
"id": "pc:1"
},
"id": "pc:3",
"periodStart": "2021-04-16T07:01:00.000Z",
"account": {
"displayName": "C000456354",
"id": "pc:5"
},
"totalCost": {
"amount": "1418.00",
"currency": "usd"
},
"periodEnd": "2021-10-16T07:01:00.000Z"
}
}
]
}

130 chapter 8: Appendix I: Sample event payloads


chapter 9

Appendix II: List of Claim subentities

The list of subentities directly related to the Claim entity are as follows:
• Activity • Incident • RIAgreement
• Check • Matter • RIAgreementGroup
• ClaimContact • MedicalContactStatus • RICoding
• ClaimSnapshot • MedicalTreatment • RITransaction
• ConcurrentEmployment • MetroReport • RITransactionSet
• ContribFactor • Negotiation • ReserveLine
• Deductible • Note • Review
• Document • Official • SITrigger
• DrugPrescribed • OtherBenefit • SIUAnswerSet
• EmploymentData • Policy • ServiceRequest
• Evaluation • PropertyFireDamage • SubrogationSummary
• Exposure • PropertyWaterDamage • Transaction
• History • RIAgreement • TransactionSet

Appendix II: List of Claim subentities 131


Guidewire Cloud Platform 2022.09 App Events

132 chapter 9: Appendix II: List of Claim subentities


chapter 10

Guidewire Community request


templates

Customers submit requests to Guidewire Community using the following templates:

1. Request for enabling App Events for an insurer project


Note: App Events is available only for customers that are on InsuranceSuite 2022.09.0 (Flaine) or
later for Guidewire Cloud.
Keep in mind that Standards Based Templates (SBTs) are not supported by App Events in Flaine.
There are limitations on what data can be published using App Events for SBT lines of business. For
example, App Event payloads will not include scheduled items. Guidewire expect SBTs to be
supported with the Garmisch release.
Who should use this template?
This template is for integration developers to use when requesting access to App Events.
Target Audience
Guidewire Cloud Operations resolve the request.
Request Template
Title: "{tenantId} - Request to enable App Events"
Example:
Title: "Enable access to App Events for tenantId acme."
Input:

Input item Description Example


tenantId Identifies the customer. acme
Replace the {tenantId} with the
tenantId from the Guidewire Cloud
Console (GCC) Tenants page.
GWCP region Identifies the AWS region. Currently, amer
amer and emea are supported.

Guidewire Community request templates 133


Guidewire Cloud Platform 2022.09 App Events

Input item Description Example


Insurer projectId The specific customer project that this igwinteg, intakedev, projone
request is for. This is the projectId
that appears in the tenant Cloud Con-
sole URL.
Integration Id Optional. The name of the integration igintake1, igintake2
Note: This value must be specified app as defined in
only if an integration app needs to integration:
be configured for App Events at the name: <name>
same time Insurance Suite is being
in the gw-integration.yml file of the
configured for App Events.
integration app project.
Note: The integration app must
already be provisioned in order to be
configured for App Events.

Note:
• New customers get the tenantId and projectId documented on the CASE ticket in every initial star-
system provisioning request
• Existing customers can find the tenantId and projectId in Guidewire Cloud Console (GCC) URL.
To see the URL, login to GCC, select your project, and hover the mouse over the Environments tab on
the side menu. The URL appears at the browser bottom status bar.
In the GCC URL, insurer is the tenant that follows /tenants/ and project is what follows /projects/.
For example, in the following URL, the tenantId is customer, and the projectId is customerproject:

https://gcc.orange.guidewire.net/tenants/customer/projects/customerproject/
environments

+If you are still unsure where to find your project information, you can ask the Technical Account
Manager (TAM) assigned to your account or create a ticket in community to request information.

134 chapter 10: Guidewire Community request templates


chapter 11

Release Notes

This section contains the App Events and App Events Webhooks release notes. Releases are organized
chronologically, with the most recent release first.

App Events 2022.09.0 (Flaine)


Release date: 10/24/2022

New and changed

App Events is generally available in ClaimCenter and PolicyCenter 2022.09 (Flaine). It is an essential part of the
Guidewire Integration Framework that represents the new approach for outbound integrations between
InsuranceSuite and external systems. App Events enable downstream systems to subscribe to business events and
receive up-to-date claim and policy information in near-real time without coding.
For detailed information about how to use App Events, see the App Events documentation.
Key features:
• Supports for PolicyCenter APD lines 2022.09 (Flaine) or later
• Supports for ClaimCenter version 2022.09 (Flaine) or later
• Supports Integration Gateway 1.1.0 or later
• Supports OAuth2 method for authenticating event consumer endpoints
• Supports wildcard event and payload filters with Webhooks
• Supports record and replay of App Events using the App Events component in Integration Gateway apps
• Supports graph expansion of App Events using the App Events component in Integration Gateway apps
• Enable App Events to be used with claims created before the App Events feature was enabled, migrated claims
and restored claims. Supports initializing App Events database from ClaimCenter database.
• Enable App Events to be used with policies created before the App Events feature was enabled, migrated policies
and restored policies. Supports initializing App Events database from PolicyCenter database.

Known issues

Standards Based Templates (SBTs) are not supported by App Events in Flaine. There are limitations on what data
can be published using App Events for SBT lines of business. For example, App Event payloads will not include
scheduled items. Guidewire expect SBTs to be supported with the Garmisch release.
Release Notes 135
Guidewire Cloud Platform 2022.09 App Events

136 chapter 11: Release Notes

You might also like