> ## 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.

# Create a quote

> Create a quote (the installer's final offer), or an indicative quote (an estimate sent before a final quote exists).

## Quote or indicative quote

A **quote** is the installer's final offer: a fixed amount for a specific product, which the consumer signs. This is the default. Existing integrations keep working unchanged.

An **indicative quote** is an estimate: an amount and a product, sent before a final quote exists. Add `indicative` to `terms` to create one, for example `"terms": ["indicative"]`. Only do this when you don't have a final quote yet.

| | Quote (default) | Indicative quote |
| - | - | - |
| How to send it | Leave `indicative` out of `terms` | Include `indicative` in `terms` |
| What it is | Final offer | Estimate |
| Financing application can complete | Yes | No, Prets waits for a quote |
| `financing.status` after create | `new_customer` | `orientation` |

You can only mark a quote as indicative when you create it. While it is indicative, `terms` in the response includes `indicative`. If Prets later changes the quote's status, `indicative` disappears from `terms`; any other terms you sent stay.

More context: [Indicative quotes](/integration/indicative-quotes.md).


## OpenAPI

````yaml https://api.prets.io/v1/openapi.json POST /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:
    post:
      summary: Create a quote
      description: >-
        Presented quote + Opportunity by default; `terms` including `indicative`
        for an indicative quote (`orientation`, no Opportunity). `session=true`
        only for presented creates.
      parameters:
        - schema:
            type:
              - boolean
              - 'null'
            default: false
            description: >-
              Include a single-use consumer session URL in `links.session`. Not
              available for indicative quotes: returns 422 when `terms` includes
              `indicative`.
            example: true
          required: false
          description: >-
            Include a single-use consumer session URL in `links.session`. Not
            available for indicative quotes: returns 422 when `terms` includes
            `indicative`.
          name: session
          in: query
        - schema:
            type: string
            description: Target merchant organization slug.
            example: prets
            x-internal: true
          required: false
          description: Target merchant organization slug.
          name: Prets-Organization
          in: header
        - schema:
            type: string
            format: uuid
            description: >-
              Optional client-generated UUID for idempotent retries. If omitted,
              a key is derived from the request body.
            example: 550e8400-e29b-41d4-a716-446655440000
          required: false
          description: >-
            Optional client-generated UUID for idempotent retries. If omitted, a
            key is derived from the request body.
          name: Idempotency-Key
          in: header
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                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. Include `indicative` on create
                    for a non-binding offer.
                  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
                lineItems:
                  type: array
                  items:
                    oneOf:
                      - $ref: '#/components/schemas/BatteryLineItem'
                      - $ref: '#/components/schemas/PVLineItem'
                      - $ref: '#/components/schemas/HeatPumpLineItem'
                      - $ref: '#/components/schemas/CentralHeatingBoilerLineItem'
                      - $ref: '#/components/schemas/WallInsulationLineItem'
                      - $ref: '#/components/schemas/ExternalWallInsulationLineItem'
                      - $ref: '#/components/schemas/CavityWallInsulationLineItem'
                      - $ref: '#/components/schemas/SlopedRoofInsulationLineItem'
                      - $ref: '#/components/schemas/FlatRoofInsulationLineItem'
                      - $ref: '#/components/schemas/FloorInsulationLineItem'
                      - $ref: '#/components/schemas/AtticFloorInsulationLineItem'
                      - $ref: '#/components/schemas/GroundInsulationLineItem'
                      - $ref: '#/components/schemas/WindowsLineItem'
                      - $ref: '#/components/schemas/InsulatedDoorsLineItem'
                      - $ref: '#/components/schemas/InsulatedFramesLineItem'
                      - $ref: '#/components/schemas/InsulatedInfillPanelsLineItem'
                      - $ref: '#/components/schemas/HeatBatteryLineItem'
                      - $ref: '#/components/schemas/HeatPumpWaterHeaterLineItem'
                      - $ref: '#/components/schemas/SolarWaterHeaterLineItem'
                      - $ref: '#/components/schemas/DrainWaterHeatRecoveryLineItem'
                      - $ref: '#/components/schemas/VentilationHeatRecoveryLineItem'
                      - $ref: '#/components/schemas/MechanicalVentilationLineItem'
                      - $ref: '#/components/schemas/EvChargerLineItem'
                      - $ref: '#/components/schemas/InstallationLineItem'
                      - $ref: '#/components/schemas/OtherLineItem'
                      - $ref: '#/components/schemas/SubsidyLineItem'
                    discriminator:
                      propertyName: type
                      mapping:
                        battery: '#/components/schemas/BatteryLineItem'
                        pv: '#/components/schemas/PVLineItem'
                        heat_pump: '#/components/schemas/HeatPumpLineItem'
                        central_heating_boiler: '#/components/schemas/CentralHeatingBoilerLineItem'
                        wall_insulation: '#/components/schemas/WallInsulationLineItem'
                        external_wall_insulation: '#/components/schemas/ExternalWallInsulationLineItem'
                        cavity_wall_insulation: '#/components/schemas/CavityWallInsulationLineItem'
                        sloped_roof_insulation: '#/components/schemas/SlopedRoofInsulationLineItem'
                        flat_roof_insulation: '#/components/schemas/FlatRoofInsulationLineItem'
                        floor_insulation: '#/components/schemas/FloorInsulationLineItem'
                        attic_floor_insulation: '#/components/schemas/AtticFloorInsulationLineItem'
                        ground_insulation: '#/components/schemas/GroundInsulationLineItem'
                        windows: '#/components/schemas/WindowsLineItem'
                        insulated_doors: '#/components/schemas/InsulatedDoorsLineItem'
                        insulated_frames: '#/components/schemas/InsulatedFramesLineItem'
                        insulated_infill_panels: '#/components/schemas/InsulatedInfillPanelsLineItem'
                        heat_battery: '#/components/schemas/HeatBatteryLineItem'
                        heat_pump_water_heater: '#/components/schemas/HeatPumpWaterHeaterLineItem'
                        solar_water_heater: '#/components/schemas/SolarWaterHeaterLineItem'
                        drain_water_heat_recovery: '#/components/schemas/DrainWaterHeatRecoveryLineItem'
                        ventilation_heat_recovery: '#/components/schemas/VentilationHeatRecoveryLineItem'
                        mechanical_ventilation: '#/components/schemas/MechanicalVentilationLineItem'
                        ev_charger: '#/components/schemas/EvChargerLineItem'
                        installation: '#/components/schemas/InstallationLineItem'
                        other: '#/components/schemas/OtherLineItem'
                        subsidy: '#/components/schemas/SubsidyLineItem'
                  minItems: 1
                  description: Line items for the quote (at least one required)
                quoteId:
                  type: string
                  pattern: ^qot_[0-9A-HJKMNP-TV-Z]{26}$
                  description: >-
                    Client-generated id (`qot_{ULID}`). When provided the server
                    uses this as the canonical quote ID, enabling optimistic UI
                    on the client.
              required:
                - address
                - contact
                - currency
                - totalInclTax
                - lineItems
              description: Create a new quote for sustainability home improvements
      responses:
        '200':
          description: Quote created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateQuoteResponse'
        '400':
          description: Bad request - invalid input or merchant not found
        '401':
          description: Unauthorized - authentication required
        '403':
          description: Forbidden — missing `org:quotes:create` permission
        '409':
          description: >-
            Conflict - a request with this Idempotency-Key is already in
            progress
        '422':
          description: >-
            Unprocessable request body. Before submitting, validate obvious
            fields on the CreateQuote client: `contact.lastName`,
            `contact.email`, `contact.phoneNumber`, NL `address.country`,
            `address.postalCode`, `address.houseNumber`, `currency`,
            `totalInclTax`, and the presence of `contact` and `address`. For
            nested `lineItems[i].*` failures, an empty `lineItems` array, or any
            other validation failure, show the technical 422. Format the toast
            with `error.code`, `error.param`, and the existing `error.message`;
            alternatively, show `JSON.stringify(error, null, 2)` for the whole
            `error` object.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      type:
                        type: string
                        enum:
                          - invalid_request_error
                          - authentication_error
                          - rate_limit_error
                          - api_error
                      code:
                        anyOf:
                          - type: string
                            enum:
                              - bad_request
                              - unauthorized
                              - forbidden
                              - not_found
                              - conflict
                              - parameter_missing
                              - parameter_invalid
                              - parameter_unknown
                              - payload_too_large
                              - unsupported_media_type
                              - rate_limited
                              - internal_error
                              - bad_gateway
                              - service_unavailable
                              - email_mismatch
                              - idempotency_in_progress
                              - event_destination_already_exists
                              - organization_slug_in_use
                              - case_already_open
                              - case_closed
                              - appointment_scheduling_link_unknown
                          - type: string
                      message:
                        type: string
                      param:
                        type: string
                      requestId:
                        type: string
                    required:
                      - type
                      - code
                      - message
                      - requestId
                  debug:
                    type: object
                    properties:
                      message:
                        type: string
                      stack:
                        type: string
                      cause: {}
                required:
                  - error
        '500':
          description: Internal server error
components:
  schemas:
    Address:
      oneOf:
        - $ref: '#/components/schemas/NLAddress'
        - $ref: '#/components/schemas/InternationalAddress'
      discriminator:
        propertyName: country
        mapping:
          NL: '#/components/schemas/NLAddress'
          AD: '#/components/schemas/InternationalAddress'
          AE: '#/components/schemas/InternationalAddress'
          AF: '#/components/schemas/InternationalAddress'
          AG: '#/components/schemas/InternationalAddress'
          AI: '#/components/schemas/InternationalAddress'
          AL: '#/components/schemas/InternationalAddress'
          AM: '#/components/schemas/InternationalAddress'
          AO: '#/components/schemas/InternationalAddress'
          AQ: '#/components/schemas/InternationalAddress'
          AR: '#/components/schemas/InternationalAddress'
          AS: '#/components/schemas/InternationalAddress'
          AT: '#/components/schemas/InternationalAddress'
          AU: '#/components/schemas/InternationalAddress'
          AW: '#/components/schemas/InternationalAddress'
          AX: '#/components/schemas/InternationalAddress'
          AZ: '#/components/schemas/InternationalAddress'
          BA: '#/components/schemas/InternationalAddress'
          BB: '#/components/schemas/InternationalAddress'
          BD: '#/components/schemas/InternationalAddress'
          BE: '#/components/schemas/InternationalAddress'
          BF: '#/components/schemas/InternationalAddress'
          BG: '#/components/schemas/InternationalAddress'
          BH: '#/components/schemas/InternationalAddress'
          BI: '#/components/schemas/InternationalAddress'
          BJ: '#/components/schemas/InternationalAddress'
          BL: '#/components/schemas/InternationalAddress'
          BM: '#/components/schemas/InternationalAddress'
          BN: '#/components/schemas/InternationalAddress'
          BO: '#/components/schemas/InternationalAddress'
          BQ: '#/components/schemas/InternationalAddress'
          BR: '#/components/schemas/InternationalAddress'
          BS: '#/components/schemas/InternationalAddress'
          BT: '#/components/schemas/InternationalAddress'
          BV: '#/components/schemas/InternationalAddress'
          BW: '#/components/schemas/InternationalAddress'
          BY: '#/components/schemas/InternationalAddress'
          BZ: '#/components/schemas/InternationalAddress'
          CA: '#/components/schemas/InternationalAddress'
          CC: '#/components/schemas/InternationalAddress'
          CD: '#/components/schemas/InternationalAddress'
          CF: '#/components/schemas/InternationalAddress'
          CG: '#/components/schemas/InternationalAddress'
          CH: '#/components/schemas/InternationalAddress'
          CI: '#/components/schemas/InternationalAddress'
          CK: '#/components/schemas/InternationalAddress'
          CL: '#/components/schemas/InternationalAddress'
          CM: '#/components/schemas/InternationalAddress'
          CN: '#/components/schemas/InternationalAddress'
          CO: '#/components/schemas/InternationalAddress'
          CR: '#/components/schemas/InternationalAddress'
          CU: '#/components/schemas/InternationalAddress'
          CV: '#/components/schemas/InternationalAddress'
          CW: '#/components/schemas/InternationalAddress'
          CX: '#/components/schemas/InternationalAddress'
          CY: '#/components/schemas/InternationalAddress'
          CZ: '#/components/schemas/InternationalAddress'
          DE: '#/components/schemas/InternationalAddress'
          DJ: '#/components/schemas/InternationalAddress'
          DK: '#/components/schemas/InternationalAddress'
          DM: '#/components/schemas/InternationalAddress'
          DO: '#/components/schemas/InternationalAddress'
          DZ: '#/components/schemas/InternationalAddress'
          EC: '#/components/schemas/InternationalAddress'
          EE: '#/components/schemas/InternationalAddress'
          EG: '#/components/schemas/InternationalAddress'
          EH: '#/components/schemas/InternationalAddress'
          ER: '#/components/schemas/InternationalAddress'
          ES: '#/components/schemas/InternationalAddress'
          ET: '#/components/schemas/InternationalAddress'
          FI: '#/components/schemas/InternationalAddress'
          FJ: '#/components/schemas/InternationalAddress'
          FK: '#/components/schemas/InternationalAddress'
          FM: '#/components/schemas/InternationalAddress'
          FO: '#/components/schemas/InternationalAddress'
          FR: '#/components/schemas/InternationalAddress'
          GA: '#/components/schemas/InternationalAddress'
          GB: '#/components/schemas/InternationalAddress'
          GD: '#/components/schemas/InternationalAddress'
          GE: '#/components/schemas/InternationalAddress'
          GF: '#/components/schemas/InternationalAddress'
          GG: '#/components/schemas/InternationalAddress'
          GH: '#/components/schemas/InternationalAddress'
          GI: '#/components/schemas/InternationalAddress'
          GL: '#/components/schemas/InternationalAddress'
          GM: '#/components/schemas/InternationalAddress'
          GN: '#/components/schemas/InternationalAddress'
          GP: '#/components/schemas/InternationalAddress'
          GQ: '#/components/schemas/InternationalAddress'
          GR: '#/components/schemas/InternationalAddress'
          GS: '#/components/schemas/InternationalAddress'
          GT: '#/components/schemas/InternationalAddress'
          GU: '#/components/schemas/InternationalAddress'
          GW: '#/components/schemas/InternationalAddress'
          GY: '#/components/schemas/InternationalAddress'
          HK: '#/components/schemas/InternationalAddress'
          HM: '#/components/schemas/InternationalAddress'
          HN: '#/components/schemas/InternationalAddress'
          HR: '#/components/schemas/InternationalAddress'
          HT: '#/components/schemas/InternationalAddress'
          HU: '#/components/schemas/InternationalAddress'
          ID: '#/components/schemas/InternationalAddress'
          IE: '#/components/schemas/InternationalAddress'
          IL: '#/components/schemas/InternationalAddress'
          IM: '#/components/schemas/InternationalAddress'
          IN: '#/components/schemas/InternationalAddress'
          IO: '#/components/schemas/InternationalAddress'
          IQ: '#/components/schemas/InternationalAddress'
          IR: '#/components/schemas/InternationalAddress'
          IS: '#/components/schemas/InternationalAddress'
          IT: '#/components/schemas/InternationalAddress'
          JE: '#/components/schemas/InternationalAddress'
          JM: '#/components/schemas/InternationalAddress'
          JO: '#/components/schemas/InternationalAddress'
          JP: '#/components/schemas/InternationalAddress'
          KE: '#/components/schemas/InternationalAddress'
          KG: '#/components/schemas/InternationalAddress'
          KH: '#/components/schemas/InternationalAddress'
          KI: '#/components/schemas/InternationalAddress'
          KM: '#/components/schemas/InternationalAddress'
          KN: '#/components/schemas/InternationalAddress'
          KP: '#/components/schemas/InternationalAddress'
          KR: '#/components/schemas/InternationalAddress'
          KW: '#/components/schemas/InternationalAddress'
          KY: '#/components/schemas/InternationalAddress'
          KZ: '#/components/schemas/InternationalAddress'
          LA: '#/components/schemas/InternationalAddress'
          LB: '#/components/schemas/InternationalAddress'
          LC: '#/components/schemas/InternationalAddress'
          LI: '#/components/schemas/InternationalAddress'
          LK: '#/components/schemas/InternationalAddress'
          LR: '#/components/schemas/InternationalAddress'
          LS: '#/components/schemas/InternationalAddress'
          LT: '#/components/schemas/InternationalAddress'
          LU: '#/components/schemas/InternationalAddress'
          LV: '#/components/schemas/InternationalAddress'
          LY: '#/components/schemas/InternationalAddress'
          MA: '#/components/schemas/InternationalAddress'
          MC: '#/components/schemas/InternationalAddress'
          MD: '#/components/schemas/InternationalAddress'
          ME: '#/components/schemas/InternationalAddress'
          MF: '#/components/schemas/InternationalAddress'
          MG: '#/components/schemas/InternationalAddress'
          MH: '#/components/schemas/InternationalAddress'
          MK: '#/components/schemas/InternationalAddress'
          ML: '#/components/schemas/InternationalAddress'
          MM: '#/components/schemas/InternationalAddress'
          MN: '#/components/schemas/InternationalAddress'
          MO: '#/components/schemas/InternationalAddress'
          MP: '#/components/schemas/InternationalAddress'
          MQ: '#/components/schemas/InternationalAddress'
          MR: '#/components/schemas/InternationalAddress'
          MS: '#/components/schemas/InternationalAddress'
          MT: '#/components/schemas/InternationalAddress'
          MU: '#/components/schemas/InternationalAddress'
          MV: '#/components/schemas/InternationalAddress'
          MW: '#/components/schemas/InternationalAddress'
          MX: '#/components/schemas/InternationalAddress'
          MY: '#/components/schemas/InternationalAddress'
          MZ: '#/components/schemas/InternationalAddress'
          NA: '#/components/schemas/InternationalAddress'
          NC: '#/components/schemas/InternationalAddress'
          NE: '#/components/schemas/InternationalAddress'
          NF: '#/components/schemas/InternationalAddress'
          NG: '#/components/schemas/InternationalAddress'
          NI: '#/components/schemas/InternationalAddress'
          'NO': '#/components/schemas/InternationalAddress'
          NP: '#/components/schemas/InternationalAddress'
          NR: '#/components/schemas/InternationalAddress'
          NU: '#/components/schemas/InternationalAddress'
          NZ: '#/components/schemas/InternationalAddress'
          OM: '#/components/schemas/InternationalAddress'
          PA: '#/components/schemas/InternationalAddress'
          PE: '#/components/schemas/InternationalAddress'
          PF: '#/components/schemas/InternationalAddress'
          PG: '#/components/schemas/InternationalAddress'
          PH: '#/components/schemas/InternationalAddress'
          PK: '#/components/schemas/InternationalAddress'
          PL: '#/components/schemas/InternationalAddress'
          PM: '#/components/schemas/InternationalAddress'
          PN: '#/components/schemas/InternationalAddress'
          PR: '#/components/schemas/InternationalAddress'
          PS: '#/components/schemas/InternationalAddress'
          PT: '#/components/schemas/InternationalAddress'
          PW: '#/components/schemas/InternationalAddress'
          PY: '#/components/schemas/InternationalAddress'
          QA: '#/components/schemas/InternationalAddress'
          RE: '#/components/schemas/InternationalAddress'
          RO: '#/components/schemas/InternationalAddress'
          RS: '#/components/schemas/InternationalAddress'
          RU: '#/components/schemas/InternationalAddress'
          RW: '#/components/schemas/InternationalAddress'
          SA: '#/components/schemas/InternationalAddress'
          SB: '#/components/schemas/InternationalAddress'
          SC: '#/components/schemas/InternationalAddress'
          SD: '#/components/schemas/InternationalAddress'
          SE: '#/components/schemas/InternationalAddress'
          SG: '#/components/schemas/InternationalAddress'
          SH: '#/components/schemas/InternationalAddress'
          SI: '#/components/schemas/InternationalAddress'
          SJ: '#/components/schemas/InternationalAddress'
          SK: '#/components/schemas/InternationalAddress'
          SL: '#/components/schemas/InternationalAddress'
          SM: '#/components/schemas/InternationalAddress'
          SN: '#/components/schemas/InternationalAddress'
          SO: '#/components/schemas/InternationalAddress'
          SR: '#/components/schemas/InternationalAddress'
          SS: '#/components/schemas/InternationalAddress'
          ST: '#/components/schemas/InternationalAddress'
          SV: '#/components/schemas/InternationalAddress'
          SX: '#/components/schemas/InternationalAddress'
          SY: '#/components/schemas/InternationalAddress'
          SZ: '#/components/schemas/InternationalAddress'
          TC: '#/components/schemas/InternationalAddress'
          TD: '#/components/schemas/InternationalAddress'
          TF: '#/components/schemas/InternationalAddress'
          TG: '#/components/schemas/InternationalAddress'
          TH: '#/components/schemas/InternationalAddress'
          TJ: '#/components/schemas/InternationalAddress'
          TK: '#/components/schemas/InternationalAddress'
          TL: '#/components/schemas/InternationalAddress'
          TM: '#/components/schemas/InternationalAddress'
          TN: '#/components/schemas/InternationalAddress'
          TO: '#/components/schemas/InternationalAddress'
          TR: '#/components/schemas/InternationalAddress'
          TT: '#/components/schemas/InternationalAddress'
          TV: '#/components/schemas/InternationalAddress'
          TW: '#/components/schemas/InternationalAddress'
          TZ: '#/components/schemas/InternationalAddress'
          UA: '#/components/schemas/InternationalAddress'
          UG: '#/components/schemas/InternationalAddress'
          UM: '#/components/schemas/InternationalAddress'
          US: '#/components/schemas/InternationalAddress'
          UY: '#/components/schemas/InternationalAddress'
          UZ: '#/components/schemas/InternationalAddress'
          VA: '#/components/schemas/InternationalAddress'
          VC: '#/components/schemas/InternationalAddress'
          VE: '#/components/schemas/InternationalAddress'
          VG: '#/components/schemas/InternationalAddress'
          VI: '#/components/schemas/InternationalAddress'
          VN: '#/components/schemas/InternationalAddress'
          VU: '#/components/schemas/InternationalAddress'
          WF: '#/components/schemas/InternationalAddress'
          WS: '#/components/schemas/InternationalAddress'
          YE: '#/components/schemas/InternationalAddress'
          YT: '#/components/schemas/InternationalAddress'
          ZA: '#/components/schemas/InternationalAddress'
          ZM: '#/components/schemas/InternationalAddress'
          ZW: '#/components/schemas/InternationalAddress'
          XK: '#/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
        - indicative
      description: >-
        Quote term and condition. `indicative`: a non-binding offer — the
        customer gets an orientation flow and no financing journey starts yet.
        Set on create only; Prets drops it when the quote is presented.
      example: subject_to_financing
    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
    BatteryLineItem:
      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
      required:
        - type
        - totalInclTax
      description: Battery storage system line item
    PVLineItem:
      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
      required:
        - type
        - totalInclTax
      description: Solar PV panel installation line item
    HeatPumpLineItem:
      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
      required:
        - type
        - totalInclTax
      description: Heat pump installation line item
    CentralHeatingBoilerLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - central_heating_boiler
        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
        kind:
          $ref: '#/components/schemas/CentralHeatingBoilerKind'
        fuel:
          $ref: '#/components/schemas/CentralHeatingBoilerFuel'
      required:
        - type
        - totalInclTax
      description: >-
        Central heating boiler line item. Space-heating appliance, not a heat
        pump or a heat pump water heater.
    WallInsulationLineItem:
      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. SI declared
            layer resistance (Rd).
          example: 3.5
      required:
        - type
        - totalInclTax
      description: >-
        Unspecified wall insulation. Deprecated: remains valid with no sunset,
        and does not mean external-wall or cavity-wall insulation.
      deprecated: true
    ExternalWallInsulationLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - external_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. SI declared
            layer resistance (Rd).
          example: 3.5
      required:
        - type
        - totalInclTax
      description: Insulation applied to the outside of an external wall
    CavityWallInsulationLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - cavity_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. SI declared
            layer resistance (Rd).
          example: 3.5
      required:
        - type
        - totalInclTax
      description: Insulation filling a wall cavity
    SlopedRoofInsulationLineItem:
      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. SI declared
            layer resistance (Rd).
          example: 3.5
      required:
        - type
        - totalInclTax
      description: Sloped roof insulation line item
    FlatRoofInsulationLineItem:
      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. SI declared
            layer resistance (Rd).
          example: 3.5
      required:
        - type
        - totalInclTax
      description: Flat roof insulation line item
    FloorInsulationLineItem:
      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. SI declared
            layer resistance (Rd).
          example: 3.5
      required:
        - type
        - totalInclTax
      description: Floor insulation line item
    AtticFloorInsulationLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - attic_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. SI declared
            layer resistance (Rd).
          example: 3.5
      required:
        - type
        - totalInclTax
      description: >-
        Insulation on the floor of an unheated attic or loft, not ground-floor
        or roof insulation
    GroundInsulationLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - ground_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. SI declared
            layer resistance (Rd).
          example: 3.5
      required:
        - type
        - totalInclTax
      description: Insulation on the soil of a crawl space, not the underside of the floor
    WindowsLineItem:
      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
      required:
        - type
        - totalInclTax
      description: Window/glazing installation line item
    InsulatedDoorsLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - insulated_doors
        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: Surface area in square meters (m²)
          example: 2.4
        uValue:
          type: number
          exclusiveMinimum: 0
          description: Thermal transmittance (U-value) in W/m²K. Lower is better.
          example: 1.2
      required:
        - type
        - totalInclTax
      description: >-
        Insulated exterior door line item. U-value is Ud. A door that is mostly
        glass is a windows line.
    InsulatedFramesLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - insulated_frames
        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: Surface area in square meters (m²)
          example: 2.4
        uValue:
          type: number
          exclusiveMinimum: 0
          description: Thermal transmittance (U-value) in W/m²K. Lower is better.
          example: 1.2
      required:
        - type
        - totalInclTax
      description: >-
        Insulated door or window frame line item. U-value is Uf. Glass stays on
        a windows line.
    InsulatedInfillPanelsLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - insulated_infill_panels
        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: Surface area in square meters (m²)
          example: 2.4
        uValue:
          type: number
          exclusiveMinimum: 0
          description: Thermal transmittance (U-value) in W/m²K. Lower is better.
          example: 1.2
      required:
        - type
        - totalInclTax
      description: >-
        Opaque insulated infill panel in a door or window frame. U-value is Up,
        not glass Ug.
    HeatBatteryLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - heat_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
        storageMedium:
          $ref: '#/components/schemas/HeatBatteryStorageMedium'
        heatStorageCapacity:
          type: number
          minimum: 0
          description: >-
            Thermal storage capacity in watt-hours (Wh). Not electrical battery
            capacity.
          example: 10500
      required:
        - type
        - totalInclTax
      description: Thermal heat storage line item. Not an electrical battery.
    HeatPumpWaterHeaterLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - heat_pump_water_heater
        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
        storageVolume:
          type: number
          exclusiveMinimum: 0
          description: Hot water storage volume in litres
          example: 200
        heatSource:
          $ref: '#/components/schemas/HeatPumpWaterHeaterHeatSource'
      required:
        - type
        - totalInclTax
      description: Domestic hot water heat pump line item. Does not heat the house.
    SolarWaterHeaterLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - solar_water_heater
        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
        collectorKind:
          $ref: '#/components/schemas/SolarCollectorKind'
        collectorApertureArea:
          type: number
          exclusiveMinimum: 0
          description: >-
            Collector aperture area in square meters (m²). Not insulated surface
            area.
          example: 4.2
        storageVolume:
          type: number
          exclusiveMinimum: 0
          description: Hot water storage volume in litres
          example: 300
      required:
        - type
        - totalInclTax
      description: >-
        Solar thermal water heater (collectors, storage, and pump). Not
        photovoltaic panels.
    DrainWaterHeatRecoveryLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - drain_water_heat_recovery
        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
        heatRecoveryEfficiency:
          type: number
          minimum: 1
          maximum: 100
          description: >-
            CSA B55.1 / DIN 94678 drain-water heat recovery effectiveness as a
            percent, not a 0–1 fraction.
          example: 55
      required:
        - type
        - totalInclTax
      description: Drain-water heat recovery line item (shower waste heat)
    VentilationHeatRecoveryLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - ventilation_heat_recovery
        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
        configuration:
          $ref: '#/components/schemas/VentilationHeatRecoveryConfiguration'
        heatRecoveryEfficiency:
          type: number
          minimum: 1
          maximum: 100
          description: >-
            EN 13141-7 ventilation heat recovery temperature ratio as a percent,
            not a 0–1 fraction.
          example: 85
      required:
        - type
        - totalInclTax
      description: >-
        Ventilation-air heat recovery line item. Not drain-water heat recovery,
        and not demand-controlled ventilation.
    MechanicalVentilationLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - mechanical_ventilation
        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
        control:
          $ref: '#/components/schemas/MechanicalVentilationControl'
      required:
        - type
        - totalInclTax
      description: >-
        Mechanical ventilation line item, including CO₂ and humidity demand
        control
    EvChargerLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - ev_charger
        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
        nameplatePower:
          type: number
          minimum: 0
          description: Rated charging power in watts (W)
          example: 11000
        phases:
          type: string
          enum:
            - single
            - three
          description: 'Supply phases: single-phase or three-phase'
          example: three
        outlet:
          type: string
          enum:
            - socket
            - tethered
          description: Socket (contactdoos) or tethered cable (vaste kabel)
          example: socket
      required:
        - type
        - totalInclTax
      description: Electric vehicle charger line item
    InstallationLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - installation
        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
        belongsTo:
          type: string
          enum:
            - battery
            - pv
            - heat_pump
            - central_heating_boiler
            - wall_insulation
            - external_wall_insulation
            - cavity_wall_insulation
            - sloped_roof_insulation
            - flat_roof_insulation
            - floor_insulation
            - attic_floor_insulation
            - ground_insulation
            - windows
            - insulated_doors
            - insulated_frames
            - insulated_infill_panels
            - heat_battery
            - heat_pump_water_heater
            - solar_water_heater
            - drain_water_heat_recovery
            - ventilation_heat_recovery
            - mechanical_ventilation
            - ev_charger
          description: >-
            Must differ from this line's own type. A sibling line of that type
            is not required.
          example: pv
      required:
        - type
        - totalInclTax
      description: >-
        Separately billed installation or labor. Labor included in a measure
        stays on that measure line.
    OtherLineItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - other
        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
        belongsTo:
          type: string
          enum:
            - battery
            - pv
            - heat_pump
            - central_heating_boiler
            - wall_insulation
            - external_wall_insulation
            - cavity_wall_insulation
            - sloped_roof_insulation
            - flat_roof_insulation
            - floor_insulation
            - attic_floor_insulation
            - ground_insulation
            - windows
            - insulated_doors
            - insulated_frames
            - insulated_infill_panels
            - heat_battery
            - heat_pump_water_heater
            - solar_water_heater
            - drain_water_heat_recovery
            - ventilation_heat_recovery
            - mechanical_ventilation
            - ev_charger
            - installation
          description: >-
            Must differ from this line's own type. A sibling line of that type
            is not required.
          example: heat_pump
      required:
        - type
        - totalInclTax
      description: >-
        Leftover priced work that does not fit a named line item type. Use the
        named type when one fits. Separately billed installation or labor is
        `installation`.
    SubsidyLineItem:
      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
            QuoteLineItems 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
      required:
        - type
        - incentiveCodes
        - totalInclTax
      description: >-
        A merchant-declared subsidy reduction, joined to QuoteLineItems by
        incentive code
    CreateQuoteResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/Quote'
        links:
          type: object
          properties:
            portalQuote:
              type: string
              format: uri
              description: >-
                Deeplink to this quote in the Prets merchant portal (only
                present for org API keys)
              example: >-
                https://my.prets.app/organizations/acme/quotes/qot_01ARZ3NDEKTSV4RRFFQ69G5AV
            session:
              type: string
              format: uri
              description: >-
                Single-use authenticated session URL (only present when
                session=true)
              example: https://app.prets.io/session?ticket=abc123
          description: Hypermedia navigation links
      required:
        - data
      description: Quote creation response
    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)
    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
    CentralHeatingBoilerKind:
      type: string
      enum:
        - condensing
        - low_temperature
        - standard
      description: Declared boiler class. A high-efficiency (HR) boiler is condensing.
      example: condensing
    CentralHeatingBoilerFuel:
      type: string
      enum:
        - gas
        - oil
      description: Boiler fuel
      example: gas
    HeatBatteryStorageMedium:
      type: string
      enum:
        - water
        - tcm
        - pcm
      description: >-
        Thermal storage medium: water, thermochemical (TCM), or phase-change
        (PCM)
      example: pcm
    HeatPumpWaterHeaterHeatSource:
      type: string
      enum:
        - indoor_air
        - non_heated_space_air
        - outdoor_air
        - exhaust_air
      description: >-
        Air source for a domestic hot water heat pump (EN 16147). Exhaust air is
        ventilatielucht, not indoor air. Not a space-heating heat transfer
        medium.
      example: outdoor_air
    SolarCollectorKind:
      type: string
      enum:
        - flat_plate
        - evacuated_tube
      description: Solar thermal collector kind
      example: flat_plate
    VentilationHeatRecoveryConfiguration:
      type: string
      enum:
        - central
        - decentral
      description: Central or room-level (decentral) ventilation heat recovery
      example: central
    MechanicalVentilationControl:
      type: string
      enum:
        - co2
        - humidity
        - occupancy
        - co2_humidity
        - co2_humidity_occupancy
      description: Demand-control sensors. Omit when the control strategy is unspecified.
      example: co2_humidity
    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. Include `indicative` on create for a
            non-binding offer.
          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: >-
            Financing journey state for this quote. Indicative quotes use
            `status: orientation` until an Opportunity is linked; presented
            quotes follow the main journey.
        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:
                      - central_heating_boiler
                  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
                  kind:
                    $ref: '#/components/schemas/CentralHeatingBoilerKind'
                  fuel:
                    $ref: '#/components/schemas/CentralHeatingBoilerFuel'
                  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.
                      SI declared layer resistance (Rd).
                    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:
                      - external_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.
                      SI declared layer resistance (Rd).
                    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:
                      - cavity_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.
                      SI declared layer resistance (Rd).
                    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.
                      SI declared layer resistance (Rd).
                    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.
                      SI declared layer resistance (Rd).
                    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.
                      SI declared layer resistance (Rd).
                    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:
                      - attic_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.
                      SI declared layer resistance (Rd).
                    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:
                      - ground_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.
                      SI declared layer resistance (Rd).
                    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:
                      - insulated_doors
                  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: Surface area in square meters (m²)
                    example: 2.4
                  uValue:
                    type: number
                    exclusiveMinimum: 0
                    description: Thermal transmittance (U-value) in W/m²K. Lower is better.
                    example: 1.2
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - insulated_frames
                  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: Surface area in square meters (m²)
                    example: 2.4
                  uValue:
                    type: number
                    exclusiveMinimum: 0
                    description: Thermal transmittance (U-value) in W/m²K. Lower is better.
                    example: 1.2
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - insulated_infill_panels
                  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: Surface area in square meters (m²)
                    example: 2.4
                  uValue:
                    type: number
                    exclusiveMinimum: 0
                    description: Thermal transmittance (U-value) in W/m²K. Lower is better.
                    example: 1.2
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - heat_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
                  storageMedium:
                    $ref: '#/components/schemas/HeatBatteryStorageMedium'
                  heatStorageCapacity:
                    type: number
                    minimum: 0
                    description: >-
                      Thermal storage capacity in watt-hours (Wh). Not
                      electrical battery capacity.
                    example: 10500
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - heat_pump_water_heater
                  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
                  storageVolume:
                    type: number
                    exclusiveMinimum: 0
                    description: Hot water storage volume in litres
                    example: 200
                  heatSource:
                    $ref: '#/components/schemas/HeatPumpWaterHeaterHeatSource'
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - solar_water_heater
                  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
                  collectorKind:
                    $ref: '#/components/schemas/SolarCollectorKind'
                  collectorApertureArea:
                    type: number
                    exclusiveMinimum: 0
                    description: >-
                      Collector aperture area in square meters (m²). Not
                      insulated surface area.
                    example: 4.2
                  storageVolume:
                    type: number
                    exclusiveMinimum: 0
                    description: Hot water storage volume in litres
                    example: 300
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - drain_water_heat_recovery
                  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
                  heatRecoveryEfficiency:
                    type: number
                    minimum: 1
                    maximum: 100
                    description: >-
                      CSA B55.1 / DIN 94678 drain-water heat recovery
                      effectiveness as a percent, not a 0–1 fraction.
                    example: 55
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - ventilation_heat_recovery
                  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
                  configuration:
                    $ref: '#/components/schemas/VentilationHeatRecoveryConfiguration'
                  heatRecoveryEfficiency:
                    type: number
                    minimum: 1
                    maximum: 100
                    description: >-
                      EN 13141-7 ventilation heat recovery temperature ratio as
                      a percent, not a 0–1 fraction.
                    example: 85
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - mechanical_ventilation
                  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
                  control:
                    $ref: '#/components/schemas/MechanicalVentilationControl'
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - ev_charger
                  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
                  nameplatePower:
                    type: number
                    minimum: 0
                    description: Rated charging power in watts (W)
                    example: 11000
                  phases:
                    type: string
                    enum:
                      - single
                      - three
                    description: 'Supply phases: single-phase or three-phase'
                    example: three
                  outlet:
                    type: string
                    enum:
                      - socket
                      - tethered
                    description: Socket (contactdoos) or tethered cable (vaste kabel)
                    example: socket
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - installation
                  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
                  belongsTo:
                    type: string
                    enum:
                      - battery
                      - pv
                      - heat_pump
                      - central_heating_boiler
                      - wall_insulation
                      - external_wall_insulation
                      - cavity_wall_insulation
                      - sloped_roof_insulation
                      - flat_roof_insulation
                      - floor_insulation
                      - attic_floor_insulation
                      - ground_insulation
                      - windows
                      - insulated_doors
                      - insulated_frames
                      - insulated_infill_panels
                      - heat_battery
                      - heat_pump_water_heater
                      - solar_water_heater
                      - drain_water_heat_recovery
                      - ventilation_heat_recovery
                      - mechanical_ventilation
                      - ev_charger
                    description: >-
                      Must differ from this line's own type. A sibling line of
                      that type is not required.
                    example: pv
                  lineItemId:
                    type: string
                    pattern: ^lit_[0-9A-HJKMNP-TV-Z]{26}$
                required:
                  - type
                  - totalInclTax
                  - lineItemId
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - other
                  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
                  belongsTo:
                    type: string
                    enum:
                      - battery
                      - pv
                      - heat_pump
                      - central_heating_boiler
                      - wall_insulation
                      - external_wall_insulation
                      - cavity_wall_insulation
                      - sloped_roof_insulation
                      - flat_roof_insulation
                      - floor_insulation
                      - attic_floor_insulation
                      - ground_insulation
                      - windows
                      - insulated_doors
                      - insulated_frames
                      - insulated_infill_panels
                      - heat_battery
                      - heat_pump_water_heater
                      - solar_water_heater
                      - drain_water_heat_recovery
                      - ventilation_heat_recovery
                      - mechanical_ventilation
                      - ev_charger
                      - installation
                    description: >-
                      Must differ from this line's own type. A sibling line of
                      that type is not required.
                    example: heat_pump
                  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 QuoteLineItems 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
        - createdAt
        - updatedAt
        - address
        - contact
        - currency
        - totalInclTax
        - financing
        - lineItems
      description: A quote for sustainability home improvements
    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
      description: >-
        Financing opportunity for this quote. Omitted while `terms` includes
        `indicative`.
    QuoteFinancingPhase:
      type: string
      enum:
        - new
        - engaged
        - in_progress
        - completed
        - canceled
      description: Coarse financing list bucket derived from journey status
      example: new
    QuoteFinancingStatus:
      type: string
      enum:
        - orientation
        - new_customer
        - engaged
        - application_started
        - documents_required
        - under_review
        - additional_documents_required
        - offer_received
        - invoice_pending
        - completed
        - financing_rejected
        - canceled_by_consumer
        - offer_canceled
        - no_contact
      description: >-
        Fine journey step of the consumer financing process from the merchant
        perspective
      example: under_review
    QuoteFinancingSubStatus:
      oneOf:
        - $ref: '#/components/schemas/QuoteFinancingSubStatusNone'
        - $ref: '#/components/schemas/QuoteFinancingSubStatusOnHold'
        - $ref: '#/components/schemas/QuoteFinancingSubStatusCanceled'
      discriminator:
        propertyName: type
        mapping:
          none: '#/components/schemas/QuoteFinancingSubStatusNone'
          on_hold: '#/components/schemas/QuoteFinancingSubStatusOnHold'
          canceled: '#/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.
      example: loan
    QuoteFinancingWaitingOn:
      type: string
      enum:
        - none
        - consumer
        - lender
        - merchant
        - prets
      description: Party that must act next on the headline financing path
      example: merchant
    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:
          type:
            - string
            - 'null'
          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
            - null
          description: >-
            Leftover named reason on parks created before the pause bit. Omitted
            on new parks; the why is the Case. Unrecognized leftover picklist
            values default-branch to `unknown` (API-0061).
          example: awaiting_documents
        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
      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`).
    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.
      example: dropped_pre_offer
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````

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