---
title: "Create, update, submit, or poll a delegated homeowners intake in a single operator-authenticated loop."
method: POST
path: "/api/agent/homeowners/quotes"
---

# Create, update, submit, or poll a delegated homeowners intake in a single operator-authenticated loop.

`POST /api/agent/homeowners/quotes`

## Request

- Base URL: `https://api.coveragecat.com`
- URL: `https://api.coveragecat.com/api/agent/homeowners/quotes`
- Auth: HTTP bearer

Use this endpoint as the primary operator-side enrichment loop for delegated homeowners purchase. Omit `uid` to create a new intake. Reuse the returned `uid` on every follow-up call. Start with the fullest intake patch you can assemble from approved operator-side context, and for any non-user-confirmed home value include matching `intake.home[].field_estimates` metadata. Treat `credit_check_authorized` as the real homeowner's explicit authorization for Coverage Cat's soft credit pull on the assembled application. If the operator already collected that exact consent separately, a complete first create call may include `credit_check_authorized: true`. Otherwise hold it back until the homeowner has reviewed the assembled application and explicitly authorized the soft credit pull. If the only remaining `missing_fields` entry is `credit_check_authorized`, render that one-time review step from your current application summary, then resend the same `uid` with `credit_check_authorized: true`. Do not break the intended second turn into a standalone current-policy-expiration question; if `policy_expire` is the remaining review gap, Coverage Cat can carry an estimated `policy_expire` value two months from today into that same review step. If `status` is `needs_more_info`, keep filling the returned `missing_fields` behind the scenes from your own systems first and only escalate to the human after approved context is exhausted. When Coverage Cat returns `homeowner_fix_issues_request_login_url`, share that safe sign-in request page if you want the homeowner to complete the remaining items in Coverage Cat's GUI. If `status` is `pending_quotes`, poll this same endpoint with the same `uid`. If `status` is `quoted`, summarize the returned offers and optionally share `homeowner_quotes_request_login_url`, where the homeowner can request their own login link before reviewing any unconfirmed estimated home answers and finishing bind in Coverage Cat's consumer portal. Set `sandbox: true` only on the first create call when you want mocked delegated homeowners test data instead of live customer email or carrier traffic.

## Headers

- `Coverage-Cat-API-Version` 'v1'
- `Idempotency-Key` string

## Request body

- HomeownersQuotesRequest
  - `intake` object: Partial homeowners intake patch containing the fullest currently known applicant and property facts you can assemble from approved operator-side context. On the first create call, `intake.home` must already identify whether each property is standard homeowners, condo, or landlord coverage: send both a non-rental `home_ownership` and a non-condo `property_type` for standard homeowners, `property_type: condo` for condo coverage, or `home_ownership: owned_rental` / a rented `rental_status` for landlord coverage. Coverage Cat rejects the first create call instead of guessing if that product-selection row is missing. This endpoint accepts partial follow-up patches after create; for a given intake's live requiredness, treat the returned `schema` and `missing_fields[].enum` as authoritative. Common eventual base requirements include `home_sqft`, `new_purchase`, the property address, `home_ownership`, and `property_type`, with state- and property-specific follow-ups returned in `missing_fields`. For any non-user-confirmed home value you include under `intake.home[]`, also include a matching `intake.home[].field_estimates[]` row using the same object shape returned in responses. Those rows should mirror the current field value, carry an opaque provenance `source`, set `confirmed_by_user: false`, and include `estimated_at`; Coverage Cat will persist that value as an estimate and send the homeowner back through review before final bind in the consumer portal. Treat `credit_check_authorized` as the real homeowner's explicit authorization for Coverage Cat's soft credit pull on the assembled application. If the operator already collected that exact consent separately, a complete first create call may include `credit_check_authorized: true`. Otherwise omit or keep `credit_check_authorized` false until the homeowner has reviewed the assembled application and explicitly consented to the soft credit pull. Do NOT derive homeowners dwelling replacement cost from purchase price or appraised value — that field must come from a Replacement Cost Estimator or be left for Coverage Cat's carrier-side estimator to fill. Do NOT send lender-side fields (note_rate, term_months, escrow flags); Coverage Cat prices homeowners premium directly and those inputs have no effect on the intake. Optional mortgage metadata such as `intake.home[].loans[].lender_name`, `loan_number`, `mortgagee_clause`, and `loan_effective_date` may be sent when available; partial loan rows are accepted. For enum/list fields, treat the `schema` and `missing_fields[].enum` returned by this endpoint as the authoritative allowed vocabulary for the current intake state.
    - `home` union: Initial product-selection row for the first create call. Send a single object or an array, and make sure each home row already distinguishes standard homeowners, condo, or landlord coverage. Later update or poll calls may omit `home` when unchanged.
      - union: Initial homeowners home row. Coverage Cat needs this row to distinguish standard homeowners, condo, or landlord coverage before it can assemble the rest of the application.
        - object: Standard homeowners coverage. Send both a non-rental home_ownership and a non-condo property_type.
          - `home_ownership` 'owned_primary' | 'owned_seasonal' | 'under_construction', required
          - `property_type` 'single_family' | 'duplex' | 'triplex' | 'quadplex' | 'apartment' | 'townhouse' | 'manufacture_or_mobile', required
        - object: Condo coverage. Send property_type: condo.
          - `property_type` 'condo', required
        - object: Landlord coverage. Send home_ownership: owned_rental.
          - `home_ownership` 'owned_rental', required
        - object: Landlord coverage. A rented rental_status also counts when home_ownership is not yet known.
          - `rental_status` 'room' | 'attached_unit' | 'detached_unit', required
      - ConsumerHomeownersInitialHome[]
        - union: Initial homeowners home row. Coverage Cat needs this row to distinguish standard homeowners, condo, or landlord coverage before it can assemble the rest of the application.
          - object: Standard homeowners coverage. Send both a non-rental home_ownership and a non-condo property_type.
            - `home_ownership` 'owned_primary' | 'owned_seasonal' | 'under_construction', required
            - `property_type` 'single_family' | 'duplex' | 'triplex' | 'quadplex' | 'apartment' | 'townhouse' | 'manufacture_or_mobile', required
          - object: Condo coverage. Send property_type: condo.
            - `property_type` 'condo', required
          - object: Landlord coverage. Send home_ownership: owned_rental.
            - `home_ownership` 'owned_rental', required
          - object: Landlord coverage. A rented rental_status also counts when home_ownership is not yet known.
            - `rental_status` 'room' | 'attached_unit' | 'detached_unit', required
  - `sandbox` boolean: Optional mocked-mode flag for delegated homeowners testing. Set this to true only when creating a brand-new delegated homeowners session. The sandbox flag sticks to that `uid`, reuses the real validation and one-time review/credit-consent checkpoint, skips live customer emails and carrier traffic, returns `pending_quotes` after the first successful submit, and returns mocked homeowners offers on a later poll of the same `uid`.
  - `uid` string: Existing delegated homeowners intake identifier. Omit to create a new intake.

