External Two squares, one overlapping the bottom one. Top square has an arrow pointing away, as if leading you away

Commercial policy benchmark

Introduction of the Commercial Policy Benchmark API

The Commercial Policy Benchmark API will allow users to programmatically query for benchmarking data for a given input peer group. Benchmarking data consists of Zywave’s vast database of existing policy data from our data sharing partners and from our proprietary curated data set which is sourced from various publicly available data sources. A connecting application has to specify a peer group and the API will return various data points that will generate data set that is comparable to the data presented within Benchmark Analysis today.

Calling the Commercial Policy Benchmark API

All calls to the API must be authenticated via single sign-on. After authentication you will receive an access token. You will add the http header ‘Authorization” with value of 'Bearer $ACCESS_TOKEN’ to all your http requests.

Zywave has published authorization_endpoint and token_endpoint at https://auth.zywave.com/.well-known/openid-configuration to allow your application’s users to obtain an access token and utilize the API.

To obtain an access token for your user, your custom application code would have to utilize the correct OpenID Connect library for your application’s technical stack that follows Oauth 2.0 standard.

Zywave have provided examples of making test calls to API that you can use as a reference. You can follow along the examples here https://api.zywave.com/docs/making-api-test-calls

Assessment Data

GET https://api.zywave.com/commercialpolicybenchmark/v2.0/assessment/getassessmentdata

This endpoint will return the Assessment Data which is comprised by:

Without adding either the oldestTrailing or newestTrailing parameters, the default logic will take the past 2 years.

Parameters

Parameter Name Description Type Required
naics Naics Code 2/3 String Yes
coverageId Coverage ID Integer Yes
lineOfBusinessId Line of Business ID/IDs (separated by comma) String Yes (default: "0")
exposureType Exposure Type Description String Yes (default: "Revenues")
exposureRangeLow Exposure Range Low Value Number (decimal) Yes
exposureRangeHigh Exposure Range High Value Number (decimal) Yes
organizationType Type of Organization String No (default: "All")
premium Premium Amount Number (decimal) No (default: "0")
limit Limit Amount Number (decimal) No (default: "0")
retention Retention Amount Number (decimal) No (default: "0")
oldestTrailing Programs effective based on months back. Acceptable inputs: 24, 12, 9, 6, 3 Number (int) No (default: "0")
newestTrailing Programs effective based on months back. Must be less than OldestTrailing. Acceptable inputs: 12, 9, 6, 3, 0 Number (int) No (default: "0")
Sample Request

curl --location --request GET "https://api.zywave.com/commercialpolicybenchmark/v2.0/assessment/getassessmentdata?naics=55&coverageId=12&lineOfBusinessId=0&exposureType=Revenues&exposureRangeLow=1000000&exposureRangeHigh=100000000&organizationType=All&premium=1000000&limit=1000000&retention=1000000&oldestTrailing=24&newestTrailing=12" \
     --header 'Accept: application/json' \
     --header 'Authorization: Bearer $ACCESS_TOKEN'
Sample Response

