{"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":{"FallbackStep":{"properties":{"display_note":{"type":"string"},"type":{"enum":["dashboard"],"type":"string"},"url":{"format":"uri","type":"string"}},"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"},"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"},"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"},"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 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":"`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.","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"}},"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"},"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"},"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"},"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"},"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"},"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"},"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"},"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"},"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":"Omit or send false to preview the consequences first. Send true only after the shopper approves opening the request.","type":"boolean"},"details":{"description":"Optional extra context or dispute details.","type":"string"},"reason":{"description":"Short shopper-approved reason for the request.","type":"string"},"request_type":{"description":"Which post-purchase action Coverage Cat should preview or open.","enum":["policy_cancellation","refund_request","support_case"],"type":"string"},"requested_effective_date":{"description":"Required for policy_cancellation. Desired cancellation date for carrier review.","format":"date","type":"string"}},"required":["request_type","reason"],"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"},"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"},"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"},"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"},"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"},"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"},"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"},"NextAction":{"properties":{"display_note":{"type":"string"},"type":{"enum":["bind"],"type":"string"}},"type":"object"},"CalculatorResponse":{"additionalProperties":true,"description":"Read-only calculator response. Shape varies by calculator.","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"},"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"},"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"],"type":"string"}},"required":["tool","input"],"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"},"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"},"IntakeAssistantResponse":{"additionalProperties":false,"description":"REST consumer follow-up payload for the `/api/intake/{uid}` surface.","properties":{"poll_after_seconds":{"type":"integer"},"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"},"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"},"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"},"required_upload_types":{"items":{"type":"string"},"type":"array"},"payment_ui":{"additionalProperties":false,"properties":{"availability":{"enum":["ready","unknown","unsupported"],"type":"string"},"fallback_reason":{"type":"string"},"mode":{"type":"string"}},"type":"object"},"uid":{"description":"Coverage Cat intake uid for the current handoff.","type":"string"},"payment_url":{"description":"Coverage Cat browser URL for secure payment fallback.","format":"uri","type":"string"},"known_summary":{"additionalProperties":true,"description":"Structured facts Coverage Cat can safely summarize at this stage.","type":"object"},"compare_details_url":{"description":"Coverage Cat browser URL for compare-details follow-up.","format":"uri","type":"string"},"uploaded_count":{"type":"integer"},"response_summary":{"type":"string"},"schema":{"additionalProperties":true,"description":"Supplemental schema hints for homeowners review payloads.","type":"object"},"user_action_required":{"type":"string"},"expires_at":{"description":"When the current consumer handoff expires.","format":"date-time","type":"string"},"agent_instructions":{"items":{"type":"string"},"type":"array"},"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"},"intake_access_token":{"description":"Short-lived direct follow-up bearer for the next `/api/intake/{uid}` call.","type":"string"},"selected_offer":{"additionalProperties":false,"properties":{"annual_price":{"type":"number"},"carrier":{"type":"string"},"coverage_limit":{"type":"string"},"is_estimate":{"type":"boolean"},"minimum_auto_limits":{"additionalProperties":true,"description":"Underlying auto-limit requirements for this offer.","type":"object"},"price_range":{"additionalProperties":false,"properties":{"high":{"type":"number"},"low":{"type":"number"}},"type":"object"},"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"},"line":{"enum":["umbrella","homeowners"],"type":"string"},"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"},"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"},"offers_url":{"description":"Coverage Cat browser URL for the selected offer or offer-tracking page.","format":"uri","type":"string"},"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"},"payment_collection_supported":{"type":"boolean"},"review_estimates":{"items":{"additionalProperties":true,"description":"Coverage Cat estimate provenance metadata for reviewed values.","type":"object"},"type":"array"},"credit_consent_question":{"type":"string"},"next_action":{"additionalProperties":true,"description":"A structured hint for the next allowed tool or endpoint action.","type":"object"},"application_submitted":{"type":"boolean"},"uploaded":{"items":{"additionalProperties":false,"properties":{"filename":{"type":"string"},"type":{"type":"string"}},"type":"object"},"type":"array"},"review":{"additionalProperties":true,"description":"Structured review card or selected-offer review block.","type":"object"},"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"},"next_question":{"additionalProperties":true,"description":"The current shopper-owned question bundle or bind-stage question.","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"},"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"},"payment_status":{"additionalProperties":false,"properties":{"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"},"offers":{"items":{"additionalProperties":false,"properties":{"annual_price":{"type":"number"},"carrier":{"type":"string"},"coverage_limit":{"type":"string"},"is_estimate":{"type":"boolean"},"minimum_auto_limits":{"additionalProperties":true,"description":"Underlying auto-limit requirements for this offer.","type":"object"},"price_range":{"additionalProperties":false,"properties":{"high":{"type":"number"},"low":{"type":"number"}},"type":"object"},"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"},"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"},"post_choose":{"additionalProperties":true,"description":"Structured post-choose state after a quoted umbrella offer is selected.","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"},"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"},"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"},"field_estimates":{"items":{"additionalProperties":true,"description":"Coverage Cat estimate provenance metadata for reviewed values.","type":"object"},"type":"array"}},"required":["uid","status"],"type":"object"},"AgentKeyRequest":{"additionalProperties":false,"properties":{"email":{"format":"email","type":"string"}},"required":["email"],"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":"`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.","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"},"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"},"ConsumerUmbrellaBindRequest":{"additionalProperties":false,"properties":{"intake":{"additionalProperties":true,"description":"Minimal patch answering only the current bind-stage next_question fields.","type":"object"}},"type":"object"},"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"],"type":"string"}},"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"},"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"},"ConsumerUmbrellaPaymentRequest":{"oneOf":[{"additionalProperties":false,"properties":{"payment_collection_requested":{"const":true,"description":"Use true on the first payment call to request a secure Stripe SetupIntent session for hosted card collection.","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"}]},"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"},"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":{"poll_after_seconds":{"type":"integer"},"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"},"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"},"required_upload_types":{"items":{"type":"string"},"type":"array"},"payment_ui":{"additionalProperties":false,"properties":{"availability":{"enum":["ready","unknown","unsupported"],"type":"string"},"fallback_reason":{"type":"string"},"mode":{"type":"string"}},"type":"object"},"payment_url":{"description":"Coverage Cat browser URL for secure payment fallback.","format":"uri","type":"string"},"known_summary":{"additionalProperties":true,"description":"Structured facts Coverage Cat can safely summarize at this stage.","type":"object"},"compare_details_url":{"description":"Coverage Cat browser URL for compare-details follow-up.","format":"uri","type":"string"},"uploaded_count":{"type":"integer"},"response_summary":{"type":"string"},"schema":{"additionalProperties":true,"description":"Supplemental schema hints for homeowners review payloads.","type":"object"},"user_action_required":{"type":"string"},"agent_instructions":{"items":{"type":"string"},"type":"array"},"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"},"selected_offer":{"additionalProperties":false,"properties":{"annual_price":{"type":"number"},"carrier":{"type":"string"},"coverage_limit":{"type":"string"},"is_estimate":{"type":"boolean"},"minimum_auto_limits":{"additionalProperties":true,"description":"Underlying auto-limit requirements for this offer.","type":"object"},"price_range":{"additionalProperties":false,"properties":{"high":{"type":"number"},"low":{"type":"number"}},"type":"object"},"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"},"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"},"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"},"offers_url":{"description":"Coverage Cat browser URL for the selected offer or offer-tracking page.","format":"uri","type":"string"},"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"},"payment_collection_supported":{"type":"boolean"},"review_estimates":{"items":{"additionalProperties":true,"description":"Coverage Cat estimate provenance metadata for reviewed values.","type":"object"},"type":"array"},"credit_consent_question":{"type":"string"},"next_action":{"additionalProperties":true,"description":"A structured hint for the next allowed tool or endpoint action.","type":"object"},"application_submitted":{"type":"boolean"},"uploaded":{"items":{"additionalProperties":false,"properties":{"filename":{"type":"string"},"type":{"type":"string"}},"type":"object"},"type":"array"},"review":{"additionalProperties":true,"description":"Structured review card or selected-offer review block.","type":"object"},"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"},"next_question":{"additionalProperties":true,"description":"The current shopper-owned question bundle or bind-stage question.","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"},"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"},"payment_status":{"additionalProperties":false,"properties":{"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"},"offers":{"items":{"additionalProperties":false,"properties":{"annual_price":{"type":"number"},"carrier":{"type":"string"},"coverage_limit":{"type":"string"},"is_estimate":{"type":"boolean"},"minimum_auto_limits":{"additionalProperties":true,"description":"Underlying auto-limit requirements for this offer.","type":"object"},"price_range":{"additionalProperties":false,"properties":{"high":{"type":"number"},"low":{"type":"number"}},"type":"object"},"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"},"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"},"post_choose":{"additionalProperties":true,"description":"Structured post-choose state after a quoted umbrella offer is selected.","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"},"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"},"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"},"field_estimates":{"items":{"additionalProperties":true,"description":"Coverage Cat estimate provenance metadata for reviewed values.","type":"object"},"type":"array"}},"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"},"ToolBatchError":{"properties":{"error":{"type":"string"},"message":{"type":"string"},"reason":{"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"},"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"},"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"},"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":{"enum":["Yes"],"type":"string"},"collected_from_user":{"const":true,"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"},"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"},"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"},"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"},"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"},"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"},"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"},"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"}},"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"}}},"info":{"description":"Which surface do you want? This document is the full contract and includes the delegated `/api/agent/*` endpoints, which require an operator-issued API key that Coverage Cat grants only to businesses transacting on behalf of their own customers. If you are a personal AI assistant shopping for your own human user, use `/api/consumer/openapi.yaml` instead: the consumer purchase flow for umbrella and homeowners needs no Coverage Cat credential, and you should never ask the shopper for one. The `x-coverage-cat-surface` extension on each operation below marks which surface it belongs to.\n\nDelegated-agent APIs for Coverage Cat purchase workflows and read-only insurance tools. Umbrella delegated purchase is a one-review-page flow: the operator-side agent fills the application from allowed context, Coverage Cat returns estimated-field metadata, and the human only reviews or corrects the final JSON before preliminary quotes are generated. Credit consent is collected after the user chooses an offer, at the `select` step, before Coverage Cat can bind. Homeowners delegated purchase is a near-single-endpoint operator flow: gather the fullest approved-context application first, mark non-user- confirmed home values with `field_estimates`, treat `credit_check_authorized` as the real homeowner's explicit authorization for Coverage Cat's soft credit pull on the assembled application, allow a first complete create call to include it when the operator already collected that exact consent separately, otherwise hold it back until review, then let Coverage Cat submit and quote the intake asynchronously and route the homeowner back through portal review for any remaining estimated home answers before final bind. Coverage Cat also exposes public consumer handoff endpoints at `/api/consumer/umbrella/prefill`, `/api/consumer/homeowners/prefill`, `/api/consumer/status`, and the direct follow-up intake endpoints under `/api/intake/{uid}`. On the direct follow-up path, authenticate with the latest rotated `intake_access_token`, use `PATCH /api/intake/{uid}` only for pre-submit review, correction, and submission, and continue umbrella post-choose follow-up through `/api/intake/{uid}/select`, `/api/intake/{uid}/bind`, and `/api/intake/{uid}/attach`.\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\nAuthenticated write operations also accept an `Idempotency-Key` header. Coverage Cat replays the cached successful response for the same operator, path, and key for 24 hours.\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}`.\n\nRate-limited endpoints return `RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset`, and `RateLimit-Policy`. A `429` response also includes `Retry-After`.","title":"Coverage Cat Delegated Insurance Purchase APIs","version":"1.0.0","x-coverage-cat-consumer-openapi":"/api/consumer/openapi.yaml","x-coverage-cat-surface":"full","x-skill-version":"1.0.0"},"openapi":"3.1.0","paths":{"/api/agent/calculators/auto-estimates":{"post":{"description":"Returns per-carrier monthly premium percentile bands for a single driver and vehicle profile. Vehicle fields are optional; when omitted, Coverage Cat prices from the driver and location profile alone.","operationId":"estimate_auto_insurance_by_carrier","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoCalculatorRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorResponse"}}},"description":"Calculator result.","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 calculator input.","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 or missing API key.","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":"Calculator/tool request rate limit exceeded.","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":[{"agent_api_key":[]}],"summary":"Estimate monthly auto premiums by carrier.","x-codeSamples":[{"label":"POST /api/agent/calculators/auto-estimates","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/calculators/auto-estimates \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-calculators-auto-estimates\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"driver\": {\n    \"age\": 35,\n    \"state\": \"CA\",\n    \"zip\": \"94107\"\n  },\n  \"vehicle\": {\n    \"make\": \"Honda\",\n    \"model\": \"Civic\",\n    \"year\": 2022\n  }\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"driver\": {\n    \"age\": 35,\n    \"state\": \"CA\",\n    \"zip\": \"94107\"\n  },\n  \"vehicle\": {\n    \"make\": \"Honda\",\n    \"model\": \"Civic\",\n    \"year\": 2022\n  }\n};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/calculators/auto-estimates\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-calculators-auto-estimates\",\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    \"driver\": {\n    \"age\": 35,\n    \"state\": \"CA\",\n    \"zip\": \"94107\"\n},\n    \"vehicle\": {\n    \"make\": \"Honda\",\n    \"model\": \"Civic\",\n    \"year\": 2022\n}\n}\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/calculators/auto-estimates\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-calculators-auto-estimates\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":false}},"/api/agent/calculators/collision-and-comprehensive-coverage":{"post":{"description":"Compares monthly premium bands and cumulative multi-year premium tradeoffs across no physical-damage coverage, collision-only, and collision-plus-comprehensive scenarios for the same auto profile.","operationId":"estimate_collision_and_comprehensive_coverage_value","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoCalculatorRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorResponse"}}},"description":"Calculator result.","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 calculator input.","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 or missing API key.","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":"Calculator/tool request rate limit exceeded.","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":[{"agent_api_key":[]}],"summary":"Compare collision/comprehensive coverage scenarios.","x-codeSamples":[{"label":"POST /api/agent/calculators/collision-and-comprehensive-coverage","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/calculators/collision-and-comprehensive-coverage \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-calculators-collision-and-comprehensive-coverage\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"repair_estimate\": 2500,\n  \"vehicle\": {\n    \"make\": \"Toyota\",\n    \"model\": \"Camry\",\n    \"year\": 2020\n  }\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"repair_estimate\": 2500,\n  \"vehicle\": {\n    \"make\": \"Toyota\",\n    \"model\": \"Camry\",\n    \"year\": 2020\n  }\n};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/calculators/collision-and-comprehensive-coverage\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-calculators-collision-and-comprehensive-coverage\",\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    \"repair_estimate\": 2500,\n    \"vehicle\": {\n    \"make\": \"Toyota\",\n    \"model\": \"Camry\",\n    \"year\": 2020\n}\n}\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/calculators/collision-and-comprehensive-coverage\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-calculators-collision-and-comprehensive-coverage\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":false}},"/api/agent/calculators/file-a-claim":{"post":{"description":"Estimates the long-run cost of filing an auto claim by combining the deductible with projected premium impact, then returns a simple file-claim versus pay-out-of-pocket recommendation.","operationId":"estimate_auto_claim_filing_cost","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoCalculatorRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorResponse"}}},"description":"Calculator result.","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 calculator input.","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 or missing API key.","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":"Calculator/tool request rate limit exceeded.","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":[{"agent_api_key":[]}],"summary":"Estimate whether filing an auto claim is likely cheaper than paying out of pocket.","x-codeSamples":[{"label":"POST /api/agent/calculators/file-a-claim","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/calculators/file-a-claim \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-calculators-file-a-claim\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"coverage\": {\n    \"collision_deductible\": 1000,\n    \"comprehensive_deductible\": 500\n  },\n  \"repair_estimate\": 4200\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"coverage\": {\n    \"collision_deductible\": 1000,\n    \"comprehensive_deductible\": 500\n  },\n  \"repair_estimate\": 4200\n};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/calculators/file-a-claim\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-calculators-file-a-claim\",\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    \"coverage\": {\n    \"collision_deductible\": 1000,\n    \"comprehensive_deductible\": 500\n},\n    \"repair_estimate\": 4200\n}\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/calculators/file-a-claim\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-calculators-file-a-claim\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":false}},"/api/agent/calculators/home":{"post":{"description":"Returns a read-only California homeowners premium range plus ZIP risk context and available risk-factor metadata for the supplied property profile. Use this for directional planning, not binding quote decisions.","operationId":"estimate_homeowners_insurance","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeCalculatorRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorResponse"}}},"description":"Calculator result.","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 calculator input.","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 or missing API key.","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":"Calculator/tool request rate limit exceeded.","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":[{"agent_api_key":[]}],"summary":"Estimate homeowners insurance cost from ZIP, square footage, and risk factors.","x-codeSamples":[{"label":"POST /api/agent/calculators/home","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/calculators/home \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-calculators-home\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"home_sqft\": 1800,\n  \"risk_factors\": [\n    \"pool\"\n  ],\n  \"zip\": \"90210\"\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"home_sqft\": 1800,\n  \"risk_factors\": [\n    \"pool\"\n  ],\n  \"zip\": \"90210\"\n};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/calculators/home\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-calculators-home\",\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    \"home_sqft\": 1800,\n    \"risk_factors\": [\"pool\"],\n    \"zip\": \"90210\"\n}\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/calculators/home\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-calculators-home\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":false}},"/api/agent/calculators/umbrella":{"post":{"description":"Returns annual umbrella price bands for common coverage limits using ZIP-level eligibility and simple household risk counts. Use this before a full delegated umbrella quote when the user only needs directional pricing.","operationId":"estimate_umbrella_insurance","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UmbrellaCalculatorRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorResponse"}}},"description":"Calculator result.","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 calculator input.","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 or missing API key.","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":"Calculator/tool request rate limit exceeded.","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":[{"agent_api_key":[]}],"summary":"Estimate annual umbrella insurance cost by limit and risk profile.","x-codeSamples":[{"label":"POST /api/agent/calculators/umbrella","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/calculators/umbrella \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-calculators-umbrella\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"current_auto_coverages\": \"250_500_100\",\n  \"desired_coverage_limit\": 2000000,\n  \"zip\": \"94107\"\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"current_auto_coverages\": \"250_500_100\",\n  \"desired_coverage_limit\": 2000000,\n  \"zip\": \"94107\"\n};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/calculators/umbrella\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-calculators-umbrella\",\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    \"current_auto_coverages\": \"250_500_100\",\n    \"desired_coverage_limit\": 2000000,\n    \"zip\": \"94107\"\n}\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/calculators/umbrella\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-calculators-umbrella\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":false}},"/api/agent/homeowners/dashboard":{"get":{"description":"Returns the operator's delegated homeowners queue as coarse non-PII per-property status rows. Use the optional filters to page the queue or focus on a single request UID, property identifier, or status bucket.","operationId":"list_delegated_homeowners_property_statuses","parameters":[{"description":"Restrict results to a single delegated homeowners request UID.","in":"query","name":"uid","schema":{"type":"string"}},{"description":"Restrict results to a single non-PII property identifier returned by Coverage Cat.","in":"query","name":"property_id","schema":{"type":"string"}},{"in":"query","name":"status","schema":{"enum":["needs_more_info","pending_quotes","quoted","quotes_published"],"type":"string"}},{"in":"query","name":"limit","schema":{"maximum":100,"minimum":1,"type":"integer"}},{"$ref":"#/components/parameters/DashboardCursor"},{"$ref":"#/components/parameters/CoverageCatApiVersion"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeownersDashboardResponse"}}},"description":"Coarse non-PII delegated homeowners property statuses for this operator. This dashboard surface is intentionally less granular than the intake issue APIs: it does not list exact missing fields or exact offer counts.\n","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 filters were provided.","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 or missing API key.","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"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"The request used a shared key instead of an operator-issued key.","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 failed authentication attempts or delegated-agent 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"}}}},"security":[{"agent_api_key":[]}],"summary":"Read non-PII per-property status rows for outstanding delegated homeowners requests under the current operator key.","x-codeSamples":[{"label":"GET /api/agent/homeowners/dashboard","lang":"cURL","source":"curl -X GET https://www.coveragecat.com/api/agent/homeowners/dashboard?limit=25 \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\""},{"label":"fetch","lang":"JavaScript","source":"const response = await fetch(\"https://www.coveragecat.com/api/agent/homeowners/dashboard?limit=25\", {\n  method: \"GET\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\"\n  }\n});\nconst data = await response.json();\nconsole.log(data);"},{"label":"requests","lang":"Python","source":"import requests\n\nresponse = requests.get(\n    \"https://www.coveragecat.com/api/agent/homeowners/dashboard?limit=25\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\"\n    },\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":false}},"/api/agent/homeowners/dashboard/session":{"post":{"description":"Returns a short-lived browser session URL for Coverage Cat's operator homeowners dashboard, optionally prefiltered to the same UID, property-id, status, limit, and cursor view the API would return.","operationId":"create_delegated_homeowners_dashboard_session","parameters":[{"description":"Prefilter the browser dashboard to a single delegated homeowners request UID.","in":"query","name":"uid","schema":{"type":"string"}},{"description":"Prefilter the browser dashboard to a single non-PII property identifier returned by Coverage Cat.","in":"query","name":"property_id","schema":{"type":"string"}},{"in":"query","name":"status","schema":{"enum":["needs_more_info","pending_quotes","quoted","quotes_published"],"type":"string"}},{"in":"query","name":"limit","schema":{"maximum":100,"minimum":1,"type":"integer"}},{"$ref":"#/components/parameters/DashboardCursor"},{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"dashboard_url":{"format":"uri","type":"string"}},"type":"object"}}},"description":"A short-lived browser dashboard URL for this operator.","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 filters were provided.","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 or missing API key.","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"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"The request used a shared key instead of an operator-issued key.","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 failed authentication attempts or delegated-agent 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"}}}},"security":[{"agent_api_key":[]}],"summary":"Mint a short-lived browser login link for the operator homeowners dashboard.","x-codeSamples":[{"label":"POST /api/agent/homeowners/dashboard/session","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/homeowners/dashboard/session?limit=25&uid=homeowners-req-123 \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-homeowners-dashboard-session\""},{"label":"fetch","lang":"JavaScript","source":"const response = await fetch(\"https://www.coveragecat.com/api/agent/homeowners/dashboard/session?limit=25&uid=homeowners-req-123\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-homeowners-dashboard-session\"\n  }\n});\nconst data = await response.json();\nconsole.log(data);"},{"label":"requests","lang":"Python","source":"import requests\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/homeowners/dashboard/session?limit=25&uid=homeowners-req-123\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-homeowners-dashboard-session\"\n    },\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":false}},"/api/agent/homeowners/fix-issues-email":{"post":{"description":"Use this when a delegated homeowners request is still in `needs_more_info` and you want Coverage Cat itself to email the homeowner a direct sign-in link to the remaining issues. The response also includes `homeowner_fix_issues_request_login_url`, which is the safer pass-through link if you need to continue the same handoff in chat.\n","operationId":"send_delegated_homeowners_fix_issues_email","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"uid":{"description":"Delegated homeowners request UID.","type":"string"}},"required":["uid"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeownersFixIssuesEmailResponse"}}},"description":"Coverage Cat queued the fix-issues email for this delegated homeowners intake.","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, sandbox request, or no email/fix-issues route available 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"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid or missing API key.","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"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"The request used a shared key instead of an operator-issued key.","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":"Unknown delegated homeowners intake for this operator.","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 failed authentication attempts or delegated-agent 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"}}}},"security":[{"agent_api_key":[]}],"summary":"Email the homeowner a secure sign-in link to the delegated homeowners fix-issues flow.","x-codeSamples":[{"label":"POST /api/agent/homeowners/fix-issues-email","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/homeowners/fix-issues-email \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-homeowners-fix-issues-email\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"uid\": \"homeowners-req-123\"\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"uid\": \"homeowners-req-123\"\n};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/homeowners/fix-issues-email\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-homeowners-fix-issues-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    \"uid\": \"homeowners-req-123\"\n}\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/homeowners/fix-issues-email\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-homeowners-fix-issues-email\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":true}},"/api/agent/homeowners/quotes":{"post":{"description":"Use this endpoint as the primary operator-side enrichment loop for delegated homeowners purchase. Omit `uid` to create a new intake. Reuse the returned `uid` on every follow-up call. Start with the fullest intake patch you can assemble from approved operator-side context, and for any non-user-confirmed home value include matching `intake.home[].field_estimates` metadata. Treat `credit_check_authorized` as the real homeowner's explicit authorization for Coverage Cat's soft credit pull on the assembled application. If the operator already collected that exact consent separately, a complete first create call may include `credit_check_authorized: true`. Otherwise hold it back until the homeowner has reviewed the assembled application and explicitly authorized the soft credit pull. If the only remaining `missing_fields` entry is `credit_check_authorized`, render that one-time review step from your current application summary, then resend the same `uid` with `credit_check_authorized: true`. Do not break the intended second turn into a standalone current-policy-expiration question; if `policy_expire` is the remaining review gap, Coverage Cat can carry an estimated `policy_expire` value two months from today into that same review step. If `status` is `needs_more_info`, keep filling the returned `missing_fields` behind the scenes from your own systems first and only escalate to the human after approved context is exhausted. When Coverage Cat returns `homeowner_fix_issues_request_login_url`, share that safe sign-in request page if you want the homeowner to complete the remaining items in Coverage Cat's GUI. If `status` is `pending_quotes`, poll this same endpoint with the same `uid`. If `status` is `quoted`, summarize the returned offers and optionally share `homeowner_quotes_request_login_url`, where the homeowner can request their own login link before reviewing any unconfirmed estimated home answers and finishing bind in Coverage Cat's consumer portal. Set `sandbox: true` only on the first create call when you want mocked delegated homeowners test data instead of live customer email or carrier traffic.\n","operationId":"quote_delegated_homeowners_application","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeownersQuotesRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeownersQuotesResponse"}}},"description":"Current delegated homeowners 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"}}},"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeownersQuotesResponse"}}},"description":"Delegated homeowners intake accepted and submitted. Poll the status URL or resend the same uid until the response becomes quoted.","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 intake patch or malformed 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 or missing API key.","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"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"The request used a shared key instead of an operator-issued key.","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":"Unknown delegated homeowners intake for this operator.","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 failed authentication attempts or delegated-agent 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"}}}},"security":[{"agent_api_key":[]}],"summary":"Create, update, submit, or poll a delegated homeowners intake in a single operator-authenticated loop.","x-codeSamples":[{"label":"POST /api/agent/homeowners/quotes","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/homeowners/quotes \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-homeowners-quotes\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"intake\": {\n    \"email\": \"taylor@example.test\",\n    \"full_name\": \"Taylor Example\",\n    \"home\": [\n      {\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}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"intake\": {\n    \"email\": \"taylor@example.test\",\n    \"full_name\": \"Taylor Example\",\n    \"home\": [\n      {\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};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/homeowners/quotes\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-homeowners-quotes\",\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    \"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://www.coveragecat.com/api/agent/homeowners/quotes\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-homeowners-quotes\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":true}},"/api/agent/key/confirm":{"post":{"description":"Exchanges the emailed verification code for an operator-scoped bearer token, creating or updating the operator registration details in the same step.","operationId":"confirm_agent_operator_otp","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentKeyConfirmRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentKeyResponse"}}},"description":"Operator key issued or rotated.","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":"Missing fields or invalid request shape.","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 or expired code.","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"}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Registration details failed validation.","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 confirmation attempts.","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":[],"summary":"Confirm the emailed code and receive a bearer token.","x-codeSamples":[{"label":"POST /api/agent/key/confirm","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/key/confirm \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"email\": \"operator@example.test\",\n  \"otp\": \"123456\"\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"email\": \"operator@example.test\",\n  \"otp\": \"123456\"\n};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/key/confirm\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\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    \"email\": \"operator@example.test\",\n    \"otp\": \"123456\"\n}\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/key/confirm\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":false}},"/api/agent/key/request":{"post":{"description":"Starts the delegated-agent auth bootstrap flow by emailing a short-lived one-time verification code to the supplied operator address. Use this before calling `/api/agent/key/confirm`.","operationId":"request_agent_operator_otp","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentKeyRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentKeyResponse"}}},"description":"Confirmation code sent.","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.","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 OTP requests for this email.","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":[],"summary":"Email a 6-digit operator confirmation code.","x-codeSamples":[{"label":"POST /api/agent/key/request","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/key/request \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"email\": \"operator@example.test\"\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"email\": \"operator@example.test\"\n};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/key/request\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\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    \"email\": \"operator@example.test\"\n}\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/key/request\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":false}},"/api/agent/key/rotate":{"post":{"description":"Invalidates the caller's current operator bearer token and returns a fresh replacement for the same operator profile without changing any registration metadata.","operationId":"rotate_agent_operator_key","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentKeyResponse"}}},"description":"Key rotated 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"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing or invalid bearer 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"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Shared environment keys are not supported here.","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 failed authentication attempts or delegated-agent 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"}}}},"security":[{"agent_api_key":[]}],"summary":"Rotate the current operator-issued bearer token.","x-codeSamples":[{"label":"POST /api/agent/key/rotate","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/key/rotate \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-key-rotate\""},{"label":"fetch","lang":"JavaScript","source":"const response = await fetch(\"https://www.coveragecat.com/api/agent/key/rotate\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-key-rotate\"\n  }\n});\nconst data = await response.json();\nconsole.log(data);"},{"label":"requests","lang":"Python","source":"import requests\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/key/rotate\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-key-rotate\"\n    },\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":false}},"/api/agent/tools/batch":{"post":{"description":"Batch the calculator and homeowners-agent-finder APIs into one authenticated call when an agent needs many independent read-only results without looping over individual endpoints.","operationId":"run_read_only_tools_batch","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolBatchRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolBatchResponse"}}},"description":"Batch completed. Individual operations may still carry per-item errors.","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 batch request shape.","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 or missing operator bearer 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"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many failed authentication attempts or delegated-agent 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"}}}},"security":[{"agent_api_key":[]}],"summary":"Execute many read-only Coverage Cat tool operations in one request.","x-codeSamples":[{"label":"POST /api/agent/tools/batch","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/tools/batch \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-tools-batch\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"operations\": [\n    {\n      \"id\": \"home-1\",\n      \"input\": {\n        \"home_sqft\": 1800,\n        \"zip\": \"90210\"\n      },\n      \"tool\": \"home_calculator\"\n    }\n  ]\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"operations\": [\n    {\n      \"id\": \"home-1\",\n      \"input\": {\n        \"home_sqft\": 1800,\n        \"zip\": \"90210\"\n      },\n      \"tool\": \"home_calculator\"\n    }\n  ]\n};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/tools/batch\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-tools-batch\",\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    \"operations\": [{\n    \"id\": \"home-1\",\n    \"input\": {\n    \"home_sqft\": 1800,\n    \"zip\": \"90210\"\n},\n    \"tool\": \"home_calculator\"\n}]\n}\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/tools/batch\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-tools-batch\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":false}},"/api/agent/tools/homeowners-agents/search":{"post":{"description":"Searches Coverage Cat's public California and Texas homeowners-agent datasets by ZIP and requested insurance lines, returning matching agent or agency records plus provenance and dataset freshness metadata.","operationId":"search_homeowners_agents","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeownersAgentFinderRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorResponse"}}},"description":"Calculator result.","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 calculator input.","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 or missing API key.","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":"Calculator/tool request rate limit exceeded.","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":[{"agent_api_key":[]}],"summary":"Search licensed homeowners agent records in California or Texas by ZIP and insurance lines.","x-codeSamples":[{"label":"POST /api/agent/tools/homeowners-agents/search","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/tools/homeowners-agents/search \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-tools-homeowners-agents-search\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"lines\": [\n    \"homeowners\"\n  ],\n  \"zip\": \"94107\"\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"lines\": [\n    \"homeowners\"\n  ],\n  \"zip\": \"94107\"\n};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/tools/homeowners-agents/search\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-tools-homeowners-agents-search\",\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    \"lines\": [\"homeowners\"],\n    \"zip\": \"94107\"\n}\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/tools/homeowners-agents/search\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-tools-homeowners-agents-search\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":false}},"/api/agent/umbrella/attach":{"post":{"description":"Accepts a base64-encoded document (PDF or image) and attaches it to the intake as a declarations page. Use type \"declarations\" for a home/renters declarations page and \"auto_declarations\" for an auto declarations page. If both the home and auto declarations are already available, prefer one attach call with `attachments[]` so the shopper only has to approve one upload turn. Call this only after the user has selected a Monoline or Markel offer and the delegated session is in bind or post-select checkout. Sandbox delegated umbrella sessions reject this endpoint with `sandbox_unsupported`.\n","operationId":"attach_document_to_umbrella_session","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"oneOf":[{"required":["uid","content","filename","type"]},{"required":["uid","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 content (PDF or image).","format":"byte","type":"string"},"filename":{"description":"Original filename including extension (e.g. \"home_dec.pdf\").","type":"string"},"type":{"description":"\"declarations\" for a home or renters dec page; \"auto_declarations\" for an auto dec page.\n","enum":["declarations","auto_declarations"],"type":"string"}},"required":["type","filename","content"],"type":"object"},"minItems":1,"type":"array"},"content":{"description":"Base64-encoded file content (PDF or image).","format":"byte","type":"string"},"filename":{"description":"Original filename including extension (e.g. \"home_dec.pdf\").","type":"string"},"sandbox":{"description":"Optional sticky sandbox flag. Sandbox delegated umbrella sessions currently reject `attach` with `sandbox_unsupported`; this field is accepted so a client carrying the same request envelope does not fail schema validation first.\n","type":"boolean"},"type":{"description":"\"declarations\" for a home or renters dec page; \"auto_declarations\" for an auto dec page.\n","enum":["declarations","auto_declarations"],"type":"string"},"uid":{"type":"string"}},"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"filename":{"description":"Server-assigned storage filename.","type":"string"},"status":{"enum":["ok"],"type":"string"},"type":{"type":"string"}},"type":"object"}}},"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 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 or missing API key.","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":"Unknown delegated umbrella session.","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":"Upload attempted before a Monoline or Markel selection 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"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many failed authentication attempts or delegated-agent 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"}}}},"security":[{"agent_api_key":[]}],"summary":"Attach a declarations page to the delegated umbrella session.","x-codeSamples":[{"label":"POST /api/agent/umbrella/attach","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/umbrella/attach \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-umbrella-attach\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"content\": \"JVBERi0xLjQKJcTl8uXrp\",\n  \"filename\": \"auto-dec.pdf\",\n  \"type\": \"declarations\",\n  \"uid\": \"umbrella-req-123\"\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"content\": \"JVBERi0xLjQKJcTl8uXrp\",\n  \"filename\": \"auto-dec.pdf\",\n  \"type\": \"declarations\",\n  \"uid\": \"umbrella-req-123\"\n};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/umbrella/attach\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-umbrella-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    \"content\": \"JVBERi0xLjQKJcTl8uXrp\",\n    \"filename\": \"auto-dec.pdf\",\n    \"type\": \"declarations\",\n    \"uid\": \"umbrella-req-123\"\n}\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/umbrella/attach\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-umbrella-attach\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":false}},"/api/agent/umbrella/bind":{"post":{"description":"Use this after `select` returns `needs_more_info_to_bind`, or when `status` says `ready_to_finalize`. Send only the fields from the current bind-stage `next_question`. When all bind details are present, Coverage Cat will continue the normal choose flow and the agent should keep the user updated by polling `status`. Successful post-choose responses include `offers_url` for the secure Coverage Cat offers page, and for Monoline/Markel may also include declarations-upload or payment steps. Sandbox delegated umbrella sessions reject this endpoint with `sandbox_unsupported`.\n","operationId":"continue_delegated_umbrella_bind","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BindRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BindResponse"}}},"description":"Bind continuation 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 or malformed 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 or missing API key.","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":"Unknown delegated umbrella session.","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":"No offer is pending bind continuation, or the bind state changed.","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 failed authentication attempts or delegated-agent 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"}}}},"security":[{"agent_api_key":[]}],"summary":"Continue the selected-offer bind flow in chat until the offer is chosen and carrier follow-up takes over.","x-codeSamples":[{"label":"POST /api/agent/umbrella/bind","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/umbrella/bind \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-umbrella-bind\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"intake\": {\n    \"current_auto_coverages\": \"250_500_100\"\n  },\n  \"uid\": \"umbrella-req-123\"\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"intake\": {\n    \"current_auto_coverages\": \"250_500_100\"\n  },\n  \"uid\": \"umbrella-req-123\"\n};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/umbrella/bind\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-umbrella-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    \"uid\": \"umbrella-req-123\"\n}\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/umbrella/bind\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-umbrella-bind\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":true}},"/api/agent/umbrella/draft":{"post":{"description":"Use this endpoint as the primary operator-side enrichment loop. Search allowed context sources first and send the fullest application you can, including `field_estimates` metadata for inferred values. If `status` is `needs_more_info`, keep working behind the scenes with `pending_fields`, `suggested_values`, and `next_question`; do not turn that state into a user questionnaire unless your product intentionally falls back to one. If you exhaust approved context and still cannot reach `ready_for_review`, stop and escalate rather than silently presenting a partial review page. If `status` is `ready_for_review`, render the formatted `review` JSON with `field_estimates` paths marked with `*`, include the short note `* = estimated` once above and once below the review list, and do not prefix every estimated line with `[Estimated]`. Preliminary umbrella quotes do not require credit consent; Coverage Cat collects the soft-credit pull authorization at `select`. Set `sandbox: true` only on the first create call when you want mocked delegated umbrella test data instead of live customer email or carrier traffic.\n","operationId":"prepare_delegated_umbrella_application","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftResponse"}}},"description":"Current delegated umbrella 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 intake patch or malformed 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 or missing API key.","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":"Unknown delegated umbrella session.","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 failed authentication attempts or delegated-agent 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"}}}},"security":[{"agent_api_key":[]}],"summary":"Create or update a delegated umbrella session, continue hidden enrichment, and return the single review page when ready.","x-codeSamples":[{"label":"POST /api/agent/umbrella/draft","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/umbrella/draft \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-umbrella-draft\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"intake\": {\n    \"current_auto_coverages\": \"250_500_100\",\n    \"desired_coverage_limit\": 2000000,\n    \"full_name\": \"Taylor Example\",\n    \"zip\": \"94107\"\n  }\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"intake\": {\n    \"current_auto_coverages\": \"250_500_100\",\n    \"desired_coverage_limit\": 2000000,\n    \"full_name\": \"Taylor Example\",\n    \"zip\": \"94107\"\n  }\n};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/umbrella/draft\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-umbrella-draft\",\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    \"desired_coverage_limit\": 2000000,\n    \"full_name\": \"Taylor Example\",\n    \"zip\": \"94107\"\n}\n}\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/umbrella/draft\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-umbrella-draft\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":false}},"/api/agent/umbrella/quotes":{"post":{"description":"Only call this after the user has reviewed the latest review JSON and approved or corrected any estimated values. Preliminary umbrella quotes do not require credit consent; Coverage Cat collects the soft-credit pull authorization at `select`. If the review token is stale or the application changed, go back to the draft step and obtain a fresh review token. Once a session has moved into bind or post-select checkout, do not replay an old review token through this endpoint. Sandbox sessions return mocked quote data and stop at the `status` endpoint rather than continuing into select/bind.\n","operationId":"quote_delegated_umbrella_application","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponse"}}},"description":"Offers or a no-quotes response.","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":"Missing confirmation or malformed 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 or missing API key.","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":"Unknown delegated umbrella session.","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":"Review state is stale or more info is still 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"}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many failed authentication attempts or delegated-agent 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"}}}},"security":[{"agent_api_key":[]}],"summary":"Confirm the review page and return preliminary offers.","x-codeSamples":[{"label":"POST /api/agent/umbrella/quotes","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/umbrella/quotes \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-umbrella-quotes\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"uid\": \"umbrella-req-123\"\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"uid\": \"umbrella-req-123\"\n};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/umbrella/quotes\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-umbrella-quotes\",\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    \"uid\": \"umbrella-req-123\"\n}\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/umbrella/quotes\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-umbrella-quotes\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":true}},"/api/agent/umbrella/select":{"post":{"description":"Pass the selected `selection_token`, a final user confirmation, and the `credit_consent` block collected from the real user. Coverage Cat requires the affirmative Yes to the soft-credit pull before binding a chosen offer; if it is missing or declined the response is `credit_consent_required` with the prompt to render. Otherwise Coverage Cat will either return the next bind-stage `next_question` to keep collecting required details in chat, or it will continue the standard post-choose workflow and tell the agent to keep polling `status` in chat. For Monoline and Markel, the post-choose workflow may require declarations uploads first; once those 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. Successful post-choose responses include `offers_url`, and may include `required_upload_types` or a secure `payment_url`. Sandbox delegated umbrella sessions reject this endpoint with `sandbox_unsupported`.\n","operationId":"select_delegated_umbrella_offer","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectResponse"}}},"description":"Offer selection accepted.","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 or invalid selection 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"}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid or missing API key.","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":"Unknown delegated umbrella session.","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":"Offer selection is stale and the user must review fresh offers.","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 failed authentication attempts or delegated-agent 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"}}}},"security":[{"agent_api_key":[]}],"summary":"Confirm the user's selection, capture credit consent, and start the chat-native bind continuation flow.","x-codeSamples":[{"label":"POST /api/agent/umbrella/select","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/umbrella/select \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-umbrella-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_token\": \"sel_demo\",\n  \"uid\": \"umbrella-req-123\"\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"credit_consent\": {\n    \"answer\": \"Yes\",\n    \"collected_from_user\": true\n  },\n  \"selection_token\": \"sel_demo\",\n  \"uid\": \"umbrella-req-123\"\n};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/umbrella/select\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-umbrella-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_token\": \"sel_demo\",\n    \"uid\": \"umbrella-req-123\"\n}\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/umbrella/select\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-umbrella-select\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":true}},"/api/agent/umbrella/status":{"post":{"description":"Returns the current chat-manageable state for the delegated umbrella session, including quote selection, bind-stage follow-up questions, declarations-upload, declarations-review, payment, waiting-on-carrier, info-requested, blocked, and bound states. Chosen and waiting responses may include `offers_url` so the user can review the selected offer on Coverage Cat without leaving the normal workflow. If the session is back at `ready_for_review`, render the same single review page described on the draft endpoint. When `documents_pending_review` includes `poll_after_seconds`, wait that long before polling again unless the user asks for an update sooner. PaymentTransition: follow `chosen -> documents_needed -> documents_pending_review -> payment_needed -> waiting_on_carrier -> bound`. For Monoline and Markel, `documents_pending_review` means Coverage Cat has the declarations upload on file and is processing the chosen offer; `payment_needed` usually appears within about 5-10 minutes and includes a secure `payment_url`. Sandbox delegated umbrella sessions use this endpoint to rehearse the mocked draft/review/quote loop after offers are returned.\n","operationId":"get_delegated_umbrella_status","parameters":[{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"sandbox":{"description":"Optional mocked-mode flag. Once a delegated umbrella session is created with `sandbox: true`, later `status` calls may omit it because the uid stays sandbox-scoped.\n","type":"boolean"},"uid":{"type":"string"}},"required":["uid"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}},"description":"Current delegated umbrella 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 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 or missing API key.","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":"Unknown delegated umbrella session.","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 failed authentication attempts or delegated-agent 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"}}}},"security":[{"agent_api_key":[]}],"summary":"Poll the delegated umbrella session so the user can stay in chat.","x-codeSamples":[{"label":"POST /api/agent/umbrella/status","lang":"cURL","source":"curl -X POST https://www.coveragecat.com/api/agent/umbrella/status \\\n  -H \"Coverage-Cat-API-Version: v1\" \\\n  -H \"Authorization: Bearer ccop_demo_operator_key\" \\\n  -H \"Idempotency-Key: demo-post-api-agent-umbrella-status\" \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- <<'JSON'\n{\n  \"uid\": \"umbrella-req-123\"\n}\nJSON"},{"label":"fetch","lang":"JavaScript","source":"const payload = {\n  \"uid\": \"umbrella-req-123\"\n};\n\nconst response = await fetch(\"https://www.coveragecat.com/api/agent/umbrella/status\", {\n  method: \"POST\",\n  headers: {\n    \"Coverage-Cat-API-Version\": \"v1\",\n    \"Authorization\": \"Bearer ccop_demo_operator_key\",\n    \"Idempotency-Key\": \"demo-post-api-agent-umbrella-status\",\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    \"uid\": \"umbrella-req-123\"\n}\n\nresponse = requests.post(\n    \"https://www.coveragecat.com/api/agent/umbrella/status\",\n    headers={\n        \"Coverage-Cat-API-Version\": \"v1\",\n        \"Authorization\": \"Bearer ccop_demo_operator_key\",\n        \"Idempotency-Key\": \"demo-post-api-agent-umbrella-status\",\n        \"Content-Type\": \"application/json\"\n    },\n    json=payload,\n    timeout=30,\n)\n\nprint(response.json())"}],"x-coverage-cat-surface":"operator","x-openai-isConsequential":false}},"/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. 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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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. 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://www.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://www.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://www.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. 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://www.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://www.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://www.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}/bind":{"post":{"description":"Use this only after the consumer umbrella follow-up returns `needs_more_info_to_bind` or `ready_to_finalize`. Authenticate with `Authorization: Bearer <intake_access_token>` from the latest consumer-prefill follow-up response, then send only the current bind-stage `next_question` fields inside `intake`.","operationId":"continue_consumer_umbrella_bind","parameters":[{"$ref":"#/components/parameters/IntakeUid"},{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumerUmbrellaBindRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeAssistantResponse"}}},"description":"Updated consumer 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":"No umbrella offer is currently selected 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 umbrella bind follow-up in chat.","x-codeSamples":[{"label":"POST /api/intake/{uid}/bind","lang":"cURL","source":"curl -X POST https://www.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://www.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://www.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. 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, it exposes 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://www.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://www.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://www.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. 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, use the returned `payment_url` browser fallback and preserve the specific fallback reason. 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://www.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://www.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://www.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 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 umbrella 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_umbrella_policy","parameters":[{"$ref":"#/components/parameters/IntakeUid"},{"$ref":"#/components/parameters/CoverageCatApiVersion"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeAssistantResponse"}}},"description":"Current 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 an 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 umbrella policy record and servicing history.","x-codeSamples":[{"label":"GET /api/intake/{uid}/policy","lang":"cURL","source":"curl -X GET https://www.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://www.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://www.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 umbrella offers with `selection_token`. Authenticate with `Authorization: Bearer <intake_access_token>` from the latest consumer-prefill follow-up response. Coverage Cat collects consent for a soft credit check here, after the user chooses an offer. If an 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 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 such as `needs_more_info_to_bind`, `documents_needed`, `payment_needed`, or `waiting_on_carrier` rather than collapsing back into a coarse quoted bucket. For Monoline and Markel, Coverage Cat may require declarations uploads first; once those 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_umbrella_offer","parameters":[{"$ref":"#/components/parameters/IntakeUid"},{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumerUmbrellaSelectRequest"}}},"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 umbrella offer on the consumer direct-follow-up path.","x-codeSamples":[{"label":"POST /api/intake/{uid}/select","lang":"cURL","source":"curl -X POST https://www.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://www.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://www.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 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_umbrella_policy_service","parameters":[{"$ref":"#/components/parameters/IntakeUid"},{"$ref":"#/components/parameters/CoverageCatApiVersion"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumerUmbrellaServiceRequest"}}},"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 an 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 umbrella policy-support request.","x-codeSamples":[{"label":"POST /api/intake/{uid}/service","lang":"cURL","source":"curl -X POST https://www.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://www.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://www.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}}},"security":[],"servers":[{"description":"Current request origin","url":"https://www.coveragecat.com"}]}