> ## Documentation Index
> Fetch the complete documentation index at: https://docs.effectiveai.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a digest of a product's timeline

> How a product changed, in a few kilobytes instead of the full timeline: every change in filing order with a one-line summary, where it is in force, its dates and a quote from its filing; rate plans by year with average change, policyholders and premium change; appetite changes; NAIC results; news; and objection letter topics.

With state, only the changes filed in that state, plus the state's filings, components, writing companies, rate index and each rate change with its percent, policyholders and premium change. The full timeline has every filing and form.

404 when the product has no timeline, or with state when the timeline has no filings there. Access: needs access to every configured state of the product, as for the full timeline; otherwise 403 product_access_required.



## OpenAPI

````yaml /openapi.json get /insurance/products/{productId}/timeline/digest
openapi: 3.0.3
info:
  title: Effective API
  version: 2.0.0
  description: The public Effective REST API. Authenticate using an Effective API key.
servers:
  - url: https://api.effectiveai.app/api/v2
    description: Production
security:
  - bearerAuth: []
paths:
  /insurance/products/{productId}/timeline/digest:
    get:
      tags:
        - Product timelines
      summary: Get a digest of a product's timeline
      description: >-
        How a product changed, in a few kilobytes instead of the full timeline:
        every change in filing order with a one-line summary, where it is in
        force, its dates and a quote from its filing; rate plans by year with
        average change, policyholders and premium change; appetite changes; NAIC
        results; news; and objection letter topics.


        With state, only the changes filed in that state, plus the state's
        filings, components, writing companies, rate index and each rate change
        with its percent, policyholders and premium change. The full timeline
        has every filing and form.


        404 when the product has no timeline, or with state when the timeline
        has no filings there. Access: needs access to every configured state of
        the product, as for the full timeline; otherwise 403
        product_access_required.
      operationId: getProductTimelineDigest
      parameters:
        - schema:
            type: string
            description: >-
              Managed product_ ID or bare checked code; case-insensitive with
              Crockford aliases.
          required: true
          description: >-
            Managed product_ ID or bare checked code; case-insensitive with
            Crockford aliases.
          name: productId
          in: path
        - schema:
            type: string
            enum:
              - AL
              - AK
              - AZ
              - AR
              - CA
              - CO
              - CT
              - DE
              - DC
              - FL
              - GA
              - HI
              - ID
              - IL
              - IN
              - IA
              - KS
              - KY
              - LA
              - ME
              - MD
              - MA
              - MI
              - MN
              - MS
              - MO
              - MT
              - NE
              - NV
              - NH
              - NJ
              - NM
              - NY
              - NC
              - ND
              - OH
              - OK
              - OR
              - PA
              - RI
              - SC
              - SD
              - TN
              - TX
              - UT
              - VT
              - VA
              - WA
              - WV
              - WI
              - WY
            description: Only the changes filed in this state, with the state's summary.
            example: TX
          required: false
          description: Only the changes filed in this state, with the state's summary.
          name: state
          in: query
      responses:
        '200':
          description: A digest of the product's timeline.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V2ProductTimelineDigest'
        '400':
          description: Invalid request, including invalid_id for a malformed product ID.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V2CodedError'
        '401':
          description: Missing or invalid credentials, or credential scope denied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V2CodedError'
        '403':
          description: >-
            product_access_required: your organization doesn't have access to
            every configured state of the product.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V2CodedError'
        '404':
          description: Product not found, it has no timeline, or none in that state.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V2CodedError'
        '500':
          description: Unexpected server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V2CodedError'
        '503':
          description: Dependency unavailable. Honor Retry-After (seconds).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V2CodedError'
      security:
        - bearerAuth: []
