1Fort insurance (v2) API

**Access:** requires a JWT access token.

OpenAPI Specification

1fort-insurance-v2-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: 1Fort API Documentation insurance (v2) insurance (v2) API
  description: '# 1Fort API


    REST API for the 1Fort insurance platform. This document is the authoritative

    map of the API surface; endpoints are grouped in the sidebar by **app** and

    **version**, and large apps are split into per-resource sub-groups.


    ## Authentication


    Almost every endpoint requires a **JWT access token**. Send it in the

    `Authorization` header as either `Bearer <token>` or `JWT <token>`. Tokens may

    also be presented as an HTTP-only cookie. Endpoints documented with no security

    requirement are intentionally public (for example sign-in, OTP and storefront

    endpoints).


    ## Multi-tenancy


    Resources are scoped to a tenant. Nested routes carry the owning resource id in

    the path (for example `/v2/broker/{business_pk}/applications`); a token is only

    authorised for the businesses its user may access. Object-level permissions are

    enforced per endpoint.


    ## Versioning


    `v2` endpoints live under `/apis/v2/...` and are the current surface. `v1`

    endpoints remain documented for compatibility. Endpoints marked **deprecated**

    are scheduled for removal; prefer the documented replacement.

    '
  termsOfService: https://www.1fort.com/
  license:
    name: Privately owned
  version: v1
servers:
- url: https://api.1fort.com/apis/
security:
- Bearer: []
tags:
- name: insurance (v2)
  x-displayName: Insurance (v2)
  description: '**Access:** requires a JWT access token.'
paths:
  /v2/broker/insurance-coverage-types:
    parameters: []
    get:
      operationId: v2_broker_insurance-coverage-types_list
      description: List and retrieve CoverageType (reference data).
      parameters:
      - name: search
        in: query
        description: A search term.
        required: false
        schema:
          type: string
      - name: ordering
        in: query
        description: Which field to use when ordering the results.
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return per page.
        required: false
        schema:
          type: integer
      - name: offset
        in: query
        description: The initial index from which to return the results.
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                required:
                - count
                - results
                type: object
                properties:
                  count:
                    type: integer
                  next:
                    type:
                    - string
                    - 'null'
                    format: uri
                  previous:
                    type:
                    - string
                    - 'null'
                    format: uri
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/CoverageType'
        '403':
          description: Authentication credentials were invalid, absent or insufficient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericError'
        '500':
          description: Internal server error.
      tags:
      - insurance (v2)
      summary: List Insurance coverage types
  /v2/broker/insurance-coverage-types/{id}:
    parameters:
    - name: id
      in: path
      description: A UUID string identifying this Coverage Type.
      required: true
      schema:
        type: string
        format: uuid
    get:
      operationId: v2_broker_insurance-coverage-types_read
      description: List and retrieve CoverageType (reference data).
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoverageType'
        '403':
          description: Authentication credentials were invalid, absent or insufficient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericError'
        '404':
          description: Object does not exist or caller has insufficient permissions to access it.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIException'
        '500':
          description: Internal server error.
      tags:
      - insurance (v2)
      summary: Retrieve Insurance coverage type
  /v2/broker/{business_pk}/coverage-terms:
    parameters:
    - name: business_pk
      in: path
      required: true
      schema:
        type: string
    get:
      operationId: v2_broker_coverage-terms_list
      summary: Read + Create coverage terms.
      description: '- GET  /coverage-terms/           — list for this business

        - GET  /coverage-terms/{id}/      — single with full nested tree

        - POST /coverage-terms/           — create with nested lines/limits/deductibles/fees'
      parameters:
      - name: search
        in: query
        description: A search term.
        required: false
        schema:
          type: string
      - name: ordering
        in: query
        description: Which field to use when ordering the results.
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return per page.
        required: false
        schema:
          type: integer
      - name: offset
        in: query
        description: The initial index from which to return the results.
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                required:
                - count
                - results
                type: object
                properties:
                  count:
                    type: integer
                  next:
                    type:
                    - string
                    - 'null'
                    format: uri
                  previous:
                    type:
                    - string
                    - 'null'
                    format: uri
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/CoverageTerm'
        '403':
          description: Authentication credentials were invalid, absent or insufficient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericError'
        '500':
          description: Internal server error.
      tags:
      - insurance (v2)
    post:
      operationId: v2_broker_coverage-terms_create
      summary: Read + Create coverage terms.
      description: '- GET  /coverage-terms/           — list for this business

        - GET  /coverage-terms/{id}/      — single with full nested tree

        - POST /coverage-terms/           — create with nested lines/limits/deductibles/fees'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoverageTermWrite'
        '400':
          description: Invalid input.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '403':
          description: Authentication credentials were invalid, absent or insufficient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericError'
        '500':
          description: Internal server error.
      tags:
      - insurance (v2)
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CoverageTermWrite'
        required: true
  /v2/broker/{business_pk}/coverage-terms/{id}:
    parameters:
    - name: business_pk
      in: path
      required: true
      schema:
        type: string
    - name: id
      in: path
      description: A UUID string identifying this Coverage Term.
      required: true
      schema:
        type: string
        format: uuid
    get:
      operationId: v2_broker_coverage-terms_read
      summary: Read + Create coverage terms.
      description: '- GET  /coverage-terms/           — list for this business

        - GET  /coverage-terms/{id}/      — single with full nested tree

        - POST /coverage-terms/           — create with nested lines/limits/deductibles/fees'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoverageTerm'
        '403':
          description: Authentication credentials were invalid, absent or insufficient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericError'
        '404':
          description: Object does not exist or caller has insufficient permissions to access it.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIException'
        '500':
          description: Internal server error.
      tags:
      - insurance (v2)
