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

# List quotes



## OpenAPI

````yaml https://api.prets.io/v1/openapi.json get /v1/quotes
openapi: 3.1.0
info:
  title: Prets API
  version: 1.0.0
servers:
  - url: https://api.prets.app
security:
  - bearerAuth: []
paths:
  /v1/quotes:
    get:
      summary: List quotes
      parameters:
        - schema:
            type: string
            description: Opaque list Cursor from a previous links.next.cursor (API-0013)
          required: false
          description: Opaque list Cursor from a previous links.next.cursor (API-0013)
          name: cursor
          in: query
        - schema:
            type: integer
            exclusiveMinimum: 0
            maximum: 250
            description: >-
              Page-size hint for the first page (1–250). Frozen into the Cursor
              for the rest of the scroll; ignored when `cursor` is present.
          required: false
          description: >-
            Page-size hint for the first page (1–250). Frozen into the Cursor
            for the rest of the scroll; ignored when `cursor` is present.
          name: limit
          in: query
        - schema:
            anyOf:
              - type: string
              - type: array
                items:
                  type: string
            description: >-
              Repeated field names on the list item to expand. Allowlisted:
              lineItems. Unknown names are invalid.
            example: lineItems
          required: false
          description: >-
            Repeated field names on the list item to expand. Allowlisted:
            lineItems. Unknown names are invalid.
          name: expand
          in: query
      responses:
        '200':
          description: Quotes listed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListQuotesResponse'
        '400':
          description: Bad request — malformed cursor or expand
        '401':
          description: Unauthorized - authentication required
        '500':
          description: Internal server error
