Guidewire Cloud API Consumer Guide 2024
Guidewire Cloud API Consumer Guide 2024
Contents
Support.......................................................................................................................................................... 13
Part 1
Basic REST operations........................................................................................................................ 15
Contents 3
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
4 Contents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Part 2
Optimizing calls.......................................................................................................................................91
Contents 5
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Part 3
Business flows: FNOL and adjudication.....................................................................................143
6 Contents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Contents 7
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
8 Contents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Part 4
Business flows: Financials...............................................................................................................293
22 Reserves......................................................................................................................................................... 295
Overview of reserves in ClaimCenter............................................................................................................. 295
Querying for reserves..................................................................................................................................... 296
Creating reserves............................................................................................................................................298
Example of creating reserves................................................................................................................. 299
Example of adding to reserves............................................................................................................... 301
Acknowledging reserve transactions..............................................................................................................302
23 Creating checks.............................................................................................................................................. 303
Querying for check sets and checks............................................................................................................... 304
POSTing checks...............................................................................................................................................306
Check creation in ClaimCenter............................................................................................................... 306
Check creation through Cloud API..........................................................................................................307
Example of creating a minimal check set............................................................................................... 308
Recurrences....................................................................................................................................................309
Recurrences in ClaimCenter................................................................................................................... 309
Recurrences in Cloud API....................................................................................................................... 309
Sending checks every X months on the Nth day.................................................................................... 310
Sending checks every X months on the Nth dayOfWeek....................................................................... 310
Sending checks every X weeks on dayOfWeek....................................................................................... 311
Deductible handling....................................................................................................................................... 311
Contents 9
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Part 5
Business flows: Framework APIs.................................................................................................. 351
28 Activities........................................................................................................................................................ 353
Querying for activities.................................................................................................................................... 353
Creating activities........................................................................................................................................... 355
Assigning activities......................................................................................................................................... 356
Assignment options................................................................................................................................ 357
Assignment examples............................................................................................................................. 357
Retrieving recommended assignees.......................................................................................................359
10 Contents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Contents 11
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
12 Contents
Support
Guidewire customers
[Link]
Guidewire partners
[Link]
part 1
The following topics discuss how caller applications can execute fundamental REST operations on Cloud API, and the
Guidewire-specific enhancements to these operations. This includes how to:
• Construct GET requests to query for data
• Use query parameters to refine response payloads
• Construct POST requests to create new data
• Construct PATCH requests to modify existing data
• Construct DELETE requests to remove data
InsuranceSuite Cloud API for ClaimCenter is a set of RESTful system APIs that caller applications can use to request
data from or initiate action within ClaimCenter. Cloud API is built on top of the Guidewire REST API framework
using the Swagger 2.0 Specification. The APIs in Cloud API are also referred to as the system APIs.
This topic provides an overview of the APIs available in Cloud API and how you can view them.
If you are coding a consumer application and have limited experience with REST APIs, the “REST API fundamentals”
on page 24 section provides a brief overview of how REST APIs work in Cloud API.
Note: The /apis endpoint returns all REST APIs for ClaimCenter. This includes some APIs that are not part of
Cloud API, such as /system/v0/database and /system/v0/maintenance. The only APIs that are part of
Cloud API are the ones listed in the previous table. These are the only APIs that have access to Cloud API
features, such as request inclusion and authentication.
Cloud API for ContactManager consists of the following APIs:
Note: The /apis endpoint returns all REST APIs for ContactManager. This includes some APIs that are not
part of Cloud API, such as /system/v0/database and /system/v0/maintenance. The only APIs that are part
of Cloud API are the ones listed in the previous table. These are the only APIs that have access to Cloud API
features, such as request inclusion and authentication.
You can use the API path to view metadata about the API. This is discussed in detail in the following section.
Release numbers
Every release of Cloud API has a three-digit version number. The first digit is the version's major release number. The
second digit is the version's minor release number. For example, suppose the latest release of Cloud API has a version
number of 1.5.0. This release is major release 1 and minor release 5.
The release number can be seen in the API definition. For example, in Swagger UI, when you view an API, the version
number appears in a gray bubble next to the API name. (Note that individual APIs do not have distinct version
numbers. The version numbers that appear in the API definition are for the entire Cloud API release.)
For every API, the major release number is also part of the endpoint path. It is the number that appears after the "/v".
For example, the first major release of the Admin API has a path of /admin/v1. If there was a theoretical ninth major
release of the Admin API, its path would be /admin/v9.
Release Month Version # Compared to the previous release, this Major versions in this release
release...
January 1.0.0 ...is identical or additive /admin/v1
April 1.1.0 ...is identical or additive /admin/v1
July 1.2.0 ...is identical or additive /admin/v1
October 1.3.0 and 2.0.0 ...includes changes to existing functionality /admin/v1 (identical or additive to July's release),
and /admin/v2 (containing the changed
functionality)
Swagger UI
Swagger UI is an open source tool that presents API definitions as interactive web pages. For information on Swagger
UI, refer to the Swagger web site: [Link]
Swagger UI is automatically bundled with ClaimCenter.
Swagger UI can be helpful when viewing schema information. Swagger UI presents this information hierarchically.
Child schemas are indented with respect to parent schemas, and individual nodes of the hierarchy can be expanded and
collapsed. Searching through a complex schema is relatively straightforward in Swagger UI.
However, Swagger UI strips out some of the metadata that is present in the source files. For example, Guidewire-
proprietary tags are not rendered in Swagger UI. When you need access to all the metadata for an API, it may be better
to call the /[Link] endpoint directly.
Swagger UI also requires access to a running instance of ClaimCenter. If you do not have access to a running instance,
you may want to use the Guidewire API References site.
Note: Swagger UI also has the capability to send requests to a working endpoint and observe responses.
However, Guidewire recommends using Swagger UI only to view API definitions. The APIs in Cloud API are
significantly robust. When sending requests using Swagger UI, the performance time for getting responses can
be unacceptably long. Also, if you attempt to send calls from Swagger UI and log into the ClaimCenter user
interface on the same machine, the two systems may attempt to share the same session, and either or both may
stop working. For more information on recommended request tools, see “Requests and responses” on page
28.
Results
The following screenshot shows the top of the Swagger UI display of the Common API.
Information in Swagger UI
The Cloud API version number at the top in a gray bubble after the API name. (Note that individual APIs do not have
distinct version numbers. The version numbers that appear in Swagger UI are for the entire Cloud API release.)
Every endpoint in the API appears in a list. For each API, the following information is shown by default:
• The endpoint's operation (such as GET)
• The endpoint's path (such as /activities)
• An endpoint summary (such as "Returns a list of activities assigned to the current user")
If you click the operation button, additional information about the endpoint appears. This includes:
Postman
You can call the API definition endpoints using a request tool. Request tools are not automatically bundled with
InsuranceSuite applications. You must download and install them on your own.
Postman is a request tool that Guidewire recommends. This tool has the ability to:
• Save API calls, including headers and payloads
• Save collections of calls
• Automatically create a collection of calls for a schema's paths by importing the Swagger schema file
• Share collections with other developers on your team
For more information and to download the tool, see [Link]
Install Postman. For more information and to download the tool, see [Link]
This task does not involve authentication information. This is because every type of caller can request API metadata,
including unauthenticated callers.
Procedure
1. Identify the path for the API. (For a list of paths for each API, see “List of APIs in Cloud API” on page 17.)
2. Start ClaimCenter.
3. Start Postman.
4. In Postman, start a new request by clicking the + tab to the right of the Launchpad tab.
5. Under the Untitled Request label, make sure that GET is selected. (This is the default operation.)
6. In the Enter request URL field, enter the following URL: <applicationURL>/rest<APIpath>/[Link] (or
<applicationURL>/rest<APIpath>/[Link]). For example, to view the Common API on a local instance
of ClaimCenter, enter the following:
• [Link] (OR [Link]
[Link])
7. Click the Send button to the right of the request field.
Results
The API information appears in the results pane. For example, the following is the first part of the results when calling
the previously referenced [Link] endpoint:
{
"components": {
"parameters": {
"activityId": {
"description": "The REST identifier for the activity, as returned via previous requests that return a
list of activities\n",
"in": "path",
"name": "activityId",
"required": true,
"schema": {
"type": "string"
}
},
...
For example, the following HTTP request retrieves the metadata for the Admin API. It also enables filterByUser and
prettyPrint.
[Link]
• An endpoint summary (such as "Returns a list of activities assigned to the current user")
The right pane shows Response samples. You can expand the [Link] note to see the fields on the parent resource.
If there is an included node, you can expand it to see the child resources for the endpoint.
1. The caller application constructs a request object. The request object consists of:
• A header, which can contain authentication information and other metadata.
• A payload, when necessary.
2. The caller application sends the request to Cloud API using an HTTP command.
• The command calls a specific endpoint.
• The command may include query parameters that further identify the data that is desired.
• The request object is sent with the command.
3. Cloud API processes the request.
• This activity uses all of the InsuranceSuite application logic, such as validation logic and pre-update rules.
• The request is restricted by authorization controls within Cloud API.
4. Cloud API responds with an HTTP response code (such as 200 for success) and a response object. The response
object consists of:
• A header
• A payload, when necessary.
Resources
The primary mechanism for passing information between the caller application and ClaimCenter is the resource. A
resource is an instance of data that you can create, modify, delete, or query for. Resources are defined in JSON schema
files.
Every resource has a type. The type defines the Guidewire data model entities that the resource maps to. For example,
Activity resources map to the Activity data model entity. In most cases, each resource maps to a single data model
entity. However, there are some resources which map to multiple data model entities. For example, the ClaimContact
resource maps to three data model entities in ClaimCenter: ClaimContact, Contact, and ClaimContactRole.
Resources contain a set of fields. Each field stores information about the resource. Depending on the context, fields are
also referred to as properties or attributes.
Resources are exchanged in the payloads of the request and response objects. The payload is a block of JSON-
formatted text that contains fields from the relevant resources and their values. The following is a portion of the
response payload for an Activity resource.
"attributes": {
"assignedGroup": {
"displayName": "Auto1 - TeamA",
"id": "demo_sample:31"
},
"assignedUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
"dueDate": "2020-11-16T08:00:00.000Z",
"id": "xc:20",
"priority": {
"code": "urgent",
"name": "Urgent"
"subject": "Contact claimant"
}
A set of resources is called a collection. For example, /contact/xc:203/addresses (the addresses associated with
contact xc:203) is a collection.
Endpoints
Every API consists of a set of endpoints. An endpoint is a command that a caller application can use to request data
from or trigger action in ClaimCenter. For example, the /common/v1/activities endpoint can be used to either
request data about ClaimCenter activities or trigger actions related to ClaimCenter activities. When referenced in
documentation, endpoints start with a slash (/), such as the /activities endpoint. Endpoints are defined in Swagger
schema files.
In Cloud API, the endpoint path (the full name of the endpoint) includes the API and the version. For convenience
sake, the documentation often refers to endpoints using only the last part of the endpoint path. For example, the /rest/
common/v1/activities endpoint is often referred to simply as "the /activities endpoint".
Endpoints in Cloud API have four fundamental components: root resources, child resources, methods, and paths.
Root resources
Every endpoint has a root resource. The root resource is the resource which the endpoint creates, updates, deletes, or
queries for. Every call to an endpoint makes use of the root resource.
For example, the root resource for the /common/v1/activities endpoint is Activity. This endpoint is used to
potentially create, update, delete, or queries for activities.
Child resources
Most endpoints also include child resources. A child resource is a resource related to the root resource. Child resources
improve the usability of an endpoint by providing access to information related to the root resource. For example, the /
common/v1/activities endpoint has one child resource - Notes. This means you could use the endpoint to:
Methods
A method is a type of action a caller application can take on a resource through an endpoint. Methods are also referred
to as verbs or operations. Cloud API supports the following subset of HTTP methods:
• GET - Used to request resources.
• POST - Used to create resources. Also used to execute business actions, such as quoting a submission or
submitting a claim.
• PATCH - Used to update resources.
Paths
Every endpoint has a path. The path is the portion of the URL used by caller applications to identify the specific
endpoint.
rest/<APIname>/<APImajorVersion>/<endpointName>
For most endpoints, the endpoint name is the same as the resource name, with the following conventions and caveats:
• If the endpoint's root resource is an element, the endpoint name ends in a singular noun (such as /activity) or a
resource reference (such as /activity/{activityId}).
• If the endpoint's root resource is a collection, the endpoint name ends in a plural noun (such as /activities).
• If the endpoint executes a business action, the endpoint name ends in a verb (such as /{activityId}/assign).
• The endpoint name is often close to, but not identical to, the resource name.
◦ Endpoint names use lower case, whereas resource names use mixed case (for example, the root resource for
the /activity endpoint is Activity)
◦ Endpoint names use hyphens to separate words, whereas resource names do not (for example, the root resource
for the /fixed-property-incidents endpoint is FixedPropertyIncident)
◦ In some cases, the endpoint name may differ from the root resource name (for example, the root resource for
the /contacts endpoint is ClaimContact)
[Link]
\__________________/\______________________________/\___________________/
application URL endpoint path query parameters
Some requests require a payload. The payload is a block of JSON-formatted text that contains information about one or
more resources associated with the operation. Typically:
• GETs and DELETEs do not require request payloads.
◦ For a GET, you only need to identify the resource you want information about, and this is done in the URL.
◦ For a DELETE, you only need to identify the element to delete, and this is done in the URL.
• POSTs and PATCHes do require request payloads.
◦ For a POST, you must specify data about the element to create.
◦ For a PATCH, you must specify the data about the element that must be updated.
Responses
A response is the set of information returned by an API endpoint for a request to the caller application.
Some responses include a payload. The payload contains information about one or more resources that are returned by
the operation. For example, for a request to get all open activities assigned to a given user, the response includes a
payload with information about the open activities. For more information about the payload structure, see “GETs” on
page 33.
The outcome of the operation is specified as an HTTP status code, also referred to as a response code. These codes are
three-digit numbers. The general meanings of these codes are defined in the following table:
• A default instance of ClaimCenter installed on your machine that contains only the Demo sample data set.
• An instance of Postman.
This tutorial walks you through the process of setting up this environment.
If your instance of ClaimCenter is installed on a different machine, you will need to adjust the endpoint URLs provided
in the tutorials. Also, if you create data in addition to the Demo sample data, then your responses may differ from the
ones described in the tutorials.
Tutorial steps
1. Install Postman. (For more information, refer to [Link]
2. Start ClaimCenter and load the Demo sample data set.
You can test your environment by sending your first Postman request.
1. Open Postman.
2. Start a new request by clicking the + to the right of the Launchpad tab.
3. Every request in Postman requires some form of authorization:
a. Click the Authorization tab.
b. For the Type drop-down list, select Basic Auth.
c. In the Username field, enter aapplegate.
d. In the Password field, enter gw.
4. Under the Untitled Request label, make sure that GET is selected. (This is the default operation.)
5. In the Enter request URL field, enter the following URL: [Link]
activities
6. Click the Send button to the right of the request field.
{
"count": 25,
"data": [
{
"attributes": {
"activityPattern": "contact_claimant",
"assignedGroup": {
"displayName": "Auto1 - TeamA",
"id": "demo_sample:31"
},
"assignedUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
...
Troubleshooting: No response
Requests can be sent only to running applications. All of the tutorials in this documentation require that ClaimCenter is
running. If you send a request when the application is not running, you will see an error similar to the following:
Could not get any response
Troubleshooting: NotFoundException
Unless it is stated otherwise, all of the tutorials use basic authentication and the aapplegate user. If you encounter a
NotFoundException such as the following example, this could be caused by not providing correct authentication
information for this user.
"status": 404,
"errorCode": "[Link]",
"userMessage": "No resource was found at path /common/v1/activities"
GETs
This topic discusses how the GET method queries for data and the structure of the response payload. For information
on how you can add query parameters to a GET URL to refine the response, see “Query parameters” on page 47.
If you want to interact directly with the concepts in this topic, go to the following tutorials:
• “Tutorial: Send a basic Postman request” on page 36
• “Tutorial: Send a Postman request with included resources” on page 41
Overview of GETs
A GET is an HTTP method that is used to retrieve data from an InsuranceSuite application.
There are two types of GETs:
• A collection GET is a GET that returns a collection of one or more resources. Collection GETs have paths that end
in a plural noun, such as GET /activities/xc:1227/notes.
• An element GET is a GET that returns a single, specific resource. Element GETs have paths that end in the ID of
the specific resource. For example, GET /activities/xc:1227.
When a GET is successful, the response includes:
• An HTTP response indicating success.
• A response payload that contains the data that was queried for.
When you configure a caller application to send a GET, the construction of the API call is fairly straightforward. The
call may require query parameters, but GETs do not require a request payload. The majority of the work lies in parsing
the response payload. The remainder of this topic discusses how response payloads are structured and how developers
can learn about response payload formats.
DataEnvelope standardizes the format of information for a single element. It specifies a data property with the
following child properties:
• checksum
• id
• links (for a single element)
• method
• refid
• related
• type
• uri
The format of a payload for a single element has the following structure:
{
"data": {
"checksum": ...,
"id": ...,
"links": ...,
"method": ...,
"refid": ...,
"related": ...,
"type": ...,
"uri": ...
}
}
}
DataListEnvelope standardizes the format of information for collections. It specifies the following properties, which
are siblings to the data section:
• count
• links (for a collection)
• total
The format of a payload for a collection has the following structure:
{
"count" ...,
"data": [
{ properties_for_element_1 },
{ properties_for_element_2 },
...
],
"links": ...,
"total": ...
}
Every property does not appear in every payload. There are different reasons why a property may not appear in a given
payload. For example:
• Some properties, such as refid, apply only to requests and do not appear in response payloads.
• Some properties, such as count, apply only to responses and do not appear in request payloads.
• Some properties, such as related, do not appear by default and appear only when the request includes certain
query parameters.
34 GETs
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
To address this, Cloud API also uses request schemas and response schemas. A request schema is a schema that is used
to define the valid structure of a request payload for a specific set of endpoints. Similarly, a response schema is a
schema that is used to define the valid structure of a response payload for a specific set of endpoints.
Request and response schemas are hierarchical. For example, for responses, the GET /activity/{activityId}
endpoint uses the ActivityResponse schema. This schema has two child schemas: ActivityData and
ActivityResponseInclusions.
Request and response schemas extend DataEnvelope or DataListEnvelope. This ensures that information relevant to
all endpoints appears in payloads in a standard way.
Request and response schemas also define an attributes property for the payload. This property is associated with a
schema that includes resource-specific information for the payload. For example, the GET /activity/{activityId}
endpoint specifies an attributes property in the ActivityData child schema. This property is associated with the
Activity schema, which contains activity-specific fields, such as activityPattern and activityType. As a result,
response payloads for the GET /activity/{activityId} endpoint have this structure:
{
"data": {
"checksum": ...,
"attributes" : {
"activityPattern": ... ,
"activityType": ...,
...},
"id": ...,
"links": ...,
"method": ...,
"refid": ...,
"related": ...,
"type": ...,
"uri": ...
}
}
}
Viewing schemas
You can use API definition tools, such as Swagger UI, to review information about the schemas for a given endpoint
and how they structure the data.
Sending GETs
You can use a request tool, such as Postman, to ensure GETs are well-formed and to review the structure of the
response payloads. For more information, see “Requests and responses” on page 28.
GETs 35
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
a. On the Authorization tab, select Basic Auth using user aapplegate and password gw.
2. Enter the following call and click Send: GET [Link]
activities
{
"count": 25,
"data": [
{
"attributes": {
"activityPattern": "contact_claimant",
"assignedGroup": {
"displayName": "Auto1 - TeamA",
"id": "demo_sample:31"
},
"assignedUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
36 GETs
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
(Note: JSON does not support comments. However, to clarify the code, pseudo-comments have been added. Each
pseudo-comment is preceded by a hashtag (#).)
{
"count": N, # Number of resources in collection*
"data": [ # List of resources
{ # Resource 1 begins here
"attributes": { # Resource 1 name/value pairs
"propertyName": "propertyValue",
... },
"checksum": "val", # Resource 1 checksum value
"links": { ... } # Resource 1 links
}, # Resource 1 ends here
{ # Resource 2 begins here
"attributes": { # Resource 2 name/value pairs
"propertyName": "propertyValue",
... },
"checksum": "val", # Resource 2 checksum value
"links": { ... } # Resource 2 links
}, # Resource 2 ends here
... ], # Resources 3 to N
"links": { ... } # Collection-level links*
}
# *-used only for collection responses
"attributes": {
"activityPattern": "check_coverage",
"activityType": {
"code": "general",
"name": "General"
},
...
},
Each resource has a default set of fields that are returned. This is typically a subset of all the fields that could be
returned. You can override the default set of fields returned using the fields query parameter. For more information,
see “The fields query parameter” on page 48.
GETs 37
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Simple values
When a field is a scalar, its value is listed after the colon. For example:
ID properties
Every resource has an id field. This has the same value as the Public ID of the object in ClaimCenter. This is typically
one of the fields returned by default. For example:
"id": "xc:20",
This value is also used in an endpoint that names a specific element, such as:
GET /activities/xc:20/notes
Inlined resources
Some response payloads contain inlined resources. An inlined resource is a resource that is not the root resource, but
some of its fields are listed in the attributes section by default along with fields from the root resource. Inlined
resources follow the format:
"inlinedResourceName": {
"inlinedResourceField1": value,
"inlinedResourceField2": value,
...
},
Inlined resources are declared in the response schema. Similar to scalar values, you can control which inlined resources
and inlined resource fields are returned in a response by using the fields query parameter. For more information, see
“The fields query parameter” on page 48.
Broadly speaking, there are four types of inlined resources: typelists, monetary amount values, simple references, and
complex references.
38 GETs
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Typelists are listed with a code field and a name field. They use the TypeCodeReferences schema. For example:
"priority": {
"code": "urgent",
"name": "Urgent"
},
Monetary amount values are complex values with a currency field and an amount field. For example:
"transactionAmount": {
"amount": "500.00",
"currency": "usd"
(Note that in Cloud API, the datatype is referred to as MonetaryAmount. But in ClaimCenter, these values are actually
stored using the CurrencyAmount datatype.)
Simple references are references to a related object that use the SimpleReferences schema. This schema includes
only the following fields: displayName, id, refId, type, and uri. By default, most endpoints return only
displayName and id.
For example, in the following snippet, assignedGroup and assignedUser are simple references:
"assignedGroup": {
"displayName": "Auto1 - TeamA",
"id": "demo_sample:31"
},
"assignedUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
Complex references are references to a related object that uses a schema more complex than the SimpleReferences
schema. For example, when a contact's primary address is added to a response payload, it uses the Address schema,
which includes a larger number of fields.
"links": {
"assign": {
GETs 39
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"href": "/common/v1/activities/xc:20/assign",
"methods": [
"post"
]
},
"notes": {
"href": "/common/v1/activities/xc:20/notes",
"methods": [
"get",
"post"
]
},
"self": {
"href": "/common/v1/activities/xc:20",
"methods": [
"get"
]
}
}
The self link is a link to the resource itself. The self link is useful when a caller application receives a list of
resources and wants to navigate to a specific resource in the list.
For a given object, links that execute business actions appear only if the action makes sense given the state of the
object, and only if the caller has sufficient permission to execute the action. For example, the link to close an activity
will not appear if the activity is already closed. Similarly, the link to assign an activity will not appear if the caller lacks
permission to assign activities.
<endpointPath>?include=<resourceName>
where:
• <endpointPath> is the default path, such as /common/v1/activities
• <resourceName> is the name of the related resource, such as notes
For example GET /activities?include=notes returns all activities assigned to the current user, and all notes
associated with those activities.
You can include multiple resource types in a single query. To do this, identify the resources in a comma-delimited list.
For example, GET /claims?include=exposures,activities returns all claims assigned to the current user, and all
exposures and activities associated with those claims.
When you execute a call with include, the response payload contains information about the primary resources and the
included resources. However, most of the information about the included resources do not appear inline with the
primary resources. Rather:
• Every primary resource has a related section. This section lists the IDs (and types) of included resources related to
that resource. However, each related section does not include any other details about those resources.
40 GETs
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
• Details about the included resources appear at the end of the payload in a section called included.
The IDs of included objects appear in both the related section and the included section. You can use these IDs to
match a primary resource with details about its included resources. However, the IDs of included objects are not
globally unique.
Resource How many related resources Where do their fields When do they appear?
type for each primary resource? appear?
Inlined Typically one. (For example, Entirely in the attributes If the query does not use the fields query
resource every activity has only one section of the root resource parameter, then each inlined resource appears only if
related assignedUser.) it is one of the default attributes.
If the query does use the fields query parameter,
then each inlined resource does or does not appear
based on whether it is specified in that query
parameter.
Included One to many. (For example, IDs appear in the related When the query parameter includes the ?
resource every activity can have section of the root resource. include=resourceName query parameter
several related notes.) The remaining attributes
appear in the included
section at the bottom of the
payload.
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
a. On the Authorization tab, select Basic Auth using user aapplegate and password gw.
2. You can use a GET to retrieve a resource and a set of related resources. For example, in a single GET you can
retrieve a claim and all of its contacts. The following GET retrieves Claim 235-53-365870 (Public ID
demo_sample:1) and its contacts. Enter this URL in Postman and click Send:
GET [Link]
Note the following in the response payload:
• The data section starts at line 2. It includes information about the claim.
• The included section starts at or around line 363. It includes an array of contacts for this claim.
3. You can use a GET to retrieve a resource and a single related resource. For example, in a single GET you can
retrieve a claim and its main contact. The following GET retrieves Claim 235-53-365870 (Public ID
demo_sample:1) and its main contact. Enter this URL in Postman and click Send:
GET [Link]
Note the following in the response payload:
• The data section starts at line 2. It includes information about the claim. At or around line 91, there is
information about the claim's main contact. However, the only meaningful information is the main contact's
display name and ID.
• The included section starts at or around line 339. It includes a single contact for this claim. In this section,
there is detailed information about the contact beyond just the display name and ID.
GETs 41
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
{
"count": N, # Number of resources is payload
"data": [ # Details for each resource
{ # Resource 1 begins here
"attributes": { # Resource 1 name/value pairs
"propertyName": "propertyValue",
... },
"checksum": "val", # Resource 1 checksum value
"links": { # Links relevant to Resource 1
... },
"related": { # List of resources related to R1
"resourceType": { # Related resource type
"count": NN, # Number of related resources for R1
"data": [
{ # First resource related to R1 starts
"id": "relatedResourceID",
"type": "resourceType"
}, # First resource related to R1 ends
... # Other resources related to R1
] } }
}, # Resource 1 ends here
{ # Resource 2 begins here
"attributes": { # Recourse 2 name/value pairs
"propertyName": "propertyValue",
... },
"checksum": "val", # Resource 2 checksum value
"links": { # Links relevant to Resource 2
... },
"related": { # List of resources related to R2
"resourceType": { # Related resource type
"count": NN, # Number of related resources for R2
"data": [
{ # First resource related to R2 starts
"id": "relatedResourceID",
"type": "resourceType"
}, # First resource related to R2 ends
... # Other resources related to R2
] } }
}, # Resource 2 ends here
... ], # Resources 3 to N
"links": { # Links relevant to collection
...
},
"included": { # List of related resources
"resourceType": [ # First related resource type
{
"attributes": { # Related resource 1 start
... # Related resource 1 name/value pairs
"id": " relatedResourceID ",
... },
"checksum": "0", # Related resource 1 checksum value
"links": { ... } # Links relevant to Related resource 1
},
... # Related resources 2 to end
] }
}
{
"attributes": {
...
"id": "xc:44",
...
"subject": "Check coverage"
},
42 GETs
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"checksum": "2",
"links": {
...
},
"related": {
"notes": {
"count": 1,
"data": [
{
"id": "xc:55",
"type": "Note"
}
]
}
}
},
If a GET uses the included query parameter, but no related resources exist, the related section still appears. But, the
count is 0 and the data section is empty. For example:
"related": {
"notes": {
"count": 0,
"data": []
}
}
If a GET omits the included query parameter, the related section is omitted from the response payload.
"included": {
"Note": [
{
"attributes": {
"author": {
"displayName": "Betty Baker",
"id": "demo_sample:8"
},
"bodySummary": "Main contact is on vacation 03/20",
"confidential": false,
"createdDate": "2020-03-30T23:11:33.346Z",
"id": "xc:55",
"relatedTo": {
"displayName": "235-53-373871",
"id": "demo_sample:8002",
"type": "Claim"
},
"subject": "Main contact is on vacation 03/20",
"topic": {
"code": "general",
"name": "General"
},
"updateTime": "2020-03-30T23:12:08.892Z"
},
"checksum": "0",
"links": {
"self": {
"href": "/common/v1/notes/xc:55",
"methods": [
"get",
"patch"
]
}
}
}
]
},
Recall that activity xc:44 has one included note. The included note's id is xc:55. The note shown in the included
section is the note related to activity xc:44.
GETs 43
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
An example of the first case is GET /claims/{claimId}?include=contacts. This call returns the claim with the
given Claim ID and all ClaimContacts related to that claim. There are theoretically several related resources
(ClaimContacts) for each primary resource (the claim with the given Claim ID).
An example of the second case is GET /claims/{claimId}?include=mainContact. This call returns the claim with
the given Claim ID and the ClaimContact who is designated as the main contact. There is only a single related resource
(the main ClaimContact) for each primary resource (the claim with the given Claim ID).
You can also specify multiple include options, as in GET /claims/{claimId}?include=contacts,mainContact. In
this case, for each claim, the related section specifies the IDs of all contacts related to the claim. It also explicitly
identifies the ID of the main contact.
As a general rule, if an include option is named using a plural, it returns a set of resources for each primary resource.
If an include option is named using a singular, it returns a single resource for each primary resource.
"userMessage": "Bad value for the 'include' query parameter - The requested inclusions
'[AccountContact]' are not valid for this resource. The valid options are [accountHolder,
activities, activity-assignees, activity-patterns, contacts, documents, jobs, locations, notes,
policies, primaryLocation]."
In cases such as this, the error message will specify which elements are allowed in the include.
Other than creating an error and viewing the results, there are a couple of general rules that can help determine which
elements are allowed in an include for a given endpoint: child endpoints and response payload references. (Note that
these are general guidelines, and don’t necessarily apply in all cases.)
Child endpoints
Suppose you have the following set of endpoints:
• /api/v1/endpoint
• /api/v1/endpoint/child1
• /api/v1/endpoint/child1/child2
In most cases, you can include child2 on any calls to endpoint or endpoint/child1:
GET /api/v1/endpoint?include=child2
GET /api/v1/endpoint/child1?include=child2
44 GETs
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
{
"data": {
"attributes": {
"foreignKeyEntity" {
"id": "100"
}
}
}
}
In many cases such as this you can do an include that specifies the returned attribute (or attributes, if there are more
than one):
GET /api/v1/endpoint?include=foreignKeyEntity
GETs 45
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
46 GETs
chapter 3
Query parameters
This topic discusses how to use query parameters to refine a request to customize the response payload. This is most
often done with GETs. But, query parameters can also be used with POSTs and PATCHes to refine the responses to
those methods.
If you want to interact directly with the concepts in this topic, go to the following tutorials:
• “Tutorial: Send a GET with the fields parameter” on page 51
• “Tutorial: Send a GET with the filter parameters” on page 54
• “Tutorial: Send a GET with the sort query parameter” on page 56
• “Tutorial: Send a GET with the pageSize and totalCount parameters” on page 59
• “Tutorial: Send a GET with query parameters for included resources” on page 62
<URL>?<queryParameterExpressionList>
For example:
• GET /common/v1/activities?fields=*all
Query parameters 47
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
• GET /common/v1/activities?filter=escalated:eq:false
Included resources
With GETs, you can use the include query parameter to include resources related to the primary resources of the
response. You can also use query parameters to specify a custom set of properties for included resources, filter out
included resources that do not meet a given criteria, sort the included resources, and so on. For more information, see
“Query parameters for included resources” on page 60.
"message": "The sort column 'escalationDate' is not a valid option. The valid
sort options are [assignedUser, dueDate, escalated, priority, status, subject],
optionally prefixed with '-' to indicate a descending sort."
Parameter definitions
The Parameters section describes each query parameter.
Supported parameters
The Responses section include a Model tab. This tab provides information about the fields that support particular query
parameters. For example, you can sort results on some fields, but not all of them. The fields that support sorting appear
in the model with the text "sortable": true.
48 Query parameters
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
• *default - Return the default fields (typically used in conjunction with an additional field list)
• fieldList - Return one or more fields specified as a comma-delimited list
The fields parameter has three options related to these default sets:
• *detail - Return the fields in the "detail list"
• *summary - Return the fields in the "summary list"
• *default - Return the default list. If the endpoint returns a single element, the default is the "detail list". If the
endpoint returns a collection, the default is the "summary list"
fields=*default,fieldList
fields=fieldList
"attributes": {
"activityPattern": "contact_claimant",
Query parameters 49
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"assignedGroup": {
"displayName": "Auto1 - TeamA",
"id": "demo_sample:31"
},
"assignedUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
"closeDate": "2020-04-06T07:00:00.000Z",
"dueDate": "2020-04-06T07:00:00.000Z",
"escalated": false,
"id": "cc:20",
...
}
You can use the fields query parameter to specify an inlined resource. When you do, all default fields for that
resource are returned. For example, you could specify that you want a GET /activities to return only the
assignedGroup and assignedUser fields (and all of their default subfields) using the following:
GET /activities?fields=assignedGroup,assignedUser
This would return:
"attributes": {
"assignedGroup": {
"displayName": "Auto1 - TeamA",
"id": "demo_sample:31"
},
"assignedUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
}
}
You can also specify specific subfields using the following syntax:
fields=[Link]
For example, you could specify that you want a GET /activities to return only the ids of the assigned user and
group using the following:
GET /activities?fields=[Link],[Link]
This would return:
"attributes": {
"assignedGroup": {
"id": "demo_sample:31"
},
"assignedUser": {
"id": "demo_sample:1"
}
}
fields=*all
For example, the following query returns all the possible fields for activity xc:20.
GET /activities/xc:20?fields=*all
Note that the *all query parameter returns all fields that the caller is authorized to view. If there are fields on a
resource that a caller is not authorized to view, they are excluded from queries using the *all query parameter.
*all is not recommended for production environments as it may return fields that are not included in default responses
because they require additional resources to calculate. Instead, use the *default filter with any specific fields that do
not appear in the default detail or summary list.
50 Query parameters
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
POST /admin/v1/users
The following request also creates a new user. But, the response will contain only the id.
POST /admin/v1/users?fields=id
The fields query parameter is the only parameter you can use with POSTs and PATCHes.
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
a. On the Authorization tab, select Basic Auth using user aapplegate and password gw.
2. Enter the following and click Send:
GET [Link]
3. Open a second request tab and right-clicking the first tab and selecting Duplicate Tab.
4. Enter the following and click Send:
GET [Link]
filter=field:op:value
where:
• field is the name of a filterable field
• op is one of the comparison operators from the following table
• value is the value to compare
op value Meaning Example using the GET /activities endpoint Returns activities where...
eq Equal to ?filter=escalated:eq:true ...the escalated field equals true
ne Not equal to ?filter=escalated:ne:true ...the escalated field equals false
Query parameters 51
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
op value Meaning Example using the GET /activities endpoint Returns activities where...
lt Less than ?filter=dueDate:lt: ...the due date is less than (before) May 11,
2020-05-11T07::00::00.000Z 2020.
gt Greater than ?filter=dueDate:gt: ...the due date is greater than (after) May
2020-05-11T07::00::00.000Z 11, 2020.
le Less than or equal ?filter=dueDate:le: ...the due date is less than or equal to (on
2020-05-11T07::00::00.000Z or before) May 11, 2020.
ge Greater than or equal ?filter=dueDate:ge: ...the due date is greater than or equal to
2020-05-11T07::00::00.000Z (on or after) May 11, 2020.
in In ?filter=priority:in:urgent,high ...the priority is either urgent or high
ni Not in ?filter=priority:ni:urgent,high ...the priority is neither urgent nor high
sw Starts with ?filter=subject:sw:Contact ...the subject starts with the string "Contact
%20claimant claimant"
cn Contains ?filter=subject:cn:Contact ...the subject contains the string "Contact
%20claimant claimant"
The query parameter is passed as part of a URL. Therefore, special conventions must be used for certain types of
characters to ensure the URL can be parsed correctly.
• Specify strings without surrounding quotes.
• If a string has a space in it, use the URL encoding for a space (%20). (For example, "subject starts with 'Contact
claimant'" is specified as filter=subject:sw:Contact%20claimant)
• If a string has a colon (:) in it, use two colons (::) in the URL. The first colon acts as an escape character. (For
example, "subject starts with 'Urgent: Information needed'" is specified as ?filter=subject:sw:Urgent::
%20Information%20needed)
• Specify Booleans as either true or false. (For example, "escalated is true" is specified as ?
filter=escalated:eq:true)
• Date and datetime fields must be specified as an ISO-8601 datetime value. All datetime fields can accept either date
values or datetime values. For datetime values, the colons in the value must be expressed as "::". For example, "due
date is less than 2020-04-03T15:00:00.000Z" is specified as ?filter=dueDate:lt:
2020-05-11T07::00::00.000Z.
• Specify null values as null. For example, "all activities whose escalation date is null" is specified as ?
filter=escalationDate:eq:null.
References to typekey fields automatically resolve to the field's code. For example, to filter on activities whose priority
is set to urgent, use: GET /activities?filter=priority:eq:urgent.
You can also use the filter query for related resources added through the include parameter. For more information, see
“Query parameters for included resources” on page 60.
"message": "The field 'dogsaregreat' is not a filterable field for this endpoint.
The set of filterable fields is [accountNumber, accountStatus, createdDate]."
Another option that allows you to identify some of the attributes that are filterable is by reviewing the schema
definition. If a field is filterable, then the schema definition includes the text: "filterable": true.
52 Query parameters
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
For example, the following is the schema description from Swagger UI for two fields returned by the Common API /
activities endpoint.
escalated boolean
readOnly: true
x-gw-extensions: OrderedMap { "filterable": true, "sortable": true }
escalationDate string($date-time)
x-gw-nullable: true
Note that the escalated field includes the "filterable": true expression, but the escalationDate field does not.
This means that you can filter on escalated, but not escalationDate.
The limitation to the preceding option is that it won't display custom filters. You might have to look at the Gosu
resource files to determine whether a customization has been added to make a field filterable. See Cloud API
Developer Guide for information on custom filters and where to find them.
filter=field:op:value&filter=field:op:value
When multiple criteria are specified, the criteria are ANDed together. Resources must meet all criteria to be included in
the response. For example, the following GET returns only high priority activities that have not been escalated.
GET /activities?filter=priority:eq:high&filter=escalated:eq:false
The filter query parameter cannot be used to construct OR criteria.
When querying for a specific root resource, do not filter on the id property
When writing a call to GET a single root resource, use an endpoint that returns a single element, such as:
GET /activities/xc:20
Do not attempt to retrieve the resource by using an endpoint that returns a collection and filtering on the id property, as
in:
GET /activities?filter=id:eq:xc::20
Typically, the latter approach does not work because collection endpoints do not have filterable id properties.
This restriction applies to the root resource only. There may be situations where you need to retrieve a root resource
and one or more child resources. When retrieving the child resources, it may be possible and appropriate to filter on the
child resource's id.
Query parameters 53
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
◦ For example, GET /activities?filter=*none returns all claims (that you have authorization to view),
regardless of who they are assigned to.
• You can override the default filter by specifying your own filter.
◦ For example, GET /claims?filter=state:eq:draft returns all draft claims. (Draft claims have not yet been
assigned and therefore are not assigned to you.)
If you want the response payload to reflect both the default filter and a custom filter, you must specify both filters
explicitly.
GET /claim/v1/claims/demo_sample:1/activities?filter=assignedUser:eq:demo_sample::39
Note: In a REST URL, if you want to enter a String value with a colon, you must escape the character by
adding an additional colon. For example, by default, ClaimCenter generates all REST IDs with a colon, such as
demo_sample:39. When including this type of value in a filter parameter, you must specify it as
demo_sample::39 (with two colons). If you do not, you will get an error such as "The filter query
parameter 'assignedUser:eq:demo_sample:39' was specified with prefix 'assignedUser', which
does not correspond to any included resource"
The following call returns all activities for claim demo_sample:1 that are assigned to Clara, using her user name.
GET /claim/v1/claims/demo_sample:1/activities?filter=assignedUsername:eq:clevitt
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
a. On the Authorization tab, select Basic Auth using user aapplegate and password gw.
2. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
3. Specify Basic Auth authorization using user aapplegate and password gw.
4. Enter the following and click Send:
GET [Link]
5. Open a second request tab and right-clicking the first tab and selecting Duplicate Tab.
6. Enter the following and click Send:
GET [Link]
54 Query parameters
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
sort=propertiesList
where propertiesList is a comma-delimited list of properties that support sorting for that endpoint.
For example, the following query returns all activities and sorts them by due date:
GET /activities?sort=dueDate
You can specify multiple sort properties. Resources are sorted based on the first property. Any resources with the same
value for the first property are then sorted by the second property, and so on. For example, the following query returns
all activities assigned to the current caller and sorts them first by escalation status and then by due date:
GET /activities?sort=escalated,dueDate
You can also use the sort query for related resources added through the include parameter. For more information, see
“Query parameters for included resources” on page 60.
Sort orders
The default sort order is ascending. To specify a descending sort, prefix the property name with a hyphen (-). For
example, the following queries return all activities assigned to the current caller, sorted by due date. The first query
sorts them in ascending order. The second sorts them in descending order.
GET /activities?sort=dueDate
GET /activities?sort=-dueDate
escalated boolean
readOnly: true
x-gw-extensions: OrderedMap { "filterable": true, "sortable": true }
escalationDate string($date-time)
x-gw-nullable: true
Note that the escalated field includes the "sortable": true expression, but the escalationDate field does not.
This means that you can sort on escalated, but not escalationDate.
resources:
...
Activities:
resource: [Link]
defaultSort:
- priority
- subject
Query parameters 55
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
In the defaultSort section, every field is preceded by a hyphen and a space (- ). This first hyphen does not indicate
descending order. If a field has a default descending order, then the field name is preceded by a second hyphen and
surrounded by quotation marks. For example, a default sort on priority in descending order would appear as - "-
priority".
As discussed in the previous section, you can use the sort query parameter to override the default sort for a collection.
You can also remove the default sort order by specifying ?sort=*none. When you do this, results are sorted based on
their id value. This may improve performance when you are retrieving a large amount of information from an endpoint
with a default sort order and the column that the sort is based on is not indexed.
For example:
• GET /common/v1/activities returns activities using the default sort (priority and then subject).
• GET /common/v1/activities?sort=priority returns activities sorted by priority only.
• GET /common/v1/activities?sort=*none returns activities sorted only by id.
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
a. On the Authorization tab, select Basic Auth using user aapplegate and password gw.
2. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
3. Specify Basic Auth authorization using user aapplegate and password gw.
4. Enter the following and click Send:
GET [Link]
5. Open a second request tab by right-clicking the first tab and selecting Duplicate Tab.
6. Enter the following and click Send:
GET [Link]
56 Query parameters
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
pageSize=n
Query parameters 57
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
{
"attributes": {
...
"id": "cc:32",
... },
...
"links": {
...
"self": {
"href": "/common/v1/activities/cc:32",
"methods": [
"get",
"patch"
]
}
}
}
The href property of the self link is an endpoint to that specific element. When necessary, you can use this link to
construct a call to act on that element.
"links": {
"first": {
"href": "/common/v1/activities?pageSize=5&fields=id",
"methods": [
"get"
]
},
"next": {
"href": "/common/v1/activities?pageSize=5&fields=id&pageOffset=10",
"methods": [
"get"
]
},
"prev": {
"href": "/common/v1/activities?pageSize=5&fields=id",
"methods": [
"get"
]
},
"self": {
"href": "/common/v1/activities?pageSize=5&fields=id&pageOffset=5",
"methods": [
"get"
58 Query parameters
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
]
}
}
To access a collection that starts with a specific resource, Cloud API uses a pageOffset parameter. This parameter is
used in the prev and next links for a collection. The pageOffset index starts with 0, so a theoretical pageOffset=0
would start with the first element and pageOffset=5 skips the first 5 elements and starts with the sixth.
Note: There can be some complexity involved in determining how to construct a link with the correct
pageOffset value. Therefore, Guidewire recommends that you use the prev and next provided in response
payloads and avoid constructing pageOffset queries of your own.
Note: pageOffset is supported for root resources only. When executing a query that uses request inclusion,
you cannot use pageOffset to page through included resources.
includeTotal=true
When you submit this query parameter, the payload includes an additional total value that specifies the total. For
example:
"total": 72
When the includeTotal query parameter is used, the response payload contains two counting values:
• count - The number of resources returned in this page.
• total - The total number of resources that meet the query's criteria.
If the total number of resources that meet the criteria is less than or equal to the pageSize, then count and total are
the same. If the total number of resources that meet the criteria is greater than the pageSize, then count is less than
total. count can never be greater than total.
For performance reasons, Guidewire will count the total number of items up to 1000 only. When the total value is
stated as 1000, the actual count could be 1000 or some number greater than 1000.
Note: If the number of resources to total is sufficiently large, using the includeTotal parameter can affect
performance. Guidewire recommends you use this parameter only when there is a need for it, and only when
the number of resources to total is unlikely to affect performance.
In some situations, you may be interested in retrieving only the total number of resources that meet a given criteria,
without needing any information from any specific resource. However, a GET cannot return only an included total. If
there are resources that meet the criteria, it must return the first N set of resources and at least one field for each
resource. For calls that are sent to retrieve only the total number of resources, Guidewire recommends using a call with
query parameters that return the smallest amount of resource information, such as GET ...?
includeTotal=true&fields=id&pageSize=1.
Query parameters 59
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
a. On the Authorization tab, select Basic Auth using user aapplegate and password gw.
2. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
3. Specify Basic Auth authorization using user aapplegate and password gw.
4. Enter the following and click Send:
GET [Link]
5. Open a second request tab and right-clicking the first tab and selecting Duplicate Tab.
6. Enter the following and click Send:
GET [Link]
?include=<resourceName>
For example, GET /activities?include=notes returns all activities assigned to the current caller, and all notes
associated with those activities.
For more information on the default behavior of include, see “Payload structure for a response with included
resources” on page 40.
Most query parameters that can be used on primary resources can also be used on included resources.
<queryParameter>=<includedResource>:<queryValue>
For example, the following GET retrieves activities and their notes. It also specifies that the number of notes to return
is limited to 5.
GET /activities?include=notes
&pageSize=notes:5
The following GET retrieves activities and their notes. It also specifies that the only fields to return for the notes are id
and subject.
GET /activities?include=notes
&fields=notes:id,subject
60 Query parameters
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
• Returns: Claim demo_sample:1 and its included activities. For the activities, return only id and dueDate.
• Returns: Claim demo_sample:1 and its included activities that have been escalated
• Returns: Claim demo_sample:1 and its included activities, sorted by their due date.
• Returns: Claim demo_sample:1, its included activities, and the total number of included activities for
demo_sample:1.
Query parameters 61
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
GET /activities?include=notes
&fields=id,description,dueDate
&fields=notes:id,subject
You can also use different query parameters for each resource. For example, the following query retrieves activities and
their notes. For activities, only the id, description, and dueDate fields are returned. For notes, the number of notes
per activity is limited to 5.
GET /activities?include=notes
&fields=id,description,dueDate
&pageSize=notes:5
GET /claims?include=mainContact,reporter
&fields=id,claimNumber
&fields=mainContact:id,displayName,primaryPhone
&fields=reporter:displayName
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
a. On the Authorization tab, select Basic Auth using user aapplegate and password gw.
2. Enter the following and click Send:
GET [Link]
3. Open a second request tab and right-clicking the first tab and selecting Duplicate Tab.
4. Enter the following and click Send:
GET [Link]
fields=id,claimNumber&include=activities&filter=activities:escalated:eq:true
62 Query parameters
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
POST /admin/v1/users
The following request also creates a new user. But, the response will contain only the id.
POST /admin/v1/users?fields=id
The fields query parameter is the only parameter you can use with POSTs and PATCHes.
Query parameters 63
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
64 Query parameters
chapter 4
POSTs
This topic discusses the POST method and how to construct a request payload for creating a single resource. For
information on how to create request payloads that specify multiple resources, see “Reducing the number of calls” on
page 93.
If you want to interact directly with the concepts in this topic, go to the following tutorials:
• “Tutorial: Create a new note that specifies required fields only” on page 71
• “Tutorial: Create a new note that specifies optional fields” on page 72
Overview of POSTs
A POST is a REST API method that creates a resource in ClaimCenter. The POST method is also used to execute
specific business processes, such as assigning an activity.
A POST consists of the POST method and the endpoint, such as POST /activities/{activityId}/notes, and a
request payload. The request payload contains data about the resource to create.
The response to a POST includes an HTTP code indicating success or failure. It also includes a response payload. The
contents of the response payload is determined by the endpoint's schema.
• For an endpoint used to create data, the response payload may contain data from the request payload. It may also
contain data generated by ClaimCenter, such as ids and timestamps.
• For an endpoint used to execute a business action, the response payload is a resource related to the business action.
It could be the resource on which the action was executed. For example, when assigning an activity, the response
payload contains the assigned activity. It could also be a resource generated by the business action. For example,
when canceling a policy the response payload contains a JobResponse.
When a developer is configuring a caller application to POST information using Cloud API, they will need to
determine the correct structure for the request payload. They may also need to parse information out of the response
payload. The remainder of this topic discusses how request payloads for resources are structured and how developers
can learn about request payload formats.
POSTs are also used to execute business actions. For these types of POSTs, request payloads may be unnecessary,
optional, or required. For example:
• A POST that marks an activity as complete does not require a request payload.
◦ You can optionally provide a request payload to add a note to the completed activity.
• A POST that assigns an activity requires a request payload. The payload specifies how to assign the activity.
POSTs 65
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
{
"data": {
"checksum": ...,
"id": ...,
"links": ...,
"method": ...,
"refid": ...,
"related": ...,
"type": ...,
"uri": ...
}
}
}
DataListEnvelope is used to standardize the format of information for collections. It specifies the following
properties, which are siblings to the data section: count, links (for a collection), and total. At a high level, the
format of a payload for a single element looks like:
{
"count" ...,
"data": [
{ properties_for_element_1 },
{ properties_for_element_2 },
...
],
"links": ...,
"total": ...
}
Every property does not appear in every payload. There are different reasons why a property may not appear in a given
payload. For example:
• Some properties, such as refid, apply only to requests and do not appear in response payloads.
• Some properties, such as count, apply only to responses and do not appear in request payloads.
• Some properties, such as related, do not appear by default and appear only when the request includes certain
query parameters.
66 POSTs
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Request and response schemas extend DataEnvelope or DataListEnvelope. This ensures that information relevant to
all endpoints appears in payloads in a standard way.
Request and response schemas also define an attributes property for the payload. This property is associated with a
schema that includes resource-specific information for the payload. For example, the GET /activity/{activityId}
endpoint specifies an attributes property in the ActivityData child schema. This property is associated with the
Activity schema, which contains activity-specific fields, such as activityPattern and activityType. As a result,
response payloads for the GET /activity/{activityId} endpoint have this structure:
{
"data": {
"checksum": ...,
"attributes" : {
"activityPattern": ... ,
"activityType": ...,
...},
"id": ...,
"links": ...,
"method": ...,
"refid": ...,
"related": ...,
"type": ...,
"uri": ...
}
}
}
{
"data": {
"attributes": {
<field/value pairs are specified here>
}
}
}
POSTs 67
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
{
"data": {
"attributes": {
"subject": "Main contact vacation",
"body": "Rodney is on vacation in June. Direct urgent questions to Sarah Jackson.",
"confidential": false,
"topic": {
"code": "general"
}
}
}
}
In some situations, you can create an object using an "empty body" (a body that specifies no values). An object created
in this way will contain only default values. In these situations, the payload has an empty attributes section:
{
"data": {
"attributes": {
}
}
}
68 POSTs
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
For scalars, the formats for values are the same for request payloads and response payloads. For a given field, you can
use its format in a response payload as a model for how to build a request payload.
ids
ID values are assigned by ClaimCenter. Therefore, you cannot specify an id for an object that is being created.
However, you can specify ids when identifying an existing object that the new object is related to.
Typekeys
Typekeys use the following format:
"field": {
"code": "value"
}
For example:
"priority": {
"code": "urgent"
}
Typekeys also have a name field, which is included in responses. But, the name field is not required. If you include it in
a request schema, it is ignored.
Monetary amounts
Monetary amounts use the following format:
"field": {
"amount": "amountValue",
"currency": "currencyCode"
}
For example:
"transactionAmount": {
"amount": "500.00",
POSTs 69
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"currency": "usd"
}
(Note that in Cloud API, the datatype is referred to as MonetaryAmount. But in ClaimCenter, these values are actually
stored using the CurrencyAmount datatype.)
Spatial points
Spatial points use the following format:
"field": {
"longitude": "coordinateValue",
"latitude": "coordinateValue"
}
For example:
"coordinates": {
"longitude": "-122.26842",
"latitude": "37.55496"
}
To set the value of an object to null, specify the null at the object field level. For example, a user can optionally have a
home phone number. The following explicitly states that the home phone number is null:
"homePhone": null
To set a typekey to null, specify the null at the typekey field level. (Do not specify the null at the code level.) For
example, the following sets a document's language field to null:
"language": null
To set a monetary amount, currency amount, or spatial point to null, specify the null at the field level. (Do not specify
the null at the amount, currency, longitude, or latitude level.) For example, the following sets a transactionAmount
field to null:
"transactionAmount": null
Sending POSTs
You use a request tool, such as Postman, to ensure POSTs are well-formed and to review the structure of the response
payloads. For more information, see “Requests and responses” on page 28.
70 POSTs
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
4. In the Enter request URL field, enter the URL for the server and the endpoint.
• For example, to create a new note for activity cc:2 on an instance of ClaimCenter on your machine, enter:
[Link]
5. Specify the request payload.
a) In the first row of tabs (the one that starts with Params), click Body.
b) In the row of radio buttons, select raw.
c) At the end of the row of radio buttons, change the drop-down list value from Text to JSON.
d) Paste the request payload into the text field underneath the radio buttons.
6. Click Send. The response payload appears below the request payload.
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
a. On the Authorization tab, select Basic Auth using user aapplegate and password gw.
2. Enter the following call and click Send:
GET [Link]
3. Identify the id of the first activity in the payload. This value is referenced below as <activityId>.
4. Open a second request tab and right-clicking the first tab and selecting Duplicate Tab.
5. Change the operation to POST and enter the following URL, but do not click Send yet:
POST [Link]
6. Specify the request payload.
a. In the first row of tabs (the one that starts with Params), click Body.
b. In the row of radio buttons, select raw.
c. At the end of the row of radio buttons, change the drop-down list value from Text to JSON.
d. Paste the following into the text field underneath the radio buttons.
{
"data":
{
"attributes": {
"body": "API tutorial note 1"
}
}
}
1. Click Send. The response payload appears below the request payload.
POSTs 71
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
c. On the Claim tab, click the drop-down arrow. Enter the claim number in the Claim # field and press Enter.
d. In the left-hand sidebar, click Notes.
The API tutorial note is listed as one of the notes.
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
a. On the Authorization tab, select Basic Auth using user aapplegate and password gw.
2. Enter the following call and click Send:
GET [Link]
3. Identify the id of the first activity in the payload. This value is referenced below as <activityId>.
4. Open a second request tab and right-clicking the first tab and selecting Duplicate Tab.
5. Change the operation to POST and enter the following URL, but do not click Send yet:
POST [Link]
6. Specify the request payload.
a. In the first row of tabs (the one that starts with Params), click Body.
b. In the row of radio buttons, select raw.
c. At the end of the row of radio buttons, change the drop-down list value from Text to JSON.
d. Paste the following into the text field underneath the radio buttons.
{
"data":
{
"attributes": {
"body": "API tutorial note 2",
"confidential": true,
"topic": {
"code": "litigation"
}
}
}
}
7. Click Send. The response payload appears below the request payload.
72 POSTs
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Responses to a POST
Every successful POST generates a response object with a response payload. This payload may contain values
generated by ClaimCenter during resource creation that are needed by the caller application. For example:
• The resource's Public id (which is also the Cloud API id value)
• Generated human-readable id values, such as the claim number
• Values generated by a business flow, such as:
◦ The user and group that the resource was assigned to
◦ Activities generated to process the resource
Similarly to request schemas, response schemas follow certain patterns around using data envelopes to wrap the
resource schema. In many instances, the request and response schemas will match.
POSTs 73
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
executed through a PATCH because the caller application cannot always determine how to set the assignedUser and
assignedGroup fields.
In standard REST architecture, there is no operation for this type of business action. Therefore, Cloud API has adopted
the following conventions:
• Endpoints that execute business actions use the POST method.
• Endpoints that execute business actions have paths the end in verbs (such as "assign" or "complete").
Examples of endpoints that execute business actions include:
• POST /common/v1/activities/{activityId}/assign, which assigns the corresponding activity
• POST /common/v1/activities/{activityId}/complete, which marks the corresponding activity as complete
• POST /claim/v1/claims/{claimId}/cancel, which cancels the corresponding draft claim
• POST /claim/v1/claims/{claimId}/submit, which submits the corresponding draft claim, thereby promoting it
to an open claim
74 POSTs
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
A caller application can avoid having this slow processing time occur during a genuine business call by "warming up"
the endpoint. This involves sending a dummy "warm-up request" to trigger these initial tasks. The warm-up request
helps subsequent requests execute more rapidly. The best way to accomplish this is with a POST that contains the GW-
DoNotCommit header. The POST triggers the initial endpoint tasks, and the header identifies that data modifications
made by the request are to be discarded and not committed.
For more information, see “Warming up an endpoint” on page 89.
POSTs 75
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
76 POSTs
chapter 5
PATCHes
This topic discusses the PATCH method, which modifies existing data.
If you want to interact directly with the concepts in this topic, go to the following tutorials:
• “Tutorial: PATCH an activity” on page 79
Overview of PATCHes
A PATCH is a REST API method that modifies an existing resource in ClaimCenter.
A PATCH consists of the PATCH method and the endpoint, such as PATCH /activities/{activityId}, and a
request payload. The request payload contains the data to modify in the specified resource.
The response to a PATCH includes an HTTP code indicating success or failure. It also includes a response payload.
The default response for a PATCH consists of a predetermined set of fields and resources. This may or may not include
the data that the PATCH modified.
When a developer is configuring a consumer application to PATCH information to Cloud API, they will need to
determine the correct structure for the request payload. They may also need to parse information out of the response
payload.
Within REST API architecture, there are two operations that modify existing resources - PATCH and PUT. PATCH is
used to modify a portion of an existing resource (while leaving other aspects of it unmodified). PUT is used to replace
the entire contents of an existing resource with new data. Cloud API supports the PATCH operation, but not the PUT
operation. This is because nearly every operation that modifies an InsuranceSuite object modifies only a portion of it
while keeping the rest of the object untouched. This behavior maps to PATCH, but not to PUT.
PATCHes 77
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
{
"data": {
"attributes": {
"witnesses": [
{
"contact": {
"id": "cc:1306"
}
}
]
}
}
}
If you want a PATCH to be additive to an array, you must first determine the existing members of the array, and then
specify an array in the PATCH with the existing members as well as the ones you wish to add.
Sending PATCHes
You can use a request tool, such as Postman, to ensure PATCHes are well-formed and to review the structure of the
response payloads. For more information on Postman, see “Requests and responses” on page 28.
78 PATCHes
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
• Paste the request payload into the text field underneath the radio buttons.
6. Click Send. The response payload appears below the request payload.
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
a. On the Authorization tab, select Basic Auth using user aapplegate and password gw.
2. The sample data includes one "Get police report" activity for Andy Applegate, which can be PATCHed because it
is an open activity on an open claim. Query for that activity by entering the following call and clicking Send:
a. GET [Link]
%20report
3. For the activity in the response payload that is assigned to Andy/Alice Applegate, note the following information:
a. Activity ID
b. Priority
c. Subject
4. Open a second request tab and right-clicking the first tab and selecting Duplicate Tab.
5. Change the operation to PATCH and enter the following URL, but do not click Send yet:
a. PATCH [Link]
6. Specify the request payload.
a. In the first row of tabs (the one that starts with Params), click Body.
b. In the row of radio buttons, select raw.
c. At the end of the row of radio buttons, change the drop-down list value from Text to JSON.
d. Paste the following into the text field underneath the radio buttons. Note that the subject has an additional
"!" at the end.
{
"data": {
"attributes": {
"subject" : "Get police report!",
"priority": {
"code": "low"
}
}
}
}
7. Click Send. The response payload appears below the request payload.
PATCHes 79
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
The PATCHed activity (whose priority is now Low) should be at or near the top of the list. The patched activity will
have a subject ending with an "!".
Responses to a PATCH
Every successful PATCH generates a response object with a response payload. Depending on the default fields returned
and whether any query parameters have been specified, the response payload may or may not contain the values
modified by the PATCH.
Similarly to request schemas, response schemas follow certain patterns around using data envelopes to wrap the
resource schema. In many instances, the request and response schemas will match.
80 PATCHes
chapter 6
DELETEs
This topic provides an overview of DELETEs, which are used to delete resources.
If you want to interact directly with the concepts in this topic, go to the following tutorial:
• Tutorial: “Tutorial: DELETE a note” on page 81
Overview of DELETEs
Within the context of APIs that are fully REST-compliant, a DELETE is an endpoint operation that deletes a resource.
This typically involves removing the resource from the underlying database.
Within the context of Cloud API, a DELETE is a Cloud API method that "removes" an existing resource from
ClaimCenter. What it means to "remove" the resource depends on the resource type. The DELETE operation federates
to the ClaimCenter code that matches the functionality most closely tied to deletion. That code could theoretically:
• Delete the corresponding data model instance from the operational database.
• Mark the corresponding data model instance as retired.
• Modify the corresponding data model instance and other related instances to indicate the data is no longer active or
available.
Unlike GET, POST, and PATCH, there are only a small number of endpoints in the base configuration that support
DELETE. This is because, in most cases, ClaimCenter does not support the removal of data. Several business objects
can be approved, canceled, completed, closed, declined, rejected, retired, skipped, or withdrawn. But only a few can be
deleted.
A DELETE call consists of the DELETE method and the endpoint, such as DELETE /notes/{noteId}. Similar to
GETs, DELETEs are not permitted to have a request payload.
The response to a DELETE includes an HTTP code indicating success or failure. DELETE responses do not have a
response payload.
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
a. On the Authorization tab, select Basic Auth using user aapplegate and password gw.
2. Enter the following call and click Send:
GET [Link]
3. Identify the id of the first activity in the payload. This value is referenced below as <activityId>.
4. Open a second request tab and right-clicking the first tab and selecting Duplicate Tab.
a. On the Authorization tab, select Basic Auth using user elee and password gw.
5. Change the operation to POST and enter the following URL, but do not click Send yet:
a. POST [Link]
6. Specify the request payload.
a. In the first row of tabs (the one that starts with Params), click Body.
b. In the row of radio buttons, select raw.
c. At the end of the row of radio buttons, change the drop-down list value from Text to JSON.
d. Paste the following into the text field underneath the radio buttons.
{
"data":
{
"attributes": {
"body": "API tutorial note to be deleted"
}
}
}
82 DELETEs
chapter 7
Request headers
This topic describes how you can modify call behavior using the Guidewire-proprietary headers supported by Cloud
API.
HTTP headers
Request and response objects are used by REST APIs to send information between application. These objects contain
HTTP headers. An HTTP header is a name/value pair included with a request or response object that provides
metadata about the request or response. An HTTP header can specify information such as:
• The format used in the request object (such as whether it is JSON or XML)
• The format to use in the response object
• Session and connection information
• Authorization information
Request headers 83
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
84 Request headers
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Procedure
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
2. Specify authorization as appropriate.
3. Add the header and header value.
• In the first row of tabs (the one that starts with Params), click Headers.
• Scroll to the bottom of the existing key/value list.
• In the blank row at the bottom of the key/value list, enter the header name in KEY column and its value in the
VALUE column.
4. Enter the request operation and URL.
5. Click Send.
Request headers 85
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
GW headers
Cloud API has two Guidewire-specific headers you can use to specify language and locale: GW-Language and GW-
Locale. These headers give you the ability to explicitly state the desired language and locale for a call.
To specify a language using Guidewire-specific headers, include the following header with the request:
• Key: GW-Language
• Value: (an ISO 639-1 code designating the language)
For example, to set the language to Japanese, the request must contain a GW-Language/ja header.
To specify a locale using GW headers, include the following header with the request:
• Key: GW-Locale
• Value: (an ISO 639-1 code followed by an underscore followed by an ISO 3166-1 alpha-2 locale code)
For example, to set the locale to Japanese, the request must contain a GW-Locale/ja_JP header.
If you want to specify a language and locale, Guidewire recommends using these headers. They are the most explicit
declaration of the intent of the call.
86 Request headers
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
What is specified What is language set to? What is locale set to?
Both GW-Language and GW- The GW-Language header value. The GW-Locale header value.
Locale
Only GW-Language The GW-Language header value. The caller's preferred locale, if any.
Otherwise, the ClaimCenter default locale.
Only GW-Locale The caller's preferred language, if any. Otherwise, The GW-Locale header value.
the ClaimCenter default language.
Neither GW-Language nor The caller's preferred language, if any. Otherwise, The caller's preferred locale, if any.
GW-Locale the Accept-Language header, if any. Otherwise, Otherwise, the ClaimCenter default locale.
the ClaimCenter default language.
The GW-DBTransaction-ID header identifies a transaction ID (a string of up to 128 characters). When submitted with a
Cloud API call, Cloud API attempts to insert the value into the database's TransactionID table.
• If the value does not already exist in the table, the insert is successful. Cloud API assumes the transaction has not
already been committed, and the call is processed as normal.
• If the value does exist in the table, the insert fails. Cloud API assumes the transaction has already been committed,
and the call is rejected. Cloud API returns a 400 status code with an
[Link] error.
For the call to succeed, the transaction ID specified in the header must be globally unique across all clients, APIs, and
web services.
The GW-DBTransaction-ID header has the following limitations:
• It only works with Cloud API calls that commit data to the database.
• It only works when Cloud API commits a single time only. (Cloud API calls that commit multiple times are rare.)
• It only works if the commit is either the only side effect of the call, or if the commit happens before any other side
effects, such as the sending of notifications to external systems.
Duplicate requests do not return identical responses. The first request will succeed, but subsequent requests will fail. It
is the responsibility of the caller application to decide how or if to handle this situation.
Request headers 87
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
x-gwre-session: 09d0fbf0-243c-4337-a582-725df8d33e39
Because all three calls specify the same session ID, all three calls will be routed to the same node.
Session IDs is the default behavior of the Guidewire Cloud Platform. If you wish to use this option, you do not need to
make any special request to Guidewire.
Using cookies
Within the context of Cloud API calls in a clustered environment, a cookie is an arbitrary string generated by
Guidewire Cloud Platform that can be used to identify subsequent related API calls.
If a request header does not contain an x-gwre-session header key, the Guidewire Cloud Platform generates a cookie
and returns it in the response header with a Set-Cookie header key. Subsequent calls can include this cookie in the
request header using the Cookie header key. Every request that uses a given cookie will be routed to the same node in
the cluster that generated the cookie.
For example, suppose that a caller application makes the following calls to ClaimCenter cluster:
1. A POST to create an activity
• The request header contains no x-gwre-session header key.
• The response header contains the following: Set-Cookie: gwre=ccd37ca0-f8d3-4a8e-
b278-83274d82b355; Path=/
2. A PATCH to update the activity.
• The request header contains the following: Cookie: gwre=ccd37ca0-f8d3-4a8e-b278-83274d82b355
3. A POST to create a note on the activity
• The request header contains the following: Cookie: gwre=ccd37ca0-f8d3-4a8e-b278-83274d82b355
Because the second and third call specify the cookie returned by the first call, the second and third call are routed to the
same node that processed the first call.
Cookies are not the default behavior of the Guidewire Cloud Platform. If you wish to use this option, you must request
this from Guidewire.
88 Request headers
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Warming up an endpoint
The first time a caller application makes a call to a Cloud API endpoint, the call may take longer to process than
normal. This is because the Guidewire server may need to execute tasks for the first call that it does not need to re-
execute for subsequent tasks, such as:
• Loading Java and Gosu classes
• Parsing and loading configuration files that are lazy-loaded on the first reference
• Loading data from the database or other sources into local caches
• Initializing database connections
A caller application may want to avoid having this slow processing time occur during a genuine business call.
Therefore, the caller application may want to "warm up" the endpoint. This involves sending a dummy "warm-up
request" to trigger these initial tasks. The warm-up request helps subsequent requests execute more rapidly.
Warm-up requests are not supposed to create or modify data. Theoretically, a caller application could use a GET as a
warm-up request. However, GETs do not trigger as wide a range of start-up tasks as POSTs. The better option is to
send a POST that does not commit any changes to the database. The best way to accomplish this is with a POST that
contains the GW-DoNotCommit header. This header identifies that data modifications made by the request are to be
discarded and not committed.
• ignore - Ignore all unknown properties. Do not log any messages or return any validation errors.
• log - Log a service-side info message, but then process the call, ignoring any unknown properties.
• reject - Do not process the call. Return a validation error specifying there are unknown properties.
Similarly, a Cloud API call may include a URL with a query parameter that is not defined in the associated schema. By
default, Cloud API rejects calls with unknown query parameters. You can override the default behavior by including
the GW-UnknownQueryParamHandling header. The header must be set to one of the following string values:
• ignore - Ignore all unknown query parameters. Do not log any messages or return any validation errors.
• log - Log a service-side info message, but then process the call, ignoring any unknown query parameters.
• reject - Do not process the call. Return a validation error specifying there are unknown query parameters.
Request headers 89
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
response headers turned into strings that the servlet container is responsible for writing to the response. Cloud API
supports serialization of a number of different Java object types that can be returned directly from an API handler
method, set as the value of the body of a response object, or added as the value of a header on the response object.
There are several types of response objects whose serialized format is JSON. This includes JsonObject, JsonWrapper,
and TransformResult. By default, a JsonObject or JsonWrapper is validated only against the declared response
schema to ensure that all properties on the object are declared in the schema and have the correct data type.
TransformResult objects are "implicitly validated", given that the mapping file that produces them must conform to
the associated JSON schema.
It is possible to request that the framework also validate a JsonObject, JsonWrapper, or TransformResult against
additional constraints defined in the schema, such as minLength, the set of required fields, or any custom validators
that have been defined. These additional validations are not done by default because they can potentially be an
unnecessary expense in a production situation where the assumption is that the endpoint has been implemented
correctly and will only return valid data. It is also possible that the constraints defined in the schema are intended to
only apply to inputs, and that the response may violate some of them.
You can use the GW-ValidateResponseHandling header to have Cloud API validate its responses against the declared
schema. To do this, include the header and set its value to true.
90 Request headers
part 2
Optimizing calls
The following topics discuss how caller applications can optimize Cloud API calls. This may involve reducing the
number of calls needed to complete an operation, or improving call performance. This includes how to:
• Reduce the number of calls needed to accomplish a business flow using:
◦ Composite requests
◦ Request inclusion
◦ Batch requests
• Prevent lost updates using checksums
• Execute calls asynchronously
Optimizing calls 91
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
92 Optimizing calls
chapter 8
Good integration design typically involves writing integration points so that the number of calls between services is as
small as possible. Cloud API includes multiple features that let caller applications execute multiple requests in a single
call. This topic provides an overview of these features.
Composite requests
From a Cloud API perspective, a composite request is a set of requests that are executed in a single InsuranceSuite
bundle (which corresponds to a single database transaction).
• A composite request can include one or more subrequests that create or modify data. Either all of the subrequests
succeed, or none of them are executed. Each subrequest is a separate unit of work.
• A composite request can also include one or more subselections that query for data.
◦ If the composite request has one or more subrequests, the subselections can retrieve data created or modified by
those subrequests.
◦ A composite request can also have no subrequests. In this case, the subselections merely execute multiple
queries to retrieve existing data.
Subrequests and subresponses are executed serially, in the order they are specified in the composite request payload.
ClaimCenter then gathers the response to each subrequest and subselection and returns them in a single response
payload. The responses to each subrequest and subselection appear in the same order as the original composite request.
Composite requests can make use of variables. This allows data created by the execution of one subrequest to be used
by later subrequests.
Composite requests can consist entirely of subrequests that merely retrieve data. For more information, see “Composite
requests that execute only queries” on page 102.
Composite requests support the use of most endpoints, but not all of them. They also support many query parameters,
but not all of them. For more information, see “Composite request limitations” on page 103.
Composite requests can be submitted asynchronously. For more information, see “Asynchronous calls” on page 131.
Composite requests are limited to a maximum number of subrequests. For more information, see “Configuring the
maximum number of subrequests” on page 106.
Composite requests 95
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
POST <applicationURL>/rest/composite/v1/composite
{
"requests": [
{
<subrequest 1>
},
{
<subrequest 2>
},
...
],
"selections": [
{
<subselection 1>
},
{
<subselection 2>
},
...
]
}
{
"requests": [
{
"method": "<post/patch/delete>",
"uri": "<path>",
"body": {
"data": {
"attributes": {
"<field1>": "<value1>",
"<field2>": "<value2>",
...
}
}
}
},
{
<next subrequest>
},
...
{
<final subrequest>
}
]
}
For example, the following simple composite request creates two notes for activity xc:202.
POST <applicationURL>/rest/composite/v1/composite
{
"requests": [
{
"method": "post",
"uri": "/common/v1/activities/xc:202/notes",
"body": {
96 Composite requests
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"data": {
"attributes": {
"body": "Cloud API note #1."
}
}
}
},
{
"method": "post",
"uri": "/common/v1/activities/xc:202/notes",
"body": {
"data": {
"attributes": {
"body": "Cloud API note #2."
}
}
}
}
]
}
For the complete syntax that includes all composite request features, see “Complete composite request syntax” on page
106.
Declaring variables
Composite variables are declared in a subrequest's vars section. Each variable has a name and path. The name is an
arbitrary string. The path specifies what to set the variable to. It is set to a JSON path expression that identifies a value
in the subrequest's response payload.
For example, suppose a subrequest that creates an activity has the following:
"vars": [
{
"name": "newActivityId",
"path": "$.[Link]"
}
]
This creates a variable named newActivityId, which is set to the value of the data section's attributes section's id
field (which would typically be the id of the newly created activity).
Referencing variables
To reference a variable, use the following syntax:
${<varName>}
You can use variables anywhere in the body of a subrequest. The most common uses for variable values are:
• In an attributes field
• Within the path of a uri
• As part of a query parameter
For example, suppose there is a subrequest that creates an activity, and it is followed by a subrequest that creates a
note. The first subrequest creates a newActivityId variable as shown previously. The uri for the second subrequest is:
"uri": "/common/v1/activities/${newActivityId}/notes"
This would create the new note as a child of the first subrequest's activity.
The following is the complete code for the previous examples.
{
"requests": [
Composite requests 97
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
{
"method": "post",
"uri": "/claim/v1/claims/cc:34/activities",
"body": {
"data": {
"attributes": {
"activityPattern": "contact_insured",
"subject": "Cloud API activity"
}
}
},
"vars": [
{
"name": "newActivityId",
"path": "$.[Link]"
}
]
},
{
"method": "post",
"uri": "/common/v1/activities/${newActivityId}/notes",
"body": {
"data": {
"attributes": {
"body": "Cloud API note #1."
}
}
}
}
]
}
"responses": [
{
"body": {
"data": {
"attributes": {
"activityPattern": "contact_insured",
"activityType": {
"code": "general",
"name": "General"
},
"assignedByUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1",
"type": "User",
"uri": "/admin/v1/users/demo_sample:1"
},
...
},
"checksum": "0",
"links": {
"assign": {
"href": "/common/v1/activities/cc:403/assign",
"methods": [
"post"
]
},
...
}
}
},
"headers": {
"GW-Checksum": "0",
"Location": "/common/v1/activities/xc:403"
},
"status": 201
},
98 Composite requests
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"includeResponse": false
For example:
{
"requests": [
{
"method": "post",
"uri": "/common/v1/activities/xc:202/notes",
"body": {
"data": {
"attributes": {
"body": "Cloud API note #1."
}
}
},
"includeResponse": false
},
...
The composite response still includes a subresponse for the subrequest. But instead of providing the endpoint's default
response, the subresponse appears as:
{
"responseIncluded": false
},
The responseIncluded field defaults to true. If you want a detailed response for a given subrequest, simply omit the
responseIncluded reference.
Composite requests 99
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
{
"requests": [
{
"method": "<post/patch>",
"uri": "<path>",
"body": {
"data": {
"attributes": {
"<field1>": "<value1>",
"<field2>": "<value2>",
...
}
}
},
"parameters" : {
"fields" : "<value>"
}
},
...
]
}
For example, the following code snippet creates an activity. For the subresponse, it specifies to include only the
activity's id and the assigned user.
{
"requests": [
{
"method": "post",
"uri": "/claim/v1/claims/cc:34/activities",
"body": {
"data": {
"attributes": {
"activityPattern": "contact_insured",
"subject": "Cloud API activity"
}
}
},
"parameters" : {
"fields" : "id,assignedUser"
}
},
...
For a given API, you can see a complete list of all query parameters that can be used in composite requests by
executing a GET /[Link] call. If a query parameter is available to composite requests, the OpenAPI output will
include the following line: "x-gw-allowForCompositeApi": true.
"selections": [
{
"uri": "<pathForFirstSubselection>"
},
{
"uri": "<pathForSecondSubselection>"
},
....
]
For example, the following code creates a new activity and a note for that activity. It then queries for the newly created
activity.
{
"requests": [
{
"method": "post",
"uri": "/claim/v1/claims/cc:34/activities",
"body": {
"data": {
"attributes": {
"activityPattern": "contact_insured",
"subject": "Cloud API activity"
}
}
},
"vars": [
{
"name": "newActivityId",
"path": "$.[Link]"
}
]
},
{
"method": "post",
"uri": "/common/v1/activities/${newActivityId}/notes",
"body": {
"data": {
"attributes": {
"body": "Cloud API note #1."
}
}
}
}
],
"selections": [
{
"uri": "/common/v1/activities/${newActivityId}"
}
]
}
For the complete syntax that includes all composite request features, see “Complete composite request syntax” on page
106.
"selections": [
{
"uri": "<pathForFirstQuery>",
"parameters" : {
"fields" : "<value>",
"filter" : [<value>],
"includeTotal" : <value>,
"pageOffset" : <value>,
"pageSize" : <value>,
"sort" : [<value>]
}
},
....
]
{
"uri": "/common/v1/activities",
"parameters" : {
"fields" : "assignedUser,dueDate,priority,subject"
}
To return only open and complete activities with due dates after 2022-12-20:
{
"uri": "/common/v1/activities",
"parameters" : {
"filter" : ["dueDate:gt:2022-12-20","status:in:open,complete"] }
{
"uri": "/common/v1/activities",
"parameters" : {
"fields" : "assignedUser,dueDate,priority,subject",
"filter" : ["dueDate:gt:2022-12-20","status:in:open,complete"],
"includeTotal" : true,
"pageSize" : 5,
"sort" : ["dueDate"]
}
There may be additional query parameters you can use. For information on how to determine whether a query
parameter is supported in a composite request, see “Composite request limitations” on page 103.
Business-specific limitations
There may be some business requirements where you are required to use a composite request. For example, when
creating a new claim with an unverified policy, you must create the policy and claim in a composite request.
There are also specific business requirements where you cannot use a composite request. For example:
• You cannot have a single composite request operate on more than one claim.
• For service requests that are Quote Only, Quote and Service, or Service Only, you can create and submit a service
request in a single composite request. But you cannot advance these types of service requests to any other stage in
its life cycle (such as in progress, declined, or canceled at the vendor’s or insurer’s request) in the same composite
request.
• Within a composite request, the only financial object you can create or modify is final non-recurring check sets.
You otherwise cannot create or modify financial objects. This includes reserve sets and reserve transactions,
recurring check sets and payment transactions, and the check life cycle endpoints (such as POST /mark-issued).
However, within a composite request, you can GET information on financial objects.
Many of the examples in the previous list pertain to situations where there must be an intermediate data commit, which
composite requests do not allow by design. However, the previous list is not intended to be exhaustive. Refer to the
section of the documentation that discusses each business requirement for more information on requirements or
limitations related to composite requests.
Error handling
If any of the subrequests in the requests section fail, Cloud API does the following:
• Does not commit any of the data
• Does not execute any GETs in the selections section
• Returns a 400 error
Cloud API also returns a response.
• The response begins with the following: "requestFailed": true. This is to make it easy to identify that the
composite request did not commit data.
• For the initial subrequests that did not fail (if any), the response is returned.
◦ This is either the response as specified by the associated endpoint (and any query parameters), or the
"responseIncluded": false text.
◦ The standard response can be useful for debugging purposes, as you can see the state of objects that succeeded
before the subrequest that failed.
• For the subrequest that failed, the error message is returned.
• For the subrequests after the failed subrequest, the text "skipped": true is returned.
• If a selections section was included, the text "skipped": true is returned for each subselection.
For example, the following is the response for a composite request with five subrequests and a set of queries. All
subrequests have responseIncluded set to false. The third subrequest failed because the dueDate attribute was
incorrectly spelled as ueDate.
{
"requestFailed": true,
"responses": [
{
"responseIncluded": false
},
{
"responseIncluded": false
},
{
"requestError": {
"details": [
{
"message": "Schema definition '[Link].v1.common_ext-
1.0#/definitions/Note' does not define any property
named 'ueDate'",
"properties": {
"lineNumber": 1,
"parameterLocation": "body",
"parameterName": "body"
}
}
],
"developerMessage": "The request parameters or body had issues.
See the details elements for exact details of the problems.",
"errorCode": "[Link]",
"status": 400,
"userMessage": "The request parameters or body had issues"
},
"status": 400
},
{
"skipped": true
},
{
"skipped": true
}
],
"selections": [
{
"skipped": true
}
]
}
If there is an error in the selections section only, the subrequests in the requests section will execute, the data will
be committed, and the composite request will return with a 200 response code, indicating success. Cloud API also
attempts to execute each subselection as best as possible.
Logging
Cloud API logs information about composite requests at both the composite request level and the subrequest/
subselection level. This information appears in the logs under the CompositeSubRequest marker, which is a child of
the normal RestRequest marker.
Each subrequest and subselection log message details information for that subrequest/subselection, such as the actual
path, the HTTP method, and the apiFqn. The same log parameter names and conventions are used for both the parent
request logging and the subrequest logging, such as whether a given value is logged with an empty string or whether it
is omitted. However:
• Some parameters are always omitted at the subrequest level because they only make sense for the parent request.
• Some additional composite-specific parameters are added.
For example, suppose you executed the previous composite request example in which a composite request creates two
notes for activity xc:202. The corresponding log entries could appear as follows. Note that the first message is for the
parent request and the next two messages are for the two subrequests:
Each subrequest or subselection always generates a log statement, whether the subrequest succeeded, failed, or was
skipped due to prior failures. A separate log statement is also added specifically for the commit of the composite
request, whether the composite request commit succeeded, failed, or was skipped.
{
"requests": [
{
"method": "<post/patch/delete>",
"uri": "<path>",
"body": {
"data": {
"attributes": {
"<field1>": "<value1>",
"<field2>": "<value2>",
...
}
}
},
"parameters" : {
"fields" : "<value>"
},
"vars": [
{
"name": "<name>",
"path": "<path-starting-with-$>"
},
<next variable>,
...
],
"includeResponse": false
},
{
<next subrequest>
},
...
{
<final subrequest>
}
],
"selections": [
{
"uri": "<pathForFirstQuery>",
"parameters" : {
"fields" : "<value>",
"filter" : [<value>],
"includeTotal" : <value>,
"pageOffset" : <value>,
"pageSize" : <value>,
"sort" : [<value>]
}
},
{
<next subselection>
},
...
{
<final subselection>
}
]
}
Inclusion is a way of accessing both a parent resource and resources relating to that parent in one command. The
availability of inclusion depends on the resource, and can be available for both requests and responses.
Request inclusion
Request inclusion is a technique for POSTs and PATCHes in which the call consists of the following:
• A single parent request that creates or modifies a resource
• One or more child requests that create or modify resources related to the parent resource
If either the parent request or any child request fails, the entire request fails.
The parent resource is often referred to as the root resource. The root resource is specified in the payload's data
section. The related resources are specified in the payload's included section.
For example, a caller can use a single POST /claims to create a new claim, a set of ClaimContacts for that claim, a set
of incidents for that claim, and a set of exposures for that claim.
In order to use request inclusion, the following must be true:
• There must be a POST or PATCH endpoint for the root resource.
• This endpoint must have the child resource as part of its included section.
• There must also be a POST or PATCH endpoint for the child resource.
The syntax for request inclusion varies slightly, depending on whether the relationship between the root resource and
the included resource is a "simple parent/child relationship", or a "named relationship".
Request inclusion can use endpoints from different APIs for included resources.
Response inclusion
Some endpoints allow you to use query parameters to include information about related resources in the response. See
“Additional behaviors with read inclusion” on page 115 and “Payload structure for a response with included
resources” on page 40 for more information.
{
"data" : {
"attributes": {
...
}
},
"included": {
"<resourceType>": [
{
"attributes": {
...
},
"method": "post",
"uri": "/../this/..."
}
]
}
}
"included": {
"Note": [
{
"attributes": {
...
},
"method": "post",
"uri": "/claim/v1/claims/this/notes"
}
]
}
This specifies that in order to create the note, use the POST /claim/v1/claims/{claimId}/notes endpoint.
The uri must start with the API name, such as "/claim/v1".
If the included resource is being POSTed, the uri must specify the ID of the root resource. When the root resource and
the included resources are being created at the same time, the root resource does not yet have an ID. Therefore, the
keyword this is used in the uri to represent the root resource's ID. If the root resource is being PATCHed, the URI
field does not use this. For more information, see “PATCHes in request inclusion” on page 113.
POST [Link]
{
"data" : {
"attributes": {
"lossDate": "2020-02-01T07:00:00.000Z",
"policyNumber": "FNOL-POLICY"
}
},
"included": {
"Note": [
{
"attributes": {
"subject": "Initial phone call",
"body": "Initial phone call with claimant"
},
"method": "post",
"uri": "/claim/v1/claims/this/notes"
}
]
}
}
{
"data" : {
"attributes": {
"<relationshipField>": "<arbitraryRefId>"
...
}
},
"included": {
"<resourceType>": [
{
"attributes": {
...
},
"refid": "<arbitraryRefId>",
"method": "post",
"uri": "/../this/..."
}
]
}
}
"included": {
"ClaimContact": [
{
"attributes": {
...
},
"refid": "...",
"method": "post",
"uri": "/claim/v1/claims/this/contacts"
}
]
}
This specifies that in order to create the ClaimContact, use the POST /claim/v1/claims/{claimId}/contacts
endpoint.
The uri must start with the API name, such as "/claim/v1".
If the included resource is being POSTed, the uri must specify the ID of the root resource. When the root resource and
the included resources are being created at the same time, the root resource does not yet have an ID. Therefore, the
keyword this is used in the uri to represent the root resource's ID. If the root resource is being PATCHed, the URI
field would not use this. For more information, see “PATCHes in request inclusion” on page 113.
POST [Link]
{
"data" : {
"attributes": {
"lossDate": "2020-02-01T07:00:00.000Z",
"policyNumber": "FNOL-POLICY",
"reporter": {
"refid": "robertFarley"
}
}
},
"included": {
"ClaimContact": [
{
"attributes": {
"firstName": "Robert",
"lastName": "Farley",
"contactSubtype": "Person"
},
"refid": "robertFarley",
"method": "post",
"uri": "/claim/v1/claims/this/contacts"
}
]
}
}
{
"data" : {
"attributes": {
...
}
},
"included": {
"<resourceType>": [
{
"attributes": {
...
},
"method": "post",
"uri": "/../<parentId>/<resourceType>
}
]
}
}
{
"data" : {
"attributes": {
...
}
},
"included": {
"<resourceType>": [
{
"attributes": {
...
},
"method": "patch",
"uri": "/../<childId>"
}
]
}
}
Note: The uri field may or may not include a placeholder for the parent id. It depends on the structure of the
endpoint the uri is referencing.
For example, if the children were a PATCHed ClaimContact and a PATCHed note, the uri fields would be:
• "uri": "/claim/v1/claims/<claimId>/contacts/<contactId>"
• "uri": "/common/v1/notes/<noteId>"
PATCH [Link]
{
"data": {
"attributes": {
"mainContact": {
"id": "cc:SF6434QkBBFpxqB1dQEcJ"
}
}
},
"included": {
"ClaimContact": [
{
"attributes": {
"cellPhone": {
"countryCode": {
"code": "US",
"name": "United States (1)"
},
"number": "123-456-7890"
}
},
"method": "patch",
"uri": "/claim/v1/claims/demo_sample:2/contacts/cc:SF6434QkBBFpxqB1dQEcJ"
}
],
"Note": [
{
"attributes": {
"subject": "Updated main contact",
"body":"Added Allen Robertson as main contact and updated his cell phone number."
},
"method": "post",
"uri": "/claim/v1/claims/demo_sample:2/notes"
}
]
}
}
Included resources cannot reference resources other than the root resource
When using request inclusion, each included resource must specify its own operation and uri. The uri is expected to
reference the root resource using the keyword this. This ensures that when the included resource is POSTed or
PATCHed, the included resource is related to the root resource.
For example, suppose a POST is creating a claim and a note. The uri for the note would have a value such as "/
claim/v1/claims/this/notes".
From a syntax perspective, you could attempt to attach an included resource not to the root resource, but rather to some
other existing resource. For example, instead of referencing the root resource, the uri for the note could reference an
existing claim, such as "/claim/v1/claims/cc:200/notes". This uri says "create a note and attach it not to the root
resource of this POST, but rather to the existing claim cc:200".
Cloud API will not allow this. Any attempt to POST or PATCH an included resource to something other than the root
resource will cause the operation to fail.
"uri": "/claim/v1/claims/<claimid>/notes"
To PATCH a note, the method and uri fields look like this:
"method": "patch",
"uri": "/common/v1/notes/<noteid>"
However, some included resources are accessed through the same API as the root resource. For example,
ClaimContacts are POSTed and PATCHed through the Claim API. POSTing a ClaimContact as an included resource
would use method and uri fields similar to this:
"method": "post",
"uri": "/claim/v1/claims/<claimid>/contacts"
PATCHing a contact would use method and uri fields like this:
"method": "patch",
"uri": "/claim/v1/claims/<claimid>/contacts/<contactid>"
You can also use query parameters to filter included resources. For example, the following call retrieves all activities
assigned to the current user and includes any related notes. The number of notes returned in this example is limited to
5.
GET /activities?include=notes&pageSize=notes:5
For more information on how to use query parameters with included resources, see “Query parameters for included
resources” on page 60.
Batch requests
From a Cloud API perspective, a batch request is a set of requests that are executed in a non-transactional sequence.
Each call within the batch request is referred to as a subrequest. The object that contains all of the subrequests is
referred to as the main request.
Subrequests are executed serially, in the order they are specified in the request payload. ClaimCenter then gathers the
responses to each subrequest and returns them in a single response payload. Once again, the subresponses appear in the
same order as the corresponding subrequests.
When the response to a batch request contains a response code of 200, it means the batch request itself was well-
formed. However, each individual subrequest may have succeeded or failed.
Batch requests are limited to a maximum number of subrequests. The maximum is specified by the
MaximumAllowedNumberOfBatchSubRequests configuration parameter. In the base configuration, this parameter is set
to 100. Batch requests with more than the maximum number of subrequests fail with a BadInputException. For more
information on modifying the maximum number of subrequests, see “Configuring the maximum number of
subrequests” on page 121.
POST <applicationURL>/rest/<apiWithVersion>/batch
For example, if you were executing a Claim API batch from an instance of ClaimCenter on your local machine, the call
would be:
POST [Link]
{
"requests": [
{
"method": "<method>",
"path": "<path>",
"query": "<queryParameters>",
"data":
{
"attributes": {
"<field1>": "<value1>",
"<field2>": "<value2>",
...
}
}
},
{
"method": "<method>",
"path": "<path>",
"query": "<queryParameters>",
"data":
{
"attributes": {
"<field1>": "<value1>",
"<field2>": "<value2>",
...
}
}
},
...
]
}
where:
• <method> is the method in lower case, such as "get", "post", "patch", or "delete".
• <path> is the endpoint path.
◦ This path starts as if it was immediately following the API path (including the major version, such as "/v1").
For example, suppose the path for a command when executed in isolation is: [Link]
rest/claim/v1/claims/cc:22/activities/cc:55. The path within a batch is: /claims/cc:22/
activities/cc:55
• <queryParmaters> is an optional string of query parameters. Start this string without an initial "?".
• <field1/<value> are the field and value pairs of the request body.
The following sections provide examples of how to use this syntax.
{
"requests": [
{
"method": "get",
"path": "/claims/demo_sample:1"
},
{
"method": "get",
"path": "/claims/demo_sample:2"
},
{
"method": "get",
"path": "/claims/demo_sample:3"
}
]
}
{
"requests": [
{
"method": "get",
"path": "/claims/demo_sample:1",
"query": "sort=lossDate"
},
{
"method": "get",
"path": "/claims/demo_sample:2",
"query": "fields=*all"
},
{
"method": "get",
"path": "/claims/demo_sample:3"
}
]
}
{
"requests": [
{
"method": "post",
"path": "/activities/xc:11/notes",
"data":
{
"attributes": {
"body": "Batch note 1"
}
}
},
{
"method": "post",
"path": "/activities/xc:73/notes",
"data":
{
"attributes": {
"body": "Batch note 2"
}
}
}
]
}
{
"requests": [
{
"method": "post",
"path": "/activities/xc:21/notes"
"body": {
"data": {
"attributes": {
"body": "Batch activity 1",
"subject": "Batch activity 1",
"topic": {
"code": "general",
"name": "General"
}
}
}
}
},
{
"method": "patch",
"path": "/notes/xc:22",
"body": {
"data": {
"attributes": {
"body": "PATCHed note body"
}
}
},
},
{
"method": "delete",
"path": "/notes/xc:23"
},
{
"method": "get",
"path": "/activities/xc:24/notes",
"query": "sort=subject&fields=id,subject"
}
]
}
{
"requests": [
{
"method": "delete",
"path": "/activities/xc:55",
"headers": [
{
"name": "GW-Checksum",
"value": "2"
}
]
},
{
"method": "delete",
"path": "/activities/xc:57",
"headers": [
{
"name": "GW-Checksum",
"value": "4"
}
]
}
]
}
{
"requests": [
{
"method": "patch",
"path": "/activities/xc:93",
"body": {
"data": {
"attributes": {
"subject": "PATCH body 1"
}
}
},
"onFail": "abort"
},
{
"method": "patch",
"path": "/activities/xc:94",
"body": {
"data": {
"attributes": {
"subject": "PATCH body 2"
}
}
},
"onFail": "abort"
},
{
"method": "patch",
"path": "/activities/xc:95",
"body": {
"data": {
"attributes": {
"subject": "PATCH body 3"
}
}
}
}
]
}
Also, be aware that batch requests are subject to any application server limitations around the maximum size of a
request body. Thus, it is possible for a batch request to be too large to process, even if the number of subrequests is at
or below the allowed maximum.
This topic defines lost updates and discusses how you can prevent them through the use of checksums.
If you want to interact directly with the concepts in this topic, go to the following tutorials:
• “Tutorial: PATCH an activity using checksums” on page 125
• “Tutorial: Assign an activity using checksums” on page 126
• “Tutorial: DELETE a note using checksums” on page 127
Lost updates
Business processes often span multiple Cloud API calls. When this occurs, the first call is typically either a GET that
retrieves data or a POST that creates data. A later call may attempt to modify the resource queried for or created in the
initial GET or POST.
Some other process could modify the resource between the GET/POST and the subsequent attempt to modify it. For
example, suppose:
1. A caller application GETs activity xc:20. The activity's subject is "Contact additional insured" and the priority is
Normal.
2. An internal user manually changes the subject of activity xc:20 to "Contact primary insured" and sets the priority
to Urgent.
3. The caller application PATCHes activity xc:20 and sets the priority to Low.
The caller application's PATCH overwrites some of the changes made by the internal user. This could be a problem for
several reasons:
• The caller application's change may be based on the data it initially retrieved. The caller application may not have
initiated the change if it had known the subject or priority had later been changed by someone else.
• The internal user may not be aware that some of their changes were effectively discarded.
• The activity may now be in an inconsistent state (such as having a subject that is normally used for urgent activities
and a priority of Low).
This type of modification is referred to as a lost update. Within Cloud API, a lost update is a modification made to a
resource that unintentionally overwrites changes made by some other process. You can prevent lost updates through the
use of checksums.
Checksums
A checksum is a string value that identifies the "version" of a particular resource. Cloud API calculates checksums as
needed based on information about the underlying entities in the ClaimCenter database.
When a process modifies data, either through user action, Cloud API, or some other process, Cloud API calculates a
different checksum for the resource. You can prevent lost updates by checking a resource's checksum before you
modify the resource to see if it matches a previously retrieved checksum.
By default, checksums are provided in the response payloads of all GETs, POSTs, and PATCHes.
Checksums can be included in:
• Request payloads, which is appropriate for:
◦ PATCHes
◦ Business action POSTs that allow request payloads (such as POST /{activityID}/assign)
• Request object headers for:
◦ DELETEs
◦ Business action POSTs that do not allow request payloads
When you submit a request with a checksum, ClaimCenter calculates the checksum and compares that value to the
submitted checksum value.
• If the values match, ClaimCenter determines the resource has not been changed since the caller application last
acquired the data. The request is executed.
• If the values do not match, ClaimCenter determines the resource has been changed since the caller application last
acquired the data. The request is not executed, and ClaimCenter returns an error similar to the following:
{
"message": "The supplied checksum '1' does not match the current checksum '2' for the resource with uri '/
common/v1/notes/xc:101'",
"properties": {
"uri": "/common/v1/notes/xc:101",
"currentChecksum": "2",
"suppliedChecksum": "1"
}
}
Generating checksums
Checksums are always string values generated by Guidewire based on all the values in the database for the associated
entity. Checksums are typically complex string values, such as c689ec1403a489ed7bc3ca6e8ce4f73e.
An resource's checksum is modified when any field in the associated entity changes, whether that field is exposed to
Cloud API or not. For example, the Activity entity has a field named EmailTemplate which stores the id of any email
template associated with the activity. This field is not exposed in Cloud API. However, if this field is changed for a
given activity, either through the user interface or by some other process, this will increment the Activity resource's
checksum.
In some cases, checksums are set to simple integer values, such as 1, and a change to the entity simply increments the
integer value by 1. However, when a checksum is an integer, there is no guarantee that the next checksum will be the
integer value incremented by one. Guidewire recommends against caller applications attempting to predict what the
next checksum value will be. Limit checksums in Cloud API requests to only the checksums returned in previous
responses.
However, there are resources that combine fields from multiple data model entities. For example, the User resource has
fields that map to the User data model entity (such as externalUser), the Credential data model entity (such as
username), and the UserContact data mode entity (such as cellphone).
In the base configuration, when a resource maps to multiple data model entities, a change to any one of the underlying
entities increments the resource's checksum. Custom resources that map to multiple data model entities can also be
configured to have the checksum reflect changes to any of the underlying data model entities. For more information,
see the Cloud API Developer Guide.
"checksum": "<value>"
For example, the following payload is for a PATCH to an activity. The payload specifies a new attribute value (setting
priority to urgent) and a checksum value (7a0d9677f11e246bbe3c124889219c50).
{
"data": {
"attributes": {
"priority": {
"code": "urgent"
}
},
"checksum": "7a0d9677f11e246bbe3c124889219c50"
}
}
Checksums can be specified on the root resource and on any included resource. Specifying a checksum for any one
resource does not require you to specify checksums for the others. For example:
• You could specify a checksum for only the root resource.
• You could specify a checksum for only one of the included resources.
• You could specify a checksum for the root resource and some of the included resources, but not all of the included
resources.
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
a. On the Authorization tab, select Basic Auth using user aapplegate and password gw.
2. The sample data includes one "Get police report" activity, which can be PATCHed because it is an open activity
on an open claim. Query for that activity by entering the following call and clicking Send:
a. GET [Link]
%20report
3. Note the ID, subject, and checksum of the first activity returned in the response payload. (These values are
referred to in later steps as "<ActivityID>", "<originalSubject>", and "<originalChecksum>".)
4. Open a second request tab and right-clicking the first tab and selecting Duplicate Tab.
5. Change the operation to PATCH and enter the following URL, but do not click Send yet:
a. PATCH [Link]
6. Specify the request payload.
a. In the first row of tabs (the one that starts with Params), click Body.
b. In the row of radio buttons, select raw.
c. At the end of the row of radio buttons, change the drop-down list value from Text to JSON.
d. Paste the following into the text field underneath the radio buttons. For subject, specify the original subject
with an additional "-1".
{
"data": {
"attributes": {
"subject" : "<originalSubject>-1"
},
"checksum": "<originalChecksum>"
}
}
7. Click Send. The checksum value in the payload matches the checksum value for the activity stored in
ClaimCenter. So, the PATCH should be successful and the response payload should appear below the request
payload.
8. Click Send a second time. Now, the checksum value in the payload does not match the checksum value for the
activity calculated by ClaimCenter. So, the second PATCH is unsuccessful and an error message appears.
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
a. On the Authorization tab, select Basic Auth using user aapplegate and password gw.
2. The sample data includes one "Get police report" activity, which can be PATCHed because it is an open activity
on an open claim. Query for that activity by entering the following call and clicking Send:
a. GET [Link]
%20report
3. Note the ID and checksum of the first activity returned in the response payload. (These values are referred to in
later steps as "<ActivityID>", and "<originalChecksum>".)
4. Open a second request tab and right-clicking the first tab and selecting Duplicate Tab.
5. Change the operation to POST and enter the following URL, but do not click Send yet:
a. POST [Link]
6. The POST /{activityId}/assign endpoint requires a request payload that specifies how the assignment is to
be done. Specify the request payload.
a. In the first row of tabs (the one that starts with Params), click Body.
b. In the row of radio buttons, select raw.
c. At the end of the row of radio buttons, change the drop-down list value from Text to JSON.
d. Paste the following into the text field underneath the radio buttons. For subject, specify the original subject
with an additional "-1".
{
"data": {
"attributes": {
"autoAssign": true
},
"checksum": "<originalChecksum>"
}
}
7. Click Send. The checksum value in the payload matches the checksum value for the activity stored in
ClaimCenter. So, the POST /assign should be successful and the response payload should appear below the
request payload.
8. Click Send a second time. Now, the checksum value in the payload does not match the checksum value for the
activity calculated by ClaimCenter. (The successful POST /assign from the previous step will have modified the
checksum value.) So, the second POST /assign is unsuccessful and an error message appears.
Procedure
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
2. Specify authorization as appropriate.
3. Add the checksum to the header.
• In the first row of tabs (the one that starts with Params), click Headers.
• Scroll to the bottom of the existing key/value list.
• In the blank row at the bottom of the key/value list, enter the following:
◦ KEY: GW-Checksum
◦ VALUE: <checksum value>
4. Enter the request operation and URL.
5. Click Send.
Results
The response appears below the request. Depending on the checksum value provided, the response will either include a
success code or an error message.
In this tutorial, you will send calls as Elizabeth Lee (user name elee). In the base configuration, Elizabeth Lee is a
manager who has permission to delete notes. As Elizabeth Lee, you will create a note. You will then attempt to
DELETE the note twice. Both DELETEs will include a checksum value. The first DELETE will fail, and the second
will succeed.
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
a. On the Authorization tab, select Basic Auth using user aapplegate and password gw.
2. Enter the following call and click Send:
GET [Link]
3. Identify the id of the first activity in the payload. This value is referenced below as <activityId>.
4. Identify the id of the account in the payload. This value is referenced below as <accountId>.
5. Open a second request tab and right-clicking the first tab and selecting Duplicate Tab tab.
a. On the Authorization tab, select Basic Auth using user elee and password gw.
6. Change the operation to POST and enter the following URL, but do not click Send yet:
a. POST [Link]
7. Specify the request payload.
a. In the first row of tabs (the one that starts with Params), click Body.
b. In the row of radio buttons, select raw.
c. At the end of the row of radio buttons, change the drop-down list value from Text to JSON.
d. Paste the following into the text field underneath the radio buttons.
{
"data":
{
"attributes": {
"body": "API tutorial note to be deleted with a checksum"
}
}
}
15. Click Send a second time. Now, the checksum value in the header matches the checksum value for the note
calculated by ClaimCenter. So, the DELETE is successful. (The response to a successful DELETE is "204 - No
content".)
Asynchronous calls
REST calls made to Cloud API are typically synchronous. The caller application submits a call and then waits for the
reply. However, for some types of calls, waiting for a reply may be problematic. For example:
• The call may take long enough to process that the API Gateway times out.
• The call may take long enough to process that the client-side toolkit used to make the call times out.
• A synchronous call may consume too many client-side resources.
To address these situations, calls can also be made asynchronously. The caller application submits the request at one
point in time. At a later point in time, the caller application retrieves the response.
This topic discusses how to execute Cloud API calls asynchronously.
If you want to interact directly with the concepts in this topic, go to the following tutorials:
• “Tutorial: Send a request asynchronously” on page 137
• “Tutorial: Retrieve information about an asynchronous request” on page 138
• “Tutorial: Send a request asynchronously with a wait time” on page 139
1. The caller application sends a request to Cloud API. In the diagram, the request is a POST for a resource named
someResource. The request has a set of request headers and may have a payload.
2. Cloud API processes the request synchronously.
3. Assuming the request is successful, Cloud API provides the response. The response also has a set of response
headers and may have a payload.
Asynchronous calls
For some calls, it can be problematic to wait for a synchronous response. For example, quoting a large commercial
policy may take several minutes, and the API Gateway may time out before the quote can be completed and returned to
the caller.
To address these situations, you can execute a Cloud API call asynchronously. Broadly speaking, there are three phases
to an asynchronous call. In practice, this could occur with fewer than or more than three calls.
1. The caller application sends a request to Cloud API. The request object includes a request header indicating to
process the call asynchronously.
2. Cloud API accepts the request. But it does not immediately process it.
3. Cloud API provides a response. The response includes a header with an Async API /requests path that can be
used to retrieve:
a. Information about the initial request.
b. The response to the initial request, once it is available.
{
"data": {
"attributes": {
"requestMethod": "POST",
"requestPath": "/admin/v1/users",
"startTime": "2022-07-12T16:53:12.365Z",
"status": {
"code": "Accepted",
"name": "Accepted"
}
}
}
}
{
"data": {
"attributes": {
"completionTime": "2022-07-12T16:53:16.073Z",
"requestMethod": "POST",
"requestPath": "/admin/v1/users",
"responseBodyJson": {
"data": {
"attributes": {
...
"username": "asyncUser99",
"vacationStatus": {
"code": "atwork",
"name": "At work"
}
},
"checksum": "321dff263827cbbd772c26676398d8ae",
"links": {
...
}
}
},
"responseHeaders": {
"Cache-Control": [
"must-revalidate",
"post-check=0",
"pre-check=0",
"max-age=0",
"no-store",
"no-cache"
],
"Content-Type": [
"application/json;charset=UTF-8"
],
"GW-Checksum": [
"321dff263827cbbd772c26676398d8ae"
],
"Location": [
"/admin/v1/users/pc:ScaA3kB5cImBkuh7bxjNn"
],
"X-Correlation-ID": [
"d516344d-5769-4964-adb7-79eaca41e4a2"
],
...
},
"responseStatus": 201,
"startTime": "2022-07-12T16:53:12.365Z",
"status": {
"code": "Complete",
"name": "Complete"
}
}
...
}
}
1. The caller application sends a GET /async/v1/requests/{asyncRequestId} request to Cloud API. The path
comes from the header of the initial response.
2. The Cloud API response includes information about the original request. If the status is Accepted or In Progress,
the caller application must re-submit the GET after an appropriate interval.
When the response includes a status of Complete, the caller can retrieve the response to the original request. There are
multiple ways that it can be retrieved.
4. The caller application sends a GET /async/v1/requests/{asyncRequestId} request to Cloud API. The
acyncRequestId comes from the header of the initial response.
5. The Cloud API response includes information about the original request. When the status is Complete, the response
includes the original request's response if the response type is application/json.
Note that the GET /async/v1/requests/{asyncRequestId} request could return a response of Complete the first
time it is submitted or on a subsequent try.
For example, if the original request was a POST that created a new activity, the GET request to retrieve the response
might return a 201 response code and have a Location header. If the original request failed because of a validation
error, the GET request to retrieve the response might have a 400 status code and a response body with details of the
errors.
/async/v1/requests/<asyncRequestId>
The <asyncRequestId> is a random value that provides secure access to the results of the original call. Because this
value provides access to application data, Guidewire recommends keeping it secure.
There are some situations where the response will not be "202 Accepted":
• If the wait preference is used and the request completes faster than the requested wait time, the response will be
synchronous. For information on specifying a wait preference, see “Waiting for a response synchronously” on page
139.
• If the application is overloaded and unable to process or queue the request, it will return a 503 response.
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
a. On the Authorization tab, select Basic Auth using user su and password gw.
2. Enter the following call, but do not click Send yet:
a. POST [Link]
3. Specify the request payload.
a. In the first row of tabs (the one that starts with Params), click Body.
b. In the row of radio buttons, select raw.
c. At the end of the row of radio buttons, change the drop-down list value from Text to JSON.
d. Paste the following into the text field underneath the radio buttons.
{
"data": {
"attributes": {
"username": "asyncUser"
}
}
}
Results
The response should be "202 Accepted". To view the value for GW-Async-Location header, click the Headers tab in
the response object pane. (This Headers tab is in a row of tabs that starts with Body and Cookies.) This value is used in
the next tutorial.
/async/v1/requests/<asyncRequestId>
You can execute a GET on this endpoint to retrieve information about the original request.
/async/v1/requests/<asyncRequestId>/response
If the original request is complete, this endpoint returns the response to the original request as if the call had been
executed synchronously. This endpoint is useful when:
• The response type is something other than application/json, and therefore is not included in the /requests
response.
• The caller application wants to work with the response as it would normally appear, as opposed to having to extract
it from within the responseBodyJson attribute of a larger data envelope.
Note that there are two situations in which this endpoint could return a 400 error:
• The original request does not yet have a status of Complete. Its status is either still Accepted or In Progress.
• The original request has a status of Complete, and the response to the original request is a 400 error.
In this tutorial, you will retrieve information about the asynchronous request using both the /requests and /response
endpoints.
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab
a. On the Authorization tab, select Basic Auth using user su and password gw.
2. Enter the following call, but do not click Send yet:
a. GET [Link] where <Async-Location> is the value of
the GW-Async-Location response header from the initial asynchronous request.
3. Ensure that, for this request, you do not have Prefer/respond-async header specified in your request.
(Although you can submit the /requests call asynchronously, you typically would not want to.)
4. Click Send.
5. Send a second request that uses the /response endpoint to retrieve only the response.
a. Right-click the current tab and choose Duplicate Tab.
b. In the new tab, add "/response" to the end of the existing URL.
6. Click Send.
Results
On the first tab, the response object contains information about the response to the original request. Typically, user
creation occurs very rapidly, and the original request should already be processed. If so:
• The completionTime is specified.
• The responseBodyJson attribute contains the response to the original request. In this case, it is information about
the newly created user.
• The responseStatus is 201.
• The status has a code of Complete.
On the second tab, the response object contains the same information that would have been returned if the initial
request were submitted synchronously.
Tutorial steps
1. In Postman, start a new request by:
Results
The first tab executes an asynchronous call with a wait time of 1 second. The application is able to complete the call
within this time, so the response is provided. (The status is "201 Created" and the response to the original call is
provided.)
The second tab executes an asynchronous call with a wait time of 1 millisecond. The application is not able to
complete the call within this time, so the call is merely accepted. (The status is "202 Accepted" and the response body
is blank.)
• The value of X is 7.
• The batch process is scheduled to run once a day at 3:30 am.
You can configure the value of X by manually adding an AsynchApiRequestPurgeDaysOld configuration parameter to
[Link]. For example, if you wanted request information to be purged when it is 6 days old, you would add the
following to [Link]:
You can also configure when the batch process is scheduled to run. For more information, see the Administration
Guide.
The InsuranceSuite Cloud API is a set of RESTful system APIs that expose functionality in ClaimCenter so that caller
applications can request data from or initiate action within ClaimCenter.
The following topics discuss how caller applications can initiate specific ClaimCenter business flows related to FNOL
and adjudication. This includes:
• Executing FNOL
• Working with existing claims
• Working with ClaimContacts
• Working with incidents
• Working with exposures
• Working with service requests
• Functionality specific to workers' compensation claims
Business flows related to ClaimCenter financials are covered in a separate section of this document.
Executing FNOL
This topic describes how to create claims for FNOL (First Notice of Loss) through Cloud API. This topic assumes you
are familiar with the ClaimCenter FNOL process. For a more detailed discussion of that process, see the Application
Guide.
If you want to interact directly with the concepts in this topic, go to the following tutorials:
• “Tutorial: Creating a policy using the Test Util API” on page 153
• “Tutorial: POSTing a minimal draft claim for personal auto” on page 154
• “Tutorial: PATCHing a draft claim for personal auto” on page 155
• “Tutorial: POSTing a typical draft claim for personal auto” on page 156
• “Tutorial: Submitting a draft claim” on page 168
For sample FNOL payloads, see the “Sample payload addendum” on page 168.
All open claims initially start as draft claims, regardless of how they are created. However, the New Claim Wizard hides
most of the distinction between draft and open claims. For example, in the base configuration, draft claim numbers are
not shown in the New Claim Wizard during claim creation.
Prior to finishing a draft claim in the New Claim Wizard, you can cancel the draft claim by clicking the Cancel button.
This discards the claim information from the database. This action can be taken only on draft claims. Once the New
Claim Wizard is finished, the claim cannot be canceled.
Verified policies
A verified policy is a copy of the policy based on information retrieved from the Policy Administration System (PAS).
In a production system, verified policies are the most common types of policies.
Every claim has its own copy of the policy. If two claims are created from the same policy, they will each have their
own copy.
Verified policies can be used in either a test or production system. However, they require a PAS (or test PAS) and an
integration point to that PAS.
Unverified policies
An unverified policy is a policy that is created during the FNOL process based on information supplied by an adjuster
or by the caller application. This information may or may not correctly correspond to information in a PAS. Unverified
policies let adjusters start the FNOL process without information from the PAS. This could be necessary if the reporter
does not know or cannot recall enough information to find the policy.
Eventually, the unverified policy must be refreshed with data from the PAS, thereby converting it to a verified policy.
You cannot complete the claims process and make payments on a claim while the policy is still unverified.
Unverified policies can be used in either a test or production system. In a test system, unverified policies may be a
useful way to create policies without having an integration point to a PAS and without needing to enable the Test Util
API.
There are three use cases for how FNOL can be executed through Cloud API. Each use case involves policies in a
different state.
• When set to false, exposures are required to reach Load Save only. (This is the default.)
• When set to true, exposures are required to reach New Loss Completion.
For information on how to set application configuration parameters, see the Configuration Guide.
Canceling claims
You can cancel a draft claim through Cloud API. This is done using the /claim/{claimId}/cancel endpoint. This has
the same effect as when a user clicks the Cancel button in the New Claim Wizard.
You cannot cancel a claim after it has been submitted and therefore promoted to being an open claim. Once a claim has
been submitted, the only way to discontinue processing of it is to close it.
Claim modes
In the base configuration, some lines of business let you create claims in different "modes". For example, for personal
auto, you can create a "regular" claim, a "quick" claim, or a "first and final" claim. These modes are distinctions that
exist primarily in the user interface. Each mode may require a greater or lesser amount of information, and some modes
may assist in executing tasks beyond simply reporting the claim. But from a technical standpoint, the claims created in
each mode are not fundamentally different from one another.
Thus, Cloud API does not have an analog for "modes". When you create a claim through Cloud API, as long as you
provide the minimum required information, you can provide whatever amount of information is appropriate for the use
case.
WARNING: The Test Util API is intended for use in a development environment only. Do not use the Test Util
API on a production system.
{
"data": {
"attributes": {
"effectiveDate": "2020-01-01T07:00:00.000Z",
"expirationDate": "2021-01-01T07:00:00.000Z",
"policyNumber": "FNOL-POLICY",
"verifiedPolicy": true
}
}
}
{
"data": {
"attributes": {
"policyType": {
"code": "PersonalAuto"
},
"status": {
"code": "inforce"
}
}
}
Policy contacts
The following code block creates a policy where the insured is a person named Ray Newton who lives at 287
Kensington Rd. #1A, South Pasadena, CA. The ID in the Policy Administration for this contact is ab:0001-1.
When creating test policies, policy contacts are specified using request inclusion. For more information on this
approach, see “Request and response inclusion” on page 109.
{
"data": {
"attributes": {
"policyContacts": [
{
"contact": {
"refid": "rayNewton"
},
"roles": [
{
"code": "insured"
}
]
}
]
}
},
"included": {
"Contact": [
{
"attributes": {
"firstName": "Ray",
"lastName": "Newton",
"primaryAddress": {
"addressLine1": "287 Kensington Rd. #1A",
"city": "South Pasadena",
"country": "US",
"postalCode": "91145",
"state": {
"code": "CA"
}
},
"subtype": {
"code": "Person"
},
"policySystemId": "ab:0001-1"
},
"method": "post",
"refid": "rayNewton",
"uri": "/test-util/v1/contacts"
}
]
}
}
Policy locations
The following code block creates a policy location.
{
"data": {
"attributes": {
"policyLocations": [
{
"address": {
"addressLine1": "287 Kensington Rd. #1A",
"city": "South Pasadena",
"postalCode": "91145",
"state": {
"code": "CA"
}
}
}
]
}
}
}
Policy-level coverages
The following code block creates a policy-level coverage. Note that the coverage has a coverage type (a typekey field),
and two currency amount fields. A policy can also contain risk unit coverages, which are shown in the next section.
{
"data": {
"attributes": {
"policyCoverages": [
{
"coverageType": {
"code": "PALiabilityCov"
},
"incidentLimit": {
"amount": "30000.00",
"currency": "usd"
},
"exposureLimit": {
"amount": "15000.00",
"currency": "usd"
}
}
]
}
}
}
Risk units
A risk unit is something on a policy to which coverages are attached, such as a vehicle or a building. The following
code block creates a risk unit. There are different types of risk units, depending on the policy's product type. Because
the other examples are from a personal auto policy, this example is a vehicle risk unit.
Risk units typically include risk unit coverages (such as Collision coverage on a vehicle). For each coverage, you must
specify a coverageType, which must be set to a value from the coverageType typelist. The coverage can also have
coverage terms (such as a deductible). If you include coverage terms, each coverage term must have a
covTermPattern (set to a code from the covTermPattern typelist) and a covTermSubtype (set to a code from the
covTerm typelist). Additional fields may be necessary based on the type of coverage term. For example, coverage terms
that are financial amounts require a financialAmount field.
{
"data": {
"attributes": {
"vehicleRiskUnits": [
{
"RUNumber": 1,
"vehicle": {
"licensePlate": "1HGJ465",
"make": "Saturn",
"model": "SL",
"policySystemId": "pcveh:0001-1",
"state": {
"code": "CA"
},
"vin": "1GV234TV347463345",
"year": 1997
},
"coverages": [
{
"coverageType": {
"code": "PACollisionCov"
},
"covTerms": [
{
"covTermPattern": {
"code": "PACollDeductible"
},
"covTermSubtype": "FinancialCovTerm",
"financialAmount": {
"amount": "500.00",
"currency": "usd"
}
}
],
"incidentLimit": {
"amount": "15000.00",
"currency": "usd"
}
}
]
}
]
}
}
}
2. Start ClaimCenter.
3. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
a. On the Authorization tab, select Basic Auth using user su and password gw.
4. Enter the following call, but do not click Send yet:
• POST [Link]
5. Specify the request payload.
a. In the first row of tabs (the one that starts with Params), click Body.
b. In the row of radio buttons, select raw.
c. At the end of the row of radio buttons, change the drop-down list value from Text to JSON.
d. Paste the text in the “Sample policy payload” on page 169 into the text field underneath the radio buttons.
6. Click Send.
"userMessage": "No policy was found with policy number ABC123 for loss date
2020-01-01T07:00:00.000Z"
e. If necessary, modify the payload's lossDate to ensure the loss occurred while the policy from the previous
tutorial is in force, but not in the future.
5. Click Send.
6. The response payload includes the claim's ID and claim number. Copy both of these values to a separate location,
as they are needed for later tutorials.
Note that, in the base configuration, the New Claim Wizard does not display claim numbers while the claim is in a draft
state.
5. Click Send.
Note that, in the base configuration, the New Claim Wizard does not display claim numbers while the claim is in a draft
state.
POST /composite/v1/composite
Request body
{
"requests": [
{
"method": "post",
"uri": "/claim/v1/unverified-policies",
"body": {
"data": {
"attributes": {
"policyNumber": "unverified-minimum",
"policyType": {
"code": "PersonalAuto"
}
}
}
}
},
{
"method": "post",
"uri": "/claim/v1/claims",
"body": {
"data": {
"attributes": {
"lossDate": "2021-03-04T07:00:00.000Z",
"policyNumber": "unverified-minimum"
}
}
}
}
]
}
Command
POST /composite/v1/composite
Request body
{
"requests": [
{
"method": "post",
"uri": "/claim/v1/unverified-policies",
"body": {
"data": {
"attributes": {
"policyNumber": "unverified-with-contact",
"policyType": {
"code": "PersonalAuto"
}
}
}
},
"vars": [
{
"name": "policyId",
"path": "$.[Link]"
}
]
},
{
"method": "post",
"uri": "/claim/v1/unverified-policies/${policyId}/contacts",
"body": {
"data": {
"attributes": {
"contactSubtype": "Person",
"firstName": "Ray",
"lastName": "Newton"
}
}
}
},
{
"method": "post",
"uri": "/claim/v1/claims",
"body": {
"data": {
"attributes": {
"lossDate": "2021-03-04T07:00:00.000Z",
"policyNumber": "unverified-with-contact"
}
}
}
}
]
}
The following example creates an unverified policy with a location as part of a composite request.
POST /composite/v1/composite
{
"requests": [
{
"method": "post",
"uri": "/claim/v1/unverified-policies",
"body": {
"data": {
"attributes": {
"policyNumber": "unverified-with-location",
"policyType": {
"code": "PersonalAuto"
}
}
}
},
"vars": [
{
"name": "policyId",
"path": "$.[Link]"
}
]
},
{
"method": "post",
"uri": "/claim/v1/unverified-policies/${policyId}/locations",
"body": {
"data": {
"attributes": {
}
}
},
"vars": [
{
"name": "locationId",
"path": "$.[Link]"
}
]
},
{
"method": "post",
"uri": "/claim/v1/claims",
"body": {
"data": {
"attributes": {
"lossDate": "2021-03-04T07:00:00.000Z",
"policyNumber": "unverified-with-location"
}
}
}
}
]
}
POST /claim/v1/unverified-policies/cc:330/locations/cc:500/property-items
Request
{
"data": {
"attributes": {
"appraisedValue": {
"amount": "3000",
"currency": "usd"
},
"description": "Ship in a bottle"
}
}
}
The following example creates a scheduled item on an unverified policy location as part of a composite request.
...
{
"method": "post",
"uri": "/claim/v1/unverified-policies/${policyId}/locations",
"body": {
"data": {
"attributes": {
}
}
},
"vars": [
{
"name": "locationId",
"path": "$.[Link]"
}
]
},
{
"method": "post",
"uri": "/claim/v1/unverified-policies/${policyId}/locations/${locationId}/property-items",
"body": {
"data": {
"attributes": {
"appraisedValue": {
"amount": "3000",
"currency": "usd"
},
"description": "Ship in a bottle"
}
}
}
...
If a field is not required and not specified, ClaimCenter provides a default value.
The following example creates an unverified policy with a vehicle risk unit.
Command
POST /composite/v1/composite
Request body
{
"requests": [
{
"method": "post",
"uri": "/claim/v1/unverified-policies",
"body": {
"data": {
"attributes": {
"policyNumber": "unverified-with-vehicle-risk-unit",
"policyType": {
"code": "PersonalAuto"
}
}
}
},
"vars": [
{
"name": "policyId",
"path": "$.[Link]"
}
]
},
{
"method": "post",
"uri": "/claim/v1/unverified-policies/${policyId}/vehicle-risk-units",
"body": {
"data": {
"attributes": {
}
}
}
},
{
"method": "post",
"uri": "/claim/v1/claims",
"body": {
"data": {
"attributes": {
"lossDate": "2021-03-04T07:00:00.000Z",
"policyNumber": "unverified-with-vehicle-risk-unit"
}
}
}
}
]
}
Within the context of underwriting policies, a given type of coverage is either a policy-level coverage (and never gets
attached to a risk unit) or a risk unit coverage (and always gets attached to a risk unit). However, ClaimCenter does not
store information about whether a given type of coverage ought to be policy-level or risk unit level. ClaimCenter
typically gets policy information from the Policy Administration System, and it assumes coverages are attached to the
policy at the appropriate place.
When you create an unverified policy, it is possible to attach a coverage that is normally policy-level to a risk unit, or
to attach a coverage that is normally risk unit level to the policy. This is allowed both in the ClaimCenter application
and through the system APIs. However, you cannot make payments on claims with unverified policies. In order to
verify a policy, you must retrieve updated information from the Policy Administration System. So if an unverified
policy has a coverage attached to the wrong location, an adjuster will need to address the error before payments on the
claim can be made.
POST /composite/v1/composite
Request body
{
"requests": [
{
"method": "post",
"uri": "/claim/v1/unverified-policies",
"body": {
"data": {
"attributes": {
"policyNumber": "unverified-with-policy-coverage",
"policyType": {
"code": "PersonalAuto"
}
}
}
},
"vars": [
{
"name": "policyId",
"path": "$.[Link]"
}
]
},
{
"method": "post",
"uri": "/claim/v1/unverified-policies/${policyId}/coverages",
"body": {
"data": {
"attributes": {
"coverageType" : {
"code": "PALiabilityCov"
}
}
}
}
},
{
"method": "post",
"uri": "/claim/v1/claims",
"body": {
"data": {
"attributes": {
"lossDate": "2021-03-04T07:00:00.000Z",
"policyNumber": "unverified-with-policy-coverage"
}
}
}
}
]
}
The minimum amount of information for a risk unit coverage is the coverage type. This is a code from the
CoverageType typelist. Coverage types are part of the ClaimCenter Line of Business Model, and only certain
coverages can be attached to a risk unit based on the policy's policy type. For more information, see the Application
Guide.
The following example creates an unverified policy with a vehicle risk unit and a coverage for that risk unit.
Command
POST /composite/v1/composite
Request body
{
"requests": [
{
"method": "post",
"uri": "/claim/v1/unverified-policies",
"body": {
"data": {
"attributes": {
"policyNumber": "unverified-with-risk-unit-coverage",
"policyType": {
"code": "PersonalAuto"
}
}
}
},
"vars": [
{
"name": "policyId",
"path": "$.[Link]"
}
]
},
{
"method": "post",
"uri": "/claim/v1/unverified-policies/${policyId}/vehicle-risk-units",
"body": {
"data": {
"attributes": {
}
}
},
"vars": [
{
"name": "riskUnitId",
"path": "$.[Link]"
}
]
},
{
"method": "post",
"uri": "/claim/v1/unverified-policies/${policyId}/vehicle-risk-units/${riskUnitId}/coverages",
"body": {
"data": {
"attributes": {
"coverageType" : {
"code": "PACollisionCov"
}
}
}
}
},
{
"method": "post",
"uri": "/claim/v1/claims",
"body": {
"data": {
"attributes": {
"lossDate": "2021-03-04T07:00:00.000Z",
"policyNumber": "unverified-with-risk-unit-coverage"
}
}
}
}
]
}
PATCH claim/v1/unverified-policies/cc:59
Request body
{
"data" : {
"attributes": {
"serviceTier": {
"code": "gold"
}
}
}
}
• GET claim/v1/unverified-policies/{policyId}/locations
• GET claim/v1/unverified-policies/{policyId}/locations/{locationId}
• GET claim/v1/unverified-policies/{policyId}/vehicle-risk-units
• GET claim/v1/unverified-policies/{policyId}/vehicle-risk-units/{vehicleRiskUnitId}
• GET claim/v1/unverified-policies/{policyId}/vehicle-risk-units/{vehicleRiskUnitId}/coverages
• GET claim/v1/unverified-policies/{policyId}/vehicle-risk-units/{vehicleRiskUnitId}/coverages/
{coverageId}
Note: There is a GET /claim/v1/unverified-policies endpoint. Guidewire has deprecated this endpoint to
indicate that, although it is backwards compatible, new usage of this endpoint is no longer recommended. This
endpoint may perform poorly on large databases because it adds a query restriction on the Policy entity's
Verified column, and this column is not indexed.
POST /composite/v1/composite
Request body
{
"requests": [
{
"method": "post",
"uri": "/claim/v1/unverified-policies",
"body": {
"data": {
"attributes": {
"policyNumber": "unverified-minimum-submittable",
"policyType": {
"code": "PersonalAuto"
}
}
}
}
},
{
"method": "post",
"uri": "/claim/v1/claims",
"body": {
"data": {
"attributes": {
"lossDate": "2021-03-04T07:00:00.000Z",
"policyNumber": "unverified-minimum-submittable"
}
}
},
"vars": [
{
"name": "claimId",
"path": "$.[Link]"
}
]
},
{
"method": "post",
"uri": "/claim/v1/claims/${claimId}/contacts",
"body": {
"data": {
"attributes": {
"contactSubtype": "Person",
"firstName": "Ray",
"lastName": "Newton"
}
}
},
"vars": [
{
"name": "contactId",
"path": "$.[Link]"
}
]
},
{
"method": "patch",
"uri": "/claim/v1/claims/${claimId}",
"body": {
"data": {
"attributes": {
"reporter": {
"id": "${contactId}"
}
}
}
}
},
{
"method": "post",
"uri": "/claim/v1/claims/${claimId}/submit"
}
]
}
{
"data": {
"attributes": {
"effectiveDate": "2020-01-01T07:00:00.000Z",
"expirationDate": "2031-01-01T07:00:00.000Z",
"policyNumber": "FNOL-POLICY",
"verifiedPolicy": true,
"policyType": {
"code": "PersonalAuto"
},
"status": {
"code": "inforce"
},
"policyContacts": [
{
"contact": {
"refid": "rayNewton"
},
"roles": [
{
"code": "insured"
}
]
}
],
"policyLocations": [
{
"address": {
"addressLine1": "287 Kensington Rd. #1A",
"city": "South Pasadena",
"postalCode": "91145",
"state": {
"code": "CA"
}
}
}
],
"policyCoverages": [
{
"coverageType": {
"code": "PALiabilityCov"
},
"incidentLimit": {
"amount": "30000.00",
"currency": "usd"
},
"exposureLimit": {
"amount": "15000.00",
"currency": "usd"
}
}
],
"vehicleRiskUnits": [
{
"RUNumber": 1,
"vehicle": {
"licensePlate": "1HGJ465",
"make": "Toyota",
"model": "Prius",
"policySystemId": "pcveh:0001-1",
"state": {
"code": "CA"
},
"vin": "1GV234TV347463345",
"year": 2007
},
"coverages": [
{
"coverageType": {
"code": "PACollisionCov"
},
"covTerms": [
{
"covTermPattern": {
"code": "PACollDeductible"
},
"covTermSubtype": "FinancialCovTerm",
"financialAmount": {
"amount": "500.00",
"currency": "usd"
}
}
],
"incidentLimit": {
"amount": "15000.00",
"currency": "usd"
}
}
]
}
]
}
},
"included": {
"TestUtilContact": [
{
"attributes": {
"firstName": "Ray",
"lastName": "Newton",
"primaryAddress": {
"addressLine1": "287 Kensington Rd. #1A",
"city": "South Pasadena",
"country": "US",
"postalCode": "91145",
"state": {
"code": "CA"
}
},
"subtype": {
"code": "Person"
},
"policySystemId": "ab:0001-1"
},
"method": "post",
"refid": "rayNewton",
"uri": "/test-util/v1/contacts"
}
]
}
}
{
"data": {
"attributes": {
"lossDate": "2020-03-01T07:00:00.000Z",
"policyNumber": "FNOL-POLICY",
"lossCause": {
"code": "vehcollision"
},
"mainContact": {
"policySystemId": "ab:0001-1"
},
"reporter": {
"policySystemId": "ab:0001-1"
}
}
},
"included": {
"ClaimContact": [
{
"attributes": {
"firstName": "Robert",
"lastName": "Farley",
"contactSubtype": "Person"
},
"method": "post",
"refid": "robertFarley",
"uri": "/claim/v1/claims/this/contacts"
}
],
"VehicleIncident": [
{
"attributes": {
"collision": true,
"damageDescription": "Minor collision",
"driver": {
"policySystemId": "ab:0001-1"
},
"lossParty": {
"code": "insured"
},
"vehicle": {
"policySystemId": "pcveh:0001-1"
}
},
"method": "post",
"uri": "/claim/v1/claims/this/vehicle-incidents"
},
{
"attributes": {
"collision": true,
"damageDescription": "Minor collision",
"driver": {
"refid": "robertFarley"
},
"lossParty": {
"code": "third_party"
},
"vehicle": {
"licensePlate": "2PIX534",
"make": "Honda",
"model": "Civic",
"state": {
"code": "CA"
},
"vin": "3DT6YUQ3K9003LP19",
"year": 2019
}
},
"method": "post",
"uri": "/claim/v1/claims/this/vehicle-incidents"
}
]
}
}
{
"requests": [
{
"body": {
"data": {
"attributes": {
"policyNumber": "composite-FNOL-example",
"policyType": {
"code": "PersonalAuto"
}
}
}
},
"method": "post",
"uri": "/claim/v1/unverified-policies",
"vars": [
{
"name": "policyId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"coverageType": {
"code": "PALiabilityCov"
},
"covTerms": [
{
"covTermSubtype": "FinancialCovTerm",
"covTermOrder": 1,
"covTermPattern": {
"code": "PALiability"
},
"modelAggregation": {
"code": "pi"
},
"modelRestriction": {
"code": "acc"
},
"financialAmount": {
"amount": "50000.00",
"currency": "usd"
}
},
{
"covTermSubtype": "ClassificationCovTerm",
"covTermOrder": 2,
"code": "Classification Code - 1",
"code": "CA"
}
},
"primaryPhoneType": {
"code": "work"
},
"contactSubtype": "Person",
"workPhone": {
"countryCode": {
"code": "US"
},
"number": "818-446-1206"
}
}
}
},
"method": "post",
"uri": "/claim/v1/unverified-policies/${policyId}/contacts",
"vars": [
{
"name": "coveredContactId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"coveredParties": [
{
"id": "${coveredContactId}"
}
]
}
}
},
"method": "patch",
"uri": "/claim/v1/unverified-policies/${policyId}"
},
{
"body": {
"data": {
"attributes": {
"description": "Vehicle Risk Unit Description",
"vehicle": {
"color": "Green",
"licensePlate": "1ABC234",
"make": "Honda",
"manufacturer": {
"code": "HOND"
},
"model": "Accord",
"state": {
"code": "CA"
},
"style": {
"code": "passengercar"
},
"vin": "QWE327UH534NMK09P",
"year": 2010
}
}
}
},
"method": "post",
"uri": "/claim/v1/unverified-policies/${policyId}/vehicle-risk-units",
"vars": [
{
"name": "vehicleId",
"path": "$.[Link]"
},
{
"name": "vehicleRUId",
"path": "$.[Link]"
},
{
"name": "RUNumber",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"claimAggLimit": {
"amount": "7000.00",
"currency": "usd"
},
"personAggLimit": {
"amount": "8000.00",
"currency": "usd"
},
"coverageType": {
"code": "PACollisionCov"
},
"covTerms": [
{
"covTermSubtype": "FinancialCovTerm",
"covTermOrder": 1,
"covTermPattern": {
"code": "PACollDeductible"
},
"modelAggregation": {
"code": "pi"
},
"modelRestriction": {
"code": "acc"
},
"financialAmount": {
"amount": "500.00",
"currency": "usd"
}
},
{
"covTermSubtype": "NumericCovTerm",
"covTermOrder": 2,
"numericValue": "20.20",
"units": {
"code": "days"
}
}
],
"currency": {
"code": "usd"
},
"exposureLimit": {
"amount": "10000.00",
"currency": "usd"
},
"incidentLimit": {
"amount": "20000.00",
"currency": "usd"
},
"notes": "Coverage of vehicle risk unit"
}
}
},
"method": "post",
"uri": "/claim/v1/unverified-policies/${policyId}/vehicle-risk-units/${vehicleRUId}/coverages"
},
{
"body": {
"data": {
"attributes": {
"lossDate": "2021-02-01T07:00:00.000Z",
"lossLocation": {
"addressLine1": "100 Main St.",
"city": "San Mateo",
"postalCode": "90123",
"state": {
"code": "CA"
}
},
"policyNumber": "composite-FNOL-example",
"reporter": {
"id": "${insuredId}"
}
}
}
},
"method": "post",
"uri": "/claim/v1/claims",
"vars": [
{
"name": "claimId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"body": "Test note body"
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/notes"
},
{
"body": {
"data": {
"attributes": {
"collision": true,
"collisionPoint": {
"code": "03"
},
"damageDescription": "Damaged front bumper",
"driver": {
"id": "${insuredId}"
},
"lossParty": {
"code": "insured"
},
"severity": {
"code": "major-auto"
},
"vehicle": {
"id": "${vehicleId}"
}
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/vehicle-incidents",
"vars": [
{
"name": "vehicleIncidentId",
"path": "$.[Link]"
},
{
"name": "driverUri",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"coverageSubtype": {
"code": "PACollisionCov"
},
"claimant": {
"id": "${insuredId}"
},
"primaryCoverage": {
"code": "PACollisionCov"
},
"vehicleIncident": {
"id": "${vehicleIncidentId}"
}
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/exposures",
"vars": [
{
"name": "exposureId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"cellPhone": {
"countryCode": {
"code": "US"
},
"number": "555-555-5555"
},
"dateOfBirth": "1928-11-18",
"emailAddress1": "MitchMochizuki@[Link]",
"firstName": "Mitch",
"homePhone": {
"countryCode": {
"code": "US"
},
"number": "555-555-5556"
},
"lastName": "Mochizuki",
"licenseNumber": "ABCDE12345",
"licenseState": {
"code": "CA"
},
"primaryAddress": {
"addressLine1": "1313 Albian Dr.",
"city": "Anaheim",
"country": "US",
"county": "Orange County",
"postalCode": "92802",
"state": {
"code": "CA"
}
},
"primaryLanguage": {
"code": "en_US"
},
"primaryLocale": {
"code": "en_US"
},
"primaryPhoneType": {
"code": "home"
},
"contactSubtype": "Person"
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/contacts",
"vars": [
{
"name": "mitchMochizukiId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"addressBookUID": "DOCTOR-12345",
"dateOfBirth": "1959-06-11",
"emailAddress1": "DanaEdwards@[Link]",
"firstName": "Dana",
"lastName": "Edwards",
"primaryAddress": {
"addressLine1": "1000 Hospital Dr.",
"city": "Princeton",
"country": "US",
"postalCode": "08540",
"state": {
"code": "NJ"
}
},
"primaryLanguage": {
"code": "en_US"
},
"primaryLocale": {
"code": "en_US"
},
"primaryPhoneType": {
"code": "work"
},
"contactSubtype": "Doctor",
"workPhone": {
"countryCode": {
"code": "US"
},
"number": "666-666-6666"
}
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/contacts",
"vars": [
{
"name": "danaEdwardsId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"ambulanceUsed": true,
"bodyParts": [
{
"detailedBodyPart": {
"code": "57"
},
"detailedBodyPartDesc": {
"code": "57B"
},
"impairmentPercentage": 77,
"ordering": 12,
"primaryBodyPart": {
"code": "lower"
},
"sideOfBody": {
"code": "left"
}
}
],
"description": "Head trauma, possible concussion",
"detailedInjuryType": {
"code": "07"
},
"disabledDueToAccident": {
"code": "notdisabled"
},
"generalInjuryType": {
"code": "specific"
},
"injuredPerson": {
"id": "${mitchMochizukiId}"
},
"lossParty": {
"code": "third_party"
},
"lostWages": false,
"primaryDoctor": {
"id": "${danaEdwardsId}"
},
"severity": {
"code": "major-injury"
},
"treatmentType": {
"code": "er"
}
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/injury-incidents"
},
{
"body": {
"data": {
"attributes": {
"collision": true,
"collisionPoint": {
"code": "03"
},
"damageDescription": "Damaged rear bumper",
"driver": {
"id": "${mitchMochizukiId}"
},
"lossParty": {
"code": "third_party"
},
"severity": {
"code": "major-auto"
},
"vehicle": {
"color": "silver",
"licensePlate": "MERLIN0",
"make": "Subaru",
"model": "Outback",
"year": 2005
}
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/vehicle-incidents"
},
{
"body": {
"data": {
"attributes": {
"addressBookUID": "REPAIRSHOP-12345",
"companyName": "#([Link])",
"editableRoles": [
{
"active": true,
"relatedTo": {
"id": "${claimId}",
"type": "Claim"
},
"role": {
"code": "repairshop"
}
}
],
"contactSubtype": "AutoRepairShop"
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/contacts"
},
{
"method": "post",
"uri": "/claim/v1/claims/${claimId}/submit"
}
],
"selections": [
{
"uri": "${driverUri}"
}
]
}
• Mimicing auto first-and-final claim processing can create entities that cannot be closed in the composite
request. For example, workplan rules can create activities that the composite request is unaware of and
therefore cannot complete. Depending on your configuration, you may need to execute additional steps to
completely close the claim.
• Activities can prevent claims and exposures from closing, and therefore you may need to close all activities
automatically created during a composite request for claim closure.
• You can POST /check-sets for composite requests for only non-recurring, final-payment checks; you
cannot complete a partial payment transaction using composite requests.
Subrequest order
When executing a first and final claim within a composite request, you must execute the steps in the following order. If
steps are executed in a different order, then some objects may get created automatically by ClaimCenter that conflict
with objects created in later subrequests.
1. POST the claim.
2. POST the vehicle incident.
3. POST an exposure with the following attributes
a. The exposure's incident is the vehicle incident.
b. The exposure's coverage is Comprehensive.
c. The exposure's claimant is the insured.
4. Submit the claim.
5. POST the payment with the following attributes:
a. The payment draws from the exposure's reserve line.
b. The payment's payee is the insured.
3. POST an exposure associated with the vehicle incident from step 2 with comprehensive coverage and the insured
and the claimant.
{
"body": {
"data": {
"attributes": {
"coverage": {
"policySystemId": "pc:coverage_2"
},
"coverageSubtype": {
"code": "PAComprehensiveCov"
},
"claimant": {
"policySystemId": "pc:contact_1"
},
"primaryCoverage": {
"code": "PAComprehensiveCov"
},
"vehicleIncident": {
"id": "${firstPartyVehicleIncidentId}"
}
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/exposures",
"vars": [
{
"name": "exposureId",
"path": "$.[Link]"
}
]
},
"currency": {
"code": "usd"
}
}
],
"payees": [
{
"contact": {
"policySystemId": "pc:contact_1"
},
"payeeType": {
"code": "other"
}
}
],
"paymentMethod": {
"code": "check"
},
"mailTo": "Ray Newton",
"payTo": "Ray Newton",
"mailingAddress": {
"addressLine1": "2850 S Delaware St ",
"city": "San Mateo",
"country": "US",
"county": "San Mateo",
"postalCode": "94403",
"state": {
"code": "CA"
}
}
}
}
}
},
"method": "post",
"uri": "#('/claim/v1/claims/${claimId}/check-sets')",
"vars": [
{
"name": "checkId",
"path": "$.[Link][0].id"
}
]
}
]
}
Claims
This topic covers the different ways that a caller application can get information on existing claims, and additional
actions they can take on open claims.
For information on creating claims or working with draft claims, see “Executing FNOL” on page 145.
{
"count": 5,
"data": [
{
"attributes": {
"id": "cc:34"
}
},
{
"attributes": {
"id": "cc:33"
}
},
{
"attributes": {
"id": "demo_sample:20"
}
},
{
"attributes": {
"id": "demo_sample:2"
}
},
{
Claims 183
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"attributes": {
"id": "demo_sample:1"
}
}
],
...
The count and data sections of response payload for Wendy Gompers consists of the 6 open claims on her ACL:
{
"count": 6,
"data": [
{
"attributes": {
"id": "trucking:7"
}
},
{
"attributes": {
"id": "trucking:8"
}
},
{
"attributes": {
"id": "demo_sample:30002"
}
},
{
"attributes": {
"id": "demo_sample:30001"
}
},
{
"attributes": {
"id": "gl:1"
}
},
{
"attributes": {
"id": "trucking:6"
}
}
],
...
You can view this output for yourself in Postman by doing the following:
1. Open a request tab. From the Authorization tab, set the TYPE drop-down list to Basic Auth. For the Username and
Password, specify aapplegate and gw.
2. Execute GET /claim/v1/claims.
3. Open a second request tab. From the Authorization tab, set the TYPE drop-down list to Basic Auth. For the
Username and Password, specify wgompers and gw.
4. Execute GET /claim/v1/claims.
5. Compare the two response payloads.
For more information on resource access, see the Cloud API Developer Guide.
Closed claims
By default, the GET /claim/v1/claims endpoint returns only open claims. You can query for open and closed claims
by adding the following query parameter:
?filter=state:in:open,closed
Draft claims
Draft claims are claims that have been saved to the database, but the claim does not yet have enough information for it
to be assigned to an adjuster or vendor. Therefore, for some callers, the GET /claim/v1/claims endpoint does not
return draft claims.
184 Claims
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
{
"data": {
"attributes": {
"claimNumber": "235-53-425891"
}
}
}
{
"data": {
"attributes": {
"claimNumber": "235-53-425891"
}
}
}
{
"status": 404,
"errorCode": "[Link]",
"userMessage": "No resource was found at path /claim/v1/claims/cc:33"
}
Resource access is a component of the system API authentication and authorization framework. For more information
on resource access, see the Cloud API Developer Guide.
• POST /claim/v1/search/claims-v2
• POST /claim/v1/search/claims-freetext
The /claim/v1/search/claims-v2 endpoint can be used to find claims unassociated with the caller and archived
claims. Note that, for any claim that the caller does not have access to, the claim will appear in the search results. But
the caller will not be able to view it using the GET /claims/{claimId} endpoint.
The /claim/v1/search/claims-freetext can also be used to find claims unassociated with the caller and archived
claims, but only if free text search has been enabled. For more information about using free-text search, see the
Application Guide.
Note: There is an additional search endpoint, POST /claim/v1/search/claims. Guidewire has deprecated
this endpoint to indicate that, although it is backwards compatible, new usage of this endpoint is no longer
recommended. The POST /claim/v1/search/claims-v2 offers all of the capabilities of the deprecated
endpoint and provides additional request parameters, a more detailed response payload, and it can include
archived claims.
Claims 185
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
{
"data": {
"attributes": {
"archivedSearch": booleanValue,
"claimNumber": "stringValue",
"companyName": "stringValue",
"firstName": "stringValue",
"lastName": "stringValue",
"nameSearchType": {
"code": " ClaimSearchNameSearchTypeCode ",
},
"policyNumber": "stringValue",
"taxId": "stringValue"
}
}
}
You must provide one of the following fields for a minimum request payload:
Note:
The companyName field and the firstName/lastName fields cannot be included in the same request payload.
• claimNumber
• companyName
◦ nameSearchType (optional)
• firstName
• lastName
◦ nameSearchType (optional)
• policyNumber
• taxID
◦ nameSearchType (optional)
For example, the following payload will search for all claims associated with policy number 54-123456:
Command
POST /claim/v1/search/claims-v2
Request body
{
"data": {
"attributes": {
"policyNumber": "54-123456"
}
}
}
The following payload will search for all claims where there is a claimant who has a first name of "Ray" and a last
name of "Newton":
{
"data": {
"attributes": {
"firstName": "Ray",
"lastName": "Newton"
}
}
}
186 Claims
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
{
"data": {
"attributes": {
"address": {
"addressLine1": "1313 Monroe Lane",
"city": "Pomona",
"country": "US",
"state": {
"code": "CA",
}
},
"name": "Ray Newton",
"nameSearchType": {
"code": "any",
},
"phoneNumber": "555 413 4545"
}
}
}
For more information about using free-text search, see the ClaimCenter Application Guide.
If archiving is not enabled on your instance of ClaimCenter, the response payload returns a 400 error. Note
that the error message does not mention archiving explicitly:
{
"status": 400,
"errorCode": "[Link]",
"userMessage": "The operation is not currently allowed for this resource"
}
POST /claim/v1/search/claims-v2
Request body
{
"data": {
"attributes": {
"firstName": "Ray",
Claims 187
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"lastName": "Newton",
"nameSearchType": {
"code": "insured"
}
}
}
}
The following payload searches for all the archived claims where the insured has the company name of Wright
Construction:
{
"data": {
"attributes": {
"archivedSearch": true,
"companyName": "Wright Construction",
}
}
}
Note that this message is intended primarily for user interface claim searches, which is why it makes reference to fields
not available to the /claim/v1/search/claims-v2 endpoint, such as Assigned To Group, Assigned To User, and
Created By.
Claim ID
"id": "cc:33", "claimId": "cc:33"
Insured
"insured": { "insuredName": "Bill Kinman"
"displayName": "Bill Kinman ",
"id": "cc:33",
"uri": "/claim/v1/claims/cc:33/
contacts/cc:101"
}
Claimants
"included": { "claimants": [
"ClaimContact": [ "Bill Kinman"
{ ],
"attributes": {
...
"id": "cc:101",
"roles": [
{
"relatedTo": {
"id": "cc:47",
"type": "Exposure"
},
"role": {
188 Claims
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Note:
You can use query parameters to refine the response payload to exclude default fields and include non-default
fields. For more information, see “Query parameters” on page 47.
Depending on whether the search was for archived or active claims, the response payload will vary.
The following sections identify the differences between archived and active claim search results.
{
"count": 1,
"data": [
{
"attributes": {
"adjusterName": "Andy Applegate",
"assignedGroup": "Auto1 - TeamA",
"claimId": "cc:SO",
"claimNumber": "235-53-425891",
"claimants": [
"Bill Kinman"
],
"flagged": true,
"futurePayments": {
"amount": "0.00",
"currency": "usd"
},
"insuredName": "Bill Kinman",
"lossDate": "2021-02-28T00:00:00.000Z",
"paid": {
"amount": "0.00",
"currency": "usd"
},
"policyNumber": "4775949863-02",
"remainingReserves": {
"amount": "0.00",
"currency": "usd"
},
"status": {
"code": "open",
"name": "Open"
}
Claims 189
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
}
},
Risk units
A risk unit is a thing covered by the policy (other than the policyholder and any additional insureds). The type of risk
units on a policy vary based on the type of policy. For example:
• On a personal auto policy or commercial auto policy, risk units are typically vehicles.
• On a homeowner's policy, risk units are typically dwellings, other structures on the property (fences, sheds), or
items of value in the home (electronics, jewelry).
The following endpoints return information about the risk units on the policy:
• /claims/{claimId}/policy/location-based-risk-units
• /claims/{claimId}/policy/location-based-risk-units/{locationBasedRiskUnitId}
• /claims/{claimId}/policy/vehicle-risk-units
• /claims/{claimId}/policy/vehicle-risk-units/{vehicleRiskUnitId}
Coverages
There are two types of coverages on a policy: policy-level coverages and risk unit coverages.
190 Claims
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
• A policy-level coverage is a coverage that typically covers the policyholder or other additional insureds listed on
the policy.
◦ For example, personal auto policies typically come with a "Liability - Bodily Injury and Property Damage"
coverage. This covers any damage to other people or other properties that is caused by the policyholder (or the
additional insureds) while driving a vehicle. It does not matter which vehicle the policyholder was driving. The
coverage applies to the policyholder.
• A risk unit coverage is a coverage that covers an associated risk unit.
◦ For example, every vehicle listed on a personal auto policy typically comes with a "Collision" coverage. This
covers damage done to the associated vehicle. Suppose there is a policy with two vehicles and only the first
vehicle has collision coverage. If the second vehicle is involved in a collision, the policyholder will not be able
to file a claim for damages done to the second vehicle.
The following endpoints return information about the policy-level coverages on the policy:
• /claims/{claimId}/policy/coverages
• /claims/{claimId}/policy/coverages/{coverageId}
The following endpoints return information about the risk units on the policy. This includes the risk unit coverages
attached to each risk unit:
• /claims/{claimId}/policy/location-based-risk-units
• /claims/{claimId}/policy/location-based-risk-units/{locationBasedRiskUnitId}
• /claims/{claimId}/policy/vehicle-risk-units
• /claims/{claimId}/policy/vehicle-risk-units/{vehicleRiskUnitId}
Locations
A location is a physical place listed on a policy. The ways in which locations are used vary based on the type of policy.
For example:
• On a personal auto policy, a location can be used to identify where a vehicle is garaged.
• On a homeowner's policy, a location can be used to identify where the home is located.
The following endpoints return information about the locations on the policy:
• /claims/{claimId}/policy/locations
• /claims/{claimId}/policy/locations/{locationId}
Endorsements
An endorsement is a physical document detailing some aspect of the policy. Occasionally, an endorsement can become
relevant to claims processing. Endorsements are also referred to as forms.
For example, suppose a home owner elects to get a homeowner's policy for a home that is in a flood zone. The insurer
attaches an endorsement to the policy that excludes any damage caused by flooding. Later, the home owner files a
claim for damage caused by a flood. When determining if payment will be made on the claim, the adjuster needs to see
if the policy included a flood damage exclusion endorsement.
Claims 191
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
The following endpoints return information about the endorsements on the policy:
• /claims/{claimId}/policy/endorsements
• /claims/{claimId}/policy/endorsements/{endorsementId}
Assigning claims
When a claim completes the FNOL process (either through the user interface or through the /submit endpoint), it is
assigned to a group and a user in that group. The assigned user has the primary responsible for managing the claim.
When you submit a claim through the system APIs, ClaimCenter automatically executes the claim assignment rules to
initially assign the claim to a group and user. You can use the POST /claims/{claimId}/assign endpoint to reassign
the claim as needed.
Note: The functionality for assigning claims is a subset of the functionality for assigning activities. All
assignment options that are applicable to both activities and claims have the same behavior.
Assignment options
A claim can be assigned through the system APIs in the following ways:
• To a specific group and user in that group
• To a specific group only (and then ClaimCenter uses assignment rules to select a user in that group)
• By re-running the claim assignment rules
◦ This can be appropriate if you have modified the claim since the last time assignment rules were run and the
modification might affect who the claim would be assigned to.
The root resources for the /claims/{claimId}/assign endpoints is ClaimAssignee. This resource specifies
assignment criteria. The schema has the following fields:
The ClaimAssignee resource cannot be empty. It must specify a single logical assignment option (group and user,
group only, or automatic assignment). For more information on how assignment rules execute assignment, see the Gosu
Rules Guide.
POST /claim/v1/claims/cc:34/assign
Request body
{
"data": {
"attributes" : {
"groupId" : "demo_sample:31",
"userId" : "demo_sample:2"
}
}
}
The following assigns claim cc:34 to group demo_sample:31 (Auto1 - TeamA). Because no user has been specified,
ClaimCenter will execute assignment rules to assign the claim to a user in group demo-sample:31.
192 Claims
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Command
POST /claim/v1/claims/cc:34/assign
Request body
{
"data": {
"attributes" : {
"groupId" : "demo_sample:31"
}
}
}
Note that there is currently no endpoint that returns groups or group IDs. To assign claims to a specific group, the caller
application must determine the group ID using some method other than a groups system API.
POST /claim/v1/claims/cc:34/assign
Request body
{
"data": {
"attributes": {
"autoAssign" : true
}
}
}
Validating claims
Claims 193
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"attributes": {
"allValidationLevelsReached": [
{
"code": "loadsave",
"name": "Load and save"
}
],
"hasErrors": true,
"validationIssues": [
{
"field": "contacts",
"id": "cc:SsCzMkFw0Vk6bO8HCLh3p",
"message": "The role Reporter is required on Claim 999-99-999945.",
"severity": {
"code": "error",
"name": "Error"
},
"type": "Claim",
"url": "/claim/v1/claims/cc:SsCzMkFw0Vk6bO8HCLh3p",
"validationLevel": {
"code": "newloss",
"name": "New loss completion"
}
}
194 Claims
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"code": "newloss",
"name": "New loss completion"
},
{
"code": "loadsave",
"name": "Load and save"
}
],
"hasErrors": true,
"validationIssues": [
{
"field": "firstName",
"id": "cc:SYVsCEg_23xuVpJwrN2lH",
"message": "The insured Newton first name must not be empty",
"severity": {
"code": "error",
"name": "Error"
},
"type": "Claim",
"url": "/claim/v1/claims/cc:SYVsCEg_23xuVpJwrN2lH",
"validationLevel": {
"code": "iso",
"name": "Valid for ISO"
}
}
],
"validationLevelReached": {
"code": "newloss",
"name": "New loss completion"
}
}
}
}
{
"data": {
"attributes": {
"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"
}
],
"hasErrors": false,
"validationLevelReached": {
"code": "payment",
"name": "Ability to pay"
}
}
}
}
Claims 195
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
From this payload, you can determine that the claim is at "ability to pay" and has reached all previous validation levels.
The claim then meets all validation rules. (The hasErrors value is false.)
POST /claims/v1/search/claims-v2
Response body
{
"attributes": {
"archived": true,
"archivedAdjuster": "Betty Baker",
"claimInfoId": "cc:SLmj",
"claimNumber": "235-53-365870",
"insuredName": "Richard Jackson",
"lossDate": "2021-10-19T00:00:00.000Z",
"policyNumber": "4775949863-0",
"archiveState": {
"code": "archived",
"name": "Archived"
}
}
}
A successful retrieval returns a standard claim object in the response payload, indicating that the claim has been
retrieved from archive and has re-entered an active status.
Closing claims
Use the following endpoint to close a claim:
• POST /claim/v1/claims/{claimId}/close
A request body is not required, but you can include it to specify a closedOutcome, which must be set to a value from
the ClaimClosedOutcomeType typelist (such as completed or duplicate).
For example, the following request closes claim cc:706 with a closed outcome of completed.
196 Claims
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Command
POST /claim/v1/claims/cc:706/close
Request body
{
"data": {
"attributes": {
"closedOutcome": {
"code": "completed"
}
}
}
}
Be aware that validation rules can prevent the closing of the claim. For example, in the base configuration, a claim
cannot be closed if it has open exposures. If you attempt to close a claim with open exposures, ClaimCenter responds
with a message similar to the following.
"message": "Claim: There are still open exposures for this claim. Please close all exposures
before closing the claim."
For example, the following request reopens claim cc:706 (assuming it is closed):
Command
POST /claim/v1/claims/cc:706/reopen
Request body
None
You cannot reopen exposures on a closed claim. The claim must be reopened before you can reopen its exposures.
Claims 197
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
198 Claims
chapter 16
ClaimContacts
A ClaimContact is a person or organization who has a relationship with a claim. This includes people and
organizations who:
• Are covered by the relevant policy
• Suffered a covered loss
• Provide information relevant to the claim
• Provide a service to address the loss
For example, suppose that Ray Newton has a personal auto policy. He informs the insurer that, while driving his
Toyota, he hit Robert Farley's Honda and damaged both cars. Wilma Weeks witnessed the collision. Robert Farley's
Honda was repaired at Joe's Auto Body Shop. This claim would have the following ClaimContacts:
• Ray Newton
• Robert Farley
• Wilma Weeks
• Joe's Body Shop
ClaimContact roles
Claims have child objects, such as:
• A policy, which contains a copy of information from the policy that is relevant to the claim.
• One or more incidents, which represent anything that was damaged, stolen, or otherwise representative of the loss
(such as a vehicle, a property, or an injured person).
• One or more exposures, which track a potential payment from one coverage to one claimant.
• One or more service requests, which are requests to outside vendors to provide service that addresses the loss.
Every ClaimContact must have one or more roles with each object the ClaimContact is related to. A ClaimContact role
defines the nature of a relationship between a ClaimContact and the claim.
For example, the Ray Newton claim described previously might have these ClaimContacts with the following roles:
• The claim itself
◦ Ray Newton is the insured, the reporter, and a claimant.
◦ Robert Farley is a claimant.
ClaimContacts 199
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
200 ClaimContacts
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
policySystemId An identifier from the Policy When adding a ClaimContact to • “Working with contacts
Administration System that a claim that is already listed on
from the policy” on page
uniquely identifies the contact. the policy
208
• “Assigning roles to
existing ClaimContacts”
on page 212
ClaimContact roles
ClaimContact roles and role owners
Every ClaimContact must have at least one contact role. A contact role is a name that identifies the type of relationship
the ClaimContact has on the claim. For example, on claim 523-45-111341:
• Ray Newton could be the reporter on the claim itself.
• Ray Newton could be the insured on the policy.
• Debbie Newton could an alternate contact on the claim itself.
• Stan Davidson could the driver of vehicle cc:4322.
• Mike's Auto Body Repair could be the auto repair shop for vehicle cc:4322.
Notice that every contact role applies to a specific object, which is either the claim or a child object of the claim (the
policy, a vehicle, an exposure, and so on.) In ClaimCenter, this is referred to as the role owner. In Cloud API, the field
that references this object is the relatedTo field.
ClaimContacts 201
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
202 ClaimContacts
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Command
GET /claim/v1/claims/demo_sample:1/contacts?fields=displayName,id,roles
Response
{
"count": 7,
"data": [
{
"attributes": {
"authorizationID": "ctc-11457",
"displayName": "Mike's Auto detailing shop",
"id": "cc:5",
"roles": [
{
"active": true,
"relatedTo": {
"displayName": "235-53-365870",
"id": "demo_sample:1",
"type": "Claim",
"uri": "/claim/v1/claims/demo_sample:1"
},
"role": {
"code": "servicerequestspecialist",
"name": "Service Vendor"
}
}
]
}
},
{
"attributes": {
"displayName": "Karen Egertson",
"id": "cc:2",
"roles": [
{
"active": true,
"relatedTo": {
"displayName": "54-123456",
"id": "demo_sample:1",
"type": "Policy",
"uri": "/claim/v1/claims/demo_sample:1/policy"
},
"role": {
"code": "agent",
"name": "Agent"
}
}
]
}
},
...
ClaimContacts 203
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
PATCH /claim/v1/claims/cc:402
Request
{
"data": {
"attributes": {
"reporter": {
"refid": "newContact"
}
}
},
"included": {
"ClaimContact": [
{
"refid": "newContact",
"attributes": {
"contactSubtype": "Person",
"firstName": "Carol",
"lastName": "Daniels"
},
"method": "post",
"uri": "/claim/v1/claims/cc:402/contacts"
}
]
}
}
The following is an example of adding the role of reporter to a new contact for an existing claim using a composite
request. The contact is created first so that its ID can be used when setting the reporter field on the claim.
Command
POST /rest/composite/v1/composite
Request
{
"requests": [
204 ClaimContacts
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
{
"method": "post",
"uri": "/claim/v1/claims/cc:402/contacts",
"body": {
"data": {
"attributes": {
"contactSubtype": "Person",
"firstName": "Carol",
"lastName": "Daniels"
}
}
},
"vars": [
{
"name": "newContactId",
"path": "$.[Link]"
}
]
},
{
"method": "patch",
"uri": "/claim/v1/claims/cc:402",
"body": {
"data": {
"attributes": {
"reporter": "${newContactId}"
}
}
}
}
]
}
PATCH /claim/v1/claims/cc:402
Request
{
"data": {
"attributes": {
"witnesses": [
{
"contact": {
"id": "newContact"
}
}
]
}
},
"included": {
"ClaimContact": [
{
"refid": "newContact",
"attributes": {
"contactSubtype": "Person",
ClaimContacts 205
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"firstName": "Matt",
"lastName": "Capaldi"
},
"method": "post",
"uri": "/claim/v1/claims/cc:402/contacts"
}
]
}
}
The following is an example of adding the role of witness to a new contact for an existing claim using a composite
request. The contact is created first so that its ID can be used when adding the contact to the witnesses araay on the
claim.
Command
POST /rest/composite/v1/composite
Request
{
"requests": [
{
"method": "post",
"uri": "/claim/v1/claims/cc:402/contacts",
"body": {
"data": {
"attributes": {
"contactSubtype": "Person",
"firstName": "Matt",
"lastName": "Capaldi"
}
}
},
"vars": [
{
"name": "newContactId",
"path": "$.[Link]"
}
]
},
{
"method": "patch",
"uri": "/claim/v1/claims/cc:402",
"body": {
"data": {
"attributes": {
"witnesses": [
{
"contact": {
"id": "${newContact}"
}
}
]
}
}
}
}
]
}
206 ClaimContacts
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"editableroles": [
{
"role": {
"code": "<roleCode>"
},
"relatedTo": {
"type": "<parentObjectType>",
"id": "<parentObjectId>"
}
},
... <additionalRoles>
Example
For example, the following request PATCHes Claim cc:610 so that ClaimContact cc:777 has the alternate contact role
(whose code is altcontact) on the claim itself.
Command
PATCH [Link]
Request body
{
"data": {
"attributes": {
"editableRoles": [
{
"role": {
"code": "altcontact"
},
"relatedTo": {
"type": "Claim",
"id": "cc:610"
}
}
]
}
}
}
Similarly, the following request PATCHes claim cc:610 so that ClaimContact cc:208 has the owner role (whose code is
incidentowner) on the vehicle incident whose ID is cc:102. (In other words, ClaimContact cc:208 is specified as the
owner of the vehicle from vehicle incident cc:102.)
Command
PATCH [Link]
Request body
{
"data": {
"attributes": {
"editableRoles": [
{
"role": {
"code": "incidentowner"
},
"relatedTo": {
"type": "vehicleIncident",
"id": "cc:102"
}
}
]
}
}
}
ClaimContacts 207
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
POST /claim/v1/claims
Request
{
"data" : {
"attributes": {
"lossDate": "2023-02-01T07:00:00.000Z",
"policyNumber": "FNOL-POLICY",
"reporter": {
"policySystemId": "pc:2000-acme-12445"
}
}
}
}
PATCH /claim/v1/claims/cc:402
{
"data": {
"attributes": {
"maincontact": {
"id": "cc:3131"
}
}
}
}
{
"data": {
"attributes": {
"maincontact": {
"policySystemId": "pc:2000-acme-12445"
}
}
}
}
208 ClaimContacts
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
POST /claim/v1/claims/cc:404/service-requests
Request body
{
"data": {
"attributes": {
"kind": {
"code": "serviceonly"
},
"specialist": {
"refid": "serviceSpecialistContact"
},
"instruction": {
"customer": {
"id": "cc:13"
},
"serviceAddress": {
"addressLine1": "1313 Mockingbird Lane",
"city": "Arcadia",
ClaimContacts 209
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"country": "US",
"postalCode": "91006",
"state": {
"code": "CA",
"name": "California"
}
},
"services": [
{
"code": "autoothersalvage"
}
]
},
"requestedServiceCompletionDate": "2025-03-19"
}
},
"included": {
"ClaimContact": [
{
"attributes":{
"syncAddressBookUID": "ab:68"
},
"refid": "serviceSpecialistContact",
"method": "post",
"uri": "/claim/v1/claims/cc:404/contacts",
}
]
}
}
POST /claim/v1/claims/cc:404/contacts
Request body
{
"data": {
"attributes": {
"syncAddressBookUID": "ab:68",
"editableRoles": [
{
"role": {
"code": "attorney"
},
"relatedTo": {
"type": "Claim",
"id": "cc:404"
}
}
]
}
}
}
210 ClaimContacts
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Command
POST /claim/v1/claims
Request
{
"data" : {
"attributes": {
"lossDate": "2025-02-01T07:00:00.000Z",
"policyNumber": "FNOL-POLICY",
"reporter": {
"refid": "robertFarley"
}
}
},
"included": {
"ClaimContact": [
{
"attributes": {
"firstName": "Robert",
"lastName": "Farley",
"contactSubtype": "Person"
},
"refid": "robertFarley",
"method": "post",
"uri": "/claim/v1/claims/this/contacts"
}
]
}
}
PATCHing ClaimContacts
Use the following endpoint to PATCH a ClaimContact:
• PATCH /claim/v1/claims/{claimId}/contacts/{contactId}
For example, the following request PATCHes contact cc:55 on claim cc:404.
Command
PATCH /claims/cc:404/contacts/cc:55
Request body
{
"data": {
"attributes": {
"emailAddress1": "kittenknitter@[Link]"
}
}
}
You can also use the PATCH /claims/{claimId}/contacts/{contactId} endpoint to modify a contact's non-
reserved roles. For more information, see “Assigning roles to existing ClaimContacts” on page 212.
ClaimContacts 211
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
PATCH /claim/v1/claims/cc:402
Request body
{
"data": {
"attributes": {
"reporter": {
"id": "cc:8181"
}
}
}
}
PATCH [Link]
Request body
{
"data": {
"attributes": {
"editableRoles": [
{
"role": {
"code": "altcontact"
},
"relatedTo": {
"type": "Claim",
"id": "cc:610"
}
}
]
}
}
}
Similarly, the following request PATCHes ClaimContact cc:208 on claim cc:610 so that it has the owner role (whose
code is incidentowner) on the vehicle incident whose ID is cc:102. (In other words, ClaimContact cc:208 is the owner
of the vehicle specified in vehicle incident cc:102.)
Command
PATCH [Link]
212 ClaimContacts
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Request body
{
"data": {
"attributes": {
"editableRoles": [
{
"role": {
"code": "incidentowner"
},
"relatedTo": {
"type": "vehicleIncident",
"id": "cc:102"
}
}
]
}
}
}
Keep in mind that, within Cloud API , PATCHing an array does not add new members to the existing members. It
replaces the existing members with the new members. If you want to add members to an array, you must first
determine the existing members, and then specify an array with those members and the ones you wish to add. For more
information, see “PATCHes” on page 77.
Deleting ClaimContacts
Use the following endpoint to delete a ClaimContact:
• DELETE /claim/v1/claims/{claimId}/contacts/{contactId}
For example, the following request deletes contact cc:202 from claim cc:404.
Command
DELETE /claim/v1/claims/cc:404/contacts/cc:202
Request
<none>
Note that ClaimCenter had validation logic that may prevent the deletion of the ClaimContact. For example, you
cannot delete a ClaimContact who is the reporter on a claim.
Additional behaviors
ClaimContacts 213
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
{
"data": {
"attributes": {
"displayName": "Ray Newton",
"taxId": "***-**-6789"
}
}
}
For some callers, such as internal or external users, the masking of tax ID may be appropriate as it protects personally
identifiable information. For other callers, such as services, this masking may cause a problem as the callers may
reference contacts internally using the tax ID.
There are two ways that the taxId field can be unmasked:
• You can configure the field so that it is always unmasked. For information on how to configure this, see the Cloud
API Developer Guide.
• You can grant the caller the restunmasktaxid system permission. Any caller who has a role with this permission
will get responses with unmasked tax IDs. For information on how to configure this, see the section on API role
special permissions in the Cloud API Developer Guide.
214 ClaimContacts
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
These are metadata endpoints. They return information about the configuration of the given instance of ClaimCenter,
not about any of its business resources.
Role constraint example: Doctor
This is a portion of the payload when GET /role-constraints/doctor is executed on the base configuration:
{
"data": {
"schemaConstraints": [
{
"constraints": [
{
"constraintType": "ZeroToMore"
}
],
"schema": "Claim"
},
{
"constraints": [
{
"constraintType": "ZeroToMore"
}
],
"schema": "Exposure"
}
],
"subtype": "Doctor"
},
From this payload, you can determine the following about doctor:
• It can be used as a role for a ClaimContact that is associated with a claim.
◦ There can be any number of doctors on an claim, including 0.
• It can be used as a role for a ClaimContact that is associated with an exposure.
◦ There can be any number of doctors on an exposure, including 0.
• The role of doctor can only be used on ClaimContacts whose associated contact has a subtype of Doctor (or a child
subtype of Doctor).
Role constraint example: Reporter
This is a portion of the payload when GET /role-constraints/reporter is executed on the base configuration:
{
"data": {
"attributes": {
"schemaConstraints": [
{
"constraints": [
{
"constraintType": "Exclusive"
},
{
"constraintType": "Required"
}
],
"schema": "Claim"
},
{
"constraints": [
{
"constraintType": "ZeroToMore"
}
],
"schema": "Exposure"
}
]
From this payload, you can determine the following about reporter:
ClaimContacts 215
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
216 ClaimContacts
chapter 17
Incidents
This topic provides a high-level overview of incidents, discussing both what they are and how to work with them
through Cloud API.
For a more detailed discussion of the business functionality of incidents, refer to the Application Guide. For a more
detailed discussion of the configuration of incidents, refer to the Configuration Guide.
What is an incident?
An incident is a collection of information about an item that was lost or damaged, such as:
• A vehicle
• A property (such as a house or a fence)
• A person suffering one or more injuries
For example, a vehicle incident can store the following information:
• Where was the point of collision?
• Who was the driver?
• What is the severity of the damage?
• Were the airbags deployed?
• Is the vehicle so damaged that it is considered a "total loss"?
Incident subtypes
Incident is a subtyped entity. In the base configuration, there are several levels to the subtyping.
For example, the following list identifies a portion of the base configuration hierarchy for incidents.
• Injury
• Property
◦ Fixed property
Incidents 217
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
▪ Dwelling
▪ Other structure
◦ Living expense
◦ Mobile property
▪ Baggage
▪ Property contents
▪ Vehicle
• Trip
218 Incidents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
• DELETE /claims/{claimId}/vehicle-incidents/{incidentId}
Insurers can also add custom subtypes to the hierarchy. For more information on how to generate endpoints for custom
incident subtypes, see the Cloud API Developer Guide.
Damageables
A damageable is a separate entity that stores information about the state of an item before any loss or damage
occurred. For example, the base configuration has a Vehicle entity, which is a damageable used by VehicleIncident.
• Information that is inherent to the vehicle, such as Make, Model, and Vin (Vehicle identification number) is stored
on Vehicle.
• Information about damage to the vehicle, such as the CollisionPoint and whether the AirbagsDeployed, is stored
on the VehicleIncident.
Some incident types pertain to items that must be listed on the policy. For example, TripIncident is an incident type
that captures information about a trip where some sort of loss occurred, such as a cancellation or lost luggage. In order
to file a claim, the trip must be listed on the travel policy. You cannot file claims for trips not listed on the policy. These
types of incidents do not typically make use of damageables.
Other incident types pertain to items that may be listed on the policy or that may belong to a third party. For example,
VehicleIncident is an incident type that captures information about a damaged vehicle. The vehicle could be listed
on the insured's policy. The vehicle could also be a third-party vehicle that the insured damaged. These types of
incidents typically do make use of damageables.
When an incident type has an associated damageable, you could theoretically have separate endpoints for the incident
and the damageable. However, it is usually more convenient to embed the damageable information in the incident.
When this is done, the damageable is referred to as an inline damageable. This is because the damageable information
appears inline in the incident's schema.
• It creates a new vehicle. It is a non-policy vehicle with year set to 2010 and color set to Black. (make and model
are not set.)
• It associated the new vehicle with vehicle incident cc:101.
• It retains vehicle cc:202, but the vehicle is no longer associated with vehicle incident cc:101. Vehciel cc:202 is
associated only with the policy.
The reason for this behavior is Cloud API for ClaimCenter does not permit PATCHes to verified policy information.
Information for verified policies can come only from the Policy Administration System. If you attempt to PATCH
Incidents 219
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
information for an inline damageable listed on the policy, ClaimCenter interprets this as a desire to create a new non-
policy damageable.
This behavior can also be summarized in the following way. Whenever you PATCH an incident with an inline
damageable:
• PATCHing fields that are not part of the inline damageable behaves as normal.
• PATCHing fields that are part of the inline damageable behaves as normal if the inline damageable is for a third-
party object. (In other words, an object that is not listed on the policy.)
• PATCHing fields that are part of the inline damageable creates a new damageable if the inline damageable is listed
on the policy.
{
"status": 404,
"errorCode": "[Link]",
"userMessage": "No resource was found at path /claim/v1/claims/cc:34/dwelling-incidents"
}
220 Incidents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Unlike some other damageables, a location cannot be created as a referenced resource in the included section and
then specified by refid. A new location must be created as an inlined damageable.
POST /claim/v1/claims/cc:73/fixed-property-incidents
{
"data": {
"attributes": {
"location": {
"address": {
"addressLine1": "1313 Monroe Lane",
"city": "Pomona",
"country": "US",
"state": {
"code": "CA"
}
},
"primaryLocation": false
},
"severity" : {
"code" : "major-prop"
}
}
}
}
A dwelling incident typically includes an inline damageable called location, with fields that describe inherent
qualities of the dwelling's location, such as address. The dwelling incident also contains additional information
specific to the loss, such as damagedAreaSize and severity. You do not have to specify location when you create a
dwelling incident. If you do want to specify location, you can either:
• Specify an existing location on the policy by providing its policySystemId.
• Specify an existing location on the claim by providing its ClaimCenter id.
• Create a new location by providing its attributes inline.
Unlike some other child objects, a location cannot be created as a referenced resource in the included section and
then specified by refid. A new location must be created as an inlined damageable.
Incidents 221
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
• DELETE /claims/{claimId}/dwelling-incidents/{incidentId}
For example, the following request creates a dwelling incident for claim cc:61. In the request, the inline damageable
(the incident's location) is included, and it is specified by policySystemId.
POST /claim/v1/claims/cc:61/dwelling-incidents
{
"data": {
"attributes": {
"description": "water from heavy rains leaked through the roof damaging walls and floor.",
"location" : {
"policySystemId" : "pcdwl:0001-1"
} ,
"yearsInHome" : 7
}
}
}
POST /claim/v1/claims/cc:77/other-structure-incidents
{
"data": {
"attributes": {
"description": "Shed damaged by falling tree",
"lossParty": {
"code": "insured"
}
}
}
}
General incidents
In some cases, you may want to create an incident at the Incident supertype level. This can be appropriate for claims
that make use of incidents not covered at one of the subtype levels. For example, an insurer may offer a special type of
policy for covering fine art, such as paintings. The insurer opts not to create a new incident subtype for fine art losses
and uses the Incident supertype instead.
In Cloud API, you can create incidents at the Incident supertype level by using the /general-incidents endpoints.
In the base configuration, this provides access to fields available to all incident types, such as description,
lossParty, and severity.
General incidents can also make use of assessment content items. An assessment content item is an individual item
covered by the policy.
222 Incidents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
POST /claim/v1/claims/cc:10/general-incidents
{
"data": {
"attributes": {
"description": "Haywain Triptych painting",
"lossParty": {
"code": "insured"
},
"severity": {
"code": "severe-gen"
}
}
}
}
For example, the following request creates an assessment content item for general incident cc:567 on claim cc:10.
POST /claim/v1/claims/cc:10/general-incidents/cc:567/assessment-content-items
{
"attributes": {
"itemComment": "Left portion of Haywain Triptych",
"numberOfItems": 1,
"purchaseCost": {
"amount": "20000.00",
"currency": "usd"
}
}
}
Injury incidents
An injury incident is an object that captures loss information about a single injury that a claimant suffered.
An injury incident typically includes an inline damageable named injuredPerson, with fields that describe inherent
qualities of the person, such as firstName and lastName. The injury incident also contains additional information
specific to the injury, such as ambulenceused, primaryDoctor, and treatmentType. You do not have to specify
injuredPerson when creating an injury incident. If you do want to specify injuredPerson, you can either:
Incidents 223
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
POST /claim/v1/claims/cc:332/injury-incidents
{
"data": {
"attributes": {
"bodyParts": [
{
"primaryBodyPart": {
"code": "head"
}
}
],
"description": "Potential vision loss",
"detailedInjuryType": {
"code": "58"
},
"generalInjuryType": {
"code": "specific"
},
"injuredPerson": {
"id": "cc:102"
},
"lossParty": {
"code": "third_party"
},
"lostWages": true,
"severity": {
"code": "major-injury"
},
"treatmentType": {
"code": "hospital"
}
}
}
}
Medical diagnoses
An injury incident can have one or more associated medical diagnoses. Note that, in the data model, they are stored in
the InjuryDiagnosis entity. But in the user interface, they are referred to as Medical Diagnoses. Thus, in Cloud API,
they are managed by the MedicalDiagnosis schema.
For more information on the business functionality of medical diagnoses, see the Application Guide.
• GET /claim/v1/claims/{claimId}/injury-incidents/{incidentId}/
medical-diagnoses
• GET /claim/v1/claims/{claimId}/injury-incidents/{incidentId}/
medical-diagnoses/{medicalDiagnosisId}
224 Incidents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
For example, the following request retrieves the medical diagnoses for injury incident cc:888 on claim cc:77.
Command
GET /claim/v1/claims/cc:77/injury-incidents/cc:888/medical-diagnoses
Response
{
"count": 1,
"data": [
{
"attributes": {
"icdCode": {
"displayName": "A00.0",
"id": "icd10:A00.0",
"type": "ICDCode",
"uri": "/admin/v1/icd-codes/icd10:A00.0"
},
"id": "cc:77077",
"isPrimary": true,
"provider": {
"displayName": "Beverly Cushing",
"id": "cc:4040",
"type": "ClaimContact",
"uri": "/claim/v1/claims/cc:77/contacts/cc:4040"
}
},
...
• POST /claim/v1/claims/{claimId}/injury-incidents/{incidentId}/
medical-diagnoses
POST /claim/v1/claims/cc:11/injury-incidents/cc:222/medical-diagnoses
Request
{
"data": {
"attributes": {
"icdCode": {
"id": "icd10:A00.0"
},
"provider": {
"id": "cc:4040"
}
}
}
}
• PATCH /claim/v1/claims/{claimId}/injury-incidents/{incidentId}/
medical-diagnoses/{medicalDiagnosisId}
Incidents 225
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
For example, the following request specifies that, for injury incident cc:222 on claim cc:11, medical diagnosis cc:
77077 was made on October 10, 2024.
Command
PATCH /claim/v1/claims/cc:11/injury-incidents/cc:222/medical-diagnoses/cc:77077
Request
{
"data": {
"attributes": {
"startDate": "2024-10-10"
}
}
}
• DELETE /claim/v1/claims/{claimId}/injury-incidents/{incidentId}/
medical-diagnoses/{medicaldiagnosisId}
For example, the following request deletes medical diagnosis cc:77077 for injury incident cc:222 on claim cc:11.
Command
DELETE /claim/v1/claims/cc:11/injury-incidents/cc:222/medical-diagnoses/cc:77077
• GET /claim/v1/claims/{claimId}/injury-incidents/{incidentId}/
bodily-injury-points
• GET /claim/v1//claims/{claimId}/injury-incidents/{incidentId}/
bodily-injury-points/{bodilyInjuryPointId}
For example, the following request retrieves the bodily injury points for injury incident cc:3030 on claim
demo_sample:1.
Command
GET /claim/v1/claims/demo_sample:1/injury-incidents/cc:3030/bodily-injury-points
Response
{
"count": 1,
"data": [
{
"attributes": {
"injuryPoint": {
"code": "hf_mouth",
"name": "Mouth"
226 Incidents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
},
"injurySeverity": {
"code": "moderate",
"name": "Moderate"
},
"id": "cc:SoYoLeedQxl8CMuJQw9t0"
},
...
}
],
...
}
• POST /claim/v1/claims/{claimId}/injury-incidents/{incidentId}/
bodily-injury-points
Command
POST /claim/v1/claims/demo_sample:1/injury-incidents/cc:2020/bodily-injury-points
Request
{
"data": {
"attributes": {
"injuryPoint": {
"code": "bfl_arm"
},
"injurySeverity": {
"code": "moderate"
}
}
}
}
• PATCH /claim/v1/claims/{claimId}/injury-incidents/{incidentId}/
bodily-injury-points/{bodilyInjuryPointId}
For example, the following request modifies the severity of bodily injury point cc:8888 for injury cc:2020 on claim
demo_sample:1.
Command
PATCH /claim/v1/claims/demo_sample:1/injury-incidents/cc:2020/bodily-injury-points/cc:8888
Request
{
"data": {
"attributes": {
"injurySeverity": {
"code": "severe"
}
}
}
}
Incidents 227
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
• DELETE /claim/v1/claims/{claimId}/injury-incidents/{incidentId}/
bodily-injury-points/{bodilyInjuryPointId}
For example, the following request deletes bodily injury point cc:8888 for injury cc:2020 on claim demo_sample:1.
Command
DELETE /claim/v1/claims/demo_sample:1/injury-incidents/cc:2020/bodily-injury-points/cc:8888
POST /claim/v1/claims/cc:5433/living-expenses-incidents
{
"data": {
"attributes": {
"description": "7-day hotel stay during flood damage repair",
"lossParty" : {
"code" : "insured"
},
"startDate" : "2020-08-31T07:00:00.000Z"
}
}
}
Baggage incidents
A baggage incident is an object that captures loss information about a piece of baggage that was lost or damaged
during a covered trip. Travel policies may also cover individual items within the baggage. Each covered item is an
assessment content item.
228 Incidents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
In ClaimCenter, baggage incidents are stored in the BaggageIncident entity, which is a subtype of
MobilePropertyIncident. Assessment content items are stored in the AssessmentContentItem entity.
In Cloud API, the Claim API has multiple sets of endpoints for baggage incident information:
• One set for the baggage incident itself
• One set for assessment content items
In each set, there is a collection GET, a POST, an element GET, a PATCH, and a DELETE.
POST /claim/v1/claims/cc:76/baggage-incidents
{
"data": {
"attributes": {
"baggageType": {
"code": "suitcase",
},
"description": "Item lost in transit",
"relatedTripRiskUnit": {
"id": "cc:SHEXDGWJHfyVMKSxBLFZ9",
}
}
}
}
For example, the following request retrieves the assessment content items for baggage incident cc:443 on claim cc:76.
GET /claim/v1/claims/cc:76/baggage-incidents/cc:443/assessment-content-items
RESPONSE:
{
"count": 2,
"data": [
{
"attributes": {
"contentCategory": {
"code": "computers",
"name": "Computers"
},
"contentSchedule": {
"code": "travel",
Incidents 229
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"name": "Travel"
},
"description": "iPad Pro",
"id": "cc:SxxdfwnGPPus1JO9lUrPh",
"incidentOrder": 1,
"numberOfItems": 1,
"purchaseCost": {
"amount": "760.00",
"currency": "usd"
}
},
...
},
{
"attributes": {
"contentCategory": {
"code": "cameras",
"name": "Cameras"
},
"contentSchedule": {
"code": "travel",
"name": "Travel"
},
"description": "Nikon TX-40",
"id": "cc:SC3nyG7KaG6yypqDvE76X",
"incidentOrder": 2,
"numberOfItems": 1,
"purchaseCost": {
"amount": "1200.00",
"currency": "usd"
}
},
...
230 Incidents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
• GET /claims/{claimId}/property-contents-incidents
• POST /claims/{claimId}/property-contents-incidents
• GET /claims/{claimId}/property-contents-incidents/{incidentId}
• PATCH /claims/{claimId}/property-contents-incidents/{incidentId}
• DELETE /claims/{claimId}/property-contents-incidents/{incidentId}
For example, the following request creates a property contents incident for claim cc:117.
POST /claim/v1/claims/cc:117/property-contents-incidents
{
"data": {
"attributes": {
"description": "Items stolen during burglary",
"location": {
"address": {
"id": "cc:SztgJU4ZkQ_tZx0rIW2fL",
}
},
"primaryLocation": false
}
}
}
}
For example, the following request creates an assessment content item for property contents incident cc:505 on claim
cc:117.
POST /claim/v1/claims/cc:117/property-contents-incidents/cc:505/assessment-content-items
{
"data": {
"attributes": {
"contentCategory": {
"code": "jewelry"
},
"contentSchedule": {
"code": "homeowners"
},
"description": "Necklace",
"numberOfItems": 1,
"purchaseCost": {
"amount": "1200.00",
"currency": "usd"
}
}
}
}
Incidents 231
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
• GET /claims/{claimId}/property-contents-incidents/{incidentId}/scheduled-items/
{scheduledItemId}
• PATCH /claims/{claimId}/property-contents-incidents/{incidentId}/scheduled-items/
{scheduledItemId}
• DELETE /claims/{claimId}/property-contents-incidents/{incidentId}/scheduled-items/
{scheduledItemId}
The scheduled item must already exist before it can be added to an incident. For example, the following request adds
scheduled item cc:410 to property contents incident cc:505 on claim cc:117
Command
POST /claims/cc:117/property-contents-incidents/CC:505/scheduled-items
Request
{
"data": {
"attributes": {
"propertyItem": {
"id": "cc:410"
}
}
}
}
Note that in the base configuration there are no properties under propertyItem that can be modified with the PATCH
command. The PATCH command is available for potential use with custom extensions.
Vehicle incidents
A vehicle incident is an object that captures loss information about a vehicle.
A vehicle incident typically includes an inline damageable called vehicle, with fields that describe inherent qualities
of the vehicle, such as make, model, and licenseplate. The vehicle incident also contains additional information
specific to the loss, such as airbagsdeployed, collisionpoint, and driver. You do not have to specify vehicle
when creating a vehicle incident. If you do want to specify vehicle, you can either:
• Specify an existing vehicle on the policy by providing its policySystemId.
• Specify an existing vehicle risk unit on the claim by providing its ClaimCenter id.
• Create a new vehicle by providing its attributes inline.
Unlike some other inline damageables, a vehicle cannot be created as a referenced resource in the included section
and then specified by refid. A new vehicle must be created as an inlined damageable.
POST /claim/v1/claims/cc:1134/vehicle-incidents
{
"data": {
232 Incidents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"attributes": {
"collisionPoint": {
"code": "front"
},
"damageDescription": "Damage to bumper and front panels",
"driver": {
"id": "cc:102"
},
"severity": {
"code": "moderate-auto"
},
"vehicle": {
"licensePlate": "7FDG745",
"make": "Mercury",
"model": "Sable",
"state": {
"code": "CA",
"name": "California"
},
"vin": "6GYF54637HD645370",
"year": 1993
}
}
}
}
• GET /claim/v1/claims/{claimId}/vehicle-incidents/{incidentId}/
vehicle-damage-points
• GET /claim/v1//claims/{claimId}/vehicle-incidents/{incidentId}/
vehicle-damage-points/{vehicleDamagePointId}
For example, the following request retrieves the vehicle damage points for vehicle cc:1010 on claim demo_sample:1.
Command
GET /claim/v1/claims/demo_sample:1/vehicle-incidents/cc:1010/vehicle-damage-points
Response
{
"count": 2,
"data": [
{
"attributes": {
"damagePoint": {
"code": "fr_door",
"name": "Front Right Door"
},
"damageSeverity": {
"code": "moderate",
"name": "Moderate"
},
"id": "cc:SwZ6FuftaXwcyOWRs6kG2"
},
...
},
{
"attributes": {
"damagePoint": {
Incidents 233
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"code": "f_bumper",
"name": "Front Bumper and Grill"
},
"id": "cc:SRlArWMDZmtKA8TScCZ3x"
},
...
}
],
...
}
• POST /claim/v1/claims/{claimId}/vehicle-incidents/{incidentId}/
vehicle-damage-points
Command
POST /claim/v1/claims/demo_sample:1/vehicle-incidents/cc:1010/vehicle-damage-points
Request
{
"data": {
"attributes": {
"damagePoint": {
"code": "roof"
},
"damageSeverity": {
"code": "minor"
}
}
}
}
• PATCH /claim/v1/claims/{claimId}/vehicle-incidents/{incidentId}/
vehicle-damage-points/{vehicleDamagePointId}
For example, the following request modifies the severity of damage point cc:9999 for vehicle cc:1010 on claim
demo_sample:1.
Command
PATCH /claim/v1/claims/demo_sample:1/vehicle-incidents/cc:1010/vehicle-damage-points/cc:9999
Request
{
"data": {
"attributes": {
"damageSeverity": {
"code": "severe"
}
}
}
}
• DELETE /claim/v1/claims/{claimId}/vehicle-incidents/{incidentId}/
vehicle-damage-points/{vehicleDamagePointId}
234 Incidents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
For example, the following request deletes damage point cc:9999 for vehicle cc:1010 on claim demo_sample:1.
Command
DELETE /claim/v1/claims/demo_sample:1/vehicle-incidents/cc:1010/vehicle-damage-points/cc:9999
Trip incidents
POST /claim/v1/claims/cc:411/trip-incidents
{
"data": {
"attributes": {
"description": "Flight cancelled due to airline strike",
"tripRiskUnit": {
"id": "cc:SHEXDGWJHfyVMKSxBLFZ9"
}
}
}
}
Incidents 235
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
For example, the following request creates a trip accommodation for trip incident cc:9811 on claim cc:411.
POST /claim/v1/claims/cc:411/trip-incidents/cc:9811/trip-accommodations
{
"data": {
"attributes": {
"cancelOnly": false,
"paidAmount": {
"amount": "508.00",
"currency": "aud"
},
"propertyName": "Yotel Syndey"
}
}
}
{
"data": {
"attributes": {
"arrivalDateTime": "2022-10-16T00:00:00.000Z",
"cancelOnly": false,
"carrierName": "Jetstar",
"carrierNumber": "607",
"departureDateTime": "2022-10-16T00:00:00.000Z",
"otherFees": {
"amount": "50.00",
"currency": "usd"
},
"portOfDisembarkation": "Brisbane",
"portOfEmbarkation": "Sydney",
"transportType": {
"code": "airline"
}
}
}
}
236 Incidents
chapter 18
Exposures
This topic provides a high-level overview of exposures, discussing both what they are and how to work with them
through the system APIs.
For a more detailed discussion of the business functionality of exposures, see the Application Guide. For a more
detailed discussion of the configuration of exposures, see the Configuration Guide.
What is an exposure?
An exposure is an object associated with a claim which is used to track a potential payment or a set of related potential
payments. Every exposure is linked to one coverage (where the money is "coming from") and one claimant (where the
money is "going to").
For example, suppose that Ray Newton has a personal auto policy. He informs the insurer that, while driving his
Toyota, he hit Robert Farley's Honda and damaged both cars. Robert Farley also suffered a neck injury. The associated
claim would have three exposures to track these potential payments:
Claimant Coverage
A potential payment to... Ray Newton ...from the policy's... collision coverage ...to pay for repairs to Ray's
car.
A potential payment to... Robert Farley ...from the policy's... third-party property damage ...to pay for repairs to
coverage Robert's car.
A potential payment to... Robert Farley ...from the policy's... third-party bodily damage coverage ...to pay for Robert's
medical bills to treat his
neck injury.
Some exposures result in a single payment. This is likely to be true for the first and second exposure in the previous
example. Typically, repairs to a vehicle can be covered in a single payment. Other exposures manage a set of related
payments. This could be true for the third exposure in the previous example. Medical treatment might occur over an
extended period of time, and multiple payments may be needed, one for each treatment.
covers damage to a vehicle owned by the insured. PALiabilityCov covers damages to vehicles owned by a third party
where the damage was caused by the insured.
Every exposure is indirectly linked to an exposure type. An exposure type is a set of information to gather for an
exposure. For example, VehicleDamage is an exposure type. It consists of information to gather about a damaged
vehicle, such as where on the vehicle is the damage, who was the driver, and were the airbags deployed.
Two exposures can be linked to the same exposure type, even if the coverages are different. For example,
PACollisionCov and PALiabilityCov are different coverages, but they can both involve damaged vehicles. The same
set of information needs to be gathered about a damaged vehicle, regardless of which coverage is involved. Therefore,
the two coverages are mapped to a single exposure type - the VehicleDamage exposure type. This exposure type is
used to determine the information to gather during the claims process.
Some coverages link to multiple exposure types. Therefore, ClaimCenter does not link coverage types directly to
exposure types. Instead, ClaimCenter links them through coverage subtypes. A coverage subtype is a value that links a
coverage type to an exposure type. For example:
• PACollisionCov is a coverage subtype that links the PACollisionCov coverage type to the VehicleDamage
exposure type. (In this case, the coverage type and coverage subtype have the same name.)
• PALiabilityCov_vd is a coverage subtype that links the PALiabilityCov coverage type to the VehicleDamage
exposure type.
When you create an exposure, you must specify both its coverage and coverage subtype.
238 Exposures
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
A exposure's validation level is determined and enforced by a set of exposure validation rules. Whenever a change is
made to an exposure, the validation rules determine if the exposure can be advanced to a later stage of validation. The
validation rules also prevent an exposure from moving backwards to a lower level of validation. For more information
on validation rules, see the Gosu Rules Guide.
A claim and its exposures are not necessarily always at the same validation level. For example, suppose there is a claim
with two exposures. It is possible for the claim to be at "send to external" while one of the exposures is at "new loss
completion" and other is at "ability to pay".
In order to make a payment, both the claim and the exposure from which the payment is coming must be at "ability to
pay". If a claim has multiple exposures, and the claim and one of the exposures are at "ability to pay", you can make
payments from that one exposure, even though the other exposures are not yet at "ability to pay".
Exposures 239
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Creating exposures
Use the POST /claims/{claimId}/exposures endpoint to create new exposures.
{
"data": {
"attributes": {
"primaryCoverage": {
"code": "..."
},
"coverageSubtype": {
"code": "..."
},
"claimant": {
"id" / "refid" / "policySystemId": "..."
},
"...Incident": {
"id" / "refid": "..."
},
"coverage": {
"id": "..."
}
}
},
"included": {
"...Incident": ...
"ClaimContact": ...
}
}
240 Exposures
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
GET [Link]
"RUNumber": 1,
"coverages": [
{
...
"coverageType": {
"code": "PACollisionCov",
"name": "Collision"
}
...
}
],
"id": "cc:9",
"vehicle": {
...
"id": "demo_sample:4",
"make": "Honda",
"model": "Civic"
...
{
"data": {
"attributes": {
"primaryCoverage": {
"code": "PACollisionCov"
},
...
Exposures 241
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
GET [Link]
?typekeyFilter=category:cn:[Link]
{
"data": {
"attributes": {
"primaryCoverage": {
"code": "PACollisionCov"
},
"coverageSubtype": {
"code": "PACollisionCov"
},
...
GET [Link]
242 Exposures
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
{
"attributes": {
...
"displayName": "Allen Robertson",
"id": "cc:32",
...
},
{
"data": {
"attributes": {
"primaryCoverage": {
"code": "PACollisionCov"
},
"coverageSubtype": {
"code": "PACollisionCov"
},
"claimant": {
"id": "cc:32"
},
...
{
"data": {
"attributes": {
"primaryCoverage": {
"code": "PACollisionCov"
},
"coverageSubtype": {
"code": "PACollisionCov"
},
"claimant": {
"id": "cc:32"
},
"vehicleIncident": {
"refid": "newVehicleIncident"
},
...
}
},
"included": {
Exposures 243
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"VehicleIncident": [
{
"attributes": {
"vehicle": {
"id": "demo_sample:4"
}
},
"refid": "newVehicleIncident",
"method": "post",
"uri": "/claim/v1/claims/demo_sample:8037/vehicle-incidents"
}
]
}
}
GET [Link]
policy/vehicle-risk-units/cc:121
{
"attributes": {
"coverages": [
{
"coverageType": {
"code": "PACollisionCov"
},
"id": "cc:7007",
...
{
"data": {
"attributes": {
"primaryCoverage": {
"code": "PACollisionCov"
},
"coverageSubtype": {
"code": "PACollisionCov"
},
"claimant": {
"id": "cc:32"
},
"vehicleIncident": {
"refid": "newVehicleIncident"
},
"coverage": {
"id": "cc:7007"
244 Exposures
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
}
}
},
"included": {
"VehicleIncident": [
{
"attributes": {
"vehicle": {
"id": "demo_sample:4"
}
},
"refid": "newVehicleIncident",
"method": "post",
"uri": "/claim/v1/claims/demo_sample:8037/vehicle-incidents"
}
]
}
}
Assigning exposures
Every exposure is assigned to a group and a user in that group. The assigned user has the primary responsible for
managing the exposure.
Most exposures are assigned to the same user and group that owns the claim. However, exposures occasionally require
special expertise that require assignment to a different user and group than that of the claim. For example, suppose
there is a personal auto claim that includes three exposures: two exposures for damaged vehicles and one exposure for
medical payments related to a fatal injury. The claim and the vehicle exposures are routine and can all be assigned to
the same group and user. But the injury exposure is likely to involve a significant payment or litigation. This exposure
is assigned to a group and user that specialize in fatalities.
When you create an exposure through the system APIs, ClaimCenter automatically executes the exposure assignment
rules to initially assign the exposure to a group and user. You can use the POST /claims/{claimId}/exposures/
{exposureId}/assign endpoint to reassign the exposure as needed.
Note: The functionality for assigning exposures is a subset of the functionality for assigning activities. All
assignment options that are applicable to both activities and exposures have the same behavior.
Assignment options
An exposure can be assigned through the system APIs in the following ways:
• To a specific group and user in that group
• To a specific group only (and then ClaimCenter uses assignment rules to select a user in that group)
• To the claim owner
• By re-running the exposure assignment rules
◦ This can be appropriate if you have modified the exposure since the last time assignment rules were run and the
modification might affect who the exposure would be assigned to.
The root resources for the /exposures/{exposureId}/assign endpoints is ExposureAssignee. This resource
specifies assignment criteria. The schema has the following fields:
Exposures 245
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
The ExposureAssignee resource cannot be empty. It must specify a single logical assignment option (group and user,
group only, claim owner, or automatic assignment).
For more information on how assignment rules execute assignment, see the Gosu Rules Guide.
POST /claim/v1/claims/cc:34/exposures/cc:48/assign
{
"data": {
"attributes" : {
"groupId" : "demo_sample:31",
"userId" : "demo_sample:2"
}
}
}
The following assigns exposure cc:48 (on claim cc:34) to group demo_sample:31 (Auto1 - TeamA). Because no user
has been specified, ClaimCenter will execute assignment rules to assign the exposure to a user in group demo-sample:
31.
POST /claim/v1/claims/cc:34/exposures/cc:48/assign
{
"data": {
"attributes" : {
"groupId" : "demo_sample:31"
}
}
}
Note that there is currently no endpoint that returns groups or group IDs. To assign exposures to a specific group, the
caller application must determine the group ID using some method other than a groups system API.
POST /claim/v1/claims/cc:34/exposures/cc:48/assign
{
"data": {
"attributes" : {
"claimOwner" : true
}
}
}
POST /claim/v1/claims/cc:34/exposures/cc:48/assign
{
"data": {
"attributes": {
"autoAssign" : true
}
246 Exposures
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
}
}
Deductibles
If an exposure has a deductible, you can do the following through Cloud API:
• Access information about it
• Modify its amount
• Waive it
Note that Cloud API does not have separate endpoints for managing deductibles. All of the actions in the previous list
are executed by specifying information in the related exposure, either in the initial POST or a subsequent PATCH.
User interface behaviors that are not enforced by Cloud API
Be aware that, in the base configuration, ClaimCenter has behaviors and restrictions related to deductibles that are
defined in the user interface layer and not in the domain layer. Given that these behaviors are not declared in the
domain layer, they are not enforced when working with deductibles through Cloud API. The user interface behaviors
include the following:
• If a deductible amount is overridden:
◦ The new amount cannot be greater than the original amount.
◦ The edit reason cannot be null.
• If a deductible is waived:
◦ The edit reason cannot be null.
• If a deductible amount is not overridden and the deductible is not waived:
◦ You cannot change the amount.
◦ You cannot specify an edit reason.
• If a deductible has been partially or entirely applied, it cannot be waived.
GET /claim/v1/claims/cc:111/exposures/cc:222
Exposures 247
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Response
{
"data": {
"attributes": {
...
"deductible": {
"amount": {
"amount": "500.00",
"currency": "usd"
},
"amountApplied": {
"amount": "0.00",
"currency": "usd"
},
"amountRemaining": {
"amount": "500.00",
"currency": "usd"
},
"overridden": false,
"waived": false
},
"id": "cc:222",
...
},
...
}
PATCH /claim/v1/claims/cc:111/exposures/cc:222
Request
{
"data": {
"attributes": {
"deductible": {
"amount": {
"amount": "550.00",
"currency": "usd"
},
"editReason": "Deductible entered incorrectly in PAS",
"overridden": true
}
}
}
}
248 Exposures
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Response
{
"data": {
"attributes": {
...
"deductible": {
"amount": {
"amount": "550.00",
"currency": "usd"
},
"amountApplied": {
"amount": "0.00",
"currency": "usd"
},
"amountRemaining": {
"amount": "550.00",
"currency": "usd"
},
"editReason": "Deductible entered incorrectly in PAS",
"overridden": true,
"waived": false
},
"id": "cc:222",
...
},
...
}
Waiving a deductible
You can waive a deductible, either during the initial POST or a subsequent PATCH.
The base configuration user interface has the following behaviors:
• In order to waive a deductible, you must first set the Modified field to true. (This value is stored in the Overridden
field.)
• When you set the Modified field to true, the Edit Reason field becomes visible and is required.
Because these behaviors are declared in the user interface, and not as domain-level logic, Cloud API does not enforce
them. Thus:
• You can waive a deductible without setting overridden to true. However, if you want to match base configuration
user interface behavior, then set overridden to true.
• You can waive a deductible without providing an editReason. However, if you want to match base configuration
user interface behavior, then provide a value for editReason.
For example, the following call waives the deductible for exposure cc:222 on claim cc:111. It sets overridden to true
and provides an edit reason of "Third party at fault".
Command
PATCH /claim/v1/claims/cc:111/exposures/cc:222
Request
{
"data": {
"attributes": {
"deductible": {
"editReason": "Third party at fault",
"overridden": true,
"waived": true
}
}
}
}
Response
{
"data": {
"attributes": {
...
Exposures 249
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"deductible": {
"amount": {
"amount": "500.00",
"currency": "usd"
},
"amountApplied": {
"amount": "0.00",
"currency": "usd"
},
"amountRemaining": {
"amount": "500.00",
"currency": "usd"
},
"editReason": "Third party at fault",
"overridden": true,
"waived": true
},
"id": "cc:222",
...
},
...
}
Validating exposures
Similar to claim validation, the POST /claim/{claimId}/exposures/{exposureId}/validate endpoint returns
allvalidation levels reached for the given exposure. It can also be used to determine what conditions must be met for
the exposure to advance to a given validation level.
Checking an exposure's validation level can be useful in the following situations:
• You want to determine whether the exposure has enough information to be assigned to an adjuster. You can use
the /validate endpoint to determine if the exposure has reached the "new loss completion" level. If the exposure is
below the "new loss completion" level, the payload identifies the conditions needed to reach "new loss completion".
• You want to execute a payment for an exposure. You can use the /validate endpoint to determine if the exposure
has reached the "ability to pay" level, as well as all levels before "ability to pay". If the exposure is below the
"ability to pay" level, the payload identifies the conditions needed to reach "ability to pay".
• Your instance of ClaimCenter has custom validation levels. You can use the /validate endpoint to determine all
the levels the exposure has reached in its lifecycle, including those custom levels.
For more information on validation through system APIs, see “Validating claims” on page 193.
Closing exposures
During an exposure's life cycle, the exposure's status typically moves from draft to open to closed. An exposure is
closed to indicate that no further payments are expected to be made from the exposure.
250 Exposures
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
In the base configuration, ClaimCenter automatically closes an exposure when a "final payment" is made from the
exposure's reserve line. (A "final payment" is a payment whose payment type is final, as opposed to a payment whose
type is partial.) You can also close exposures through Cloud API.
Similar to a closed claim, a closed exposure can be reopened.
Closing exposures
Use the following endpoint to close an exposure:
• POST /claim/v1/claims/{claimId}/exposures/{exposureId}/close
A request body is not required, but you can include it to specify a closedOutcome, which must be set to a value from
the ExposureClosedOutcomeType typelist (such as completed or duplicate).
For example, the following request closes exposure cc:222 on claim cc:706 with a closed outcome of duplicate.
POST /claim/v1/claims/cc:706/exposures/cc:222/close
{
"data": {
"attributes": {
"closedOutcome": {
"code": "duplicate"
}
}
}
}
Be aware that validation rules can prevent the closing of the exposure. For example, in the base configuration, an
exposure cannot be closed if it has open activities. If you attempt to close an exposure with open activities,
ClaimCenter responds with a message similar to the following.
"message": "There are open activities related to this exposure. To close the exposure, you must
first complete or skip these open activities. Please complete or skip these activities before
closing the exposure.",
For example, the following request reopens exposure cc:222 on claim cc:706 (assuming the exposure is closed):
POST /claim/v1/claims/cc:706/exposures/cc:222/reopen
Exposures 251
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
252 Exposures
chapter 19
Service requests
A claim can have one or more service requests. This topic provides a high-level overview of service requests,
discussing both what they are and how to work with them through the system APIs.
For a more detailed discussion of the business functionality of service requests, refer to the Application Guide. For a
more detailed discussion of the configuration of service requests, refer to the Configuration Guide.
A service request that is fully executed goes through the following stages:
1. Draft
• The service request has been created in ClaimCenter but not yet submitted to the vendor.
2. Requested
• The service request has been submitted to the vendor, but not yet accepted.
3. In Progress
• The vendor has accepted the service request and started the work.
• For a Quote Only service request, the "work" consists of generating a quote.
• For a Quote and Service service request, the "work" consists of generating a quote and then, once the quote is
approved, providing the services.
• For all other service request kinds, the "work" consists of directly providing the services.
4. Work Complete
• The work (the quote or the set of services) is complete.
• At this point, the vendor may or may not have submitted invoices for the work.
• At this point, the invoices may or may not have been paid.
There are additional stages that a service request could reach:
• Declined
◦ A service request can reach this stage if the vendor decides to not accept a service request. For example, this
could happen if the service request is for a rental car and the vendor has no available cars.
◦ A service request can reach this stage if the vendor accepts a service request, but then later states they cannot
complete it. For example, this could happen if the vendor experiences an unexpected reduction in available
mechanics.
• Canceled
◦ A service request can reach this stage when the insurer decides the service request is no longer needed. For
example, the insured could decide to buy a new car instead of fixing the damaged car.
• Vendor Waiting
◦ A service request can reach this stage when the vendor cannot take action on the service without further input
from ClaimCenter. For example, the vendor could have submitted a quote that requires approval from an
adjuster.
Lifecycle management
Cloud API provides a number of endpoints to manage the lifecycle of a service request. This includes both endpoints
for actions taken by the insurer (such as submitting a service request) and endpoints for actions taken by the vendor
(such as accepting a service request).
As of this release, there are endpoints to advance a service request to most stages in the lifecycle. However, there are
currently no endpoints to move a service request to the "Vendor Waiting" status.
System API endpoint Moves Progress to... Services list's Next Action is...
POST /service-requests Draft "Submit request"
POST /{serviceRequestId}/submit Requested "Agree to provide quote"
POST /{serviceRequestId}/accept In Progress "Add quote"
As of this release, there are no endpoints to create quotes or pay invoices. However, users can create quotes, pay
invoices, and take other actions that advance the service request to completion, through the user interface.
System API endpoint Moves Progress to... Services list's Next Action is...
POST /service-requests Draft "Submit request"
POST /{serviceRequestId}/submit Requested "Agree to perform service"
POST /{serviceRequestId}/accept In Progress "Finish the work"
POST /{serviceRequestId}/complete- Work Complete "Add invoice"
work
POST /{serviceRequestId}/invoices Work Complete "Pay invoice"
As of this release, there are no endpoints to pay invoices. However, invoices can be paid through the user interface.
System API endpoint Moves Progress to... Services list's Next Action is...
POST /service-requests Work Complete "Add invoice"
POST /{serviceRequestId}/invoices Work Complete "Pay invoice"
As of this release, there are no endpoints to pay invoices. Unmanaged service requests are expected to make use of
straight-through invoice processing to automatically approve and pay invoices. However, if required, invoices can be
paid through the user interface.
Endpoint Response
GET /service-requests All service requests
By default, the payload in the response includes the ID of each service request and each
claim the service request belongs to.
GET /claims/{claimId}/ All service requests for the specified claim
service-requests
This is a "potentially large" endpoint. Cloud API returns an error if you attempt to sort on
this endpoint and the sort cannot be accomplished efficiently. For more information, see
“Potentially large endpoints” on page 56.
◦ The location where the service is being performed (in the serviceAddress field)
◦ The set of services being performed (in the services array)
• A requested quote completion date, if the service request is Quote Only or Quote and Service
• A requested service completion date, if the service request is Service Only
POST [Link]
Request body
{
"data": {
"attributes": {
"kind": {
"code": "serviceonly"
},
"specialist": {
"id": "cc:16"
},
"instruction": {
"customer": {
"id": "cc:13"
},
"serviceAddress": {
"addressLine1": "1313 Mockingbird Lane",
"city": "Arcadia",
"country": "US",
"postalCode": "91006",
"state": {
"code": "CA",
"name": "California"
}
},
"services": [
{
"code": "autoothersalvage"
}
]
},
"requestedServiceCompletionDate": "2021-03-19"
}
}
}
POST [Link]
{
"data": {
"attributes": {
"kind": {
"code": "unmanaged"
},
"specialist": {
"id": "cc:16"
},
"instruction": {
"customer": {
"id": "cc:13"
},
"serviceAddress": {
"addressLine1": "1313 Mockingbird Lane",
"city": "Arcadia",
"country": "US",
"postalCode": "91006",
"state": {
"code": "CA",
"name": "California"
}
},
"services": [
{
"code": "autoothertowing"
}
]
}
}
}
}
The {0} placeholder is populated with a list of the schema properties that have been changed. You can configure the
value of the Description field by modifying this display key.
Note: The functionality for assigning service requests is a subset of the functionality for assigning activities.
All assignment options that are applicable to both activities and service requests have the same behavior.
Assignment options
A service request can be assigned through the system APIs in the following ways:
• To a specific group and user in that group
• To a specific group only (and then ClaimCenter uses assignment rules to select a user in that group)
• To the claim owner
• By re-running the service request assignment rules
◦ This can be appropriate if you have modified the service request since the last time assignment rules were run
and the modification might affect who the service request would be assigned to.
The root resource for the /{serviceRequestId}/assign endpoint is ServiceRequestAssignee. This resource
specifies assignment criteria. The ServiceRequestAssignee schema has the following fields:
The Assignee resource cannot be empty. It must specify a single assignment option (group and user, group only, claim
owner, or automatic assignment).
For more information on how assignment rules execute assignment, see the Gosu Rules Guide.
POST /claim/v1/claims/demo_sample:20/service-requests/cc:102/assign
{
"data": {
"attributes" : {
"groupId" : "demo_sample:31",
"userId" : "demo_sample:2"
}
}
}
The following assigns service request cc:102 (from claim demo_sample:20) to group demo_sample:31 (Auto1 -
TeamA). Because no user has been specified, ClaimCenter will execute assignment rules to assign the service request
to a user in group demo-sample:31.
POST /claim/v1/claims/demo_sample:20/service-requests/cc:102/assign
{
"data": {
"attributes" : {
"groupId": "demo_sample:31"
}
}
}
Note that there is currently no endpoint that returns groups or group IDs. To assign service requests to a specific group,
the caller application must determine the group ID using some method other than a groups system API.
POST /claim/v1/claims/demo_sample:20/service-requests/cc:102/assign
{
"data": {
"attributes" : {
"claimOwner" : true
}
}
}
POST /claim/v1/claims/demo_sample:20/service-requests/cc:102/assign
{
"data": {
"attributes": {
"autoAssign" : true
}
}
}
Note: As of this release, there are no system API endpoints to advance a service request to the Vendor Waiting
stage.
Composite request limitations
For Quote Only, Quote and Service, and Service only service requests, you can create and submit a service request in a
composite request. But you cannot advance a service request to any other stage in its life cycle (such as in progress,
declined, or canceled).
For Unmanaged service requests, you can create, submit, invoice, and approve the service request in a single composite
request. You can also mark service request invoices as paid in that same composite request.
POST /claim/v1/claims/demo_sample:20/service-requests/cc:9/submit
When a Draft service request has been submitted, its Progress field is set to Requested.
POST /claim/v1/claims/demo_sample:20/service-requests/cc:9/accept
{
"data": {
"attributes": {
"expectedCompletionDate" : "2021-03-22"
}
}
}
When a Requested service request has been accepted, its Progress field is set to In Progress.
POST /claim/v1/claims/demo_sample:20/service-requests/cc:9/decline
{
"data": {
"attributes": {
"reason" : "All mechanics are booked through the end of the month."
}
}
}
When a Requested service request has been declined, its Progress field is set to Declined.
The following indicates the work is complete for service request cc:9:
POST /claim/v1/claims/demo_sample:20/service-requests/cc:9/work-complete
When an In Progress service request has been completed, its Progress field is set to Work Complete.
POST /claim/v1/claims/demo_sample:20/service-requests/cc:9/cancel
{
"data": {
"attributes": {
"reason" : "Vendor realized they cannot service this type of auto."
}
}
}
When an In Progress service request has been canceled by the vendor, its Progress field is set to Declined. This is the
same state a service request is set to if the service request is initial declined rather than accepted.
POST /claim/v1/claims/demo_sample:20/service-requests/cc:9/internal-cancel
{
"data": {
"attributes": {
"reason" : "Claimant has decided not to request service."
}
}
}
When an In Progress service request has been canceled by the insurer, its Progress field is set to Canceled.
The following table summarizes the status of each life cycle for a Quote and Perform Service service request after each
life cycle event.
Adding quotes
To add a quote, use:
• POST /claims/{claimId}/service-requests/{serviceRequestId}/add-quote
When you add a quote, you must provide a statement object, which is defined by the ServiceRequestStatement
schema. The minimum required fields are:
• A description
• The expectedDaysToPerformService (an integer)
• An array of lineItems. Each item must have an amount, which is specified as a JSON object with an amount and
currency.
The following payload is an example of adding a quote to service request cc:101 (for claim demo_sample:2). The
quote is for $250 USD and specifies it will take 10 days to perform the service.
POST claim/v1/claims/demo_sample:2/service-requests/cc:101/add-quote
{
"data": {
"attributes": {
"statement": {
"description" : "Quote for repair",
"expectedDaysToPerformService": 10,
"lineItems": [
{
"amount": {
"amount": "250.00",
"currency": "usd"
}
}
]
}
}
}
}
You can provide additional quotes for a service request. There can only be one active quote at a time, which is also
referred to as the "latest quote". To add an additional quote, use the same endpoint. ClaimCenter makes the new quote
the active quote.
Approving quotes
To approve a quote, use:
• POST /claims/{claimId}/service-requests/{serviceRequestId}/approve-quote
The request payload must include a requestedCompletionDate.
The following approves the quote for service request cc:9.
POST /claim/v1/claims/demo_sample:20/service-requests/cc:9/approve-quote
{
"data": {
"attributes": {
"requestedCompletionDate": "2021-08-31"
}
}
}
Endpoint Response
GET /claims/{claimId}/service-requests/ All invoices for the specified service request
{serviceRequestId}/invoices
GET /claims/{claimId}/servicerequests/ The specified invoice. Note that in order to get information about a specific
{serviceRequestId}/invoices/{invoiceId} invoice, you must access the invoice from its parent claim and service
request.
POST /claim/v1/claims/demo_sample:20/service-requests/cc:9/invoices
{
"data": {
"attributes": {
"description": "Invoice submitted using system APIs",
"referenceNumber": "771-DX5667",
"lineItems": [
{
"amount": {
"amount": "150.00",
"currency": "usd"
},
"category": {
"code": "labor"
},
"description": "Invoiced labor"
},
{
"amount": {
"amount": "50.00",
"currency": "usd"
},
"category": {
"code": "parts"
},
"description": "Invoiced parts"
}
]
}
}
}
POST /claim/v1/claims/demo_sample:20/service-requests/cc:9/invoices/cc:6/approve
POST /claim/v1/claims/demo_sample:20/service-requests/cc:9/invoices/cc:6/mark-as-paid
{
"data": {
"attributes": {
"check": {
"id": "cc:413"
}
}
}
}
Note that ClaimCenter has validation rules that limit the ability to mark an invoice as paid based on the invoice's state.
POST /claim/v1/claims/demo_sample:20/service-requests/cc:9/invoices/cc:6/withdraw
{
"data": {
"attributes": {
"reason": "Invoice submitted in error"
}
}
}
Matters
A matter is an object that manages information pertaining to a legal proceeding related to a claim, such as a lawsuit.
Similar to claims, exposures, and activities, a matter can be assigned to a group and a user in that group. This user is
responsible for managing the matter.
After its initial creation, a matter is considered open. An open matter can be closed (indicating no further action is
expected on the matter). A matter is considered closed when its CloseDate is non-null. A closed matter can be
reopened. (This resets CloseDate to null.)
You can create and manage matters through Cloud API.
{
"count": 1,
"data": [
{
"attributes": {
"assignedGroup": {
"displayName": "Auto1 - TeamA",
"id": "demo_sample:31",
"type": "Group",
"uri": "/admin/v1/groups/demo_sample:31"
},
"assignedUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1",
"type": "User",
"uri": "/admin/v1/users/demo_sample:1"
},
"assignmentStatus": {
"code": "assigned",
"name": "Assigned"
},
"caseNumber": "34-84982A",
"courtType": {
"code": "state",
"name": "State"
},
"fileDate": "2019-09-06T07:00:00.000Z",
"id": "cc:SKbNseiqKR6rbsdYtA5Qh",
Matters 271
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"matterType": {
"code": "General",
"name": "General"
},
"name": "Ray Newton matter",
"validationLevel": {
"code": "payment",
"name": "Ability to pay"
}
},
...
Creating matters
Use the following endpoint to create a matter for a given claim:
• POST /claim/v1/claims/{claimId}/matters
You can POST matters only on open claims. You cannot POST matters on draft claims.
POST /claim/v1/claims/demo_sample:1/matters/
{
"data": {
"attributes": {
"name": "Claim arbitration"
}
}
}
The following request creates a matter for claim demo_sample:1 using the required field and some of the optional
fields.
POST /claim/v1/claims/demo_sample:1/matters/
{
"data": {
"attributes": {
"caseNumber": "35-00341B",
"fileDate": "2023-02-02",
"matterType": {
"code": "Mediation"
},
"name": "Mediation to determine who was at fault"
}
}
}
PATCHing matters
Use the following endpoint to PATCH a matter:
• PATCH /claim/v1/claims/{claimId}/matters/{matterId}
For example, the following request PATCHes matter cc:99 for claim demo_sample:1.
PATCH /claim/v1/claims/demo_sample:1/matters/cc:99
{
"data": {
"attributes": {
"caseNumber": "35-00109C"
}
}
}
272 Matters
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
There are several fields related to the matter's assignment: assignedGroup, assignedUser, assignmentStatus. These
fields cannot be set directly. They can only be set by assigning the matter. For more information, see “Assigning
matters” on page 273.
Assigning matters
A matter can be assigned to a group and a user in that group. This user has the primary responsible for managing the
matter.
When you create a matter through Cloud API, ClaimCenter automatically executes the matter assignment rules to
initially assign the activity to a group and user. You can use the following endpoint to reassign the activity as needed.
• POST /claim/v1/claims/{claimId}/matters/{matterId}/assign
Matter assignment is similar to activity assignment. For more information on activity assignment, see “Assigning
activities” on page 356. The only fundamental differences between the two is that activities can be assigned to queues
whereas matters cannot.
Assignment options
A matter can be assigned in the following ways:
• To a specific group and user in that group
• To a specific group only (and then ClaimCenter uses assignment rules to select a user in that group)
• To the claim owner
• By running the activity assignment rules
The root resource for the /{matterId}/assign endpoint is MatterAssignee. This resource specifies assignment
criteria. The MatterAssignee schema has the following fields:
Assignment examples
Assigning to a specific group (and user)
The following payload assigns matter cc:99 for claim demo_sample:1 to group demo_sample:31 and user
demo_sample:1. The user must be active and must have the "own matter" system permission.
POST /claim/v1/claims/demo_sample:1/matters/cc:99/assign
{
"data": {
"attributes" : {
"groupId" : "demo_sample:31",
"userId" : "demo_sample:1"
}
}
}
Matters 273
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
The following payload assigns matter cc:99 for claim demo_sample:1 to group demo-sample:31. Because no user has
been specified, ClaimCenter will execute assignment rules to assign the matter to a user in group demo-sample:31.
POST /claim/v1/claims/demo_sample:1/matters/cc:99/assign
{
"data": {
"attributes" : {
"groupId" : "demo_sample:31"
}
}
}
POST /claim/v1/claims/demo_sample:1/matters/cc:99/assign
{
"data": {
"attributes" : {
"claimOwner" : true
}
}
}
POST /claim/v1/claims/demo_sample:1/matters/cc:99/assign
{
"data": {
"attributes" : {
"autoAssign" : true
}
}
}
For more information on assignment rules, see the Gosu Rules Guide.
POST /claim/v1/claims/demo_sample:1/matters/cc:99/close
{
"data": {
"attributes": {
"note": "Opposing counsel withdrew petition to reassign fault",
"reason": {
"code": "PMW"
}
}
}
}
274 Matters
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
When you close a matter, the closeDate field is set to the current date and time.
Reopening matters
Use the following endpoint to reopen a matter:
• POST /claim/v1/claims/{claimId}/matters/{matterId}/reopen
A request body is not required, but you can include it to specify either of the following:
• A note, which is a string value to explain why the matter was reopened.
• A reason, which must be set to a value from the MatterReopenedReason typelist.
For example, the following request reopens matter cc:99 for claim demo_sample:1 with an optional reason of
"mistake".
POST /claim/v1/claims/demo_sample:1/matters/cc:99/reopen
{
"data": {
"attributes": {
"reason": {
"code": "mistake"
}
}
}
}
Matters 275
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
276 Matters
chapter 21
A workers' compensation claim (also referred to as a workers' comp claim) is a claim filed by a company on behalf of
an injured worker. The claim is intended to address losses that result from medical treatment of the injured worker, lost
wages due to the injury, and potentially court costs related to litigation if the worker initiates legal action.
From a processing standpoint, workers' compensation claims have requirements that are unlike claims for any other
line of business. Therefore, ClaimCenter has behaviors that are specific to workers' comp claims. The following topic
summarizes these behaviors. It also describes how to create workers' comp claims through Cloud API.
For more information on the business functionality of workers' comp claims, see the Application Guide.
• The injury exposure is created automatically at the end of the New Claim wizard. This is done for all workers'
comp claims.
• The lost wages exposure is created automatically at the end of the New Claim wizard if, on the Loss Details step,
the Lost time from work field is set to Yes.
• The employer liability exposure is created when the Employer Liability? field is set to Yes.
◦ In the base configuration, this field is not exposed in the New Claim wizard. Thus, in the base configuration,
this field can only be set after the claim has been created and assigned. The field is on the Loss Details: General
screen in the Classification section.
Command
POST /composite/v1/composite
Request payload
{
"requests": [
{
"body": {
"data": {
"attributes": {
"lossDate": "2024-06-09",
"policyNumber": "32-300869"
}
}
},
"method": "post",
"uri": "/claim/v1/claims",
"vars": [
{
"name": "claimId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"firstName": "Sue",
"lastName": "Sarcosky",
"contactSubtype": "Person"
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/contacts",
"vars": [
{
"name": "sueId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"firstName": "Jennifer",
"lastName": "Albee",
"contactSubtype": "Person"
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/contacts",
"vars": [
{
"name": "jenniferId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"reporter": {
"id": "${sueId}"
},
"claimant": {
"id": "${jenniferId}"
}
}
}
},
"method": "patch",
"uri": "/claim/v1/claims/${claimId}"
},
{
"body": {
"data": {
"attributes": {
"mainWorkersCompIncident": true
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/injury-incidents"
},
{
"method": "post",
"uri": "/claim/v1/claims/${claimId}/submit"
}
]
}
POST /composite/v1/composite
Request payload
{
"requests": [
{
"body": {
"data": {
"attributes": {
"lossDate": "2024-06-09",
"policyNumber": "32-300869",
"workersCompInfo": {
"timeLossReport": true
}
}
}
},
"method": "post",
"uri": "/claim/v1/claims",
"vars": [
{
"name": "claimId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"firstName": "Sue",
"lastName": "Sarcosky",
"contactSubtype": "Person"
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/contacts",
"vars": [
{
"name": "sueId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"firstName": "Jennifer",
"lastName": "Albee",
"contactSubtype": "Person"
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/contacts",
"vars": [
{
"name": "jenniferId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"reporter": {
"id": "${sueId}"
},
"claimant": {
"id": "${jenniferId}"
}
}
}
},
"method": "patch",
"uri": "/claim/v1/claims/${claimId}"
},
{
"body": {
"data": {
"attributes": {
"mainWorkersCompIncident": true
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/injury-incidents"
},
{
"method": "post",
"uri": "/claim/v1/claims/${claimId}/submit"
}
]
}
• In the user interface, you must create the claim using the New Claim wizard. Then once it has been submitted, you
must navigate to the Lost Details: General screen and, in the Classification section, set the Employer Liability? field
to Yes.
• In Cloud API , you must add the workersCompInfo object to the claim and set its employerLiability field to true.
This can be done either before the claim is submitted as part of the POST /claim call, or after the claim is
submitted as part of a PATCH /claim call.
Note: When the claim is created or updated with the appropriate field set, ClaimCenter automatically creates
the employer liability exposure.
POST /composite/v1/composite
Request payload
{
"requests": [
{
"body": {
"data": {
"attributes": {
"lossDate": "2024-06-09",
"policyNumber": "32-300869",
"workersCompInfo": {
"employerLiability_Ext": true
}
}
}
},
"method": "post",
"uri": "/claim/v1/claims",
"vars": [
{
"name": "claimId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"firstName": "Sue",
"lastName": "Sarcosky",
"contactSubtype": "Person"
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/contacts",
"vars": [
{
"name": "sueId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"firstName": "Jennifer",
"lastName": "Albee",
"contactSubtype": "Person"
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/contacts",
"vars": [
{
"name": "jenniferId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"reporter": {
"id": "${sueId}"
},
"claimant": {
"id": "${jenniferId}"
}
}
}
},
"method": "patch",
"uri": "/claim/v1/claims/${claimId}"
},
{
"body": {
"data": {
"attributes": {
"mainWorkersCompIncident": true
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/injury-incidents"
},
{
"method": "post",
"uri": "/claim/v1/claims/${claimId}/submit"
}
]
}
POST /composite/v1/composite
Request payload
{
"requests": [
{
"body": {
"data": {
"attributes": {
"accidentType": {
"code": "25"
},
"dateReportedToEmployer": "2024-06-09",
"description": "WC Claim",
"employmentInjury": true,
"lobCode": {
"code": "WorkersCompLine"
},
"reportedDate": "2024-06-09",
"lossCause": {
"code": "fall"
},
"lossDate": "2024-06-09",
"policyNumber": "32-300869",
"lossLocation": {
"addressLine1": "1111 Accident Dr",
"city": "San Mateo",
"postalCode": "94403",
"state": {
"code": "CA"
}
},
"workersCompInfo": {
"timeLossReport": true,
"deathReport": false,
"medicalReport": true,
"employerLiability_Ext": true
},
"employmentData": {
"numberOfDaysWorked": "5.8",
"numberOfHoursWorked": "8.6",
"wageAmount": {
"amount": "748.20",
"currency": "usd"
},
"payPeriod": {
"code": "weekly"
}
},
"examinationDate": "2024-06-09",
"treatmentRendered": "This patient had a very bad fall"
}
}
},
"method": "post",
"uri": "/claim/v1/claims",
"vars": [
{
"name": "claimId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"firstName": "Sue",
"lastName": "Sarcosky",
"contactSubtype": "Person"
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/contacts",
"vars": [
{
"name": "sueId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"firstName": "Jennifer",
"lastName": "Albee",
"contactSubtype": "Person",
"homePhone": {
"countryCode": {
"code": "US"
},
"number": "8184461206"
},
"primaryAddress": {
"addressLine1": "354 Cactus Ln",
"city": "Tucson",
"postalCode": "85716",
"state": {
"code": "AZ"
}
}
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/contacts",
"vars": [
{
"name": "jenniferId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"firstName": "Gregory",
"lastName": "House",
"emailAddress1": "0000@[Link]",
"primaryAddress": {
"addressLine1": "1111 Hospital Rd,",
"city": "Princeton",
"postalCode": "08540",
"state": {
"code": "NJ"
}
},
"contactSubtype": "Doctor",
"workPhone": {
"countryCode": {
"code": "US"
},
"number": "704-434-2008"
}
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/contacts",
"vars": [
{
"name": "doctorId",
"path": "$.[Link]"
}
]
},
{
"body": {
"data": {
"attributes": {
"reporter": {
"id": "${sueId}"
},
"mainContact": {
"id": "${jenniferId}"
},
"claimant": {
"id": "${jenniferId}"
},
"firstIntakeDoctor": {
"id": "${doctorId}"
},
"reportedByType": {
"code": "hrrep"
},
"mainContactType": {
"code": "claimant"
}
}
}
},
"method": "patch",
"uri": "/claim/v1/claims/${claimId}"
},
{
"body": {
"data": {
"attributes": {
"mainWorkersCompIncident": true,
"description": "This was an injury",
"generalInjuryType": {
"code": "specific"
},
"detailedInjuryType": {
"code": "07"
},
"bodyParts": [
{
"primaryBodyPart": {
"code": "head"
},
"detailedBodyPart": {
"code": "10"
},
"sideOfBody": {
"code": "left"
}
}
]
}
}
},
"method": "post",
"uri": "/claim/v1/claims/${claimId}/injury-incidents"
},
{
"method": "post",
"uri": "/claim/v1/claims/${claimId}/submit"
}
]
}
GET /admin/v1/icd-codes?pageSize=2
Response
{
"count": 2,
"data": [
{
"attributes": {
"bodySystem": {
"code": "DIG",
"name": "Diseases of the digestive system (K00-K95)"
},
"code": "A00.0",
"description": "Cholera due to Vibrio cholerae 01, biovar cholerae",
"edition": {
"code": "ICD10",
"name": "ICD10"
},
"id": "icd10:A00.0"
},
...
},
{
"attributes": {
"bodySystem": {
"code": "DIG",
"name": "Diseases of the digestive system (K00-K95)"
},
"code": "A00.1",
"description": "Cholera due to Vibrio cholerae 01, biovar eltor",
"edition": {
"code": "ICD10",
"name": "ICD10"
},
"id": "icd10:A00.1"
},
...
}
...
GET /admin/v1/icd-codes/icd10:A00.0
Response
{
"data": {
"attributes": {
"bodySystem": {
"code": "DIG",
"name": "Diseases of the digestive system (K00-K95)"
},
"code": "A00.0",
"description": "Cholera due to Vibrio cholerae 01, biovar cholerae",
"edition": {
"code": "ICD10",
"name": "ICD10"
},
"id": "icd10:A00.0"
},
...
}
}
Command
POST /admin/v1/search/icd-codes?fields=id,bodySystem,description
Request
{
"data": {
"attributes": {
"bodySystem": {
"code": "DIG"
},
"description": "fever"
}
}
}
Response
{
"count": 6,
"data": [
{
"attributes": {
"bodySystem": {
"code": "DIG",
"name": "Diseases of the digestive system (K00-K95)"
},
"description": "Typhoid fever, unspecified",
"id": "icd10:A01.00"
}
},
{
"attributes": {
"bodySystem": {
"code": "DIG",
"name": "Diseases of the digestive system (K00-K95)"
},
"description": "Typhoid fever with other complications",
"id": "icd10:A01.09"
}
},
{
"attributes": {
"bodySystem": {
"code": "DIG",
"name": "Diseases of the digestive system (K00-K95)"
},
"description": "Paratyphoid fever A",
"id": "icd10:A01.1"
}
},
{
"attributes": {
"bodySystem": {
"code": "DIG",
"name": "Diseases of the digestive system (K00-K95)"
},
"description": "Paratyphoid fever B",
"id": "icd10:A01.2"
}
},
{
"attributes": {
"bodySystem": {
"code": "DIG",
"name": "Diseases of the digestive system (K00-K95)"
},
"description": "Paratyphoid fever C",
"id": "icd10:A01.3"
}
},
{
"attributes": {
"bodySystem": {
"code": "DIG",
"name": "Diseases of the digestive system (K00-K95)"
},
"description": "Paratyphoid fever, unspecified",
"id": "icd10:A01.4"
}
}
],
...
}
POST /admin/v1/search/icd-codes?fields=id,availabilityDate,expirationDate,description
Request
{
"data": {
"attributes": {
"activeDate": "2024-09-30",
"description": "fever"
}
}
}
Response
{
"count": 1,
"data": [
{
"attributes": {
"availabilityDate": "2024-09-15T00:00:00.000Z",
"description": "Typhoid fever, unspecified",
"expirationDate": "2024-10-15T00:00:00.000Z
",
"id": "icd10:A01.00"
}
}
],
...
}
Command
POST /admin/v1/icd-codes
Request
{
"data": {
"attributes": {
"bodySystem": {
"code": "INF"
},
"code": "AA77.07",
"description": "Cabin fever"
}
}
}
Response
{
"count": 1,
"data": [
{
"attributes": {
"bodySystem": {
"code": "INF",
"name": "Certain infectious and parasitic diseases (ICD10 A00-B99)"
},
"chronic": false,
"code": "AA77.07",
"description": "Cabin fever",
"edition": {
"code": "ICD10",
"name": "ICD10"
},
"id": "cc:Sh8KF2kE94Jt0ZGE91ejL"
},
...
}
}
}
PATCH /admin/v1/icd-codes/cc:Sh8KF2kE94Jt0ZGE91ejL
Request
{
"data": {
"attributes": {
"chronic": true
}
}
}
Response
{
"count": 1,
"data": [
{
"attributes": {
"bodySystem": {
"code": "INF",
"name": "Certain infectious and parasitic diseases (ICD10 A00-B99)"
},
"chronic": true,
"code": "AA77.07",
The InsuranceSuite Cloud API is a set of RESTful system APIs that expose functionality in ClaimCenter so that caller
applications can request data from or initiate action within ClaimCenter.
The following topics discuss how caller applications can initiate specific ClaimCenter business flows related to
financials. This includes:
• Working with reserves
• Working with checks and check sets (including recurrences and deductible handling)
• Advancing checks through their life cycle (such as marking a check as issued)
• Working with financials in a multicurrency instance of ClaimCenter
Business flows related to FNOL and adjudication are covered in a separate section of this document.
Reserves
This topic provides a high-level overview of reserves, discussing both what they are and how to work with them
through Cloud API.
For a more detailed discussion of the business functionality of reserves, see the Application Guide. For a more detailed
discussion of the configuration of reserves, see the Configuration Guide.
◦ Cost categories are used for financial and business tracking purposes.
Creating reserves
Reserves can be created automatically by business rules based on the nature of a claim. For example, a business rule
might create a reserve of $500 for any auto claim where the only loss is windshield damage.
Reserves can be created through the user interface.
Reserves can also be created through integration points, such as through Cloud API.
Endpoint Description
GET /claims/{claimId}/reserve- Retrieve a list of reserve sets
sets
This is a "potentially large" endpoint. Cloud API returns an error if you attempt to
sort on this endpoint and the sort cannot be accomplished efficiently. For more
information, see “Potentially large endpoints” on page 56.
GET /claims/{claimId}/reserve- Retrieve details of a reserve set
sets/{reserveSetId}
GET /claims/{claimId}/reserves The reserves associated with a given claim
This is a "potentially large" endpoint. Cloud API returns an error if you attempt to
sort on this endpoint and the sort cannot be accomplished efficiently. For more
information, see “Potentially large endpoints” on page 56.
GET /claims/{claimId}/reserves/ The details of a specific reserve
{transactionId}
296 Reserves
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
• The reserve set includes 9 transactions, three of which are shown in the output below.
• The reserve set was approved on 2021-08-08.
• The reserve set was submitted by Andy Applegate.
• The first three transactions in the reserve set are as follows:
◦ A reserve for the first exposure, with a cost type of "Claim cost" and a cost category of "Auto body".
◦ A reserve for the first exposure, with a cost type of "Expense - A&O" and a cost category of "Other".
◦ A reserve for the second exposure, with a cost type of "Claim cost" and a cost category of "Medical".
GET claims/demo_sample:1/reserve-sets/cc:17
{
"data": {
"attributes": {
"approvalDate": "2021-08-08T07:00:00.000Z",
"approvalStatus": {
"code": "approved",
"name": "Approved"
},
"id": "cc:17",
"requestingUser": {
"displayName": "Andy Applegate",
},
"reserves": [
{
"displayName": "(1) 1st Party Vehicle...Claim Cost/Auto body...",
"id": "cc:22",
"type": "Reserve"
},
{
"displayName": "(1) 1st Party Vehicle...Expense - A&O/Other...",
"id": "cc:36",
"type": "Reserve"
},
{
"displayName": "(2) 1st Party Med Pay...Claim Cost/Medical...",
"id": "cc:40",
"type": "Reserve"
},
...
]
},
...
}
GET claims/demo_sample:1/reserves/cc:17
{
"data": {
"attributes": {
"coverage": {
"code": "PACollisionCov",
"name": "Collision"
},
"currency": {
"code": "usd",
"name": "USD"
},
"id": "cc:22",
"lineItems": [
{
"claimAmount": {
"amount": "500.00",
"currency": "usd"
Reserves 297
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
},
"comments": "Repairs",
"id": "cc:56",
"lineCategory": {
"code": "other",
"name": "Other"
},
"reportingAmount": {
"amount": "500.00",
"currency": "usd"
},
"reservingAmount": {
"amount": "500.00",
"currency": "usd"
},
"transactionAmount": {
"amount": "500.00",
"currency": "usd"
}
}
],
"reserveLine": {
"costCategory": {
"code": "body",
"name": "Auto body"
},
"costType": {
"code": "claimcost",
"name": "Claim Cost"
},
"exposure": {
"displayName": "(1) 1st Party Vehicle - Ray Newton",
"id": "demo_sample:10001",
},
"reservingCurrency": {
"code": "usd",
"name": "USD"
}
},
"status": {
"code": "submitted",
"name": "Submitted"
},
"type": {
"code": "Reserve",
"name": "Reserve"
}
},
..
}
Creating reserves
When creating reserves from Cloud API, there is no POST endpoint whose root resource is a reserve line or a reserve
transaction. Reserve lines and reserve transactions are created within the context of a reserve set.
To create a reserve set, use the following endpoint:
• POST /claims/{claimId}/reserve-sets
When you create a reserve set, you must specify the reservesToWrite. This is reserve set which consists of an array
of reserve transactions. For each member of the array, you must specify:
• The reserveLine for the reserve. To identify this, you must specify:
◦ costCategory (a value from the CostCategory typelist)
◦ costType (a value from the CostType typelist)
◦ exposure (This must be specified. It can be explicitly set to null, in which case the reserve line is created at the
claim level. For an example,see “Creating a claim-level reserve” on page 300.)
◦ reservingCurrency
• An array of one or more transaction lineItems, each of which must specify:
◦ A transactionAmount (specified as an amount and a currency)
• The reserve transaction currency
298 Reserves
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Approval status
When a reserve set is submitted, ClaimCenter checks the corresponding user's authority limits.
• If the amount is at or below the user's authority limit, the reserve set is approved. The appropriate amount is added
to the reserve line, and the response object's approvalStatus field is set to approved.
• If the amount is above the user's authority limit, the reserve set requires approval. An approval activity is created
and sent to a user with sufficient approval authority. No amount is added to the reserve line, and the response
object's approvalStatus field is set to unapproved.
A given user can have an authority limit for "claim total reserves", "exposure total reserves", or both. For more
information on authority limits, see the Application Guide.
When the reserve set is submitted through Cloud API, the user whose authority limits are checked is the session user.
For more information on how the session user is determined, see the Cloud API Developer Guide.
Reserves 299
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Command
POST /claims/cc:61/reserve-sets
Request payload
{
"data": {
"attributes": {
"reservesToWrite": [
{
"reserveLine": {
"costCategory": {
"code": "body"
},
"costType": {
"code": "claimcost"
},
"exposure": {
"id": "cc:79"
},
"reservingCurrency": {
"code": "usd"
}
},
"lineItems": [
{
"transactionAmount": {
"amount": "1000.00",
"currency": "usd"
}
}
],
"currency": {
"code": "usd"
}
}
]
}
}
}
POST /claims/cc:61/reserve-sets
Request payload
{
"data": {
"attributes": {
"reservesToWrite": [
{
"reserveLine": {
"costCategory": {
"code": "legal"
},
"costType": {
"code": "dccexpense"
},
"exposure": null,
"reservingCurrency": {
"code": "usd"
300 Reserves
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
}
},
"lineItems": [
{
"transactionAmount": {
"amount": "5000.00",
"currency": "usd"
}
}
],
"currency": {
"code": "usd"
}
}
]
}
}
}
POST /claims/cc:61/reserve-sets
Request payload
{
"data": {
"attributes": {
"reservesToWrite": [
{
"reserveLine": {
"costCategory": {
"code": "body"
},
"costType": {
"code": "claimcost"
},
"exposure": {
"id": "cc:79"
},
"reservingCurrency": {
"code": "usd"
}
},
"lineItems": [
{
"transactionAmount": {
"amount": "250.00",
"currency": "usd"
}
}
],
"currency": {
"code": "usd"
}
}
]
}
Reserves 301
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
}
}
302 Reserves
chapter 23
Creating checks
This topic provides a high-level overview of checks, discussing both what they are and how to work with them through
Cloud API. For a more detailed discussion of the business functionality of checks, see the Application Guide. For a
more detailed discussion of the configuration of checks, see the Configuration Guide.
When issuing money for claims, ClaimCenter makes use of several distinct types of objects. This includes payments,
checks, and check sets.
Payments
Within the context of ClaimCenter, a payment transaction (often referred to simply as a payment) is a monetary amount
that is paid to satisfy a claim.
Every payment transaction is associated with exactly one reserve line from one exposure, though a reserve line can be
associated with multiple payment transactions. For example, suppose that Allen Robertson files a claim because he hit
both his neighbor's car and his neighbor's fence. The claim has an exposure with one reserve line. To satisfy this claim,
ClaimCenter creates two payment transactions associated with the reserve line: one $1200 payment for the damage to
the car and one $600 payment for the damage to the fence.
At the level of a payment, there are no details as to who will be paid or how. For example, from the payments alone,
you cannot say who the payee is, if the payments are made at the same time or a month apart, or if they are made with a
physical check or an electronic transfer.
Checks
A check is a group of one or more payments to be sent to a single recipient. In addition to payment-level information
(such as amount and reserve line), a check includes information about who the payments are made to and how.
Consider the previous example of Allen Robertson's claim. There are two payments: a $1200 payment for the damage
to the car and a $600 payment for the damage to the fence. The payments could be grouped into a single check for
$1800 made payable to the neighbor whose car and fence were damaged, or two separate checks for $1200 and $600
respectively made payable to the auto repair shop and fence contractor. For each check, the check could be issued as a
physical check or as an electronic funds transfer.
The reserves from a reserve line can provide money for one or more checks, and a check's money can come from the
reserves of one or more reserve lines. The following is a list of claim examples showing how the reserves from one or
more reserve lines and be associated with one or more checks.
• Example: Multiple reserves and one check
◦ Description of loss: Ray Newton hit a tree. His car was damaged, and he suffered a broken arm.
◦ Exposures: The claim has two exposures. The first is tied to his collision coverage. The second is tied to his
medical payments coverage. Each exposure has one reserve line.
◦ Payments: One payment for $2000 associated with the collision reserve line. One payment for $1715 associated
with the medical payments reserve line.
◦ Checks: Ray receives a single $3715 check. This check includes both payments.
• Example: One reserve and multiple checks
◦ Description of loss: Ray Newton was involved in an auto collision which involved damage to his vehicle and a
doctor's exam.
◦ Exposures: One exposure tied to his collision coverage. The exposure has one reserve line.
◦ Payments: One payment for $2000 associated with the collision reserve line (for the vehicle damage). One
payment for $500 associated with the collision reserve line (for the medical exam).
◦ Checks: The auto repair shop receives a $2000 check to repair the vehicle damage. The doctor receives a $500
check for the medical exam.
Every check has at least one payee. A payee is a person or organization to whom a check is made payable. Payees can
be either claimants or vendors who provided services for the claim (such as auto repair shops, doctors, or lawyers).
Check sets
Financial transactions require approval. In some cases, the transaction is sufficiently small and does not meet any
special criteria, and therefore the transaction is automatically approved. In other cases, the amount is large enough that
it exceeds the creator's authority limit, or the transaction meets certain criteria specified in transaction approval rules.
In these cases, the transaction must be approved by another user.
For a given claim, when multiple payment transactions are created at the same time, they ought to be approved as a
unit. (Either all transactions are approved or none of them are approved.) To facilitate this behavior, payment
transactions are grouped into check sets. A check set is a set of one or more checks (and their associated payment
transactions) submitted for approval as a unit.
Approval is executed through the use of approval activities. For more information on the business functionality of
approval, see the Application Guide. For more information on activities in Cloud API, see “Activities” on page 353.
When the check set is submitted through Cloud API, the user whose authority limits are checked is the session user.
(For more information on how the session user is determined, see the Cloud API Developer Guide.)
Endpoint Description
GET /claims/{claimId}/check-sets Retrieve a list of check sets
(This endpoint is "potentially large". See below.)
GET /claims/{claimId}/check-sets/{checkSetId} Retrieve details of a check set
GET /claims/{claimId}/checks The checks associated with a given claim
(This endpoint is "potentially large". See below.)
GET /claims/{claimId}/checks/{checkId} The details of a specific check
GET /claims/{claimId}/payments The payment transactions associated with a given claim
(This endpoint is "potentially large". See below.)
GET /claims/{claimId}/payments/{transactionId} The details of a specific payment transaction
Some endpoints are "potentially large". Cloud API returns an error if you attempt to sort on this endpoint and the sort
cannot be accomplished efficiently. For more information, see “Potentially large endpoints” on page 56.
GET claims/demo_sample:1/check-sets/cc:28
{
"data": {
"attributes": {
"approvalDate": "2021-08-11T07:00:00.000Z",
"approvalStatus": {
"code": "approved",
"name": "Approved"
},
"checks": [
{
"displayName": "Check #10436: Ray Newton -- $2,000.00"
...
}
],
"createTime": "2021-08-24T19:00:02.529Z",
"id": "cc:28",
"requestingUser": {
"displayName": "Andy Applegate"
...
}
...
}
}
}
GET claims/demo_sample:1/checks/cc:34
{
"data": {
"attributes": {
"checkNumber": "10436",
"grossAmount": {
"amount": "2000.00",
"currency": "usd"
},
"id": "cc:34",
"issueDate": "2021-08-11T07:00:00.000Z",
"payees": [
{
"contact": {
"displayName": "Ray Newton"
...
},
"id": "cc:41",
"payeeType": {
"code": "claimant",
"name": "Claimant"
}
}
],
"paymentMethod": {
"code": "check",
"name": "Check"
},
"payments": [
{
"displayName": "(1) 1st Party Vehicle - Ray Newton;
Claim Cost/Auto body; Submitted"
},
{
"displayName": "(2) 1st Party Med Pay - Stan Newton;
Claim Cost/Medical; Submitted"
},
{
"displayName": "(2) 1st Party Med Pay - Stan Newton;
Claim Cost/Medical; Submitted"
},
{
"displayName": "(1) 1st Party Vehicle - Ray Newton;
Expense - A&O/Other; Submitted"
},
{
"displayName": "(2) 1st Party Med Pay - Stan Newton;
Expense - A&O/Other; Submitted"
}
],
"status": {
"code": "issued",
"name": "Issued"
}
}
}
}
POSTing checks
Check creation in ClaimCenter
Checks and validation levels
Both claims and exposures have validation levels. A validation level is a designation of how mature the claim or the
exposure is. Every validation level can have a set of validation criteria tied to it. A claim or an exposure cannot reach a
given validation level until all the associated validation criteria have been met.
In most instances of ClaimCenter, the highest validation level is "Ability to pay". This means that the claim or
exposure is at the point where checks can be written.
In order to create a check set, the following must be true:
• The claim's validation must be "Ability to pay".
• Each exposure that owns a reserve line that payment transactions are coming from must also be at "Ability to pay".
For more information on validating claims, see “Validating claims” on page 193. For more information on validating
exposure, see “Validating exposures” on page 250.
You must also specify the paymentMethod. This is a value from the PaymentMethod typelist, such as check or eft.
However, this distinction must be taken into consideration when writing a check set payload. There is no mechanism
for the line items to inherit the payment transaction's currency. Therefore, the currency of the payment transaction and
each line item must be explicitly stated, and they must be the same.
There is a third field that is set to a currency value, reservingCurrency. This must always be specified. In an instance
of ClaimCenter that makes use of multicurrency, this can be set to a currency other than the reserve transaction's
currency. For more information, see “Multicurrency” on page 339.
POST /claims/cc:55/check-sets
{
"data": {
"attributes": {
"primaryCheckToWrite": {
"paymentsToWrite": [
{
"lineItems": [
{
"transactionAmount": {
"amount": "75.50",
"currency": "usd"
}
}
],
"paymentType": {
"code": "final"
},
"reserveLine": {
"costCategory": {
"code": "body"
},
"costType": {
"code": "claimcost"
},
"exposure": {
"id": "cc:58"
},
"reservingCurrency": {
"code": "usd"
}
},
"currency": {
"code": "usd"
}
}
],
"payees": [
{
"contact": {
"id": "cc:613"
},
"payeeType": {
"code": "insured"
}
}
],
"paymentMethod": {
"code": "eft"
}
}
}
}
}
Recurrences
Recurrences in ClaimCenter
A recurrence is a series of one or more checks that ClaimCenter issues periodically. This is a common requirement for
claims involving injuries that require long-term medical treatment, such as an injury that requires weekly physical
therapy. Recurrences are also referred to a recurring check sets.
Recurring checks must be written to the same payees and be for the same amount.
For more information on recurrences, see the Application Guide.
There are additional required fields, but these vary based on how the frequency is specified.
"recurrence": {
"firstDueDate": "2021-01-07",
"monthlyFrequency": 1,
"numChecks": 10,
"recurrenceDate": 7,
"subtype": {
"code": "MonthlyCheckRecurrence"
}
}
For example, the following recurrence could be used to send 7 checks, once every month, on the first Thursday. The
first check will be sent January 7 (the first Thursday in January). The next check will be sent February 4 (the first
Thursday in February), and so on.
"recurrence": {
"firstDueDate": "2021-01-07",
"monthlyFrequency": 1,
"numChecks": 7,
"recurrenceDay": {
"code": "thurs"
},
"recurrenceWeek": {
"code": "first"
},
"subtype": {
"code": "MonthlyCheckRecurrence"
}
}
For example, the following recurrence could be used to send 12 checks, once every week, on Thursdays. The first
check will be sent January 7. The next check will be sent January 14, and so on.
"recurrence": {
"firstDueDate": "2021-01-07",
"numChecks": 12,
"recurrenceDay": {
"code": "thurs"
},
"subtype": {
"code": "WeeklyCheckRecurrence"
},
"weeklyFrequency": 1
}
Deductible handling
ClaimCenter provides functionality to handle deductibles during check creation. This includes keeping track of the
total amount, the amount applied, and the amount remaining to be applied.
For more information on deductible handling, see the Application Guide.
"lineItems": [
{
"transactionAmount": {
"amount": "6000.00",
"currency": "usd"
}
},
{
"transactionAmount": {
"amount": "-2000.00",
"currency": "usd"
},
"lineCategory": {
"code": "deductible"
}
}
]
POST /claim/v1/claims/cc:SzVCozO9dRQI_Ao1dBccV/check-sets
{
"data": {
"attributes": {
"primaryCheckToWrite": {
"paymentsToWrite": [
{
"lineItems": [
{
"transactionAmount": {
"amount": "6000.00",
"currency": "usd"
}
},
{
"transactionAmount": {
"amount": "-2000.00",
"currency": "usd"
},
"lineCategory": {
"code": "deductible"
}
}
],
"paymentType": {
"code": "final"
},
"reserveLine": {
"costCategory": {
"code": "body"
},
"costType": {
"code": "claimcost"
},
"exposure": {
"id": "cc:SFaWbxZwJOCFh_UWbbC_8"
},
"reservingCurrency": {
"code": "usd"
}
},
"currency": {
"code": "usd"
}
}
],
"payees": [
{
"contact": {
"id": "cc:SHLpehV4HdCDJSJhilgCA"
},
"payeeType": {
"code": "insured"
}
}
],
"paymentMethod": {
"code": "eft"
}
}
}
}
}
PATCHing checks
To patch a check, use the following endpoint:
• PATCH /claims/{claimId}/checks/{checkId}
For example, the following payload modifies check cc:601 on claim cc:400 so that the payment method is now
"manual".
PATCH claim/v1/claims/cc:400/checks/cc:601
{
"data": {
"attributes": {
"paymentMethod": {
"code": "manual"
}
}
}
}
Keep in mind that ClaimCenter has business constraints around when and how a check can be modified. For example,
some fields cannot be changed after the check has been submitted to the check processing system.
DELETEing checks
To delete a check, use the following endpoint:
• DELETE /claims/{claimId}/checks/{checkId}
You do not need to provide a body.
For example, the following payload deletes check cc:601 on claim cc:400.
DELETE claim/v1/claims/cc:400/checks/cc:601
Note that the DELETE endpoint is at the check level, not the check set level. If you want to delete an entire check set,
you must delete each check in the check set individually.
Also keep in mind that ClaimCenter has business constraints around when and how a check can be deleted. For
example, checks cannot be deleted once they have been escalated.
This topic discusses how you can manage the check life cycle and the payment life cycle using Cloud API.
a. If the check does not exceed any of the user's authority limits, the check moves to "Awaiting submission".
b. If the check does exceed any of the user's authority limits, the check moves to "Pending Approval".
ClaimCenter creates an approval activity and assigns it to the appropriate approving user.
3. If a check is "Pending approval", the approving user can take the following actions.
a. They could approve the activity, which causes the check to advance to "Awaiting submission".
b. They could reject the activity, which causes the check to move to "Rejected".
4. Once a check reaches "Awaiting submission" it remains in this state until its due date. Once the due date is
reached, the Financial Escalation batch process submits the check to the downstream system and advances the
check's status to "Requesting".
You can view the status of a given check through the ClaimCenter user interface. Navigate to the claim and then, in the
left-hand side bar, click Financials > Checks. This shows a list of checks for the claim and the status of each check.
When using these endpoints, you do not need to provide a request body.
For example, suppose check cc:601 on claim cc:400 has a status of "Requesting". The following payload advances the
check to the "Requested" status.
POST claim/v1/claims/cc:400/checks/cc:601/acknowledge-submission
Then, the following payload advances the check to the "Issued" status.
POST claim/v1/claims/cc:400/checks/cc:601/mark-issued
Finally, the following payload advances the check to the "Cleared" status.
POST claim/v1/claims/cc:400/checks/cc:601/mark-cleared
You can also view the status of a given check through the ClaimCenter user interface. Navigate to the claim and then,
in the left-hand side bar, click Financials > Checks. This shows a list of checks for the claim and the status of each
check.
When acknowledging a transaction, there is no additional required information. The request can have no body.
The following acknowledges payment transaction cc:88 for claim cc:61.
POST /claim/v1/claims/cc:61/payments/cc:88/acknowledge-submission
Recoveries and recovery reserves refer to transactions for money received during the claim’s lifecycle. Most
ClaimCenter financial transactions track money that is sent during the claim's lifecycle. However, recoveries and
recovery reserves are transactions that track money received during the claim's lifecycle:
• Recovery reserves are transactions that account for the money expected to be received during a claim’s lifecycle.
• Recoveries are the transaction for the money received.
Recovery reserves estimate the amount of money received from future recoveries. Recovery reserves function similarly
to reserves but add to the ledger how much money is estimated to be received from a recovery instead of how much
money is estimated to be paid out with a check.
Recoveries include the following examples:
• Subrogation: The money received by an insurer from the at-fault driver’s insurance provider to pay for vehicle
damages.
• Deductibles: The money received from an insured contact that is paid to the insurer per the terms of the coverage
before the coverage goes into effect.
• Salvage: The money received from a destroyed vehicle from which the insurer can get back some of its cost by
selling the vehicle for scrap.
Endpoint Description
GET /claims/{claimId}/recovery-reserve-sets Retrieve a list of recovery reserve sets
(This endpoint is "potentially large". See below.)
GET /claims/{claimId}/recovery-reserve-sets/{recoveryReserveSetId} Retrieve details of a recovery reserve set
GET /claims/{claimId}/recovery-reserves Retrieve a list of recovery reserves
(This endpoint is "potentially large". See below.)
GET /claims/{claimId}/recovery-reserves/{transactionId} Retrieve the details from a specific recovery reserve
GET /claims/{claimId}/recovery-sets Retrieve a list of recovery sets
(This endpoint is "potentially large". See below.)
GET /claims/{claimId}/recovery-sets/{recoverySetId} Retrieve the details for a specific recovery set
GET /claims/{claimId}/recoveries Retrieve the recovery transactions
(This endpoint is "potentially large". See below.)
GET /claims/{claimId}/recoveries/{transactionId} Retrieve the details of a specific recovery
Some endpoints are "potentially large". Cloud API returns an error if you attempt to sort on this endpoint and the sort
cannot be accomplished efficiently. For more information, see “Potentially large endpoints” on page 56.
{
"data": {
"attributes": {
"comments": "Automatically created due to recovery for $100.00 on (1) 1st Party Vehicle - Karen Egertson; Claim
Cost/Auto body; USD; Subrogation",
"coverage": {
"code": "PACollisionCov",
"name": "Collision"
},
"createTime": "2021-11-19T18:29:08.386Z",
"currency": {
"code": "usd",
"name": "USD"
},
"id": "cc:901",
"lineItems": [
{
"claimAmount": {
"amount": "100.00",
"currency": "usd"
},
"comments": "Automatically created due to recovery for $100.00 on (1) 1st Party Vehicle - Karen
Egertson; Claim Cost/Auto body; USD; Subrogation",
"id": "cc:FJ2",
"reportingAmount": {
"amount": "100.00",
"currency": "usd"
},
"reservingAmount": {
"amount": "100.00",
"currency": "usd"
},
"transactionAmount": {
"amount": "100.00",
"currency": "usd"
}
}
],
"reserveLine": {
"costCategory": {
"code": "body",
"name": "Auto body"
},
"costType": {
"code": "claimcost",
"name": "Claim Cost"
},
"exposure": {
"displayName": "(1) 1st Party Vehicle - Karen Egertson",
"id": "cc:PV6",
"type": "Exposure",
"uri": "/claim/v1/claims/cc:901/exposures/cc:PV6 "
},
"recoveryCategory": {
"code": "subro",
"name": "Subrogation"
},
"reservingCurrency": {
"code": "usd",
"name": "USD"
}
},
"status": {
"code": "submitting",
"name": "Submitting"
},
"subtype": {
"code": "RecoveryReserve",
"name": "RecoveryReserve"
}
}
}
}
• POST /claims/{claimId}/recovery-reserve-sets
Prior to creating the recovery reserve set, you need the following information:
• Cost type
• Cost category
• Currency
{
"data": {
"attributes": {
"recoveryReservesToWrite": [
{
"reserveLine": {
"costCategory": {
"code": "body"
},
"costType": {
"code": "claimCost"
},
"exposure": {
"id": "cc:SB1"
},
"recoveryCategory": {
"code": "salvage"
},
"reservingCurrency": {
"code": "usd"
}
},
"lineItems": [
{
"transactionAmount": {
"amount": "5000.00",
"currency": "usd"
}
}
],
"currency": {
"code": "usd"
}
}
]
}
}
}
Creating a recovery
When creating recoveries from Cloud API, there is no POST endpoint whose root resource is a recovery. Recoveries
are created in the context of a recovery set.
When you create a recovery set, you must specify the recoveriesToWrite. At a minimum, it must consist of the
following items:
• The reserveLine that specifies where the money is coming from. To identify this, you must specify:
◦ costCategory (a value from the CostCategory typelist)
◦ costType (a value from the CostType typelist)
◦ The recovery category (a value from the RecoveryCategory typelist)
◦ The id of the parent exposure
◦ The reservingCurrency
• An array of one or more transaction lineItems, each of which must specify:
◦ The transactionAmount, including the amount and currency
◦ Currency (a value from the currency typelist)
If you want your recovery to reference a recovery reserve, and have its transaction amount go toward the total of the
expected recovery reserve, you must duplicate the following information from the recovery reserve:
{
"data": {
"attributes": {
"recoveriesToWrite": [
{
"reserveLine": {
"costCategory": {
"code": "body"
},
"costType": {
"code": "claimCost"
},
"exposure": {
"id": " cc:SB1"
},
"recoveryCategory": {
"code": "salvage"
},
"reservingCurrency": {
"code": "usd"
}
},
"lineItems": [
{
"transactionAmount": {
"amount": "3000.00",
"currency": "usd"
}
}
],
"currency": {
"code": "usd"
}
}
]
}
}
}
Financial calculations
Cloud API supports the ability to retrieve financial calculations for a claim. This topic describes how to use the
financial calculations endpoints.
Every transaction has four additional values that identify its associated reserve line: CostType, CostCategory,
ReservingCurrency, and Exposure. The first three must be non-null. The fourth one is either non-null (when the
transaction is associated with an exposure), or null (when the transaction is claim-level).
Before any payments are made, the amount of money in a given reserve line is the sum of the appropriate transactions
associated with that reserve line. For example, suppose a claim has the following reserve transactions:
For example, the following Gosu expression returns the amount of open reserves for claim thisClaim (expressed in
the claim's currency).
[Link]()
.withClaim(thisClaim)
.Amount
For more information on using these classes directly in ClaimCenter, see the Configuration Guide.
GET /claim/v1/claims/demo_sample:1/financial-calculations?fields=name
Response
{
"count": 16,
"data": [
{
"attributes": {
"name": "PendingApprovalErodingPayments"
}
},
{
"attributes": {
"name": "PendingApprovalNonErodingPayments"
}
},
{
"attributes": {
"name": "PendingApprovalPayments"
}
},
...
The base configuration of Cloud API supports the following financial expressions:
• AvailableReserves
• FuturePayments
• GrossTotalIncurred
• OpenRecoveryReserves
• OpenReserves
• PendingApprovalErodingPayments
• PendingApprovalNonErodingPayments
• PendingApprovalPayments
• PendingApprovalReserves
• RemainingReserves
• TotalIncurredNetRecoveries
• TotalIncurredNetRecoveryReserves
• TotalPayments
• TotalRecoveries
• TotalRecoveryReserves
• TotalReserves
You can configure Cloud API to expose additional financial expressions. This includes expressions in the base
configuration of ClaimCenter that are not exposed in the base configuration of Cloud API, as well as custom
expressions. For more information, see the Cloud API Developer Guide.
There is also a GET /claim/v1/claims/{claimId}/financial-calculations/{expression} endpoint. This
endpoint returns only the name of the expression. It must exist for technical reasons, but there is usually no practical
reason for a caller application to use it.
The response also includes the result of the calculation in the reserve currency (reservingAmount) if the expression is
related to reserves and the request filters out all but one currency.
Additional fields might be included if the response was filtered. For more information, see “Calculations that filter
transactions” on page 330.
POST /claim/v1/claims/cc:101/financial-calculations/AvailableReserves/get-amount
Request
Response
{
"data": {
"attributes": {
"claimAmount": {
"amount": "3250.00",
"currency": "usd"
},
"name": "AvailableReserves",
"reportingAmount": {
"amount": "3250.00",
"currency": "usd"
}
},
...
The request was unfiltered. Therefore, all three transactions were included in the calculation.
POST /claim/v1/claims/cc:101/financial-calculations/AvailableReserves/get-amount
Request body
{
"data": {
"attributes": {
"costType": {
"code": "claimcost"
}
}
}
}
Response
{
"data": {
"attributes": {
"claimAmount": {
"amount": "2750.00",
"currency": "usd"
},
"name": "AvailableReserves",
"reportingAmount": {
"amount": "2750.00",
"currency": "usd"
}
},
...
This request filtered out all transactions except for those whose costType was claimcost. This included the first
($2500) and third ($250), but not the second ($500). Thus, the amount is $2750.
For examples of how to use each option, see “Filtering transaction examples” on page 332.
Command
POST /claim/v1/claims/cc:202/financial-calculations/AvailableReserves/get-amount
Request body
{
"data": {
"attributes": {
"claimLevel": true
}
}
}
Response
{
"data": {
"attributes": {
"claimAmount": {
"amount": "400.00",
"currency": "usd"
},
"claimLevel": true,
"name": "AvailableReserves",
"reportingAmount": {
"amount": "400.00",
"currency": "usd"
}
},
...
Command
POST /claim/v1/claims/cc:202/financial-calculations/AvailableReserves/get-amount
Request body
{
"data": {
"attributes": {
"exposure": {
"id": "cc:1"
}
}
}
}
Response
{
"data": {
"attributes": {
"claimAmount": {
"amount": "3000.00",
"currency": "usd"
},
"exposure": {
"displayName": "(1) 1st Party Vehicle - Ray Newton",
"id": "cc:1",
"type": "Exposure",
"uri": "/claim/v1/claims/cc:202/exposures/cc:1"
},
"name": "AvailableReserves",
"reportingAmount": {
"amount": "3000.00",
"currency": "usd"
}
},
Command
POST /claim/v1/claims/cc:202/financial-calculations/AvailableReserves/get-amount
Request body
{
"data": {
"attributes": {
"costType": {
"code": "ClaimCost"
}
}
}
}
Response
{
"data": {
"attributes": {
"claimAmount": {
"amount": "3150.00",
"currency": "usd"
},
"costType": {
"code": "claimcost",
"name": "Claim Cost"
},
"name": "AvailableReserves",
"reportingAmount": {
"amount": "3150.00",
"currency": "usd"
}
},
Command
POST /claim/v1/claims/cc:202/financial-calculations/AvailableReserves/get-amount
Request body
{
"data": {
"attributes": {
"costCategory": {
"code": "body"
}
}
}
}
Response
{
"data": {
"attributes": {
"claimAmount": {
"amount": "2500.00",
"currency": "usd"
},
"costCategory": {
"code": "body",
"name": "Auto body"
},
"name": "AvailableReserves",
"reportingAmount": {
"amount": "2500.00",
"currency": "usd"
}
},
Command
POST /claim/v1/claims/cc:303/financial-calculations/AvailableReserves/get-amount
Request body
{
"data": {
"attributes": {
"reservingCurrency": {
"code": "USD"
}
}
}
}
Response
{
"data": {
"attributes": {
"claimAmount": {
"amount": "650.00",
"currency": "usd"
},
"name": "AvailableReserves",
"reportingAmount": {
"amount": "650.00",
"currency": "usd"
},
"reservingAmount": {
"amount": "650.00",
"currency": "usd"
},
"reservingCurrency": {
"code": "usd",
"name": "USD"
}
},
Command
Note that unlike the other examples, which used the AvailableReserves expression, this example is using the
OpenRecoveryReserves expression.
POST /claim/v1/claims/cc:303/financial-calculations/OpenRecoveryReserves/get-amount
Request body
{
"data": {
"attributes": {
"recoveryCategory": {
"code" : "salvage"
}
}
}
}
Response
{
"data": {
"attributes": {
"claimAmount": {
"amount": "1200.00",
"currency": "usd"
},
"name": "OpenRecoveryReserves",
"recoveryCategory": {
"code": "salvage",
"name": "Salvage"
},
"reportingAmount": {
"amount": "1200.00",
"currency": "usd"
}
},
Command
POST /claim/v1/claims/cc:202/financial-calculations/AvailableReserves/get-amount
Request body
{
"data": {
"attributes": {
"exposure": {
"id": "cc:1"
},
"costType": {
"code": "claimcost"
}
}
}
}
Response
{
"data": {
"attributes": {
"claimAmount": {
"amount": "2500.00",
"currency": "usd"
},
"costType": {
"code": "claimcost",
"name": "Claim Cost"
},
"exposure": {
"displayName": "(1) 1st Party Vehicle - Ray Newton",
"id": "cc:1",
"type": "Exposure",
"uri": "/claim/v1/claims/cc:202/exposures/cc:1"
},
"name": "AvailableReserves",
"reportingAmount": {
"amount": "2500.00",
"currency": "usd"
}
},
◦ An insured or a producer can see total claimcost payments for the claim without further restrictions.
◦ A claimant who is not an insured can see total claimcost payments only for the exposures where they are the
claimant.
• External users using any other resource access strategy (such as vendors) cannot access any financial calculations.
Multicurrency
This topic describes how to work with financial objects for an instance of ClaimCenter where multicurrency is enabled.
Multicurrency overview
Multicurrency in ClaimCenter
By default, all ClaimCenter financial transactions are calculated and displayed in a single currency. You can configure
ClaimCenter to make use of multiple currencies. This functionality is often referred to as multicurrency.
When multicurrency is enabled, a claim can make use of multiple currencies at different levels.
• Every claim has a claim currency. This is the base currency for the claim.
• Every reserve has a reserving currency, which could be set to a currency different from the claim currency.
• Every reserve and payment has a transaction currency. This could be set to a currency different from either the
claim currency, the reserving currency, or both.
There is also a default currency for each instance of ClaimCenter. This is the currency that objects default to when the
object is created through the user interface. It is also referred to as the reporting currency.
In order to convert between different currencies, ClaimCenter stores a set of exchange rates. When a transaction
requires currency conversion, the ClaimCenter default behavior is to use whichever stored exchange rate has been
marked as the active rate. However, for a given transaction, you can specify a custom exchange rate.
For more information on multicurrency business functionality, see the Application Guide. For more information on
multicurrency configuration, see the Configuration Guide.
GET /claims/cc:SHRyrnPstWtq7HZ3nxLCC/reserves/cc:SojI8VceTmdlXU6k1pqOB
{
"data": {
"attributes": {
"currency": {
"code": "gbp",
"name": "GBP"
},
"id": "cc:SojI8VceTmdlXU6k1pqOB",
"lineItems": [
{
"claimAmount": {
"amount": "1920.82",
"currency": "usd"
},
"id": "cc:SyLnqtJEkcI4X4WaFXbgP",
"reportingAmount": {
"amount": "1920.82",
"currency": "usd"
},
"reservingAmount": {
"amount": "1000.00",
340 Multicurrency
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"currency": "gbp"
},
"transactionAmount": {
"amount": "1000.00",
"currency": "gbp"
}
}
],
"reserveLine": {
"costCategory": {
"code": "body",
"name": "Auto body"
},
"costType": {
"code": "claimcost",
"name": "Claim Cost"
},
"exposure": {
"displayName": "(1) 1st Party Vehicle - Allen Robertson",
"id": "cc:SfXS3Pey0Al29PI13KC5C",
},
"reservingCurrency": {
"code": "gbp",
"name": "GBP"
}
}
}
}
}
There is also a currency value specified in the [Link] field. This field identifies the
currency of the associated reserve line. A reserve line is a category that can be applied to a financial transactions. For a
given exposure, each reserve line is uniquely identified by its cost type, cost category, and currency.
Multicurrency checks
Currency information is part of the default response for the GET /checks endpoint, whether or not multicurrency has
been enabled.
The following is a snippet of the response payload for a GET /checks for a multicurrency check. Currency
information appears in bold. Note the following:
• The default currency for this instance of ClaimCenter is US dollars (usd).
◦ This is specified in the [Link] field.
• The reserve currency is British pounds (gbp).
◦ The reserving currency is British pounds (gbp). This is indicated in the display names of the payments. To see
the actual currency code, you would need to GET the individual payment and inspect its reserve line.
• The check currency is Euros (eur).
◦ This is specified in the [Link] field.
GET /claims/cc:SHRyrnPstWtq7HZ3nxLCC/checks/cc:SqK_OuzG48empV3wtydTH
{
"data": {
"attributes": {
"grossAmount": {
"amount": "20.00",
"currency": "eur"
},
"id": "cc:SqK_OuzG48empV3wtydTH",
"paymentMethod": {
"code": "check",
"name": "Check"
},
"payments": [
{
"displayName": "(1) 1st Party Vehicle - Allen Robertson;
Claim Cost/Auto body; GBP; Awaiting submission",
"id": "cc:SXGn6K7Zeidw8MAkv2sGx",
"type": "Payment",
}
],
"reportableAmount": {
"amount": "20.00",
"currency": "eur"
}
Multicurrency 341
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
}
}
}
• When set to true, the rate to be used is a "market rate". It is fetched automatically.
• When set to false, the rate is a "custom rate". It must be stated explicitly.
The ExchangeRateInUse data model
For ClaimCenter releases 2024.11 (Las Leñas) and after, ClaimCenter has two data models for storing exchange rates.
ClaimCenter continues to have the ExchangeRate data model, and this is used to manage exchange rates created before
Las Leñas. But there is also a second data model, the ExchangeRateInUse data model.
The ExchangeRateInUse data model includes a number of tables whose name ends in "ExchangeRateInUse", such as
ClaimToReportingExchangeRateInUse. All of the entities delegate to the ExchangeRateInUseDelegate delegate,
which implements the FXRate interface. Exchange rates stored in these entities are a part of the Claim graph.
The type of rate is specified in the ExchangeRateInUseDelegate delegate and therefore is part of every entity in the
data model. It is specified by a Market field which is a typekey to the FXRateMarket typelist. In the base configuration,
this typefield includes three typecodes: market, corporate, and manual.
For information on how to configure which data model ClaimCenter uses for newly created exchange rates, refer to the
Configuration Guide.
Cloud API compatibility with exchange rate data models
To support both approaches to storing exchange rate data, as of 2024.11 (Las Leñas), Cloud API for ClaimCenter has
two schemas for exchange rates:
• TransactionExchangeRate, which captures exchange rate type information for exchange rates stored in the
ExchangeRate data model.
• ExchangeRateInUse, which captures exchange rate type information for exchange rates stored in the
ExchangeRateInUse data model.
Both schemas have a rate field to identify the rate and a market field to identify the rate type.
• In the TransactionExchangeRate schema, the market field is a Boolean.
• In the ExchangeRateInUse schema, the market field is a typekey field whose values are set to typecodes from the
FXRateMarket typelist
Both schemas are referenced by the Transaction schema. There are three pairs of fields. The fields start with the same
name, but the fields that use the ExchangeRateInUse schema end in "InUse".
342 Multicurrency
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Command
POST /claims/cc:61/reserve-sets
Request
{
"data": {
"attributes": {
"reservesToWrite": [
{
"claimToReportingExchangeRate": {
"market": true,
"rate": "1.2"
},
"reserveLine": {
"costCategory": {
"code": "body"
},
"costType": {
"code": "claimcost"
},
"exposure": {
"id": "cc:79"
},
"reservingCurrency": {
"code": "usd"
},
"transToClaimExchangeRate": {
"market": true,
"rate": "1.2"
},
"transToReservingExchangeRate": {
Multicurrency 343
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"market": true,
"rate": "1.2"
}
},
"lineItems": [
{
"transactionAmount": {
"amount": "1000.00",
"currency": "usd"
}
}
],
"currency": {
"code": "usd"
}
}
]
}
}
}
The following request payload is an example of creating a transaction while UseDepricatedExchangeRates is set to
false. The exchange rate information is in bold.
Command
POST /claims/cc:61/reserve-sets
Request
{
"data": {
"attributes": {
"reservesToWrite": [
{
"claimToReportingExchangeRateInUse": {
"market": {
"code": "market"
},
"rate": "1.2"
},
"reserveLine": {
"costCategory": {
"code": "body"
},
"costType": {
"code": "claimcost"
},
"exposure": {
"id": "cc:79"
},
"reservingCurrency": {
"code": "usd"
},
"transToClaimExchangeRateInUse": {
"market": {
"code": "market"
},
"rate": "1.2"
},
"transToReservingExchangeRateInUse": {
"market": {
"code": "market"
},
"rate": "1.2"
}
},
"lineItems": [
{
"transactionAmount": {
"amount": "1000.00",
"currency": "usd"
}
}
],
"currency": {
"code": "usd"
}
}
]
}
}
}
344 Multicurrency
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
POST [Link]
{
"data": {
"attributes": {
"reservesToWrite": [
{
"reserveLine": {
"costCategory": {
"code": "body"
},
"costType": {
"code": "claimcost"
},
"exposure": {
"id": "cc:SfXS3Pey0Al29PI13KC5C"
},
"reservingCurrency": {
"code": "eur"
}
},
"lineItems": [
{
"transactionAmount": {
"amount": "100.00",
"currency": "jpy"
}
}
],
"currency": {
"code": "jpy"
}
}
]
}
}
}
Multicurrency 345
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
POST [Link]
{
"data": {
"attributes": {
"reservesToWrite": [
{
"transToReservingExchangeRate": {
"description": "Custom exchange rate",
"market": false,
"rate": "4.0"
},
"reserveLine": {
"costCategory": {
"code": "body"
},
"costType": {
"code": "claimcost"
},
"exposure": {
"id": "cc:SfXS3Pey0Al29PI13KC5C"
},
"reservingCurrency": {
"code": "usd"
}
},
"lineItems": [
{
"transactionAmount": {
"amount": "300.00",
"currency": "cad"
}
}
],
"currency": {
"code": "cad"
}
}
]
}
}
}
POST [Link]
{
"data": {
"attributes": {
"primaryCheckToWrite": {
"paymentsToWrite": [
{
"lineItems": [
{
"transactionAmount": {
"amount": "75.00",
"currency": "cad"
}
}
],
"paymentType": {
"code": "final"
},
"reserveLine": {
"costCategory": {
"code": "body"
},
"costType": {
346 Multicurrency
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"code": "claimcost"
},
"exposure": {
"id": "cc:SfXS3Pey0Al29PI13KC5C"
},
"reservingCurrency": {
"code": "gbp"
}
},
"currency": {
"code": "cad"
}
}
],
"payees": [
{
"contact": {
"id": "cc:Sr-RcOtnyAd2_TsoU4Szy"
},
"payeeType": {
"code": "insured"
}
}
],
"paymentMethod": {
"code": "eft"
}
}
}
}
}
POST [Link]
{
"data": {
"attributes": {
"primaryCheckToWrite": {
"paymentsToWrite": [
{
"lineItems": [
{
"transactionAmount": {
"amount": "50.00",
"currency": "cad"
}
}
],
"paymentType": {
"code": "partial"
},
"reserveLine": {
"costCategory": {
"code": "body"
},
"costType": {
"code": "claimcost"
},
Multicurrency 347
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"exposure": {
"id": "cc:SfXS3Pey0Al29PI13KC5C"
},
"reservingCurrency": {
"code": "gbp"
}
},
"currency": {
"code": "cad"
},
"transToReservingExchangeRate": {
"description": "Custom exchange rate",
"market": false,
"rate": "0.5"
}
}
],
"payees": [
{
"contact": {
"id": "cc:Sr-RcOtnyAd2_TsoU4Szy"
},
"payeeType": {
"code": "insured"
}
}
],
"paymentMethod": {
"code": "eft"
}
}
}
}
}
348 Multicurrency
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
◦ reportingAmount is set to the transactionAmount if the reporting currency is the same as the transaction
currency. Otherwise, is transactionAmount is set to the converted value.
• The reservingAmount field, if specified, cannot have the same currency as the transaction currency.
◦ claimAmount is set to the reservingAmount if the claim currency is the same as the reserving currency.
◦ reportingAmount is set to reservingAmount if the reporting currency is the same as the reserving currency.
• The claimAmount field, if specified, cannot have the same currency as the transaction currency or claim currency.
◦ reportingAmount is set to claimAmount if the reporting currency is the same as the claim currency.
• The reportingAmount, if specified, cannot have the same currency as the transaction currency, reserving currency,
or claim currency.
WARNING: When PATCHing a multicurrency transaction, and specifying the transactionAmount, the other
three amount properties will be recalculated and overwritten with the transactionAmount exchange rate
calculations. This occurs even when the amount properties were previously specified.
As an example, consider that you encounter an edge case where the standard multicurrency calculations does not
satisfy the deductible amount. The exchange rate at the time of the check-set creation calculates 250.02 GBP to 499.99
USD. Thus, the exposure for this claim cannot be closed.
Note: When encountering the edge case where exchange rates calculate a value that does not satisfy the
deductible, and if the claim is a different currency than the transactionAmount, you must specify the
claimAmount on the deductible.
"primaryCheckToWrite": {
"paymentsToWrite": [
{
"transToReservingExchangeRate": {
"description": "Custom exchange rate",
"market": false,
"rate": "1.9998"
},
"lineItems": [
{
"transactionAmount": {
"amount": "600",
"currency": "gbp"
},
"transactionAmount": {
"amount":"-250.02",
"currency": "gbp"
},
"claimAmount": {
"amount": "-500.00"
"currency": "USD"
},
"lineCategory": {
"code": "deductible"
}
}
],
...
POST [Link]
{
"data": {
"attributes": {
Multicurrency 349
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"reservesToWrite": [
{
"reserveLine": {
"costCategory": {
"code": "body"
},
"costType": {
"code": "claimcost"
},
"exposure": {
"id": "cc:SfXS3Pey0Al29PI13KC5C"
},
"reservingCurrency": {
"code": "eur"
}
},
"lineItems": [
{
"transactionAmount": {
"amount": "100.00",
"currency": "jpy"
},
"reservingAmount": {
"amount":"1.01",
"currency": "eur"
}
}
],
"currency": {
"code": "jpy"
}
}
]
}
}
}
350 Multicurrency
part 5
The InsuranceSuite Cloud API is a set of RESTful system APIs that expose functionality in ClaimCenter so that caller
applications can request data from or initiate action within ClaimCenter.
The following topics discuss how caller applications can initiate business flows related to the Common API and the
Admin API. This includes:
• The Common API
◦ “Activities”
◦ “Documents”
◦ “Notes”
◦ “History events” on page 401
◦ “Typelist metadata” on page 403
• The Admin API
◦ “Users and groups”
◦ “Security zones”
◦ “Geographic zones” on page 399
◦ “Batch processes”
◦ “Database consistency checks”
◦ “Business entity schemas”
◦ “Testing”
Activities
An activity is an action related to the processing of a claim that a user must attend to or be aware of. Activities are
ultimately assigned to a group and a user in that group. This user has the primary responsibility for closing the activity.
Activities are typically created by users or by automatic ClaimCenter processes, and they are typically closed by users.
But, activities can be both created and closed by Cloud API calls. Additionally, Cloud API can be used to perform
other actions with activities, such as assigning them, approving them, skipping them, and creating notes on them.
For a complete description of the functionality of activities in ClaimCenter, see the Application Guide.
Note: Activities exist in all core InsuranceSuite applications. To ensure that activities behave in a common way
across all applications, some activity endpoints, such as the endpoints for querying for or assigning activities,
are declared in the Common API. Activities can also belong to claims, which do not exist in all InsuranceSuite
applications. This means that other activity endpoints, such as the endpoint for creating an activity for a claim,
are declared in the Claim API. This topic always identifies the API in which each endpoint is declared.
Note: ContactManager for Cloud API includes the Common API and its endpoints for working with activities.
However, in the base configuration of the ContactManager application, there is no user interface or business
rule support for activities. The activities endpoints have been included in Cloud API for ContactManager
primarily for the sake of consistency, and also to support any insurer who wishes to configure ContactManager
so that it can work with activities.
Endpoint Returns
/common/v1/activities By default, all activities the caller can access based on the relevant Access Control Lists (ACLs). (For
more information on the default behavior, see the note at the end of this table.) This endpoint also
has special assignedUser and assignedUsername filters. For more information, see “The
assignedUser filters” on page 54.
/common/v1/activities/ The activity with the given ID.
{activityId}
Activities 353
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Endpoint Returns
/claim/v1/claims/ All activities associated with the given claim. This endpoint also has special assignedUser and
{claimId}/activities assignedUsername filters. For more information, see “The assignedUser filters” on page 54.
Note: By default, internal users who are calling the /common/v1/activities endpoint can view all activities
they have permission to access according to their Access Control Lists. This behavior is controlled by the
GiveInternalUsersFullPermissionsInCommonActivitiesApi application configuration parameter, which is
set to true by default. When it is set to false, internal users can view only activities that are explicitly assigned
to them.
Note that the endpoints to retrieve activities exist in different APIs. To get all activities for a claim, you use an endpoint
in the Claim API. But to get information about all activities (regardless of parent), or to get information about a
specific activity, you use endpoints in the Common API.
For example, the following query retrieves the IDs and subjects of all activities for account demo_sample:1. This
endpoint is in the Claim API.
Request
GET claim/v1/claims/demo_sample:1/activities?fields=id,subject
Response
{
"count": 14,
"data": [
{
"attributes": {
"id": "cc:23218",
"subject": "Contact insured"
}
},
{
"attributes": {
"id": "cc:40404",
"subject": "Determine fault rating"
}
},
...
The following query retrieves activity cc:40404 in detail. This endpoint is in the Common API.
Request
GET /common/v1/activities/pc:40404
Response
{
"data": {
"attributes": {
"activityPattern": "general_reminder",
"activityType": {
"code": "general",
"name": "General"
},
"assignedGroup": {
"displayName": "Auto1 - TeamA",
"id": "demo_sample:31"
},
"assignedUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1",
"type": "User",
"uri": "/admin/v1/users/demo_sample:1"
},
"assignmentStatus": {
"code": "assigned",
"name": "Assigned"
},
"createTime": "2023-11-18T02:00:20.481Z",
"dueDate": "2023-11-07T00:00:00.000Z",
"escalated": false,
"externallyOwned": false,
354 Activities
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"id": "cc:40404",
"importance": {
"code": "notOnCalendar",
"name": "Not On Calendar"
},
"mandatory": false,
"priority": {
"code": "normal",
"name": "Normal"
},
"recurring": false,
"relatedTo": {
"displayName": "Ray Newton",
"id": "cc:SW8RXsrWJZiKa7jfCEAYr",
"type": "ClaimContact",
"uri": "/claim/v1/claims/demo_sample:1/contacts/cc:SW8RXsrWJZiKa7jfCEAYr"
},
"status": {
"code": "open",
"name": "Open"
},
"subject": "Determine fault rating"
},
...
Creating activities
Activities must be created from an existing claim using the following endpoint:
• POST claim/v1/claims/{claimId}/activities
Activity patterns
Activities are created from activity patterns. An activity pattern is a set of default values for fields in the activity (such
as description, subject, and priority). Every activity pattern has a code, such as contact_insured or legal_review.
When creating an activity through Cloud API, the only required field is activityPattern, which must specify the
activity pattern's code. Because the activity pattern typically contains all the necessary default values, the activity
pattern is often the only field the caller application needs to specify.
You can retrieve a list of activity patterns using the following:
• GET /claim/v1/claims/{claimId}/activity-patterns
You can optionally specify values for the following fields, each of which overrides the value coming from the activity
pattern:
Activities 355
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
POST /claim/v1/claims/cc:102/activities
Request
{
"data": {
"attributes": {
"activityPattern": "contact_insured"
}
}
}
The following is an example of creating a legal_review activity for claim cc:102. In this case, two activity pattern
values are overridden: the activity is mandatory (it cannot be skipped) and the priority is urgent.
Command
POST /claim/v1/claims/cc:102/activities
Request
{
"data": {
"attributes": {
"activityPattern": "legal_review",
"mandatory": true,
"priority": {
"code": "urgent"
}
}
}
}
Assigning activities
Ultimately, every activity is assigned to a group and a user in that group. This user is primarily responsible for closing
the activity.
356 Activities
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Activities can be temporarily assigned to queues. A queue is a repository belonging to a group which contains activities
assigned to the group but not yet to any user in that group. Users in the group can then take ownership of activities
manually as desired.
When you create an activity through Cloud API, ClaimCenter automatically executes the activity assignment rules to
initially assign the activity to a group and user. You can use the /{activityId}/assign endpoint to reassign the
activity as needed.
Assignment options
An activity can be assigned through Cloud API in the following ways:
• To a specific group and user in that group
• To a specific group only (and then ClaimCenter uses assignment rules to select a user in that group)
• To a specific group and queue
• To the claim owner
• By re-running the activity assignment rules
◦ This can be appropriate if you have modified the activity since the last time assignment rules were run and the
modification might affect who the activity would be assigned to.
The root resource for the /{activityId}/assign endpoint is Assignee. This resource specifies assignment criteria.
The Assignee schema has the following fields:
Assignment examples
When assigning activities to users, the user must be active and must have the "own activity" system permission.
POST /common/v1/activities/xc:1/assign
Request body
{
"data": {
"attributes": {
"groupId": "demo_sample:31",
"userId": "demo_sample:1"
}
}
}
The following payload assigns activity xc:1 to group demo-sample:31. Because no user has been specified,
ClaimCenter will execute assignment rules to assign the activity to a user in group demo-sample:31.
Activities 357
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Command
POST /common/v1/activities/xc:1/assign
Request body
{
"data": {
"attributes": {
"groupId": "demo_sample:31"
}
}
}
POST /common/v1/activities/xc:1/assign
Request body
{
"data": {
"attributes" : {
"queueId": "cc:32"
}
}
}
POST /common/v1/activities/xc:1/assign
Request body
{
"data": {
"attributes": {
"queueId": "cc:32"
}
}
}
POST /common/v1/activities/xc:1/assign
Request body
{
"data": {
"attributes": {
"autoAssign": true
}
}
}
358 Activities
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
For more information on assignment rules, see the Gosu Rules Guide.
Endpoint Returns
/common/v1/activity/{activityId}/assignees The list of suggested assignees for this activity
/claim/v1/claims/{claimId}/activity-assignees The list of suggested assignees for activities on this claim
The following is a portion of an example response from the Common API's /assignees endpoint.
Command
GET /common/v1/activities/cc:301/assignees
Response
{
"count": 16,
"data": [
{
"attributes": {
"autoAssign": true,
"name": "Use automated assignment"
}
},
{
"attributes": {
"claimOwner": true,
"name": "Claim/Exposure Owner"
}
},
{
"attributes": {
"groupId": "demo_sample:31",
"name": "Sue Smith (Auto1 - TeamA)",
"userId": "demo_sample:2"
}
},
{
"attributes": {
"groupId": "demo_sample:31",
"name": "Andy Applegate (Auto1 - TeamA)",
"userId": "demo_sample:1"
}
},
...
{
"attributes": {
"name": "FNOL - Acme Insurance",
"queueId": "default_data:1"
}
}
],
...
Closing activities
A general activity is closed either by completing it or skipping it. In order to be closed, the activity must be opened and
assigned to a user.
Activities 359
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Approval activities, which are discussed later in this topic, are closed in a different way.
When closing an activity, there are two options for the request payload:
• An empty payload
• A payload with an included note. (This option is used when you want to create a note while you close the activity.
The payload has no data section, but it does have an included section.)
All endpoints for closing activities are in the Common API.
Completing an activity
Completing an activity indicates that the corresponding action has been taken or the assignee is aware of the
corresponding issue.
The following payload completes activity xc:1.
Command
POST /common/v1/activities/xc:1/complete
Request body
POST /common/v1/activities/xc:1/complete
Request body
{
"included": {
"Note": [
{
"attributes": {
"body": "This activity was completed through a system API call."
},
"method": "post",
"uri": "/common/v1/activities/xc:1/notes"
}
]
}
}
Skipping an activity
Skipping an activity indicates that there is no longer a need to take the action that the activity originally identified.
Activities have a mandatory Boolean field. If this is set to true, the activity cannot be skipped.
The following payload skips activity xc:1.
Command
POST /common/v1/activities/xc:1/skip
Request body
POST /common/v1/activities/xc:1/skip
360 Activities
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Request body
{
"included": {
"Note": [
{
"attributes": {
"body": "This activity was skipped by a system API call."
},
"method": "post",
"uri": "/common/v1/activities/xc:1/notes"
}
]
}
}
Request body
Request body
{
"data":
{
"attributes": {
"approvalRationale": "Higher reserve approved because claimant is gold-tier customer."
}
}
}
The following payload approves activity xc:2 with an approval rationale and a note.
Activities 361
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Command
POST /common/v1/activities/xc:2/approve
Request body
{
"data":
{
"attributes": {
"approvalRationale": " Higher reserve approved because claimant is gold-tier customer"
}
},
"included": {
"Note": [
{
"attributes": {
"body": "This activity was approved through a Cloud API call."
},
"method": "post",
"uri": "/common/v1/activities/xc:2/notes"
}
]
}
}
There are currently no Cloud API endpoints that reject approval activities.
PATCHing activities
• PATCH /activities/{activityId}
362 Activities
chapter 29
Documents
In ClaimCenter, a document is a file (such as a PDF, Word document, or digital photograph) which contains
information relevant to a claim. Typically, a document is an electronic file, though some insurers may also maintain
documents as physical files. Examples of documents could include reports filed by law enforcement agencies,
assessments of damage from home inspectors, or correspondences with the insured.
For a complete description of the functionality of documents in ClaimCenter, see the Application Guide.
Note: Documents exist in all core InsuranceSuite applications. To ensure that documents behave in a common
way across all applications, some document endpoints, such as the endpoints for querying for document
metadata or contents, are declared in the Common API. Documents can also belong to claims, which do not
exist in all InsuranceSuite applications. This means that other document endpoints, such as the endpoint for
creating a document for a claim, are declared in the Claim API. This topic always identifies the API in which
each endpoint is declared.
Note: ContactManager provides the ability to attach documents to contacts. However, the contact must have the
"vendor" tag. Documents cannot be attached to non-vendor contacts.
Overview of documents
Document owners
Documents cannot exist on their own. They must be attached to a parent object. From a Cloud API perspective,
ClaimCenter documents are always attached to claims.
In ContactManager, documents can be attached only to vendor contacts (contacts with the "vendor" tag).
existence of the document and metadata about the document, even though the contents are not in the document
management system.
Documents cannot exist in an InsuranceSuite application with contents but no metadata.
Endpoint Returns
GET /common/v1/documents/ Metadata for the given document
{documentId}
GET /claim/v1/claims/{claimId}/ Metadata for documents on the given claim
documents
This is a "potentially large" endpoint. Cloud API returns an error if you attempt to sort
on this endpoint and the sort cannot be accomplished efficiently. For more
information, see “Potentially large endpoints” on page 56.
GET /claim/v1/claims/{claimId}/ Metadata for the given document
documents/{documentId}
Response
{
"data": {
"attributes": {
"author": "Sue Smith",
"dateModified": "2020-12-07T23:40:23.534Z",
"docUID": "2020/11/7/235-53-425892/Legal Ownership of Property",
"id": "xc:101",
"inbound": false,
"mimeType": "text/plain",
"name": "Legal Ownership of Property",
"obsolete": false,
"section": {
"code": "legal",
"name": "Legal"
},
"status": {
"code": "final",
"name": "Final"
},
"type": {
"code": "other",
"name": "Other"
364 Documents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
}
},
...
Response
RESPONSE:
{
"data": {
"attributes": {
"contents": "REVWIEJVSUxEDQoNCklmIHRoZXJlIGlzIG9ubHkgYSB2aXN1YWxp
emVkIHByb2R1Y3QNCiAgQU5EIHRoZSAiRW5hYmxlZCBmb3IgUmVzdCBBUEkiIGZpZWxkIGlzIGlua
XRpYWxseSBzZXQgdG8gRW5hYmxlZA0KICBBTkQgeW91IGNoYW5nZSB0aGUgZmllbGQgdG8gRGlzYW
JsZWQNCiAgVEhFTiB0aGUgcHJvZHVjdCBpcyBpbW1lZGlhdGVseSB1bmF2YWlsYWJsZSB0byB0aGU
gc3lzdGVtIEFQSXMNCg0KSWYgdGhlcmUgaXMgYSB2aXN1YWxpemVkIHByb2R1Y3QgYW5kIGEgZmlu
YWxpemVkIHByb2R1Y3QNCiAgQU5EIHRoZSAiRW5hYmxlZCBmb3IgUmVzdCBBUEkiIGZpZWxkIGlzI
GluaXRpYWxseSBzZXQgdG8gRW5hYmxlZA0KICBBTkQgeW91IGNoYW5nZSB0aGUgZmllbGQgdG8gRG
lzYWJsZWQNCiAgVEhFTiB0aGUgZmluYWxpemVkIHByb2R1Y3QgaXMgaW1tZWRpYXRlbHkgYXZhaWx
hYmxlIHRvIHRoZSBzeXN0ZW0gQVBJcw0KDQpDVVNUT01FUiBCVUlMRA0KDQpJZiB0aGVyZSBpcyBv
bmx5IGEgdmlzdWFsaXplZCBwcm9kdWN0DQogIEFORCB0aGUgIkVuYWJsZWQgZm9yIFJlc3QgQVBJI
iBmaWVsZCBpcyBpbml0aWFsbHkgc2V0IHRvIEVuYWJsZWQNCiAgQU5EIHlvdSBjaGFuZ2UgdGhlIG
ZpZWxkIHRvIERpc2FibGVkDQogIFRIRU4gdGhlIHByb2R1Y3QgaXMgaW1tZWRpYXRlbHkgdW5hdmF
pbGFibGUgdG8gdGhlIHN5c3RlbSBBUElzDQooSSBhc3N1bWUgdGhpcyBpcyB0aGUgc2FtZSBhcyAN
Cg0KSWYgdGhlcmUgaXMgYSB2aXN1YWxpemVkIHByb2R1Y3QgYW5kIGEgZmluYWxpemVkIHByb2R1Y
3QNCiAgQU5EIHRoZSAiRW5hYmxlZCBmb3IgUmVzdCBBUEkiIGZpZWxkIGlzIGluaXRpYWxseSBzZX
QgdG8gRW5hYmxlZA0KICBBTkQgeW91IGNoYW5nZSB0aGUgZmllbGQgdG8gRGlzYWJsZWQNCiAgVEh
FTiB0aGUgZmluYWxpemVkIHByb2R1Y3QgaXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxlIHRvIHRoZSBz
eXN0ZW0gQVBJcw==",
"responseMimeType": "text/plain"
},
...
POSTing documents
Use the following endpoints to POST documents:
• POST /claim/v1/claims/{claimId}/documents
• (ContactManager) POST /contact/v1/contacts/{contactId}/documents
◦ In ContactManager, documents can be posted only to contacts with the "vendor" tag.
FormData objects
For most Cloud API endpoints, the request has a body with a single string of JSON text. However, this format is not
sufficiently robust for documents. When working with documents, the caller application typically sends two sets of
data: the document metadata and the document contents. This is accomplished using FormData objects.
FormData is an industry-standard interface that constructs an object as a set of key/value pairs. When a caller
application is constructing a POST /documents call, the request has a FormData object with the following keys:
• metadata, whose value is a JSON string identifying the document metadata
• content, whose value is the contents of the document (and whose format varies based on the document type)
Documents 365
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
Request body
METADATA:
{
"data": {
"attributes": {
"name": "Property Assessment Report",
"status": {
"code": "draft"
},
"type": {
"code": "letter_received"
}
}
}
}
CONTENTS:
<contents of "Property Assessment [Link]" file>
366 Documents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
The following is an example of POSTing a "Property Assessment [Link]" file for claim cc:102 that does exist in
the document management system with id "doc:11-31".
Command
POST /claim/v1/claims/cc:102/documents
Request body
METADATA:
{
"data": {
"attributes": {
"docUID": "doc:11-31",
"name": "Property Assessment Report",
"status": {
"code": "draft"
},
"type": {
"code": "letter_received"
}
}
}
}
CONTENTS:
<no content specified>
If a POST /documents call needs to specify document metadata only, it can be executed using a request body that is
formatted as JSON (as opposed to FormData). For more information, see “Sending document metadata only using
JSON” on page 370.
POSTing a document that will never be in the document management system
You can POST information about a document that will never be in the document management system (such as a
physical piece of paper that must be tracked by ClaimCenter). In this approach:
• You provide document metadata only.
• There is no information stored in the document management system.
The following is an example of POSTing a "Printout of email from auto dealership" document for claim cc:102 that is a
physical piece of paper that ClaimCenter must track.
Command
POST /claim/v1/claims/cc:102/documents
Request body
METADATA:
{
"data": {
"attributes": {
"name": "Printout of email from auto dealership",
"status": {
"code": "final"
},
"type": {
"code": "letter_received"
}
}
}
}
CONTENTS:
<no content specified>
If a POST /documents call needs to specify document metadata only, it can be executed using a request body that is
formatted as JSON (as opposed to FormData). For more information, see “Sending document metadata only using
JSON” on page 370.
Errors to avoid when POSTing documents
When POSTing documents, note the following guidelines:
Documents 367
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
• Sending the content FormData parameter without the metadata FormData parameter results in an error.
• Uploading documents of an unsupported MIME type results in an error.
• When working with the docUID and pendingDocUID fields, avoid the following to prevent errors:
◦ Including both the docUID and the pendingDocUID in a document's metadata
◦ Including the docUID property or the pendingDocUID property when including the content parameter in the
post
◦ Setting the dms property to true and including the pendingDocUID field
◦ Setting the status to final and including the pendingDocUID field
Procedure
1. Identify the files needed for the FormData object. This includes:
• A JSON file that contains the metadata. (The file extension must be .json.)
• The document file that has the content.
2. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
3. Under the Untitled Request label, select POST.
4. In the Enter request URL field, enter the URL for the server and the endpoint.
• For example, to POST a document to a claim on an instance of ClaimCenter on your machine, enter: http://
localhost:8080/cc/rest/claim/v1/claims/{claimId}/documents
•
5. On the Authorization tab, specify authorization information as appropriate.
6. Specify the request payload.
a) In the first row of tabs (the one that starts with Params), click Body.
b) In the row of radio buttons, select form-data.
c) On the first line, for KEY, enter: metadata
d) Click outside of the metadata cell. Then, mouse over the right side of the cell. A drop-down list appears.
Change the value from Text to File.
e) For VALUE, click the Select Files button and navigate to the JSON file containing the metadata.
f) On the second line, for KEY, enter: content
g) Click outside of the content cell. Then, mouse over the right side of the cell. A drop-down list appears.
Change the value from Text to File.
h) For VALUE, click the Select Files button and navigate to the file containing the document content.
7. Click Send. The response payload appears below the request payload.
368 Documents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
PATCHing documents
Use the following to PATCH documents:
• PATCH /common/v1/documents/{documentId}
• PATCH /claim/v1/claims/{claimId}/documents/{documentId}
Logically speaking, a PATCH call can modify only the metadata of a document, only the content of a document, or
both.
Request body
METADATA:
{
"data": {
"attributes": {
"status": {
"code": "final"
}
}
}
}
You can also submit a metadata-only PATCH using a request body that is formatted as JSON (as opposed to
FormData). For more information, see “Sending document metadata only using JSON” on page 370.
PATCHes to content are destructive, not additive. If you specify content, the new content replaces the previous
content entirely.
For example, the following call updates the entire content for document xc:127 (without changing any of the
metadata).
Command
PATCH /common/v1/documents/xc:127
Request body
METADATA:
{
"data": {
"attributes": {
}
}
}
}
Documents 369
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
PATCH /common/v1/documents/xc:127
Request body
METADATA:
{
"data": {
"attributes": {
"status": {
"code": "final"
}
}
}
}
Request body
{
"data": {
"attributes": {
"docUID": "doc:11-31",
"name": "Property Assessment Report",
"status": {
"code": "draft"
},
"type": {
"code": "letter_received"
}
}
}
}
DELETEing documents
Use the following to DELETE documents:
370 Documents
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
• DELETE /common/v1/documents/{documentId}
• DELETE /claim/v1/claims/{claimId}/documents/{documentId}
For example, the following request DELETEs document xc:101:
PATCH /common/v1/documents/xc:101
Documents 371
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
372 Documents
chapter 30
Notes
A note is a free-form record of the actions or thinking of a user or process. Notes are typically used to capture
information that cannot be easily captured in some other way on some other business object. Notes are typically
created by users, but they can be created by batch processes or other system behavior within ClaimCenter. They can
also be created by caller applications using Cloud API.
Through Cloud API, a note can be attached to a claim. It can also optionally be attached to an exposure, a
ClaimContact, or a service request on that claim. Notes can also be attached to activities.
For a complete description of the functionality of notes in ClaimCenter, see the Application Guide.
Note: Notes exist in all core InsuranceSuite applications. To ensure that notes behave in a common way across
all applications, some note endpoints, such as the endpoint for querying for a note with a given ID, are declared
in the Common API. Notes can also belong to claims, which do not exist in all InsuranceSuite applications.
This means that other note endpoints, such as the endpoint for querying for notes related to a given claim, are
declared in the Claim API. This topic always identifies the API in which each endpoint is declared.
Note: ContactManager for Cloud API includes the Common API and its endpoints for working with notes.
However, in the base configuration of the ContactManager application, there is no user interface or business
rule support for notes. The notes endpoints have been included in Cloud API for ContactManager primarily for
the sake of consistency, and also to support any insurer who wishes to configure ContactManager so that it can
work with notes.
Endpoint Returns
/common/v1/notes/{noteId} The note with the given ID (see below)
/claim/v1/claims/{claimId}/ All notes associated with the given claim
notes
This is a "potentially large" endpoint. Cloud API returns an error if you attempt to sort on
this endpoint and the sort cannot be accomplished efficiently. For more information, see
“Potentially large endpoints” on page 56.
/common/v1/activities/ All notes associated with the given activity
{activityId}/notes
By default, the GET /notes/{noteId} endpoint returns the body field, but the GET /notes endpoints do not. This is
because of the potentially large size of the body field. To prevent overly large payloads, Guidewire recommends that
Notes 373
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
you retrieve the body field only if the body is needed. The body can be retrieved using the ?fields=body query
parameter.
The /common/v1/notes/{noteId} endpoint can be used to retrieve any note in ClaimCenter. This includes notes that
are attached to a parent object other than a claim.
Minimal notes
The following is an example of creating a minimal note for claim cc:102.
POST /claim/v1/claims/cc:102/notes
{
"data": {
"attributes": {
"body": "The insured's last name, Cahill, is pronounced 'KAH-hill', not 'KAY-hill'."
}
}
}
POST /claim/v1/claims/cc:102/notes
{
"data": {
"attributes": {
"body": "The insured's last name, Cahill, is pronounced 'KAH-hill', not 'KAY-hill'." ,
"confidential": false,
"securityType": {
"code": "public"
},
"subject": "Pronunciation note",
"topic": {
"code": "general"
}
}
}
}
374 Notes
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
"relatedTo": {
"id": "<childObjectId>",
"type": "<childObjectType>"
For example, the following creates a note on claim cc:102 for the exposure with id cc:48:
POST /claim/v1/claims/cc:102/notes
{
"data": {
"attributes": {
"body": "The claimant's last name, Cahill, is pronounced 'KAH-hill', not 'KAY-hill'.",
"relatedTo": {
"id": "cc:48",
"type": "Exposure"
}
}
}
}
POST /common/v1/activities/xc:22/notes
{
"data": {
"attributes": {
"body": "This activity was completed during a telephone call with the insured on 11/17."
}
}
}
PATCHing notes
• PATCH /common/v1/notes/{noteId}
DELETEing notes
• DELETE /common/v1/notes/{noteId}
Notes 375
Guidewire ClaimCenter for Guidewire Cloud 2024.11 Cloud API Consumer Guide
376 Notes
chapter 31
Cloud API provides endpoints in the Admin API to support several of the tasks associated with user and group
management.
Users
In most cases, a user is a person who is known to ClaimCenter and who is listed in the ClaimCenter database (such as
policy underwriters, claims adjusters, and billing clerks). Within the context of Cloud API authentication, this is also
referred to as an internal user.
In some cases, a user can represent a service. This occurs for caller applications which are services which are mapped
to user accounts for the purpose of managing access.
Do not confuse internal users with external users. External users are users known to ClaimCenter but who are not listed
in the ClaimCenter database (such as account holders, policy holders, and service vendors).
For information on working with services and external users, see the Cloud API Developer Guide.
Note: Be aware that Cloud API enforces application constraints specified in internal code, but it does not
enforce constraint specified in the user interface. This is because internal code constraints cannot be modified or
removed, but user interface constraints can. As a result of this, there may be actions you can execute through
Cloud API that you cannot execute through the base configuration user interface.
For example, there is no internal code that requires a user to have a phone number. Therefore, you can create
and modify a user through Cloud API without ever specifying a primary phone number. However, the base
configuration user interface does require you to specify a phone number. Therefore, any user that you modify
through the base configuration user interface must have a phone number, even when that user was created
through Cloud API without a phone number.
If there is a desire to have the constraints of the two environments match, insurers can add constraints to Cloud
API and/or remove them from the user interface.
Command
GET /admin/v1/users/demo_sample:1
Response
{
"data": {
"attributes": {
"active": true,
"cellPhone": {
"countryCode": {
"code": "US",
"name": "United States (1)"
},
"displayName": "650-333-3333",
"number": "6503333333"
},
"displayName": "Andy Applegate",
"employeeNumber": "1000001",
"externalUser": false,
"firstName": "Andy",
"id": "demo_sample:1",
"lastName": "Applegate",
"roles": [
{
"displayName": "Adjuster",
"id": "adjuster",
"type": "Role"
},
{
"displayName": "Trusted for Sensitive Claims",
"id": "sensitive_claims",
"type": "Role"
}
],
"username": "aapplegate",
"vacationStatus": {
"code": "atwork",
"name": "At work"
},
"workPhone": {
"displayName": "213-555-8164",
"number": "2135558164"
}
}
}
}
Creating users
To create a user, use the following endpoint:
• POST /admin/v1/users
Note: When a user is created through Cloud API, the user's password is set to a value that cannot be used for
authentication. (The password is set to a value that is not a valid Base64 string, but the authentication
framework can authenticate passwords only when they are valid Base64 strings.) In order for the new user to
authenticate, the password must first be changed to a valid Base64 string through some other method, such as
through the user interface.
{
"data": {
"attributes": {
"username": "amartin"
}
}
}
POST /admin/v1/users
{
"data": {
"attributes": {
"active": true,
"displayName": "",
"externalUser": false,
"id": "cc:SVA-tE4oV6qcNvofjff8v",
"username": "amartin",
"vacationStatus": {
"code": "atwork",
"name": "At work"
}
},
"checksum": "590697d4d0c3ccc1728d9f2d1d8c4051",
"links": {
"self": {
"href": "/admin/v1/users/cc:SVA-tE4oV6qcNvofjff8v",
"methods": [
"get",
"patch"
]
}
}
}
}
POST /admin/v1/users
{
"data": {
"attributes": {
"firstName": "Adriana",
"lastName": "Diaz",
"username": "adiaz",
"employeeNumber": "ACME-02027",
"roles" : [
{
"id": "account_manager"
},
{
"id": "adjuster"
}
]
}
}
}
When you create a user, you can also specify the user's roles and authority limit profile.
• For more information on working with user roles, see “User roles” on page 385.
• For more information on working with authority limit profiles, see “Authority limit profiles” on page 389.
Updating users
Use the following endpoint to modify an existing user:
• PATCH /admin/v1/users/{userId}
For example, the following request updates the first name of user xc:2156
PATCH /admin/v1/users/xc:2156
{
"data": {
"attributes": {
"firstName": "Alex"
}
}
}
Deleting users
Use the following endpoint to delete an existing user:
• DELETE /admin/v1/users/{userId}
For example, the following request deletes user xc:2156:
DELETE /admin/v1/users/xc:2156
Groups
A group is a set of users who represent a single business unit or who are assigned a single body of work.
GET /admin/v1/users/demo_sample:31
{
"data": {
"attributes": {
"displayName": "Alexandria Branch",
"groupType": {
"code": "branch",
"name": "Branch office"
},
"id": "demo_sample:31",
"name": "Alexandria Branch",
"parent": {
"displayName": "Eastern Region",
"id": "demo_sample:29",
"type": "Group",
"uri": "/admin/v1/groups/demo_sample:29"
},
"securityZone": {
"displayName": "Auto and Property",
"id": "default_data:1"
},
"supervisor": {
"displayName": "Sue Smith",
"id": "demo_sample:2",
"type": "User",
"uri": "/admin/v1/users/demo_sample:2"
}
},
...
}
}
Creating groups
To create a group, use the following endpoint:
• POST /admin/v1/groups
When creating a group, you must specify the following values:
• groupType - a value from the GroupType typelist, such as general
• name - a string value
• parent - A JSON object with an id field that references the id of the parent group
• securityZone - A JSON object with an id field that references the id of the group's security zone
• supervisor - A JSON object with an id field that references the id of the user who is the supervisor
The user who is designated as the supervisor of the group is not required to be a member of the group. Also, designated
a user as the supervisor does not automatically add the user to the group as a member.
For example, the following request creates a new group:
POST /admin/v1/groups
{
"data": {
"attributes": {
"groupType": {
"code": "general"
},
"name": "Cloud API Group 1",
"parent": {
"id": "systemTables:1"
},
"securityZone": {
"id": "default_data:1"
},
"supervisor": {
"id": "demo_sample:7"
}
}
}
}
• manager - Boolean indicating whether the user has permission to view the activity of others in the group
• member - Boolean indicating whether the user is a working member of the group (for purposes of work assignment),
as opposed to simply being associated with the group as a manager or other auxiliary person
• loadFactor - Percent of work that can be assigned to the user
Querying for group/user information
To retrieve information about user assignments for a group, use the following endpoints:
• GET /admin/v1/groups/{groupId}/users
◦ Returns a collection of user assignments for the group
• GET /admin/v1/groups/{groupId}/users/[groupUserId}
◦ Returns information about a specific user assignment to the group
For example, the following is the snippet of the response payload when retrieving the information for the GroupUser
assignments in group demo_sample:31. Note that the count is 12, which means the group has 12 users. Information is
then provided about each GroupUser assignment, including who the user is, and whether the user is a member or a
manager.
GET /admin/v1/users/demo_sample:31/users
{
"count": 12,
"data": [
{
"attributes": {
"id": "cc:SfZwdri9ldAAUgR46xZT7",
"manager": false,
"member": true,
"user": {
"displayName": "Andy Applegate",
"id": "demo_sample:1",
"type": "User",
"uri": "/admin/v1/users/demo_sample:1"
}
},
...
},
{
"attributes": {
"id": "cc:SZPhG_CUIA3E1sO2AiZ_s",
"manager": false,
"member": true,
"user": {
"displayName": "Betty Baker",
"id": "demo_sample:8",
"type": "User",
"uri": "/admin/v1/users/demo_sample:8"
}
},
...
},
...
POST /admin/v1/groups/demo_sample:31/users
{
"data": {
"attributes": {
"user": {
"id": "demo_sample:18"
}
}
}
}
This assigns user demo_sample:18 to group demo_sample:31 as a member. The user is not a manager of the group and
has a null load factor. (If a field’s value is null, the field is not included in Cloud API responses.)
PATCH /admin/v1/groups/demo_sample:31/users/xc:55
{
"data": {
"attributes": {
"manager": true,
"member": false
}
}
}
DELETE /admin/v1/groups/demo_sample:31/users/xc:55
Updating groups
Use the following endpoint to modify an existing group:
• PATCH /admin/v1/groups/{groupId}
For example, the following request updates the supervisor of group xc:202:
PATCH /admin/v1/groups/xc:202
{
"data": {
"attributes": {
"supervisor": {
"id": "demo_sample:6"
}
}
}
}
Deleting groups
Use the following endpoint to delete an existing group:
• DELETE /admin/v1/groups/{groupId}
For example, the following request deletes group xc:202:
DELETE /admin/v1/groups/xc:202
Queues
A queue is a named repository that belongs to a specific group and that contains activities assigned to the group but not
yet to any user in the group. Users who belong to the group can assign activities in a queue to themselves. Queues are
often used to allow users in a group to take ownership of activities as their workload or expertise permits.
In the data model, queues are managed using the AssignableQueue data model entity.
In order to work with queues in the base configuration, the following must exist:
• Support for queues in the data model
• Assignment methods that let activities be assigned to queues
• Rules that create queues automatically, and/or user interface controls that let administrators create queues manually
• User interface screens to let users view queues and the activities assigned to them, and to take ownership of
activities in the queue
The base configuration of ClaimCenter has all of the above items. Thus, the base configuration of ClaimCenter
supports queues.
The base configuration of PolicyCenter and BillingCenter have the first two items only. PolicyCenter and BillingCenter
can support queues, but further configuration is required.
GET /admin/v1/groups/cc:118/queues/cc:790
{
"data": {
"attributes": {
"description": "Auto-created FNOL queue for group",
"id": "xc:790",
"name": "FNOL",
"subGroupVisible": false
},
...
Creating queues
Use the following endpoint to create queues:
• POST /admin/v1/groups/{groupId}/queues
When creating queues, the only required values are:
• name - A string
• subGroupVisible - A Boolean indicating whether the queue is visible from sub-groups of the group to which it
belongs
For example, the following request creates a new queue for group cc:118:
POST /admin/v1/groups/cc:118/queues
{
"data": {
"attributes": {
"name": "Damaged vehicle evaluations",
"subGroupVisible": true
}
}
}
PATCH /admin/v1/groups/cc:118/queues/cc:990
{
"data": {
"attributes": {
"description": "Queue for activities to process evaluations of damaged vehicles"
}
}
}
DELETE /admin/v1/groups/cc:118/queues/cc:990
User roles
A system permission is a granular permission that identifies something a user can view, edit, create, or otherwise work
with.
A user role is a named group of system permissions. User roles simplify the work of granting access by allowing a set
of related system permissions to be assigned to a user. (Note that in most Guidewire documentation, user roles are
referred to simply as "roles". The Cloud API documentation uses the term "user role" to help distinguish them from
"API roles", which is a feature with a similar purpose but different underlying functionality.)
GET /admin/v1/roles?pageSize=4
{
"count": 5,
"data": [
{
"attributes": {
"carrierInternal": true,
"description": "Permissions for account admin",
"displayName": "Account Manager",
"id": "account_manager",
"name": "Account Manager"
}
},
{
"attributes": {
"carrierInternal": true,
"description": "All permissions related to activity rules",
"displayName": "Activity Rules Admin",
"id": "activity_rules_admin",
"name": "Activity Rules Admin"
}
},
{
"attributes": {
"carrierInternal": true,
"description": "Permissions to edit activity rules",
"displayName": "Activity Rules Editor",
"id": "activity_rules_editor",
"name": "Activity Rules Editor"
}
},
{
"attributes": {
"carrierInternal": true,
"description": "Permissions to view activity rules",
"displayName": "Activity Rules Viewer",
"id": "activity_rules_viewer",
"name": "Activity Rules Viewer"
}
}
]
}
GET /admin/v1/roles/claims_adjuster/permissions
{
"count": 25,
"data": [
{
"attributes": {
"id": "sample_data:213",
"permission": {
"code": "lvprint",
"name": "Print listviews"
}
},
...
},
{
"attributes": {
"id": "sample_data:222",
"permission": {
"code": "searchpols",
"name": "Search related policies"
}
},
...
},
{
"attributes": {
"id": "sample_data:210",
"permission": {
"code": "actview",
"name": "View activities"
}
},
...
},
...
For example, the following creates a new user role for users named "finance_admin".
POST /admin/v1/roles
{
"data": {
"attributes": {
"roleType": {
"code": "user"
},
"name": "finance_admin"
}
}
}
POST /admin/v1/roles/xc:222/permissions
{
"data": {
"attributes": {
"permission": {
"code": "notecreate"
}
}
}
}
There is no way to specify multiple permissions in a single call to the /permissions endpoint. You must invoke the /
permissions endpoint once for each permission to be added to a role.
POST /admin/v1/roles
{
"data": {
"attributes": {
"roleType": {
"code": "user"
},
"name": "finance_admin"
}
},
"included": {
"RolePermission": [
{
"attributes": {
"permission": {
"code": "noteview"
}
},
"method": "post",
"uri": "/admin/v1/roles/this/permissions"
}
]
}
}
Endpoint Description
PATCH /admin/v1/roles/{roleId} Modify attributes about the role, such as its name or description
DELETE /admin/v1/roles/{roleId}/permissions/ Remove a permission from a role
{permissionId}
DELETE /admin/v1/roles/{roleId} Delete a role
PATCH /admin/v1/roles/xc:222
{
"data": {
"attributes": {
"name": "Finance Administrator",
"description": "User role for finance administrators"
}
}
}
DELETE /admin/v1/roles/xc:222/permissions/xc:515
DELETE /admin/v1/roles/xc:222
Endpoint Retrieves
GET /admin/v1/authority-limit-profiles A list of all authority limit profiles
GET /admin/v1/authority-limit-profiles/ Information about a specific authority limit profile
{authorityLimitProfileId}
GET /admin/v1/authority-limit-profiles/ A list of limits for a specific authority limit profile
{authorityLimitProfileId}/limits
GET /admin/v1/authority-limit-profiles/ Information about a specific limit in a specific authority
{authorityLimitProfileId}/limits/{limitId} limit profile
For example, the following request retrieves information about authority profile limit "default_data:1".
GET /admin/v1/authority-limit-profiles/default_data:1
{
"data": {
"attributes": {
"currency": {
"code": "usd",
"name": "USD"
},
"custom": false,
"description": "Adjuster default authority",
"displayName": "Adjuster",
"id": "default_data:1",
"name": "Adjuster"
}
}
...
}
The following request retrieves information about the limits for authority profile limit "default_data:1". There are two
limits, one limiting claim payments to date to $15,000 USD and one limiting claim total reserves to $15,000 USD.
GET /admin/v1/authority-limit-profiles/default_data:1/limits
{
"count": 2,
"data": [
{
"attributes": {
"id": "default_data:2",
"limitAmount": {
"amount": "15000.00",
"currency": "usd"
},
"limitType": {
"code": "cptd",
"name": "Claim payments to date"
}
},
...
},
{
"attributes": {
"id": "default_data:1",
"limitAmount": {
"amount": "15000.00",
"currency": "usd"
},
"limitType": {
"code": "ctr",
"name": "Claim total reserves"
}
},
...
}
]
POST /admin/v1/authority-limit-profiles
{
"data": {
"attributes": {
"name": "Financial admin",
"currency": {
"code": "usd"
}
}
}
}
POST /admin/v1/authority-limit-profiles
{
"data": {
"attributes": {
"custom": true,
"currency": {
"code": "usd"
}
}
}
}
Note that in the ClaimCenter user interface, you cannot create a custom profile that is not assigned to any user. Custom
profiles are always created in the context of a specific user. In Cloud API, you can create a custom profile that is not
assigned to any user. You can then assign that profile to a single user. However, if you attempt to assign it to multiple
users, the second attempt will fail.
PATCH /admin/v1/users/demo_sample:10
{
"data": {
"attributes": {
"authorityLimitProfile": {
"id": "cc:999"
}
}
}
}
You can assign assignable profiles to any number of users. You can assign custom profiles to only a single user. If you
attempt to assign a custom profile to multiple users, you will get a validation error similar to the following:
"The custom authority limit profile is associated with another user. Each custom authority
limit profile can be associated to only a single user."
POST /admin/v1/authority-limit-profiles/cc:1208/limits
{
"data": {
"attributes": {
"limitType": {
"code": "ctr"
},
"limitAmount": {
"currency": "usd",
"amount": "15000"
}
}
}
}
POST /admin/v1/authority-limit-profiles
{
"data": {
"attributes": {
"name": "Financial admin",
"currency": {
"code": "usd"
}
}
},
"included": {
"AuthorityLimit": [
{
"attributes": {
"limitType": {
"code": "ctr"
},
"limitAmount": {
"currency": "usd",
"amount": "15000"
}
},
"method": "post",
"uri": "/admin/v1/authority-limit-profiles/this/limits"
},
{
"attributes": {
"limitType": {
"code": "pa"
},
"limitAmount": {
"currency": "usd",
"amount": "5000"
}
},
"method": "post",
"uri": "/admin/v1/authority-limit-profiles/this/limits"
}
]
}
}
Endpoint Description
PATCH /admin/v1/authority-limit-profiles/ Modify attributes about the given authority limit profile
{authorityLimitProfileId}
PATCH /admin/v1/authority-limit-profiles/ Modify attributes about the given limit for the given
{authorityLimitProfileId}/limits/{limitId} authority limit profile
DELETE /authority-limit-profiles/ Remove the given limit from the given authority limit
{authorityLimitProfileId}/limits/{limitId} profile
DELETE /admin/v1/authority-limit-profiles/ Delete the given authority limit profile
{authorityLimitProfileId}
PATCH /admin/v1/authority-limit-profile/cc:1208
{
"data": {
"attributes": {
"name": "Finance Administrator",
"description": "Authority limit profile for finance administrators"
}
}
}
The following request modifies the cc:33 limit (claim total reserve) of authority limit profile cc:1208.
PATCH /admin/v1/authority-limit-profile/cc:1208/limits/cc:33
{
"data": {
"attributes": {
"limitAmount": {
"currency": "usd",
"amount": "30000"
}
}
}
}
DELETE /admin/v1/authority-limit-profile/cc:1208/limits/cc:33
DELETE /admin/v1/authority-limit-profile/cc:1208
You cannot a delete an authority limit profile if it is associated with one or more users.
Security zones
A security zone is a set of business objects whose access is restricted to the users in a user group. Security zones are
used to define access to specific sets of business objects.
At a high level, the process of limiting access through security zones is implemented in these steps:
1. A security zone is created.
2. The security zone is associated with a set of business objects, such as accounts, policies, or claims.
3. The security zone is also associated with a user group.
By default, the only users who can view or edit the business objects in the security zone are the users in the group
associated with the security zone.
For example, suppose there is a security zone named "Security Zone A" that contains an account named "Big Lake
Bakery". The "Western Region" group is also added to "Security Zone A". Now, the Big Lake Bakery account can be
viewed and modified only by users who belong to the Western Region group.
The functionality of security zones, including the business objects that can be added to them, varies between
applications. For more information on the business functionality of security zones in ClaimCenter, see the Application
Guide.
The endpoints for working with security zones are available in Cloud API for ClaimCenter, Cloud API for
PolicyCenter, and Cloud API for BillingCenter. They are not available in Cloud API for ContactManager.
{
"data": {
"attributes": {
"description": "Default Security Zone",
"displayName": "Default Security Zone",
"id": "default_data:1",
"name": "Default Security Zone"
},
...
{
"data": {
"attributes": {
"name": "Cloud API security zone"
}
}
}
Note that there are differences between security zone functionality in the base configuration of the different
applications.
• In ClaimCenter and BillingCenter, users can create security zones. This is done from the Admin tab's Security Zones
screen in the Users & Security group.
• In PolicyCenter, users cannot create security zones. (There is no Security Zones screen.) However, users can import
security zones through the Import Administrative Data screen in the Utilities group.
PATCH /admin/v1/security-zones/xc:111
{
"data": {
"attributes": {
"description": "Security zone created using Cloud API"
}
}
}
Note that there are differences between security zone functionality in the base configuration of the different
applications.
• In ClaimCenter and BillingCenter, users can edit security zones. This is done from the Admin tab's Security Zones
screen in the Users & Security group.
• In PolicyCenter, users cannot edit security zones.
DELETE /admin/v1/security-zones/xc:111
In PolicyCenter and BillingCenter, users cannot delete security zones, either through the user interface or through
Cloud API. The DELETE /security-zones/{securityZoneId} endpoint is exposed in Cloud API for PolicyCenter
and Cloud API for BillingCenter. But if you attempt to use it, Cloud API returns the following error. This is true even
for the super user "su", who is not bound by permissions.
{
"status": 403,
"errorCode": "[Link]",
"userMessage": "You do not have permission to delete this resource"
}
{
"data": {
"attributes": {
"securityZone": {
"id": "bc:222"
}
}
}
}
Similarly, the following request PATCHes BillingCenter group bc:555 so that it is associated with security zone bc:222.
PATCH /admin/v1/groups/bc:555
{
"data": {
"attributes": {
"securityZone": {
"id": "bc:222"
}
}
}
}
As a result of the two queries in the previous examples, account bc:101 is now restricted to only users in group bc:555.
Geographic zones
The geographic zone endpoint is used to retrieve information about a predefined geographic region. That information
can then be associated with InsuranceSuite features where a geographic region is needed.
Geographic zone endpoint:
GET /admin/v1/geographic-zones
GET is the only method available for geographic zones; you cannot add, update, or delete geographic zones through
the Cloud API.
The base configuration of InsuranceSuite includes over 1,000 geographic zones, so Guidewire provides several fields
you can filter on to make retrieving geographic zones more efficient.
Filters:
• id: The unique ID of the zone.
• country: The typecode for the country you want to filter on. Use the Country typekey to find available country
codes:
GET /common/v1/typelists/Country?fields=typeKeys
• zoneType: A typekey that varies by country. For example, if the country is US (United States) the zoneType could
be state, whereas a country value of CA (Canada) could have a zoneType of province. Use the ZoneType typekey
to find available zone types:
GET /common/v1/typelists/ZoneType?fields=typeKeys
• code: A value associated with the zoneType. For example, if the zoneType is state, the code could be OR
(Oregon).
This example retrieves information for the geographic zone that includes the U.S. state of Oregon:
GET /admin/v1/geographic-zones?filter=country:eq:US&filter=zoneType:eq:state&filter=code:eq:OR
{
"count": 1,
"data": [
{
"attributes": {
"code": "OR",
"country": {
"code": "US",
"name": "United States"
},
"displayName": "OR",
"id": "US:S4MEjnBYkBZqD_nWzarTl",
"name": "OR",
"zoneType": {
"code": "state",
"name": "State"
}
},
...
}
Here’s another example, this time with a broader search. This example will return a list of all provinces in Canada:
GET /admin/v1/geographic-zones?filter=country:eq:CA&filter=zoneType:eq:province
{
"data": [
{
"attributes": {
"code": "BC",
"country": {
"code": "CA",
"name": "Canada"
},
"displayName": "BC",
"id": "CA:SNAwbKcTW2uiIdv0FGcd0",
"name": "BC",
"zoneType": {
"code": "province",
"name": "Province"
}
},
},
{
"attributes": {
"code": "NL",
"country": {
"code": "CA",
"name": "Canada"
},
"displayName": "NL",
"id": "CA:SGVv0UjgB0_EJCt80VU1K",
"name": "NL",
"zoneType": {
"code": "province",
"name": "Province"
}
},
...
History events
When certain events occur in InsuranceSuite they are automatically recorded. Each history event is stored as a
CustomHistory type. You can retrieve these history events by using the history-events endpoint.
• GET /common/v1/history-events/{historyEventId}
• GET /claims/{claimId}/history-events
The following sections provide examples of these endpoints.
GET /common/v1/history-events/S-d_RRz9cG9bhqcfVN2xC
Response
{
"data": {
"attributes": {
"account": {
"displayName": "C000478975",
"id": "SaDgS3XDMmUlTYlw-HNoI",
"type": "Account",
"uri": "/account/v1/accounts/SaDgS3XDMmUlTYlw-HNoI"
},
"customType": {
"code": "acct_changed",
"name": "Account changed"
},
"description": "Pending account became active",
"eventTimestamp": "2024-06-03T23:03:05.992Z",
"historyType": {
"code": "custom",
"name": "Custom"
},
"id": "SJj0sm_oXm7aZUXrKuWxF",
"user": {
"displayName": "Super User",
"id": "default_data:1",
"type": "User",
"uri": "/admin/v1/users/default_data:1"
}
},
…
}
GET /claim/v1/claims/cc:439/history-events
Response
{
"count": 7,
"data": [
{
"attributes": {
"description": "Reserve of $500.00 created",
"eventTimestamp": "2024-11-18T22:00:43.109Z",
"historyType": {
"code": "reservecreated",
"name": "Reserve created"
},
"id": "cc:SHNXJQFrqGjZNWSkZEUC-",
"user": {
"displayName": "Super User",
"id": "default_data:1",
"type": "User",
"uri": "/admin/v1/users/default_data:1"
}
},
...
},
...
}
}
Typelist metadata
There may be situations where a caller application needs to retrieve information about ClaimCenter typelists. For
example, a caller application may need to know:
• The code for a specific typecode
• A list of all typecodes for a typelist
• A list of all typecodes for a typelist associated with a given typekey filter
The Common API contains two /typelist endpoints to help retrieve this information.
where:
• relatedTypelistX is the name of the Nth related typelist.
• TypecodeX is the Nth typecode to use as a filter
Examples
No filter parameter
This call does not use the typekeyFilter query parameter. Therefore, it retrieves all typecodes in the
ActivityCategory typelist:
GET /common/v1/typelists/ActivityCategory
Associated with one category
This call retrieves only the typecodes in the ActivityCategory typelist that are associated with the ActivityType of
General:
GET /common/v1/typelists/ActivityCategory?typekeyFilter=category:in:[Link]
Associated with any of the listed categories
This call retrieves only the typecodes in the ActivityCategory typelist that are associated with the ActivityType of
either General or Approval:
GET /common/v1/typelists/ActivityCategory?
typekeyFilter=category:in:[Link],[Link]
GET /common/v1/typelists/ActivityCategory?
typekeyFilter=category:ni:[Link],[Link]
• policyTypes
◦ coverageTypes
▪ coverageSubtypes
▫ exposureType
▫ incidentType
▫ lossPartyType
◦ internalPolicyType
◦ lobCodes
▪ lossType
▫ lossCauses
For example, the following request executed against the base configuration returns the following edited results.
Command
GET /claim/v1/claims/business-line-metadata
Response
{
"policyTypes": [
{
"code": "BusinessOwners",
"coverageTypes": [
{
"code": "BOPReceivablesCov",
"coverageSubtypes": [
{
"code": "BOPReceivablesCov",
"description": "Accounts Receivable",
"exposureType": {
"code": "GeneralDamage",
...
},
"incidentType": {
"code": "Incident",
...
},
"lossPartyType": {
"code": "insured",
...
},
"name": "Accounts Receivable",
"priority": -1,
"sortOrder": 103
}
],
...
},
...
],
"description": "Business Owners",
"internalPolicyType": {
"code": "commercial",
...
},
"lobCodes": [
{
"code": "BOPLine",
"description": "BusinessOwners",
"lossType": {
"code": "GL",
"description": "Liability",
"lossCauses": [
{
"code": "animal_bite",
...
},
...
],
"name": "Liability",
"priority": -1,
"sortOrder": 1
},
...
}
],
"name": "Businessowners",
...
## This is the end of the Businessowners policy metadata
},
{
## This is the start of the policy metadata for the Business Auto policy
"code": "BusinessAuto",
...
},
...
]
}
There are no filters defined for this endpoint. Caller applications always receive the entire model. Any required parsing
or filtering must be done by the caller application.
Tutorial steps
1. In Postman, start a new request by clicking the + to the right of the Launchpad tab.
2. Specify Basic Auth authorization using user su and password gw.
3. Enter the following call and click Send:
• GET [Link]
4. The response payload contains all non-retired claimant types. Verify that the first three codes in the payload are:
insured, householdmember, veh_ins_driver.)
5. Modify the call by adding the following query parameter to the end, and then click Send:
• ?typekeyFilter=category:cn:[Link]
6. The response payload now contains only claimant types relevant to property claims. Verify that the first three
codes in the payload are now: insured, householdmember, propertyowner. (veh_ins_driver no longer appears
because it is not a valid claimant type for a property claim.)
Batch processes
The ClaimCenter base configuration comes with a set of batch processes that can be scheduled to run maintenance
tasks periodically. You can also run batch processes on demand.
Cloud API provides support for batch processes. This includes retrieving the status of a batch process, and starting and
stopping a batch process. Third-party batch process schedulers can also use the batch process endpoints to manage
batch process scheduling externally.
For more information on the base configuration functionality of batch processes, see the Administration Guide.
Endpoint Description
GET /systemtools/v1/batch-processes Return a list of batch process types. In other words, this identifies all of the batch
processes that could be run.
GET /systemtools/v1/batch- For a given batch process type, return information about the most recent
processes/{batchProcessType} execution of that batch process, if any.
GET /systemtools/v1/batch- For a given batch process type, return information about all previous runs of that
processes/{batchProcessType}/ batch process.
histories
GET /systemtools/v1/batch- For a given batch process type, return information about the run of that batch
processes/{batchProcessType}/ process with the given processHistoryId, which may or may not be the most recent
histories/{processHistoryId} run.
GET /systemtools/v1/batch-processes/ActivityEsc
The information in the response varies based on whether the batch process has completed, is running, or has never been
run.
GET /systemtools/v1/batch-processes/ActivityEsc
{
"data": {
"attributes": {
"distributed": false,
"status": {
"dateCompleted": "2022-09-19T17:30:00.021Z",
"dateCreated": "2022-09-19T17:30:00.003Z",
"failedOps": 0,
"opsCompleted": 0,
"serverId": "55d109613ac9",
"startDate": "2022-09-19T17:30:00.011Z",
"type": "ActivityEsc"
},
"type": {
"code": "ActivityEsc",
"name": "Activity Escalation"
}
},
...
GET /systemtools/v1/batch-processes/ActivityEsc
{
"data": {
"attributes": {
"distributed": false,
"status": {
"dateCreated": "2022-09-19T17:30:00.003Z",
"failedOps": 0,
"opsCompleted": 0,
"opsExpected": 0,
"progress": "1 out of 3",
"serverId": "55d109613ac9",
"startDate": "2022-09-19T17:30:00.011Z",
"type": "ActivityEsc"
},
"type": {
"code": "ActivityEsc",
"name": "Activity Escalation"
}
},
...
GET /systemtools/v1/batch-processes/ActivityEsc
{
"data": {
"attributes": {
"distributed": false,
"status": {
"failureReason": "This batch process type has never run",
"type": "ActivityEsc"
},
"type": {
"code": "ActivityEsc",
"name": "Activity Escalation"
}
},
...
For example, the following request returns all runs of the Activity Escalation batch process.
Command
GET /batch-processes/ActivityEsc/histories
Response
{
"count": 2,
"data": [
{
"attributes": {
"dateCompleted": "2024-09-19T23:47:34.321Z",
"dateCreated": "2024-09-19T23:47:34.302Z",
"description": "Activity escalation monitor",
"failedOps": 0,
"id": "ab:Swdab0ToBSDtgSnHcTZZW",
"internalFailure": false,
"leaseId": "b1ac375b-8de1-4241-9da2-c132f487ec6e",
"opsCompleted": 0,
"ranToCompletion": true,
"scheduled": false,
"serverId": "e7fe021f6dfd",
"startDate": "2024-09-19T23:47:34.313Z",
"type": "ActivityEsc"
},
...
},
{
"attributes": {
"dateCompleted": "2024-09-18T03:30:00.033Z",
"dateCreated": "2024-09-18T03:30:00.009Z",
"description": "Activity escalation monitor",
"failedOps": 0,
"id": "ab:SKQcRxTozlLJVCpZZV1x7",
"internalFailure": false,
"leaseId": "efa769b4-6730-4688-8032-4ef13c45df5d",
"opsCompleted": 0,
"ranToCompletion": true,
"scheduled": true,
"serverId": "e7fe021f6dfd",
"startDate": "2024-09-19T03:30:00.024Z",
"type": "ActivityEsc"
},
...
}
}
}
The following request returns the run of the Activity Escalation batch process whose ID is
ab:SKQcRxTozlLJVCpZZV1x7. Note that this was not the most recent run.
Command
GET /batch-processes/ActivityEsc/histories/ab:SKQcRxTozlLJVCpZZV1x7
Response
{
"data": {
"attributes": {
"dateCompleted": "2024-09-18T03:30:00.033Z",
"dateCreated": "2024-09-18T03:30:00.009Z",
"description": "Activity escalation monitor",
"failedOps": 0,
"id": "ab:SKQcRxTozlLJVCpZZV1x7",
"internalFailure": false,
"leaseId": "efa769b4-6730-4688-8032-4ef13c45df5d",
"opsCompleted": 0,
"ranToCompletion": true,
"scheduled": true,
"serverId": "e7fe021f6dfd",
"startDate": "2024-09-19T03:30:00.024Z",
"type": "ActivityEsc"
},
...
POST /systemtools/v1/batch-processes/ActivityEsc/start
RESPONSE:
{
"data": {
"attributes": {
"distributed": true,
"processHistoryId": 4055,
"status": {
"dateCreated": "2022-09-19T17:54:19.929Z",
"failedOps": 0,
"opsCompleted": 0,
"serverId": "55d109613ac9",
"type": "ActivityEsc"
},
"type": {
"code": "ActivityEsc",
"name": "Activity Escalation"
},
"workQueueStatus": {
"numActiveExecutors": 1,
"numActiveWorkItems": 0
}
},
...
In Cloud API, for some batch processes, the /start endpoint supports arguments. For these batch processes, you can
submit a request with no body, which is equivalent to starting the batch process without arguments. Or, you can submit
a request with a body that specifies arguments and their values.
{
"data": {
"attributes": {
"<batchProcessFieldName>": {
"<argument1>": <values>,
"<argument2>": <values>,
...
}
}
}
}
For example, the PurgeAsyncApiRequests object has one integer field, purgeDaysOld. The following request starts
the Purge Async API Requests batch process and passes in a purgeDaysOld value of 3.
POST /systemtools/v1/batch-processes/PurgeAsyncApiRequests/start
{
"data": {
"attributes": {
"purgeAsyncApiRequests": {
"purgeDaysOld": 3
}
}
}
}
Note that the structure of the JSON object varies based on the datatype of the arguments. For example, the following is
an example of starting the Database Consistency Check batch process with arguments. Note that one of the arguments,
tableNames, is an array, whereas the other, description, is a string.
POST /systemtools/v1/batch-processes/DBConsistencyCheck/start
{
"data": {
"attributes": {
"dbconsistencycheck": {
"tableNames": [
"cc_activity",
"cc_address"
],
"description": "Start of Q1 maintenance"
}
}
}
}
If the attributes section contains any property with an unexpected name, Cloud API returns a 400 error.
RESPONSE:
{
"data": {
"attributes": {
"distributed": true,
"status": {
"dateCompleted": "2022-09-19T18:00:51.304Z",
"dateCreated": "2022-09-19T18:00:51.291Z",
"failedOps": 0,
"opsCompleted": 0,
"serverId": "55d109613ac9",
"startDate": "2022-09-19T18:00:51.298Z",
"type": "ActivityEsc"
},
"type": {
"code": "ActivityEsc",
"name": "Activity Escalation"
},
"wasStopped": true,
"workQueueStatus": {
"numActiveExecutors": 1,
"numActiveWorkItems": 0
}
},
A database consistency check (DBCC) is a check that ClaimCenter executes to verify that data in the database is
consistent.
Cloud API provides support for DBCCs. This includes running DBCCs, retrieving information about DBCCs, and
downloading DBCC reports in a zip file format.
DBCC runs
A DBCC run refers to the execution of a DBCC. DBCC run information is stored in the ClaimCenter database. Each
DBCC run is assigned an id, the dbccId, which can be used to access that information any time after the DBCC was
run.
DBCC scopes
DBCC runs can execute every type of check on every table in the database. DBCC runs can also be limited to a
specific set of tables, and/or a specific set of check types, such as assignment checks. The complete list of DBCC check
types is defined in the ConsistencyCheckType typelist.
If you run the DBCCs only for the cc_activity table (but for all check types), then the description is:
If you run only the assignment check DBCCs (on all tables), then the description is:
If you run only the assignment check DBCCs for only the cc_activity table, then the description is:
Running DBCCs
Use the following endpoint to run database consistency checks:
• POST /systemtools/v1/batch-processes/{batchProcessType}/start
The value of {batchProcessType} must be: DBConsistencyCheck.
POST /systemtools/v1/batch-processes/DBConsistencyCheck/start
For example, the following request runs all DBCCs for the cc_activity and cc_address tables.
POST /systemtools/v1/batch-processes/DBConsistencyCheck/start
{
"data": {
"attributes": {
"dbconsistencycheck": {
"tableNames": [
"cc_activity",
"cc_address"
]
}
}
}
}
Note that ClaimCenter does not perform any validation to ensure that there are tables in the database with the specified
names. If there is no table corresponding to a provided table name, ClaimCenter ignores the name.
For example, the following request runs all DBCCs whose check type is either 0lengthstringcheck or
assignmentcheck.
POST /systemtools/v1/batch-processes/DBConsistencyCheck/start
{
"data": {
"attributes": {
"dbconsistencycheck": {
"checkTypes": [
"0lengthstringcheck",
"assignmentcheck"
]
}
}
}
}
Note that ClaimCenter does not perform any validation to ensure that there are check types in the data model with the
specified names. If there is no check type corresponding to provided check type name, ClaimCenter ignores the name.
POST /systemtools/v1/batch-processes/DBConsistencyCheck/start
{
"data": {
"attributes": {
"dbconsistencycheck": {
"description": "Start of Q1 maintenance"
}
}
}
}
POST /systemtools/v1/batch-processes/DBConsistencyCheck/start
{
"data": {
"attributes": {
"dbconsistencycheck": {
"tableNames": [
"cc_activity",
"cc_address"
],
" checkTypes ": [
"0lengthstringcheck",
"assignmentcheck"
],
"description": "Start of Q1 maintenance"
}
}
}
}
checks endpoint. Note that the Key value is expressed as an integer. For more information on this endpoint, see
“Querying for DBCC run information” on page 418.
For example, suppose you ran a DBCC that had errors. The GET /systemtools/v1/database-consistency-checks
endpoint identifies the Key for this run is 21. You have fixed the errors and now want to rerun the same DBCC. The
following request does this.
POST /systemtools/v1/batch-processes/DBConsistencyCheck/start
{
"data": {
"attributes": {
"dbconsistencycheck": {
"rerunKey": 21
}
}
}
}
ClaimCenter reruns a DBCC run only when the original DBCC run reported errors. If you provide a Key value that
does not correspond to a previous run with errors, ClaimCenter ignores the request.
GET /systemtools/v1/database-consistency-checks/cc:303
{
"data": {
"attributes": {
"description": "Tables: cc_activity, cc_address; Checks: All.",
"duration": "0.151",
"endTime": "2022-09-19T22:23:23.163Z",
"errors": 1,
"extensionsSchemaVersion": 508,
"id": "cc:303",
"key": 16,
"majorSchemaVersion": 50,
"minorSchemaVersion": 603,
"platformMajorSchemaVersion": 50,
"platformMinorSchemaVersion": 605,
"startTime": "2022-09-19T22:23:23.012Z",
"totalChecks": 17
},
The key value is needed to rerun DBCCs that report consistency errors on their first run.
The response does not include endTime if the DBCC is in progress.
Note that when you run a DBCC using the POST /systemtools/v1/batch-processes/DBConsistencyCheck/start
endpoint, the response does not include the dbccId value. This is because, for most batch processes, the results are not
stored in the database. Therefore, there is no "ID value" that can be provided for all batch process types. If you want to
run a DBCC and then download the report through Cloud API, you must execute three calls:
1. Execute the batch process with POST /systemtools/v1/batch-processes/DBConsistencyCheck/start
2. Retrieve the dbccID value with GET /systemtools/v1/database-consistency-checks
3. Get the DBCC report with GET /systemtools/v1/database-consistency-checks/{dbccId}/report
For some use cases, it’s necessary to have a schema with detailed graph and entity information. For this purpose,
ClaimCenter provides endpoints that retrieve schema information that can be used to navigate the graph structure for
various purposes and to build out custom user interfaces.
The schema endpoints return metadata about the business entities that are exposed by the API (such as Users and
Contacts) as normal JSON schema documents. In addition to standard JSON Schema properties, the schema endpoints
can also return additional application-specific metadata. This additional metadata is returned in the form of x-gw-*
properties.
The topics in this section describe the endpoints and query parameters for retrieving schemas. They also describe
properties that are specific to entity and graph schemas and not found in the standard business schemas (such as
OpenAPI).
GET /common/v1/entity-schemas/User
The schema returned by the entity-schemas/{entityId} endpoint returns the schema for the specified entity and
other schemas transitively referenced from that entity. In the preceding example, in the base configuration the returned
entity schema would include User, plus related schemas such as UserGroupReference and UserRoleReference.
However, it won’t return the schemas for any child entities. Instead it will return a list of children (if any) in the x-gw-
children property for each entity. (See "Child entities" in “Schema properties usage” on page 426 for more
information.)
To retrieve a specific entity along with the complete schema information for all its children, filter the entity-schemas
endpoint on rootEntity:
GET /common/v1/entity-schemas?filter=rootEntity:eq:{entityId}
Filtering on rootEntity retrieves a more detailed schema than using the entity-schemas/{entityId} endpoint by
traversing the entity graph tree and including all the child entities of the specified entity.
The following command retrieves a graph schema with entities such as Activity, Claim, and InjuryIncident.
Command
GET /claim/v1/graph-schema
Response
{
"$schema": "[Link]
"definitions": {
"Activity": {
"description": "An `Activity` is an assignable item that represents a task to be done, a decision to be made, or
information to be aware of",
"properties": {
"activityPattern": {
…
"Claim": {
"description": "An insurance claim",
"properties": {
"accidentType": {
…
"InjuryIncident": {
"description": "Information about a bodily injury",
"properties": {
…
description is provided along with possible values. Also listed for each parameter are any other parameters that must be
included in order for the given parameter to be used. See below for detailed descriptions of each.
includeLocalizations Include localization strings in the schema for all • {language code} none
localizable strings for the specified installed
• {language-region code}
languages.
• *all (all installed
Available only for entity-schemas endpoints.
languages)
includeLocalizations
The includeLocalizations query parameter includes localized versions of all strings in the schema response. Any
element that can be localized will include an x-gw-localizations property containing localized versions of the
associated schema property. (If no localized version for a given language exists, the value will be provided in the
default language.)
The localized languages that are displayed depend on the value assigned to the parameter. You can retrieve localized
strings for all installed languages (languages in the LangaugeType typelist) by assigning the *all value to the
parameter.
To retrieve localized strings for only specific languages, include the language code as the value. The language code can
be in any of the following formats:
• Language code, such as fr (French).
• Language and region, such as fr-CA (French, Canada) or fr-FA (French, France).
• Language and region with either a hyphen or an underscore. Both fr-CA and fr_CA will return French (Canada)
localized strings.
Note that the value is case-sensitive; you’ll receive an error if the installed language is en_US and you specify en_us.
Only installed languages can be specified. If you set a value to a language that is not installed you’ll receive an error.
The following examples show different options for calling includeLocalizations:
Retrieve localized values for all installed languages:
GET /common/v1/entity-schemas?includeLocalizations=*all
GET /common/v1/entity-schemas?includeLocalizations=en_US
GET /common/v1/entity-schemas?includeLocalizations=fr
GET /common/v1/entity-schemas?includeLocalizations=en,fr_CA
inlineTypelists
The inlineTypelists query parameter is used to include typelist metadata for each typekey field or term so that
typelist metadata doesn’t need to be fetched separately. Set inlineTypelists to true to enable this feature.
• GET /common/v1/entity-schemas?inlineTypelists=true
• GET /claim/v1/graph-schema?inlineTypelists=true
See “Choice values” on page 427 for more information and schema examples.
ETag support
The business entity schema endpoints support the use of ETags. An ETag response header is returned with every
request. The ETag acts as a checksum of schema content, so it changes depending on which query parameters you use.
Use the ETag with the If-None-Match request header. If this matches the current checksum, you’ll receive a "304 not
modified" response. If it doesn’t match, the request will be processed normally.
ETag is a standard HTTP header. More information can be found by doing an internet search.
Schema properties
The InsuranceSuite business entity schemas are returned as JSON documents using the JSON Schema Draft-7
specification. In addition to standard JSON schema properties, the business entity schemas include a number of
additional schema properties that include metadata about the entities and their representation in APIs and AppEvents.
• “Schema properties overview” on page 424
• “Schema properties usage” on page 426
x-gw-actions A list of logical actions that you can take on an entity. This “Cloud API endpoint
encompasses standard HTTP operations on the element or elements” on page 428
collection, as well as custom actions.
x-gw-after Applies to properties of format date or date-time. Indicates a “Date and date-time
date or date-time that the value must be later than. fields” on page 431
x-gw-before Applies to properties of format date or date-time. Indicates a “Date and date-time
date or date-time that the value must be earlier than. fields” on page 431
x-gw- For entities that can be accessed through a Cloud API endpoint, “Cloud API endpoint
canonicalCollectionUri this object contains the URI to the collection endpoint. elements” on page 428
x-gw-canonicalElementUri For entities that can be accessed through a Cloud API endpoint, “Cloud API endpoint
this object contains the URI to the individual element endpoint. elements” on page 428
x-gw-canonicalParent For entities that can be accessed through a Cloud API endpoint, “Cloud API endpoint
this object contains the ID of the parent entity. elements” on page 428
x-gw-calculatedValues An object whose keys represent schema properties that have “Calculated values” on
dynamic values. Dynamic values are calculated based on page 426
evaluation of static values retrieved through JsonLogic.
x-gw-children An object containing information about child objects of an “Child entities” on page
entity. 427
x-gw-choices This property contains typelist values associated with the entity “Choice values” on page
objects. It is included in the schema response when the 427
inlineTypelists query parameter is set to true.
x-gw-createOnly Indicates that a property can be set when creating the entity “Update restrictions” on
(during an initial POST), but not modified. page 438
x-gw-defaultValues An array of strings that indicate what default views a property “Cloud API responses” on
will appear in. Possible values include detail, summary, and page 429
none.
x-gw-dynamicProperties An object where each key in the map represents a named rule. “Rules” on page 436
The values of such keys have a jsonLogic object defining the
rules.
x-gw-entityId A marker on every schema that corresponds to an entity that “Entity ID” on page 431
contains the id of that entity.
x-gw-filterBy Applies to typekey properties that have typelists that are “Typekey references” on
filtered by categories from other typelists represented on the page 438
same object. This property is an array of schema property
names for the filtering typekey properties.
x-gw-forbidden This property contains an array of one or more values that • “Forbidden fields” on
indicate properties that are forbidden for use in a particular page 432
context. Often used within an x-gw-rules object to identify
fields that cannot be used in certain situations. • “Country-specific
fields” on page 430
x-gw-includedInAppEvents Used to determine whether a property is event safe. Only for “Event safety” on page 432
use when integrating through App Events.
x-gw-localizations When the “Localizations” on page
433
includeLocalizations query parameter is set to true, this
property is included in the schema to show localized versions of
strings for every installed language.
x-gw-maximum Used to represent a maximum value for a property that is not a “Numeric values” on page
standard JSON integer or decimal, such as a gw-bigdecimal 434
or MonetaryAmount object.
x-gw-minimum Used to represent a minimum value for a property that is not a “Numeric values” on page
standard JSON integer or decimal, such as a gw-bigdecimal 434
or MonetaryAmount object.
x-gw-patchOnly Indicates that the value can be set only during updates (PATCH “Update restrictions” on
requests), not during the initial creation (POST request). page 438
x-gw-precision The precision of a fixed-point decimal value (the total number “Numeric values” on page
of digits allowed in a number). 434
x-gw-reference-schema The name of the schema definition associated with a given type “References” on page 435
when a property is a reference (such as SimpleReference).
x-gw-referenceType The name of the referenced entity type when a property is a “References” on page 435
reference (such as SimpleReference).
x-gw-requiredForCreate An array of property names for properties whose values must “Required properties” on
be specified as part of POST requests to create a new entity. page 435
x-gw-requiredForValidation This property identifies fields that are required for a particular • “Required properties”
entity to be valid. A typical use case is to define required fields on page 435
in an address.
• “Country-specific
fields” on page 430
x-gw-resourceReference A marker attached to schema definitions such as “References” on page 435
SimpleReference that indicates that the schema represents a
reference to another entity.
x-gw-rules This property contains a jsonLogic attribute where you can • “Rules” on page 436
apply conditional rules to various schema elements.
• “Country-specific
fields” on page 430
x-gw-scale The scale of a fixed-point decimal value (the number of digits “Numeric values” on page
allowed to the right of the decimal point). 434
x-gw-sortOrder The sequence number of coverables, clauses, covTerms, • “Sort order” on page
questions, modifiers, rate factors, and scheduled item 438
properties defined in APD.
• “Choice values” on
page 427
x-gw-typelist The name of the typelist when the property is a reference to a “Typekey references” on
TypeKeyReference. page 438
Calculated values
APD supports calculated values for coverage terms on a parent coverage where the minimum or maximum are
calculated based on terms on the child coverages. For example, the parent coverage can have a limit whose minimum
value is the sum of the limits of a set of child coverages. Calculated values can use a sum, min, or max across the child
terms, or be a direct reference to a child term.
The entity schema provides the x-gw-calculatedValues property to support this type of scenario. This property is an
object whose keys represent schema properties that have dynamic values rather than static values. Each schema
property will have a value with a jsonLogic property that can be evaluated, resulting in the concrete value to attach to
that schema property.
The x-gw-calculatedValues property is primarily intended for use by client code that uses schema-based validation.
In order to interpret the calculated values at runtime, a client needs to iterate through each property on the x-gw-
calculatedValues object, evaluate the JsonLogic expression for that property, and then attach the resulting value to
the containing schema definition.
See [Link] for more information on using JsonLogic.
The following is an example of a calculated value. This is a simple example where the value must be retrieved from
another entity:
"x-gw-calculatedValues": {
"x-gw-maximum": {
"jsonLogic": {
"+": {
"uri": "/jobs/{jobId}/lines/TSTLine/test-coverables/{testCoverableId}/coverages/TSTChildCov/
[Link][0].value"
}
}
}
}
Child entities
An entity can (but doesn’t have to) have child objects. These child objects are returned in the x-gw-children schema
object. The following properties can be included with the x-gw-children object:
• childType: The type related to certain product model metadata. See "Special child types" below.
• description: A description of the children.
• graphProperty: The property used to attach these children in the schema.
• id: The id of the child entity.
• title: The title for the children.
• urlPart: The URL fragment used for the collection of child entities in the API.
The following example shows some of the children for the Account entity in the base configuration:
"x-gw-children": [
{
"id": "Activity",
"urlPart": "activities"
},
{
"id": "Assignee",
"urlPart": "activity-assignees"
},
{
"id": "ActivityPattern",
"urlPart": "activity-patterns"
},
Choice values
For entities that contain choice values, the entity schema returns the x-gw-choices object. You must include the query
parameter inlineTypelists set to true to retrieve this object. The object contains the following properties:
sortOrder The canonical sort order for the choice, relative to other choices in the same list. • Typelists
• Option/package choices
• Coverage term choices
categories A list of strings that indicate the categories the typekey belongs to. Categories are • Option/package choices
presented in the form [Link], such as [Link].
• Coverage term choices
values An array of additional values relating to coverage terms. • Coverage term choices
"accountStatus": {
"$ref": "#/definitions/TypeKeyReference",
"description": "The current status of this account",
"readOnly": true,
"title": "Account status",
"x-gw-typelist": "AccountStatus"
},
This example shows that accountStatus is a typelist of type AccountStatus, but the values of that typelist are not
displayed. When you add inlineTypelists=true to the endpoint query string, the individual values are included in
the schema in the x-gw-choices object:
"accountStatus": {
"$ref": "#/definitions/TypeKeyReference",
"description": "The current status of this account",
"readOnly": true,
"title": "Account status",
"x-gw-choices": [
{
"code": "Active",
"description": "The account is fully ready and open, and submissions have been created for it.",
"name": "Active",
"sortOrder": 0
},
{
"code": "Merged",
"description": "The account has been merged into another account and is available for read only access.",
"name": "Merged",
"sortOrder": 1
},
{
"code": "Pending",
"description": "The account is ready for data entry, but data entry is still ongoing and the account is not
considered fully open.",
"name": "Pending",
"sortOrder": 2
},
{
"code": "Withdrawn",
"description": "The account has been withdrawn from consideration for business with the carrier.",
"name": "Withdrawn",
"sortOrder": 3
}
],
"x-gw-typelist": "AccountStatus"
Notice the sortOrder value under each choice. This ordering can be used to ensure the desired order of user interface
elements. See “Sort order” on page 438 for more information.
◦ actionTarget: Whether the command applies to the individual element endpoint or the collection endpoint.
◦ description: Optional. Describes the action.
◦ urlSuffix: Optional. An additional action that can be taken on the endpoint by using the httpMethod with the
endpoint, followed by the urlSuffix at the end of the endpoint. (See example below.)
For example, here are the endpoint elements available for the RolePermission entity:
This example shows that you can take the following actions on the RolePermission entity through Cloud API:
• GET a collection of role permissions. (GET /admin/v1/roles/{roleId}/permissions)
• Create a new role permission with the POST command on the permissions collection. (POST /admin/v1/roles/
{roleId}/permissions)
• DELETE a single role permission. (DELETE /admin/v1/roles/{roleId}/permissions/{permissionId})
• GET a single role permission. (GET /admin/v1/roles/{roleId}/permissions/{permissionId})
Note that the x-gw-canonicalParent identifies the Role entity as the canonical parent of RolePermissions.
"AccountContact": {
...
"properties": {
"accountContactRoles": {
...
"x-gw-defaultViews": [
"detail"
],
...
},
The following command retrieves a single account contact, and therefore displays the accountContactRoles property:
Command
GET /account/v1/accounts/pc:Su4p27AlTSug_SWq-8koA/contacts/pc:S9rwT9nWtFBArb3GFDwkc
Response
{
"data": {
"attributes": {
"accountContactRoles": [
{
"code": "AccountHolder",
"name": "AccountHolder"
}
],
"active": true,
"authorizationID": "S5qmqyeE_7azM0VwejF2r",
"cellPhone": {
"countryCode": {
"code": "US",
"name": "United States (1)"
},
However, when the collection of account contacts is retrieved, account contact roles is not included:
Command
GET /account/v1/accounts/pc:Su4p27AlTSug_SWq-8koA/contacts
Response
{
"count": 5,
"data": [
{
"attributes": {
"authorizationID": "S5qmqyeE_7azM0VwejF2r",
"cellPhone": {
"countryCode": {
"code": "US",
"name": "United States (1)"
},
Country-specific fields
Entity schemas use JSON logic conditional rules to define whether certain fields are forbidden or required based on the
country. In some cases a field might be forbidden for use in a particular county. In other cases, such as addresses,
required fields differ by country. These rules are specified in the x-gw-rules property.
Note: See “Rules” on page 436 and “Forbidden fields” on page 432 for more information.
In this example, there is a rule on PolicyLocation that makes certain location fields forbidden and others required for
the US:
"x-gw-entityId": "PolicyLocation",
"x-gw-rules": [
{
"jsonLogic": {
"if": [
{
"===": [
{
"var": "country"
},
"US"
]
},
{
"x-gw-dynamicPropertiesMarker": true,
"x-gw-forbidden": [
"CEDEX",
"addressLine1Kanji",
"addressLine2Kanji",
"area",
"cityKanji",
"department",
"emirate",
"island",
"oblast",
"parish",
"prefecture",
"province"
],
"x-gw-requiredForValidation": [
"addressLine1",
"city",
"postalCode",
"state"
]
},
In some cases the same set of rules apply to multiple countries. In those cases, all countries are listed in an array using
in logic on the rules, as shown here:
"x-gw-rules": [
{
"jsonLogic": {
"if": [
{
…
},
{
"in": [
{
"var": "country"
},
[
"AS",
"AU",
"FM",
"GU",
"IN",
"MH",
...
"dateOfBirth": {
"description": "The person's date of birth. Only applicable for an `AccountContact` that represents a person.",
"format": "date",
"nullable": true,
"title": "Date of birth",
"type": "string",
"x-gw-before": "now"
},
Entity ID
Every schema that contains an entity has a corresponding entity ID. For example, the User schema has an entity ID of
User:
"x-gw-entityId": "User"
In contrast, the SimpleReference schema is not an entity, and therefore does not have an x-gw-entityId property.
Note that the x-gw-entityId property is available only when a schema is retrieved through the entity-schemas
endpoints.
Event safety
When you’re integrating with Guidewire InsuranceSuite through App Events, it’s important to know whether a
property is event safe. You can determine the event safety of a property by looking for the x-gw-
includedInAppEvents property.
If a property is not event safe, it will have an x-gw-includedInAppEvents property with a value of false. If a
property is event safe, x-gw-includedInAppEvents will not be present on the property.
If you are not integrating through App Events, you can ignore the x-gw-includedInAppEvents property.
See App Events for more information on App Events.
Forbidden fields
The schema can include the x-gw-forbidden property. This property is an array used to indicate that one or more
properties are not allowed or available under certain conditions. It is often defined inside JsonLogic decisions that
provide the conditions under which something is forbidden. (See [Link] for more information on using
JsonLogic.)
This example shows a section of the schema that indicates certain properties are forbidden based on a contact subtype:
"x-gw-rules": [
{
"jsonLogic": {
"if": [
…
{
"in": [
{
"var": "contactSubtype"
},
[
"Adjudicator",
"Person",
"PersonVendor",
"UserContact"
]
]
},
{
"x-gw-dynamicPropertiesMarker": true,
"x-gw-forbidden": [
"companyName"
]
},
{
"in": [
{
"var": "contactSubtype"
},
[
"LegalVenue",
"Place"
]
]
},
{
"x-gw-dynamicPropertiesMarker": true,
"x-gw-forbidden": [
"applicableGoodDriverDiscount",
"cellPhone",
"companyName",
…
]
},
The x-gw-forbidden property is used in several contexts. It is used to designate forbidden fields for things such as:
• Subtype-specific fields.
• Product edition rules that indicate that a given element is unavailable for that edition.
• Choices on options, packages, or typekeys. In these cases, x-gw-forbidden is an array of objects, where each
object has a code and name for the forbidden choice.
See “Country-specific fields” on page 430 for more examples of x-gw-forbidden.
Localizations
When you call the schema retrieval endpoint with the includeLocalizations parameter set to true, the returned
schema will contain localized versions of all localizable strings in the schema. (See “includeLocalizations” on page 423
for information on using this parameter.) If you also specify the inlineTypelists parameter, localized strings will be
included for typelist values. Similarly, if you specify the inlineProductDefinition parameter, localized strings will
be included for localizable product model elements such as coverage names and descriptions.
Localization strings are returned on the x-gw-localizations property on the associated element. The value of x-gw-
localizations is an object with a key for each localized property, such as title or description. The values of those
keys are another object with key/value pairs for each requested language and the localized value for those languages.
For example, suppose you have two languages configured, English (US) and French (France). You also have a schema
object on an entity named username. The object looks like this:
"username": {
"description": "The username for the user",
"maxLength": 30,
"minLength": 1,
"pattern": "\\S",
"title": "Username",
"type": "string",
GET /common/v1/entity-schemas?includeLocalizations=*all
Schema example
"x-gw-localizations": {
"description": {
"en_US": "The username for the user",
"fr_FR": "Le nom d’utilisateur de l’utilisateur"
},
"title": {
"en_US": "Username",
"fr_FR": "Nom d’utilisateur"
}
}
GET /common/v1/entity-schemas?includeLocalizations=en_US
Schema example
"x-gw-localizations": {
"description": {
"en_US": "The username for the user"
},
"title": {
"en_US": "Username"
}
}
GET /common/v1/entity-schemas?includeLocalizations=en_US&inlineTypelists=true
Schema example
"vacationStatus": {
"$ref": "#/definitions/TypeKeyReference",
"description": "Indicates whether the user is considered to be on vacation",
"title": "Vacation status",
"x-gw-choices": [
{
"code": "atwork",
"description": "The user is at work",
"name": "At work",
"sortOrder": 0,
"x-gw-localizations": {
"description": {
"en-US": "The user is at work"
},
"name": {
"en-US": "At work"
}
}
},
{
"code": "onvacation",
"description": "The user is on vacation",
"name": "On vacation",
"sortOrder": 1,
"x-gw-localizations": {
"description": {
"en-US": "The user is on vacation"
},
"name": {
"en-US": "On vacation"
}
}
},
…
],
"x-gw-localizations": {
"description": {
"en-US": "Indicates whether the user is considered to be on vacation"
},
"title": {
"en-US": "Vacation status"
}
},
"x-gw-typelist": "VacationStatusType"
},
A value will always be included in x-gw-localizations for each installed language. If the value has not been
localized for a language, normal localization fallback rules will apply. If a language code and region are specified, the
first fallback will be to language code, then to the default language. For example, suppose fr_CA (Frech, Canada) is an
installed language. If there is no localization for a particular property for fr_CA, it will fall back to a value specified for
fr (French). If there is no localized value for fr, the value will be the default language (if the default language is not
fr_CA or fr).
Command
GET /common/v1/entity-schemas?includeLocalizations=en_US,fr_FR
Schema example
"x-gw-localizations": {
"description": {
"en_US": "The username for the user",
"fr_FR": "The username for the user"
},
"title": {
"en_US": "Username",
"fr_FR": "Username"
}
}
Numeric values
Properties that are numeric types can have additional defining properties depending on the type of value.
Fixed-point decimal values
Certain decimal values need to be restricted as to the maximum number of digits allowed in the value. This is depicted
in the schema through the x-gw-precision and x-gw-scale properties:
• x-gw-precision: The maximum number of digits allowed for a value.
• x-gw-scale: The scale of the value, such as the maximum number of digits to the right of a decimal point.
These properties apply only to elements of type gw-bigdecimal and to MonetaryAmount references.
In this example, the cost of a new car can be up to 18 digits, with up to two digits following the decimal point:
"PersonalVehicle": {
"description": "Personal Vehicle",
"properties": {
...
"costNew": {
"$ref": "#/definitions/MonetaryAmount",
"description": "Original retail cost of car.",
"nullable": true,
"title": "Cost New",
"x-gw-precision": 18,
"x-gw-scale": 2,
"x-gw-sortOrder": 6
},
"amount": {
"$ref": "#/definitions/MonetaryAmount",
"description": "The transaction amount for the effective time",
"readOnly": true,
"title": "Amount",
"x-gw-maximum": 5000,
"x-gw-minimum": 250
},
References
There are some schema definitions that are references to other entities. Examples are entities such as SimpleReference
and GroupReference. When this is the case, the entity has an x-gw-resourceReference property set to true.
"x-gw-resourceReference": true
For properties that are reference types, such as SimpleReference, the name of the referenced entity type is defined in
the x-gw-referenceType property. The name of the schema definition associated with a given type is specified in the
x-gw-reference-schema property. In this example, accountHolder is a SimpleReference associated with the
AccountContact schema, of type AccountContact:
"accountHolder": {
"$ref": "#/definitions/SimpleReference",
"description": "A reference to the `AccountContact` that represents the owner of the policies for this account",
"title": "Account holder",
"x-gw-reference-schema": "AccountContact",
"x-gw-referenceType": "AccountContact"
},
Required properties
Some entities have a required property. This property is an array containing a list of properties that must have values
on instances of the entity. In addition, there are properties that are required only when certain actions, such as creation
or validation, take place on those entities.
• requiredForCreate: The property must have a value for an entity to be created.
• requiredForValidation: The property must have a value for the object to validate.
For example, the following specifies that an address cannot be validated if there are not values for addressLine1,
city, postalCode, and state:
"x-gw-requiredForValidation": [
"addressLine1",
"city",
"postalCode",
"State"
]
Rules
The entity schema applies rules to some entities, both conditional and non-conditional. Rules are required for several
different areas of the schema. For details on some of the specific areas of the entity schema where rules are used, see
the following sections:
• “Country-specific fields” on page 430
Rules Overview
In some cases there is schema metadata about a business entity, or associated product model entity, that is conditional
rather than static. To support those use cases, where possible the Guidewire schema APIs translate those rules into
conditions using the JsonLogic format. The JsonLogic expressions, when evaluated, will return a JSON object that
might contain additional JSON Schema properties to apply to the attached schema.
For example, if a direct coverage term has a conditional maximum value, the directValue schema property for the
term's schema will have an x-gw-rules array with an object representing this rule. Evaluating the JsonLogic
expression for the associated rule might return a result such as:
{
"x-gw-dynamicPropertiesMarker": true,
"x-gw-maximum": "500.00"
}
This means that the x-gw-maximum schema property needs to be applied to the term's schema dynamically, replacing
any value that might already be there. If the result returns null or the empty object, it means no changes to the schema
are needed. (The x-gw-dynamicPropertiesMarker property is a marker property that can be ignored at runtime).
JsonLogic expressions need to be evaluated using the associated root API object's attributes as the context for
evaluation.
See [Link] for more information on using JsonLogic.
The following are examples of places where rules can be attached:
• Field existence rules are attached to the containing schema definition.
• Field min/max/default rules are attached to the associated property definition.
• Field typekey existence rules are attached to the associated property definition.
• Clause existence rules are attached to the _Coverages schema definition that defines a container for all coverages
on the coverable.
• Term existence rules are attached to the terms property on the _Coverage schema definition.
• Term min/max/default rules are attached to the Value property for the term, such as directValue.
• Term option/package/typekey existence rules are attached to the choiceValue or typekeyValue property for the
term.
Rules Examples
Conditional rules are provided with JsonLogic. Often (but not always) this logic is nested within the x-gw-rules array.
Here’s an example. (Note that while this example pertains specifically to PolicyCenter, the functionality of x-gw-rules
is the same across all InsuranceSuite products.)
"x-gw-rules": [
{
"jsonLogic": {
"if": [
{
"===": [
{
"uri": "/jobs/{jobId}/lines/PersonalAutoLine/integerProperty"
},
1002
},
{
"x-gw-dynamicPropertiesMarker": true,
"x-gw-maximum": "500.00"
}
},
{
"===": [
{
"uri": "/jobs/{jobId}/lines/PersonalAutoLine/integerProperty"
},
1003
]
},
{
"x-gw-dynamicPropertiesMarker": true,
"x-gw-maximum": "400.00"
},
In this case, if the property at the specified uri is equal to 1002, the maximum value for this property is 500. But if the
value is 1003, the maximum is 400.
Rules can also exist without conditions. For example, if a direct coverage term always has a maximum of 500.00 for a
particular product edition, fetching the schema in the context of that edition includes the property directly.
"directValue": {
"x-gw-maximum": "500.00",
…
}
The x-gw-rules property is an array of JsonLogic rules. Another property, x-gw-dynamicProperties, is similar to x-
gw-rules, but instead of being an array, it’s an object containing named rules. In this example, there are two named
rules, one for accountHolderCreation and one for primaryLocationCreation:
"x-gw-dynamicProperties": {
"accountHolderCreation": {
"forbiddenError": "Exactly one of either 'accountHolder' or 'initialAccountHolder' is required on creation",
"jsonLogic": {
"if": [
{
"===": [
{
"var": "accountHolder"
},
null
]
},
{
"x-gw-dynamicPropertiesMarker": true,
"x-gw-requiredForCreate": [
"initialAccountHolder"
]
},
{
"x-gw-dynamicPropertiesMarker": true,
"x-gw-forbidden": [
"initialAccountHolder"
]
}
]
},
"requiredError": "Exactly one of either 'accountHolder' or 'initialAccountHolder' is required on creation"
},
"primaryLocationCreation": {
"forbiddenError": "Exactly one of either 'primaryLocation' or 'initialPrimaryLocation' is required on creation",
"jsonLogic": {
"if": [
{
"===": [
{
"var": "primaryLocation"
},
null
]
},
{
"x-gw-dynamicPropertiesMarker": true,
"x-gw-requiredForCreate": [
"initialPrimaryLocation"
]
},
{
"x-gw-dynamicPropertiesMarker": true,
"x-gw-forbidden": [
"initialPrimaryLocation"
]
}
]
},
Sort order
Sort order is preserved in various situations and can be used to ensure the desired order of user interface elements.
sortOrder
In this example, the order of Account Status choices has been preserved through the sortOrder on the choice options,
with Active first, Merged second, and so on. Note that counting starts at 0, so the first choice is sortOrder 0.
"accountStatus": {
"$ref": "#/definitions/TypeKeyReference",
"description": "The current status of this account",
"readOnly": true,
"title": "Account status",
"x-gw-choices": [
{
"code": "Active",
"description": "The account is fully ready and open, and submissions have been created for it.",
"name": "Active",
"sortOrder": 0
},
{
"code": "Merged",
"description": "The account has been merged into another account and is available for read only access.",
"name": "Merged",
"sortOrder": 1
},
{
"code": "Pending",
"description": "The account is ready for data entry, but data entry is still ongoing and the account is not
considered fully open.",
"name": "Pending",
"sortOrder": 2
},
Update restrictions
Some properties can be assigned values only when the entity is first created. In those cases, the property will have a
value of x-gw-createOnly set to true.
For example, an initial account holder can be specified only at the time the account is created (POST), and cannot be
modified later.
"Account": {
...
"initialAccountHolder": {
...
"title": "Initial account holder",
"x-gw-createOnly": true
},
In other cases, a property can be assigned a value only when the entity is updated (PATCH). In those cases, the property
will have x-gw-patchOnly set to true:
"x-gw-patchOnly": true
Typekey references
Some properties in the schema are used to identify typekey properties and behaviors.
Typelist
If an element in the schema is a TypeKeyReference, the applicable typelist is specific in the x-gw-typelist property.
In this example, the organizationType property is a TypeKeyReference to the AccountOrgType typelist:
"organizationType": {
"$ref": "#/definitions/TypeKeyReference",
"description": "The type of organization of the company or person represented by this account, such as `individual`
or `corporation`",
"nullable": true,
"title": "Organization type",
"x-gw-typelist": "AccountOrgType"
},
Filter
Some typelists are filtered by categories from other typelists represented on the same object. The x-gw-filterBy
property contains an array of categories on which to filter. For example, a country typelist might include states,
provinces, islands, and so on. Not all of these options apply to all countries. In these cases, the typelist needs to be
filtered by country, as in the following examples:
"province": {
"$ref": "#/definitions/TypeKeyReference",
"description": "The province of the location's address. Only applicable in certain countries.",
"nullable": true,
"title": "Province",
"x-gw-createOnly": true,
"x-gw-filterBy": [
"country"
],
"x-gw-typelist": "State"
},
"state": {
"$ref": "#/definitions/TypeKeyReference",
"description": "The state of the location's address. Only applicable in certain countries.",
"nullable": true,
"title": "State",
"x-gw-createOnly": true,
"x-gw-filterBy": [
"country"
],
"x-gw-typelist": "State"
}
To facilitate development, Cloud API includes a Test Util API. The Test Util API is an API that provides functionality
to facilitate testing during development. The API is also sometime referred to by its internal name (testutil).
By default, the Test Util API is not enabled.
WARNING: The Test Util API is intended for use in a development environment only. Do not use the Test Util
API on a production system.
Learn more about the Test Util API and some of the available endpoints:
• “Enabling the Test Util API” on page 441
• “View the Test Util API in Swagger UI” on page 442
• “Test Util API endpoints” on page 442
published-apis.PUBLISHEDAPIS_testutil_publish = true
plugin.PLUGIN_IPOLICYSEARCHADAPTER_PROFILE = testutil-api
PUBLISHEDAPIS_testutil_publish = true
PLUGIN_IPOLICYSEARCHADAPTER_PROFILE = testutil-api
published-apis.PUBLISHEDAPIS_testutil_publish = true
plugin.PLUGIN_IPOLICYSEARCHADAPTER_PROFILE = testutil-api
WARNING: The Test Util API is intended for use in a development environment only. Do not use the Test Util
API on a production system.
After you enable Test Util, you can use Swagger UI to view the Test Util API definition. (See “Enabling the Test Util
API” on page 441 for instructions on enabling Test Util.)
Procedure
1. Start ClaimCenter.
2. In a web browser, enter the URL for Swagger UI. This loads the Swagger UI tool.
• The format of the URL is <applicationURL>/resources/swagger-ui/
• For example, for a local instance of ClaimCenter, use: [Link]
ui/
3. In the text field at the top of the Swagger UI interface, enter the following URL:
• <applicationURL>/rest/test-util/v1/[Link]
4. Click Explore.
WARNING: The Test Util API is intended for use in a development environment only. Do not use the Test Util
API on a production system.
The following table lists the endpoints in the Test Util API that are used most often, and where you can go to get more
information about them.