components:
  schemas:
    CoverageSubLimit:
      required:
      - sub_limit_amount
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        limit_type:
          title: Limit type
          type: string
          enum:
          - sub_limit
          - inner_limit
          - other
        sub_limit_amount:
          title: Sub limit amount
          description: Sub-limit amount
          type: string
          format: decimal
        retention_amount:
          title: Retention amount
          description: Retention/deductible amount paired with this sub-limit
          type:
          - string
          - 'null'
          format: decimal
        description:
          title: Description
          description: Description (e.g., 'Social Engineering', 'Computer Fraud')
          type: string
          maxLength: 200
        limit:
          title: Limit
          type:
          - string
          - 'null'
          format: uuid
    CarrierList:
      required:
      - name
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        name:
          title: Name
          type: string
          maxLength: 255
          minLength: 1
        logo:
          title: Logo
          type:
          - string
          - 'null'
          readOnly: true
          format: uri
        am_best_rating:
          title: Am best rating
          description: AM Best financial strength rating (e.g., A++, A+, A, A-, B++, B+)
          type:
          - string
          - 'null'
          maxLength: 255
        domains:
          description: Comma-separated list of domain names (e.g., example.com, example.org)
          type:
          - array
          - 'null'
          items:
            title: Domains
            type: string
            maxLength: 255
            minLength: 1
    CoverageDeductible:
      required:
      - deductible_type
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        deductible_type:
          title: Deductible type
          description: Type of deductible (e.g., per_claim, per_occurrence, aggregate, waiting_period)
          type: string
          enum:
          - per_claim
          - per_occurrence
          - aggregate
          - waiting_period
          - retention
          - other
        amount:
          title: Amount
          description: Deductible amount in dollars (null if percentage-only)
          type:
          - string
          - 'null'
          format: decimal
        description:
          title: Description
          description: Additional description for this deductible
          type: string
          maxLength: 200
        is_percentage:
          title: Is percentage
          description: Whether this deductible is expressed as a percentage
          type: boolean
        percentage:
          title: Percentage
          description: Deductible percentage (e.g., 5.000 for 5%)
          type:
          - string
          - 'null'
          format: decimal
        min_amount:
          title: Min amount
          description: Minimum dollar floor for percentage deductibles
          type:
          - string
          - 'null'
          format: decimal
        max_amount:
          title: Max amount
          description: Maximum dollar cap for percentage deductibles
          type:
          - string
          - 'null'
          format: decimal
    CoverageLimit:
      required:
      - limit_type
      - amount
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        limit_type:
          title: Limit type
          description: Type of limit (e.g., per_occurrence, aggregate, csl, per_person)
          type: string
          enum:
          - per_occurrence
          - aggregate
          - csl
          - per_person
          - per_accident
          - each_occurrence
          - products_completed_ops
          - personal_advertising
          - general_aggregate
          - policy_limit
          - other
        amount:
          title: Amount
          description: Limit amount
          type: string
          format: decimal
        description:
          title: Description
          description: Additional description for this limit
          type: string
          maxLength: 200
    Wholesaler:
      required:
      - name
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        name:
          title: Name
          type: string
          maxLength: 255
          minLength: 1
        logo:
          title: Logo
          type:
          - string
          - 'null'
          readOnly: true
          format: uri
        is_active:
          title: Is active
          type: boolean
        is_owned_by_1fort:
          title: Is owned by 1fort
          description: Indicates if this wholesaler is owned by 1Fort
          type: boolean
        domains:
          description: Comma-separated list of domain names (e.g., example.com, example.org)
          type:
          - array
          - 'null'
          items:
            title: Domains
            type: string
            maxLength: 255
            minLength: 1
    Coverage:
      required:
      - name
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        name:
          title: Name
          description: Coverage name (e.g., 'Cyber Liability', 'Commercial Auto')
          type: string
          maxLength: 200
          minLength: 1
        coverage_type:
          $ref: '#/components/schemas/CoverageType'
        policy_type:
          title: Policy type
          type: string
          enum:
          - admitted
          - surplus_lines
        carrier:
          $ref: '#/components/schemas/CarrierList'
        carrier_am_best_rating:
          title: Carrier am best rating
          description: Snapshot of carrier's AM Best rating at the time the coverage term was created
          type: string
          maxLength: 50
        underwriter_name:
          title: Underwriter name
          type: string
          maxLength: 200
        underwriter_email:
          title: Underwriter email
          type: string
          format: email
          maxLength: 254
        wholesaler:
          $ref: '#/components/schemas/Wholesaler'
        mga:
          $ref: '#/components/schemas/Wholesaler'
        premium:
          title: Premium
          description: Premium amount for this coverage
          type:
          - string
          - 'null'
          format: decimal
        minimum_earned_premium:
          title: Minimum earned premium
          description: Minimum earned premium percentage (carrier-specific)
          type:
          - string
          - 'null'
          format: decimal
        participation_percentage:
          title: Participation percentage
          description: Carrier's share of the risk as percentage (e.g., 23.900 for 23.9%)
          type:
          - string
          - 'null'
          format: decimal
        commission_rate:
          title: Commission rate
          description: Commission rate as percentage (e.g., 15.00 for 15%)
          type:
          - string
          - 'null'
          format: decimal
        is_excess:
          title: Is excess
          description: Whether this is excess/umbrella coverage
          type: boolean
        waiting_period_hours:
          title: Waiting period hours
          description: Waiting period in hours (e.g., 8.00 for 8-hour BI waiting period)
          type:
          - string
          - 'null'
          format: decimal
        limits:
          type: array
          items:
            $ref: '#/components/schemas/CoverageLimit'
          readOnly: true
        deductibles:
          type: array
          items:
            $ref: '#/components/schemas/CoverageDeductible'
          readOnly: true
        fees:
          type: array
          items:
            $ref: '#/components/schemas/CoverageFee'
          readOnly: true
    APIException:
      title: Generic API Error
      required:
      - detail
      type: object
      properties:
        detail:
          description: Error details
          type: string
    CoverageTermWrite:
      type: object
      properties:
        reference_number:
          title: Reference number
          type: string
          maxLength: 100
        business:
          title: Business
          type:
          - integer
          - 'null'
        broker:
          title: Broker
          type:
          - integer
          - 'null'
        source:
          title: Source
          description: Source of the coverage term (e.g., 'herald', 'email', 'manual')
          type: string
          maxLength: 50
        coverages:
          type: array
          items:
            $ref: '#/components/schemas/CoverageWrite'
        fees:
          type: array
          items:
            $ref: '#/components/schemas/CoverageFeeWrite'
        sub_limits:
          type: array
          items:
            $ref: '#/components/schemas/CoverageSubLimitWrite'
    CoverageWrite:
      required:
      - name
      - carrier_id
      type: object
      properties:
        name:
          title: Name
          description: Coverage name (e.g., 'Cyber Liability', 'Commercial Auto')
          type: string
          maxLength: 200
          minLength: 1
        coverage_type_id:
          title: Coverage type id
          description: Coverage type UUID from search_coverage_types / match_coverage_types.
          type:
          - string
          - 'null'
          format: uuid
        policy_type:
          title: Policy type
          type: string
          enum:
          - admitted
          - surplus_lines
        carrier_id:
          title: Carrier id
          description: Carrier UUID for this coverage line. Required on every coverage. Pass `null` only when the coverage genuinely has no carrier yet (e.g., a placeholder line in a draft). Must be a UUID resolved via carrier search/match, never a carrier name string.
          type:
          - string
          - 'null'
          format: uuid
        carrier_am_best_rating:
          title: Carrier am best rating
          description: Snapshot of carrier's AM Best rating at the time the coverage term was created
          type: string
          maxLength: 50
        underwriter_name:
          title: Underwriter name
          type: string
          maxLength: 200
        underwriter_email:
          title: Underwriter email
          type: string
          format: email
          maxLength: 254
        wholesaler_id:
          title: Wholesaler id
          type:
          - string
          - 'null'
          format: uuid
        mga_id:
          title: Mga id
          type:
          - string
          - 'null'
          format: uuid
        premium:
          title: Premium
          description: Premium amount for this coverage
          type:
          - string
          - 'null'
          format: decimal
        minimum_earned_premium:
          title: Minimum earned premium
          description: Minimum earned premium percentage (carrier-specific)
          type:
          - string
          - 'null'
          format: decimal
        participation_percentage:
          title: Participation percentage
          description: Carrier's share of the risk as percentage (e.g., 23.900 for 23.9%)
          type:
          - string
          - 'null'
          format: decimal
        commission_rate:
          title: Commission rate
          description: Commission rate as percentage (e.g., 15.00 for 15%)
          type:
          - string
          - 'null'
          format: decimal
        is_excess:
          title: Is excess
          description: Whether this is excess/umbrella coverage
          type: boolean
        waiting_period_hours:
          title: Waiting period hours
          description: Waiting period in hours (e.g., 8.00 for 8-hour BI waiting period)
          type:
          - string
          - 'null'
          format: decimal
        limits:
          type: array
          items:
            $ref: '#/components/schemas/CoverageLimitWrite'
        deductibles:
          type: array
          items:
            $ref: '#/components/schemas/CoverageDeductibleWrite'
    CoverageDeductibleWrite:
      required:
      - deductible_type
      type: object
      properties:
        deductible_type:
          title: Deductible type
          description: Type of deductible (e.g., per_claim, per_occurrence, aggregate, waiting_period)
          type: string
          enum:
          - per_claim
          - per_occurrence
          - aggregate
          - waiting_period
          - retention
          - other
        amount:
          title: Amount
          description: Deductible amount in dollars (null if percentage-only)
          type:
          - string
          - 'null'
          format: decimal
        description:
          title: Description
          description: Additional description for this deductible
          type: string
          maxLength: 200
        is_percentage:
          title: Is percentage
          description: Whether this deductible is expressed as a percentage
          type: boolean
        percentage:
          title: Percentage
          description: Deductible percentage (e.g., 5.000 for 5%)
          type:
          - string
          - 'null'
          format: decimal
        min_amount:
          title: Min amount
          description: Minimum dollar floor for percentage deductibles
          type:
          - string
          - 'null'
          format: decimal
        max_amount:
          title: Max amount
          description: Maximum dollar cap for percentage deductibles
          type:
          - string
          - 'null'
          format: decimal
    CoverageFee:
      required:
      - fee_type
      - amount
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        fee_type:
          title: Fee type
          type: string
          enum:
          - broker_fee
          - policy_fee
          - agency_fee
          - surplus_lines_tax
          - stamping_fee
          - inspection_fee
          - state_tax
          - municipal_fee
          - platform_fee
          - surcharge
          - discount
          - credit
          - other
        amount:
          title: Amount
          description: Fee amount
          type: string
          format: decimal
        description:
          title: Description
          description: Additional description for this fee
          type: string
          maxLength: 200
        coverage:
          title: Coverage
          description: If set, fee is for this specific coverage; if null, fee is coverage-term-level
          type:
          - string
          - 'null'
          format: uuid
    ValidationError:
      title: Validation Error
      type: object
      properties:
        non_field_errors:
          description: List of validation errors not related to any field
          type: array
          items:
            type: string
      additionalProperties:
        description: A list of error messages for each field that triggered a validation error
        type: array
        items:
          type: string
    CoverageExclusion:
      required:
      - name
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        name:
          title: Name
          description: Exclusion name (e.g., 'War and Cyber War Exclusion')
          type: string
          maxLength: 255
          minLength: 1
        description:
          title: Description
          description: Exclusion text or summary
          type: string
        coverage:
          title: Coverage
          description: If set, exclusion applies to this specific coverage
          type:
          - string
          - 'null'
          format: uuid
        source_form:
          title: Source form
          description: Which form defines this exclusion (null for base policy exclusions)
          type:
          - string
          - 'null'
          format: uuid
    CoverageTerm:
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        reference_number:
          title: Reference number
          type: string
          maxLength: 100
        source:
          title: Source
          description: Source of the coverage term (e.g., 'herald', 'email', 'manual')
          type: string
          maxLength: 50
        coverages:
          type: array
          items:
            $ref: '#/components/schemas/Coverage'
          readOnly: true
        fees:
          type: array
          items:
            $ref: '#/components/schemas/CoverageFee'
          readOnly: true
        forms:
          type: array
          items:
            $ref: '#/components/schemas/CoverageForm'
          readOnly: true
        exclusions:
          type: array
          items:
            $ref: '#/components/schemas/CoverageExclusion'
          readOnly: true
        sub_limits:
          type: array
          items:
            $ref: '#/components/schemas/CoverageSubLimit'
          readOnly: true
        created_at:
          title: Created at
          type: string
          format: date-time
          readOnly: true
    CoverageType:
      required:
      - name
      - code
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        name:
          title: Name
          type: string
          maxLength: 255
          minLength: 1
        code:
          title: Code
          description: Short code (e.g., CYB, GL, PROP, AUTO, WC).
          type: string
          maxLength: 100
          minLength: 1
        is_active:
          title: Is active
          type: boolean
        description:
          title: Description
          type: string
        logo:
          title: Logo
          type:
          - string
          - 'null'
          readOnly: true
          format: uri
    CoverageForm:
      required:
      - form_name
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        form_number:
          title: Form number
          description: Form number (e.g., 'XSV 03 10 23', 'AB-CYB-121')
          type: string
          maxLength: 50
        form_name:
          title: Form name
          description: Form name (e.g., 'War and State Cyber Exclusion')
          type: string
          maxLength: 255
          minLength: 1
        edition_date:
          title: Edition date
          description: Edition date as raw text from PDF (format varies)
          type: string
          maxLength: 20
        category:
          title: Category
          type: string
          enum:
          - exclusion
          - endorsement
          - condition
          - schedule
          - regulatory
          - other
        description:
          title: Description
          description: Body text or notes about this form
          type: string
        order:
          title: Order
          type: integer
          maximum: 32767
          minimum: 0
        coverage:
          title: Coverage
          description: If set, form applies to this specific coverage
          type:
          - string
          - 'null'
          format: uuid
    CoverageFeeWrite:
      required:
      - fee_type
      - amount
      type: object
      properties:
        fee_type:
          title: Fee type
          type: string
          enum:
          - broker_fee
          - policy_fee
          - agency_fee
          - surplus_lines_tax
          - stamping_fee
          - inspection_fee
          - state_tax
          - municipal_fee
          - platform_fee
          - surcharge
          - discount
          - credit
          - other
        amount:
          title: Amount
          description: Fee amount
          type: string
          format: decimal
        description:
          title: Description
          description: Additional description for this fee
          type: string
          maxLength: 200
    GenericError:
      title: Generic API Error
      required:
      - detail
      type: object
      properties:
        detail:
          description: Error details
          type: string
    CoverageSubLimitWrite:
      required:
      - sub_limit_amount
      type: object
      properties:
        limit_type:
          title: Limit type
          type: string
          enum:
          - sub_limit
          - inner_limit
          - other
        sub_limit_amount:
          title: Sub limit amount
          description: Sub-limit amount
          type: string
          format: decimal
        retention_amount:
          title: Retention amount
          description: Retention/deductible amount paired with this sub-limit
          type:
          - string
          - 'null'
          format: decimal
        description:
          title: Description
          description: Description (e.g., 'Social Engineering', 'Computer Fraud')
          type: string
          maxLength: 200
    CoverageLimitWrite:
      required:
      - limit_type
      - amount
      type: object
      properties:
        limit_type:
          title: Limit type
          description: Type of limit (e.g., per_occurrence, aggregate, csl, per_person)
          type: string
          enum:
          - per_occurrence
          - aggregate
          - csl
          - per_person
          - per_accident
          - each_occurrence
          - products_completed_ops
          - personal_advertising
          - general_aggregate
          - policy_limit
          - other
        amount:
          title: Amount
          description: Limit amount
          type: string
          format: decimal
        description:
          title: Description
          description: Additional description for this limit
          type: string
          maxLength: 200
  securitySchemes:
    Bearer:
      type: apiKey
      name: Authorization
      in: header
      description: JWT access token. Send as `Bearer <token>` or `JWT <token>`.
    ApiKey:
      type: apiKey
      name: Authorization
      in: header
      description: API key. Send as `Api-Key <key>`.
x-tagGroups:
- name: Agent runtime (v2)
  tags:
  - agent_runtime (v2)
- name: Analytics
  

# --- truncated at 32 KB (34 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/1fort/refs/heads/main/openapi/1fort-insurance-v2-api-openapi.yml