{"openapi":"3.1.0","info":{"description":"Public consumer APIs for personal shopper agents using Coverage Cat. Start here when the shopper's own AI assistant is gathering facts on their behalf and no Coverage Cat operator credential is present. Initial prefill and coarse status polling do not require a Coverage Cat operator API key or OAuth exchange. Continue the direct follow-up loop with the latest rotated `intake_access_token` returned by Coverage Cat, and after bind use `/api/intake/{uid}/policy` plus `/api/intake/{uid}/service` for homeowners or umbrella policy retrieval and policy-support follow-up. Homeowners quotes or carrier bind follow-up may take up to 48 hours, so poll the latest issue status and keep the registered customer email channel on file. During messy homeowners pre-bind follow-up, `GET /api/intake/{uid}/issues` can return `conversation.messages` plus `conversation.reply_pending`, and `PATCH /api/intake/{uid}` can answer those insurer or shopper follow-up questions in-thread with `message_reply` and `reply_to_message_id`. Coverage Cat does not collect first-party homeowners payment on this surface; carrier payment or signing links go directly to the customer's email on file. Consumer prefill/direct-follow-up writes accept optional `Idempotency-Key` headers for retry-safe replay. Use shopper data from this surface only for insurance purchase and policy-support work, not unrelated advertising or model training. See `/developers/data-handling` for the connector-specific notice and precedence rule for these surfaces. Delegated `/api/agent/*` purchase endpoints are for operator-authenticated back-office workflows and are intentionally omitted from this consumer surface.\n\nVersioning: send the optional `Coverage-Cat-API-Version: v1` header to pin the stable agent API contract explicitly.\n\nCoverage Cat keeps `v1` as the current stable agent API version by default. If a future version supersedes it, Coverage Cat will announce the change in the developer portal and emit `Deprecation` and `Sunset` headers on the retiring version for at least 90 days before removal.\n\nCoverage Cat also echoes `X-Skill-Version: 1.0.0` so clients can log which published runtime-contract version served the response.\n\nConsumer prefill/direct-follow-up writes and authenticated operator writes also accept an `Idempotency-Key` header. Coverage Cat replays the cached successful response for the same subject, path, and key for 24 hours, and rejects a changed payload under the same key.\n\nPublic consumer handoff endpoints live at `/api/consumer/umbrella/prefill`, `/api/consumer/homeowners/prefill`, `/api/consumer/status`, and the direct follow-up intake endpoints under `/api/intake/{uid}`, including `/policy` and `/service` for homeowners and umbrella aftercare.\n\nConnector-use notice: Coverage Cat publishes these consumer surfaces for insurance purchase and policy-support tasks. Do not use shopper data from them for unrelated advertising or model training. See `/developers/data-handling` for the connector-specific notice and the precedence rule that governs these surfaces if broader site policies conflict.\n\nRate-limited endpoints return `RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset`, and `RateLimit-Policy`. A `429` response also includes `Retry-After`.","title":"Coverage Cat Consumer Insurance Purchase APIs","version":"1.0.0","x-coverage-cat-consumer-openapi":"/api/consumer/openapi.yaml","x-coverage-cat-surface":"consumer","x-skill-version":"1.0.0"},"servers":[{"description":"Current request origin","url":"https://coveragecat.com"}],"paths":{"/api/consumer/homeowners/prefill":{"post":{"description":"Accepts the fullest consumer homeowners application you can assemble, prepares Coverage Cat's one-shot review and soft-credit consent checkpoint, and returns the handoff `uid`, a rotating `intake_access_token` for direct API follow-up, a short-lived `/intake?resume=...` browser fallback URL, and a coarse public `polling_token`. On a cold start, ask only for the shopper's full name, email, property address, and whether the property should be treated as standard homeowners, condo, or landlord coverage first. The initial `intake.home[0]` data must preserve that distinction by sending `home_ownership: owned_rental` or a rented `rental_status` for landlord coverage, `property_type: condo` for condo coverage, or both a non-rental `home_ownership` and a non-condo `property_type` for standard homeowners coverage. Then recover core shopper and occupancy facts such as date of birth, marital status, and owner-occupied vs new-purchase from user-controlled context before calling this endpoint. Until a later follow-up response shows quote progress, the application is not submitted yet. Coverage Cat can then estimate many reviewable home fields for the review card. Stay on the same consumer follow-up loop through long-lag quote polling, `/api/intake/{uid}/select`, `/api/intake/{uid}/bind`, and later `/api/intake/{uid}/policy` plus `/api/intake/{uid}/service`; do not switch to delegated operator endpoints just to keep the shopper moving. Homeowners quotes or carrier bind follow-up may take up to 48 hours, so keep polling and keep the registered customer email channel on file. Coverage Cat does not collect first-party homeowners payment in chat; any carrier payment or signing link goes directly to the customer's email on file. On the review turn, tell the shopper explicitly that Coverage Cat has not submitted the application yet, ask for any remaining items or the soft-credit Yes/No in plain English, and render gathered details plus remaining items as short labeled bullets or sections rather than a prose paragraph. If any shown value is estimated, mark each estimated bullet label or value with `*`, include the short note `* = estimated` once above and once below the list, and do not prefix every estimated line with `[Estimated]`. Successful direct follow-up responses rotate a fresh `intake_access_token`; always reuse the newest token you have.","operationId":"create_consumer_homeowners_prefill","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumerHomeownersPrefillRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumerPrefillResponse"}}},"description":"Consumer homeowners handoff prepared.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid request body.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many consumer handoff or public polling requests. Honor the Retry-After header before retrying.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Coverage Cat could not prepare the consumer homeowners handoff.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}}},"security":[],"summary":"Create a consumer-prefill homeowners handoff.","x-codeSamples":[{"label":"POST /api/consumer/homeowners/prefill","lang":"cURL","source":"curl -X POST https://coveragecat.com/api/consumer/homeowners/prefill \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Idempotency-Key: demo-post-api-consumer-homeowners-prefill\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"credit_consent_pending\": true,\n  \"intake\": {\n    \"email\": \"taylor@example.test\",\n    \"full_name\": \"Taylor Example\",\n    \"home\": {\n      \"city\": \"San Francisco\",\n      \"home_ownership\": \"owned_primary\",\n      \"property_type\": \"single_family\",\n      \"state\": \"CA\",\n      \"street\": \"123 Main St\",\n      \"zip\": \"94107\"\n    }\n  }\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"credit_consent_pending\": true,\n  \"intake\": {\n    \"email\": \"taylor@example.test\",\n    \"full_name\": \"Taylor Example\",\n    \"home\": {\n      \"city\": \"San Francisco\",\n      \"home_ownership\": \"owned_primary\",\n      \"property_type\": \"single_family\",\n      \"state\": \"CA\",\n      \"street\": \"123 Main St\",\n      \"zip\": \"94107\"\n    }\n  }\n};\n\nconst response = await fetch(\"https://coveragecat.com/api/consumer/homeowners/prefill\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Idempotency-Key\": \"demo-post-api-consumer-homeowners-prefill\",\n    \"Content-Type\": \"application/json\"\n  },\n  body: JSON.stringify(payload)\n});\nconst data = await response.json();\nconsole.log(data);"},{"label":"requests","lang":"Python","source":"import requests\n\npayload = {\n    \"credit_consent_pending\": True,\n    \"intake\": {\n    \"email\": \"taylor@example.test\",\n    \"full_name\": \"Taylor Example\",\n    \"home\": {\n    \"city\": \"San Francisco\",\n    \"home_ownership\": \"owned_primary\",\n    \"property_type\": \"single_family\",\n    \"state\": \"CA\",\n    \"street\": \"123 Main St\",\n    \"zip\": \"94107\"\n}\n}\n}\n\nresponse = requests.post(\n    \"https://coveragecat.com/api/consumer/homeowners/prefill\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Idempotency-Key\": \"demo-post-api-consumer-homeowners-prefill\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"consumer","x-openai-isConsequential":true}},"/api/consumer/status":{"get":{"description":"Returns non-PII public progress for a prior consumer handoff. Once quoted, `offer_summary` includes only quote count and premium highlights rather than direct session URLs.","operationId":"get_consumer_handoff_status","parameters":[{"description":"Opaque polling token returned by a consumer prefill response.","in":"query","name":"token","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/CoverageCatApiVersion"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumerStatusResponse"}}},"description":"Current consumer handoff status.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid or missing token parameter.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No matching consumer handoff exists.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"The polling token is stale or expired.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many consumer handoff or public polling requests. Honor the Retry-After header before retrying.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Coverage Cat could not read the consumer handoff status.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}}},"security":[],"summary":"Poll coarse public consumer handoff status.","x-codeSamples":[{"label":"GET /api/consumer/status","lang":"cURL","source":"curl -X GET https://coveragecat.com/api/consumer/status?token=polling-token \\\n  -H \"Coverage-Cat-API-Version: v1\""},{"label":"fetch","lang":"JavaScript","source":"const response = await fetch(\"https://coveragecat.com/api/consumer/status?token=polling-token\", {\n  method: \"GET\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\"\n  }\n});\nconst data = await response.json();\nconsole.log(data);"},{"label":"requests","lang":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://coveragecat.com/api/consumer/status?token=polling-token\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\"\n    },\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"consumer","x-openai-isConsequential":false}},"/api/consumer/umbrella/prefill":{"post":{"description":"Accepts the fullest consumer umbrella application or estimate you can assemble, stores it at Coverage Cat's one-shot review checkpoint, and returns the handoff `uid`, a rotating `intake_access_token` for direct API follow-up, a short-lived `resume_url` browser fallback, and a coarse public `polling_token`. On a cold start, call this before you question the shopper. On the initial consumer umbrella handoff, prefer sending only `intake`; add top-level `field_estimates` only when you are certain each `field` already matches a current umbrella review field path. Use canonical consumer umbrella keys such as `address.street`, `address.city`, `address.state`, `address.zip`, `license_state`, `license_number`, `approximate_asset_value` or `net_worth_numeric`, `desired_coverage_limit`, `required_coverage_e_limit`, and `vehicle_count` or `umbrella_details.motorized_vehicle_count` for umbrella counts. Avoid top-level `street`/`city`/`state`/`zip`, `drivers_license_state`, `drivers_license_number`, `net_worth`, or `desired_umbrella_liability_limit`. Do not send `vehicles` rows before submission. Use `vehicle_count` or `umbrella_details.motorized_vehicle_count` for the household vehicle count; actual vehicle details are collected later only if a selected offer requires them, such as a Markel bind follow-up. Optional consumer sandbox: set top-level `sandbox: true` only on this first prefill call when you want a fully synthetic shopper rehearsal. That same consumer sandbox uid can then keep using `/api/intake/{uid}/issues`, `/api/intake/{uid}`, `/api/intake/{uid}/select`, `/api/intake/{uid}/bind`, `/api/intake/{uid}/attach`, `/api/intake/{uid}/payment`, `/api/intake/{uid}/policy`, `/api/intake/{uid}/service`, and `/api/consumer/status` with synthetic quotes, uploads, payment credentials, policy outcomes, and service-request results only. Until a later follow-up response shows quote progress, the application is not submitted yet. Coverage Cat may answer with a staged `review_summary.review` plus a bundled `review_summary.next_question` so the assistant can collect the shopper-owned details it still needs, such as full name, email, phone, full address, birthday, marital status, driver's license state, driver's license number, net worth, and any corrections, in one turn instead of drifting into a field-by-field questionnaire. When that happens, tell the shopper explicitly that Coverage Cat has not submitted the application yet, ask for those remaining items in plain English, and render the gathered details plus remaining items as short labeled bullets or sections rather than a prose paragraph. If any shown value is estimated, mark each estimated bullet label or value with `*`, include the short note `* = estimated` once above and once below the list, and do not prefix every estimated line with `[Estimated]`. If the staged review shows a wrong estimated umbrella count from context, patch the canonical `umbrella_details.*` count field before you show the final review. Coverage Cat will not resume or expose a prior consumer umbrella draft based on email alone. Continue an existing consumer draft only through the issued `uid` plus the current hidden MCP session or latest `intake_access_token` handoff. If the shopper replies with a birthday in MM-DD-YYYY form, normalize it to YYYY-MM-DD before the follow-up patch. Successful direct follow-up responses rotate a fresh `intake_access_token`; always reuse the newest token you have. Credit consent is not required here — Coverage Cat collects the soft-credit pull authorization after the user chooses an offer.","operationId":"create_consumer_umbrella_prefill","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumerPrefillRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumerPrefillResponse"}}},"description":"Consumer umbrella handoff prepared.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid request body.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many consumer handoff or public polling requests. Honor the Retry-After header before retrying.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Coverage Cat could not prepare the consumer umbrella handoff.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}}},"security":[],"summary":"Create a consumer-prefill umbrella handoff.","x-codeSamples":[{"label":"POST /api/consumer/umbrella/prefill","lang":"cURL","source":"curl -X POST https://coveragecat.com/api/consumer/umbrella/prefill \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Idempotency-Key: demo-post-api-consumer-umbrella-prefill\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"credit_consent_pending\": true,\n  \"intake\": {\n    \"address\": {\n      \"city\": \"San Francisco\",\n      \"state\": \"CA\",\n      \"street\": \"123 Main St\",\n      \"zip\": \"94107\"\n    },\n    \"email\": \"taylor@example.test\",\n    \"full_name\": \"Taylor Example\",\n    \"license_number\": \"D1234567\",\n    \"license_state\": \"CA\",\n    \"vehicle_count\": 1\n  }\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"credit_consent_pending\": true,\n  \"intake\": {\n    \"address\": {\n      \"city\": \"San Francisco\",\n      \"state\": \"CA\",\n      \"street\": \"123 Main St\",\n      \"zip\": \"94107\"\n    },\n    \"email\": \"taylor@example.test\",\n    \"full_name\": \"Taylor Example\",\n    \"license_number\": \"D1234567\",\n    \"license_state\": \"CA\",\n    \"vehicle_count\": 1\n  }\n};\n\nconst response = await fetch(\"https://coveragecat.com/api/consumer/umbrella/prefill\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Idempotency-Key\": \"demo-post-api-consumer-umbrella-prefill\",\n    \"Content-Type\": \"application/json\"\n  },\n  body: JSON.stringify(payload)\n});\nconst data = await response.json();\nconsole.log(data);"},{"label":"requests","lang":"Python","source":"import requests\n\npayload = {\n    \"credit_consent_pending\": True,\n    \"intake\": {\n    \"address\": {\n    \"city\": \"San Francisco\",\n    \"state\": \"CA\",\n    \"street\": \"123 Main St\",\n    \"zip\": \"94107\"\n},\n    \"email\": \"taylor@example.test\",\n    \"full_name\": \"Taylor Example\",\n    \"license_number\": \"D1234567\",\n    \"license_state\": \"CA\",\n    \"vehicle_count\": 1\n}\n}\n\nresponse = requests.post(\n    \"https://coveragecat.com/api/consumer/umbrella/prefill\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Idempotency-Key\": \"demo-post-api-consumer-umbrella-prefill\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"consumer","x-openai-isConsequential":true}},"/api/intake/{uid}":{"patch":{"description":"Applies top-level intake edits for the consumer-prefill follow-up API. Authenticate with `Authorization: Bearer <intake_access_token>` from the latest consumer-prefill follow-up response. Use this after gathering context-backed answers; for homeowners, recover core shopper and occupancy facts from user-controlled context first, then let Coverage Cat carry estimated home-editor fields into one final review card. After a homeowners application is submitted, this same patch route can answer messy carrier or shopper follow-up in-thread with `message_reply`; when `GET /api/intake/{uid}/issues` shows `conversation.reply_pending`, echo the answer here and pass `reply_to_message_id` from that conversation payload when Coverage Cat returned one. For umbrella, use the staged review turn to send the bundled shopper-owned details and any corrections, then set `confirm_submission: true` on that same final turn. Use canonical umbrella count corrections such as `umbrella_details.motorized_vehicle_count`, never send `vehicles` rows on this pre-submit patch, and omit top-level `field_estimates` unless you are certain each field path matches a current umbrella review field. Until that final submit happens, say explicitly that the application is not submitted yet, ask for any remaining items in plain English, and present gathered details plus remaining items as short labeled bullets or sections rather than a prose paragraph. If any shown value is estimated, mark each estimated bullet label or value with `*`, include the short note `* = estimated` once above and once below the list, and do not prefix every estimated line with `[Estimated]`. If the staged review shows a wrong estimated umbrella count from context, patch the canonical `umbrella_details.*` count field before you show the final review. Coverage Cat will not resume or expose a prior consumer umbrella draft based on email alone. Continue an existing consumer draft only through the issued `uid` plus the current hidden MCP session or latest `intake_access_token` handoff. Normalize shopper birthdays from MM-DD-YYYY to YYYY-MM-DD before you send them. Reserve a single human interruption for the final review-and-submit step, keep umbrella credit consent out of this turn, and keep offer selection and post-choose bind continuation on the dedicated `/select`, `/bind`, and `/attach` routes.","operationId":"patch_first_party_intake","parameters":[{"$ref":"#/components/parameters/IntakeUid"},{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeAssistantPatchRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeAssistantResponse"}}},"description":"Patch accepted. The response either reflects the updated review checkpoint or the post-submit quote-progress state.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"Location":{"$ref":"#/components/headers/Location"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid patch or invalid confirm_submission value.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid, missing, or stale intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No intake exists for that uid.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many consumer intake follow-up requests. Honor the Retry-After header before retrying, and always retry with the newest intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}}},"security":[{"intake_access_token":[]}],"summary":"Patch and optionally submit a first-party homeowners or umbrella intake.","x-codeSamples":[{"label":"PATCH /api/intake/{uid}","lang":"cURL","source":"curl -X PATCH https://coveragecat.com/api/intake/consumer-intake-123 \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer intake-access-token\" \\\n  -H \"Idempotency-Key: demo-patch-api-intake-uid\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"confirm_submission\": true,\n  \"intake\": {\n    \"marital_status\": \"single\"\n  }\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"confirm_submission\": true,\n  \"intake\": {\n    \"marital_status\": \"single\"\n  }\n};\n\nconst response = await fetch(\"https://coveragecat.com/api/intake/consumer-intake-123\", {\n  method: \"PATCH\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer intake-access-token\",\n    \"Idempotency-Key\": \"demo-patch-api-intake-uid\",\n    \"Content-Type\": \"application/json\"\n  },\n  body: JSON.stringify(payload)\n});\nconst data = await response.json();\nconsole.log(data);"},{"label":"requests","lang":"Python","source":"import requests\n\npayload = {\n    \"confirm_submission\": True,\n    \"intake\": {\n    \"marital_status\": \"single\"\n}\n}\n\nresponse = requests.patch(\n    \"https://coveragecat.com/api/intake/consumer-intake-123\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer intake-access-token\",\n        \"Idempotency-Key\": \"demo-patch-api-intake-uid\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"consumer","x-openai-isConsequential":true}},"/api/intake/{uid}/attach":{"post":{"description":"Use this only after the consumer umbrella follow-up reports `documents_needed`. Authenticate with `Authorization: Bearer <intake_access_token>` from the latest consumer-prefill follow-up response. Coverage Cat accepts base64-encoded PDF or image uploads and reuses the same attachment validation and OCR flow as the delegated umbrella checkout. If both the home and auto declarations are already available, prefer one attach call with `attachments[]` so the shopper only approves one upload turn. If your runtime already has the files on disk or can stream raw bytes, prefer the binary `/api/intake/{uid}/attach-upload` fallback instead of hand-building base64. Once the declarations uploads are on file for Monoline or Markel, `documents_pending_review` usually advances to `payment_needed` with a secure `payment_url` within about 5-10 minutes while declarations verification continues in parallel.","operationId":"attach_consumer_umbrella_document","parameters":[{"$ref":"#/components/parameters/IntakeUid"},{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumerUmbrellaAttachRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeAssistantResponse"}}},"description":"Document attached successfully.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid attachment body or file type.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid, missing, or stale intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No intake exists for that uid.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Declarations uploads are not currently allowed for this intake state.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many consumer intake follow-up requests. Honor the Retry-After header before retrying, and always retry with the newest intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}}},"security":[{"intake_access_token":[]}],"summary":"Upload declarations for the consumer umbrella post-choose flow.","x-codeSamples":[{"label":"POST /api/intake/{uid}/attach","lang":"cURL","source":"curl -X POST https://coveragecat.com/api/intake/consumer-intake-123/attach \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer intake-access-token\" \\\n  -H \"Idempotency-Key: demo-post-api-intake-uid-attach\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"attachments\": [\n    {\n      \"content\": \"JVBERi0xLjQKJcTl8uXrp\",\n      \"filename\": \"home-dec.pdf\",\n      \"type\": \"declarations\"\n    },\n    {\n      \"content\": \"JVBERi0xLjQKJcTl8uXrp\",\n      \"filename\": \"auto-dec.pdf\",\n      \"type\": \"auto_declarations\"\n    }\n  ]\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"attachments\": [\n    {\n      \"content\": \"JVBERi0xLjQKJcTl8uXrp\",\n      \"filename\": \"home-dec.pdf\",\n      \"type\": \"declarations\"\n    },\n    {\n      \"content\": \"JVBERi0xLjQKJcTl8uXrp\",\n      \"filename\": \"auto-dec.pdf\",\n      \"type\": \"auto_declarations\"\n    }\n  ]\n};\n\nconst response = await fetch(\"https://coveragecat.com/api/intake/consumer-intake-123/attach\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer intake-access-token\",\n    \"Idempotency-Key\": \"demo-post-api-intake-uid-attach\",\n    \"Content-Type\": \"application/json\"\n  },\n  body: JSON.stringify(payload)\n});\nconst data = await response.json();\nconsole.log(data);"},{"label":"requests","lang":"Python","source":"import requests\n\npayload = {\n    \"attachments\": [{\n    \"content\": \"JVBERi0xLjQKJcTl8uXrp\",\n    \"filename\": \"home-dec.pdf\",\n    \"type\": \"declarations\"\n}, {\n    \"content\": \"JVBERi0xLjQKJcTl8uXrp\",\n    \"filename\": \"auto-dec.pdf\",\n    \"type\": \"auto_declarations\"\n}]\n}\n\nresponse = requests.post(\n    \"https://coveragecat.com/api/intake/consumer-intake-123/attach\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer intake-access-token\",\n        \"Idempotency-Key\": \"demo-post-api-intake-uid-attach\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"consumer","x-openai-isConsequential":true}},"/api/intake/{uid}/attach-upload":{"post":{"description":"Use this only after the consumer umbrella follow-up reports `documents_needed`. Authenticate with `Authorization: Bearer <intake_access_token>` from the latest consumer-prefill follow-up response. This raw-binary fallback is intended for local agents or runtimes that already have a PDF, PNG, JPG, or JPEG on disk and want to avoid inlining base64 in JSON. Send `type=declarations` for the home/renters/landlord declarations page or `type=auto_declarations` for the auto declarations page, set `filename` in the query string or `X-Client-Name`, and stream the file body as `application/octet-stream`. Uploading the file itself is usually quick once the documents are available; after Coverage Cat has the uploads on file, secure checkout is usually ready within about 5-10 minutes while declarations verification continues in parallel.","operationId":"attach_consumer_umbrella_document_binary","parameters":[{"$ref":"#/components/parameters/IntakeUid"},{"description":"Which declarations slot this uploaded file should fill.","in":"query","name":"type","required":true,"schema":{"enum":["declarations","auto_declarations"],"type":"string"}},{"description":"Optional original filename. If omitted, send the same value in the X-Client-Name header.","in":"query","name":"filename","required":false,"schema":{"type":"string"}},{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeAssistantResponse"}}},"description":"Document attached successfully.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid file type or upload parameters.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid, missing, or stale intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No intake exists for that uid.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Declarations uploads are not currently allowed for this intake state.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many consumer intake follow-up requests. Honor the Retry-After header before retrying, and always retry with the newest intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}}},"security":[{"intake_access_token":[]}],"summary":"Stream one declarations file without base64 for the consumer umbrella post-choose flow.","x-codeSamples":[{"label":"POST /api/intake/{uid}/attach-upload","lang":"cURL","source":"curl -X POST https://coveragecat.com/api/intake/consumer-intake-123/attach-upload \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer intake-access-token\" \\\n  -H \"Idempotency-Key: demo-post-api-intake-uid-attach-upload\""},{"label":"fetch","lang":"JavaScript","source":"const response = await fetch(\"https://coveragecat.com/api/intake/consumer-intake-123/attach-upload\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer intake-access-token\",\n    \"Idempotency-Key\": \"demo-post-api-intake-uid-attach-upload\"\n  }\n});\nconst data = await response.json();\nconsole.log(data);"},{"label":"requests","lang":"Python","source":"import requests\n\nresponse = requests.post(\n    \"https://coveragecat.com/api/intake/consumer-intake-123/attach-upload\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer intake-access-token\",\n        \"Idempotency-Key\": \"demo-post-api-intake-uid-attach-upload\"\n    },\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"consumer","x-openai-isConsequential":true}},"/api/intake/{uid}/bind":{"post":{"description":"Use this only after the current direct-follow-up payload says bind can continue. Authenticate with `Authorization: Bearer <intake_access_token>` from the latest consumer-prefill follow-up response. For umbrella, use this after `needs_more_info_to_bind` or `ready_to_finalize`, then send only the current bind-stage `next_question` fields inside `intake`. For homeowners, use this only after select returns `ready_to_finalize`, then send `preview_token` plus `bind_confirmed: true` to start carrier bind follow-up. Homeowners quotes or carrier bind follow-up may take up to 48 hours, and any carrier payment or signing link will be sent directly to the customer's email on file rather than a first-party payment endpoint.","operationId":"continue_consumer_bind","parameters":[{"$ref":"#/components/parameters/IntakeUid"},{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumerBindRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeAssistantResponse"}}},"description":"Updated consumer homeowners or umbrella bind follow-up state.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid bind patch.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid, missing, or stale intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No intake exists for that uid.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"The selected offer state is stale or the intake is not currently ready for bind continuation.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many consumer intake follow-up requests. Honor the Retry-After header before retrying, and always retry with the newest intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}}},"security":[{"intake_access_token":[]}],"summary":"Continue the consumer homeowners or umbrella bind follow-up in chat.","x-codeSamples":[{"label":"POST /api/intake/{uid}/bind","lang":"cURL","source":"curl -X POST https://coveragecat.com/api/intake/consumer-intake-123/bind \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer intake-access-token\" \\\n  -H \"Idempotency-Key: demo-post-api-intake-uid-bind\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"intake\": {\n    \"current_auto_coverages\": \"250_500_100\"\n  }\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"intake\": {\n    \"current_auto_coverages\": \"250_500_100\"\n  }\n};\n\nconst response = await fetch(\"https://coveragecat.com/api/intake/consumer-intake-123/bind\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer intake-access-token\",\n    \"Idempotency-Key\": \"demo-post-api-intake-uid-bind\",\n    \"Content-Type\": \"application/json\"\n  },\n  body: JSON.stringify(payload)\n});\nconst data = await response.json();\nconsole.log(data);"},{"label":"requests","lang":"Python","source":"import requests\n\npayload = {\n    \"intake\": {\n    \"current_auto_coverages\": \"250_500_100\"\n}\n}\n\nresponse = requests.post(\n    \"https://coveragecat.com/api/intake/consumer-intake-123/bind\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer intake-access-token\",\n        \"Idempotency-Key\": \"demo-post-api-intake-uid-bind\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"consumer","x-openai-isConsequential":true}},"/api/intake/{uid}/issues":{"get":{"description":"Returns a line-aware follow-up payload for a consumer-prefill homeowners or umbrella intake uid. Authenticate with `Authorization: Bearer <intake_access_token>` from the latest consumer-prefill follow-up response. Before submission, this exposes the one-time review checkpoint and any remaining missing or estimated values, and the agent should say explicitly that the application is not submitted yet before asking for anything else. Present gathered details, review facts, and remaining items as short labeled bullets or sections rather than a prose paragraph. If any shown value is estimated, mark each estimated bullet label or value with `*`, include the short note `* = estimated` once above and once below the list, and do not prefix every estimated line with `[Estimated]`. For homeowners, treat those missing fields as a behind-the-scenes enrichment backlog rather than a first-turn questionnaire, and keep recovering context-backed answers until the payload is ready for one review card. After submission, homeowners issue payloads can stay in `pending_quotes` or `waiting_on_carrier` for up to 48 hours; keep polling and use the returned notification-channel details to keep the registered customer email on file. When the homeowners carrier or chat thread needs another answer, Coverage Cat returns `conversation.messages`, `conversation.reply_pending`, and `conversation.reply_to_message_id` so the assistant can answer the follow-up in chat with the patch route instead of breaking out to delegated tools. Homeowners quoted offers include `selection_token`, the select step can return a `purchase_preview` plus `preview_token`, and any carrier payment or signing link will go directly to the customer's email on file rather than a first-party payment endpoint. For umbrella, Coverage Cat may keep `status: needs_more_info` while still returning a staged `review` preview plus a bundled `next_question` for the final shopper-owned review turn, so the assistant can collect details such as full name, email, phone, full address, birthday, marital status, driver's license state, driver's license number, net worth, and any corrections in one message rather than one field at a time. Once quotes are ready, `selection_guidance.same_reply_requirements` can preview small carrier-specific bind questions for a chosen offer so the shopper can answer those in the same selection reply instead of opening a second turn. If the staged review shows a wrong estimated umbrella count from context, patch the canonical `umbrella_details.*` count field before you show the final review. Coverage Cat will not resume or expose a prior consumer umbrella draft based on email alone. Continue an existing consumer draft only through the issued `uid` plus the current hidden MCP session or latest `intake_access_token` handoff. If the shopper gives a birthday in MM-DD-YYYY form, normalize it to YYYY-MM-DD before the patch call. After submission, umbrella issue payloads expose quote progress, structured umbrella offers with `selection_token`, detailed post-choose umbrella states, payment_setup details once secure Stripe collection is prepared, and a refreshed `intake_access_token` for the next direct follow-up call. For Monoline and Markel, once declarations uploads are on file, `documents_pending_review` usually advances to `payment_needed` with a secure `payment_url` within about 5-10 minutes while declarations verification continues in parallel.","operationId":"get_first_party_intake_issues","parameters":[{"$ref":"#/components/parameters/IntakeUid"},{"$ref":"#/components/parameters/CoverageCatApiVersion"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeAssistantResponse"}}},"description":"Current first-party assistant intake status.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unsupported line or invalid request.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid, missing, or stale intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No intake exists for that uid.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many consumer intake follow-up requests. Honor the Retry-After header before retrying, and always retry with the newest intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}}},"security":[{"intake_access_token":[]}],"summary":"Read first-party assistant blockers or quote progress for a homeowners or umbrella intake.","x-codeSamples":[{"label":"GET /api/intake/{uid}/issues","lang":"cURL","source":"curl -X GET https://coveragecat.com/api/intake/consumer-intake-123/issues \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer intake-access-token\""},{"label":"fetch","lang":"JavaScript","source":"const response = await fetch(\"https://coveragecat.com/api/intake/consumer-intake-123/issues\", {\n  method: \"GET\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer intake-access-token\"\n  }\n});\nconst data = await response.json();\nconsole.log(data);"},{"label":"requests","lang":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://coveragecat.com/api/intake/consumer-intake-123/issues\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer intake-access-token\"\n    },\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"consumer","x-openai-isConsequential":false}},"/api/intake/{uid}/payment":{"post":{"description":"Use this only after the consumer umbrella follow-up reports `payment_needed`. Authenticate with `Authorization: Bearer <intake_access_token>` from the latest consumer-prefill follow-up response. First call this endpoint with `payment_collection_requested: true` to request a secure Stripe SetupIntent session; this native step comes before handing the shopper to `payment_url`. If your runtime can render the registered secure payment UI, display it and wait for completion; do not collect card details through conversational text. Then call this same endpoint again with `setup_intent_id` and `payment_method_id` so Coverage Cat can place the reusable payment method on file. If the secure UI is unavailable or setup fails in chat, use the returned `payment_url` browser fallback and preserve the specific fallback reason. When `payment_needed` appears, the current checkout price shown came directly from the insurer while Coverage Cat is down to final declarations verification before charging the card. Never describe successful payment-method setup as premium collected or active insurance.","operationId":"collect_consumer_umbrella_payment_method","parameters":[{"$ref":"#/components/parameters/IntakeUid"},{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumerUmbrellaPaymentRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeAssistantResponse"}}},"description":"Payment collection is ready or the payment method is now on file.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid payment request.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid, missing, or stale intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No intake exists for that uid.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"The intake is not currently ready for payment collection or the submitted payment state is stale.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many consumer intake follow-up requests. Honor the Retry-After header before retrying, and always retry with the newest intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}}},"security":[{"intake_access_token":[]}],"summary":"Prepare or complete consumer umbrella payment collection in chat.","x-codeSamples":[{"label":"POST /api/intake/{uid}/payment","lang":"cURL","source":"curl -X POST https://coveragecat.com/api/intake/consumer-intake-123/payment \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer intake-access-token\" \\\n  -H \"Idempotency-Key: demo-post-api-intake-uid-payment\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"payment_collection_requested\": true\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"payment_collection_requested\": true\n};\n\nconst response = await fetch(\"https://coveragecat.com/api/intake/consumer-intake-123/payment\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer intake-access-token\",\n    \"Idempotency-Key\": \"demo-post-api-intake-uid-payment\",\n    \"Content-Type\": \"application/json\"\n  },\n  body: JSON.stringify(payload)\n});\nconst data = await response.json();\nconsole.log(data);"},{"label":"requests","lang":"Python","source":"import requests\n\npayload = {\n    \"payment_collection_requested\": True\n}\n\nresponse = requests.post(\n    \"https://coveragecat.com/api/intake/consumer-intake-123/payment\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer intake-access-token\",\n        \"Idempotency-Key\": \"demo-post-api-intake-uid-payment\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"consumer","x-openai-isConsequential":true}},"/api/intake/{uid}/policy":{"get":{"description":"Use this only after Coverage Cat reports a policy on file for the homeowners or umbrella direct-follow-up flow. Authenticate with `Authorization: Bearer <intake_access_token>` from the latest consumer-prefill or follow-up response. The response can include a bound or cancelled policy record, available policy documents, existing cancellation/refund/support request history, a browser next_action, and the support contact URL. In the consumer umbrella sandbox, every policy, document, and service-history value is synthetic test data only.","operationId":"get_consumer_policy","parameters":[{"$ref":"#/components/parameters/IntakeUid"},{"$ref":"#/components/parameters/CoverageCatApiVersion"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeAssistantResponse"}}},"description":"Current homeowners or umbrella policy record and servicing history.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unsupported line or invalid request.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid, missing, or stale intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No intake exists for that uid.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Coverage Cat does not have a homeowners or umbrella policy record on file for that uid yet.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many consumer intake follow-up requests. Honor the Retry-After header before retrying, and always retry with the newest intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}}},"security":[{"intake_access_token":[]}],"summary":"Read the current consumer homeowners or umbrella policy record and servicing history.","x-codeSamples":[{"label":"GET /api/intake/{uid}/policy","lang":"cURL","source":"curl -X GET https://coveragecat.com/api/intake/consumer-intake-123/policy \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer intake-access-token\""},{"label":"fetch","lang":"JavaScript","source":"const response = await fetch(\"https://coveragecat.com/api/intake/consumer-intake-123/policy\", {\n  method: \"GET\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer intake-access-token\"\n  }\n});\nconst data = await response.json();\nconsole.log(data);"},{"label":"requests","lang":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://coveragecat.com/api/intake/consumer-intake-123/policy\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer intake-access-token\"\n    },\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"consumer","x-openai-isConsequential":false}},"/api/intake/{uid}/select":{"post":{"description":"Use this only after `GET /api/intake/{uid}/issues` returns structured offers with `selection_token`. Authenticate with `Authorization: Bearer <intake_access_token>` from the latest consumer-prefill follow-up response. For homeowners, this stages the selected offer for one final bind approval and returns `purchase_preview`, `preview_token`, carrier-direct payment guidance, and the registered notification channel; it does not collect payment and does not start carrier bind follow-up yet. For umbrella, Coverage Cat collects consent for a soft credit check here, after the user chooses an offer. If an umbrella offer exposes `um_uim_selection`, send the shopper's include-or-decline choice here as `um_uim_election` on the first select call. If the umbrella quote payload exposed `selection_guidance.same_reply_requirements` for the chosen offer, send those answers under `intake` on this first select call so the shopper can finish selection in one reply. If Coverage Cat still returns `credit_consent_required` with a bind-stage `next_question`, ask for both the soft-credit-check consent and those bind details in one shopper-facing turn, then retry this same endpoint with both `credit_consent` and the bind-stage answers under `intake`. Successful responses return detailed post-choose states rather than collapsing back into a coarse quoted bucket. For homeowners, any carrier payment or signing link will later be sent directly to the customer's email on file. For Monoline and Markel umbrella offers, once declarations uploads are on file, `documents_pending_review` usually transitions to `payment_needed` with a secure `payment_url` within about 5-10 minutes while declarations verification continues in parallel.","operationId":"select_consumer_offer","parameters":[{"$ref":"#/components/parameters/IntakeUid"},{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumerSelectRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeAssistantResponse"}}},"description":"Selection accepted or the next bind-stage state is ready.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid selection request.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid, missing, or stale intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No intake exists for that uid.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"The selection token is stale, consent is missing, or the intake is not ready for selection.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many consumer intake follow-up requests. Honor the Retry-After header before retrying, and always retry with the newest intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}}},"security":[{"intake_access_token":[]}],"summary":"Select a quoted homeowners or umbrella offer on the consumer direct-follow-up path.","x-codeSamples":[{"label":"POST /api/intake/{uid}/select","lang":"cURL","source":"curl -X POST https://coveragecat.com/api/intake/consumer-intake-123/select \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer intake-access-token\" \\\n  -H \"Idempotency-Key: demo-post-api-intake-uid-select\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"credit_consent\": {\n    \"answer\": \"Yes\",\n    \"collected_from_user\": true\n  },\n  \"selection_confirmed\": true,\n  \"selection_token\": \"sel_demo\"\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"credit_consent\": {\n    \"answer\": \"Yes\",\n    \"collected_from_user\": true\n  },\n  \"selection_confirmed\": true,\n  \"selection_token\": \"sel_demo\"\n};\n\nconst response = await fetch(\"https://coveragecat.com/api/intake/consumer-intake-123/select\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer intake-access-token\",\n    \"Idempotency-Key\": \"demo-post-api-intake-uid-select\",\n    \"Content-Type\": \"application/json\"\n  },\n  body: JSON.stringify(payload)\n});\nconst data = await response.json();\nconsole.log(data);"},{"label":"requests","lang":"Python","source":"import requests\n\npayload = {\n    \"credit_consent\": {\n    \"answer\": \"Yes\",\n    \"collected_from_user\": True\n},\n    \"selection_confirmed\": True,\n    \"selection_token\": \"sel_demo\"\n}\n\nresponse = requests.post(\n    \"https://coveragecat.com/api/intake/consumer-intake-123/select\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer intake-access-token\",\n        \"Idempotency-Key\": \"demo-post-api-intake-uid-select\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"consumer","x-openai-isConsequential":true}},"/api/intake/{uid}/service":{"post":{"description":"Use this only after Coverage Cat reports a policy on file for the homeowners or umbrella direct-follow-up flow. Authenticate with `Authorization: Bearer <intake_access_token>` from the latest consumer-prefill or follow-up response. Send `request_type` plus `reason`, and send `requested_effective_date` for `policy_cancellation`. Omit `confirm_request` or send false to preview the consequences first. Send `confirm_request: true` only after the shopper approves opening the request. Opening a request does not itself confirm cancellation, a refund amount, or final issue resolution.","operationId":"request_consumer_policy_service","parameters":[{"$ref":"#/components/parameters/IntakeUid"},{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumerPolicyServiceRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeAssistantResponse"}}},"description":"Preview prepared or service request opened.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid service request body.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid, missing, or stale intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No intake exists for that uid.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Coverage Cat does not have a homeowners or umbrella policy record on file for that uid yet.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many consumer intake follow-up requests. Honor the Retry-After header before retrying, and always retry with the newest intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}}},"security":[{"intake_access_token":[]}],"summary":"Preview or open a consumer homeowners or umbrella policy-support request.","x-codeSamples":[{"label":"POST /api/intake/{uid}/service","lang":"cURL","source":"curl -X POST https://coveragecat.com/api/intake/consumer-intake-123/service \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer intake-access-token\" \\\n  -H \"Idempotency-Key: demo-post-api-intake-uid-service\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"details\": \"Please confirm whether any refund is pending.\",\n  \"reason\": \"Need billing help\",\n  \"request_type\": \"support_case\"\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"details\": \"Please confirm whether any refund is pending.\",\n  \"reason\": \"Need billing help\",\n  \"request_type\": \"support_case\"\n};\n\nconst response = await fetch(\"https://coveragecat.com/api/intake/consumer-intake-123/service\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer intake-access-token\",\n    \"Idempotency-Key\": \"demo-post-api-intake-uid-service\",\n    \"Content-Type\": \"application/json\"\n  },\n  body: JSON.stringify(payload)\n});\nconst data = await response.json();\nconsole.log(data);"},{"label":"requests","lang":"Python","source":"import requests\n\npayload = {\n    \"details\": \"Please confirm whether any refund is pending.\",\n    \"reason\": \"Need billing help\",\n    \"request_type\": \"support_case\"\n}\n\nresponse = requests.post(\n    \"https://coveragecat.com/api/intake/consumer-intake-123/service\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer intake-access-token\",\n        \"Idempotency-Key\": \"demo-post-api-intake-uid-service\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"consumer","x-openai-isConsequential":true}},"/api/intake/{uid}/verify-email":{"post":{"description":"Use when the latest issue status has verification.required: true. Authenticate with the intake_access_token. Send confirm_send: true only after shopper approval. Delivery uses only the application's email on file and never returns the login link. The shopper opens the email link; poll /api/intake/{uid}/issues until verification.required is false.","operationId":"verify_consumer_intake_email","parameters":[{"$ref":"#/components/parameters/IntakeUid"},{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"confirm_send":{"enum":[true],"type":"boolean"}},"required":["confirm_send"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeAssistantResponse"}}},"description":"Verification email sent, or verification is not required.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Shopper confirmation is missing or parameters are invalid.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid, missing, or stale intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No authorized intake was found.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Delivery failed or a recent email is still pending.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many consumer intake follow-up requests. Honor the Retry-After header before retrying, and always retry with the newest intake access token.","headers":{"Coverage-Cat-API-Version":{"$ref":"#/components/headers/CoverageCatApiVersion"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-Skill-Version":{"$ref":"#/components/headers/SkillVersion"}}}},"security":[{"intake_access_token":[]}],"summary":"Send a requested verification email to the shopper.","x-codeSamples":[{"label":"POST /api/intake/{uid}/verify-email","lang":"cURL","source":"curl -X POST https://coveragecat.com/api/intake/consumer-intake-123/verify-email \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer intake-access-token\" \\\n  -H \"Idempotency-Key: demo-post-api-intake-uid-verify-email\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"confirm_send\": true\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"confirm_send\": true\n};\n\nconst response = await fetch(\"https://coveragecat.com/api/intake/consumer-intake-123/verify-email\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer intake-access-token\",\n    \"Idempotency-Key\": \"demo-post-api-intake-uid-verify-email\",\n    \"Content-Type\": \"application/json\"\n  },\n  body: JSON.stringify(payload)\n});\nconst data = await response.json();\nconsole.log(data);"},{"label":"requests","lang":"Python","source":"import requests\n\npayload = {\n    \"confirm_send\": True\n}\n\nresponse = requests.post(\n    \"https://coveragecat.com/api/intake/consumer-intake-123/verify-email\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer intake-access-token\",\n        \"Idempotency-Key\": \"demo-post-api-intake-uid-verify-email\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"consumer","x-openai-isConsequential":true}}},"components":{"headers":{"CoverageCatApiVersion":{"description":"The Coverage Cat agent API version used to serve this response.","schema":{"enum":["v1"],"type":"string"}},"Location":{"description":"Absolute URL where the async delegated-homeowners job can be polled safely.","schema":{"format":"uri","type":"string"}},"RateLimitLimit":{"description":"Maximum requests allowed in the current window.","schema":{"type":"integer"}},"RateLimitPolicy":{"description":"Human-readable rate-limit policy for the current bucket.","schema":{"type":"string"}},"RateLimitRemaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"RateLimitReset":{"description":"Seconds until the current rate-limit window resets.","schema":{"type":"integer"}},"RetryAfter":{"description":"Seconds to wait before retrying a rate-limited request.","schema":{"type":"integer"}},"SkillVersion":{"description":"Published Coverage Cat runtime-contract version for this response surface.","schema":{"example":"1.0.0","type":"string"}}},"parameters":{"CoverageCatApiVersion":{"description":"Optional explicit Coverage Cat API version selector. Omit the header to use the current stable version.","in":"header","name":"Coverage-Cat-API-Version","required":false,"schema":{"default":"v1","enum":["v1"],"type":"string"}},"DashboardCursor":{"description":"Opaque cursor returned by a prior homeowners dashboard response.","in":"query","name":"cursor","required":false,"schema":{"type":"string"}},"IdempotencyKey":{"description":"Optional idempotency key for consumer or operator write requests. Coverage Cat replays the cached successful response for the same subject, path, and key for 24 hours, and rejects a changed payload under the same key.","in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string"}},"IntakeUid":{"description":"Coverage Cat intake uid returned by the consumer-prefill or intake creation step.","in":"path","name":"uid","required":true,"schema":{"type":"string"}}},"schemas":{"ToolBatchResult":{"properties":{"error":{"$ref":"#/components/schemas/ToolBatchError"},"id":{"type":"string"},"result":{"additionalProperties":true,"type":"object"},"status":{"enum":["ok","error"],"type":"string"},"tool":{"enum":["home_calculator","umbrella_calculator","auto_estimates","collision_and_comprehensive_coverage","file_a_claim","homeowners_agent_finder","umbrella_limit_planner","umbrella_underlying_limit_check","umbrella_bundle_comparison"],"type":"string"}},"type":"object"},"ConsumerPolicyServiceRequest":{"additionalProperties":false,"oneOf":[{"properties":{"request_type":{"const":"policy_cancellation","type":"string"}},"required":["request_type","reason","requested_effective_date"]},{"properties":{"request_type":{"const":"refund_request","type":"string"}},"required":["request_type","reason"]},{"properties":{"request_type":{"const":"support_case","type":"string"}},"required":["request_type","reason"]}],"properties":{"confirm_request":{"description":"Whether to open the request now. false, the default, returns a preview of the consequences without opening anything; send true only after the shopper approves that preview.","type":"boolean"},"details":{"description":"Shopper-approved context beyond the short reason, such as the specifics of a billing dispute, recorded on the request and its preview.","type":"string"},"reason":{"description":"Short shopper-approved reason for the request.","type":"string"},"request_type":{"description":"What the shopper wants done after purchase. `policy_cancellation` asks the carrier to end the policy on requested_effective_date; `refund_request` asks the carrier or billing provider to review a refund or outstanding balance without changing coverage; `support_case` opens a general support case for anything else.","enum":["policy_cancellation","refund_request","support_case"],"type":"string"},"requested_effective_date":{"description":"Day the shopper wants a cancellation to take effect; used only for policy_cancellation. It is a request: the carrier reviews it and may set a different date.","format":"date","type":"string"}},"required":["request_type","reason"],"type":"object"},"BindResponse":{"properties":{"agent_instructions":{"items":{"type":"string"},"type":"array"},"next_action":{"$ref":"#/components/schemas/NextAction"},"next_question":{"$ref":"#/components/schemas/NextQuestion"},"offers_url":{"description":"Secure link to the Coverage Cat offers page for this delegated session.","format":"uri","type":"string"},"payment_url":{"description":"Secure payment-setup link, returned only when Coverage Cat is ready to collect payment.","format":"uri","type":"string"},"post_choose":{"additionalProperties":true,"type":"object"},"required_upload_types":{"items":{"enum":["declarations","auto_declarations"],"type":"string"},"type":"array"},"response_summary":{"type":"string"},"selected_offer":{"$ref":"#/components/schemas/OfferSnapshot"},"status":{"enum":["needs_more_info_to_bind","ready_to_finalize","documents_needed","documents_pending_review","payment_needed","chosen"],"type":"string"},"uid":{"type":"string"}},"type":"object"},"UmbrellaFieldEstimate":{"description":"One umbrella field whose current value is still estimated rather than directly user-confirmed. Use `review_path` to mark the same value in the `review` JSON when rendering the single review page.\n","properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"confirmed_by_user":{"description":"Whether a later draft update re-sent the same value as a confirmed answer.","type":"boolean"},"estimated_at":{"format":"date-time","type":"string"},"field":{"description":"Intake dot-path for the estimated answer.","type":"string"},"review_path":{"description":"Path to the same value inside the `review` object.","items":{"type":"string"},"type":"array"},"source":{"description":"Provenance label for the estimate.","type":"string"},"value":{"description":"Current serialized intake value for the estimated field.","type":"string"}},"type":"object"},"DraftRequest":{"additionalProperties":false,"properties":{"field_estimates":{"description":"Optional provenance rows for non-user-confirmed answers you included in the same `intake` payload, including values sourced from CRM, documents, email threads, or heuristics. Omit this only for values the human has directly confirmed. Coverage Cat may also add its own `historical_mode` estimates when it safely auto-prefills common umbrella defaults.\n","items":{"$ref":"#/components/schemas/UmbrellaFieldEstimateInput"},"type":"array"},"intake":{"additionalProperties":true,"description":"Partial umbrella intake patch. Prefer sending the fullest context-backed application you can assemble from CRM, email threads, document drives, OCR'd policy files, and prior Coverage Cat sessions. Send only changed fields on follow-up calls instead of resubmitting the full application. Accepted aliases: `birthday -> age`, `spouse_birthday -> spouse_age`, `approximate_asset_value -> net_worth_numeric`. Send birthdays to Coverage Cat as ISO dates; if the shopper replies in normal US `MM-DD-YYYY` form, normalize it to ISO before sending. Do not send raw integer ages. Common keys include `full_name`, `email`, `phone_number`, `age`, `marital_status`, `license_status`, `license_state`, `license_number`, `address`, `occupation`, `line_of_work`, `net_worth_numeric`, `additional_drivers`, `household_members`, `auto_has_insurance`, `coverage_e_for_residences`, `has_citizens_home_coverage`, and `umbrella_details`.\n","type":"object"},"sandbox":{"description":"Optional mocked-mode flag for delegated umbrella testing. Set this to true only when creating a brand-new delegated umbrella session. The sandbox flag sticks to that `uid`, reuses the real draft/review validation loop, returns mocked quote responses, and does not send live customer emails or carrier traffic.\n","type":"boolean"},"uid":{"description":"Existing delegated umbrella session identifier. Omit to create a new one.","type":"string"}},"type":"object"},"ErrorResponse":{"additionalProperties":true,"properties":{"error":{"description":"Stable machine-readable error code. Workflow clients should branch mainly on invalid_request, not_found, conflict, rate_limited, stale_token, sandbox_unsupported, and internal_error.","enum":["invalid_request","not_found","conflict","rate_limited","idempotency_conflict","stale_token","sandbox_unsupported","credit_consent_required","internal_error","unauthorized","forbidden","key_expired","too_many_attempts","tool_not_found","tool_rate_limited","unsupported_api_version","invalid_email","invalid_otp","invalid_json","request_too_large","invalid_request_signature"],"type":"string"},"message":{"description":"Human-readable explanation of the failure.","type":"string"}},"type":"object"},"AgentOffer":{"properties":{"annual_price":{"type":"integer"},"carrier":{"type":"string"},"choice_guidance":{"type":"string"},"coverage_limit":{"type":"string"},"display_notes":{"items":{"type":"string"},"type":"array"},"is_estimate":{"type":"boolean"},"price_range":{"properties":{"high":{"type":"integer"},"low":{"type":"integer"}},"type":["object","null"]},"rank":{"type":"integer"},"recommended":{"type":"boolean"},"sample_policy_url":{"description":"Public specimen-policy PDF for this carrier in the shopper's state, when Coverage Cat has one on file.","format":"uri","type":"string"},"selection_token":{"type":"string"}},"type":"object"},"UmbrellaPendingField":{"properties":{"estimated":{"description":"Whether `suggested_values` currently includes a fallback prior for this field.","type":"boolean"},"field":{"type":"string"},"label":{"type":"string"},"number":{"type":"integer"}},"type":"object"},"NextQuestion":{"properties":{"display_note":{"type":"string"},"fields":{"items":{"$ref":"#/components/schemas/QuestionField"},"type":"array"},"item_index":{"type":["integer","null"]},"prompt":{"type":"string"},"schema":{"additionalProperties":true,"type":"object"},"scope":{"type":"string"},"title":{"type":"string"}},"type":"object"},"HomeownersDashboardResponse":{"properties":{"filters":{"additionalProperties":true,"type":"object"},"generated_at":{"type":"string"},"has_more":{"description":"True when another dashboard page is available with the returned next_cursor.","type":"boolean"},"next_cursor":{"description":"Opaque cursor to request the next dashboard page.","type":"string"},"operator_uid":{"type":"string"},"properties":{"items":{"$ref":"#/components/schemas/HomeownersPropertyStatusRow"},"type":"array"},"property_count":{"type":"integer"},"status_counts":{"additionalProperties":true,"type":"object"}},"type":"object"},"ConsumerOfferSummary":{"properties":{"cheapest_annual_premium":{"type":"number"},"cheapest_carrier":{"type":"string"},"quote_count":{"type":"integer"},"recommended_annual_premium":{"type":"number"},"recommended_carrier":{"type":"string"}},"type":"object"},"ConsumerUmbrellaBindRequest":{"additionalProperties":false,"properties":{"intake":{"additionalProperties":true,"description":"Minimal patch answering only the current bind-stage next_question fields.","type":"object"}},"type":"object"},"AgentKeyResponse":{"properties":{"api_key":{"type":"string"},"expires_at":{"format":"date-time","type":"string"},"key_prefix":{"type":"string"},"message":{"type":"string"},"status":{"type":"string"}},"type":"object"},"ConsumerStatusResponse":{"properties":{"detail_status":{"type":"string"},"line":{"enum":["umbrella","homeowners"],"type":"string"},"offer_summary":{"$ref":"#/components/schemas/ConsumerOfferSummary"},"response_summary":{"type":"string"},"sandbox":{"type":"boolean"},"status":{"enum":["in_review","review_pending","credit_consent_pending","quoted","bound","abandoned"],"type":"string"}},"type":"object"},"UmbrellaCalculatorRequest":{"additionalProperties":false,"properties":{"antique_vehicles":{"default":0,"type":"integer"},"at_fault_accidents":{"default":0,"type":"integer"},"auto_count":{"default":1,"type":"integer"},"drivers_over_70":{"default":0,"type":"integer"},"drivers_under_22":{"default":0,"type":"integer"},"jet_skis":{"default":0,"type":"integer"},"large_watercraft":{"default":0,"type":"integer"},"motorcycles":{"default":0,"type":"integer"},"moving_violations":{"default":0,"type":"integer"},"property_count":{"default":1,"type":"integer"},"zip":{"pattern":"^[0-9]{5}$","type":"string"}},"required":["zip"],"type":"object"},"QuoteRequest":{"additionalProperties":false,"properties":{"review_confirmed":{"const":true,"type":"boolean"},"review_token":{"description":"Token returned from the latest ready_for_review draft response.","type":"string"},"sandbox":{"description":"Optional mocked-mode flag. Once a delegated umbrella session is created with `sandbox: true`, later `quotes` and `status` calls may omit it because the uid stays sandbox-scoped.\n","type":"boolean"},"uid":{"type":"string"}},"required":["uid","review_token","review_confirmed"],"type":"object"},"NextAction":{"properties":{"display_note":{"type":"string"},"type":{"enum":["bind"],"type":"string"}},"type":"object"},"IntakeAssistantResponse":{"additionalProperties":false,"description":"REST consumer follow-up payload for the `/api/intake/{uid}` surface.","properties":{"post_choose":{"additionalProperties":true,"description":"Structured post-choose state after a quoted umbrella offer is selected.","type":"object"},"next_action":{"additionalProperties":true,"description":"A structured hint for the next allowed tool or endpoint action.","type":"object"},"required_upload_types":{"items":{"type":"string"},"type":"array"},"service_preview":{"additionalProperties":false,"properties":{"action_summary":{"type":"string"},"approval_required":{"type":"boolean"},"billing_effect":{"type":"string"},"carrier_conditions":{"items":{"type":"string"},"type":"array"},"coverage_effect":{"type":"string"},"details":{"type":"string"},"estimated_refund_status":{"enum":["not_applicable","unknown_pending_review"],"type":"string"},"reason":{"type":"string"},"request_type":{"enum":["policy_cancellation","refund_request","support_case"],"type":"string"},"requested_effective_date":{"format":"date","type":"string"},"status":{"enum":["preview"],"type":"string"},"uncertainty":{"type":"string"}},"type":"object"},"credit_consent_question":{"type":"string"},"detail_status":{"enum":["abandoned","blocked","bound","cancelled","chosen","credit_consent_pending","credit_consent_required","dev_success","documents_needed","documents_pending_review","email_sent","in_review","ineligible","info_requested","needs_more_info","needs_more_info_to_bind","no_policy","no_chosen_offer","no_quotes","no_selection","ok","payment_collection_ready","payment_needed","pending","pending_quotes","queued","quote_rate_limited","quoted","ready_for_review","ready_for_submission","ready_to_finalize","review_pending","service_preview","service_requested","sandbox_unsupported","stale_selection","verifying_documents","waiting_on_carrier","waiting_on_documents","waiting_on_payment"],"type":"string"},"expires_at":{"description":"When the current consumer handoff expires.","format":"date-time","type":"string"},"selected_offer":{"additionalProperties":false,"properties":{"address":{"additionalProperties":false,"properties":{"city":{"type":"string"},"state":{"type":"string"},"street":{"type":"string"},"zip":{"type":"string"}},"type":"object"},"annual_price":{"type":"number"},"carrier":{"type":"string"},"coverage_limit":{"type":"string"},"coverage_summary":{"additionalProperties":true,"description":"Homeowners or umbrella coverage details Coverage Cat can safely summarize.","type":"object"},"deductible":{"type":"number"},"dwelling_coverage":{"type":"number"},"is_estimate":{"type":"boolean"},"minimum_auto_limits":{"additionalProperties":true,"description":"Underlying auto-limit requirements for this offer.","type":"object"},"personal_liability":{"type":"number"},"policy_subtype":{"type":"string"},"policy_subtype_display":{"type":"string"},"price_range":{"additionalProperties":false,"properties":{"high":{"type":"number"},"low":{"type":"number"}},"type":"object"},"quote_number":{"type":"string"},"recommended":{"type":"boolean"},"sample_policy_url":{"format":"uri","type":"string"},"selection_guidance":{"additionalProperties":true,"description":"Offer-specific same-reply requirements and guidance.","type":"object"},"selection_token":{"type":"string"},"um_uim_selection":{"additionalProperties":true,"description":"Optional excess UM/UIM election details for this offer.","type":"object"}},"type":"object"},"schema":{"additionalProperties":true,"description":"Supplemental schema hints for homeowners review payloads.","type":"object"},"line":{"enum":["umbrella","homeowners"],"type":"string"},"pending_fields":{"description":"Structured missing-value hints for umbrella pre-submit review.","items":{"additionalProperties":true,"description":"Structured missing-value hints for umbrella pre-submit review.","type":"object"},"type":"array"},"uploaded_count":{"type":"integer"},"offers":{"items":{"additionalProperties":false,"properties":{"address":{"additionalProperties":false,"properties":{"city":{"type":"string"},"state":{"type":"string"},"street":{"type":"string"},"zip":{"type":"string"}},"type":"object"},"annual_price":{"type":"number"},"carrier":{"type":"string"},"coverage_limit":{"type":"string"},"coverage_summary":{"additionalProperties":true,"description":"Homeowners or umbrella coverage details Coverage Cat can safely summarize.","type":"object"},"deductible":{"type":"number"},"dwelling_coverage":{"type":"number"},"is_estimate":{"type":"boolean"},"minimum_auto_limits":{"additionalProperties":true,"description":"Underlying auto-limit requirements for this offer.","type":"object"},"personal_liability":{"type":"number"},"policy_subtype":{"type":"string"},"policy_subtype_display":{"type":"string"},"price_range":{"additionalProperties":false,"properties":{"high":{"type":"number"},"low":{"type":"number"}},"type":"object"},"quote_number":{"type":"string"},"recommended":{"type":"boolean"},"sample_policy_url":{"format":"uri","type":"string"},"selection_guidance":{"additionalProperties":true,"description":"Offer-specific same-reply requirements and guidance.","type":"object"},"selection_token":{"type":"string"},"um_uim_selection":{"additionalProperties":true,"description":"Optional excess UM/UIM election details for this offer.","type":"object"}},"type":"object"},"type":"array"},"response_summary":{"type":"string"},"payment_status":{"additionalProperties":false,"properties":{"channel":{"type":"string"},"customer_owned_inbox_required":{"type":"boolean"},"destination_hint":{"type":"string"},"payment_intent_id":{"type":"string"},"payment_method_saved_at":{"format":"date-time","type":"string"},"provider":{"type":"string"},"state":{"type":"string"},"timing":{"type":"string"}},"type":"object"},"poll_after_seconds":{"type":"integer"},"uid":{"description":"Coverage Cat intake uid for the current handoff.","type":"string"},"conversation":{"additionalProperties":false,"properties":{"messages":{"items":{"additionalProperties":false,"properties":{"author_label":{"type":"string"},"delivery_state":{"enum":["received","queued","sent"],"type":"string"},"direction":{"enum":["incoming","outgoing"],"type":"string"},"medium":{"enum":["email","app","sms"],"type":"string"},"message_id":{"type":"integer"},"subject":{"type":"string"},"text":{"type":"string"},"timestamp":{"format":"date-time","type":"string"}},"type":"object"},"type":"array"},"reply_pending":{"type":"boolean"},"reply_supported":{"type":"boolean"},"reply_to_message_id":{"type":"integer"},"reply_via":{"type":"string"}},"type":"object"},"compare_details_url":{"description":"Coverage Cat browser URL for compare-details follow-up.","format":"uri","type":"string"},"offer_summary":{"additionalProperties":false,"properties":{"cheapest_annual_premium":{"type":"number"},"cheapest_carrier":{"type":"string"},"quote_count":{"type":"integer"},"recommended_annual_premium":{"type":"number"},"recommended_carrier":{"type":"string"}},"type":"object"},"review_token":{"description":"Opaque review token for delegated review-style submit paths.","type":"string"},"status":{"enum":["abandoned","blocked","bound","cancelled","chosen","credit_consent_pending","credit_consent_required","dev_success","documents_needed","documents_pending_review","email_sent","in_review","ineligible","info_requested","needs_more_info","needs_more_info_to_bind","no_policy","no_chosen_offer","no_quotes","no_selection","ok","payment_collection_ready","payment_needed","pending","pending_quotes","queued","quote_rate_limited","quoted","ready_for_review","ready_for_submission","ready_to_finalize","review_pending","service_preview","service_requested","sandbox_unsupported","stale_selection","verifying_documents","waiting_on_carrier","waiting_on_documents","waiting_on_payment"],"type":"string"},"preview_token":{"description":"Opaque bind-preview token for the next homeowners bind confirmation.","type":"string"},"next_question":{"additionalProperties":true,"description":"The current shopper-owned question bundle or bind-stage question.","type":"object"},"review_estimates":{"items":{"additionalProperties":true,"description":"Coverage Cat estimate provenance metadata for reviewed values.","type":"object"},"type":"array"},"known_summary":{"additionalProperties":true,"description":"Structured facts Coverage Cat can safely summarize at this stage.","type":"object"},"user_action_required":{"type":"string"},"payment_collection_supported":{"type":"boolean"},"offers_url":{"description":"Coverage Cat browser URL for the selected offer or offer-tracking page.","format":"uri","type":"string"},"service_request":{"additionalProperties":false,"properties":{"action_summary":{"type":"string"},"billing_effect":{"type":"string"},"carrier_conditions":{"items":{"type":"string"},"type":"array"},"coverage_effect":{"type":"string"},"details":{"type":"string"},"estimated_refund_status":{"enum":["not_applicable","unknown_pending_review"],"type":"string"},"final_outcome":{"additionalProperties":true,"description":"Final carrier or billing outcome once Coverage Cat can confirm it.","type":"object"},"reason":{"type":"string"},"request_id":{"type":"string"},"request_type":{"enum":["policy_cancellation","refund_request","support_case"],"type":"string"},"requested_at":{"format":"date-time","type":"string"},"requested_effective_date":{"format":"date","type":"string"},"status":{"enum":["pending_review","completed"],"type":"string"},"uncertainty":{"type":"string"}},"type":"object"},"review":{"additionalProperties":true,"description":"Structured review card or selected-offer review block.","type":"object"},"sandbox":{"description":"True when Coverage Cat is returning consumer sandbox test data rather than a live shopper workflow.","type":"boolean"},"selection_guidance":{"additionalProperties":true,"description":"Guidance for completing an offer choice in one shopper-facing reply.","type":"object"},"documents":{"items":{"additionalProperties":false,"properties":{"content_type":{"type":"string"},"download_url":{"description":"Short-lived browser continuation for this policy document.","format":"uri","type":"string"},"label":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"}},"type":"object"},"type":"array"},"notification_channel":{"additionalProperties":false,"properties":{"customer_owned_inbox_required":{"type":"boolean"},"destination_hint":{"type":"string"},"events":{"items":{"type":"string"},"type":"array"},"registered":{"type":"boolean"},"role":{"type":"string"},"type":{"type":"string"}},"type":"object"},"support":{"additionalProperties":false,"properties":{"contact_url":{"description":"Coverage Cat support route for billing, cancellations, and quote follow-up.","format":"uri","type":"string"},"email":{"type":"string"},"phone":{"type":"string"}},"type":"object"},"purchase_preview":{"additionalProperties":false,"properties":{"action_summary":{"type":"string"},"approval_required":{"type":"boolean"},"carrier_conditions":{"items":{"type":"string"},"type":"array"},"coverage_summary":{"additionalProperties":true,"description":"Coverage details tied to the current previewed offer.","type":"object"},"effective_date":{"format":"date","type":"string"},"effective_period":{"additionalProperties":false,"properties":{"ends_on":{"format":"date","type":"string"},"starts_on":{"format":"date","type":"string"}},"type":"object"},"payment_timing":{"type":"string"},"price":{"additionalProperties":false,"properties":{"annual_premium":{"type":"number"},"currency":{"type":"string"},"payment_method":{"type":"string"}},"type":"object"},"status":{"type":"string"},"uncertainty":{"type":"string"}},"type":"object"},"uploaded":{"items":{"additionalProperties":false,"properties":{"filename":{"type":"string"},"type":{"type":"string"}},"type":"object"},"type":"array"},"payment_ui":{"additionalProperties":false,"properties":{"availability":{"enum":["ready","unknown","unsupported"],"type":"string"},"fallback_reason":{"type":"string"},"mode":{"type":"string"}},"type":"object"},"field_estimates":{"items":{"additionalProperties":true,"description":"Coverage Cat estimate provenance metadata for reviewed values.","type":"object"},"type":"array"},"policy":{"additionalProperties":false,"properties":{"cancellation_note":{"type":"string"},"cancelled_at":{"format":"date","type":"string"},"carrier":{"type":"string"},"confirmation_timestamp":{"format":"date-time","type":"string"},"coverage_summary":{"additionalProperties":true,"description":"Carrier-confirmed policy coverage details Coverage Cat can safely return.","type":"object"},"effective_date":{"format":"date","type":"string"},"effective_period":{"additionalProperties":false,"properties":{"ends_on":{"format":"date","type":"string"},"starts_on":{"format":"date","type":"string"}},"type":"object"},"policy_number":{"type":"string"},"state":{"enum":["bound","cancelled"],"type":"string"}},"type":"object"},"payment_setup":{"additionalProperties":false,"properties":{"environment":{"enum":["test","live"],"type":"string"},"payment_method_types":{"items":{"type":"string"},"type":"array"},"provider":{"type":"string"},"setup_intent_id":{"type":"string"},"usage":{"type":"string"}},"type":"object"},"agent_instructions":{"items":{"type":"string"},"type":"array"},"service_requests":{"items":{"additionalProperties":false,"properties":{"action_summary":{"type":"string"},"billing_effect":{"type":"string"},"carrier_conditions":{"items":{"type":"string"},"type":"array"},"coverage_effect":{"type":"string"},"details":{"type":"string"},"estimated_refund_status":{"enum":["not_applicable","unknown_pending_review"],"type":"string"},"final_outcome":{"additionalProperties":true,"description":"Final carrier or billing outcome once Coverage Cat can confirm it.","type":"object"},"reason":{"type":"string"},"request_id":{"type":"string"},"request_type":{"enum":["policy_cancellation","refund_request","support_case"],"type":"string"},"requested_at":{"format":"date-time","type":"string"},"requested_effective_date":{"format":"date","type":"string"},"status":{"enum":["pending_review","completed"],"type":"string"},"uncertainty":{"type":"string"}},"type":"object"},"type":"array"},"missing_fields":{"description":"Structured missing-value hints for homeowners pre-submit review.","items":{"additionalProperties":true,"description":"Structured missing-value hints for homeowners pre-submit review.","type":"object"},"type":"array"},"application_submitted":{"type":"boolean"},"payment_url":{"description":"Coverage Cat browser URL for secure payment fallback.","format":"uri","type":"string"},"review_items":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"display_value":{"type":"string"},"enum":{"items":{"type":"string"},"type":"array"},"label":{"type":"string"},"number":{"type":"integer"},"path":{"items":{"type":["string","integer"]},"type":"array"},"suggested_value":{}},"type":"object"},"type":"array"},"verification":{"additionalProperties":false,"properties":{"instructions":{"type":"string"},"request_tool":{"type":"string"},"required":{"type":"boolean"},"retry_after_seconds":{"minimum":0,"type":"integer"},"status":{"enum":["required","pending","verified","not_required"],"type":"string"},"status_tool":{"type":"string"}},"required":["status","required","retry_after_seconds","request_tool","status_tool","instructions"],"type":"object"},"intake_access_token":{"description":"Short-lived follow-up bearer. On REST, send it back as Authorization for the next `/api/intake/{uid}` call. On MCP, retry the same follow-up tool with this token only when your host cannot preserve Coverage Cat's hidden shopper session. Never display it to the shopper.","type":"string"}},"required":["uid","status"],"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"},"SelectRequest":{"additionalProperties":false,"properties":{"credit_consent":{"additionalProperties":false,"description":"Real-user consent for a soft credit check. Required before Coverage Cat can bind a chosen offer. If omitted or declined, Coverage Cat returns `credit_consent_required` with the prompt to render.\n","properties":{"answer":{"description":"Must be the real user's answer. Only Yes authorizes the pull.","enum":["Yes"],"type":"string"},"collected_from_user":{"const":true,"type":"boolean"}},"required":["answer","collected_from_user"],"type":"object"},"sandbox":{"description":"Optional sticky sandbox flag. Sandbox delegated umbrella sessions currently reject `select` with `sandbox_unsupported`; this field is accepted so a client carrying the same request envelope does not fail schema validation first.\n","type":"boolean"},"selection_confirmed":{"const":true,"type":"boolean"},"selection_token":{"type":"string"},"uid":{"type":"string"}},"required":["uid","selection_token","selection_confirmed"],"type":"object"},"QuoteResponse":{"properties":{"agent_instructions":{"items":{"type":"string"},"type":"array"},"compare_details_url":{"format":"uri","type":"string"},"field_estimates":{"description":"The estimated-field state that was present on the reviewed application. Use it to keep CRM estimate badges aligned with the review page the user approved.\n","items":{"$ref":"#/components/schemas/UmbrellaFieldEstimate"},"type":"array"},"offers":{"items":{"$ref":"#/components/schemas/AgentOffer"},"type":"array"},"response_summary":{"type":"string"},"sandbox":{"description":"True when the offer response is mocked sandbox data.","type":"boolean"},"selection_guidance":{"properties":{"default_selection_token":{"type":"string"},"display_note":{"type":"string"},"summary":{"type":"string"}},"type":"object"},"status":{"enum":["quoted","no_quotes"],"type":"string"},"uid":{"type":"string"}},"type":"object"},"AutoCalculatorRequest":{"additionalProperties":true,"properties":{"coverage":{"properties":{"collision_deductible":{"default":1000,"type":"integer"},"comprehensive_deductible":{"default":1000,"type":"integer"}},"type":"object"},"driver":{"properties":{"age":{"default":35,"type":"integer"},"gender":{"default":"N","type":"string"},"state":{"default":"CA","type":"string"},"zip":{"type":"string"}},"type":"object"},"repair_estimate":{"description":"Used by the file-a-claim calculator.","type":"integer"},"vehicle":{"properties":{"make":{"type":"string"},"model":{"type":"string"},"style":{"type":"string"},"submodel":{"type":"string"},"year":{"type":"integer"}},"type":"object"}},"type":"object"},"AgentKeyRequest":{"additionalProperties":false,"properties":{"email":{"format":"email","type":"string"}},"required":["email"],"type":"object"},"StatusResponse":{"properties":{"agent_instructions":{"items":{"type":"string"},"type":"array"},"compare_details_url":{"format":"uri","type":"string"},"credit_consent_question":{"description":"Present when Coverage Cat needs the real user's consent for a soft credit check before binding an offer, typically returned from `select` with `status: credit_consent_required`.\n","type":"string"},"fallback_step":{"$ref":"#/components/schemas/FallbackStep"},"field_estimates":{"items":{"$ref":"#/components/schemas/UmbrellaFieldEstimate"},"type":"array"},"known_summary":{"additionalProperties":true,"description":"Current delegated umbrella application summary. This may include PII such as applicant name, email, phone number, and address; do not treat it as safe-to-log telemetry.\n","type":"object"},"next_action":{"$ref":"#/components/schemas/NextAction"},"next_question":{"$ref":"#/components/schemas/NextQuestion"},"offers":{"items":{"$ref":"#/components/schemas/AgentOffer"},"type":"array"},"offers_url":{"description":"Secure link to the Coverage Cat offers page for this delegated session.","format":"uri","type":"string"},"payment_url":{"description":"Secure payment-setup link, returned only when Coverage Cat is ready to collect payment.","format":"uri","type":"string"},"policy":{"additionalProperties":true,"type":"object"},"poll_after_seconds":{"type":"integer"},"post_choose":{"additionalProperties":true,"type":"object"},"required_upload_types":{"items":{"enum":["declarations","auto_declarations"],"type":"string"},"type":"array"},"response_summary":{"type":"string"},"review":{"additionalProperties":true,"description":"Review JSON for the latest ready-for-review state.","type":"object"},"review_token":{"type":"string"},"sandbox":{"description":"True when this delegated umbrella status payload is mocked sandbox data.","type":"boolean"},"selected_offer":{"$ref":"#/components/schemas/OfferSnapshot"},"selection_guidance":{"additionalProperties":true,"type":"object"},"status":{"enum":["ineligible","needs_more_info","ready_for_review","quoted","no_quotes","needs_more_info_to_bind","ready_to_finalize","documents_needed","documents_pending_review","payment_needed","waiting_on_carrier","info_requested","bound","blocked"],"type":"string"},"uid":{"type":"string"}},"type":"object"},"ConsumerHomeownersBindRequest":{"additionalProperties":false,"properties":{"bind_confirmed":{"const":true,"description":"Must be true. Confirms the shopper approved the exact homeowners preview, including carrier-direct email delivery for any payment or signing links.","type":"boolean"},"preview_token":{"description":"Bind-preview token returned by the homeowners ready_to_finalize follow-up payload.","type":"string"}},"required":["preview_token","bind_confirmed"],"type":"object"},"HomeownersPropertyStatusRow":{"properties":{"field_estimates":{"description":"Field-level estimates Coverage Cat filled for this property. See `HomeownersFieldEstimate` for handling rules. Estimated values keep quoting moving, but unconfirmed estimated home fields must still be reviewed in the homeowner portal before final bind.\n","items":{"$ref":"#/components/schemas/HomeownersFieldEstimate"},"type":"array"},"fix_issues_email_available":{"description":"True when the operator may trigger Coverage Cat to send the homeowner a secure fix-issues email for this request UID.\n","type":"boolean"},"home_index":{"type":"integer"},"home_ownership":{"type":"string"},"homeowner_fix_issues_request_login_url":{"description":"Shareable homeowner sign-in request page for the fix-issues flow. Use this when the property is still in `needs_more_info` and the homeowner should complete the missing items in Coverage Cat's GUI.\n","format":"uri","type":"string"},"homeowner_quotes_request_login_url":{"description":"Shareable homeowner sign-in request page for the offers view. The homeowner still has to request their own login link by email, so this URL does not sign the operator or agent into the homeowner's private quotes page.\n","format":"uri","type":"string"},"inserted_at":{"type":"string"},"location":{"additionalProperties":true,"type":"object"},"new_purchase":{"type":"boolean"},"offers_page_available":{"type":"boolean"},"offers_published":{"description":"True once homeowners offers have been published to the homeowner's portal.","type":"boolean"},"property_id":{"description":"Stable per operator plus normalized property address; reuse it as a property correlation key, not an intake-row identifier.","type":"string"},"property_type":{"type":"string"},"request_uid":{"type":"string"},"status":{"enum":["needs_more_info","pending_quotes","quoted","quotes_published"],"type":"string"},"status_summary":{"description":"Coarse operator-facing summary for the current status, without exact missing-field or offer counts.","type":"string"},"submitted_at":{"type":"string"},"updated_at":{"type":"string"}},"type":"object"},"AgentKeyConfirmRequest":{"additionalProperties":false,"properties":{"assistant_email":{"description":"Optional mailbox to CC on the same customer-facing emails Coverage Cat sends during delegated umbrella checkout. This supplements, but does not replace, polling `status`.","format":"email","type":"string"},"code":{"deprecated":true,"description":"Legacy alias for `otp`. New integrations should send `otp`.","type":"string"},"contact_name":{"type":"string"},"email":{"format":"email","type":"string"},"organization_name":{"type":"string"},"otp":{"description":"6-digit confirmation code emailed to the operator.","type":"string"},"referral_source_name":{"description":"Customer-facing partner or referral-source name used in delegated-homeowners emails.","type":"string"},"use_case_description":{"type":"string"}},"required":["email","otp"],"type":"object"},"IntakeAssistantPatchRequest":{"additionalProperties":true,"description":"Partial intake patch for the first-party assistant follow-up API. Send user-confirmed edits directly as top-level intake fields. For homeowners after submission, this same patch call can also send `message_reply` to answer insurer or shopper follow-up already surfaced under `conversation.messages`, and `reply_to_message_id` pins the reply to one returned conversation message when Coverage Cat marks `conversation.reply_pending`. For umbrella intakes, top-level field_estimates[] rows may accompany inferred values when you are certain each field path matches a current umbrella review field. Use canonical umbrella count corrections such as `umbrella_details.motorized_vehicle_count` and never send `vehicles` rows on this pre-submit patch. `current_auto_coverages` is a banded enum, not free text: send one of `unsure` for I'm not sure; `500k/1m` for $500k/$1 Million/$100k or higher; `500k/500k` for $500k/$500k/$100k or $500k CSL; `300k/300k` for $250k/$500k/$100k or $300k/$300k/$100k or $300k CSL; `100k/300k` for $100k/$300k/$100k or lower. Coverage Cat rejects the shopper's raw limits, so translate them into the strongest band those limits fully satisfy. Underlying auto limits gate umbrella eligibility, so reserve `unsure` for limits the shopper genuinely does not know rather than using it to skip the translation. Normalize shopper birthdays from MM-DD-YYYY to YYYY-MM-DD before sending them. Set confirm_submission: true on the final one-time review turn to submit and start quote generation.","properties":{"confirm_submission":{"description":"Set to true on the single human review turn once the user has reviewed the application and wants Coverage Cat to submit now. Homeowners also require credit_check_authorized: true on that same final turn; umbrella consent for a soft credit check is collected later at select.","type":"boolean"},"current_auto_coverages":{"description":"Which band the shopper's current underlying auto liability limits fall into: `500k/1m` covers $500k/$1 Million/$100k or higher; `500k/500k` covers $500k/$500k/$100k or $500k CSL; `300k/300k` covers $250k/$500k/$100k or $300k/$300k/$100k or $300k CSL; `100k/300k` covers $100k/$300k/$100k or lower. Pick the strongest band the shopper's actual limits fully satisfy. Underlying auto limits gate umbrella eligibility, so use `unsure` only when the shopper genuinely does not know their limits.","enum":["unsure","500k/1m","500k/500k","300k/300k","100k/300k"],"type":"string"},"field_estimates":{"description":"Umbrella-only estimate metadata for inferred values included in the same patch. Omit it unless you are certain each field path matches a current umbrella review field. Homeowners estimate provenance stays under intake.home[].field_estimates[].","items":{"$ref":"#/components/schemas/UmbrellaFieldEstimateInput"},"type":"array"},"message_reply":{"description":"Homeowners post-submit only. Send the reply text Coverage Cat should deliver in-thread when the latest issues payload shows `conversation.reply_pending`, such as answering a carrier underwriting question.","type":"string"},"reply_to_message_id":{"description":"Optional homeowners post-submit target from `conversation.messages[].message_id`. Use it when Coverage Cat returned a specific follow-up message to answer in-thread.","type":"integer"}},"type":"object"},"ConsumerUmbrellaAttachRequest":{"additionalProperties":false,"oneOf":[{"required":["type","filename","content"]},{"required":["attachments"]}],"properties":{"attachments":{"description":"Upload multiple declarations in one call when both files are already available.","items":{"additionalProperties":false,"properties":{"content":{"description":"Base64-encoded file bytes.","type":"string"},"filename":{"type":"string"},"type":{"enum":["declarations","auto_declarations"],"type":"string"}},"required":["type","filename","content"],"type":"object"},"minItems":1,"type":"array"},"content":{"description":"Base64-encoded file bytes.","type":"string"},"filename":{"type":"string"},"type":{"enum":["declarations","auto_declarations"],"type":"string"}},"type":"object"},"ConsumerBindRequest":{"oneOf":[{"$ref":"#/components/schemas/ConsumerUmbrellaBindRequest"},{"$ref":"#/components/schemas/ConsumerHomeownersBindRequest"}]},"ConsumerUmbrellaPaymentRequest":{"oneOf":[{"additionalProperties":false,"properties":{"payment_collection_requested":{"const":true,"description":"Starts secure card collection by asking Coverage Cat to prepare a Stripe SetupIntent for hosted card entry. Send it on the first payment call, without setup_intent_id or payment_method_id.","type":"boolean"}},"required":["payment_collection_requested"],"type":"object"},{"additionalProperties":false,"properties":{"payment_method_id":{"description":"Reusable Stripe PaymentMethod id produced by the secure client-side setup confirmation.","type":"string"},"setup_intent_id":{"description":"SetupIntent id returned by the earlier payment_collection_ready response.","type":"string"}},"required":["setup_intent_id","payment_method_id"],"type":"object"}]},"HomeownersQuotesResponse":{"properties":{"agent_instructions":{"items":{"type":"string"},"type":"array"},"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":"#/components/schemas/HomeownersMissingField"},"type":"array"},"offers":{"items":{"$ref":"#/components/schemas/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"},"ToolBatchRequest":{"additionalProperties":false,"properties":{"operations":{"items":{"$ref":"#/components/schemas/ToolBatchOperation"},"maxItems":25,"minItems":1,"type":"array"}},"required":["operations"],"type":"object"},"ToolBatchError":{"properties":{"error":{"type":"string"},"message":{"type":"string"},"reason":{"type":"string"}},"type":"object"},"HomeownersAgentFinderRequest":{"additionalProperties":false,"properties":{"limit":{"default":25,"type":"integer"},"lines":{"description":"Homeowners, dwelling_fire, condominium, renters, mobile_home, personal_lines, property_and_casualty, or surplus_lines.","items":{"type":"string"},"type":"array"},"zip":{"pattern":"^[0-9]{5}$","type":"string"}},"required":["zip","lines"],"type":"object"},"ConsumerSelectRequest":{"oneOf":[{"$ref":"#/components/schemas/ConsumerUmbrellaSelectRequest"},{"$ref":"#/components/schemas/ConsumerHomeownersSelectRequest"}]},"ConsumerUmbrellaSelectRequest":{"additionalProperties":false,"properties":{"credit_consent":{"additionalProperties":false,"description":"Real-user consent for a soft credit check, collected on the selection turn when Coverage Cat asks for it.","properties":{"answer":{"description":"Records the shopper's own reply agreeing to Coverage Cat's credit_consent_question. Send it only after the shopper agrees in their own words.","enum":["Yes"],"type":"string"},"collected_from_user":{"const":true,"description":"Attests that the shopper personally answered the credit consent question in this conversation, rather than the agent assuming their consent.","type":"boolean"}},"required":["answer","collected_from_user"],"type":"object"},"intake":{"additionalProperties":true,"description":"Optional bind-stage answers for the current next_question. Use this when Coverage Cat asked for consent for a soft credit check and bind details in the same shopper-facing turn, so you can retry select with both the consent and the answers together.","type":"object"},"selection_confirmed":{"const":true,"type":"boolean"},"selection_token":{"description":"Offer-selection token returned by the quoted umbrella follow-up payload.","type":"string"},"um_uim_election":{"description":"Optional. Use this when the shopper wants to include or decline the offer's $1M excess UM/UIM option in the same selection reply.","oneOf":[{"type":"boolean"},{"enum":["include","decline"],"type":"string"},{"additionalProperties":false,"properties":{"elected":{"type":"boolean"}},"required":["elected"],"type":"object"}]}},"required":["selection_token","selection_confirmed"],"type":"object"},"QuestionField":{"properties":{"description":{"type":"string"},"enum":{"items":{},"type":"array"},"format":{"type":"string"},"label":{"type":"string"},"path":{"items":{"type":"string"},"type":"array"},"type":{"type":"string"}},"type":"object"},"DraftResponse":{"properties":{"agent_instructions":{"items":{"type":"string"},"type":"array"},"field_estimates":{"items":{"$ref":"#/components/schemas/UmbrellaFieldEstimate"},"type":"array"},"known_summary":{"additionalProperties":true,"description":"Current delegated umbrella application summary. This may include PII such as applicant name, email, phone number, and address; do not treat it as safe-to-log telemetry.\n","type":"object"},"next_question":{"$ref":"#/components/schemas/NextQuestion"},"pending_fields":{"description":"Only present while Coverage Cat still needs more data before a final review page can be shown. Use this behind the scenes with operator-side context search; the intended UX is that the human only sees `ready_for_review`.\n","items":{"$ref":"#/components/schemas/UmbrellaPendingField"},"type":"array"},"response_summary":{"type":"string"},"review":{"additionalProperties":true,"description":"Full review JSON to render only when `status` is `ready_for_review`. Render it directly, mark every `field_estimates[].review_path` entry with `*`, include the short note `* = estimated` once above and once below the review list, and do not prefix every estimated line with `[Estimated]`. Credit consent is not asked here; Coverage Cat collects it at `select`.\n","type":"object"},"review_token":{"description":"Token bound to the latest review JSON. Refresh it after every draft edit before calling quotes.","type":"string"},"sandbox":{"description":"True when this delegated umbrella session is running in mocked sandbox mode.","type":"boolean"},"status":{"enum":["needs_more_info","ready_for_review","ineligible"],"type":"string"},"suggested_values":{"additionalProperties":true,"description":"Historical-mode fallback priors for unresolved fields. Treat these as hints for operator-side enrichment, not as substitutes for actual user or document-backed answers.\n","type":"object"},"uid":{"type":"string"}},"type":"object"},"SelectResponse":{"properties":{"agent_instructions":{"items":{"type":"string"},"type":"array"},"credit_consent_question":{"description":"Present only when `status` is `credit_consent_required`. The real user's affirmative Yes must be collected and passed back on the next `select` call as `credit_consent`.\n","type":"string"},"next_question":{"$ref":"#/components/schemas/NextQuestion"},"offers_url":{"description":"Secure link to the Coverage Cat offers page for this delegated session.","format":"uri","type":"string"},"payment_url":{"description":"Secure payment-setup link, returned only when Coverage Cat is ready to collect payment.","format":"uri","type":"string"},"post_choose":{"additionalProperties":true,"type":"object"},"required_upload_types":{"items":{"enum":["declarations","auto_declarations"],"type":"string"},"type":"array"},"response_summary":{"type":"string"},"selected_offer":{"$ref":"#/components/schemas/OfferSnapshot"},"status":{"enum":["credit_consent_required","needs_more_info_to_bind","documents_needed","documents_pending_review","payment_needed","chosen"],"type":"string"},"uid":{"type":"string"}},"type":"object"},"ConsumerPrefillRequest":{"additionalProperties":false,"properties":{"credit_consent_pending":{"const":true,"description":"Must be true. Signals that the user has not yet been shown the review page. Homeowners handoffs collect consent for a soft credit check on that review turn; umbrella handoffs defer credit consent until the user chooses an offer at `select`.","type":"boolean"},"field_estimates":{"description":"Optional estimate metadata for values that are defensible but not yet directly confirmed by the user. On the initial consumer umbrella handoff, prefer sending only `intake`; add top-level `field_estimates` only when you are certain each `field` already matches a current umbrella review field path.","items":{"additionalProperties":true,"type":"object"},"type":"array"},"intake":{"additionalProperties":true,"description":"Fullest currently known consumer application patch assembled from the user's own context before any piecemeal follow-up. Use canonical consumer umbrella keys such as `address.street`, `address.city`, `address.state`, `address.zip`, `license_state`, `license_number`, `approximate_asset_value` or `net_worth_numeric`, `desired_coverage_limit`, `required_coverage_e_limit`, and `vehicle_count` or `umbrella_details.motorized_vehicle_count` for umbrella counts. Avoid top-level `street`/`city`/`state`/`zip`, `drivers_license_state`, `drivers_license_number`, `net_worth`, or `desired_umbrella_liability_limit`. Do not send `vehicles` rows before submission. Use `vehicle_count` or `umbrella_details.motorized_vehicle_count` for the household vehicle count; actual vehicle details are collected later only if a selected offer requires them, such as a Markel bind follow-up. `current_auto_coverages` is a banded enum, not free text: send one of `unsure` for I'm not sure; `500k/1m` for $500k/$1 Million/$100k or higher; `500k/500k` for $500k/$500k/$100k or $500k CSL; `300k/300k` for $250k/$500k/$100k or $300k/$300k/$100k or $300k CSL; `100k/300k` for $100k/$300k/$100k or lower. Coverage Cat rejects the shopper's raw limits, so translate them into the strongest band those limits fully satisfy. Underlying auto limits gate umbrella eligibility, so reserve `unsure` for limits the shopper genuinely does not know rather than using it to skip the translation.","properties":{"current_auto_coverages":{"description":"Which band the shopper's current underlying auto liability limits fall into: `500k/1m` covers $500k/$1 Million/$100k or higher; `500k/500k` covers $500k/$500k/$100k or $500k CSL; `300k/300k` covers $250k/$500k/$100k or $300k/$300k/$100k or $300k CSL; `100k/300k` covers $100k/$300k/$100k or lower. Pick the strongest band the shopper's actual limits fully satisfy. Underlying auto limits gate umbrella eligibility, so use `unsure` only when the shopper genuinely does not know their limits.","enum":["unsure","500k/1m","500k/500k","300k/300k","100k/300k"],"type":"string"}},"type":"object"},"sandbox":{"description":"Optional. Set true only on the first consumer umbrella prefill call when you want a fully synthetic shopper rehearsal. That same consumer sandbox uid can then continue through issues, patch, select, bind, attach, payment, and status with synthetic quotes, uploads, payment credentials, and policy results.","type":"boolean"}},"required":["intake","credit_consent_pending"],"type":"object"},"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"},"FallbackStep":{"properties":{"display_note":{"type":"string"},"type":{"enum":["dashboard"],"type":"string"},"url":{"format":"uri","type":"string"}},"type":"object"},"ConsumerUmbrellaServiceRequest":{"additionalProperties":false,"oneOf":[{"properties":{"request_type":{"const":"policy_cancellation","type":"string"}},"required":["request_type","reason","requested_effective_date"]},{"properties":{"request_type":{"const":"refund_request","type":"string"}},"required":["request_type","reason"]},{"properties":{"request_type":{"const":"support_case","type":"string"}},"required":["request_type","reason"]}],"properties":{"confirm_request":{"description":"Whether to open the request now. false, the default, returns a preview of the consequences without opening anything; send true only after the shopper approves that preview.","type":"boolean"},"details":{"description":"Shopper-approved context beyond the short reason, such as the specifics of a billing dispute, recorded on the request and its preview.","type":"string"},"reason":{"description":"Short shopper-approved reason for the request.","type":"string"},"request_type":{"description":"What the shopper wants done after purchase. `policy_cancellation` asks the carrier to end the policy on requested_effective_date; `refund_request` asks the carrier or billing provider to review a refund or outstanding balance without changing coverage; `support_case` opens a general support case for anything else.","enum":["policy_cancellation","refund_request","support_case"],"type":"string"},"requested_effective_date":{"description":"Day the shopper wants a cancellation to take effect; used only for policy_cancellation. It is a request: the carrier reviews it and may set a different date.","format":"date","type":"string"}},"required":["request_type","reason"],"type":"object"},"CalculatorResponse":{"additionalProperties":true,"description":"Read-only calculator response. Shape varies by calculator.","type":"object"},"UmbrellaFieldEstimateInput":{"additionalProperties":false,"description":"Metadata for one umbrella answer in the draft request whose current value is not directly user-confirmed yet. The actual value still comes from the `intake` patch at the same field path.\n","properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"field":{"description":"Intake dot-path for the inferred answer, such as `marital_status`, `address.zip`, or `additional_drivers.0.license_state`.\n","type":"string"},"source":{"description":"Opaque operator-side provenance label such as `crm`, `email_thread`, `policy_declarations`, or `historical_mode`.\n","type":"string"}},"required":["field","source","confidence"],"type":"object"},"ConsumerHomeownersSelectRequest":{"additionalProperties":false,"properties":{"selection_confirmed":{"const":true,"description":"Must be true. Confirms the shopper chose this exact homeowners offer.","type":"boolean"},"selection_token":{"description":"Offer-selection token returned by the quoted homeowners follow-up payload.","type":"string"}},"required":["selection_token","selection_confirmed"],"type":"object"},"OfferSnapshot":{"properties":{"annual_price":{"type":"integer"},"carrier":{"type":"string"},"coverage_limit":{"type":"string"},"is_estimate":{"type":"boolean"},"price_range":{"properties":{"high":{"type":"integer"},"low":{"type":"integer"}},"type":["object","null"]}},"type":"object"},"ConsumerHomeownersPrefillRequest":{"additionalProperties":false,"properties":{"credit_consent_pending":{"const":true,"description":"Must be true. Signals that the user has not yet been shown the review page. Homeowners handoffs collect consent for a soft credit check on that review turn; umbrella handoffs defer credit consent until the user chooses an offer at `select`.","type":"boolean"},"field_estimates":{"description":"Optional estimate metadata for values that are defensible but not yet directly confirmed by the user. On the initial consumer umbrella handoff, prefer sending only `intake`; add top-level `field_estimates` only when you are certain each `field` already matches a current umbrella review field path.","items":{"additionalProperties":true,"type":"object"},"type":"array"},"intake":{"additionalProperties":true,"description":"Fullest currently known consumer homeowners application patch assembled from the user's own context before any piecemeal follow-up. The first create call must already identify whether the property is standard homeowners, condo, or landlord coverage.","properties":{"home":{"description":"Initial product-selection row for the first create call. Send a single object or an array, and make sure the first home row already distinguishes standard homeowners, condo, or landlord coverage.","oneOf":[{"$ref":"#/components/schemas/ConsumerHomeownersInitialHome"},{"items":{"$ref":"#/components/schemas/ConsumerHomeownersInitialHome"},"minItems":1,"type":"array"}]}},"required":["home"],"type":"object"}},"required":["intake","credit_consent_pending"],"type":"object"},"ToolBatchResponse":{"properties":{"error_count":{"type":"integer"},"operation_count":{"type":"integer"},"results":{"items":{"$ref":"#/components/schemas/ToolBatchResult"},"type":"array"},"success_count":{"type":"integer"}},"type":"object"},"HomeownersQuotesRequest":{"additionalProperties":false,"properties":{"intake":{"additionalProperties":true,"description":"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.\n","properties":{"home":{"description":"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.\n","oneOf":[{"$ref":"#/components/schemas/ConsumerHomeownersInitialHome"},{"items":{"$ref":"#/components/schemas/ConsumerHomeownersInitialHome"},"minItems":1,"type":"array"}]}},"type":"object"},"sandbox":{"description":"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`.\n","type":"boolean"},"uid":{"description":"Existing delegated homeowners intake identifier. Omit to create a new intake.","type":"string"}},"type":"object"},"BindRequest":{"additionalProperties":false,"properties":{"intake":{"additionalProperties":true,"description":"Minimal patch answering only the fields from the current bind-stage `next_question`. Do not send quote-affecting changes here.\n","type":"object"},"sandbox":{"description":"Optional sticky sandbox flag. Sandbox delegated umbrella sessions currently reject `bind` with `sandbox_unsupported`; this field is accepted so a client carrying the same request envelope does not fail schema validation first.\n","type":"boolean"},"uid":{"type":"string"}},"required":["uid"],"type":"object"},"ConsumerPrefillResponse":{"additionalProperties":false,"properties":{"expires_at":{"description":"When the returned consumer handoff credentials expire.","format":"date-time","type":"string"},"intake_access_token":{"description":"Short-lived direct follow-up bearer for `/api/intake/{uid}`.","type":"string"},"polling_token":{"description":"Opaque coarse-status polling token for `/api/consumer/status`.","type":"string"},"resume_url":{"description":"Short-lived browser continuation for the same consumer handoff.","format":"uri","type":"string"},"review_summary":{"additionalProperties":false,"description":"Current non-authoritative pre-submit checkpoint the agent may summarize before continuing in chat or opening a browser fallback. Unless a later follow-up response shows quote progress, treat this application as not submitted yet. If any shown value is estimated, mark that bullet or value with `*`, include the short note `* = estimated` once above and once below the list, and do not prefix every estimated line with `[Estimated]`.","properties":{"post_choose":{"additionalProperties":true,"description":"Structured post-choose state after a quoted umbrella offer is selected.","type":"object"},"next_action":{"additionalProperties":true,"description":"A structured hint for the next allowed tool or endpoint action.","type":"object"},"required_upload_types":{"items":{"type":"string"},"type":"array"},"service_preview":{"additionalProperties":false,"properties":{"action_summary":{"type":"string"},"approval_required":{"type":"boolean"},"billing_effect":{"type":"string"},"carrier_conditions":{"items":{"type":"string"},"type":"array"},"coverage_effect":{"type":"string"},"details":{"type":"string"},"estimated_refund_status":{"enum":["not_applicable","unknown_pending_review"],"type":"string"},"reason":{"type":"string"},"request_type":{"enum":["policy_cancellation","refund_request","support_case"],"type":"string"},"requested_effective_date":{"format":"date","type":"string"},"status":{"enum":["preview"],"type":"string"},"uncertainty":{"type":"string"}},"type":"object"},"credit_consent_question":{"type":"string"},"selected_offer":{"additionalProperties":false,"properties":{"address":{"additionalProperties":false,"properties":{"city":{"type":"string"},"state":{"type":"string"},"street":{"type":"string"},"zip":{"type":"string"}},"type":"object"},"annual_price":{"type":"number"},"carrier":{"type":"string"},"coverage_limit":{"type":"string"},"coverage_summary":{"additionalProperties":true,"description":"Homeowners or umbrella coverage details Coverage Cat can safely summarize.","type":"object"},"deductible":{"type":"number"},"dwelling_coverage":{"type":"number"},"is_estimate":{"type":"boolean"},"minimum_auto_limits":{"additionalProperties":true,"description":"Underlying auto-limit requirements for this offer.","type":"object"},"personal_liability":{"type":"number"},"policy_subtype":{"type":"string"},"policy_subtype_display":{"type":"string"},"price_range":{"additionalProperties":false,"properties":{"high":{"type":"number"},"low":{"type":"number"}},"type":"object"},"quote_number":{"type":"string"},"recommended":{"type":"boolean"},"sample_policy_url":{"format":"uri","type":"string"},"selection_guidance":{"additionalProperties":true,"description":"Offer-specific same-reply requirements and guidance.","type":"object"},"selection_token":{"type":"string"},"um_uim_selection":{"additionalProperties":true,"description":"Optional excess UM/UIM election details for this offer.","type":"object"}},"type":"object"},"schema":{"additionalProperties":true,"description":"Supplemental schema hints for homeowners review payloads.","type":"object"},"pending_fields":{"description":"Structured missing-value hints for umbrella pre-submit review.","items":{"additionalProperties":true,"description":"Structured missing-value hints for umbrella pre-submit review.","type":"object"},"type":"array"},"uploaded_count":{"type":"integer"},"offers":{"items":{"additionalProperties":false,"properties":{"address":{"additionalProperties":false,"properties":{"city":{"type":"string"},"state":{"type":"string"},"street":{"type":"string"},"zip":{"type":"string"}},"type":"object"},"annual_price":{"type":"number"},"carrier":{"type":"string"},"coverage_limit":{"type":"string"},"coverage_summary":{"additionalProperties":true,"description":"Homeowners or umbrella coverage details Coverage Cat can safely summarize.","type":"object"},"deductible":{"type":"number"},"dwelling_coverage":{"type":"number"},"is_estimate":{"type":"boolean"},"minimum_auto_limits":{"additionalProperties":true,"description":"Underlying auto-limit requirements for this offer.","type":"object"},"personal_liability":{"type":"number"},"policy_subtype":{"type":"string"},"policy_subtype_display":{"type":"string"},"price_range":{"additionalProperties":false,"properties":{"high":{"type":"number"},"low":{"type":"number"}},"type":"object"},"quote_number":{"type":"string"},"recommended":{"type":"boolean"},"sample_policy_url":{"format":"uri","type":"string"},"selection_guidance":{"additionalProperties":true,"description":"Offer-specific same-reply requirements and guidance.","type":"object"},"selection_token":{"type":"string"},"um_uim_selection":{"additionalProperties":true,"description":"Optional excess UM/UIM election details for this offer.","type":"object"}},"type":"object"},"type":"array"},"response_summary":{"type":"string"},"payment_status":{"additionalProperties":false,"properties":{"channel":{"type":"string"},"customer_owned_inbox_required":{"type":"boolean"},"destination_hint":{"type":"string"},"payment_intent_id":{"type":"string"},"payment_method_saved_at":{"format":"date-time","type":"string"},"provider":{"type":"string"},"state":{"type":"string"},"timing":{"type":"string"}},"type":"object"},"poll_after_seconds":{"type":"integer"},"conversation":{"additionalProperties":false,"properties":{"messages":{"items":{"additionalProperties":false,"properties":{"author_label":{"type":"string"},"delivery_state":{"enum":["received","queued","sent"],"type":"string"},"direction":{"enum":["incoming","outgoing"],"type":"string"},"medium":{"enum":["email","app","sms"],"type":"string"},"message_id":{"type":"integer"},"subject":{"type":"string"},"text":{"type":"string"},"timestamp":{"format":"date-time","type":"string"}},"type":"object"},"type":"array"},"reply_pending":{"type":"boolean"},"reply_supported":{"type":"boolean"},"reply_to_message_id":{"type":"integer"},"reply_via":{"type":"string"}},"type":"object"},"compare_details_url":{"description":"Coverage Cat browser URL for compare-details follow-up.","format":"uri","type":"string"},"offer_summary":{"additionalProperties":false,"properties":{"cheapest_annual_premium":{"type":"number"},"cheapest_carrier":{"type":"string"},"quote_count":{"type":"integer"},"recommended_annual_premium":{"type":"number"},"recommended_carrier":{"type":"string"}},"type":"object"},"review_token":{"description":"Opaque review token for delegated review-style submit paths.","type":"string"},"status":{"enum":["abandoned","blocked","bound","cancelled","chosen","credit_consent_pending","credit_consent_required","dev_success","documents_needed","documents_pending_review","email_sent","in_review","ineligible","info_requested","needs_more_info","needs_more_info_to_bind","no_policy","no_chosen_offer","no_quotes","no_selection","ok","payment_collection_ready","payment_needed","pending","pending_quotes","queued","quote_rate_limited","quoted","ready_for_review","ready_for_submission","ready_to_finalize","review_pending","service_preview","service_requested","sandbox_unsupported","stale_selection","verifying_documents","waiting_on_carrier","waiting_on_documents","waiting_on_payment"],"type":"string"},"preview_token":{"description":"Opaque bind-preview token for the next homeowners bind confirmation.","type":"string"},"next_question":{"additionalProperties":true,"description":"The current shopper-owned question bundle or bind-stage question.","type":"object"},"review_estimates":{"items":{"additionalProperties":true,"description":"Coverage Cat estimate provenance metadata for reviewed values.","type":"object"},"type":"array"},"known_summary":{"additionalProperties":true,"description":"Structured facts Coverage Cat can safely summarize at this stage.","type":"object"},"user_action_required":{"type":"string"},"payment_collection_supported":{"type":"boolean"},"offers_url":{"description":"Coverage Cat browser URL for the selected offer or offer-tracking page.","format":"uri","type":"string"},"service_request":{"additionalProperties":false,"properties":{"action_summary":{"type":"string"},"billing_effect":{"type":"string"},"carrier_conditions":{"items":{"type":"string"},"type":"array"},"coverage_effect":{"type":"string"},"details":{"type":"string"},"estimated_refund_status":{"enum":["not_applicable","unknown_pending_review"],"type":"string"},"final_outcome":{"additionalProperties":true,"description":"Final carrier or billing outcome once Coverage Cat can confirm it.","type":"object"},"reason":{"type":"string"},"request_id":{"type":"string"},"request_type":{"enum":["policy_cancellation","refund_request","support_case"],"type":"string"},"requested_at":{"format":"date-time","type":"string"},"requested_effective_date":{"format":"date","type":"string"},"status":{"enum":["pending_review","completed"],"type":"string"},"uncertainty":{"type":"string"}},"type":"object"},"review":{"additionalProperties":true,"description":"Structured review card or selected-offer review block.","type":"object"},"sandbox":{"description":"True when Coverage Cat is returning consumer sandbox test data rather than a live shopper workflow.","type":"boolean"},"selection_guidance":{"additionalProperties":true,"description":"Guidance for completing an offer choice in one shopper-facing reply.","type":"object"},"documents":{"items":{"additionalProperties":false,"properties":{"content_type":{"type":"string"},"download_url":{"description":"Short-lived browser continuation for this policy document.","format":"uri","type":"string"},"label":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"}},"type":"object"},"type":"array"},"notification_channel":{"additionalProperties":false,"properties":{"customer_owned_inbox_required":{"type":"boolean"},"destination_hint":{"type":"string"},"events":{"items":{"type":"string"},"type":"array"},"registered":{"type":"boolean"},"role":{"type":"string"},"type":{"type":"string"}},"type":"object"},"support":{"additionalProperties":false,"properties":{"contact_url":{"description":"Coverage Cat support route for billing, cancellations, and quote follow-up.","format":"uri","type":"string"},"email":{"type":"string"},"phone":{"type":"string"}},"type":"object"},"purchase_preview":{"additionalProperties":false,"properties":{"action_summary":{"type":"string"},"approval_required":{"type":"boolean"},"carrier_conditions":{"items":{"type":"string"},"type":"array"},"coverage_summary":{"additionalProperties":true,"description":"Coverage details tied to the current previewed offer.","type":"object"},"effective_date":{"format":"date","type":"string"},"effective_period":{"additionalProperties":false,"properties":{"ends_on":{"format":"date","type":"string"},"starts_on":{"format":"date","type":"string"}},"type":"object"},"payment_timing":{"type":"string"},"price":{"additionalProperties":false,"properties":{"annual_premium":{"type":"number"},"currency":{"type":"string"},"payment_method":{"type":"string"}},"type":"object"},"status":{"type":"string"},"uncertainty":{"type":"string"}},"type":"object"},"uploaded":{"items":{"additionalProperties":false,"properties":{"filename":{"type":"string"},"type":{"type":"string"}},"type":"object"},"type":"array"},"payment_ui":{"additionalProperties":false,"properties":{"availability":{"enum":["ready","unknown","unsupported"],"type":"string"},"fallback_reason":{"type":"string"},"mode":{"type":"string"}},"type":"object"},"field_estimates":{"items":{"additionalProperties":true,"description":"Coverage Cat estimate provenance metadata for reviewed values.","type":"object"},"type":"array"},"policy":{"additionalProperties":false,"properties":{"cancellation_note":{"type":"string"},"cancelled_at":{"format":"date","type":"string"},"carrier":{"type":"string"},"confirmation_timestamp":{"format":"date-time","type":"string"},"coverage_summary":{"additionalProperties":true,"description":"Carrier-confirmed policy coverage details Coverage Cat can safely return.","type":"object"},"effective_date":{"format":"date","type":"string"},"effective_period":{"additionalProperties":false,"properties":{"ends_on":{"format":"date","type":"string"},"starts_on":{"format":"date","type":"string"}},"type":"object"},"policy_number":{"type":"string"},"state":{"enum":["bound","cancelled"],"type":"string"}},"type":"object"},"payment_setup":{"additionalProperties":false,"properties":{"environment":{"enum":["test","live"],"type":"string"},"payment_method_types":{"items":{"type":"string"},"type":"array"},"provider":{"type":"string"},"setup_intent_id":{"type":"string"},"usage":{"type":"string"}},"type":"object"},"agent_instructions":{"items":{"type":"string"},"type":"array"},"service_requests":{"items":{"additionalProperties":false,"properties":{"action_summary":{"type":"string"},"billing_effect":{"type":"string"},"carrier_conditions":{"items":{"type":"string"},"type":"array"},"coverage_effect":{"type":"string"},"details":{"type":"string"},"estimated_refund_status":{"enum":["not_applicable","unknown_pending_review"],"type":"string"},"final_outcome":{"additionalProperties":true,"description":"Final carrier or billing outcome once Coverage Cat can confirm it.","type":"object"},"reason":{"type":"string"},"request_id":{"type":"string"},"request_type":{"enum":["policy_cancellation","refund_request","support_case"],"type":"string"},"requested_at":{"format":"date-time","type":"string"},"requested_effective_date":{"format":"date","type":"string"},"status":{"enum":["pending_review","completed"],"type":"string"},"uncertainty":{"type":"string"}},"type":"object"},"type":"array"},"missing_fields":{"description":"Structured missing-value hints for homeowners pre-submit review.","items":{"additionalProperties":true,"description":"Structured missing-value hints for homeowners pre-submit review.","type":"object"},"type":"array"},"application_submitted":{"type":"boolean"},"payment_url":{"description":"Coverage Cat browser URL for secure payment fallback.","format":"uri","type":"string"},"review_items":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"display_value":{"type":"string"},"enum":{"items":{"type":"string"},"type":"array"},"label":{"type":"string"},"number":{"type":"integer"},"path":{"items":{"type":["string","integer"]},"type":"array"},"suggested_value":{}},"type":"object"},"type":"array"},"verification":{"additionalProperties":false,"properties":{"instructions":{"type":"string"},"request_tool":{"type":"string"},"required":{"type":"boolean"},"retry_after_seconds":{"minimum":0,"type":"integer"},"status":{"enum":["required","pending","verified","not_required"],"type":"string"},"status_tool":{"type":"string"}},"required":["status","required","retry_after_seconds","request_tool","status_tool","instructions"],"type":"object"}},"required":["status"],"type":"object"},"sandbox":{"description":"True when Coverage Cat is returning consumer sandbox test data rather than a live shopper workflow.","type":"boolean"},"uid":{"description":"Coverage Cat intake uid for follow-up.","type":"string"}},"required":["uid","expires_at","review_summary","resume_url","polling_token","intake_access_token"],"type":"object"},"ToolBatchOperation":{"additionalProperties":false,"properties":{"id":{"type":"string"},"input":{"additionalProperties":true,"type":"object"},"tool":{"enum":["home_calculator","umbrella_calculator","auto_estimates","collision_and_comprehensive_coverage","file_a_claim","homeowners_agent_finder","umbrella_limit_planner","umbrella_underlying_limit_check","umbrella_bundle_comparison"],"type":"string"}},"required":["tool","input"],"type":"object"},"HomeownersFieldEstimate":{"description":"One estimated answer on a homeowners intake, whether it came from operator-side context or Coverage Cat's own probe/estimator pass. These estimates can keep delegated quoting moving, but homeowners finalization still happens in Coverage Cat's consumer portal. If the operator's system later has a real user-confirmed value for the same field, resend it in the next intake payload and Coverage Cat will overwrite the estimate.\n","properties":{"confidence":{"description":"Coverage Cat's internal confidence, not carrier acceptance risk. Prioritize confirming `low` confidence estimates with the customer before binding.\n","enum":["low","medium","high"],"type":"string"},"confirmed_by_user":{"description":"Whether a human has re-sent this field as a confirmed answer on a subsequent update, whether from the delegated operator payload or the homeowner reviewing the pre-filled value in Coverage Cat's portal.\n","type":"boolean"},"estimated_at":{"format":"date-time","type":"string"},"field":{"description":"Dot-path of the field on the intake (e.g. `property_type`).","type":"string"},"source":{"description":"Opaque provenance label for the estimate. Common operator-side labels include `crm`, `email_thread`, `policy_declarations`, and `prior_coverage_cat_session`; Coverage Cat-generated labels include `loan_file`, `zillow`, `realtor`, `vintage_rule`, and `zdr_openai`. Treat unknown values as opaque; new sources may be added over time.\n","type":"string"},"value":{"description":"Estimated value. Type matches the underlying intake field."}},"type":"object"},"HomeownersFixIssuesEmailResponse":{"properties":{"agent_instructions":{"items":{"type":"string"},"type":"array"},"homeowner_fix_issues_request_login_url":{"description":"Safe homeowner-facing sign-in request page for the same fix-issues flow Coverage Cat emailed. Share this only when you need a pass-through link in chat.\n","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"},"response_summary":{"type":"string"},"status":{"enum":["email_sent"],"type":"string"},"uid":{"type":"string"}},"type":"object"},"ConsumerHomeownersInitialHome":{"additionalProperties":true,"anyOf":[{"description":"Standard homeowners coverage. Send both a non-rental home_ownership and a non-condo property_type.","properties":{"home_ownership":{"enum":["owned_primary","owned_seasonal","under_construction"],"type":"string"},"property_type":{"enum":["single_family","duplex","triplex","quadplex","apartment","townhouse","manufacture_or_mobile"],"type":"string"}},"required":["home_ownership","property_type"],"type":"object"},{"description":"Condo coverage. Send property_type: condo.","properties":{"property_type":{"const":"condo","type":"string"}},"required":["property_type"],"type":"object"},{"description":"Landlord coverage. Send home_ownership: owned_rental.","properties":{"home_ownership":{"const":"owned_rental","type":"string"}},"required":["home_ownership"],"type":"object"},{"description":"Landlord coverage. A rented rental_status also counts when home_ownership is not yet known.","properties":{"rental_status":{"enum":["room","attached_unit","detached_unit"],"type":"string"}},"required":["rental_status"],"type":"object"}],"description":"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.","type":"object"},"HomeCalculatorRequest":{"additionalProperties":false,"properties":{"home_sqft":{"maximum":25000,"minimum":1,"type":"integer"},"risk_factors":{"description":"Optional risk factor IDs returned by available_risk_factors.","items":{"type":"string"},"type":"array"},"zip":{"pattern":"^[0-9]{5}$","type":"string"}},"required":["zip","home_sqft"],"type":"object"}},"securitySchemes":{"agent_api_key":{"scheme":"bearer","type":"http"},"intake_access_token":{"description":"Short-lived bearer token returned by consumer-prefill and rotated by each successful direct follow-up response.","scheme":"bearer","type":"http"}}},"security":[]}