{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/coveragecat-com/json-schema/coveragecat-com-homeowners-quotes-response-schema.json",
  "title": "HomeownersQuotesResponse",
  "x-generated": "2026-11-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/coveragecat-com-agent-openapi.yml#/components/schemas/HomeownersQuotesResponse",
  "properties": {
    "agent_instructions": {
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "contact_preferences_disclosures": {
      "additionalProperties": false,
      "description": "Optional versioned service-contact disclosures for the phone number on file; no marketing consent and no purchase requirement.",
      "properties": {
        "service_call": {
          "additionalProperties": false,
          "description": "Optional service-call disclosure; show its text verbatim before recording a choice.",
          "properties": {
            "kind": {
              "const": "service_call",
              "type": "string"
            },
            "text": {
              "minLength": 1,
              "type": "string"
            },
            "text_hash": {
              "pattern": "^[a-f0-9]{64}$",
              "type": "string"
            },
            "version": {
              "minLength": 1,
              "type": "string"
            }
          },
          "required": [
            "kind",
            "version",
            "text",
            "text_hash"
          ],
          "type": "object"
        },
        "service_sms": {
          "additionalProperties": false,
          "description": "Optional service-text disclosure; show its text verbatim before recording a choice.",
          "properties": {
            "kind": {
              "const": "service_sms",
              "type": "string"
            },
            "text": {
              "minLength": 1,
              "type": "string"
            },
            "text_hash": {
              "pattern": "^[a-f0-9]{64}$",
              "type": "string"
            },
            "version": {
              "minLength": 1,
              "type": "string"
            }
          },
          "required": [
            "kind",
            "version",
            "text",
            "text_hash"
          ],
          "type": "object"
        }
      },
      "type": "object"
    },
    "credit_consent_disclosure": {
      "additionalProperties": false,
      "description": "Versioned canonical text that must be shown verbatim; echo version and text_hash with the user's response.",
      "properties": {
        "kind": {
          "const": "credit_report",
          "type": "string"
        },
        "text": {
          "minLength": 1,
          "type": "string"
        },
        "text_hash": {
          "pattern": "^[a-f0-9]{64}$",
          "type": "string"
        },
        "version": {
          "minLength": 1,
          "type": "string"
        }
      },
      "required": [
        "kind",
        "version",
        "text",
        "text_hash"
      ],
      "type": "object"
    },
    "homeowner_fix_issues_request_login_url": {
      "description": "Safe homeowner-facing sign-in request page for the fix-issues flow. Coverage Cat returns this while the delegated intake still needs more information and you want the homeowner to complete those remaining items in Coverage Cat's GUI.\n",
      "format": "uri",
      "type": "string"
    },
    "homeowner_portal_url": {
      "deprecated": true,
      "description": "Secure Coverage Cat consumer portal link for this intake. The homeowner uses this portal to review details, choose an offer, confirm any estimated home answers, and complete final bind. Treat this as a sensitive direct session link; if you need a safer pass-through URL, use `homeowner_quotes_request_login_url`.\n",
      "format": "uri",
      "type": "string"
    },
    "homeowner_quotes_request_login_url": {
      "description": "Safe homeowner-facing sign-in request page for the offers view. Share this with the homeowner when you need them to reach their offers page without handing over an operator or direct OTP login link.\n",
      "format": "uri",
      "type": "string"
    },
    "job_id": {
      "description": "Stable delegated-homeowners async job identifier. Reuses the intake uid.",
      "type": "string"
    },
    "known_summary": {
      "additionalProperties": true,
      "description": "Current delegated homeowners intake summary. This may include PII such as applicant name, applicant email, and full insured-property addresses. It may also include a `homes[].field_estimates[]` array per home listing values that were estimated by either the operator or Coverage Cat. Delegated quoting may proceed with these estimates, but unconfirmed estimated home fields are sent back through the homeowner review flow before final bind completes in Coverage Cat's consumer portal. Do not treat this object as safe-to-log telemetry.\n",
      "type": "object"
    },
    "missing_fields": {
      "items": {
        "$ref": "#/$defs/HomeownersMissingField"
      },
      "type": "array"
    },
    "offers": {
      "items": {
        "$ref": "#/$defs/HomeownersOfferSummary"
      },
      "type": "array"
    },
    "offers_page_url": {
      "deprecated": true,
      "description": "Backwards-compatible alias for `homeowner_portal_url`.",
      "format": "uri",
      "type": "string"
    },
    "operator_dashboard_url": {
      "description": "Short-lived browser login link for the operator homeowners dashboard, usually prefiltered to this intake UID.",
      "format": "uri",
      "type": "string"
    },
    "poll_after_seconds": {
      "description": "Suggested minimum wait before polling again.",
      "type": "integer"
    },
    "poll_request": {
      "additionalProperties": true,
      "description": "Structured POST request reference for polling the same delegated homeowners uid.",
      "type": "object"
    },
    "response_summary": {
      "type": "string"
    },
    "sandbox": {
      "description": "True when this delegated homeowners response is mocked sandbox data.",
      "type": "boolean"
    },
    "schema": {
      "additionalProperties": true,
      "type": "object"
    },
    "status": {
      "enum": [
        "needs_more_info",
        "pending_quotes",
        "quoted"
      ],
      "type": "string"
    },
    "status_endpoint": {
      "additionalProperties": true,
      "description": "Structured status polling reference for the async job.",
      "type": "object"
    },
    "status_url": {
      "description": "GET endpoint returning coarse non-PII status rows for this delegated homeowners request.",
      "format": "uri",
      "type": "string"
    },
    "uid": {
      "type": "string"
    }
  },
  "type": "object",
  "$defs": {
    "HomeownersMissingField": {
      "properties": {
        "description": {
          "type": "string"
        },
        "enum": {
          "items": {},
          "type": "array"
        },
        "field": {
          "type": "string"
        },
        "format": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "path": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "type": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          ]
        }
      },
      "type": "object"
    },
    "HomeownersOfferSummary": {
      "properties": {
        "address": {
          "additionalProperties": true,
          "type": "object"
        },
        "annual_price": {
          "type": "number"
        },
        "carrier": {
          "type": "string"
        },
        "coverage_summary": {
          "type": "string"
        },
        "deductible": {
          "type": "number"
        },
        "dwelling_coverage": {
          "description": "Coverage A / replacement cost as priced by the carrier. Derived from a Replacement Cost Estimator, not from purchase price or appraised value; do not substitute either of those in operator-side displays.\n",
          "type": "number"
        },
        "is_estimate": {
          "type": "boolean"
        },
        "personal_liability": {
          "type": "number"
        },
        "policy_subtype": {
          "type": "string"
        },
        "policy_subtype_display": {
          "type": "string"
        },
        "property_id": {
          "description": "Stable per operator plus normalized property address; reuse it as a property correlation key, not an intake-row identifier.",
          "type": "string"
        },
        "quote_number": {
          "type": "string"
        },
        "recommended": {
          "type": "boolean"
        }
      },
      "type": "object"
    }
  }
}