Thimble Insurance API
Welcome to the Thimble API! The Thimble Insurance API provides our partners a simple way to offer their users small business insurance quotes with as little as two inputs. One of our core values at Thimble is to make insurance simple and we hope our API reflects that.
API Keys and Access
To gain access to the Thimble API, please fill out this form. Once you’ve been approved as a partner and signed our terms and conditions, we will provide you an appkey, appsecret and instructions on how to generate a secure signature.
API Version
To access to our all insurance products, please pass api-version: 6 in the request header.
API Protocols
The Thimble API uses POST requests to communicate and HTTP response codes to indicate status and errors. All responses come in standard JSON. All requests must include a Content-Type of application/json and the body must be valid JSON.
Errors
Thimble uses standard HTTP response codes to indicate the success or failure of a request to our API’s.
| Code | DESCRIPTION |
|---|---|
200 OK |
Success |
400 Bad Request |
|
401 Unauthorized |
App Key provided was invalid. |
404 Not Found |
API Host
https://open-api-test.thimble.com (Staging)
https://open-api.thimble.com (Production)
Endpoints
| Activities | /activities |
| Insurance Plans | /insurance-plans |
| Options | /options |
| Quote | /quote |
| Get or Create Agent | /broker/get-or-create-agent |
Resource Group ¶
Quote ¶
Activities EndpointPOST/activities
This endpoint allows developers to retrieve all activities that Thimble offers insurance for. A developer can retrieve the complete list with an empty query string or matched activities with a more specific query. This API is typically used in a couple different ways – an activity selection for the end user or a way in which the developer can match their unique activity IDs to Thimble activity IDs.
Example URI
Headers
Content-Type: application/json
appkey: your_app_key
api-version: 6
x-timestamp: unix timestamp
x-signature: signature of the requestBody
{
"q": "handymen",
"zipcode": "90001"
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"zipcode": {
"type": "string",
"description": "The zip code where the user performs the majority of their business operations in."
},
"q": {
"type": "string",
"description": "The query to search for Thimble activities. e.g. “contractor”"
},
"type": {
"type": "string",
"description": "if you want to search covered events, please post this field with value \"event\", otherwise, the covered businesses will be searched"
},
"group": {
"type": "string",
"description": "Narrow down search to a specific Thimble Group. Our groups include \"Handymen + Contractors\", \"Landscapers\", \"Cleaners + Janitors\", \"Beauty & Fitness\", \"Consultants + Freelancers\", \"Events + Entertainment\", \"Pet Services\"."
}
},
"required": [
"zipcode"
]
}200Headers
Content-Type: application/jsonBody
{
"count": 3,
"results": [
{
"activity_id": "ACT-00037",
"activity_name": "IT Consultants"
},
{
"activity_id": "ACT-00026",
"activity_name": "Brand Consultant"
},
{
"activity_id": "ACT-00030",
"activity_name": "Computer Consultant"
}
]
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"count": {
"type": "number",
"description": "The total number of possible activities covered based on the query."
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"activity_id": {
"type": "string",
"description": "The unique Thimble ID associated with the corresponding activity name."
},
"activity_name": {
"type": "string",
"description": "The name of the specific activity covered by Thimble."
}
},
"required": [
"activity_id",
"activity_name"
]
},
"description": "the search results"
}
},
"required": [
"count",
"results"
]
}Insurance Plans EndpointPOST/insurance-plans
This endpoint allows developers to retrieve all insurance coverages that Thimble offers based on zip code and activity ID retrieved in the activities endpoint. In the response, we will provide a plan ID which will be needed in subsequent endpoints. This API can be used similarly to the activities API. Developers can build a coverage selection for their users or hard code plan ID if preferred.
Example URI
Headers
Content-Type: application/json
appkey: your_app_key
api-version: 6
x-timestamp: unix timestamp
x-signature: signature of the requestBody
{
"activity_id": "ACT-00114",
"zipcode": "90210"
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"activity_id": {
"type": "string",
"description": "The unique Thimble ID associated with the corresponding activity name."
},
"zipcode": {
"type": "string",
"description": "The zip code where the user performs the majority of their business operations in."
}
},
"required": [
"activity_id",
"zipcode"
]
}200Headers
Content-Type: application/jsonBody
{
"plans": [
{
"plan_id": "20018001",
"plan_name": "General Liability",
"insurance_type": "gl",
"config": {
"annual_enable": false,
"auto_extend_enable": true,
"exposure_base_enable": false
},
"optional_plans": [
{
"plan_id": "20010004PL",
"plan_name": "Profession Liability",
"insurance_type": "pl"
}
]
},
{
"plan_id": "20010001EO",
"plan_name": "Event Organizer",
"insurance_type": "event"
},
{
"plan_id": "20020001BOP",
"plan_name": "BOP",
"plan_type": "package",
"insurance_type": "bop",
"packed_plans": [
{
"plan_id": "20020001GL",
"plan_name": "General Liability",
"insurance_type": "gl"
},
{
"plan_id": "20020001BPP",
"plan_name": "Business Personal Property Coverage",
"insurance_type": "bpp"
}
],
"optional_plans": [
{
"plan_id": "20020001PL",
"plan_name": "Professional Liability",
"insurance_type": "pl"
},
{
"plan_id": "20020001CCC",
"plan_name": "Customer Property Protection",
"insurance_type": "ccc"
}
]
}
]
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"plans": {
"type": "array",
"items": {
"type": "object",
"properties": {
"plan_id": {
"type": "string",
"description": "The unique Thimble ID associated with the insurance coverage name."
},
"plan_name": {
"type": "string",
"description": "The name of the insurance coverage type offered by Thimble. Thimble currently offers General Liability and Professional Liability coverages."
},
"plan_type": {
"type": "string",
"enum": [
"package"
],
"description": "type of the plan, for example, bop is a package plan which contains GL & BPP"
},
"insurance_type": {
"type": "string",
"description": "type of the insurance which the plan represent, e.g. gl, pl, bop etc."
},
"config": {
"type": "object",
"properties": {
"annual_enable": {
"type": "boolean",
"description": "whether allow to buy a policy which covers a whole year"
},
"auto_extend_enable": {
"type": "boolean",
"description": "whether allow to buy a policy which can auto extend month by month"
},
"exposure_base_enable": {
"type": "boolean",
"description": "whether support to calculate premium by payroll, revenue or number of show"
}
},
"required": [
"annual_enable",
"auto_extend_enable",
"exposure_base_enable"
],
"description": "some configs the insurance plan has"
},
"packed_plans": {
"type": "array",
"items": {
"type": "object",
"properties": {
"plan_id": {
"type": "string",
"description": "The id of the insurance plan"
},
"plan_name": {
"type": "string",
"description": "The name of the insurance plan"
},
"insurance_type": {
"type": "string",
"description": "type of the insurance which the plan represent, e.g. pl, im, ccc etc."
}
},
"required": [
"plan_id",
"plan_name",
"insurance_type"
]
},
"description": "only exists when the plan type is `package`, it means plans under this node should be included"
},
"optional_plans": {
"type": "array",
"items": {
"type": "object",
"properties": {
"plan_id": {
"type": "string",
"description": "The id of the insurance plan"
},
"plan_name": {
"type": "string",
"description": "The name of the insurance plan"
},
"insurance_type": {
"type": "string",
"description": "type of the insurance which the plan represent, e.g. pl, im, ccc etc."
}
},
"required": [
"plan_id",
"plan_name",
"insurance_type"
]
},
"description": "Insurance plans which can quote in a bundle"
}
},
"required": [
"plan_id",
"plan_name",
"insurance_type",
"config"
]
},
"description": "available plans"
}
},
"required": [
"plans"
]
}Options EndpointPOST/options
This endpoint allows developers to retrieve all options available to customize the policy based on plan ID. Currently Thimble offers customizable limits and optional add-ons. (example: if your user primarily does handyman work but also wants coverage for snowplow work that they do in the winter and also wants to increase their limit from 1MM to 2MM). Developers can build a selection for this or hard code options.
Example URI
Headers
Content-Type: application/json
appkey: your_app_key
x-timestamp: unix timestamp
x-signature: signature of the requestBody
{
"zipcode": "90210",
"activity_id": "ACT-00114",
"plan_id": "20014001"
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"zipcode": {
"type": "string",
"description": "The zip code where the user performs the majority of their business operations in."
},
"activity_id": {
"type": "string",
"description": "The unique Thimble ID associated with the corresponding activity name"
},
"plan_id": {
"type": "string",
"description": "The unique Thimble ID associated with the insurance coverage name"
}
},
"required": [
"zipcode",
"activity_id",
"plan_id"
]
}200Headers
Content-Type: application/jsonBody
{
"preference": {
"options": [
{
"type": "limit",
"field_type": "single_select",
"options": [
{
"id": 201,
"value": "1000000",
"text": "$1MM"
},
{
"id": 202,
"value": "2000000",
"text": "$2MM"
}
]
},
{
"type": "addon",
"field_type": "multi_select",
"options": [
{
"value": "2001001",
"text": "Work at Height"
},
{
"value": "2001002",
"text": "Plumber"
}
]
},
{
"type": "equipment_detail",
"field_type": "string"
},
{
"type": "equipment_items",
"field_type": "array",
"item": {
"field_type": "object",
"properties": [
{
"name": "make",
"field_type": "string"
},
{
"name": "model",
"field_type": "string"
}
]
}
},
{
"type": "payroll_in_12_month",
"field_type": "number"
},
{
"type": "revenue_in_12_month",
"field_type": "number"
},
{
"type": "show_num_in_12_month",
"field_type": "number"
},
{
"type": "application",
"field_type": "application",
"application_form": {
"id": "AF_BOP",
"version": 1
}
}
]
}
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"preference": {
"type": "object",
"properties": {
"options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"limit",
"deductible",
"application",
"addon",
"equipment_detail",
"equipment_items",
"payroll_in_12_month",
"revenue_in_12_month",
"show_num_in_12_month"
],
"description": "can be limit, addon, `equipment_detail`, `equipment_items`, revenue, payroll"
},
"field_type": {
"type": "string",
"enum": [
"single_select",
"multi_select",
"number",
"string",
"array",
"object",
"application"
],
"description": "`single_select`, `multi_select`, string, array, number, object"
},
"min": {
"type": "number",
"description": "when the `field_type` is number, shows the minimum number that accepted"
},
"max": {
"type": "number",
"description": "when the `field_type` is number, shows the maximum number that accepted"
},
"item": {
"type": "object",
"properties": {
"field_type": {
"description": "same like the `field_type` in upper layer, and item, properties and options may be returned to describe the field details"
}
},
"description": "required when field type is array, show what the element in array should be"
},
"properties": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "the property name"
},
"field_type": {
"type": "string",
"description": "the property type, same like the `field_type` in upper layer, and item, properties and options may be returned to describe the field details"
}
},
"required": [
"name",
"field_type"
]
},
"description": "required when field type is object, to describe the properties in the object"
},
"options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "when id is returned, should submit id instead"
},
"value": {
"type": "string",
"description": "his will be dollar amount for deductibles/limits and Thimble activity ID for add-ons."
},
"text": {
"type": "string",
"description": "Display text for the corresponding option."
}
}
},
"description": "required when field type is single_select or multi_select. All possible values that can be selected"
},
"application_form": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "the id of the application form, to pass to the `application/start` endpoint"
},
"version": {
"type": "number",
"description": "the version of the application form, to pass to the `application/start` endpoint, when the value is not provided, use the latest version"
}
},
"required": [
"id"
],
"description": "required when field type is application, use value in this object to start the application using the `application/start` endpoint"
}
},
"required": [
"type",
"field_type"
]
},
"description": "The options array contains option types which include deductible, limits and add-ons with corresponding values and text."
}
},
"description": "The preference array"
}
}
}Start Application EndpointPOST/application/start
This endpoint is used to start an application according to the application form. Some insurances require a complicated application. Use this endpoint to start an application which would populate the question dynamically. For how to get the application form, please visit the /options endpoint. For insurance plans have application form option in /options endpoint response, we require to complete an application before quote. For example, Event, BOP and Cyber insurance plans.
Example URI
Headers
Content-Type: application/json
appkey: your_app_key
x-timestamp: unix timestamp
x-signature: signature of the requestBody
{
"application_form": {
"id": "AF_BOP"
},
"census": {
"primary_insurance_type": "bop",
"activity_id": "ACT-00114",
"activity_name": "Handymen",
"zipcode": "90001",
"state": "AZ"
}
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"application_form": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "the id of the application form, can get from `/options` endpoint"
},
"version": {
"type": "number",
"description": "the version of the application form, can get from `/options` endpoint, when the value is not provided, use the latest version"
}
},
"required": [
"id"
],
"description": "the information of the application form, can get from `/options` endpoint"
},
"census": {
"type": "object",
"properties": {
"activity_id": {
"type": "string",
"description": "the selected activity id"
},
"activity_name": {
"type": "string",
"description": "the selected activity name"
},
"zipcode": {
"type": "string",
"description": "the zipcode"
},
"state": {
"type": "string",
"description": "the state abbr"
},
"primary_insurance_type": {
"type": "string",
"description": "the insurance type of the selected plan, which is the root plan from `/insurance-plans`"
}
},
"required": [
"activity_id",
"activity_name",
"zipcode",
"state",
"primary_insurance_type"
],
"description": "the basic info about the applicant"
}
},
"required": [
"application_form",
"census"
]
}200Headers
Content-Type: application/jsonBody
{
"application_id": "62762c9a97b437003281c923",
"census": {
"primary_insurance_type": "bop",
"activity_id": "ACT-00114",
"activity_name": "Handymen",
"zipcode": "90001",
"state": "WI"
},
"application_form": {
"id": "AF_BOP",
"version": 1
},
"user_id": "",
"application_status": "Process",
"current_question_group": {
"question_group_id": "QG_BOP_0002",
"version": 1,
"questions": [
{
"question_id": "BOP-Main-0002",
"version": 1,
"question_title": "Next, let’s get some info about where you do business. ",
"question_text": "What’s your business address?",
"question_text_small": "This is the address of the building you want to insure under the policy or where your business property is primarily stored.",
"question_type": "address",
"question_field_set": [
{
"fields": [
{
"field_id": "property_address",
"type": "Address",
"required": true,
"validate": [
{
"type": "regexp",
"ignore_case": true,
"value": "^(?!.*((p\\.?o\\.?)\\s*(box))).*$",
"error": {
"message": "We need the address where your business property is primarily stored, not your PO Box or mailing address. If you don’t have a fixed business location, use your home address."
}
}
]
}
]
}
]
}
]
}
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"application_id": {
"type": "string",
"description": "the generated application id"
},
"census": {
"type": "object",
"properties": {
"activity_id": {
"type": "string",
"description": "the selected activity"
},
"zipcode": {
"type": "string",
"description": "the zipcode"
},
"state": {
"type": "string",
"description": "the state abbr"
},
"primary_insurance_type": {
"type": "string",
"description": "the insurance type"
}
},
"required": [
"activity_id",
"zipcode",
"state",
"primary_insurance_type"
],
"description": "the basic info about the applicant"
},
"application_form": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "the id of the application form"
},
"version": {
"type": "number",
"description": "the version of the application form"
}
},
"required": [
"id",
"version"
],
"description": "the information of the application form"
},
"application_status": {
"type": "string",
"enum": [
"Process",
"Complete",
"Decline",
"Blocked"
],
"description": "the status of the application"
},
"application_status_info": {
"type": "object",
"properties": {
"knockout_name": {
"type": "string"
},
"field_id": {
"type": "string",
"description": "the field value which cause the decline"
},
"title": {
"type": "string",
"description": "the title of the decline reason"
},
"reason": {
"type": "string",
"description": "the reason of the decline"
}
},
"required": [
"knockout_name",
"field_id",
"title",
"reason"
],
"description": "if the status is decline, show the information why the application was declined"
},
"current_question_group": {
"type": "object",
"properties": {
"question_group_id": {
"type": "string",
"description": "the id of this question group"
},
"version": {
"type": "number",
"description": "the version of this question group"
},
"questions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"question_id": {
"type": "string",
"description": "ID of the question"
},
"version": {
"type": "number",
"description": "Version of the question, would increase if the question `text/description` update"
},
"question_type": {
"type": "string",
"enum": [
"default",
"address"
],
"description": "type of the question, this is to identify special question"
},
"question_title": {
"type": "string",
"description": "Title of the question"
},
"question_text": {
"type": "string",
"description": "Description of the question"
},
"question_text_small": {
"type": "string",
"description": "A more detailed explanation of the question"
},
"question_field_set": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field_id": {
"type": "string",
"description": "ID of the field, this is globally unique"
},
"type": {
"type": "string",
"enum": [
"Address",
"Single Option",
"Single Item",
"Input",
"Number",
"Price"
],
"description": "Type of the field"
},
"required": {
"type": "boolean",
"description": "If the field is required or not"
},
"options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Option text"
},
"value": {
"type": "string",
"description": "Option Value"
},
"select_description": {
"type": "string",
"description": "the alert message to show when the option is selected"
}
},
"required": [
"text",
"value"
]
},
"description": "only available when field type is `Single Option` or `Single Item`"
},
"validate": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"regexp",
"max_length",
"min",
"max",
"specific"
],
"description": "type of the validation"
},
"ignore_case": {
"type": "boolean",
"description": "only used for regexp validation to ignore the case of the text to check"
},
"value": {
"type": "string",
"description": "varies according to type, for example, for regexp, is the accepted Regular Expression to check"
},
"error": {
"type": "object",
"properties": {
"message": {
"type": "string",
"description": "the message to display when validation fails"
}
},
"required": [
"message"
],
"description": "message to display when the validation fails, should block the user to submit"
},
"note": {
"type": "object",
"properties": {
"message": {
"type": "string",
"description": "the message to display when validation fails"
}
},
"required": [
"message"
],
"description": "message to display when the validation fails, but if it is a note, it is unnecessary to forbid the user to submit"
}
},
"required": [
"type"
]
},
"description": "Validation rules of the field"
}
},
"required": [
"field_id",
"type",
"required"
]
},
"description": "Fields in this field set"
}
},
"required": [
"fields"
]
},
"description": "Field sets of the question"
},
"submit_fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field_id": {
"type": "string",
"description": "ID of the field, this is globally unique"
},
"value": {
"type": "string",
"description": "the value ever submitted"
},
"type": {
"type": "string",
"enum": [
"Address",
"Single Option",
"Single Item",
"Input",
"Number",
"Price"
],
"description": "Type of the field"
}
},
"required": [
"field_id",
"value",
"type"
]
},
"description": "answers ever submitted, only exists the question have been answered"
}
},
"required": [
"question_id",
"version",
"question_type",
"question_text",
"question_text_small",
"question_field_set"
]
},
"description": "the questions in this question group"
}
},
"required": [
"question_group_id",
"version",
"questions"
],
"description": "the next question group to answer"
},
"answered_question_groups": {
"type": "array",
"items": {
"type": "object",
"properties": {
"question_group_id": {
"type": "string",
"description": "the id of this question group"
},
"version": {
"type": "number",
"description": "the version of this question group"
},
"questions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"question_id": {
"type": "string",
"description": "ID of the question"
},
"version": {
"type": "number",
"description": "Version of the question, would increase if the question `text/description` update"
},
"question_type": {
"type": "string",
"enum": [
"default",
"address"
],
"description": "type of the question, this is to identify special question"
},
"question_title": {
"type": "string",
"description": "Title of the question"
},
"question_text": {
"type": "string",
"description": "Description of the question"
},
"question_text_small": {
"type": "string",
"description": "A more detailed explanation of the question"
},
"question_field_set": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field_id": {
"type": "string",
"description": "ID of the field, this is globally unique"
},
"type": {
"type": "string",
"enum": [
"Address",
"Single Option",
"Single Item",
"Input",
"Number",
"Price"
],
"description": "Type of the field"
},
"required": {
"type": "boolean",
"description": "If the field is required or not"
},
"options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Option text"
},
"value": {
"type": "string",
"description": "Option Value"
},
"select_description": {
"type": "string",
"description": "the alert message to show when the option is selected"
}
},
"required": [
"text",
"value"
]
},
"description": "only available when field type is `Single Option` or `Single Item`"
},
"validate": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"regexp",
"max_length",
"min",
"max",
"specific"
],
"description": "type of the validation"
},
"ignore_case": {
"type": "boolean",
"description": "only used for regexp validation to ignore the case of the text to check"
},
"value": {
"type": "string",
"description": "varies according to type, for example, for regexp, is the accepted Regular Expression to check"
},
"error": {
"type": "object",
"properties": {
"message": {
"type": "string",
"description": "the message to display when validation fails"
}
},
"required": [
"message"
],
"description": "message to display when the validation fails, should block the user to submit"
},
"note": {
"type": "object",
"properties": {
"message": {
"type": "string",
"description": "the message to display when validation fails"
}
},
"required": [
"message"
],
"description": "message to display when the validation fails, but if it is a note, it is unnecessary to forbid the user to submit"
}
},
"required": [
"type"
]
},
"description": "Validation rules of the field"
}
},
"required": [
"field_id",
"type",
"required"
]
},
"description": "Fields in this field set"
}
},
"required": [
"fields"
]
},
"description": "Field sets of the question"
},
"submit_fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field_id": {
"type": "string",
"description": "ID of the field, this is globally unique"
},
"value": {
"type": "string",
"description": "the value ever submitted"
},
"type": {
"type": "string",
"enum": [
"Address",
"Single Option",
"Single Item",
"Input",
"Number",
"Price"
],
"description": "Type of the field"
}
},
"required": [
"field_id",
"value",
"type"
]
},
"description": "answers ever submitted, only exists the question have been answered"
}
},
"required": [
"question_id",
"version",
"question_type",
"question_text",
"question_text_small",
"question_field_set"
]
},
"description": "the questions in this question group"
}
},
"required": [
"question_group_id",
"version",
"questions"
]
},
"description": "the answered question groups"
}
},
"required": [
"application_id",
"census",
"application_form",
"application_status"
]
}Submit Application EndpointPOST/application/submit
This endpoint is used to answer the questions of the application. You should call this endpoint recursively until the application is completed.
Example URI
Headers
Content-Type: application/json
appkey: your_app_key
x-timestamp: unix timestamp
x-signature: signature of the requestBody
{
"application_id": "62779d2097b437003281c985",
"question_group": {
"question_group_id": "QG_BOP_0006",
"questions": [
{
"question_id": "BOP-Main-0006",
"fields": [
{
"field_id": "own_additional_building",
"value": "Yes"
}
]
}
]
}
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"application_id": {
"type": "string",
"description": "ID of the application which to submit"
},
"question_group": {
"type": "object",
"properties": {
"question_group_id": {
"type": "string",
"description": "the question group id to submit"
},
"questions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"question_id": {
"type": "string",
"description": "the question id to submit"
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field_id": {
"type": "string",
"description": "the field id to submit"
},
"value": {
"type": "string",
"description": "value of the field to submit, the type of value should change according to the field type, for example, for Price, it should be a number, for Text, it should be a string"
}
},
"required": [
"field_id",
"value"
]
},
"description": "the field values to submit"
}
},
"required": [
"question_id",
"fields"
]
},
"description": "the questions in this question group"
}
},
"required": [
"question_group_id",
"questions"
],
"description": "Answers of current question group to submit"
}
},
"required": [
"application_id",
"question_group"
]
}200Headers
Content-Type: application/jsonBody
{
"application_id": "62762c9a97b437003281c923",
"census": {
"primary_insurance_type": "bop",
"activity_id": "ACT-00114",
"activity_name": "Handymen",
"zipcode": "90001",
"state": "NV"
},
"application_form": {
"id": "AF_BOP",
"version": 1
},
"application_status": "Process",
"current_question_group": {
"question_group_id": "QG_BOP_0003",
"version": 1,
"questions": [
{
"question_id": "BOP-Main-0003",
"version": 1,
"question_text": "Which best describes your space at 6 E 6th St, Winnemucca, NV?",
"question_type": "default",
"question_field_set": [
{
"fields": [
{
"field_id": "location_type",
"type": "Single Option",
"required": true,
"options": [
{
"value": "Commercial Building",
"text": "A standalone commercial building"
},
{
"value": "Building leased to others",
"text": "A building you lease to others"
},
{
"value": "Home",
"text": "Your house or apartment",
"select_description": "Heads up! We can’t offer Building Coverage for home-based businesses, but our Business Personal Property insurance can still cover your business inventory, furniture, tools, and other business equipment inside the home."
},
{
"value": "Kiosk",
"text": "A kiosk or stand",
"select_description": "Heads up! We can’t offer Building Coverage for kiosks, but our Business Personal Property insurance can still cover your business inventory, furniture, tools, and other business equipment inside your premises."
},
{
"value": "Commercial Condo",
"text": "A space in a multi-unit building, office building, or strip mall"
},
{
"value": "Other",
"text": "Something else / I’m not sure",
"select_description": "Unfortunately, we can’t offer you Building Coverage. But you can continue to get coverage for your business inventory, furniture, tools, and equipment inside your premises with Business Personal Property insurance."
}
]
}
]
}
]
}
]
},
"answered_question_groups": [
{
"question_group_id": "QG_BOP_0002",
"version": 1,
"questions": [
{
"question_id": "BOP-Main-0002",
"version": 1,
"question_title": "Next, let’s get some info about where you do business. ",
"question_text": "What’s your business address?",
"question_text_small": "This is the address of the building you want to insure under the policy or where your business property is primarily stored.",
"question_field_set": [
{
"fields": [
{
"field_id": "property_address",
"type": "Address",
"required": true,
"validate": [
{
"type": "regexp",
"ignore_case": true,
"value": "^(?!.*((p\\.?o\\.?)\\s*(box))).*$",
"error": {
"message": "We need the address where your business property is primarily stored, not your PO Box or mailing address. If you don’t have a fixed business location, use your home address."
}
}
]
}
]
}
],
"submit_fields": [
{
"field_id": "property_address",
"value": {
"street": "6 E 6th St",
"street2": "",
"city": "Winnemucca",
"state": "NV",
"zipcode": "89445"
},
"type": "Address"
}
]
}
]
}
]
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"application_id": {
"type": "string",
"description": "the generated application id"
},
"census": {
"type": "object",
"properties": {
"activity_id": {
"type": "string",
"description": "the selected activity"
},
"zipcode": {
"type": "string",
"description": "the zipcode"
},
"state": {
"type": "string",
"description": "the state abbr"
},
"primary_insurance_type": {
"type": "string",
"description": "the insurance type"
}
},
"required": [
"activity_id",
"zipcode",
"state",
"primary_insurance_type"
],
"description": "the basic info about the applicant"
},
"application_form": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "the id of the application form"
},
"version": {
"type": "number",
"description": "the version of the application form"
}
},
"required": [
"id",
"version"
],
"description": "the information of the application form"
},
"application_status": {
"type": "string",
"enum": [
"Process",
"Complete",
"Decline",
"Blocked"
],
"description": "the status of the application"
},
"application_status_info": {
"type": "object",
"properties": {
"knockout_name": {
"type": "string"
},
"field_id": {
"type": "string",
"description": "the field value which cause the decline"
},
"title": {
"type": "string",
"description": "the title of the decline reason"
},
"reason": {
"type": "string",
"description": "the reason of the decline"
}
},
"required": [
"knockout_name",
"field_id",
"title",
"reason"
],
"description": "if the status is decline, show the information why the application was declined"
},
"current_question_group": {
"type": "object",
"properties": {
"question_group_id": {
"type": "string",
"description": "the id of this question group"
},
"version": {
"type": "number",
"description": "the version of this question group"
},
"questions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"question_id": {
"type": "string",
"description": "ID of the question"
},
"version": {
"type": "number",
"description": "Version of the question, would increase if the question `text/description` update"
},
"question_type": {
"type": "string",
"enum": [
"default",
"address"
],
"description": "type of the question, this is to identify special question"
},
"question_title": {
"type": "string",
"description": "Title of the question"
},
"question_text": {
"type": "string",
"description": "Description of the question"
},
"question_text_small": {
"type": "string",
"description": "A more detailed explanation of the question"
},
"question_field_set": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field_id": {
"type": "string",
"description": "ID of the field, this is globally unique"
},
"type": {
"type": "string",
"enum": [
"Address",
"Single Option",
"Single Item",
"Input",
"Number",
"Price"
],
"description": "Type of the field"
},
"required": {
"type": "boolean",
"description": "If the field is required or not"
},
"options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Option text"
},
"value": {
"type": "string",
"description": "Option Value"
},
"select_description": {
"type": "string",
"description": "the alert message to show when the option is selected"
}
},
"required": [
"text",
"value"
]
},
"description": "only available when field type is `Single Option` or `Single Item`"
},
"validate": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"regexp",
"max_length",
"min",
"max",
"specific"
],
"description": "type of the validation"
},
"ignore_case": {
"type": "boolean",
"description": "only used for regexp validation to ignore the case of the text to check"
},
"value": {
"type": "string",
"description": "varies according to type, for example, for regexp, is the accepted Regular Expression to check"
},
"error": {
"type": "object",
"properties": {
"message": {
"type": "string",
"description": "the message to display when validation fails"
}
},
"required": [
"message"
],
"description": "message to display when the validation fails, should block the user to submit"
},
"note": {
"type": "object",
"properties": {
"message": {
"type": "string",
"description": "the message to display when validation fails"
}
},
"required": [
"message"
],
"description": "message to display when the validation fails, but if it is a note, it is unnecessary to forbid the user to submit"
}
},
"required": [
"type"
]
},
"description": "Validation rules of the field"
}
},
"required": [
"field_id",
"type",
"required"
]
},
"description": "Fields in this field set"
}
},
"required": [
"fields"
]
},
"description": "Field sets of the question"
},
"submit_fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field_id": {
"type": "string",
"description": "ID of the field, this is globally unique"
},
"value": {
"type": "string",
"description": "the value ever submitted"
},
"type": {
"type": "string",
"enum": [
"Address",
"Single Option",
"Single Item",
"Input",
"Number",
"Price"
],
"description": "Type of the field"
}
},
"required": [
"field_id",
"value",
"type"
]
},
"description": "answers ever submitted, only exists the question have been answered"
}
},
"required": [
"question_id",
"version",
"question_type",
"question_text",
"question_text_small",
"question_field_set"
]
},
"description": "the questions in this question group"
}
},
"required": [
"question_group_id",
"version",
"questions"
],
"description": "the next question group to answer"
},
"answered_question_groups": {
"type": "array",
"items": {
"type": "object",
"properties": {
"question_group_id": {
"type": "string",
"description": "the id of this question group"
},
"version": {
"type": "number",
"description": "the version of this question group"
},
"questions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"question_id": {
"type": "string",
"description": "ID of the question"
},
"version": {
"type": "number",
"description": "Version of the question, would increase if the question `text/description` update"
},
"question_type": {
"type": "string",
"enum": [
"default",
"address"
],
"description": "type of the question, this is to identify special question"
},
"question_title": {
"type": "string",
"description": "Title of the question"
},
"question_text": {
"type": "string",
"description": "Description of the question"
},
"question_text_small": {
"type": "string",
"description": "A more detailed explanation of the question"
},
"question_field_set": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field_id": {
"type": "string",
"description": "ID of the field, this is globally unique"
},
"type": {
"type": "string",
"enum": [
"Address",
"Single Option",
"Single Item",
"Input",
"Number",
"Price"
],
"description": "Type of the field"
},
"required": {
"type": "boolean",
"description": "If the field is required or not"
},
"options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Option text"
},
"value": {
"type": "string",
"description": "Option Value"
},
"select_description": {
"type": "string",
"description": "the alert message to show when the option is selected"
}
},
"required": [
"text",
"value"
]
},
"description": "only available when field type is `Single Option` or `Single Item`"
},
"validate": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"regexp",
"max_length",
"min",
"max",
"specific"
],
"description": "type of the validation"
},
"ignore_case": {
"type": "boolean",
"description": "only used for regexp validation to ignore the case of the text to check"
},
"value": {
"type": "string",
"description": "varies according to type, for example, for regexp, is the accepted Regular Expression to check"
},
"error": {
"type": "object",
"properties": {
"message": {
"type": "string",
"description": "the message to display when validation fails"
}
},
"required": [
"message"
],
"description": "message to display when the validation fails, should block the user to submit"
},
"note": {
"type": "object",
"properties": {
"message": {
"type": "string",
"description": "the message to display when validation fails"
}
},
"required": [
"message"
],
"description": "message to display when the validation fails, but if it is a note, it is unnecessary to forbid the user to submit"
}
},
"required": [
"type"
]
},
"description": "Validation rules of the field"
}
},
"required": [
"field_id",
"type",
"required"
]
},
"description": "Fields in this field set"
}
},
"required": [
"fields"
]
},
"description": "Field sets of the question"
},
"submit_fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field_id": {
"type": "string",
"description": "ID of the field, this is globally unique"
},
"value": {
"type": "string",
"description": "the value ever submitted"
},
"type": {
"type": "string",
"enum": [
"Address",
"Single Option",
"Single Item",
"Input",
"Number",
"Price"
],
"description": "Type of the field"
}
},
"required": [
"field_id",
"value",
"type"
]
},
"description": "answers ever submitted, only exists the question have been answered"
}
},
"required": [
"question_id",
"version",
"question_type",
"question_text",
"question_text_small",
"question_field_set"
]
},
"description": "the questions in this question group"
}
},
"required": [
"question_group_id",
"version",
"questions"
]
},
"description": "the answered question groups"
}
},
"required": [
"application_id",
"census",
"application_form",
"application_status"
]
}Quote EndpointPOST/quote
This endpoint allows developers to retrieve a quote for their users with as little as sending Thimble activity ID and zip code.
Example URI
Headers
Content-Type: application/json
appkey: your_app_key
x-timestamp: unix timestamp
x-signature: signature of the requestBody
{
"email_address": "isaac@verifly.com",
"first_name": "Isaac",
"last_name": "Zheng",
"business_name": "Verifly",
"business_entity_type": "LLC",
"is_business_non_profit": false,
"doing_business_as": "Thimble",
"marketplace_id": "HomeAdvisor-12345",
"activity_id": "100000001",
"appname": "BP",
"zipcode": "11215",
"business_address": {
"state": "NY",
"zipcode": "11215",
"city": "xxx",
"street": "2050 W Dunlap Ave Ste 110"
},
"mailing_address": {
"state": "TX",
"zipcode": "75007",
"city": "xxx",
"street": "2050 W Dunlap Ave Ste 110"
},
"limit": 1000000,
"crew": 2,
"payroll_in_12_month": 200000,
"revenue_in_12_month": 1000000,
"coverage_start_timestamp": {
"date": "2019-01-01",
"time": "00:00:00"
},
"coverage_end_timestamp": {
"date": "2019-01-01",
"time": "01:00:00"
},
"addons": [
"2001001"
],
"auto_extend": true,
"plans": [
{
"plan_id": "20010008GL"
},
{
"plan_id": "20010004PL",
"limit": 2000000
},
{
"plan_id": "20010001IM",
"limit": 5000,
"equipment_detail": "My Camera.",
"equipment_items": [
{
"make": "Sony",
"model": "XIII"
}
]
}
],
"payment_option": "onetime"
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"email_address": {
"type": "string",
"description": "User email address"
},
"first_name": {
"type": "string",
"description": "User first name"
},
"last_name": {
"type": "string",
"description": "User last name"
},
"business_name": {
"type": "string",
"description": "User business name"
},
"business_entity_type": {
"type": "string",
"enum": [
"Sole Proprietorship",
"LLC",
"Partnership",
"Joint Venture",
"Trust",
"Corporation",
"Governmental Organization",
"Other"
],
"description": "the business entity type, for example, LLC."
},
"is_business_non_profit": {
"type": "string",
"description": "whether the business is non-profit or not"
},
"doing_business_as": {
"type": "string",
"description": "doing business as"
},
"marketplace_id": {
"type": "string",
"description": "prefill marketplace id"
},
"appname": {
"type": "string",
"description": "the app name (tanent id in BP system)"
},
"activity_id": {
"type": "string",
"description": "The unique Thimble ID associated with the corresponding activity name."
},
"zipcode": {
"type": "string",
"description": "The zip code where the user performs the majority of their business operations in."
},
"business_address": {
"type": "object",
"properties": {
"state": {
"type": "string",
"description": "the state"
},
"zipcode": {
"type": "string",
"description": "the zipcode"
},
"city": {
"type": "string",
"description": "the city"
},
"street": {
"type": "string",
"description": "the street address"
},
"street2": {
"type": "string",
"description": "the street address 2"
}
},
"required": [
"state",
"zipcode",
"city",
"street"
],
"description": "the business address"
},
"mailing_address": {
"type": "object",
"properties": {
"state": {
"type": "string",
"description": "the state"
},
"zipcode": {
"type": "string",
"description": "the zipcode"
},
"city": {
"type": "string",
"description": "the city"
},
"street": {
"type": "string",
"description": "the street address"
},
"street2": {
"type": "string",
"description": "the street address 2"
}
},
"required": [
"state",
"zipcode",
"city",
"street"
],
"description": "the mailing address"
},
"primary_insurance_type": {
"type": "string",
"description": "the primary insurance selected"
},
"limit": {
"type": "number",
"description": "The coverage limit for the policy. Defaulted to $1MM."
},
"crew": {
"type": "number",
"description": "The number of employees, crew members, sub-contractors, etc. that work with the user."
},
"attendee_num": {
"type": "number",
"description": "the number of the attendee when quote for event, required when quote for event"
},
"payroll_in_12_month": {
"type": "number",
"description": "payroll in next 12 months"
},
"revenue_in_12_month": {
"type": "number",
"description": "revenue in next 12 months"
},
"show_num_in_12_month": {
"type": "number",
"description": "number of shows in next 12 months"
},
"coverage_end_timestamp": {
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "date, Format: YYYY-MM-DD"
},
"time": {
"type": "string",
"description": "timestamp, Format: HH:mm:ss"
}
},
"required": [
"date",
"time"
],
"description": "The time in which the user wants the policy to end. Date and time required."
},
"customize_duration": {
"type": "object",
"properties": {
"unit": {
"type": "string",
"description": "Units can be “h”, “d”, “m”. h= hours, d= days, m= months"
},
"amount": {
"type": "number",
"description": "Specific duration to accompany the unit chosen."
}
},
"required": [
"unit",
"amount"
],
"description": "Alternative way to send how long the user needs coverage for. For example, 5 days or 3 months. It's an alternative to `coverage_start_timestamp` and `coverage_end_timestamp`"
},
"addons": {
"type": "array",
"items": {
"type": "string"
},
"description": "The unique Thimble ID of optional additional coverages with the corresponding activity name."
},
"auto_extend": {
"type": "boolean",
"description": "if true, means quoting for Thimble monthly. Month to month coverage that automatically renews. And `coverage_end_timestamp` is not required."
},
"is_annual": {
"type": "boolean",
"description": "if true, means quoting for the next calendar year, and `coverage_end_timestamp` is not required."
},
"plans": {
"type": "array",
"items": {
"type": "object",
"properties": {
"packed_plans": {
"type": "array",
"items": {
"type": "object",
"properties": {
"plan_id": {
"type": "string",
"description": "id of the selected insurance plan, will be required if the insurance type is not provided"
},
"insurance_type": {
"type": "string",
"description": "the insurance type of plan, will be required if the plan id is not provided, available values are gl , pl, im, ccc"
},
"application_id": {
"type": "string",
"description": "insurance plan application id returned by `/application/start` endpoint, only required while the plan requires an application"
},
"limit": {
"type": "number",
"description": "limit of the selected insurance plan"
},
"limit_id": {
"type": "number",
"description": "the limit id of the selected limit, used when the limit id is returned"
},
"deductible": {
"type": "number",
"description": "deductible of the selected insurance plan"
},
"business_income_limit": {
"type": "number",
"description": "the business income limit when plan is Business Property Protection Coverage, would be ignored if passed in other insurance plan"
},
"windstorm_deductible_ratio": {
"type": "number",
"description": "the windstorm deductible percentage when plan is Business Property Protection Coverage. It indicates that the windstorm deductible would be `the limit of Business Property Protection Coverage * windstorm_deductible_ratio`. And when `windstorm_deductible_ratio` exists, the value of deductible would be the All other Perils Deductible. Would be ignored if passed in other insurance plan."
},
"equipment_detail": {
"type": "string",
"description": "equipment description to cover when plan is Business Equipment Protection"
},
"equipment_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"make": {
"type": "string",
"description": "the manufacturer of the covered equipment"
},
"model": {
"type": "string",
"description": "the model of the covered equipment"
}
},
"required": [
"make",
"model"
]
},
"description": "equipment items to cover when plan is Business Equipment Protection"
}
}
},
"description": "only required when plan is a `package` plan, used to submit the preference of packed plans"
},
"plan_id": {
"type": "string",
"description": "id of the selected insurance plan, will be required if the insurance type is not provided"
},
"insurance_type": {
"type": "string",
"description": "the insurance type of plan, will be required if the plan id is not provided, available values are gl , pl, im, ccc"
},
"application_id": {
"type": "string",
"description": "insurance plan application id returned by `/application/start` endpoint, only required while the plan requires an application"
},
"limit": {
"type": "number",
"description": "limit of the selected insurance plan"
},
"limit_id": {
"type": "number",
"description": "the limit id of the selected limit, used when the limit id is returned"
},
"deductible": {
"type": "number",
"description": "deductible of the selected insurance plan"
},
"business_income_limit": {
"type": "number",
"description": "the business income limit when plan is Business Property Protection Coverage, would be ignored if passed in other insurance plan"
},
"windstorm_deductible_ratio": {
"type": "number",
"description": "the windstorm deductible percentage when plan is Business Property Protection Coverage. It indicates that the windstorm deductible would be `the limit of Business Property Protection Coverage * windstorm_deductible_ratio`. And when `windstorm_deductible_ratio` exists, the value of deductible would be the All other Perils Deductible. Would be ignored if passed in other insurance plan."
},
"equipment_detail": {
"type": "string",
"description": "equipment description to cover when plan is Business Equipment Protection"
},
"equipment_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"make": {
"type": "string",
"description": "the manufacturer of the covered equipment"
},
"model": {
"type": "string",
"description": "the model of the covered equipment"
}
},
"required": [
"make",
"model"
]
},
"description": "equipment items to cover when plan is Business Equipment Protection"
}
}
},
"description": "array of selected insurance plans"
},
"payment_option": {
"type": "string",
"enum": [
"installment_monthly",
"onetime"
],
"description": "How this policy will be charged. Only available when is_annual is ```true```."
}
},
"required": [
"activity_id",
"zipcode",
"primary_insurance_type",
"limit"
],
"oneOf": [
{
"properties": {
"coverage_start_timestamp": {
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "date, Format: YYYY-MM-DD"
},
"time": {
"type": "string",
"description": "timestamp, Format: HH:mm:ss"
}
},
"required": [
"date",
"time"
],
"description": "The time in which the user wants to policy to begin. Date and time required."
}
}
},
{
"properties": {
"coverage_start_timestamp": {
"type": "string",
"description": "should be 'now'"
}
}
}
]
}200Headers
Content-Type: application/jsonBody
{
"quote_summary": {
"quote_id": "3b5dd373-bf73-4068-acbd-2faf8b74a968",
"quote_result": "covered",
"limit": "1000000",
"state": "CA",
"zipcode": "90210",
"business_address": {
"state": "CA",
"zipcode": "90210",
"city": "xxx",
"street": "2050 W Dunlap Ave Ste 110"
},
"mailing_address": {
"state": "TX",
"zipcode": "75007",
"city": "xxx",
"street": "2050 W Dunlap Ave Ste 110"
},
"coverage_timezone": "America/Los_Angeles",
"coverage_start_timestamp": 1591686000,
"coverage_end_timestamp": 1594277999,
"prebook_available_starttime": "2020-06-03 20:30",
"prebook_available_max_starttime": "2020-11-30 19:15",
"crew_size": 0,
"payroll_in_12_month": 200000,
"revenue_in_12_month": 1000000,
"daily_rate_by_dollar": 53.71,
"hourly_rate_by_dollar": 11.06,
"monthly_rate_by_dollar": 160.35,
"annual_rate_by_dollar": 1105.26,
"rate_by_dollar": 160.35,
"surcharge_by_dollar": 0,
"transaction_rate_by_dollar": 50,
"payment_processing_rate_by_dollar": 5,
"auto_extend_first_month_rate": 160.35,
"auto_extend_average_rate": 84.09,
"partner_code": "Verifly",
"plan_id": "20014001",
"plan_name": "Handymen & Contractors",
"plan_icon": "https://assets.verifly.com/smb/act_off/v2/handymen_contractors.png",
"first_name": "Issac",
"last_name": "Zheng",
"email_address": "isaac@thimble.com",
"business_name": "Thimble",
"business_entity_type": "LLC",
"is_business_non_profit": false,
"doing_business_as": "Thimble",
"plans": [
{
"plan_id": "20014001",
"plan_name": "General Liability",
"limit": 1000000
},
{
"plan_id": "20010001IM",
"plan_name": "Inland Marine",
"limit": 5000,
"equipment_detail": "My Camera.",
"equipment_items": [
{
"make": "Sony",
"model": "XIII"
}
]
}
],
"coverage_insurances": [
"General Liability"
],
"appname": "BP",
"payment_options": [
{
"payment_option": "onetime",
"rate_by_dollar": 33.43,
"surcharge_by_dollar": 0
},
{
"payment_option": "installment_monthly",
"rate_by_dollar": 5.58,
"surcharge_by_dollar": 0,
"installment_phases": [
{
"seq_number": 1,
"rate_by_dollar": 2.79,
"surcharge_by_dollar": 0
},
{
"seq_number": 2,
"rate_by_dollar": 2.79,
"surcharge_by_dollar": 0
},
{
"seq_number": 3,
"rate_by_dollar": 2.79,
"surcharge_by_dollar": 0
},
{
"seq_number": 4,
"rate_by_dollar": 2.79,
"surcharge_by_dollar": 0
},
{
"seq_number": 5,
"rate_by_dollar": 2.79,
"surcharge_by_dollar": 0
},
{
"seq_number": 6,
"rate_by_dollar": 2.79,
"surcharge_by_dollar": 0
},
{
"seq_number": 7,
"rate_by_dollar": 2.79,
"surcharge_by_dollar": 0
},
{
"seq_number": 8,
"rate_by_dollar": 2.79,
"surcharge_by_dollar": 0
},
{
"seq_number": 9,
"rate_by_dollar": 2.79,
"surcharge_by_dollar": 0
},
{
"seq_number": 10,
"rate_by_dollar": 2.79,
"surcharge_by_dollar": 0
},
{
"seq_number": 11,
"rate_by_dollar": 2.79,
"surcharge_by_dollar": 0
},
{
"seq_number": 12,
"rate_by_dollar": 2.74,
"surcharge_by_dollar": 0
}
]
}
]
},
"purchase_link": "https://app-test.thimble.com/partner-quote?quoteid=3b5dd373-bf73-4068-acbd-2faf8b74a968&utm_source=webapp&utm_medium=open_api&utm_campaign=partner:PKZGSP7Z6&utm_term=3b5dd373-bf73-4068-acbd-2faf8b74a9683",
"exclusions": [
"Alarm system monitoring",
"Assembly of cribs or bunk beds",
"Crane operators",
"Demolition performed using explosives, ball and chain, wrecking ball, or similar apparatus and techniques",
"Fire or water mitigation or restoration",
"Forklift operator",
"Foundation work or repair",
"Grading or excavating",
"LPG (propane) connections",
"Logging",
"Machinery or equipment repair (other than office machines and household appliances)",
"Mechanics",
"Moving Companies/Movers",
"Performing work over three stories in height (30 feet)",
"Pool construction",
"Radon Remediation",
"Roadside assistance",
"Roofing work or repair",
"Sandblasting",
"Street, road, and highway work",
"Those specializing in garage door installation, servicing or repair",
"Traffic control",
"Welding",
"Work on 10 or more homes or units in any one project or development"
]
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"quote_summary": {
"type": "object",
"properties": {
"quote_id": {
"type": "string",
"description": "The unique Thimble quote associated with the API call."
},
"quote_result": {
"type": "string",
"description": "Can be “covered” or not “covered”"
},
"limit": {
"type": "number",
"description": "The coverage limit for the policy. Defaulted to $1MM."
},
"state": {
"type": "string",
"description": "The state associated with ZIP in the request."
},
"zipcode": {
"type": "string",
"description": "The zip code where the user performs the majority of their business operations in."
},
"business_address": {
"type": "object",
"properties": {
"state": {
"type": "string",
"description": "the state"
},
"zipcode": {
"type": "string",
"description": "the zipcode"
},
"city": {
"type": "string",
"description": "the city"
},
"street": {
"type": "string",
"description": "the street address"
},
"street2": {
"type": "string",
"description": "the street address 2"
}
},
"required": [
"state",
"zipcode",
"city",
"street"
],
"description": "the business address"
},
"mailing_address": {
"type": "object",
"properties": {
"state": {
"type": "string",
"description": "the state"
},
"zipcode": {
"type": "string",
"description": "the zipcode"
},
"city": {
"type": "string",
"description": "the city"
},
"street": {
"type": "string",
"description": "the street address"
},
"street2": {
"type": "string",
"description": "the street address 2"
}
},
"required": [
"state",
"zipcode",
"city",
"street"
],
"description": "the mailing address"
},
"coverage_timezone": {
"type": "string",
"description": "The time zone associated with the ZIP"
},
"coverage_start_timestamp": {
"type": "number",
"description": "The time in which the policy begins."
},
"coverage_end_timestamp": {
"type": "number",
"description": "The time in which the policy ends."
},
"prebook_available_starttime": {
"type": "string",
"description": "The earliest start time the customer can choose the policy to begin."
},
"prebook_available_max_starttime": {
"type": "string",
"description": "The latest start time that a customer can choose the policy to begin."
},
"crew_size": {
"type": "number",
"description": "The number of employees, crew members, sub-contractors, etc. that work with the user."
},
"payroll_in_12_month": {
"type": "number",
"description": "the payroll in next 12 months"
},
"revenue_in_12_month": {
"type": "number",
"description": "the revenue in next 12 months"
},
"show_num_in_12_month": {
"type": "number",
"description": "the number of shows in next 12 months"
},
"daily_rate_by_dollar": {
"type": "number",
"description": "The cost of a one-day policy."
},
"hourly_rate_by_dollar": {
"type": "number",
"description": "The cost of a one-hour policy."
},
"monthly_rate_by_dollar": {
"type": "number",
"description": "The cost associated with a one-month policy."
},
"annual_rate_by_dollar": {
"type": "number",
"description": "The cost of an annual policy."
},
"rate_by_dollar": {
"type": "number",
"description": "The cost associated with a policy if period is defined in the request."
},
"surcharge_by_dollar": {
"type": "number",
"description": "the surcharge required by state"
},
"transaction_rate_by_dollar": {
"type": "number",
"description": "a transaction fee applies to the policy. The transaction fee is nonrefundable."
},
"payment_processing_rate_by_dollar": {
"type": "number",
"description": "a payment processing fee applies to the policy. The payment processing fee is nonrefundable."
},
"is_annual": {
"type": "boolean",
"description": "if true, means quoting for the next calendar year"
},
"auto_extend": {
"type": "boolean",
"description": "If true, monthly payment is displayed"
},
"auto_extend_able": {
"type": "boolean",
"description": "If true, Thimble's monthly product is allowed in the associated state"
},
"auto_extend_first_month_rate": {
"type": "number",
"description": "The cost of the first month’s payment associated with the Thimble Monthly product."
},
"auto_extend_average_rate": {
"type": "number",
"description": "The average cost per month (over 12 months) associated with the Thimble Monthly product. Thimble uses average price because prices decreases per month."
},
"plan_id": {
"type": "string",
"description": "The unique Thimble ID associated with the insurance coverage name."
},
"plan_name": {
"type": "string",
"description": "The name of the insurance coverage type offered by Thimble."
},
"partner_code": {
"type": "string",
"description": "The unique partner name"
},
"plan_icon": {
"type": "string",
"description": "The url of the associated plan's icon"
},
"first_name": {
"type": "string",
"description": "User first name"
},
"last_name": {
"type": "string",
"description": "User last name"
},
"business_name": {
"type": "string",
"description": "User business name"
},
"business_entity_type": {
"type": "string",
"description": "the business entity type, for example, LLC."
},
"is_business_non_profit": {
"type": "string",
"description": "whether the business is non-profit or not"
},
"doing_business_as": {
"type": "string",
"description": "doing business as"
},
"email_address": {
"type": "string",
"description": "User email address"
},
"plans": {
"type": "array",
"items": {
"type": "object",
"properties": {
"packed_plans": {
"type": "array",
"items": {
"type": "object",
"properties": {
"plan_id": {
"type": "string",
"description": "The unique Thimble ID associated with the insurance coverage name."
},
"insurance_type": {
"type": "string",
"description": "the insurance type of plan"
},
"application_id": {
"type": "string",
"description": "the submitted application id, only exists while the plan requires an application"
},
"limit": {
"type": "number",
"description": "Can be “1000000” or “2000000”"
},
"deductible": {
"type": "number",
"description": "deductible of the plan"
},
"business_income_limit": {
"type": "number",
"description": "the business income limit when plan is Business Property Protection Coverage."
},
"windstorm_deductible_ratio": {
"type": "number",
"description": "the windstorm deductible percentage when plan is Business Property Protection Coverage. It indicates that the windstorm deductible would be `the limit of Business Property Protection Coverage * windstorm_deductible_ratio`. And when `windstorm_deductible_ratio` exists, the value of deductible would be the All other Perils Deductible."
},
"equipment_detail": {
"type": "string",
"description": "equipment description to cover when plan is Business Equipment Protection"
},
"equipment_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"make": {
"type": "string",
"description": "the manufacturer of the covered equipment"
},
"model": {
"type": "string",
"description": "the model of the covered equipment"
}
},
"required": [
"make",
"model"
]
},
"description": "equipment items to cover when plan is Business Equipment Protection"
}
},
"required": [
"plan_id"
]
},
"description": "only required when plan is a `package` plan, used to submit the preference of packed plans"
},
"plan_id": {
"type": "string",
"description": "The unique Thimble ID associated with the insurance coverage name."
},
"insurance_type": {
"type": "string",
"description": "the insurance type of plan"
},
"application_id": {
"type": "string",
"description": "the submitted application id, only exists while the plan requires an application"
},
"limit": {
"type": "number",
"description": "Can be “1000000” or “2000000”"
},
"deductible": {
"type": "number",
"description": "deductible of the plan"
},
"business_income_limit": {
"type": "number",
"description": "the business income limit when plan is Business Property Protection Coverage."
},
"windstorm_deductible_ratio": {
"type": "number",
"description": "the windstorm deductible percentage when plan is Business Property Protection Coverage. It indicates that the windstorm deductible would be `the limit of Business Property Protection Coverage * windstorm_deductible_ratio`. And when `windstorm_deductible_ratio` exists, the value of deductible would be the All other Perils Deductible."
},
"equipment_detail": {
"type": "string",
"description": "equipment description to cover when plan is Business Equipment Protection"
},
"equipment_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"make": {
"type": "string",
"description": "the manufacturer of the covered equipment"
},
"model": {
"type": "string",
"description": "the model of the covered equipment"
}
},
"required": [
"make",
"model"
]
},
"description": "equipment items to cover when plan is Business Equipment Protection"
}
},
"required": [
"plan_id"
]
},
"description": "The array of available insurance coverages"
},
"coverage_insurances": {
"type": "array",
"items": {
"type": "string"
},
"description": "Covered insurance types, e.g.[\"General Liability\", \"Profession Liability\"]"
},
"appname": {
"type": "string",
"description": "the app name (tanent id in BP system)"
},
"payment_options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"payment_option": {
"type": "string",
"description": "the payment option code"
},
"is_default": {
"type": "boolean",
"description": "it would be true if current payment option is the default option"
},
"is_selected": {
"type": "boolean",
"description": "it would be true if current payment option is selected"
},
"rate_by_dollar": {
"type": "number",
"description": "the due amount for the payment option"
},
"surcharge_by_dollar": {
"type": "number",
"description": "the surcharge required by state"
},
"installment_phases": {
"type": "array",
"items": {
"type": "object",
"properties": {
"seq_number": {
"type": "number",
"description": "the sequence number for the installment phase"
},
"rate_by_dollar": {
"type": "number",
"description": "the due amount for the installment phase"
},
"surcharge_by_dollar": {
"type": "number",
"description": "the surcharge required by state for the installment phase"
}
},
"required": [
"seq_number",
"rate_by_dollar"
]
},
"description": "exists if it is an installment payment"
}
},
"required": [
"payment_option",
"rate_by_dollar"
]
},
"description": "the available payment options"
}
},
"required": [
"quote_id",
"quote_result",
"coverage_insurances",
"payment_options"
],
"description": "The Thimble quote summary."
},
"purchase_link": {
"type": "string",
"description": "The customer-facing link that will take a user to the pre-built quote on the Thimble site."
},
"exclusions": {
"type": "array",
"items": {
"type": "string"
},
"description": "the exclusion terms for this quote, should be confirmed"
}
},
"required": [
"quote_summary"
]
}400Headers
Content-Type: application/jsonBody
{
"error_message": "invalid request"
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error_message": {
"type": "string"
}
},
"required": [
"error_message"
]
}401Headers
Content-Type: application/jsonBody
{
"error_message": "invalid appkey"
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error_message": {
"type": "string"
}
},
"required": [
"error_message"
]
}404Headers
Content-Type: application/jsonBody
{
"error_message": "invalid activity id"
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error_message": {
"type": "string"
}
},
"required": [
"error_message"
]
}Policy ¶
Search Policy EndpointPOST/policy/search
Search policies
Example URI
Headers
Content-Type: application/json
appkey: your_app_key
api-version: 6
x-timestamp: unix timestamp
x-signature: signature of the requestBody
{
"filter": {
"create_date_time": {
"start": 1633169262,
"end": 1635847641
}
},
"start_index": 0,
"page_number": 4
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"filter": {
"type": "object",
"properties": {
"create_date_time": {
"type": "object",
"properties": {
"start": {
"type": "number",
"description": "from timestamp"
},
"end": {
"type": "number",
"description": "to timestamp"
}
},
"required": [
"start",
"end"
],
"description": "when policy created"
},
"client_email_address": {
"type": "string",
"description": "applicant email address"
}
},
"description": "the filter to search"
},
"start_index": {
"type": "number",
"description": "page index number"
},
"page_number": {
"type": "number",
"description": "number of policies per page"
}
}
}200Headers
Content-Type: application/jsonBody
{
"results": [
{
"policy_no": "IBL-P3D2LT82H",
"policy_name": "IBL-P3D2LT82H",
"applicant_name": "thimble test",
"applicant_company": "thimblebusiness",
"applicant_email": "thimbletest@thimbletest.com",
"policy_status": "approved",
"create_date_time": "2022-08-16T05:43:10.866Z",
"coverage_timezone": "America/Los_Angeles",
"coverage_start_timestamp": 1660628590,
"coverage_end_timestamp": 1663311599,
"coverage_start_time": "2022-08-15T22:43:10-07:00",
"coverage_end_time": "2022-09-15T23:59:59-07:00",
"coverage_country": "US",
"coverage_state": "CA",
"coverage_zipcode": "90001",
"rate_by_dollar": 125.05,
"surcharge_by_dollar": 0,
"transaction_rate_by_dollar": 50,
"payment_processing_rate_by_dollar": 5,
"insurance_types": [
"General Liability",
"Window Protection"
],
"is_annual": null,
"auto_extend": true,
"primary_insurance_type": "gl",
"additional_insured": [],
"policy_pdf_url": "https://pdf-test.thimble.com/user_pdf/policy/62f600689c93ed006598161c/IBL-P3D2LT82H_2002.pdf?v=1",
"certificate_pdf_url": "https://pdf-test.thimble.com/user_pdf/policy/62f600689c93ed006598161c/IBL-P3D2LT82H_verifly.pdf?v=1",
"overall_receipt_pdf_url": "https://pdf-test.thimble.com/user_pdf/policy/62f600689c93ed006598161c/IBL-P3D2LT82H_verifly_receipt_overall.pdf?v=1",
"receipt_pdf_url_list": [
"https://pdf-test.thimble.com/user_pdf/policy/62f600689c93ed006598161c/IBL-P3D2LT82H_verifly_receipt_purchase.pdf?v=1"
]
}
],
"count": 1
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"policy_no": {
"type": "string",
"description": "policy number"
},
"policy_name": {
"type": "string",
"description": "policy name"
},
"applicant_name": {
"type": "string",
"description": "applicant name"
},
"applicant_company": {
"type": "string",
"description": "applicant company"
},
"applicant_email": {
"type": "string",
"description": "applicant email"
},
"policy_status": {
"type": "string",
"description": "policy status: submitted, approved, cancelled, withdrawn"
},
"create_date_time": {
"type": "string",
"description": "datetime when policy created"
},
"coverage_timezone": {
"type": "string",
"description": "datetime timezone"
},
"coverage_start_timestamp": {
"type": "number",
"description": "timestamp of coverage start time"
},
"coverage_end_timestamp": {
"type": "number",
"description": "timestamp of coverage end time"
},
"coverage_start_time": {
"type": "string",
"description": "coverage start time"
},
"coverage_end_time": {
"type": "string",
"description": "coverage end time"
},
"coverage_country": {
"type": "string",
"description": "coverage country"
},
"coverage_state": {
"type": "string",
"description": "coverage state"
},
"coverage_zipcode": {
"type": "string",
"description": "coverage zipcode"
},
"rate_by_dollar": {
"type": "number",
"description": "policy value"
},
"surcharge_by_dollar": {
"type": "number",
"description": "policy surcharge value"
},
"transaction_rate_by_dollar": {
"type": "number",
"description": "a transaction fee applies to this policy. The transaction fee is nonrefundable."
},
"payment_processing_rate_by_dollar": {
"type": "number",
"description": "a payment processing rate applies to this policy. The payment processing fee is nonrefundable."
},
"insurance_types": {
"type": "array",
"items": {
"type": "string"
},
"description": "included insurance types"
},
"is_annual": {
"type": "boolean",
"description": "whether is annual policy"
},
"auto_extend": {
"type": "boolean",
"description": "whether is a Thimble Monthly Policy"
},
"primary_insurance_type": {
"type": "string",
"description": "primary insurance type"
},
"is_installment": {
"type": "boolean",
"description": "is installment payment"
},
"policy_pdf_url": {
"type": "string",
"description": "URL of policy pdf"
},
"certificate_pdf_url": {
"type": "string",
"description": "URL of policy certificate pdf"
},
"overall_receipt_pdf_url": {
"type": "string",
"description": "URL of overall receipt pdf"
},
"receipt_pdf_url_list": {
"type": "array",
"items": {
"type": "string"
},
"description": "URL list of other receipts"
},
"additional_insured": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "additional insured id (as uuid)"
},
"name": {
"type": "string",
"description": "additional insured name"
},
"email": {
"type": "string",
"description": "additional insured email"
},
"certificate_pdf_url": {
"type": "string",
"description": "URL of additional insured certificate"
},
"certificate_holder": {
"type": "string",
"description": "certificate holder"
},
"coverage_start_timestamp": {
"type": "number",
"description": "when the coverage starts"
},
"coverage_end_timestamp": {
"type": "number",
"description": "when the coverage ends"
}
},
"required": [
"id",
"name",
"email",
"certificate_pdf_url",
"coverage_start_timestamp",
"coverage_end_timestamp"
]
},
"description": "additional insured"
}
},
"required": [
"policy_no",
"policy_name",
"applicant_name",
"applicant_company",
"applicant_email",
"policy_status",
"create_date_time",
"coverage_timezone",
"coverage_start_timestamp",
"coverage_end_timestamp",
"coverage_start_time",
"coverage_end_time",
"coverage_country",
"coverage_state",
"coverage_zipcode",
"rate_by_dollar",
"insurance_types",
"is_annual",
"primary_insurance_type",
"policy_pdf_url",
"certificate_pdf_url",
"overall_receipt_pdf_url",
"receipt_pdf_url_list",
"additional_insured"
]
},
"description": "the policy list of current page"
},
"count": {
"type": "number",
"description": "total number of policies"
}
},
"required": [
"results",
"count"
]
}Get Policy Detail EndpointGET/policy/:policyNo
Get policy detail by policy number
Example URI
Headers
Content-Type: application/json
appkey: your_app_key
api-version: 6
x-timestamp: unix timestamp
x-signature: signature of the request200Headers
Content-Type: application/jsonBody
{
"policy_no": "IBL-F3REP7RD7",
"policy_name": "IBL-F3REP7RD7",
"applicant_name": "Simon Zhao",
"applicant_company": "Inspect",
"applicant_email": "simon.zhao@thimble.com",
"policy_status": "approved",
"create_date_time": "2022-07-07T02:39:22.096Z",
"coverage_timezone": "America/New_York",
"coverage_start_timestamp": 1657161562,
"coverage_end_timestamp": 1670389199,
"coverage_start_time": "2022-07-06T22:39:22-04:00",
"coverage_end_time": "2022-12-06T23:59:59-05:00",
"coverage_country": "US",
"coverage_state": "VA",
"coverage_zipcode": "23232",
"rate_by_dollar": 422.89,
"surcharge_by_dollar": 0,
"insurance_types": [
"General Liability",
"Business Equipment Protection"
],
"is_annual": null,
"auto_extend": true,
"primary_insurance_type": "gl",
"additional_insured": [
{
"id": "60b5ab29ce2abd0065275b71",
"name": "Simon",
"email": "simon.zakern+test.0001@gmail.com",
"certificate_holder": "",
"coverage_start_timestamp": 1659924512,
"coverage_end_timestamp": 1670389199,
"certificate_pdf_url": "https://pdf-test.thimble.com/user_pdf/policy/60823402165e0500667456f3/IBL-F3REP7RD7_verifly_2f026dcc-e2ee-4b0c-9ed5-ae370eea7a49.pdf?v=8"
},
{
"id": "62f07185d5beb4006561a9d7",
"name": "simon-220808-01",
"email": "simon.zakern+220808-01@gmail.com",
"certificate_holder": "simon zakern",
"coverage_start_timestamp": 1659925297,
"coverage_end_timestamp": 1670389199,
"certificate_pdf_url": "https://pdf-test.thimble.com/user_pdf/policy/60823402165e0500667456f3/IBL-F3REP7RD7_verifly_f3beb1c0-3f67-476c-8bb3-cb4ab2e2441d.pdf?v=8"
}
],
"policy_pdf_url": "https://pdf-test.thimble.com/user_pdf/policy/60823402165e0500667456f3/IBL-F3REP7RD7_2002.pdf?v=8",
"certificate_pdf_url": "https://pdf-test.thimble.com/user_pdf/policy/60823402165e0500667456f3/IBL-F3REP7RD7_verifly.pdf?v=8",
"overall_receipt_pdf_url": "https://pdf-test.thimble.com/user_pdf/policy/60823402165e0500667456f3/IBL-F3REP7RD7_verifly_receipt_overall.pdf?v=8",
"receipt_pdf_url_list": [
"https://pdf-test.thimble.com/user_pdf/policy/60823402165e0500667456f3/IBL-F3REP7RD7_verifly_receipt_modification_0.pdf?v=8",
"https://pdf-test.thimble.com/user_pdf/policy/60823402165e0500667456f3/IBL-F3REP7RD7_verifly_receipt_extension_4.pdf?v=8",
"https://pdf-test.thimble.com/user_pdf/policy/60823402165e0500667456f3/IBL-F3REP7RD7_verifly_receipt_extension_3.pdf?v=8",
"https://pdf-test.thimble.com/user_pdf/policy/60823402165e0500667456f3/IBL-F3REP7RD7_verifly_receipt_extension_2.pdf?v=8",
"https://pdf-test.thimble.com/user_pdf/policy/60823402165e0500667456f3/IBL-F3REP7RD7_verifly_receipt_extension_1.pdf?v=8",
"https://pdf-test.thimble.com/user_pdf/policy/60823402165e0500667456f3/IBL-F3REP7RD7_verifly_receipt_purchase.pdf?v=8"
],
"coverage_intervals": [
{
"start_timestamp": 1657161562,
"end_timestamp": 1659844799,
"rate_by_dollar": 113.37,
"purchase_date_time": "2022-07-07T02:39:24.825Z",
"charge_result": "success"
},
{
"start_timestamp": 1659844800,
"end_timestamp": 1662523199,
"rate_by_dollar": 83.5,
"purchase_date_time": "2022-07-07T02:41:35.707Z",
"charge_result": "success"
},
{
"start_timestamp": 1662523200,
"end_timestamp": 1665115199,
"rate_by_dollar": 71.44,
"purchase_date_time": "2022-07-07T02:42:30.231Z",
"charge_result": "success"
},
{
"start_timestamp": 1665115200,
"end_timestamp": 1667797199,
"rate_by_dollar": 68.86,
"purchase_date_time": "2022-07-07T02:44:17.692Z",
"charge_result": "success"
},
{
"start_timestamp": 1667797200,
"end_timestamp": 1670389199,
"rate_by_dollar": 63.71,
"purchase_date_time": "2022-07-07T02:44:58.605Z",
"charge_result": "success"
}
],
"plan_list": [
{
"id": "20020001GL",
"name": "General Liability",
"insurance_type": "gl",
"coverage_deductible": 0
},
{
"id": "20020001IM",
"name": "Business Equipment Protection",
"insurance_type": "im",
"coverage_deductible": 500,
"equipment_detail": "Apple Mac,Sony Camara",
"loss_payee_items": [
{
"name": "Apple Mac",
"email": "apple.mac@thimble.test.com",
"address": "sadfasf\nsadfa\nasdf",
"leased_equipment": [
{
"make_and_model": "Apple Mac",
"serial_number": "haha",
"year": "2021"
}
],
"uniq_id": "5465bba3-2e9f-4ca9-ba90-794ce7bc84de",
"certificate_pdf_url": "https://pdf-test.thimble.com/user_pdf/policy/60823402165e0500667456f3/IBL-F3REP7RD7_verifly_5465bba3-2e9f-4ca9-ba90-794ce7bc84de.pdf?v=8"
}
]
}
],
"auto_extend_records": [
{
"start_timestamp": 1657161540,
"end_timestamp": 1659844799,
"month_seq": 1,
"total_rate_by_dollar": 113.37,
"status": "success",
"complete_timestamp": 1657161564
},
{
"start_timestamp": 1659844800,
"end_timestamp": 1662523199,
"month_seq": 2,
"total_rate_by_dollar": 87.3,
"status": "success",
"complete_timestamp": 1657161692
},
{
"start_timestamp": 1662523200,
"end_timestamp": 1665115199,
"month_seq": 3,
"total_rate_by_dollar": 77.44,
"status": "success",
"complete_timestamp": 1657161747
},
{
"start_timestamp": 1665115200,
"end_timestamp": 1667797199,
"month_seq": 4,
"total_rate_by_dollar": 75.07,
"status": "success",
"complete_timestamp": 1657161854
},
{
"start_timestamp": 1667797200,
"end_timestamp": 1670389199,
"month_seq": 5,
"total_rate_by_dollar": 69.71,
"status": "success",
"complete_timestamp": 1657161895
},
{
"start_timestamp": 1670389200,
"end_timestamp": 1673067599,
"month_seq": 6,
"total_rate_by_dollar": 70.02,
"status": "pending"
},
{
"start_timestamp": 1673067600,
"end_timestamp": 1675745999,
"month_seq": 7,
"total_rate_by_dollar": 69.75,
"status": "pending"
},
{
"start_timestamp": 1675746000,
"end_timestamp": 1678165199,
"month_seq": 8,
"total_rate_by_dollar": 62.84,
"status": "pending"
},
{
"start_timestamp": 1678165200,
"end_timestamp": 1680839999,
"month_seq": 9,
"total_rate_by_dollar": 69.32,
"status": "pending"
},
{
"start_timestamp": 1680840000,
"end_timestamp": 1683431999,
"month_seq": 10,
"total_rate_by_dollar": 67.05,
"status": "pending"
},
{
"start_timestamp": 1683432000,
"end_timestamp": 1686110399,
"month_seq": 11,
"total_rate_by_dollar": 69.18,
"status": "pending"
},
{
"start_timestamp": 1686110400,
"end_timestamp": 1688697000,
"month_seq": 12,
"total_rate_by_dollar": 66.73,
"status": "pending"
}
],
"activity": {
"activity_id": "ACT-00114",
"activity_name": "Handymen"
}
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"policy_no": {
"type": "string",
"description": "policy number"
},
"policy_name": {
"type": "string",
"description": "policy name"
},
"applicant_name": {
"type": "string",
"description": "applicant name"
},
"applicant_company": {
"type": "string",
"description": "applicant company"
},
"applicant_email": {
"type": "string",
"description": "applicant email"
},
"policy_status": {
"type": "string",
"description": "policy status: submitted, approved, cancelled, withdrawn"
},
"create_date_time": {
"type": "string",
"description": "datetime when policy created"
},
"coverage_timezone": {
"type": "string",
"description": "datetime timezone"
},
"coverage_start_timestamp": {
"type": "number",
"description": "timestamp of coverage start time"
},
"coverage_end_timestamp": {
"type": "number",
"description": "timestamp of coverage end time"
},
"coverage_start_time": {
"type": "string",
"description": "coverage start time"
},
"coverage_end_time": {
"type": "string",
"description": "coverage end time"
},
"coverage_country": {
"type": "string",
"description": "coverage country"
},
"coverage_state": {
"type": "string",
"description": "coverage state"
},
"coverage_zipcode": {
"type": "string",
"description": "coverage zipcode"
},
"rate_by_dollar": {
"type": "number",
"description": "policy value"
},
"surcharge_by_dollar": {
"type": "number",
"description": "policy surcharge value"
},
"insurance_types": {
"type": "array",
"items": {
"type": "string"
},
"description": "included insurance types"
},
"is_annual": {
"type": "boolean",
"description": "whether is annual policy"
},
"auto_extend": {
"type": "boolean",
"description": "whether is a Thimble Monthly Policy"
},
"primary_insurance_type": {
"type": "string",
"description": "primary insurance type"
},
"is_installment": {
"type": "boolean",
"description": "is installment payment"
},
"policy_pdf_url": {
"type": "string",
"description": "URL of policy pdf"
},
"certificate_pdf_url": {
"type": "string",
"description": "URL of policy certificate pdf"
},
"overall_receipt_pdf_url": {
"type": "string",
"description": "URL of overall receipt pdf"
},
"receipt_pdf_url_list": {
"type": "array",
"items": {
"type": "string"
},
"description": "URL list of other receipts"
},
"additional_insured": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "additional insured id (as uuid)"
},
"name": {
"type": "string",
"description": "additional insured name"
},
"email": {
"type": "string",
"description": "additional insured email"
},
"certificate_pdf_url": {
"type": "string",
"description": "URL of additional insured certificate"
},
"certificate_holder": {
"type": "string",
"description": "certificate holder"
},
"coverage_start_timestamp": {
"type": "number",
"description": "when the coverage starts"
},
"coverage_end_timestamp": {
"type": "number",
"description": "when the coverage ends"
}
},
"required": [
"id",
"name",
"email",
"certificate_pdf_url",
"coverage_start_timestamp",
"coverage_end_timestamp"
]
},
"description": "additional insured"
},
"coverage_intervals": {
"type": "array",
"items": {
"type": "object",
"properties": {
"start_timestamp": {
"type": "number",
"description": "timestamp of interval start time"
},
"end_timestamp": {
"type": "number",
"description": "timestamp of interval end time"
},
"purchase_date_time": {
"type": "string",
"description": "date time when purchase this interval"
},
"charge_result": {
"type": "string",
"description": "purchase successfully when it is \"success\""
},
"rate_by_dollar": {
"type": "number",
"description": "interval rate"
},
"refund_rate_by_dollar": {
"type": "number",
"description": "interval refund rate (Exists when refund)"
}
},
"required": [
"start_timestamp",
"end_timestamp",
"purchase_date_time",
"charge_result",
"rate_by_dollar",
"refund_rate_by_dollar"
]
},
"description": "When customers extend their policies, we will add coverage intervals into this array"
},
"installment_plan": {
"type": "object",
"properties": {
"interval": {
"type": "string",
"description": "monthly"
},
"interval_count": {
"type": "number",
"description": "interval count"
},
"status": {
"type": "string",
"description": "active / non-payment / cancelled"
},
"phases": {
"type": "array",
"items": {
"type": "object",
"properties": {
"seq_number": {
"type": "number",
"description": "installment phase sequence"
},
"rate_by_dollar": {
"type": "number",
"description": "installment phase rate"
},
"start_timestamp": {
"type": "number",
"description": "installment start timestamp"
},
"end_timestamp": {
"type": "number",
"description": "installment end timestamp"
},
"due_timestamp": {
"type": "number",
"description": "installment due timestamp ( must charge before this timestamp )"
},
"complete_date_time": {
"type": "string",
"description": "when the installment complete successfully"
},
"status": {
"type": "string",
"description": "pending / inprogress / success / failure / cancelled"
}
},
"required": [
"seq_number",
"rate_by_dollar",
"start_timestamp",
"end_timestamp",
"due_timestamp",
"status"
]
}
}
},
"required": [
"interval",
"interval_count",
"status",
"phases"
],
"description": "installment information"
},
"plan_list": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "plan id"
},
"name": {
"type": "string",
"description": "plan name"
},
"insurance_type": {
"type": "string",
"description": "plan insurance type"
},
"occ_limit": {
"type": "string",
"description": "occurrence limit of the plan"
},
"agg_limit": {
"type": "string",
"description": "aggregate limit of the plan"
},
"coverage_deductible": {
"type": "string",
"description": "insurance coverage deductible"
},
"equipment_detail": {
"type": "string",
"description": "equipments for BEP (value less than $2500, separate by \",\")"
},
"equipment_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"make": {
"type": "string",
"description": "made by"
},
"model": {
"type": "string",
"description": "equipment model"
},
"value": {
"type": "number",
"description": "the value $ of the equipment"
}
}
},
"description": "equipments for BEP (value larger than $2500)"
},
"ai_id_list": {
"type": "array",
"items": {
"type": "string"
},
"description": "additional insured id list"
},
"loss_payee_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "name of loss payee"
},
"email": {
"type": "string",
"description": "email of loss payee"
},
"address": {
"type": "string",
"description": "address of loss payee"
},
"uniq_id": {
"type": "string",
"description": "id of loss payee"
},
"certificate_pdf_url": {
"type": "string",
"description": "URL of loss payee certificate"
},
"leased_equipment": {
"type": "array",
"items": {
"type": "object",
"properties": {
"make_and_model": {
"type": "string",
"description": "the manufacturer and model of the covered equipment"
},
"serial_number": {
"type": "string",
"description": "the serial number of the covered equipment"
},
"year": {
"type": "number",
"description": "the year when the covered equipment produced"
}
},
"required": [
"make_and_model",
"serial_number",
"year"
]
},
"description": "leased equipment"
}
},
"required": [
"name",
"email",
"address",
"uniq_id",
"certificate_pdf_url",
"leased_equipment"
]
},
"description": "loss payee"
},
"sub_plan_list": {
"type": "object",
"properties": {},
"description": "For insurance like BOP. Attribution like plan_list"
}
},
"required": [
"id",
"name",
"insurance_type",
"occ_limit",
"agg_limit",
"coverage_deductible"
]
},
"description": "insurance plan list"
},
"activity": {
"type": "object",
"properties": {
"activity_id": {
"type": "string",
"description": "activity id"
},
"activity_name": {
"type": "string",
"description": "activity name"
}
},
"required": [
"activity_id",
"activity_name"
],
"description": "insurance plan list"
},
"auto_extend_records": {
"type": "array",
"items": {
"type": "object",
"properties": {
"total_rate_by_dollar": {
"type": "number",
"description": "extend rate"
},
"start_timestamp": {
"type": "number",
"description": "extend start timestamp"
},
"end_timestamp": {
"type": "number",
"description": "extend end timestamp"
},
"complete_date_time": {
"type": "string",
"description": "when the extend complete successfully"
},
"month_seq": {
"type": "number",
"description": "extend month sequence"
},
"status": {
"type": "string",
"description": "pending / inprogress / success / failure / cancelled"
}
},
"required": [
"total_rate_by_dollar",
"start_timestamp",
"end_timestamp"
]
},
"description": "monthly extend record"
}
},
"required": [
"policy_no",
"policy_name",
"applicant_name",
"applicant_company",
"applicant_email",
"policy_status",
"create_date_time",
"coverage_timezone",
"coverage_start_timestamp",
"coverage_end_timestamp",
"coverage_start_time",
"coverage_end_time",
"coverage_country",
"coverage_state",
"coverage_zipcode",
"rate_by_dollar",
"insurance_types",
"is_annual",
"primary_insurance_type",
"policy_pdf_url",
"certificate_pdf_url",
"overall_receipt_pdf_url",
"receipt_pdf_url_list",
"additional_insured",
"coverage_intervals",
"activity"
]
}Create Policy EndpointPOST/policy
Create policies Some of these pdf files may take a few minutes to generate.
About client_questions field
We CANNOT COVER customers who have too many losses. So before binding policies to your customer, you must collect claim information from them.
This information should be submitted in field client_questions.
-
If
primary_insurance_typeyou are submitting in Quote Endpoint is “gl”, following fields should be filled out insmbfield.purchased_beforemeans whether the customer had a SMB policy before. It should betrueorfalse. If it istrue, the second field about losses should be filled out.loss_more_than_15k_usd_over_last_3_yearsmeans whether the customer has any losses totaling more than $15k in the last 3 years. If it istrue, the customer cannot be covered by Thimble.
-
If
primary_insurance_typeyou are submitting in Quote Endpoint is “event”, fields the same as smb above should be filled out ineventfield. -
If
primary_insurance_typeyou are submitting in Quote Endpoint is “bop”, following fields should be filled out inbopfield.purchased_beforemeans whether the customer had a BOP policy before. It should betrueorfalse. If it istrue, we need to know how many claims.claims_number_over_last_5_yearsmeans the number of claims in the last 5 years. We cannot offer insurance to customers who have more than 2 claims in the last 5 years.claims_detailmeans the amount of each claim and their descriptions. Ifclaims_number_over_last_5_yearsis larger than 0, it should be filled out.
Example URI
Headers
Content-Type: application/json
appkey: your_app_key
api-version: 6
x-timestamp: unix timestamp
x-signature: signature of the requestBody
{
"quote_id": "e08820f9-456e-4745-8249-cf486639cdfb",
"client_first_name": "Test",
"client_last_name": "Suite",
"client_email_address": "test.suite.315bbec4-bdf8-4745-9b64-501c85c0ded6@thimble.test",
"client_business_name": "Thimble Inc. Co.",
"additional_insured": [
{
"name": "simon addition",
"email": "test.suite.ai.b0a69763-c69f-4aad-8797-bfe7a8df26bd@thimble.test",
"certificate_holder": "Holder"
}
],
"client_questions": {
"smb": {
"purchased_before": true,
"loss_more_than_15k_usd_over_last_3_years": false
}
},
"exclusions_agreement": true
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"quote_id": {
"type": "string",
"description": "quote id from Thimble quote endpoint"
},
"client_email_address": {
"type": "string",
"description": "policy customer email address"
},
"client_first_name": {
"type": "string",
"description": "policy customer first name"
},
"client_last_name": {
"type": "string",
"description": "policy customer last name"
},
"client_business_name": {
"type": "string",
"description": "policy customer business name"
},
"client_phone_number": {
"type": "string",
"description": "policy customer phone number"
},
"client_questions": {
"type": "object",
"properties": {
"smb": {
"type": "object",
"properties": {
"purchased_before": {
"type": "boolean",
"description": "if user purchased smb policy before. Text may like \"Have you ever purchased business insurance before?\""
},
"loss_more_than_15k_usd_over_last_3_years": {
"type": "boolean",
"description": "if purchased, have losses more than $15k over last 3 years. Text may like \"Have you had any losses totaling more than $15k over the last three years?\""
}
},
"required": [
"purchased_before"
],
"description": "ask before submitting a smb policy."
},
"event": {
"type": "object",
"properties": {
"purchased_before": {
"type": "boolean",
"description": "if user purchased smb policy before. Text may like \"Have you ever purchased event insurance before?\""
},
"loss_more_than_15k_usd_over_last_3_years": {
"type": "boolean",
"description": "if purchased, have losses more than $15k over last 3 years. Text may like \"Have you had any losses totaling more than $15k over the last three years?\""
}
},
"required": [
"purchased_before"
],
"description": "ask before submitting an event policy."
},
"bop": {
"type": "object",
"properties": {
"purchased_before": {
"type": "boolean",
"description": "if user purchased smb policy before. Text may like \"Have you ever purchased event insurance before?\""
},
"claims_number_over_last_5_years": {
"type": "number",
"description": "if purchased, the number of business related insurance claims. Text may like \"How many business related insurance claims you had in the last 5 years?\""
},
"claims_detail": {
"type": "array",
"items": {
"type": "object",
"properties": {
"amount": {
"type": "number",
"description": "the claim amount"
},
"description": {
"type": "string",
"description": "the short description of the claim"
}
},
"required": [
"amount",
"description"
]
},
"description": "if there are any claims, ask the detail of the claims, include the claim amount and the brief of the claim"
}
},
"required": [
"purchased_before"
],
"description": "required for a bop policy, ask before submitting a bop policy."
}
},
"description": "ask user before submit a policy request of a type for the first time"
},
"additional_insured": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "name of additional insured"
},
"email": {
"type": "string",
"description": "email address of additional insured"
},
"certificate_holder": {
"type": "string",
"description": "certificate holder of additional insured"
}
},
"required": [
"name",
"email"
]
},
"description": "additional insured of this policy"
},
"exclusions_agreement": {
"type": "boolean",
"description": "whether the exclusions which is returned by quote endpoint is confirmed, should be true. If the value is empty or false, would be knocked out"
},
"payment_method_id": {
"type": "string",
"description": "id of payment method to use. Use default if not passed"
}
},
"required": [
"quote_id",
"client_email_address",
"client_first_name",
"client_last_name",
"exclusions_agreement"
]
}200Headers
Content-Type: application/jsonBody
{
"policy_no": "IBL-P39TF45GM"
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"policy_no": {
"type": "string",
"description": "policy number"
}
},
"required": [
"policy_no"
]
}broker ¶
Apply Agency Signup Request EndpointPOST/broker/apply
This endpoint allows developers to apply request for agency signup.
Example URI
Headers
Content-Type: application/jsonBody
{
"email_address": "bob.smith@thimble.com",
"first_name": "Bob",
"last_name": "Smith",
"company_name": "Bold Penguin",
"external_uid": "112345",
"appname": "bp-tanent-id",
"phone_number": "0000000000",
"source": "BoldPenguin",
"request_type": "agency-signup",
"redirect_url": "https://redirect-url.com",
"organization_name": "Thimble",
"member_view_all_customers": true
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"request_type": {
"type": "string",
"description": "the request type, for Bold Penguin agency signup, it should be \"agency-signup\", otherwise, leave it null."
},
"email_address": {
"type": "string",
"description": "The email address of the agent."
},
"first_name": {
"type": "string",
"description": "The first name of the agent."
},
"last_name": {
"type": "string",
"description": "The last name of the agent."
},
"external_uid": {
"type": "string",
"description": "The unique identify of the agent in your system."
},
"appname": {
"type": "string",
"description": "the app name (tanent id in BP system)"
},
"company_name": {
"type": "string",
"description": "The company name of the agent, it is required when request_type is \"agency-signup\""
},
"phone_number": {
"type": "string",
"description": "The phone number of the agent, it is required when request_type is \"agency-signup\""
},
"source": {
"type": "string",
"description": "the broker source, it is required when request_type is \"agency-signup\", for Bold Penguin developers, it should be \"BoldPenguin\""
},
"redirect_url": {
"type": "string",
"description": "The URL that we will redirect to after sign up success, it is required when request_type is \"agency-signup\""
},
"organization_name": {
"type": "string",
"description": "The name of organization, required when has an organization, it is required when request_type is \"agency-signup\""
},
"member_view_all_customers": {
"type": "boolean",
"description": "whether it allows organization member to visit other organization member's customer info and policy info"
}
},
"required": [
"email_address",
"first_name",
"last_name",
"organization_name"
]
}200If request_type is ‘agency-signup’
Headers
Content-Type: application/jsonBody
{
"signup_url": "https://open-api-test.thimble.com/broker/agency/signup?token=7db2f004-9116-4134-8300-c1b09e904108"
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"signup_url": {
"type": "string",
"description": "The url is used for signup. You can redirect to this url to complete the signup flow. Only return it when the request_type is \"agency-signup\"."
}
}
}200If request_type is NOT ‘agency-signup’
Headers
Content-Type: application/jsonBody
{
"token": "7db2f004-9116-4134-8300-c1b09e904108"
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "The token is used for signup. Only returns it when the request_type is NOT 'agency-signup'"
}
}
}Get or Create Agent EndpointPOST/get-or-create-agent
This endpoint allows developers to retrieve information of an agent. If the agent is not existing in Thimble, we’ll create it. This endpoint only can be called when the caller is a master broker in Thimble.
Example URI
Headers
Content-Type: application/json
appkey: your_app_key
api-version: 6
x-timestamp: unix timestamp
x-signature: signature of the requestBody
{
"email_address": "bob.smith@thimble.com",
"first_name": "Bob",
"last_name": "Smith",
"external_uid": "112345",
"appname": "bp-tanent-id",
"organization": {
"name": "Thimble",
"role": "owner",
"external_org_id": "342453"
}
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"email_address": {
"type": "string",
"description": "The email address of the agent."
},
"first_name": {
"type": "string",
"description": "The first name of the agent."
},
"last_name": {
"type": "string",
"description": "The last name of the agent."
},
"external_uid": {
"type": "string",
"description": "The unique identify of the agent in your system."
},
"appname": {
"type": "string",
"description": "the app name (tanent id in BP system)"
},
"organization": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name of organization, required when has an organization"
},
"role": {
"type": "string",
"description": "The role in the organization, can be owner or member. One organization can have one and only one owner. Default value is member."
},
"external_org_id": {
"type": "string",
"description": "The unique identify of the organization in your system if has one."
}
},
"required": [
"name"
],
"description": "The organization info, if there is no organization, leave it null"
}
},
"required": [
"email_address",
"first_name",
"last_name"
]
}200Headers
Content-Type: application/jsonBody
{
"broker_id": "PK7Q2Z6KU",
"access_token": "1.da5973f4b24b392bcd1dce7431ae16811133c167",
"expire_at": 1594493168
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"broker_id": {
"type": "string",
"description": "The unique thimble identify for the agent."
},
"access_token": {
"type": "string",
"description": "The token is used for authorization. You can add this token to the request header `authorization: token {access-token}`. Once you use this token to authorize, you can access to the agent's data."
},
"expire_at": {
"type": "string",
"description": "The unix when the access token expiring."
}
},
"required": [
"broker_id",
"access_token",
"expire_at"
]
}