components:
  schemas:
    V2ProductTimelineDigest:
      type: object
      properties:
        id:
          type: string
          description: Timeline slug.
        productId:
          type: string
          nullable: true
          description: Directory product (product_…) this timeline describes.
        title:
          type: string
          minLength: 1
          maxLength: 200
          description: Product name as shown on the timeline.
        carrier:
          type: string
          minLength: 1
          maxLength: 200
          description: Carrier or group that files the product.
        lineLabel:
          type: string
          minLength: 1
          maxLength: 200
          description: Line of business in plain words.
        windowStart:
          type: string
          format: date
          description: First filing date the timeline covers.
        dataAsOf:
          type: string
          format: date
          description: >-
            The timeline reflects SERFF filings through this date. Check SERFF
            for filings after it.
        pageUrl:
          type: string
          nullable: true
          maxLength: 2048
          format: uri
          description: Published timeline page, when one exists; may require sign-in.
        totals:
          type: object
          properties:
            changes:
              type: integer
              minimum: 0
            filings:
              type: integer
              minimum: 0
            states:
              type: integer
              minimum: 0
          required:
            - changes
            - filings
            - states
          additionalProperties: false
        changes:
          type: array
          items:
            $ref: '#/components/schemas/V2ProductTimelineDigestChange'
          description: Every change, oldest filing first.
        ratePlanYears:
          type: array
          items:
            $ref: '#/components/schemas/V2ProductTimelineRatePlanYear'
          description: Only years with at least three rate plans.
        appetite:
          type: array
          items:
            $ref: '#/components/schemas/V2ProductTimelineDigestAppetite'
        naic:
          $ref: '#/components/schemas/V2ProductTimelineNaic'
        news:
          type: array
          items:
            type: object
            properties:
              date:
                type: string
                format: date
              title:
                type: string
                minLength: 1
                maxLength: 300
              url:
                type: string
                format: uri
              kind:
                type: string
                enum:
                  - product_change
                  - pricing
                  - appetite_distribution
                  - financial_results
            required:
              - date
              - title
              - url
              - kind
            additionalProperties: false
        objectionTopics:
          type: object
          properties:
            admin:
              type: integer
              minimum: 0
            statute:
              type: integer
              minimum: 0
            rating_rules:
              type: integer
              minimum: 0
            form_language:
              type: integer
              minimum: 0
            rate_support:
              type: integer
              minimum: 0
            cat_model:
              type: integer
              minimum: 0
          description: Regulator objection letters by topic.
        state:
          $ref: '#/components/schemas/V2ProductTimelineDigestState'
      required:
        - id
        - productId
        - title
        - carrier
        - lineLabel
        - windowStart
        - dataAsOf
        - pageUrl
        - totals
        - changes
        - ratePlanYears
        - appetite
        - naic
        - news
        - objectionTopics
        - state
      additionalProperties: false
    V2CodedError:
      allOf:
        - $ref: '#/components/schemas/V2Error'
        - type: object
          properties:
            code:
              type: string
              minLength: 1
              description: Stable error code. Clients must tolerate unknown future codes.
            details:
              type: array
              items:
                type: object
                properties:
                  location:
                    type: string
                    enum:
                      - path
                      - query
                      - header
                      - body
                  path:
                    type: array
                    items:
                      type: string
                      maxLength: 64
                    maxItems: 12
                  code:
                    type: string
                    enum:
                      - required
                      - invalid_type
                      - invalid_value
                      - unknown_field
                  message:
                    type: string
                    minLength: 1
                    maxLength: 200
                required:
                  - location
                  - path
                  - code
                  - message
              minItems: 1
              maxItems: 20
              description: Bounded safe validation issues; may omit some invalid fields.
            requestId:
              type: string
              minLength: 1
              maxLength: 128
              description: >-
                Existing server correlation for this HTTP attempt, when
                available.
            dataset:
              type: string
              enum:
                - naic
                - osha
              description: Dataset needed for dataset_not_enabled.
            businessCode:
              type: string
              description: The rater’s own refusal code, for business_rejection.
            violations:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                    description: Authored or built-in constraint code
                  message:
                    type: string
                    description: Authored message for the failed constraint
                  path:
                    type: string
                    description: Input path of the offending value; empty for the request
                  value:
                    nullable: true
                    description: Offending input value, size-bounded by the runtime
                  constraint:
                    type: string
                    description: The constraint the value failed, as text
                  cite:
                    type: string
                    nullable: true
                    description: >-
                      Filing citation of the constraint, when the source cites
                      one
                required:
                  - code
                  - message
                  - path
                  - value
                  - constraint
                  - cite
                additionalProperties: false
              maxItems: 256
              description: >-
                Each input constraint the submission failed, for invalid_inputs
                and business_rejection.
            violationsTruncated:
              type: boolean
              description: >-
                True when the rater reported more violations than violations
                holds.
            executionId:
              type: string
              description: >-
                The recorded execution of a failed rating, for rater rating
                failures.
            accessUrl:
              type: string
              nullable: true
              format: uri
              description: >-
                Where to add the product to your account, for
                product_access_required.
          required:
            - code
    V2ProductTimelineDigestChange:
      type: object
      properties:
        id:
          type: string
          pattern: ^[a-z0-9][a-z0-9-]{0,63}$
          description: The change's judgment ID, stable across rebuilds.
        title:
          type: string
          minLength: 1
          maxLength: 200
        summary:
          type: string
          description: >-
            The change in one line: when it was filed, where it is in force and
            when, pending and withdrawn states, whether it is a rate plan, and
            its writing companies.
        category:
          type: string
          enum:
            - product
            - regulatory
            - other
          description: >-
            product: the carrier's own change to coverage, price, eligibility or
            writing company. regulatory: made to comply with a statute,
            regulation or regulator request, or to follow an advisory
            organization's revision made for that reason. other: housekeeping,
            such as corrections, notices, billing, forms lists and
            one-policyholder manuscripts.
        origin:
          type: string
          enum:
            - statute_or_regulator
            - advisory_org
          description: Who required a regulatory change; absent otherwise.
        lanes:
          type: array
          items:
            type: string
            enum:
              - launch
              - rate
              - eligibility_underwriting
              - coverage_added
              - coverage_removed
              - rating
              - other
            description: >-
              launch: a new writing company or program. rate: an overall rate
              level change. eligibility_underwriting: who is eligible, including
              classes, appetite and underwriting rules. coverage_added: coverage
              added. coverage_removed: coverage removed or limited. rating:
              pricing rules, such as factors, deductible options and discounts.
              other: anything else.
          minItems: 1
          maxItems: 7
          description: >-
            What the change does, one or more; a timeline groups it under the
            first.
        ratePlan:
          type: boolean
          description: Whether the change is a rate plan revision.
        firstSubmitted:
          type: string
          nullable: true
          format: date
        effective:
          type: object
          properties:
            first:
              type: string
              nullable: true
              format: date
            last:
              type: string
              nullable: true
              format: date
          required:
            - first
            - last
          additionalProperties: false
        counts:
          type: object
          properties:
            inForce:
              type: integer
              minimum: 0
              description: States where the change is in force.
            pending:
              type: integer
              minimum: 0
              description: States where it is filed but not yet in force.
            withdrawn:
              type: integer
              minimum: 0
              description: States where it was withdrawn or disapproved.
          required:
            - inForce
            - pending
            - withdrawn
          additionalProperties: false
        leadStates:
          type: array
          items:
            type: string
            enum:
              - AL
              - AK
              - AZ
              - AR
              - CA
              - CO
              - CT
              - DE
              - DC
              - FL
              - GA
              - HI
              - ID
              - IL
              - IN
              - IA
              - KS
              - KY
              - LA
              - ME
              - MD
              - MA
              - MI
              - MN
              - MS
              - MO
              - MT
              - NE
              - NV
              - NH
              - NJ
              - NM
              - NY
              - NC
              - ND
              - OH
              - OK
              - OR
              - PA
              - RI
              - SC
              - SD
              - TN
              - TX
              - UT
              - VT
              - VA
              - WA
              - WV
              - WI
              - WY
            description: USPS state code.
          maxItems: 10
          description: States where it took effect first.
        newFormCount:
          type: integer
          minimum: 0
          description: Forms the change adds; the full timeline lists them.
        writingCompanies:
          type: array
          items:
            type: string
            minLength: 1
            maxLength: 200
          maxItems: 50
        quote:
          $ref: '#/components/schemas/V2ProductTimelineDigestQuote'
      required:
        - id
        - title
        - summary
        - category
        - lanes
        - ratePlan
        - firstSubmitted
        - effective
        - counts
        - leadStates
        - newFormCount
        - writingCompanies
        - quote
      additionalProperties: false
      description: One change, without its per-state, per-form and per-filing detail.
    V2ProductTimelineRatePlanYear:
      type: object
      properties:
        year:
          type: integer
          minimum: 1990
          maximum: 2100
        ratePlanCount:
          type: integer
          minimum: 0
        stateCount:
          type: integer
          minimum: 0
        averagePercent:
          type: number
          description: Percent, where 6.5 is +6.5%.
        minPercent:
          type: number
          description: Percent, where 6.5 is +6.5%.
        maxPercent:
          type: number
          description: Percent, where 6.5 is +6.5%.
        premiumChange:
          type: number
          nullable: true
          description: US dollars.
        policyholders:
          type: integer
          nullable: true
          minimum: 0
      required:
        - year
        - ratePlanCount
        - stateCount
        - averagePercent
        - minPercent
        - maxPercent
        - premiumChange
        - policyholders
      additionalProperties: false
      description: Rate plans taking effect in one year, across states.
    V2ProductTimelineDigestAppetite:
      type: object
      properties:
        subject:
          type: string
          minLength: 1
          maxLength: 200
          description: Who or what the appetite change is about.
        direction:
          type: string
          enum:
            - widens
            - narrows
        announced:
          type: string
          nullable: true
          format: date
          description: When the filings first describe it.
        counts:
          type: object
          properties:
            inForce:
              type: integer
              minimum: 0
            pending:
              type: integer
              minimum: 0
          required:
            - inForce
            - pending
          additionalProperties: false
        changeIds:
          type: array
          items:
            type: string
            pattern: ^[a-z0-9][a-z0-9-]{0,63}$
            description: Lowercase words joined by hyphens; stable across rebuilds.
          minItems: 1
          maxItems: 10
          description: The changes that carry it.
        quote:
          $ref: '#/components/schemas/V2ProductTimelineDigestQuote'
      required:
        - subject
        - direction
        - announced
        - counts
        - changeIds
        - quote
      additionalProperties: false
      description: A change to who the product will write, found in underwriting rules.
    V2ProductTimelineNaic:
      type: object
      properties:
        line:
          type: string
        note:
          type: string
          nullable: true
        totals:
          type: array
          items:
            type: object
            properties:
              year:
                type: integer
                minimum: 1990
                maximum: 2100
              writtenPremium:
                type: number
                description: >-
                  Direct written premium. Annual rows without reported company
                  written premium are omitted; missing years do not mean zero.
              earnedPremium:
                type: number
                nullable: true
                description: Direct earned premium in dollars; absent on legacy documents.
              incurredLosses:
                type: number
                nullable: true
                description: Direct incurred losses in dollars, including reserve releases.
              marketEarnedPremium:
                type: number
                nullable: true
                description: Whole-market direct earned premium in dollars.
              marketIncurredLosses:
                type: number
                nullable: true
                description: Whole-market direct incurred losses in dollars.
              lossRatio:
                type: number
                nullable: true
                description: >-
                  A ratio, where 0.65 is 65%. Negative when losses or premium
                  are, as in a year of reserve releases.
              marketLossRatio:
                type: number
                nullable: true
                description: The whole market’s loss ratio for the line.
            required:
              - year
              - writtenPremium
              - lossRatio
              - marketLossRatio
            additionalProperties: false
      required:
        - line
        - note
        - totals
      additionalProperties: false
      description: >-
        Statutory results for the writing companies, from NAIC annual
        statements.
    V2ProductTimelineDigestState:
      type: object
      nullable: true
      properties:
        code:
          type: string
          enum:
            - AL
            - AK
            - AZ
            - AR
            - CA
            - CO
            - CT
            - DE
            - DC
            - FL
            - GA
            - HI
            - ID
            - IL
            - IN
            - IA
            - KS
            - KY
            - LA
            - ME
            - MD
            - MA
            - MI
            - MN
            - MS
            - MO
            - MT
            - NE
            - NV
            - NH
            - NJ
            - NM
            - NY
            - NC
            - ND
            - OH
            - OK
            - OR
            - PA
            - RI
            - SC
            - SD
            - TN
            - TX
            - UT
            - VT
            - VA
            - WA
            - WV
            - WI
            - WY
          description: USPS state code.
        filingCount:
          type: integer
          minimum: 0
        medianDaysToDisposition:
          type: number
          nullable: true
          minimum: 0
        objectionLetterCount:
          type: integer
          minimum: 0
        objectionTopics:
          type: object
          properties:
            admin:
              type: integer
              minimum: 0
            statute:
              type: integer
              minimum: 0
            rating_rules:
              type: integer
              minimum: 0
            form_language:
              type: integer
              minimum: 0
            rate_support:
              type: integer
              minimum: 0
            cat_model:
              type: integer
              minimum: 0
        components:
          type: object
          properties:
            rate:
              type: object
              properties:
                filingCount:
                  type: integer
                  minimum: 0
                lastEffective:
                  type: string
                  nullable: true
                  format: date
                latestTrackingNumber:
                  type: string
                  nullable: true
                  pattern: ^[A-Za-z0-9][A-Za-z0-9-]{2,31}$
                  description: SERFF tracking number, such as HART-133839761.
              required:
                - filingCount
                - lastEffective
                - latestTrackingNumber
              additionalProperties: false
            forms:
              type: object
              properties:
                filingCount:
                  type: integer
                  minimum: 0
                lastEffective:
                  type: string
                  nullable: true
                  format: date
                latestTrackingNumber:
                  type: string
                  nullable: true
                  pattern: ^[A-Za-z0-9][A-Za-z0-9-]{2,31}$
                  description: SERFF tracking number, such as HART-133839761.
              required:
                - filingCount
                - lastEffective
                - latestTrackingNumber
              additionalProperties: false
            rules:
              type: object
              properties:
                filingCount:
                  type: integer
                  minimum: 0
                lastEffective:
                  type: string
                  nullable: true
                  format: date
                latestTrackingNumber:
                  type: string
                  nullable: true
                  pattern: ^[A-Za-z0-9][A-Za-z0-9-]{2,31}$
                  description: SERFF tracking number, such as HART-133839761.
              required:
                - filingCount
                - lastEffective
                - latestTrackingNumber
              additionalProperties: false
            eligibility:
              type: object
              properties:
                filingCount:
                  type: integer
                  minimum: 0
                lastEffective:
                  type: string
                  nullable: true
                  format: date
                latestTrackingNumber:
                  type: string
                  nullable: true
                  pattern: ^[A-Za-z0-9][A-Za-z0-9-]{2,31}$
                  description: SERFF tracking number, such as HART-133839761.
              required:
                - filingCount
                - lastEffective
                - latestTrackingNumber
              additionalProperties: false
          required:
            - rate
            - forms
            - rules
            - eligibility
          additionalProperties: false
          description: >-
            For each part of the product, how often it was filed and when last.
            Extracted from filed documents and form schedules, and not yet
            verified for completeness or for comparison across carriers.
            Staff-only: a public read of the timeline leaves it out until it is
            verified.
        writers:
          type: array
          items:
            type: object
            properties:
              naic:
                type: string
                pattern: ^\d{5}$
              name:
                type: string
                minLength: 1
                maxLength: 200
              filingCount:
                type: integer
                minimum: 0
              leadFilingCount:
                type: integer
                minimum: 0
                description: Filings where it is the first company named.
              firstEffective:
                type: string
                format: date
              lastEffective:
                type: string
                format: date
            required:
              - naic
              - name
              - filingCount
              - leadFilingCount
              - firstEffective
              - lastEffective
            additionalProperties: false
          maxItems: 50
        rateIndex:
          type: array
          items:
            type: object
            properties:
              effective:
                type: string
                format: date
              index:
                type: number
                minimum: 0
                exclusiveMinimum: true
                description: Cumulative rate level; 100 at the start.
              trackingNumber:
                type: string
                pattern: ^[A-Za-z0-9][A-Za-z0-9-]{2,31}$
                description: SERFF tracking number, such as HART-133839761.
            required:
              - effective
              - index
              - trackingNumber
            additionalProperties: false
          maxItems: 200
        naic:
          type: array
          items:
            type: object
            properties:
              year:
                type: integer
                minimum: 1990
                maximum: 2100
              writtenPremium:
                type: number
                description: >-
                  Direct written premium. Annual rows without reported company
                  written premium are omitted; missing years do not mean zero.
              earnedPremium:
                type: number
                nullable: true
                description: Direct earned premium in dollars; absent on legacy documents.
              incurredLosses:
                type: number
                nullable: true
                description: Direct incurred losses in dollars, including reserve releases.
              marketEarnedPremium:
                type: number
                nullable: true
                description: Whole-market direct earned premium in dollars.
              marketIncurredLosses:
                type: number
                nullable: true
                description: Whole-market direct incurred losses in dollars.
              lossRatio:
                type: number
                nullable: true
                description: >-
                  A ratio, where 0.65 is 65%. Negative when losses or premium
                  are, as in a year of reserve releases.
              marketLossRatio:
                type: number
                nullable: true
                description: The whole market’s loss ratio for the line.
              marketShare:
                type: number
                nullable: true
                description: >-
                  A ratio, where 0.65 is 65%. Negative when losses or premium
                  are, as in a year of reserve releases.
            required:
              - year
              - writtenPremium
              - lossRatio
              - marketLossRatio
              - marketShare
            additionalProperties: false
          maxItems: 20
          description: Oldest year first.
        rateChanges:
          type: array
          items:
            $ref: '#/components/schemas/V2ProductTimelineStateRateChange'
          description: The state's rate changes, oldest effective first.
      required:
        - code
        - filingCount
        - medianDaysToDisposition
        - objectionLetterCount
        - objectionTopics
        - components
        - writers
        - rateIndex
        - naic
        - rateChanges
      additionalProperties: false
      description: With ?state, that state. Null without ?state.
    V2Error:
      type: object
      properties:
        error:
          type: string
          minLength: 1
          description: Human-readable explanation of the failure.
      required:
        - error
    V2ProductTimelineDigestQuote:
      type: object
      nullable: true
      properties:
        text:
          type: string
          description: Words quoted from the filing, cut at 300 characters.
        trackingNumber:
          type: string
          description: SERFF tracking number of the quoted filing.
        document:
          type: string
          nullable: true
          description: Filed document name; null for the filing description.
        page:
          type: integer
          nullable: true
          minimum: 0
          exclusiveMinimum: true
      required:
        - text
        - trackingNumber
        - document
        - page
      additionalProperties: false
      description: The first quote supporting the change.
    V2ProductTimelineStateRateChange:
      type: object
      properties:
        trackingNumber:
          type: string
          pattern: ^[A-Za-z0-9][A-Za-z0-9-]{2,31}$
          description: SERFF tracking number, such as HART-133839761.
        changeId:
          type: string
          pattern: ^[a-z0-9][a-z0-9-]{0,63}$
          description: Lowercase words joined by hyphens; stable across rebuilds.
        effective:
          type: string
          nullable: true
          format: date
        effectiveRequested:
          type: boolean
          description: >-
            Whether `effective` is the requested date rather than the approved
            one.
        status:
          type: string
          enum:
            - in_force
            - pending
            - withdrawn
            - disapproved
          description: >-
            From SERFF's normalized outcome. in_force: approved, filed,
            acknowledged or informational. pending: not yet decided, or no
            outcome recorded. withdrawn: withdrawn by the carrier. disapproved:
            rejected by the regulator.
        percent:
          type: number
          description: Overall rate change filed.
        indicatedPercent:
          type: number
          nullable: true
          description: The indicated change the filing reports.
        ratePlan:
          type: boolean
        policyholders:
          type: integer
          nullable: true
          minimum: 0
        writtenPremium:
          type: number
          nullable: true
          description: US dollars.
        premiumChange:
          type: number
          nullable: true
          description: US dollars.
      required:
        - trackingNumber
        - changeId
        - effective
        - effectiveRequested
        - status
        - percent
        - indicatedPercent
        - ratePlan
        - policyholders
        - writtenPremium
        - premiumChange
      additionalProperties: false
      description: One rate change filed in the state.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Effective API key. Send Authorization: Bearer sk-eai-...'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.