{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/coveragecat-com/json-schema/coveragecat-com-draft-request-schema.json",
  "title": "DraftRequest",
  "x-generated": "2026-11-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/coveragecat-com-agent-openapi.yml#/components/schemas/DraftRequest",
  "additionalProperties": false,
  "properties": {
    "contact_preferences": {
      "additionalProperties": false,
      "description": "Optional service SMS/call choices. Offer alongside an existing review when useful; do not add a required purchase step. Omission leaves choices unchanged. Marketing is disabled.",
      "properties": {
        "service_call": {
          "additionalProperties": false,
          "description": "Optional service contact choice for the phone number already on file; never a purchase requirement or marketing authorization.",
          "properties": {
            "answer": {
              "description": "The customer's own Yes, No or Revoke answer to the corresponding service disclosure.",
              "enum": [
                "Yes",
                "No",
                "Revoke"
              ],
              "type": "string"
            },
            "collected_from_user": {
              "const": true,
              "description": "The customer personally answered this service contact question.",
              "type": "boolean"
            },
            "disclosure_hash": {
              "description": "text_hash from the corresponding contact_preferences_disclosures entry.",
              "type": "string"
            },
            "disclosure_version": {
              "description": "Version from the corresponding contact_preferences_disclosures entry.",
              "type": "string"
            },
            "presentation_reference": {
              "description": "Optional opaque conversation or message reference; do not include message contents or personal information.",
              "maxLength": 200,
              "type": "string"
            },
            "presented_at": {
              "description": "RFC 3339 timestamp from the assistant runtime for when the complete disclosure was shown. It must be within the prior 24 hours and no more than five minutes in the future.",
              "format": "date-time",
              "type": "string"
            },
            "shown_to_user": {
              "const": true,
              "description": "Attests that the complete returned disclosure text was presented verbatim before the shopper answered.",
              "type": "boolean"
            }
          },
          "required": [
            "answer",
            "collected_from_user",
            "shown_to_user",
            "disclosure_version",
            "disclosure_hash",
            "presented_at"
          ],
          "type": "object"
        },
        "service_sms": {
          "additionalProperties": false,
          "description": "Optional service contact choice for the phone number already on file; never a purchase requirement or marketing authorization.",
          "properties": {
            "answer": {
              "description": "The customer's own Yes, No or Revoke answer to the corresponding service disclosure.",
              "enum": [
                "Yes",
                "No",
                "Revoke"
              ],
              "type": "string"
            },
            "collected_from_user": {
              "const": true,
              "description": "The customer personally answered this service contact question.",
              "type": "boolean"
            },
            "disclosure_hash": {
              "description": "text_hash from the corresponding contact_preferences_disclosures entry.",
              "type": "string"
            },
            "disclosure_version": {
              "description": "Version from the corresponding contact_preferences_disclosures entry.",
              "type": "string"
            },
            "presentation_reference": {
              "description": "Optional opaque conversation or message reference; do not include message contents or personal information.",
              "maxLength": 200,
              "type": "string"
            },
            "presented_at": {
              "description": "RFC 3339 timestamp from the assistant runtime for when the complete disclosure was shown. It must be within the prior 24 hours and no more than five minutes in the future.",
              "format": "date-time",
              "type": "string"
            },
            "shown_to_user": {
              "const": true,
              "description": "Attests that the complete returned disclosure text was presented verbatim before the shopper answered.",
              "type": "boolean"
            }
          },
          "required": [
            "answer",
            "collected_from_user",
            "shown_to_user",
            "disclosure_version",
            "disclosure_hash",
            "presented_at"
          ],
          "type": "object"
        }
      },
      "type": "object"
    },
    "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": "#/$defs/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",
  "$defs": {
    "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"
    }
  }
}