components:
  schemas:
    ListQuotesResponse:
      type: object
      properties:
        data:
          type: array
          items:
            anyOf:
              - $ref: '#/components/schemas/Quote'
              - $ref: '#/components/schemas/ListQuote'
        hasMore:
          type: boolean
          description: True when another page exists; always equals links.next != null
        links:
          $ref: '#/components/schemas/ListLinks'
      required:
        - data
        - hasMore
        - links
      description: >-
        Paginated list of quotes (house List envelope). Default items are
        ListQuote; expand=lineItems yields Quote.
    Quote:
      type: object
      properties:
        quoteId:
          type: string
          pattern: ^qot_[0-9A-HJKMNP-TV-Z]{26}$
          description: Unique identifier for the quote
          example: qot_01ARZ3NDEKTSV4RRFFQ69G5AV
        opportunity:
          $ref: '#/components/schemas/QuoteOpportunity'
        createdAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the quote was created
          example: '2024-06-15T10:30:00.000Z'
        updatedAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the quote was last updated
          example: '2024-06-15T10:30:00.000Z'
        address:
          $ref: '#/components/schemas/Address'
        contact:
          $ref: '#/components/schemas/ContactWithoutId'
        currency:
          type: string
          enum:
            - EUR
          description: Quote currency (currently EUR only)
          example: EUR
        terms:
          type: array
          items:
            $ref: '#/components/schemas/QuoteTerm'
          minItems: 1
          uniqueItems: true
          description: Quote terms and conditions
          example:
            - subject_to_financing
        expiresAt:
          type: string
          format: date
          description: Quote expiration timestamp (ISO 8601)
          example: '2024-12-31T23:59:59Z'
        sentAt:
          type: string
          format: date
          description: Timestamp when quote was sent to customer (ISO 8601)
          example: '2024-06-15T10:30:00Z'
        totalInclTax:
          type: number
          minimum: 0
          maximum: 250000
          description: Total quote amount including tax in EUR
          example: 25000
        totalExclTax:
          type: number
          minimum: 0
          maximum: 250000
          description: Total quote amount excluding tax in EUR
          example: 20661.16
        description:
          type: string
          minLength: 1
          description: Description of the quote
          example: Quote for residential solar panel installation.
        intakeNote:
          type: string
          minLength: 1
          description: Merchant context for Prets at quote handover
          example: Partner must co-sign; installer visit booked for 12 March.
        externalId:
          type: string
          minLength: 1
          description: External reference ID for merchant's system (quote level)
          example: QUOTE-2024-001
        tags:
          type: array
          items:
            $ref: '#/components/schemas/QuoteTag'
          minItems: 1
          uniqueItems: true
          description: >-
            Tags describing customer context and support needs to help ops team
            provide appropriate service
          example:
            - smartphone_only
            - less_digitally_skilled
        financing:
          type: object
          properties:
            phase:
              $ref: '#/components/schemas/QuoteFinancingPhase'
            status:
              $ref: '#/components/schemas/QuoteFinancingStatus'
            subStatus:
              $ref: '#/components/schemas/QuoteFinancingSubStatus'
            method:
              type: array
              items:
                $ref: '#/components/schemas/QuoteFinancingMethod'
              description: >-
                Funding sources that completed the financing. Sources stack, so
                more than one may be present. Empty until classified; only
                meaningful when `status === completed`.
              example:
                - loan
                - subsidy
            waitingOn:
              $ref: '#/components/schemas/QuoteFinancingWaitingOn'
            statusChangedAt:
              type: string
              format: date-time
              description: >-
                ISO 8601 timestamp of the last change to `status` or
                `subStatus`.
              example: '2024-06-15T10:30:00.000Z'
          required:
            - phase
            - status
            - subStatus
            - method
            - waitingOn
            - statusChangedAt
          description: Current financing journey state for this quote
        lineItems:
          type: array
          items:
            oneOf:
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - battery
                  externalId:
                    type: string
                    minLength: 1
                    description: External reference ID for merchant's system
                    example: QUOTE-2024-001-PV
                  totalInclTax:
                    type: number
                    minimum: 0
                    description: Total price including tax
                    example: 12500
                  totalExclTax:
                    type: number
                    minimum: 0
                    description: Total price excluding tax
                    example: 10330.58
                  unitPrice:
                    type: number
                    minimum: 0
                    description: Unit price per item before quantity multiplication
                    example: 250
                  productIdentifiers:
                    $ref: '#/components/schemas/ProductIdentifiers'
                  incentiveCodes:
                    type: array
                    items:
                      $ref: '#/components/schemas/IncentiveCode'
                    description: >-
                      Subsidy/incentive codes (e.g., ISDE in NL, BAFA in DE,
                      MaPrimeRénov in FR)
                    example:
                      - ISDE-2024-WP
                      - PROV-NH-2024
                  description:
                    type: string
                    minLength: 1
                    description: Description of the line item
                  totalNameplateCapacity:
                    type: number
                    minimum: 0
                    description: Total battery energy capacity in watt-hours (Wh)
                    example: 13500
                  totalNameplatePower:
                    type: number
                    minimum: 0
                    description: Maximum continuous charge/discharge power in watts (W)
                    example: 5000
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - pv
                  externalId:
                    type: string
                    minLength: 1
                    description: External reference ID for merchant's system
                    example: QUOTE-2024-001-PV
                  totalInclTax:
                    type: number
                    minimum: 0
                    description: Total price including tax
                    example: 12500
                  totalExclTax:
                    type: number
                    minimum: 0
                    description: Total price excluding tax
                    example: 10330.58
                  unitPrice:
                    type: number
                    minimum: 0
                    description: Unit price per item before quantity multiplication
                    example: 250
                  productIdentifiers:
                    $ref: '#/components/schemas/ProductIdentifiers'
                  incentiveCodes:
                    type: array
                    items:
                      $ref: '#/components/schemas/IncentiveCode'
                    description: >-
                      Subsidy/incentive codes (e.g., ISDE in NL, BAFA in DE,
                      MaPrimeRénov in FR)
                    example:
                      - ISDE-2024-WP
                      - PROV-NH-2024
                  description:
                    type: string
                    minLength: 1
                    description: Description of the line item
                  quantity:
                    type: integer
                    minimum: 1
                    description: Number of solar panels
                    example: 12
                  wpPerModule:
                    type: integer
                    exclusiveMinimum: 0
                    description: Watt-peak (Wp) rating per panel at STC conditions
                    example: 400
                  azimuth:
                    type: number
                    minimum: 0
                    maximum: 360
                    description: Compass direction in degrees (0°=N, 90°=E, 180°=S, 270°=W)
                    example: 180
                  tilt:
                    type: number
                    minimum: 0
                    maximum: 90
                    description: >-
                      Inclination angle from horizontal in degrees (0°=flat,
                      90°=vertical)
                    example: 35
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - heat_pump
                  externalId:
                    type: string
                    minLength: 1
                    description: External reference ID for merchant's system
                    example: QUOTE-2024-001-PV
                  totalInclTax:
                    type: number
                    minimum: 0
                    description: Total price including tax
                    example: 12500
                  totalExclTax:
                    type: number
                    minimum: 0
                    description: Total price excluding tax
                    example: 10330.58
                  unitPrice:
                    type: number
                    minimum: 0
                    description: Unit price per item before quantity multiplication
                    example: 250
                  productIdentifiers:
                    $ref: '#/components/schemas/ProductIdentifiers'
                  incentiveCodes:
                    type: array
                    items:
                      $ref: '#/components/schemas/IncentiveCode'
                    description: >-
                      Subsidy/incentive codes (e.g., ISDE in NL, BAFA in DE,
                      MaPrimeRénov in FR)
                    example:
                      - ISDE-2024-WP
                      - PROV-NH-2024
                  description:
                    type: string
                    minLength: 1
                    description: Description of the line item
                  heatTransferMedium:
                    type: string
                    enum:
                      - air_to_air
                      - air_to_water
                      - air_to_brine
                      - water_to_air
                      - water_to_water
                      - water_to_brine
                      - brine_to_air
                      - brine_to_water
                      - brine_to_brine
                    description: >-
                      Heat transfer medium per EN 14511 (source_to_sink). Brine
                      = ground-source/geothermal.
                    example: air_to_water
                  systemConfiguration:
                    type: string
                    enum:
                      - electric
                      - hybrid
                    description: >-
                      System configuration: electric (monovalent) or hybrid
                      (bivalent with backup heating)
                    example: electric
                  nameplatePower:
                    type: number
                    minimum: 0
                    description: Rated heating/cooling power output in watts (W)
                    example: 8000
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - wall_insulation
                  externalId:
                    type: string
                    minLength: 1
                    description: External reference ID for merchant's system
                    example: QUOTE-2024-001-PV
                  totalInclTax:
                    type: number
                    minimum: 0
                    description: Total price including tax
                    example: 12500
                  totalExclTax:
                    type: number
                    minimum: 0
                    description: Total price excluding tax
                    example: 10330.58
                  unitPrice:
                    type: number
                    minimum: 0
                    description: Unit price per item before quantity multiplication
                    example: 250
                  productIdentifiers:
                    $ref: '#/components/schemas/ProductIdentifiers'
                  incentiveCodes:
                    type: array
                    items:
                      $ref: '#/components/schemas/IncentiveCode'
                    description: >-
                      Subsidy/incentive codes (e.g., ISDE in NL, BAFA in DE,
                      MaPrimeRénov in FR)
                    example:
                      - ISDE-2024-WP
                      - PROV-NH-2024
                  description:
                    type: string
                    minLength: 1
                    description: Description of the line item
                  surfaceArea:
                    type: number
                    exclusiveMinimum: 0
                    description: Insulated surface area in square meters (m²)
                    example: 120.5
                  rValue:
                    type: number
                    exclusiveMinimum: 0
                    description: Thermal resistance (R-value) in m²K/W - higher is better.
                    example: 3.5
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - sloped_roof_insulation
                  externalId:
                    type: string
                    minLength: 1
                    description: External reference ID for merchant's system
                    example: QUOTE-2024-001-PV
                  totalInclTax:
                    type: number
                    minimum: 0
                    description: Total price including tax
                    example: 12500
                  totalExclTax:
                    type: number
                    minimum: 0
                    description: Total price excluding tax
                    example: 10330.58
                  unitPrice:
                    type: number
                    minimum: 0
                    description: Unit price per item before quantity multiplication
                    example: 250
                  productIdentifiers:
                    $ref: '#/components/schemas/ProductIdentifiers'
                  incentiveCodes:
                    type: array
                    items:
                      $ref: '#/components/schemas/IncentiveCode'
                    description: >-
                      Subsidy/incentive codes (e.g., ISDE in NL, BAFA in DE,
                      MaPrimeRénov in FR)
                    example:
                      - ISDE-2024-WP
                      - PROV-NH-2024
                  description:
                    type: string
                    minLength: 1
                    description: Description of the line item
                  surfaceArea:
                    type: number
                    exclusiveMinimum: 0
                    description: Insulated surface area in square meters (m²)
                    example: 120.5
                  rValue:
                    type: number
                    exclusiveMinimum: 0
                    description: Thermal resistance (R-value) in m²K/W - higher is better.
                    example: 3.5
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - flat_roof_insulation
                  externalId:
                    type: string
                    minLength: 1
                    description: External reference ID for merchant's system
                    example: QUOTE-2024-001-PV
                  totalInclTax:
                    type: number
                    minimum: 0
                    description: Total price including tax
                    example: 12500
                  totalExclTax:
                    type: number
                    minimum: 0
                    description: Total price excluding tax
                    example: 10330.58
                  unitPrice:
                    type: number
                    minimum: 0
                    description: Unit price per item before quantity multiplication
                    example: 250
                  productIdentifiers:
                    $ref: '#/components/schemas/ProductIdentifiers'
                  incentiveCodes:
                    type: array
                    items:
                      $ref: '#/components/schemas/IncentiveCode'
                    description: >-
                      Subsidy/incentive codes (e.g., ISDE in NL, BAFA in DE,
                      MaPrimeRénov in FR)
                    example:
                      - ISDE-2024-WP
                      - PROV-NH-2024
                  description:
                    type: string
                    minLength: 1
                    description: Description of the line item
                  surfaceArea:
                    type: number
                    exclusiveMinimum: 0
                    description: Insulated surface area in square meters (m²)
                    example: 120.5
                  rValue:
                    type: number
                    exclusiveMinimum: 0
                    description: Thermal resistance (R-value) in m²K/W - higher is better.
                    example: 3.5
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - floor_insulation
                  externalId:
                    type: string
                    minLength: 1
                    description: External reference ID for merchant's system
                    example: QUOTE-2024-001-PV
                  totalInclTax:
                    type: number
                    minimum: 0
                    description: Total price including tax
                    example: 12500
                  totalExclTax:
                    type: number
                    minimum: 0
                    description: Total price excluding tax
                    example: 10330.58
                  unitPrice:
                    type: number
                    minimum: 0
                    description: Unit price per item before quantity multiplication
                    example: 250
                  productIdentifiers:
                    $ref: '#/components/schemas/ProductIdentifiers'
                  incentiveCodes:
                    type: array
                    items:
                      $ref: '#/components/schemas/IncentiveCode'
                    description: >-
                      Subsidy/incentive codes (e.g., ISDE in NL, BAFA in DE,
                      MaPrimeRénov in FR)
                    example:
                      - ISDE-2024-WP
                      - PROV-NH-2024
                  description:
                    type: string
                    minLength: 1
                    description: Description of the line item
                  surfaceArea:
                    type: number
                    exclusiveMinimum: 0
                    description: Insulated surface area in square meters (m²)
                    example: 120.5
                  rValue:
                    type: number
                    exclusiveMinimum: 0
                    description: Thermal resistance (R-value) in m²K/W - higher is better.
                    example: 3.5
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - windows
                  externalId:
                    type: string
                    minLength: 1
                    description: External reference ID for merchant's system
                    example: QUOTE-2024-001-PV
                  totalInclTax:
                    type: number
                    minimum: 0
                    description: Total price including tax
                    example: 12500
                  totalExclTax:
                    type: number
                    minimum: 0
                    description: Total price excluding tax
                    example: 10330.58
                  unitPrice:
                    type: number
                    minimum: 0
                    description: Unit price per item before quantity multiplication
                    example: 250
                  productIdentifiers:
                    $ref: '#/components/schemas/ProductIdentifiers'
                  incentiveCodes:
                    type: array
                    items:
                      $ref: '#/components/schemas/IncentiveCode'
                    description: >-
                      Subsidy/incentive codes (e.g., ISDE in NL, BAFA in DE,
                      MaPrimeRénov in FR)
                    example:
                      - ISDE-2024-WP
                      - PROV-NH-2024
                  description:
                    type: string
                    minLength: 1
                    description: Description of the line item
                  paneCount:
                    type: string
                    enum:
                      - single
                      - double
                      - triple
                      - quadruple
                    description: Number of panes in the glazing unit
                    example: triple
                  performanceRating:
                    type: string
                    enum:
                      - HR
                      - HR+
                      - HR++
                      - HR+++
                      - HR++++
                    description: >-
                      Dutch HR glass performance rating (Hoog Rendement = High
                      Efficiency)
                    example: HR++
                  surfaceArea:
                    type: number
                    exclusiveMinimum: 0
                    description: Total window surface area in square meters (m²)
                    example: 15.8
                  uValue:
                    type: number
                    exclusiveMinimum: 0
                    description: Thermal transmittance (U-value) in W/m²K - lower is better
                    example: 0.8
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - subsidy
                  externalId:
                    type: string
                    minLength: 1
                    description: External reference ID for merchant's system
                    example: QUOTE-2024-001-PV
                  productIdentifiers:
                    $ref: '#/components/schemas/ProductIdentifiers'
                  incentiveCodes:
                    type: array
                    items:
                      $ref: '#/components/schemas/IncentiveCode'
                    minItems: 1
                    description: >-
                      Incentive programme codes this subsidy covers; joins to
                      the product line items carrying the same codes
                    example:
                      - ISDE-2024-WP
                  description:
                    type: string
                    minLength: 1
                    description: Description of the line item
                  totalInclTax:
                    type: number
                    exclusiveMaximum: 0
                    description: >-
                      Subsidy amount as a negative reduction. Excluded from the
                      gross Quote total; summing all line items yields the
                      subsidy-deducted figure.
                    example: -2000
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - incentiveCodes
                  - totalInclTax
                  - lineItemId
          description: Line items for the quote
      required:
        - quoteId
        - opportunity
        - createdAt
        - updatedAt
        - address
        - contact
        - currency
        - totalInclTax
        - financing
        - lineItems
      description: A quote for sustainability home improvements
    ListQuote:
      type: object
      properties:
        quoteId:
          type: string
          pattern: ^qot_[0-9A-HJKMNP-TV-Z]{26}$
          description: Unique identifier for the quote
          example: qot_01ARZ3NDEKTSV4RRFFQ69G5AV
        opportunity:
          $ref: '#/components/schemas/QuoteOpportunity'
        createdAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the quote was created
          example: '2024-06-15T10:30:00.000Z'
        updatedAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the quote was last updated
          example: '2024-06-15T10:30:00.000Z'
        address:
          $ref: '#/components/schemas/Address'
        contact:
          $ref: '#/components/schemas/ContactWithoutId'
        currency:
          type: string
          enum:
            - EUR
          description: Quote currency (currently EUR only)
          example: EUR
        terms:
          type: array
          items:
            $ref: '#/components/schemas/QuoteTerm'
          minItems: 1
          uniqueItems: true
          description: Quote terms and conditions
          example:
            - subject_to_financing
        expiresAt:
          type: string
          format: date
          description: Quote expiration timestamp (ISO 8601)
          example: '2024-12-31T23:59:59Z'
        sentAt:
          type: string
          format: date
          description: Timestamp when quote was sent to customer (ISO 8601)
          example: '2024-06-15T10:30:00Z'
        totalInclTax:
          type: number
          minimum: 0
          maximum: 250000
          description: Total quote amount including tax in EUR
          example: 25000
        totalExclTax:
          type: number
          minimum: 0
          maximum: 250000
          description: Total quote amount excluding tax in EUR
          example: 20661.16
        description:
          type: string
          minLength: 1
          description: Description of the quote
          example: Quote for residential solar panel installation.
        intakeNote:
          type: string
          minLength: 1
          description: Merchant context for Prets at quote handover
          example: Partner must co-sign; installer visit booked for 12 March.
        externalId:
          type: string
          minLength: 1
          description: External reference ID for merchant's system (quote level)
          example: QUOTE-2024-001
        tags:
          type: array
          items:
            $ref: '#/components/schemas/QuoteTag'
          minItems: 1
          uniqueItems: true
          description: >-
            Tags describing customer context and support needs to help ops team
            provide appropriate service
          example:
            - smartphone_only
            - less_digitally_skilled
        financing:
          type: object
          properties:
            phase:
              $ref: '#/components/schemas/QuoteFinancingPhase'
            status:
              $ref: '#/components/schemas/QuoteFinancingStatus'
            subStatus:
              $ref: '#/components/schemas/QuoteFinancingSubStatus'
            method:
              type: array
              items:
                $ref: '#/components/schemas/QuoteFinancingMethod'
              description: >-
                Funding sources that completed the financing. Sources stack, so
                more than one may be present. Empty until classified; only
                meaningful when `status === completed`.
              example:
                - loan
                - subsidy
            waitingOn:
              $ref: '#/components/schemas/QuoteFinancingWaitingOn'
            statusChangedAt:
              type: string
              format: date-time
              description: >-
                ISO 8601 timestamp of the last change to `status` or
                `subStatus`.
              example: '2024-06-15T10:30:00.000Z'
          required:
            - phase
            - status
            - subStatus
            - method
            - waitingOn
            - statusChangedAt
          description: Current financing journey state for this quote
      required:
        - quoteId
        - opportunity
        - createdAt
        - updatedAt
        - address
        - contact
        - currency
        - totalInclTax
        - financing
      description: >-
        Unexpanded quote on a list — the Quote without line items. Pass
        expand=lineItems to receive Quote.
    ListLinks:
      type: object
      properties:
        next:
          type:
            - object
            - 'null'
          properties:
            href:
              type: string
              description: >-
                Relative URI-reference to the next page (also advertised on the
                Link header)
            cursor:
              type: string
              description: >-
                Opaque Cursor to pass as the cursor query param on the next
                request
          required:
            - href
            - cursor
          description: Next page link, or null when done
      required:
        - next
    QuoteOpportunity:
      type: object
      properties:
        opportunityId:
          type: string
          pattern: ^opp_[0-9A-HJKMNP-TV-Z]{26}$
          description: Salesforce opportunity this quote belongs to
          example: opp_01ARZ3NDEKTSV4RRFFQ69G5AV
      required:
        - opportunityId
    Address:
      oneOf:
        - $ref: '#/components/schemas/NLAddress'
        - $ref: '#/components/schemas/InternationalAddress'
      discriminator:
        propertyName: country
        mapping:
          NL:
            $ref: '#/components/schemas/NLAddress'
          AD:
            $ref: '#/components/schemas/InternationalAddress'
          AE:
            $ref: '#/components/schemas/InternationalAddress'
          AF:
            $ref: '#/components/schemas/InternationalAddress'
          AG:
            $ref: '#/components/schemas/InternationalAddress'
          AI:
            $ref: '#/components/schemas/InternationalAddress'
          AL:
            $ref: '#/components/schemas/InternationalAddress'
          AM:
            $ref: '#/components/schemas/InternationalAddress'
          AO:
            $ref: '#/components/schemas/InternationalAddress'
          AQ:
            $ref: '#/components/schemas/InternationalAddress'
          AR:
            $ref: '#/components/schemas/InternationalAddress'
          AS:
            $ref: '#/components/schemas/InternationalAddress'
          AT:
            $ref: '#/components/schemas/InternationalAddress'
          AU:
            $ref: '#/components/schemas/InternationalAddress'
          AW:
            $ref: '#/components/schemas/InternationalAddress'
          AX:
            $ref: '#/components/schemas/InternationalAddress'
          AZ:
            $ref: '#/components/schemas/InternationalAddress'
          BA:
            $ref: '#/components/schemas/InternationalAddress'
          BB:
            $ref: '#/components/schemas/InternationalAddress'
          BD:
            $ref: '#/components/schemas/InternationalAddress'
          BE:
            $ref: '#/components/schemas/InternationalAddress'
          BF:
            $ref: '#/components/schemas/InternationalAddress'
          BG:
            $ref: '#/components/schemas/InternationalAddress'
          BH:
            $ref: '#/components/schemas/InternationalAddress'
          BI:
            $ref: '#/components/schemas/InternationalAddress'
          BJ:
            $ref: '#/components/schemas/InternationalAddress'
          BL:
            $ref: '#/components/schemas/InternationalAddress'
          BM:
            $ref: '#/components/schemas/InternationalAddress'
          BN:
            $ref: '#/components/schemas/InternationalAddress'
          BO:
            $ref: '#/components/schemas/InternationalAddress'
          BQ:
            $ref: '#/components/schemas/InternationalAddress'
          BR:
            $ref: '#/components/schemas/InternationalAddress'
          BS:
            $ref: '#/components/schemas/InternationalAddress'
          BT:
            $ref: '#/components/schemas/InternationalAddress'
          BV:
            $ref: '#/components/schemas/InternationalAddress'
          BW:
            $ref: '#/components/schemas/InternationalAddress'
          BY:
            $ref: '#/components/schemas/InternationalAddress'
          BZ:
            $ref: '#/components/schemas/InternationalAddress'
          CA:
            $ref: '#/components/schemas/InternationalAddress'
          CC:
            $ref: '#/components/schemas/InternationalAddress'
          CD:
            $ref: '#/components/schemas/InternationalAddress'
          CF:
            $ref: '#/components/schemas/InternationalAddress'
          CG:
            $ref: '#/components/schemas/InternationalAddress'
          CH:
            $ref: '#/components/schemas/InternationalAddress'
          CI:
            $ref: '#/components/schemas/InternationalAddress'
          CK:
            $ref: '#/components/schemas/InternationalAddress'
          CL:
            $ref: '#/components/schemas/InternationalAddress'
          CM:
            $ref: '#/components/schemas/InternationalAddress'
          CN:
            $ref: '#/components/schemas/InternationalAddress'
          CO:
            $ref: '#/components/schemas/InternationalAddress'
          CR:
            $ref: '#/components/schemas/InternationalAddress'
          CU:
            $ref: '#/components/schemas/InternationalAddress'
          CV:
            $ref: '#/components/schemas/InternationalAddress'
          CW:
            $ref: '#/components/schemas/InternationalAddress'
          CX:
            $ref: '#/components/schemas/InternationalAddress'
          CY:
            $ref: '#/components/schemas/InternationalAddress'
          CZ:
            $ref: '#/components/schemas/InternationalAddress'
          DE:
            $ref: '#/components/schemas/InternationalAddress'
          DJ:
            $ref: '#/components/schemas/InternationalAddress'
          DK:
            $ref: '#/components/schemas/InternationalAddress'
          DM:
            $ref: '#/components/schemas/InternationalAddress'
          DO:
            $ref: '#/components/schemas/InternationalAddress'
          DZ:
            $ref: '#/components/schemas/InternationalAddress'
          EC:
            $ref: '#/components/schemas/InternationalAddress'
          EE:
            $ref: '#/components/schemas/InternationalAddress'
          EG:
            $ref: '#/components/schemas/InternationalAddress'
          EH:
            $ref: '#/components/schemas/InternationalAddress'
          ER:
            $ref: '#/components/schemas/InternationalAddress'
          ES:
            $ref: '#/components/schemas/InternationalAddress'
          ET:
            $ref: '#/components/schemas/InternationalAddress'
          FI:
            $ref: '#/components/schemas/InternationalAddress'
          FJ:
            $ref: '#/components/schemas/InternationalAddress'
          FK:
            $ref: '#/components/schemas/InternationalAddress'
          FM:
            $ref: '#/components/schemas/InternationalAddress'
          FO:
            $ref: '#/components/schemas/InternationalAddress'
          FR:
            $ref: '#/components/schemas/InternationalAddress'
          GA:
            $ref: '#/components/schemas/InternationalAddress'
          GB:
            $ref: '#/components/schemas/InternationalAddress'
          GD:
            $ref: '#/components/schemas/InternationalAddress'
          GE:
            $ref: '#/components/schemas/InternationalAddress'
          GF:
            $ref: '#/components/schemas/InternationalAddress'
          GG:
            $ref: '#/components/schemas/InternationalAddress'
          GH:
            $ref: '#/components/schemas/InternationalAddress'
          GI:
            $ref: '#/components/schemas/InternationalAddress'
          GL:
            $ref: '#/components/schemas/InternationalAddress'
          GM:
            $ref: '#/components/schemas/InternationalAddress'
          GN:
            $ref: '#/components/schemas/InternationalAddress'
          GP:
            $ref: '#/components/schemas/InternationalAddress'
          GQ:
            $ref: '#/components/schemas/InternationalAddress'
          GR:
            $ref: '#/components/schemas/InternationalAddress'
          GS:
            $ref: '#/components/schemas/InternationalAddress'
          GT:
            $ref: '#/components/schemas/InternationalAddress'
          GU:
            $ref: '#/components/schemas/InternationalAddress'
          GW:
            $ref: '#/components/schemas/InternationalAddress'
          GY:
            $ref: '#/components/schemas/InternationalAddress'
          HK:
            $ref: '#/components/schemas/InternationalAddress'
          HM:
            $ref: '#/components/schemas/InternationalAddress'
          HN:
            $ref: '#/components/schemas/InternationalAddress'
          HR:
            $ref: '#/components/schemas/InternationalAddress'
          HT:
            $ref: '#/components/schemas/InternationalAddress'
          HU:
            $ref: '#/components/schemas/InternationalAddress'
          ID:
            $ref: '#/components/schemas/InternationalAddress'
          IE:
            $ref: '#/components/schemas/InternationalAddress'
          IL:
            $ref: '#/components/schemas/InternationalAddress'
          IM:
            $ref: '#/components/schemas/InternationalAddress'
          IN:
            $ref: '#/components/schemas/InternationalAddress'
          IO:
            $ref: '#/components/schemas/InternationalAddress'
          IQ:
            $ref: '#/components/schemas/InternationalAddress'
          IR:
            $ref: '#/components/schemas/InternationalAddress'
          IS:
            $ref: '#/components/schemas/InternationalAddress'
          IT:
            $ref: '#/components/schemas/InternationalAddress'
          JE:
            $ref: '#/components/schemas/InternationalAddress'
          JM:
            $ref: '#/components/schemas/InternationalAddress'
          JO:
            $ref: '#/components/schemas/InternationalAddress'
          JP:
            $ref: '#/components/schemas/InternationalAddress'
          KE:
            $ref: '#/components/schemas/InternationalAddress'
          KG:
            $ref: '#/components/schemas/InternationalAddress'
          KH:
            $ref: '#/components/schemas/InternationalAddress'
          KI:
            $ref: '#/components/schemas/InternationalAddress'
          KM:
            $ref: '#/components/schemas/InternationalAddress'
          KN:
            $ref: '#/components/schemas/InternationalAddress'
          KP:
            $ref: '#/components/schemas/InternationalAddress'
          KR:
            $ref: '#/components/schemas/InternationalAddress'
          KW:
            $ref: '#/components/schemas/InternationalAddress'
          KY:
            $ref: '#/components/schemas/InternationalAddress'
          KZ:
            $ref: '#/components/schemas/InternationalAddress'
          LA:
            $ref: '#/components/schemas/InternationalAddress'
          LB:
            $ref: '#/components/schemas/InternationalAddress'
          LC:
            $ref: '#/components/schemas/InternationalAddress'
          LI:
            $ref: '#/components/schemas/InternationalAddress'
          LK:
            $ref: '#/components/schemas/InternationalAddress'
          LR:
            $ref: '#/components/schemas/InternationalAddress'
          LS:
            $ref: '#/components/schemas/InternationalAddress'
          LT:
            $ref: '#/components/schemas/InternationalAddress'
          LU:
            $ref: '#/components/schemas/InternationalAddress'
          LV:
            $ref: '#/components/schemas/InternationalAddress'
          LY:
            $ref: '#/components/schemas/InternationalAddress'
          MA:
            $ref: '#/components/schemas/InternationalAddress'
          MC:
            $ref: '#/components/schemas/InternationalAddress'
          MD:
            $ref: '#/components/schemas/InternationalAddress'
          ME:
            $ref: '#/components/schemas/InternationalAddress'
          MF:
            $ref: '#/components/schemas/InternationalAddress'
          MG:
            $ref: '#/components/schemas/InternationalAddress'
          MH:
            $ref: '#/components/schemas/InternationalAddress'
          MK:
            $ref: '#/components/schemas/InternationalAddress'
          ML:
            $ref: '#/components/schemas/InternationalAddress'
          MM:
            $ref: '#/components/schemas/InternationalAddress'
          MN:
            $ref: '#/components/schemas/InternationalAddress'
          MO:
            $ref: '#/components/schemas/InternationalAddress'
          MP:
            $ref: '#/components/schemas/InternationalAddress'
          MQ:
            $ref: '#/components/schemas/InternationalAddress'
          MR:
            $ref: '#/components/schemas/InternationalAddress'
          MS:
            $ref: '#/components/schemas/InternationalAddress'
          MT:
            $ref: '#/components/schemas/InternationalAddress'
          MU:
            $ref: '#/components/schemas/InternationalAddress'
          MV:
            $ref: '#/components/schemas/InternationalAddress'
          MW:
            $ref: '#/components/schemas/InternationalAddress'
          MX:
            $ref: '#/components/schemas/InternationalAddress'
          MY:
            $ref: '#/components/schemas/InternationalAddress'
          MZ:
            $ref: '#/components/schemas/InternationalAddress'
          NA:
            $ref: '#/components/schemas/InternationalAddress'
          NC:
            $ref: '#/components/schemas/InternationalAddress'
          NE:
            $ref: '#/components/schemas/InternationalAddress'
          NF:
            $ref: '#/components/schemas/InternationalAddress'
          NG:
            $ref: '#/components/schemas/InternationalAddress'
          NI:
            $ref: '#/components/schemas/InternationalAddress'
          'NO':
            $ref: '#/components/schemas/InternationalAddress'
          NP:
            $ref: '#/components/schemas/InternationalAddress'
          NR:
            $ref: '#/components/schemas/InternationalAddress'
          NU:
            $ref: '#/components/schemas/InternationalAddress'
          NZ:
            $ref: '#/components/schemas/InternationalAddress'
          OM:
            $ref: '#/components/schemas/InternationalAddress'
          PA:
            $ref: '#/components/schemas/InternationalAddress'
          PE:
            $ref: '#/components/schemas/InternationalAddress'
          PF:
            $ref: '#/components/schemas/InternationalAddress'
          PG:
            $ref: '#/components/schemas/InternationalAddress'
          PH:
            $ref: '#/components/schemas/InternationalAddress'
          PK:
            $ref: '#/components/schemas/InternationalAddress'
          PL:
            $ref: '#/components/schemas/InternationalAddress'
          PM:
            $ref: '#/components/schemas/InternationalAddress'
          PN:
            $ref: '#/components/schemas/InternationalAddress'
          PR:
            $ref: '#/components/schemas/InternationalAddress'
          PS:
            $ref: '#/components/schemas/InternationalAddress'
          PT:
            $ref: '#/components/schemas/InternationalAddress'
          PW:
            $ref: '#/components/schemas/InternationalAddress'
          PY:
            $ref: '#/components/schemas/InternationalAddress'
          QA:
            $ref: '#/components/schemas/InternationalAddress'
          RE:
            $ref: '#/components/schemas/InternationalAddress'
          RO:
            $ref: '#/components/schemas/InternationalAddress'
          RS:
            $ref: '#/components/schemas/InternationalAddress'
          RU:
            $ref: '#/components/schemas/InternationalAddress'
          RW:
            $ref: '#/components/schemas/InternationalAddress'
          SA:
            $ref: '#/components/schemas/InternationalAddress'
          SB:
            $ref: '#/components/schemas/InternationalAddress'
          SC:
            $ref: '#/components/schemas/InternationalAddress'
          SD:
            $ref: '#/components/schemas/InternationalAddress'
          SE:
            $ref: '#/components/schemas/InternationalAddress'
          SG:
            $ref: '#/components/schemas/InternationalAddress'
          SH:
            $ref: '#/components/schemas/InternationalAddress'
          SI:
            $ref: '#/components/schemas/InternationalAddress'
          SJ:
            $ref: '#/components/schemas/InternationalAddress'
          SK:
            $ref: '#/components/schemas/InternationalAddress'
          SL:
            $ref: '#/components/schemas/InternationalAddress'
          SM:
            $ref: '#/components/schemas/InternationalAddress'
          SN:
            $ref: '#/components/schemas/InternationalAddress'
          SO:
            $ref: '#/components/schemas/InternationalAddress'
          SR:
            $ref: '#/components/schemas/InternationalAddress'
          SS:
            $ref: '#/components/schemas/InternationalAddress'
          ST:
            $ref: '#/components/schemas/InternationalAddress'
          SV:
            $ref: '#/components/schemas/InternationalAddress'
          SX:
            $ref: '#/components/schemas/InternationalAddress'
          SY:
            $ref: '#/components/schemas/InternationalAddress'
          SZ:
            $ref: '#/components/schemas/InternationalAddress'
          TC:
            $ref: '#/components/schemas/InternationalAddress'
          TD:
            $ref: '#/components/schemas/InternationalAddress'
          TF:
            $ref: '#/components/schemas/InternationalAddress'
          TG:
            $ref: '#/components/schemas/InternationalAddress'
          TH:
            $ref: '#/components/schemas/InternationalAddress'
          TJ:
            $ref: '#/components/schemas/InternationalAddress'
          TK:
            $ref: '#/components/schemas/InternationalAddress'
          TL:
            $ref: '#/components/schemas/InternationalAddress'
          TM:
            $ref: '#/components/schemas/InternationalAddress'
          TN:
            $ref: '#/components/schemas/InternationalAddress'
          TO:
            $ref: '#/components/schemas/InternationalAddress'
          TR:
            $ref: '#/components/schemas/InternationalAddress'
          TT:
            $ref: '#/components/schemas/InternationalAddress'
          TV:
            $ref: '#/components/schemas/InternationalAddress'
          TW:
            $ref: '#/components/schemas/InternationalAddress'
          TZ:
            $ref: '#/components/schemas/InternationalAddress'
          UA:
            $ref: '#/components/schemas/InternationalAddress'
          UG:
            $ref: '#/components/schemas/InternationalAddress'
          UM:
            $ref: '#/components/schemas/InternationalAddress'
          US:
            $ref: '#/components/schemas/InternationalAddress'
          UY:
            $ref: '#/components/schemas/InternationalAddress'
          UZ:
            $ref: '#/components/schemas/InternationalAddress'
          VA:
            $ref: '#/components/schemas/InternationalAddress'
          VC:
            $ref: '#/components/schemas/InternationalAddress'
          VE:
            $ref: '#/components/schemas/InternationalAddress'
          VG:
            $ref: '#/components/schemas/InternationalAddress'
          VI:
            $ref: '#/components/schemas/InternationalAddress'
          VN:
            $ref: '#/components/schemas/InternationalAddress'
          VU:
            $ref: '#/components/schemas/InternationalAddress'
          WF:
            $ref: '#/components/schemas/InternationalAddress'
          WS:
            $ref: '#/components/schemas/InternationalAddress'
          YE:
            $ref: '#/components/schemas/InternationalAddress'
          YT:
            $ref: '#/components/schemas/InternationalAddress'
          ZA:
            $ref: '#/components/schemas/InternationalAddress'
          ZM:
            $ref: '#/components/schemas/InternationalAddress'
          ZW:
            $ref: '#/components/schemas/InternationalAddress'
          XK:
            $ref: '#/components/schemas/InternationalAddress'
      description: Installation address (Dutch or international format based on country)
    ContactWithoutId:
      type: object
      properties:
        email:
          type: string
          description: 'Contact email address (normalized: trimmed, lowercased)'
          example: jan.jansen@example.nl
        firstName:
          type: string
          minLength: 1
          description: First name / given name
          example: Jan
        lastName:
          type: string
          minLength: 1
          description: Last name / family name
          example: Jansen
        phoneNumber:
          type: string
          pattern: ^\+[1-9]\d{6,14}$
          description: Phone number in E.164 format
          example: '+31612345678'
      required:
        - email
        - lastName
        - phoneNumber
      description: >-
        Contact payload without server-assigned id (e.g. quote create/update
        body)
    QuoteTerm:
      type: string
      enum:
        - subject_to_financing
      description: Quote term and condition
    QuoteTag:
      type: string
      enum:
        - smartphone_only
        - landline_only
        - less_digitally_skilled
        - financially_complex
        - moderately_complex_finances
        - prefers_phone_contact
        - prefers_email_contact
      description: >-
        Special circumstances and support requirements that ops team should be
        aware of
    QuoteFinancingPhase:
      type: string
      enum:
        - new
        - engaged
        - in_progress
        - completed
        - canceled
      description: Coarse financing list bucket derived from journey status
    QuoteFinancingStatus:
      type: string
      enum:
        - new_customer
        - engaged
        - application_started
        - documents_required
        - under_review
        - additional_documents_required
        - offer_received
        - invoice_pending
        - completed
        - financing_rejected
        - canceled_by_consumer
        - offer_canceled
      description: >-
        Fine journey step of the consumer financing process from the merchant
        perspective
    QuoteFinancingSubStatus:
      oneOf:
        - $ref: '#/components/schemas/QuoteFinancingSubStatusNone'
        - $ref: '#/components/schemas/QuoteFinancingSubStatusOnHold'
        - $ref: '#/components/schemas/QuoteFinancingSubStatusCanceled'
      discriminator:
        propertyName: type
        mapping:
          none:
            $ref: '#/components/schemas/QuoteFinancingSubStatusNone'
          on_hold:
            $ref: '#/components/schemas/QuoteFinancingSubStatusOnHold'
          canceled:
            $ref: '#/components/schemas/QuoteFinancingSubStatusCanceled'
      description: >-
        Overlay orthogonal to journey `status` (ops pause or cancellation
        reason); always present.
    QuoteFinancingMethod:
      type: string
      enum:
        - loan
        - own_funds
        - subsidy
      description: >-
        A single funding source that contributed to the completed financing.
        Open enum; default-branch on unknown values.
    QuoteFinancingWaitingOn:
      type: string
      enum:
        - none
        - consumer
        - lender
        - merchant
        - prets
      description: Party that must act next on the headline financing path
    ProductIdentifiers:
      type: object
      properties:
        brand:
          type: string
          minLength: 1
          description: Product manufacturer or brand name
          example: Enphase
        manufacturerPartNumber:
          type: string
          minLength: 1
          description: Manufacturer Part Number (MPN)
          example: SE7600H-US
        globalTradeItemNumber:
          type: string
          minLength: 1
          description: Global Trade Item Number (GTIN/EAN/UPC barcode)
          example: '0885629362058'
      description: Product identification metadata for matching and verification
    IncentiveCode:
      type: string
      minLength: 1
      pattern: ^[^;]+$
      description: >-
        Subsidy/incentive code (e.g., ISDE in NL, BAFA in DE, MaPrimeRénov in
        FR)
      example: ISDE-2024-WP
    NLAddress:
      type: object
      properties:
        country:
          type: string
          enum:
            - NL
        postalCode:
          type: string
          minLength: 1
          description: >-
            Postal/ZIP code. Letter suffix is case-insensitive; Dutch-shaped
            values canonicalize to `1234 AB`.
          example: 1000 AA
        city:
          type: string
          minLength: 1
          description: City/locality name
          example: Amsterdam
        street:
          type: string
          minLength: 1
          description: Street name (Dutch format)
          example: Kerkstraat
        houseNumber:
          type: string
          pattern: ^\d+$
          description: House number
          example: '42'
        houseNumberAddition:
          type: string
          minLength: 1
          description: House number addition/suffix
          example: A
        municipality:
          type: string
          minLength: 1
          description: >-
            Dutch municipality (gemeente). Distinct from city (woonplaats).
            Optional.
          example: Amsterdam
      required:
        - country
        - postalCode
        - houseNumber
      description: Dutch address format with structured house number
    InternationalAddress:
      type: object
      properties:
        streetAddress:
          type: string
          minLength: 1
          description: >-
            Street address (single line; include any sub-address like apt/floor
            inline)
          example: Rue de la Loi 200, Apt 4B
        postalCode:
          type: string
          minLength: 1
          description: Postal/ZIP code
          example: '1000'
        city:
          type: string
          minLength: 1
          description: City/locality name
          example: Brussels
        country:
          type: string
          enum:
            - AD
            - AE
            - AF
            - AG
            - AI
            - AL
            - AM
            - AO
            - AQ
            - AR
            - AS
            - AT
            - AU
            - AW
            - AX
            - AZ
            - BA
            - BB
            - BD
            - BE
            - BF
            - BG
            - BH
            - BI
            - BJ
            - BL
            - BM
            - BN
            - BO
            - BQ
            - BR
            - BS
            - BT
            - BV
            - BW
            - BY
            - BZ
            - CA
            - CC
            - CD
            - CF
            - CG
            - CH
            - CI
            - CK
            - CL
            - CM
            - CN
            - CO
            - CR
            - CU
            - CV
            - CW
            - CX
            - CY
            - CZ
            - DE
            - DJ
            - DK
            - DM
            - DO
            - DZ
            - EC
            - EE
            - EG
            - EH
            - ER
            - ES
            - ET
            - FI
            - FJ
            - FK
            - FM
            - FO
            - FR
            - GA
            - GB
            - GD
            - GE
            - GF
            - GG
            - GH
            - GI
            - GL
            - GM
            - GN
            - GP
            - GQ
            - GR
            - GS
            - GT
            - GU
            - GW
            - GY
            - HK
            - HM
            - HN
            - HR
            - HT
            - HU
            - ID
            - IE
            - IL
            - IM
            - IN
            - IO
            - IQ
            - IR
            - IS
            - IT
            - JE
            - JM
            - JO
            - JP
            - KE
            - KG
            - KH
            - KI
            - KM
            - KN
            - KP
            - KR
            - KW
            - KY
            - KZ
            - LA
            - LB
            - LC
            - LI
            - LK
            - LR
            - LS
            - LT
            - LU
            - LV
            - LY
            - MA
            - MC
            - MD
            - ME
            - MF
            - MG
            - MH
            - MK
            - ML
            - MM
            - MN
            - MO
            - MP
            - MQ
            - MR
            - MS
            - MT
            - MU
            - MV
            - MW
            - MX
            - MY
            - MZ
            - NA
            - NC
            - NE
            - NF
            - NG
            - NI
            - 'NO'
            - NP
            - NR
            - NU
            - NZ
            - OM
            - PA
            - PE
            - PF
            - PG
            - PH
            - PK
            - PL
            - PM
            - PN
            - PR
            - PS
            - PT
            - PW
            - PY
            - QA
            - RE
            - RO
            - RS
            - RU
            - RW
            - SA
            - SB
            - SC
            - SD
            - SE
            - SG
            - SH
            - SI
            - SJ
            - SK
            - SL
            - SM
            - SN
            - SO
            - SR
            - SS
            - ST
            - SV
            - SX
            - SY
            - SZ
            - TC
            - TD
            - TF
            - TG
            - TH
            - TJ
            - TK
            - TL
            - TM
            - TN
            - TO
            - TR
            - TT
            - TV
            - TW
            - TZ
            - UA
            - UG
            - UM
            - US
            - UY
            - UZ
            - VA
            - VC
            - VE
            - VG
            - VI
            - VN
            - VU
            - WF
            - WS
            - YE
            - YT
            - ZA
            - ZM
            - ZW
            - XK
          description: ISO 3166-1 alpha-2 country code (NL uses NLAddress)
          example: BE
      required:
        - streetAddress
        - postalCode
        - city
        - country
      description: International address format (UPU S42 compliant)
    QuoteFinancingSubStatusNone:
      type: object
      properties:
        type:
          type: string
          enum:
            - none
      required:
        - type
      description: No ops pause overlay; journey `status` and `waitingOn` are sufficient.
    QuoteFinancingSubStatusOnHold:
      type: object
      properties:
        type:
          type: string
          enum:
            - on_hold
        reason:
          $ref: '#/components/schemas/QuoteFinancingOnHoldReason'
        description:
          type: string
          minLength: 1
          description: >-
            Free-text note explaining the hold, captured in Salesforce; suitable
            for display to the merchant.
          example: Waiting on the signed contract
      required:
        - type
        - reason
      description: >-
        Financing process is paused; the journey `status` still reflects the
        underlying stage.
    QuoteFinancingSubStatusCanceled:
      type: object
      properties:
        type:
          type: string
          enum:
            - canceled
        reason:
          $ref: '#/components/schemas/QuoteFinancingCancellationReason'
        description:
          type: string
          minLength: 1
          description: >-
            Free-text detail explaining the cancellation, captured in
            Salesforce; suitable for display to the merchant.
          example: Consumer chose to postpone the project
      required:
        - type
        - reason
      description: >-
        Accompanies a terminal canceled `status`; explains why the financing was
        canceled. Never changes `waitingOn` (terminal → `none`).
    QuoteFinancingOnHoldReason:
      type: string
      enum:
        - customer_unreachable
        - quote_under_consideration
        - customer_personal_reason
        - customer_evaluating_independently
        - cancellation_requested
        - awaiting_documents
        - customer_no_show_unreachable
        - customer_no_show_voicemail
        - customer_no_show_rescheduled
        - installation_blocked
        - general_question
        - unknown
      description: Reason why the financing process is on hold
    QuoteFinancingCancellationReason:
      type: string
      enum:
        - no_contact
        - declined_support
        - dropped_pre_offer
        - offer_declined
        - lender_rejected
        - other
        - unknown
      description: >-
        Reason a terminal canceled financing ended the way it did. Open enum;
        default-branch on unknown values.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````