## Response `200`

Current delegated homeowners state.

- HomeownersQuotesResponse
  - `agent_instructions` string[]
  - `homeowner_fix_issues_request_login_url` string, uri: 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.
  - `homeowner_portal_url` string, uri: 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`.
  - `homeowner_quotes_request_login_url` string, uri: 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.
  - `job_id` string: Stable delegated-homeowners async job identifier. Reuses the intake uid.
  - `known_summary` object: 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.
  - `missing_fields` HomeownersMissingField[]
    - `description` string
    - `enum` unknown[]
      - unknown
    - `field` string
    - `format` string
    - `label` string
    - `message` string
    - `path` string[]
    - `type` union
      - string
      - string[]
  - `offers` HomeownersOfferSummary[]
    - `address` object
    - `annual_price` number
    - `carrier` string
    - `coverage_summary` string
    - `deductible` number
    - `dwelling_coverage` number: 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.
    - `is_estimate` boolean
    - `personal_liability` number
    - `policy_subtype` string
    - `policy_subtype_display` string
    - `property_id` string: Stable per operator plus normalized property address; reuse it as a property correlation key, not an intake-row identifier.
    - `quote_number` string
    - `recommended` boolean
  - `offers_page_url` string, uri: Backwards-compatible alias for `homeowner_portal_url`.
  - `operator_dashboard_url` string, uri: Short-lived browser login link for the operator homeowners dashboard, usually prefiltered to this intake UID.
  - `poll_after_seconds` integer: Suggested minimum wait before polling again.
  - `poll_request` object: Structured POST request reference for polling the same delegated homeowners uid.
  - `response_summary` string
  - `sandbox` boolean: True when this delegated homeowners response is mocked sandbox data.
  - `schema` object
  - `status` 'needs_more_info' | 'pending_quotes' | 'quoted'
  - `status_endpoint` object: Structured status polling reference for the async job.
  - `status_url` string, uri: GET endpoint returning coarse non-PII status rows for this delegated homeowners request.
  - `uid` string

## Other responses

- `202`: Delegated homeowners intake accepted and submitted. Poll the status URL or resend the same uid until the response becomes quoted.
- `400`: Invalid intake patch or malformed request.
- `401`: Invalid or missing API key.
- `403`: The request used a shared key instead of an operator-issued key.
- `404`: Unknown delegated homeowners intake for this operator.
- `429`: Too many failed authentication attempts or delegated-agent requests. Honor the Retry-After header before retrying.

---

[API](https://skmtc.dev/coveragecat/apis/coverage-cat-delegated-insurance-purchase-apis.md) · [All operations](https://skmtc.dev/coveragecat/apis/coverage-cat-delegated-insurance-purchase-apis/llms.txt) · [OpenAPI document](https://skmtc.dev/coveragecat/apis/coverage-cat-delegated-insurance-purchase-apis/revisions/b80fe29790dc?raw)
