Application Events For Developers
Application Events For Developers
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
Contents
Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6
3
Guidewire Cloud Platform 2022.09 App Events
4
Guidewire Cloud Platform 2022.09 App Events
5
Guidewire Cloud Platform 2022.09 App Events
Support
6 Support
chapter 1
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.
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.
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
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.
Related information
Comparison
The following table explains the differences between App Events Webhooks and Integration Gateway event delivery
mechanisms:
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.
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
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
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.
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.
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": {
"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"
]
}
}
}
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"
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"
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
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
<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>
<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
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.
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
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
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
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
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.
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
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
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
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-----
@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";
try {
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initVerify(publicJWK.toRSAKey().toPublicKey());
final var headersContent = generateHeadersContent(headers);
final var body = payload.getBytes(StandardCharsets.UTF_8);
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);
}
}
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.
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.
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
Click the icons on the Subscriptions screen to perform the following actions:
Edit a subscription.
Delete a subscription.
Procedure
1. In App Events Webhooks, click Subscriptions.
2. Click Add New.
The Add a New Subscription screen appears.
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
Related information
“Configure an endpoint” on page 45
“Configure auth” on page 48
Related information
“Configure allowed domains” on page 50
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)",
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,
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"
}
}
]
}
The result:
{
"accountNumber": "Joe Hiller 2",
"accountHolder": null,
"accountStatus": "Active",
"frozen": false,
"primaryLocation": null,
"businessOperationsDescription": "business description",
"producerCodes": [],
"industryCode": "0740"
}
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.
Procedure
1. In App Events Webhooks, click Endpoints on the navigation bar.
The Endpoints screen appears:
Related information
Related information
Manage an endpoint
To manage the endpoints in your project, click at the right end of the selected endpoint in the list:
Edit an endpoint
When editing an endpoint, you can update the Endpoint Name, the URL, and the Auth properties only.
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.
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:
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
To update a domain pattern, click on the domain pattern row. You can update the pattern expression and the
environment the pattern applies to.
Related information
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>"
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
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
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";
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
See also
• “Tutorial: Configure an event for a custom entity” on page 53
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:
name Policy
fkentity Policy
nullok false
columnName PolicyID
Configuring custom events 53
Guidewire Cloud Platform 2022.09 App Events
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"
]
}
},
"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
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 )
}
{
"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"
}
}
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
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.
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"
}
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:
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.
@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")
}
}
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")
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);
})
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.
if (log.isDebugEnabled()) {
log.debug("Message headers {}", msg.getMessage().getHeaders());
log.debug("Message body {}", msg.getMessage().getBody());
}
//add custom code to do processing
}
}
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
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>
}
}
}
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
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 {
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'
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
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.
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.
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",
"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",
"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" : {
"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"
},
"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"
} ]
}
}
• 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
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
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"
}
]
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>"
}
}
}
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
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.
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
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
gw.appevents.record-replay.mode=replay
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
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
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
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.
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
The Webhooks API service URL [webhooks-service-url] depends on the environment and region you are working
in, as shown in the following table:
For example, the following URL retrieves all subscriptions that are defined in the tenant account:
[webhooks-service-url]/api/v1/subscriptions
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.
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.
"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 {
}
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
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 {
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",
"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": ""
}
}
]
}
]
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
{
"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",
"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"
},
{
"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"
},
{
"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"
},
"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"
},
{
"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",
"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": {
"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",
"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",
"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",
"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"
},
"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": {
"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",
"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",
"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",
"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": {
"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",
"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"
},
{
"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"
},
"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",
"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"
},
{
"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"
},
"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"
},
"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"
}
]
}
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.
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": {}
}
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
/**
* 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;
}
}
<?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.
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
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.
},
"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",
"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": [
{
"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"
},
"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": {
"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",
"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"
},
"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.",
}
}
}
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": {
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
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.
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 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