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

# Retrieve a quote

> Returns the stored snapshot (never re-priced), including whether the insured has said they are interested. status is active until expires_at, then expired; interested once the insured picks an option on the hosted page (selected_option_id); interest then carries their note and whether we emailed the agency. hosted_url is always null here: it is returned only when the quote is created, or when you replace the link with the hosted-link endpoint.

Returns the stored quote exactly as it was priced; it's never re-priced. Only what happened since can differ:

* `status`: `active` until `expires_at`, then `expired`; `interested` once your client chooses an option on the [interactive quote](/guides/hosted-quote-page), and it stays `interested` after expiry.
* `selected_option_id` and `interest`: your client's choice, their note and whether we emailed your broker.
* `hosted_url` is always `null` here. To get a link again, [replace it](/api-reference/quotes/hosted-link).

A quote your key can't see (another agency, the other mode, or a colleague's quote read with a broker key) is the same `404` as an id that doesn't exist.

<RequestExample>
  ```bash cURL theme={null}
  curl https://portal.bridgelinepf.com/api/v1/quotes/qte_2lo4LFk5rf8toDFJHSUZ2O \
    -H "Authorization: Bearer $BRIDGELINE_API_KEY"
  ```

  ```javascript Node theme={null}
  const res = await fetch(`https://portal.bridgelinepf.com/api/v1/quotes/${quoteId}`, {
    headers: {
      Authorization: `Bearer ${process.env.BRIDGELINE_API_KEY}`,
    },
  })
  const quote = await res.json()
  ```

  ```python Python theme={null}
  import os
  import requests

  res = requests.get(
      f"https://portal.bridgelinepf.com/api/v1/quotes/{quote_id}",
      headers={
          "Authorization": f"Bearer {os.environ['BRIDGELINE_API_KEY']}",
      },
      timeout=30,
  )
  quote = res.json()
  ```
</RequestExample>

<ResponseExample>
  ```jsonc 200 interested theme={null}
  {
    "id": "qte_2lo4LFk5rf8toDFJaD9Xoe",
    "object": "quote",
    "livemode": true,
    "status": "interested",
    "client_reference_id": null,
    "metadata": {},
    "broker": {"email": "maria@lonestarrisk.example"},
    "created_at": "2026-10-04T15:04:05Z",
    "expires_at": "2026-11-03T15:04:05Z",
    "hosted_url": null,
    "selected_option_id": "opt_20_9",
    "interest": {
      "option_id": "opt_20_9",
      "note": "Can we start the first payment in November?",
      "submitted_at": "2026-10-05T15:02:11Z",
      "broker_notification": {
        "status": "sent",
        "reason": null,
        "recipient": "broker",
        "recipients": ["maria@lonestarrisk.example"],
        "at": "2026-10-05T15:02:13Z"
      }
    },
    "totals": {
      "premium": "46100.00",
      "taxes_and_fees": "0.00",
      "total": "46100.00",
      "weighted_minimum_earned_rate": 0.25,
      "financing_start_date": "2026-10-15"
    },
    "policies": [
      {
        "id": "pol_4Hq8Zt2m",
        "total": "46100.00",
        "minimum_earned": {"rate": 0.25},
        "carrier": {
          "name": "Scottsdale Insurance Company",
          "am_best": {"rating": "A+", "source": "am_best"}
        },
        "metadata": {}
      }
    ],
    "eligibility": {
      "status": "eligible",
      "checks": [
        {"code": "INPUT_VALID", "passed": true},
        {"code": "INSURED_STATE", "passed": true, "limit": "TX", "actual": "TX"},
        {"code": "PREMIUM_MIN", "passed": true, "limit": "4500.00", "actual": "46100.00"},
        {"code": "PREMIUM_MAX", "passed": true, "limit": "175000.00", "actual": "46100.00"},
        {"code": "AM_BEST_MIN", "passed": true, "limit": "A-"},
        {"code": "ISSUER", "passed": true},
        {"code": "COVERAGE", "passed": true},
        {"code": "POLICY_BACKDATE", "passed": true, "limit": "30 days"},
        {"code": "DATE_UNIFORMITY", "passed": true},
        {"code": "POLICY_TERM", "passed": true, "limit": "3 months", "actual": "12 months"},
        {"code": "MINIMUM_EARNED_MAX", "passed": true, "limit": "90%", "actual": "25%"}
      ],
      "reasons": []
    },
    "assumptions": [
      {
        "code": "TAXES_AND_FEES_NOT_PROVIDED",
        "param": "policies[0].taxes_and_fees",
        "message": "No taxes or fees provided; the amount financed is the premium only."
      },
      {
        "code": "AUDITABLE_ASSUMED",
        "param": "policies[0].auditable",
        "message": "Not provided; assumed auditable (the conservative choice)."
      }
    ],
    "warnings": [],
    "binding_readiness": {
      "ready": false,
      "issues": [
        {
          "code": "DOCUMENT_TYPE_REQUIRED",
          "param": "policies[0].document_type",
          "message": "Say whether this is a quote, binder or policy."
        },
        {
          "code": "MISSING_POLICY_NUMBER",
          "param": "policies[0].policy_number",
          "message": "A real policy number is required before binding."
        },
        {
          "code": "INSURED_ADDRESS_INCOMPLETE",
          "param": "insured.address",
          "message": "The insured's full mailing address is required before binding (statutory notices are mailed to it)."
        }
      ]
    },
    "recommended_option_id": "opt_25_10",
    "options": [
      {
        "id": "opt_20_9",
        "down_payment_rate": 0.2,
        "term_months": 9,
        "apr": 0.1209,
        "down_payment": "9220.00",
        "amount_financed": "36880.00",
        "monthly_payment": "4306.98",
        "finance_charge": "1882.86",
        "total_of_payments": "38762.86",
        "total_cost": "47982.86",
        "spread_clamped": false
      }
      // ...29 more options
    ]
  }
  ```

  ```json 404 theme={null}
  {
    "error": {
      "type": "not_found",
      "code": "NOT_FOUND",
      "message": "No such quote.",
      "param": "id",
      "doc_url": "https://docs.bridgelinepf.com/errors#NOT_FOUND",
      "request_id": "req_8fJ2kQ9xLm4TzW7nB3cY5pDv"
    }
  }
  ```
</ResponseExample>


## OpenAPI

````yaml GET /v1/quotes/{id}
openapi: 3.1.0
info:
  title: Bridgeline Public API
  version: '2026-09-23'
  description: >-
    Premium finance quotes and applications for agencies. Authenticate with an
    API key from Agency Portal → API Keys. Scopes: `quotes:read` (Read quotes),
    `quotes:write` (Create quotes), `applications:read` (Read applications),
    `applications:write` (Create and edit applications and policies),
    `agreements:write` (Send and void agreements, attest down payments),
    `loans:read` (Read agreements, loans and payouts), `webhooks:manage` (Manage
    webhook endpoints).
servers:
  - url: https://portal.bridgelinepf.com/api
    description: Production (base URL not final, see D2)
security:
  - bearerAuth: []
paths:
  /v1/quotes/{id}:
    get:
      tags:
        - Quotes
      summary: Retrieve a quote
      description: >-
        Returns the stored snapshot (never re-priced), including whether the
        insured has said they are interested. status is active until expires_at,
        then expired; interested once the insured picks an option on the hosted
        page (selected_option_id); interest then carries their note and whether
        we emailed the agency. hosted_url is always null here: it is returned
        only when the quote is created, or when you replace the link with the
        hosted-link endpoint.
      operationId: getQuote
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            description: The quote id (qte_…).
          description: The quote id (qte_…).
        - name: Bridgeline-Version
          in: header
          required: false
          description: >-
            API version (a date). Defaults to 2026-09-23; echoed on every
            response.
          schema:
            type: string
            pattern: ^\d{4}-\d{2}-\d{2}$
      responses:
        '200':
          description: The quote.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    description: qte_…
                  object:
                    type: string
                    const: quote
                  livemode:
                    type: boolean
                  status:
                    type: string
                    enum:
                      - active
                      - interested
                      - expired
                  client_reference_id:
                    type:
                      - string
                      - 'null'
                  metadata:
                    type: object
                    propertyNames:
                      type: string
                    additionalProperties:
                      type: string
                  broker:
                    anyOf:
                      - type: object
                        properties:
                          email:
                            type: string
                        required:
                          - email
                      - type: 'null'
                  created_at:
                    type: string
                  expires_at:
                    type: string
                  hosted_url:
                    description: Returned when the quote is created; null when retrieved.
                    type:
                      - string
                      - 'null'
                  selected_option_id:
                    type:
                      - string
                      - 'null'
                  interest:
                    anyOf:
                      - type: object
                        properties:
                          option_id:
                            type: string
                            description: >-
                              The option the insured picked (opt_…); the same as
                              selected_option_id.
                          note:
                            description: >-
                              The insured's optional note to the broker (at most
                              500 characters); null when left blank. Untrusted
                              text typed on a public page: escape it before
                              rendering.
                            type:
                              - string
                              - 'null'
                          submitted_at:
                            type: string
                            description: When the insured tapped I'm interested.
                          broker_notification:
                            type: object
                            properties:
                              status:
                                type: string
                                enum:
                                  - pending
                                  - sent
                                  - skipped
                                  - failed
                                description: >-
                                  pending until we have tried to email the
                                  agency; then sent, skipped (nothing was sent;
                                  see reason) or failed.
                              reason:
                                anyOf:
                                  - type: string
                                    enum:
                                      - demo_agency
                                      - test_mode
                                      - no_recipient
                                      - email_disabled
                                      - send_failed
                                  - type: 'null'
                                description: >-
                                  Why nothing was sent; null when pending or
                                  sent. demo_agency: a demo agency, where we
                                  email only internal Bridgeline addresses, and
                                  none applied. test_mode: a test-mode
                                  (bl_test_) quote, which never emails anyone.
                                  no_recipient: the agency has no active broker
                                  or admin to email. email_disabled: email
                                  delivery is switched off in this environment.
                                  send_failed: the email could not be sent, and
                                  Bridgeline ops were alerted.
                              recipient:
                                anyOf:
                                  - type: string
                                    enum:
                                      - broker
                                      - agency_admins
                                  - type: 'null'
                                description: >-
                                  Who we emailed: the quote's broker, or the
                                  agency's admins when that broker is no longer
                                  active. null when nobody was chosen.
                              recipients:
                                type: array
                                items:
                                  type: string
                                description: >-
                                  The agency staff email addresses the
                                  notification was actually sent to. Empty for a
                                  broker-scoped key when the email went to the
                                  agency's admins.
                              at:
                                description: >-
                                  When the outcome was recorded; null while
                                  pending.
                                type:
                                  - string
                                  - 'null'
                            required:
                              - status
                              - reason
                              - recipient
                              - recipients
                              - at
                            description: Whether we emailed the agency about this interest.
                        required:
                          - option_id
                          - note
                          - submitted_at
                          - broker_notification
                      - type: 'null'
                    description: >-
                      The insured's response on the hosted page; null unless
                      status is interested. This object is also the payload the
                      Phase 3 quote.interest_expressed webhook will reuse.
                  totals:
                    type: object
                    properties:
                      premium:
                        type: string
                        pattern: ^\d+\.\d{2}$
                        description: US dollars, a decimal string with two decimal places.
                      taxes_and_fees:
                        type: string
                        pattern: ^\d+\.\d{2}$
                        description: US dollars, a decimal string with two decimal places.
                      total:
                        type: string
                        pattern: ^\d+\.\d{2}$
                        description: US dollars, a decimal string with two decimal places.
                      weighted_minimum_earned_rate:
                        type: number
                        description: 'A fraction: 0.25 means 25%.'
                      financing_start_date:
                        type:
                          - string
                          - 'null'
                    required:
                      - premium
                      - taxes_and_fees
                      - total
                      - weighted_minimum_earned_rate
                      - financing_start_date
                  policies:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        total:
                          type: string
                          pattern: ^\d+\.\d{2}$
                          description: Premium plus all taxes and fees.
                        minimum_earned:
                          type: object
                          properties:
                            rate:
                              anyOf:
                                - type: number
                                  description: 'A fraction: 0.25 means 25%.'
                                - type: 'null'
                              description: The minimum earned rate we used.
                          required:
                            - rate
                        carrier:
                          type: object
                          properties:
                            name:
                              type:
                                - string
                                - 'null'
                            am_best:
                              type: object
                              properties:
                                rating:
                                  type: string
                                source:
                                  type: string
                                  enum:
                                    - am_best
                                    - broker
                                    - document
                                    - assumed
                              required:
                                - rating
                                - source
                          required:
                            - name
                            - am_best
                        metadata:
                          type: object
                          propertyNames:
                            type: string
                          additionalProperties:
                            type: string
                      required:
                        - id
                        - total
                        - minimum_earned
                        - carrier
                        - metadata
                  eligibility:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                          - eligible
                          - ineligible
                      checks:
                        type: array
                        items:
                          type: object
                          properties:
                            code:
                              type: string
                            passed:
                              type: boolean
                            limit:
                              type: string
                            actual:
                              type: string
                            basis:
                              type: string
                              enum:
                                - partially_assumed
                            param:
                              type: string
                          required:
                            - code
                            - passed
                      reasons:
                        type: array
                        items:
                          type: object
                          properties:
                            code:
                              type: string
                            param:
                              type: string
                              description: >-
                                The request path this refers to, e.g.
                                policies[1].auditable.
                            message:
                              type: string
                          required:
                            - code
                            - param
                            - message
                        description: Why the deal is ineligible; empty when eligible.
                    required:
                      - status
                      - checks
                      - reasons
                  assumptions:
                    type: array
                    items:
                      type: object
                      properties:
                        code:
                          type: string
                        param:
                          type: string
                          description: >-
                            The request path this refers to, e.g.
                            policies[1].auditable.
                        message:
                          type: string
                      required:
                        - code
                        - param
                        - message
                  warnings:
                    type: array
                    items:
                      type: object
                      properties:
                        code:
                          type: string
                        param:
                          type: string
                          description: >-
                            The request path this refers to, e.g.
                            policies[1].auditable.
                        message:
                          type: string
                      required:
                        - code
                        - param
                        - message
                  binding_readiness:
                    type: object
                    properties:
                      ready:
                        type: boolean
                      issues:
                        type: array
                        items:
                          type: object
                          properties:
                            code:
                              type: string
                            param:
                              type: string
                              description: >-
                                The request path this refers to, e.g.
                                policies[1].auditable.
                            message:
                              type: string
                          required:
                            - code
                            - param
                            - message
                    required:
                      - ready
                      - issues
                  recommended_option_id:
                    type:
                      - string
                      - 'null'
                  options:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: >-
                            opt_<down payment percent>_<term months>, e.g.
                            opt_25_10.
                        down_payment_rate:
                          type: number
                          description: 'A fraction: 0.25 means 25%.'
                        term_months:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                        apr:
                          type: number
                          description: 'A fraction: 0.25 means 25%.'
                        down_payment:
                          type: string
                          pattern: ^\d+\.\d{2}$
                          description: >-
                            US dollars, a decimal string with two decimal
                            places.
                        amount_financed:
                          type: string
                          pattern: ^\d+\.\d{2}$
                          description: >-
                            US dollars, a decimal string with two decimal
                            places.
                        monthly_payment:
                          type: string
                          pattern: ^\d+\.\d{2}$
                          description: >-
                            US dollars, a decimal string with two decimal
                            places.
                        finance_charge:
                          type: string
                          pattern: ^\d+\.\d{2}$
                          description: >-
                            US dollars, a decimal string with two decimal
                            places.
                        total_of_payments:
                          type: string
                          pattern: ^\d+\.\d{2}$
                          description: >-
                            US dollars, a decimal string with two decimal
                            places.
                        total_cost:
                          type: string
                          pattern: ^\d+\.\d{2}$
                          description: >-
                            US dollars, a decimal string with two decimal
                            places.
                        spread_clamped:
                          type: boolean
                          description: >-
                            True when the agency's spread was reduced to keep
                            this option under the APR limit.
                      required:
                        - id
                        - down_payment_rate
                        - term_months
                        - apr
                        - down_payment
                        - amount_financed
                        - monthly_payment
                        - finance_charge
                        - total_of_payments
                        - total_cost
                        - spread_clamped
                required:
                  - id
                  - object
                  - livemode
                  - status
                  - client_reference_id
                  - metadata
                  - broker
                  - created_at
                  - expires_at
                  - hosted_url
                  - selected_option_id
                  - interest
                  - totals
                  - policies
                  - eligibility
                  - assumptions
                  - warnings
                  - binding_readiness
                  - recommended_option_id
                  - options
                description: 'An indicative quote: a stored snapshot, not a price lock.'
        '400':
          description: Malformed request (bad JSON, version or header).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing, invalid, revoked or expired API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: >-
            API access not enabled for this agency (API_ACCESS_NOT_ENABLED for a
            live key, TEST_MODE_NOT_ENABLED for a test key), missing scope, or
            the acting broker is not active.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found (also returned for other agencies' ids).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited. See Retry-After.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal error. Safe to retry with the same Idempotency-Key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth: []
components:
  schemas:
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - type
            - code
            - message
            - doc_url
            - request_id
          properties:
            type:
              type: string
              enum:
                - invalid_request
                - authentication
                - permission
                - not_found
                - conflict
                - rate_limit
                - api_error
            code:
              type: string
              description: >-
                Stable, machine-readable error code. Branch on this, never on
                `message`.
              examples:
                - INVALID_REQUEST
                - INVALID_JSON
                - INVALID_API_VERSION
                - INVALID_PAGINATION
                - IDEMPOTENCY_KEY_REQUIRED
                - IDEMPOTENCY_KEY_INVALID
                - VALIDATION_FAILED
                - INVALID_API_KEY
                - KEY_REVOKED
                - KEY_EXPIRED
                - MISSING_SCOPE
                - BROKER_NOT_ACTIVE
                - DEFAULT_BROKER_INACTIVE
                - ACTING_BROKER_NOT_ALLOWED
                - API_ACCESS_NOT_ENABLED
                - TEST_MODE_NOT_ENABLED
                - TEST_MODE_ONLY
                - NOT_FOUND
                - METHOD_NOT_ALLOWED
                - IDEMPOTENCY_KEY_REUSED
                - IDEMPOTENCY_REQUEST_IN_PROGRESS
                - QUOTE_EXPIRED
                - QUOTE_ALREADY_INTERESTED
                - RATE_LIMITED
                - INTERNAL
                - IDEMPOTENCY_RECORD_LOST
                - SERVICE_UNAVAILABLE
            message:
              type: string
            param:
              type: string
            details:
              type: array
              items:
                type: object
                required:
                  - code
                  - message
                properties:
                  code:
                    type: string
                  message:
                    type: string
                  param:
                    type: string
            doc_url:
              type: string
              format: uri
            request_id:
              type: string
              pattern: ^req_
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: bl_live_… or bl_test_… API key.

````

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