Coterie Documents API
Retrieves policy documents and proposals generated for a quote or an issued policy, including the documentation delivered to the policyholder on successful policy issuance.
Retrieves policy documents and proposals generated for a quote or an issued policy, including the documentation delivered to the policyholder on successful policy issuance.
openapi: 3.0.1
info:
title: Coterie Commercial Insurance API
description: >-
The Coterie Commercial Insurance API lets appointed agents and digital
partners establish a commercial account, create applications describing an
insured small business, generate rated bindable quotes for Business Owners
Policy (BOP), General Liability (GL), Professional Liability (PL), and
Workers' Compensation (WC), bind and issue policies, look up industry /
NAICS classifications, retrieve policy documents, and manage webhooks.
termsOfService: https://coterieinsurance.com/terms-of-use/
contact:
name: Coterie Insurance Partner Support
url: https://docs.coterieinsurance.com/
version: '1.0'
servers:
- url: https://api.coterieinsurance.com/v1
description: Production
- url: https://api-sandbox.coterieinsurance.com/v1
description: Sandbox
security:
- bearerAuth: []
tags:
- name: Applications
description: Commercial applications describing the insured business.
- name: Quotes
description: Rated, bindable quotes and underwriting questions.
- name: Policies
description: Binding and issuing policies from bindable quotes.
- name: Industry
description: Industry / NAICS classification lookup.
- name: Documents
description: Policy documents and proposals.
- name: Webhooks
description: Webhook subscription management.
paths:
/commercial/applications:
post:
operationId: createApplication
tags:
- Applications
summary: Create a commercial application.
description: >-
Creates a commercial application describing the insured business.
Applications have a 1:Many relationship with quotes and policies and
remain stable while quotes change over time.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Application'
responses:
'200':
description: Application created.
content:
application/json:
schema:
$ref: '#/components/schemas/ApplicationResponse'
/commercial/applications/{applicationId}:
get:
operationId: getApplication
tags:
- Applications
summary: Retrieve a commercial application.
parameters:
- $ref: '#/components/parameters/ApplicationId'
responses:
'200':
description: Application found.
content:
application/json:
schema:
$ref: '#/components/schemas/ApplicationResponse'
put:
operationId: updateApplication
tags:
- Applications
summary: Update a commercial application.
parameters:
- $ref: '#/components/parameters/ApplicationId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Application'
responses:
'200':
description: Application updated.
content:
application/json:
schema:
$ref: '#/components/schemas/ApplicationResponse'
/commercial/quotes:
post:
operationId: createQuote
tags:
- Quotes
summary: Create a bindable quote.
description: >-
Generates a rated, bindable quote for the requested lines of business
against an application. Quotes are immutable; request a new quote when
application data changes.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteRequest'
responses:
'200':
description: Quote created.
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteResponse'
/commercial/quotes/{quoteId}:
get:
operationId: getQuote
tags:
- Quotes
summary: Retrieve a quote.
parameters:
- $ref: '#/components/parameters/QuoteId'
responses:
'200':
description: Quote found.
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteResponse'
/commercial/quotes/{quoteId}/underwriting-questions:
get:
operationId: getUnderwritingQuestions
tags:
- Quotes
summary: List underwriting questions for a quote.
description: >-
Returns the underwriting questions that must be answered for the quote
to reach a "Ready to Bind" status.
parameters:
- $ref: '#/components/parameters/QuoteId'
responses:
'200':
description: Underwriting questions returned.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/UnderwritingQuestion'
/commercial/policies:
post:
operationId: bindPolicy
tags:
- Policies
summary: Bind a quote into a policy.
description: >-
Binds an existing bindable quote into an active policy. Supports binding
with a Stripe payment token, the quote ID, and the agency ID.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BindRequest'
responses:
'200':
description: Policy bound and issued.
content:
application/json:
schema:
$ref: '#/components/schemas/PolicyResponse'
/commercial/policies/{policyId}:
get:
operationId: getPolicy
tags:
- Policies
summary: Retrieve a policy.
parameters:
- $ref: '#/components/parameters/PolicyId'
responses:
'200':
description: Policy found.
content:
application/json:
schema:
$ref: '#/components/schemas/PolicyResponse'
/industry-classifications:
get:
operationId: searchIndustryClassifications
tags:
- Industry
summary: Search industry / NAICS classifications.
description: >-
Resolves a business description to an industry classification, returning
the IndustryId and AK Hash (NAICS combined with a description MD5 hash)
required when submitting applications and quotes.
parameters:
- name: description
in: query
required: true
schema:
type: string
description: Free-text business description to classify.
- name: naicsCode
in: query
required: false
schema:
type: string
description: Optional NAICS code to narrow the search.
responses:
'200':
description: Matching industry classifications.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/IndustryClassification'
/commercial/policies/{policyId}/documents:
get:
operationId: getPolicyDocuments
tags:
- Documents
summary: Retrieve documents for a policy.
description: >-
Returns policy documents and proposals generated for an issued policy,
including the documentation delivered to the policyholder on issuance.
parameters:
- $ref: '#/components/parameters/PolicyId'
responses:
'200':
description: Documents returned.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Document'
/webhooks:
get:
operationId: listWebhooks
tags:
- Webhooks
summary: List webhook subscriptions.
responses:
'200':
description: Webhook subscriptions returned.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Webhook'
post:
operationId: createWebhook
tags:
- Webhooks
summary: Create a webhook subscription.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Webhook'
responses:
'200':
description: Webhook subscription created.
content:
application/json:
schema:
$ref: '#/components/schemas/Webhook'
/webhooks/{webhookId}:
delete:
operationId: deleteWebhook
tags:
- Webhooks
summary: Delete a webhook subscription.
parameters:
- name: webhookId
in: path
required: true
schema:
type: string
responses:
'204':
description: Webhook subscription deleted.
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: >-
Pass your Coterie API key as a Bearer token in the Authorization header.
Channel partners are issued a Publishable Key (client-side) and a Secret
Key (server-side only); some operations require the Secret Key. Partners
may also authenticate via OAuth2 client-credentials to obtain a Bearer
access token. Producer attribution uses the token producer_{producerId}
form.
oauth2:
type: oauth2
flows:
clientCredentials:
tokenUrl: https://api.coterieinsurance.com/v1/oauth/token
scopes: {}
parameters:
ApplicationId:
name: applicationId
in: path
required: true
schema:
type: string
QuoteId:
name: quoteId
in: path
required: true
schema:
type: string
PolicyId:
name: policyId
in: path
required: true
schema:
type: string
schemas:
Application:
type: object
properties:
businessName:
type: string
contactEmail:
type: string
format: email
contactPhone:
type: string
mailingAddress:
$ref: '#/components/schemas/Address'
industryId:
type: integer
description: Industry identifier provided by Coterie.
akHash:
type: string
description: NAICS combined with the description MD5 hash.
grossAnnualSales:
type: number
numEmployees:
type: integer
required:
- businessName
- industryId
- akHash
ApplicationResponse:
allOf:
- $ref: '#/components/schemas/Application'
- type: object
properties:
applicationId:
type: string
status:
type: string
QuoteRequest:
type: object
properties:
applicationId:
type: string
endorsementPackages:
type: array
items:
type: string
enum:
- BOP
- GL
- PL
- WC
description: Line of business requested.
required:
- applicationId
- endorsementPackages
QuoteResponse:
type: object
properties:
quoteId:
type: string
applicationId:
type: string
status:
type: string
description: e.g. Draft, NeedsUnderwriting, ReadyToBind.
premium:
type: number
currency:
type: string
default: USD
endorsementPackages:
type: array
items:
type: string
UnderwritingQuestion:
type: object
properties:
questionId:
type: string
prompt:
type: string
answerType:
type: string
required:
type: boolean
BindRequest:
type: object
properties:
quoteId:
type: string
agencyId:
type: string
stripePaymentToken:
type: string
description: Stripe payment token used to bind via Stripe.
effectiveDate:
type: string
format: date
required:
- quoteId
- agencyId
PolicyResponse:
type: object
properties:
policyId:
type: string
policyNumber:
type: string
quoteId:
type: string
status:
type: string
description: e.g. Active, Canceled.
premium:
type: number
effectiveDate:
type: string
format: date
expirationDate:
type: string
format: date
IndustryClassification:
type: object
properties:
industryId:
type: integer
akHash:
type: string
naicsCode:
type: string
description:
type: string
Document:
type: object
properties:
documentId:
type: string
type:
type: string
description: e.g. Proposal, PolicyDeclaration, CertificateOfInsurance.
url:
type: string
format: uri
contentType:
type: string
default: application/pdf
Webhook:
type: object
properties:
webhookId:
type: string
url:
type: string
format: uri
eventType:
type: string
description: e.g. policy.issued, policy.canceled, policy.premiumUpdated.
active:
type: boolean
Address:
type: object
properties:
street:
type: string
city:
type: string
state:
type: string
zip:
type: string
country:
type: string
default: US