---
title: "Call Summary Webhook (Legacy / Raw Format)"
method: POST
path: "call-summary-legacy"
tags: ["Webhooks"]
---

# Call Summary Webhook (Legacy / Raw Format)

`POST call-summary-legacy` (webhook)

Legacy call summary payload used by select partners (e.g., LeanTaas / Pinnacle Orthopedics). Hippocratic AI POSTs this JSON after each completed call.

Unlike the standard `call-summary` webhook (which delivers a flat, versioned `{version, call_summary}` envelope), this payload is split across a top-level `call` object (call metadata, dispositions) and `json_summary` object (clinical summary). Three rendered representations of the summary — `pdf_summary` (base64 PDF), `html_summary`, `txt_summary` — are also included.

**Retry Policy:** If the webhook delivery fails (non-2xx response or network error), Hippocratic AI will automatically retry the delivery 3-5 times with 30-minute intervals between attempts.

**Compatibility**
- New optional fields and enum values may appear without notice. Partners MUST ignore unknown fields and unknown enum values.
- Field removals, type changes, and enum-value removals are breaking and will be coordinated in advance.
- Optional fields are typically sent as `""` / `[]` rather than omitted. Treat both as "no value".
- A partner receives exactly one of the two contracts (`call-summary` or `call-summary-legacy`). Confirm with your DA. Payloads are not interchangeable.
- Deliveries may be retried after non-2xx responses. `call.call_id` is stable across retries — deduplicate on it.

## Payload