{
  "limitDistribution": {
    "chartDescription": "The selected company's limit of $1,000,000 puts it in the 0 percentile in relation to its peers.",
    "bands": [
      {
        "bandSeq": 1,
        "bandDescription": "0-100K",
        "programCount": 0
      },
      {
        "bandSeq": 2,
        "bandDescription": "100K-250K",
        "programCount": 0
      },
      {
        "bandSeq": 3,
        "bandDescription": "250K-500K",
        "programCount": 0
      },
      {
        "bandSeq": 4,
        "bandDescription": "500K-750K",
        "programCount": 0
      },
      {
        "bandSeq": 5,
        "bandDescription": "750K-1M",
        "programCount": 6
      },
      {
        "bandSeq": 6,
        "bandDescription": "1M-2M",
        "programCount": 1
      },
      {
        "bandSeq": 7,
        "bandDescription": "2M-5M",
        "programCount": 11
      },
      {
        "bandSeq": 8,
        "bandDescription": "5M-10M",
        "programCount": 0
      },
      {
        "bandSeq": 9,
        "bandDescription": "10M-20M",
        "programCount": 0
      },
      {
        "bandSeq": 10,
        "bandDescription": "20M-30M",
        "programCount": 0
      },
      {
        "bandSeq": 11,
        "bandDescription": "30M-50M",
        "programCount": 0
      },
      {
        "bandSeq": 12,
        "bandDescription": "50M-75M",
        "programCount": 0
      },
      {
        "bandSeq": 13,
        "bandDescription": "75M-100M",
        "programCount": 0
      },
      {
        "bandSeq": 14,
        "bandDescription": "100M-150M",
        "programCount": 0
      },
      {
        "bandSeq": 15,
        "bandDescription": "150M-250M",
        "programCount": 0
      },
      {
        "bandSeq": 16,
        "bandDescription": "250M-500M",
        "programCount": 0
      },
      {
        "bandSeq": 17,
        "bandDescription": "500M-1B",
        "programCount": 0
      },
      {
        "bandSeq": 18,
        "bandDescription": "> 1B",
        "programCount": 0
      }
    ]
  },
  "premiumDistribution": {
    "chartDescription": "The selected company's premium of $1,000,000 puts it in the 95th percentile in relation to its peers.",
    "bands": [
      {
        "bandSeq": 1,
        "bandDescription": "0-1K",
        "programCount": 1
      },
      {
        "bandSeq": 2,
        "bandDescription": "1K-2K",
        "programCount": 5
      },
      {
        "bandSeq": 3,
        "bandDescription": "2K-5K",
        "programCount": 3
      },
      {
        "bandSeq": 4,
        "bandDescription": "5K-10K",
        "programCount": 7
      },
      {
        "bandSeq": 5,
        "bandDescription": "10K-25K",
        "programCount": 7
      },
      {
        "bandSeq": 6,
        "bandDescription": "25K-50K",
        "programCount": 8
      },
      {
        "bandSeq": 7,
        "bandDescription": "50K-75K",
        "programCount": 4
      },
      {
        "bandSeq": 8,
        "bandDescription": "75K-100K",
        "programCount": 1
      },
      {
        "bandSeq": 9,
        "bandDescription": "100K-150K",
        "programCount": 1
      },
      {
        "bandSeq": 10,
        "bandDescription": "150K-250K",
        "programCount": 0
      },
      {
        "bandSeq": 11,
        "bandDescription": "250K-500K",
        "programCount": 0
      },
      {
        "bandSeq": 12,
        "bandDescription": "500K-750K",
        "programCount": 0
      },
      {
        "bandSeq": 13,
        "bandDescription": "750K-1M",
        "programCount": 0
      },
      {
        "bandSeq": 14,
        "bandDescription": "1M-2M",
        "programCount": 0
      },
      {
        "bandSeq": 15,
        "bandDescription": "2M-3M",
        "programCount": 0
      },
      {
        "bandSeq": 16,
        "bandDescription": "3M-5M",
        "programCount": 0
      },
      {
        "bandSeq": 17,
        "bandDescription": "5M-10M",
        "programCount": 0
      },
      {
        "bandSeq": 18,
        "bandDescription": "> 10M",
        "programCount": 0
      }
    ]
  },
  "retentionDistribution": {
    "chartDescription": "The selected company's retention of $1,000,000 puts it in the 41st percentile in relation to its peers.",
    "bands": [
      {
        "bandSeq": 1,
        "bandDescription": "0-1K",
        "programCount": 0
      },
      {
        "bandSeq": 2,
        "bandDescription": "1K-2K",
        "programCount": 0
      },
      {
        "bandSeq": 3,
        "bandDescription": "2K-5K",
        "programCount": 2
      },
      {
        "bandSeq": 4,
        "bandDescription": "5K-10K",
        "programCount": 4
      },
      {
        "bandSeq": 5,
        "bandDescription": "10K-15K",
        "programCount": 1
      },
      {
        "bandSeq": 6,
        "bandDescription": "15K-25K",
        "programCount": 7
      },
      {
        "bandSeq": 7,
        "bandDescription": "25K-50K",
        "programCount": 2
      },
      {
        "bandSeq": 8,
        "bandDescription": "50K-100K",
        "programCount": 0
      },
      {
        "bandSeq": 9,
        "bandDescription": "100K-250K",
        "programCount": 0
      },
      {
        "bandSeq": 10,
        "bandDescription": "250K-500K",
        "programCount": 0
      },
      {
        "bandSeq": 11,
        "bandDescription": "500K-750K",
        "programCount": 0
      },
      {
        "bandSeq": 12,
        "bandDescription": "750K-1M",
        "programCount": 0
      },
      {
        "bandSeq": 13,
        "bandDescription": "1M-2.5M",
        "programCount": 0
      },
      {
        "bandSeq": 14,
        "bandDescription": "2.5M-5M",
        "programCount": 1
      },
      {
        "bandSeq": 15,
        "bandDescription": "5M-10M",
        "programCount": 0
      },
      {
        "bandSeq": 16,
        "bandDescription": "10M-25M",
        "programCount": 0
      },
      {
        "bandSeq": 17,
        "bandDescription": "> 25M",
        "programCount": 0
      }
    ]
  }
}

