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 PolicyCenter 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, PolicyCenter calculates the checksum and compares that value to the submitted checksum value.

  • If the values match, PolicyCenter 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, PolicyCenter determines the resource has been changed since the caller application last acquired the data. The request is not executed, and PolicyCenter 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.

Resources that map to multiple data model entities

Most resources correspond to a single data model entity. For example, the properties in the Activity resource map to a single data model entity - the Activity data model entity.

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.