Coterie Applications API

Creates and retrieves commercial applications describing the insured business. Applications hold a 1:Many relationship with quotes and policies and remain stable while quotes change over time.

OpenAPI Specification

coterie-openapi.yml Raw ↑
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