Response Definitions

Response Item Description Data Type
limitDistribution Contains the limit distribution chart data Object
premiumDistribution Contains the premium distribution chart data Object
retentionDistribution Contains the retention distribution chart data Object
chartDescription Chart Description Text String
bands Contains an array of objects that contain the actual chart data for plotting Object
bandSeq Plot point sequence Integer
bandDescription Range Description String
programCount Program Count of the current band Integer

Get RPM Distribution Data

GET https://api.zywave.com/commercialpolicybenchmark/v2.0/assessment/getrpmdistributiondata

This endpoint will provide RPM distribution data based on user input/parameters. Without adding either the oldestTrailing or newestTrailing parameters, the default logic will take the past 2 years.

Parameters

Parameter Name Description Type Required
naics NAICs Code 2/3 String Yes
coverageId Coverage ID Integer Yes
lineOfBusinessId Line of Business ID/IDs (separated by comma) String Yes (default: "0")
exposure Exposure Type Description String Yes (default: "Revenues")
exposureRangeLow Exposure Range Low Value Number (decimal) Yes
exposureRangeHigh Exposure Range High Value Number (decimal) Yes
organizationType Type of Organization String No (default: "All")
premium Premium amount Number (decimal) No (default: "0")
limit Limit Amount number (decimal) No (default: "0")
oldestTrailing Programs effective based on months back. Acceptable inputs: 24, 12, 9, 6, 3 Number (int) No (default: "0")
newestTrailing Programs effective based on months back. Must be less than OldestTrailing. Acceptable inputs: 12, 9, 6, 3, 0 Number (int) No (default: "0")
Sample Request

curl --location --request GET "https://api.zywave.com/commercialpolicybenchmark/v2.0/assessment/getrpmdistributiondata?naics=55&coverageId=12&lineOfBusinessId=0&exposureType=Revenues&exposureRangeLow=10000000&exposureRangeHigh=100000000&organizationType=All&premium=1000000&limit=5000000&oldestTrailing=24&newestTrailing=12" \
     --header 'Accept: application/json' \
     --header 'Authorization: Bearer $ACCESS_TOKEN'
Sample Response

      {
        "firstQuartile": 4192.2,
        "median": 7500,
        "fourthQuartile": 9175,
        "maxRpm": 19359,
        "clientBar": 200000,
        "nthPercent": 54.16667,
        "chartDescription": "The selected company's Rate Per Million(RPM) of $200,000 puts it in the 54th percentile in relation to its peers."
      }
      

Response Definitions

Response Item Description Data Type
firstQuartile First Quartile Value Decimal
median Median Value Decimal
fourthQuartile Fourth Quartile Value Decimal
maxRpm Maximum RPM Value Decimal
clientBar Client Value Decimal
nthPercent Percentage Value Decimal
chartDescription Chart Description Text String

Get Total Program Count

GET https://api.zywave.com/commercialpolicybenchmark/v2.0/assessment/getTotalProgramCount

This endpoint will return the Total Program Count. Without adding either the oldestTrailing, newestTrailing the default logic will take the past 2 years.

Parameters

Parameter Name Description Type Required
naics NAICs Code 2/3 String Yes
coverageId Coverage ID Integer Yes
lineOfBusinessId Line of Business ID/IDs (separated by comma) String Yes (default: "0")
exposureType Exposure Type Description String Yes (default: "Revenues")
exposureRangeLow Exposure Range Low Value Number (decimal) Yes
exposureRangeHigh Exposure Range High Value Number (decimal) Yes
organizationType Type of Organization String No (default: "All")
premium Premium amount Number (decimal) No (default: "0")
limit Limit Amount number (decimal) No (default: "0")
oldestTrailing Programs effective based on months back. Acceptable inputs: 24, 12, 9, 6, 3 Number (int) No (default: "0")
newestTrailing Programs effective based on months back. Must be less than OldestTrailing. Acceptable inputs: 12, 9, 6, 3, 0 Number (int) No (default: "0")
Sample Request

curl --location --request GET "https://api.zywave.com/commercialpolicybenchmark/v2.0/assessment/getTotalProgramCount?naics=55&coverageId=12&lineOfBusinessId=0&exposureType=Revenues&exposureRangeLow=10000000&exposureRangeHigh=100000000&organizationType=All&premium=1000000&limit=5000000&oldestTrailing=24&newestTrailing=12" \
     --header 'Accept: application/json' \
     --header 'Authorization: Bearer $ACCESS_TOKEN'
Sample Response

      24
      

Response Definitions

