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.
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
GET https://api.zywave.com/commercialpolicybenchmark/v2.0/assessment/getassessmentdata
This endpoint will return the Assessment Data which is comprised by:
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") |
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" \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $ACCESS_TOKEN'
{
"totalProgramCount": 39,
"totalLossCount": 6,
"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 Item | Description | Data Type |
---|---|---|
totalProgramCount | Total # of Programs | Integer |
totalLossCount | Totatl # of Loss Count | Integer |
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 https://api.zywave.com/commercialpolicybenchmark/v2.0/assessment/getrpmdistributiondata
This endpoint will provide RPM distribution data based on user input/parameters.
Parameter Name | Description | Type | Required |
---|---|---|---|
naics | NAICs Code 2/3 | String | Yes |
coverageId | Coverage ID | Integer | Yes |
lineOf Business | 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") |
curl --location --request GET "https://localhost:58555/v2.0/assessment/getrpmdistributiondata?naics=55&coverageId=12&lineOfBusinessId=0&exposureType=Revenues&exposureRangeLow=10000000&exposureRangeHigh=100000000&organizationType=All&premium=1000000&limit=5000000" \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $ACCESS_TOKEN'
{
"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 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 https://api.zywave.com/commercialpolicybenchmark/v2.0/company/{id}
This endpoint will return the company information with the input Advisen company ID. The output is comprised of:
Parameter Name | Description | Type | Required |
---|---|---|---|
id | Advisen Company ID | Integer | Yes |
curl --location --request GET 'https://api.zywave.com/commercialpolicybenchmark/v2.0/company/3009774' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $ACCESS_TOKEN'
{
"id": 3009774,
"name": "Tesla Inc",
"organizationType": "PUB"
}
Response Item | Description | Data Type |
---|---|---|
id | Advisen Company ID | Integer |
companyName | Company Name | String |
organizationType | Company Organization Type | String |
GET https://api.zywave.com/commercialpolicybenchmark/v2.0/company
This endpoint will search for a company with a given Company Name.
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") |
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'
{
"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 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 |
GET https://api.zywave.com/commercialpolicybenchmark/v2.0/lossdetails/{lossEventId}
This endpoint will return the details of loss events.
Path parameter | Description | Type |
---|---|---|
{lossEventId} | Loss Event ID | Integer |
curl --location --request GET "https://api.zywave.com/commercialpolicybenchmark/v2.0/lossdetails/883485" \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $ACCESS_TOKEN'
{
"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 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 |
GET https://api.zywave.com/commercialpolicybenchmark/v2.0/lossdetails/limitadequacy
This endpoint will display limit adequacy details.
Query string parameter | Required/Optional | Description | Type |
---|---|---|---|
CoverageId | Required | Coverage Id | Integer |
LobId | Required | Line of Business Id | String |
Naics | Required | 2 digits or 3 digits naics code (comma separated) | String |
ExposureType | Required | Exposure type (eg. Revenues, Employees, Market Cap) | String |
ExposureRangeLow | Required | Lowest exposure range | Decimal |
ExposureRangeHigh | Required | Highest exposure range | Decimal |
OrganizationType | Optional | Organization Type (eg. Private = PRV, Public = PUB, All) | String |
ClientLimit | Optional | User input amount limit | Decimal |
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<'
{
"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 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 |