---
title: "Create or update a delegated umbrella session, continue hidden enrichment, and return the single review page when ready."
method: POST
path: "/api/agent/umbrella/draft"
---

# Create or update a delegated umbrella session, continue hidden enrichment, and return the single review page when ready.

`POST /api/agent/umbrella/draft`

## Request

- Base URL: `https://api.coveragecat.com`
- URL: `https://api.coveragecat.com/api/agent/umbrella/draft`
- Auth: HTTP bearer

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.

## Headers

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

## Request body

- DraftRequest
  - `field_estimates` UmbrellaFieldEstimateInput[]: 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.
    - `confidence` 'low' | 'medium' | 'high', required
    - `field` string, required: Intake dot-path for the inferred answer, such as `marital_status`, `address.zip`, or `additional_drivers.0.license_state`.
    - `source` string, required: Opaque operator-side provenance label such as `crm`, `email_thread`, `policy_declarations`, or `historical_mode`.
  - `intake` object: 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`.
  - `sandbox` boolean: 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.
  - `uid` string: Existing delegated umbrella session identifier. Omit to create a new one.

## Response `200`

Current delegated umbrella state.

- DraftResponse
  - `agent_instructions` string[]
  - `field_estimates` UmbrellaFieldEstimate[]
    - `confidence` 'low' | 'medium' | 'high'
    - `confirmed_by_user` boolean: Whether a later draft update re-sent the same value as a confirmed answer.
    - `estimated_at` string, date-time
    - `field` string: Intake dot-path for the estimated answer.
    - `review_path` string[]: Path to the same value inside the `review` object.
    - `source` string: Provenance label for the estimate.
    - `value` string: Current serialized intake value for the estimated field.
  - `known_summary` object: 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.
  - `next_question` NextQuestion
    - `display_note` string
    - `fields` QuestionField[]
      - `description` string
      - `enum` unknown[]
        - unknown
      - `format` string
      - `label` string
      - `path` string[]
      - `type` string
    - `item_index` integer, nullable
    - `prompt` string
    - `schema` object
    - `scope` string
    - `title` string
  - `pending_fields` UmbrellaPendingField[]: 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`.
    - `estimated` boolean: Whether `suggested_values` currently includes a fallback prior for this field.
    - `field` string
    - `label` string
    - `number` integer
  - `response_summary` string
  - `review` object: 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`.
  - `review_token` string: Token bound to the latest review JSON. Refresh it after every draft edit before calling quotes.
  - `sandbox` boolean: True when this delegated umbrella session is running in mocked sandbox mode.
  - `status` 'needs_more_info' | 'ready_for_review' | 'ineligible'
  - `suggested_values` object: 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.
  - `uid` string

## Other responses

- `400`: Invalid intake patch or malformed request.
- `401`: Invalid or missing API key.
- `404`: Unknown delegated umbrella session.
- `429`: Too many failed authentication attempts or delegated-agent requests. Honor the Retry-After header before retrying.

---

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