You will receive a single number that is the total count of programs based on your request parameters

Get Total Loss Count

GET https://api.zywave.com/commercialpolicybenchmark/v2.0/assessment/getTotalLossCount

This endpoint will return the Total Loss Count. Using the lossYear parameter will take precedence over oldestLossYear and/or newestLossYear

Parameters

Parameter Name Description Type Required
naics NAICs Code 2/3 String Yes
coverageId Coverage ID Integer Yes
lineOfBusinessId Line of Business ID/IDs (separated by comma) String Yes (default: "0")
exposure Exposure Type Description String Yes (default: "Revenues")
exposureRangeLow Exposure Range Low Value Number (decimal) Yes
exposureRangeHigh Exposure Range High Value Number (decimal) Yes
organizationType Type of Organization String No (default: "All")
premium Premium amount Number (decimal) No (default: "0")
limit Limit Amount number (decimal) No (default: "0")
lossYear Exact loss year. Must be greater than 1800 Number (int) No (default: null)
oldestLossYear Oldest loss year to be considered. Must be greater than 1800 Number (int) No (default: null)
newestLossYear Newest loss year to be considered. Must be greater than 1800 and must be greater than oldestLossYear Number (int) No (default: null)
Sample Request

curl --location --request GET "https://api.zywave.com/commercialpolicybenchmark/v2.0/assessment/getTotalLossCount?naics=55&coverageId=12&lineOfBusinessId=0&exposureType=Revenues&exposureRangeLow=10000000&exposureRangeHigh=100000000&organizationType=All&premium=1000000&limit=5000000&oldestLossYear=2004&newestLossYear=2023" \
     --header 'Accept: application/json' \
     --header 'Authorization: Bearer $ACCESS_TOKEN'
Sample Response

      8
      

Response Definitions

You will receive a single number that is the total count of losses based on your request parameters.

Company Data

Company ID

GET https://api.zywave.com/commercialpolicybenchmark/v2.0/company/{id}

This endpoint will return the company information based on company id

Parameters

Parameter Name Description Type Required
id Company ID Integer Yes
Sample Request

curl --location --request GET 'https://api.zywave.com/commercialpolicybenchmark/v2.0/company/3009774' \
     --header 'Accept: application/json' \
     --header 'Authorization: Bearer $ACCESS_TOKEN'
Sample Response

{
	"id": 3009774,
	"companyName": "Tesla Inc",
	"organizationType": "PUB",
	"naics2": 33,
	"naics3": 336,
	"revenues": 53823000000,
	"numberOfEmployees": 99290,
	"marketCap": 662564490761
}

Response Definitions

Response Item Description Data Type
id Advisen Company ID Integer
companyName Company Name String
organizationType Company Organization Type String
naics2/naics3 Company’s higher level naics code String
revenues Company’s revenue Decimal
numberOfEmployees Company’s number of employees Integer
marketCap Company’s market cap Decimal

Company Name

GET https://api.zywave.com/commercialpolicybenchmark/v2.0/company

This endpoint will search for a company with a given Company Name.

Parameters

Parameter Name Description Type Required
$filter OData formatted filter by CompanyName or OrganizationType String No
$orderBy OData formatted sorting criteria String No
$skip Number of rows to skip in the result set Integer No (default: "0")
$top Return the first number of rows in the result set Integer No (default: "100")
Sample Request

curl --location --request GET 'https://api.zywave.com/commercialpolicybenchmark/v2.0/company?%24filter=startswith(CompanyName,%20'Tesla')%20&%24orderBy=OrganizationType&%24skip=890&%24top=10'
     --header 'Accept: application/json' \
     --header 'Authorization: Bearer $ACCESS_TOKEN'
Sample Response

{
	"hasMoreResults": true,
	"pageIndex": 89,
	"pageSize": 10,
	"skip": 890,
	"take": 10,
	"totalCount": 902,
	"items": \[
		{
			"id": 11754432,
			"companyName": "Teslabarri Sa",
			"organizationType": "PSB"
		},
		{
			"id": 13808056,
			"companyName": "Tesla Exploration Holdings Limited",
			"organizationType": "PSB"
		},
		{
			"id": 11576164,
			"companyName": "Tesla Exploration International Limited",
			"organizationType": "PSB"
		},
		{
			"id": 6290296,
			"companyName": "Tesla Store Los Angeles",
			"organizationType": "PSB"
		},
		{
			"id": 18593302,
			"companyName": "Teslabarri Sa",
			"organizationType": "PSB"
		},
		{
			"id": 3400103,
			"companyName": "Tesla Power G.P., Inc.",
			"organizationType": "PSB"
		},
		{
			"id": 13298863,
			"companyName": "Tesla Power Properties, LP",
			"organizationType": "PSB"
		},
		{
			"id": 24592493,
			"companyName": "Tesla, Inc.",
			"organizationType": "PSB"
		},
		{
			"id": 3009774,
			"companyName": "Tesla Inc",
			"organizationType": "PUB"
		},
		{
			"id": 2749008,
			"companyName": "Tesla Sezam",
			"organizationType": "PUB"
		}
	]
}