- object
  - `call` object, required: Call metadata and dispositions for this interaction.
    - `call_id` string, uuid, required: Unique identifier for the call.
    - `call_type` 'telephone' | 'web_chat' | 'web_voice' | 'autonomous': Call session type.
    - `call_status` 'call_initiated' | 'call_in_progress' | 'call_completed' | 'call_errored' | 'call_third_party_interrupt' | 'call_failed_to_connect' | 'call_failed_with_error_code' | 'call_started' | 'call_dropped' | 'call_restarted' | 'call_connected' | 'call_finished', nullable: Terminal call status.
    - `call_direction` string, nullable: Direction of the call (e.g., "inbound", "outbound").
    - `encounter_id` string, uuid: Identifier for the communication encounter.
    - `initiated_by_patient` boolean: True if the patient initiated the call (inbound).
    - `call_purpose` string: Free-text purpose configured on the script.
    - `created_at` string, date-time: ISO-8601 UTC timestamp when the call record was created.
    - `started_at` string, date-time, nullable: ISO-8601 UTC timestamp when the call started.
    - `ended_at` string, date-time, nullable: ISO-8601 UTC timestamp when the call ended.
    - `call_channel` string: Underlying delivery channel (e.g., "twilio", "web", "whatsapp").
    - `created_by_user_id` string, uuid: Internal user ID that created the call record.
    - `duration` number, float, nullable: Call duration in seconds.
    - `call_host_url_base` string, nullable: Base URL of the host that handled the call.
    - `call_end_reason` 'unknown' | 'user_ended_call_regular' | 'user_ended_call_disconnect' | 'user_ended_call_busy' | 'user_ended_chat_logged_out' | 'user_ended_chat_expired' | 'system_ended_call_regular' | 'system_ended_call_emergency_before_dob' | 'system_ended_call_error' | 'system_ended_call_timeout' | 'system_ended_call_kickout' | 'system_ended_call_identity_verification' | 'system_ended_call_dob_verification' | 'system_ended_call_voicemail' | 'system_ended_call_redteam' | 'system_ended_call_other_party_disconnect' | 'system_ended_call_failed_to_connect' | 'system_ended_call_transfer_fallback_initiated' | 'system_ended_call_transfer_failed' | 'system_ended_call_delivered_voicemail' | 'system_ended_call_ivr_terminal_loop' | 'system_ended_call_ivr_voicemail_detected' | 'system_ended_call_ivr_on_hold_timeout', nullable: Reason the call ended.
    - `language` string, nullable: ISO-639-1 language code used in the call (e.g., "en", "es").
    - `phone_number` string, nullable: Patient phone number. Typically null; canonical phone is `json_summary.phone_number`.
    - `telephony_sid` string, nullable: Telephony provider call SID (e.g., Twilio CallSid).
    - `telephony_account_sid` string, nullable: Telephony provider account SID.
    - `telephony_provider` 'twilio' | 'telnyx' | 'unknown', nullable: Telephony provider.
    - `customer_patient_id` string: Partner-provided patient identifier (e.g., MRN).
    - `dispositions` object[]: Final call disposition(s). Typically a single entry.
      - `call_disposition_id` string, uuid
      - `call_id` string, uuid
      - `created_by_user_id` string, uuid
      - `disposition` 'call_completed' | 'call_hung_up' | 'no_answer' | 'failed_verification' | 'call_failed' | 'immediate_hang_up': How the call concluded.
      - `call_outcome` 'successful' | 'transcript_review_required' | 'follow_up_required' | 'no_action' | 'transferred' | 'transfer_failed' | 'patient_hung_up_during_transfer' | 'supervised', nullable: Post-call outcome classification.
      - `custom_call_success_evaluation_status` 'not_evaluated' | 'criteria_not_defined' | 'errored' | 'evaluated', nullable: Status of the partner-defined success criteria evaluation.
      - `custom_call_success` boolean, nullable: True if the call met the partner-defined success criteria.
      - `created_at` string, date-time
  - `json_summary` object, required: Clinical summary of the call (patient demographics, conversation summary, structured outputs).
    - `call_id` string, uuid, nullable: Same call_id as `call.call_id`.
    - `patient_name` string: Patient name as a single string, format "Last, First".
    - `date_of_birth` string: Patient DOB. Format varies by partner script — typically YYYY-MM-DD.
    - `datetime_of_call` string: Human-readable local datetime of the call (timezone-aware string, e.g., "2025-08-20 07:38 PM EDT").
    - `physician_name` string: Physician associated with the encounter (may be empty).
    - `call_purpose` string: Free-text purpose configured on the script.
    - `conversation_summary` string, nullable: Free-text summary of the conversation.
    - `call_disposition` 'call_completed' | 'call_hung_up' | 'no_answer' | 'failed_verification' | 'call_failed' | 'immediate_hang_up', nullable: Disposition mirrored from `call.dispositions[].disposition`.
    - `mrn` string, nullable: Patient MRN from the partner record.
    - `gender` 'unknown' | 'male' | 'female' | 'other' | 'transgender/him' | 'transgender/her' | 'nonbinary' | 'unspecified/they', nullable: Patient gender (FHIR-aligned).
    - `phone_number` string, nullable: Patient phone number used for the call.
    - `care_location_name` string, nullable: Clinic or care facility associated with the encounter.
    - `call_url` string, uri, nullable: Portal URL where the call can be reviewed.
    - `call_type` string, nullable: Shorthand for the script / use case. May be overridden by ICE for specific scripts (e.g., "preop_ortho", "preop_clearances").
    - `do_not_call` boolean, nullable: If true, downstream systems should suppress further outreach to this patient.
    - `custom_variables` object, nullable: Free-form, partner-configured. Keys and shape are not stable.
    - `medication_summaries` object[]: Medications discussed on the call.
      - `name` string: Medication name.
      - `type` string: Medication category. Typical values: "New Rx", "Old Rx", "Self-Reported".
      - `dosage` string: Free-text dosage.
      - `adherence` string: Adherence reported on the call. Typical values: "Yes", "No", "Unknown", "N/A".
      - `notes` string: Free-text notes.
    - `device_summaries` object[]: Medical devices discussed on the call.
      - `model` string: Device model.
      - `adherence` string: Adherence reported on the call. Typical values: "Adherent", "Delinquent", "N/A".
      - `measurement` string: Free-text measurement / reading.
      - `notes` string: Free-text notes.
    - `summary_question_answers` object[]: Responses to structured questions. Items where `hide_from_summary_display=true` are filtered out before delivery.
      - `section` string: Section / category where the question was asked.
      - `question` string: Display question text.
      - `answer` string: Patient's response.
      - `response_type` 'choices_yes_no_unknown' | 'choices_yes_no' | 'measurement' | 'open_ended' | 'multi_select' | 'multiple_choice' | 'mcm_general' | 'timestamp': Shape of the question/answer.
      - `choices` string[]: Available answer options for choice-based response types.
      - `external_choices` string[], nullable: External-system equivalents of `choices`.
      - `answer_indexes` integer[], nullable: Indexes into `choices` matching the patient's answer (choice-based types).
      - `external_id` string, nullable: External-system identifier for this question.
      - `variable_name` string, nullable: Internal variable name used by the script.
      - `default_value` string, nullable: Default value for the question.
      - `display_value` string, nullable: Human-friendly display value.
      - `prompt_question` string, nullable: LLM-facing prompt used to elicit the answer.
      - `notes` string, nullable: Free-text notes.
      - `hide_from_summary_display` boolean: Always false for items present in this payload (true items are filtered out).
    - `follow_up_items` string[]: Free-text follow-up actions identified during the call.
    - `kickout_summaries` object[]: Clinical escalations triggered during the call.
      - `display_name` string: Human-readable escalation name.
      - `kickout_id` string: Stable identifier for the escalation rule that fired.
      - `severity` 'in_progress' | 'white' | 'blue' | 'green' | 'yellow' | 'amber' | 'orange' | 'purple' | 'red', nullable: Triage color. `in_progress` indicates a kickout that has started but not yet been color-classified.
      - `summary` string, nullable: Generated summary of the escalation context.
      - `utp_status` string, nullable: Patient transfer status for this kickout (if applicable).
    - `form_fill_summaries` object[]: Structured form responses captured during the call (raw format — `output_value` is not unpacked).
      - `question_id` string: Stable identifier for the form question.
      - `output_value` object: Schema varies by form type. Listed subfields are guidance, not contract. Common keys: `question`, `answer`, `options`, `question_type`, `answer_indices`, `external_id`, `external_options`, `formatted_options`, `changed`, `applicable`, `skipped`, `asked`, `should_highlight`, `arbitration_status`.
      - `created_by_user_id` string, uuid, nullable: Internal user ID that captured this form answer.
      - `sort_order` integer: Display order index (0-based).
    - `schedule_engine_summaries` object[]: Appointment scheduling outputs produced during the call.
      - `output_name` string: Output identifier. Default "scheduling_summary".
      - `output_type` 'ehr_summary' | 'interjection' | 'notes' | 'mcm_summary' | 'offline_errors' | 'kickout' | 'scheduling' | 'form_fill' | 'mdr_detection' | 'adverse_event_detection' | 'call_errors' | 'escalation_reconciliation' | 'audio_summary' | 'ai_screener_detected' | 'custom_call_success' | 'analytics': Engine that produced the output.
      - `output_value` object[]: Shape varies by scheduling tool. New keys may appear with new integrations.
  - `todos_summary` object[]: Task items (todos) generated from the call. Note: key name is `todos_summary` (singular `summary`), not `todo_summaries`.
    - `todo_id` string, uuid
    - `partner_id` string, uuid
    - `action` string: Action to be taken.
    - `due_date` string, date-time: ISO-8601 UTC due date.
    - `completed_date` string, date-time, nullable: ISO-8601 UTC completion timestamp; null when not completed.
    - `priority` 'urgent' | 'high' | 'medium' | 'low': Todo priority.
    - `todo_status` 'draft' | 'pending' | 'completed' | 'archived': Todo lifecycle status.
    - `todo_type` 'unknown' | 'patient_escalation' | 'patient_escalation_failure' | 'patient_call_review' | 'patient_callback' | 'clinical_review' | 'client_follow_up' | 'escalation_case_review' | 'data_annotation': Todo category.
    - `todo_metadata` object, nullable: Free-form, varies by `todo_type`. Not stable.
    - `external_id` string, nullable: External-system identifier for this todo.
  - `pdf_summary` string, byte, nullable: Base64-encoded PDF rendering of the call summary. May be null if PDF generation failed.
  - `html_summary` string: HTML rendering of the call summary.
  - `txt_summary` string: Plain-text rendering of the call summary.

## Acknowledgement `200`

Webhook received and processed successfully

## Other responses

- `201`: Webhook received and call summary created
- `400`: Bad request - invalid payload format
- `401`: Unauthorized - invalid webhook authentication
- `500`: Internal server error processing webhook

---

[API](https://skmtc.dev/hippocraticai/apis/hippocratic-ai-agent-api-suite.md) - [All operations](https://skmtc.dev/hippocraticai/apis/hippocratic-ai-agent-api-suite/llms.txt) - [OpenAPI document](https://skmtc.dev/hippocraticai/apis/hippocratic-ai-agent-api-suite/revisions/c2472c92766c?raw)