Response Definitions

Response Item Description Data Type
hasMoreResults Indicates if there are more results following the returned data Boolean
pageIndex Current page number of the returned data Integer
PageSize Number of rows in a data page Integer
skip Number of rows skipped Integer
take Number of rows taken from current data page Integer
totalCount Total number of rows in the data query Integer
items Company's Advisen id Integer
items.id Company's Advisen id Integer
item.companyName Company's Name String
item.organizationType Company's organization type String

Loss Details

GET https://api.zywave.com/commercialpolicybenchmark/v2.0/lossdetails/{lossEventId}

This endpoint will return the details of loss events.

Parameters

Path parameter Description Type
{lossEventId} Loss Event ID Integer
Sample Request

curl --location --request GET "https://api.zywave.com/commercialpolicybenchmark/v2.0/lossdetails/883485" \
     --header 'Accept: application/json' \
     --header 'Authorization: Bearer $ACCESS_TOKEN'
Sample Response

{
  "lossName": "Foodfirst Global Holdings, Inc.",
  "lossCategory": "Employment",
  "lossType": "Wage and Hour",
  "lossCoverage": "Management Liability",
  "lossLOB": "Employment Practices",
  "accidentDate": null,
  "filingDate": "2016-05-14T00:00:00",
  "status": "Settled",
  "totalAmount": 4000000,
  "lossDetailsDescription": "On May 14, 2016, >loss details abbreviated<"
}

Response Definition

Response Item Description Data Type
lossName The Company Name relating to the loss event String
lossCategory Category Name String
lossType Type of Loss under a category String
lossCoverage Type of coverage String
lossLOB Line of business under a coverage String
accidentDate Loss accident date DateTime
filingDate Loss filing date DateTime
status Loss status String
totalAmount Amount in US dollars Integer
lossDetailsDescription Details of loss description String

Limit Adequacy

GET https://api.zywave.com/commercialpolicybenchmark/v2.0/lossdetails/limitadequacy

This endpoint will display limit adequacy details.

Parameters

Parameter Description Type Required/Optional
CoverageId Coverage Id Integer Required
LobId Line of Business Id String Required
Naics 2 digits or 3 digits naics code (comma separated) String Required
ExposureType Exposure type (eg. Revenues, Employees, Market Cap) String Required
ExposureRangeLow Lowest exposure range Decimal Required
ExposureRangeHigh Highest exposure range Decimal Required
OrganizationType Organization Type (eg. Private = PRV, Public = PUB, All) String Optional
ClientLimit User input amount limit Decimal Optional
lossYear Exact loss year. Must be greater than 1800 Number (int) No (default: null)
oldestLossYear Oldest loss year to be considered. Must be greater than 1800 Number (int) No (default: null)
newestLossYear Newest loss year to be considered. Must be greater than 1800 and must be greater than oldestLossYear Number (int) No (default: null)
Sample Request

curl --location --request GET "https://api.zywave.com/commercialpolicybenchmark/v2.0/lossdetails/getlimitadequacydata?CoverageId=4&LobId=48&Naics=54%2C56%2C72%2C81&ExposureType=Employees&ExposureRangeLow=50&ExposureRangeHigh=100&OrganizationType=All&ClientLimit=5000000000" \     --header 'Accept: application/json' \     --header 'Authorization: Bearer >access_token<'
Sample response

{
  "clientLimit": 5000000000,
  "medianLimit": 1000000,
  "percentCovered": 100,
  "maxLoss": 24000000,
  "averageLoss": 0,
  "listOfCases": [
    {
      "lossEventID": 4390716,
      "lossAmount": 20
    },
    {
      "lossEventID": 4254005,
      "lossAmount": 21.1
    },
    {
      "lossEventID": 4267209,
      "lossAmount": 45
    }
  ]
}

Response Definition

Response Item Description Data Type
clientLimit User input amount limit Decimal
medianLimit Median limit Integer
percentCovered Percentage covered Integer
maxLoss Maximum loss amount Decimal
averageLoss Average loss amount Integer
ListOfCases/lossEventId Loss event Id Integer
ListOfCases/lossAmount Loss amount Decimal

Specification