---
title: "The summary of a chat conversation is ready"
method: POST
path: "conversation.summary.ready"
tags: ["Webhooks"]
---

# The summary of a chat conversation is ready

`POST conversation.summary.ready` (webhook)

We POST this event to every active endpoint subscribed to it (webhook.test only to the endpoint you test). Respond with any 2xx within ten seconds; anything else is retried with backoff for up to 24 hours, in eight attempts. The event id stays the same on retries, so you can skip duplicates.

## Headers

- `Hypamoon-Signature` string, required

## Payload

- ConversationSummaryReadyEvent: Sent when the summary of a closed chat conversation is ready. Without the messages: fetch those with GET /conversations/{data.conversation.id}.
  - `id` string, required: The id of the event, evt_ plus 32 hex characters. It stays the same on retries.
  - `type` 'conversation.summary.ready', required
  - `created_at` string, date-time, required: When the event happened.
  - `data` object, required
    - `conversation` Conversation, required: A chat conversation with the assistant. The same shape in every response and in conversation.summary.ready.
      - `id` string, uuid, required: The id of the conversation.
      - `channel` 'chat' | 'widget', required: The channel: chat when your app started it with an API key, widget when a visitor started it in the chat widget on a website (public chat token).
      - `status` 'open' | 'closed', required: open: takes messages. closed: takes no more messages; the summary follows.
      - `reference` string, nullable, required: Your own id for this conversation, as you sent it.
      - `metadata` object, required: Your metadata, as you sent it. The assistant never sees it.
      - `customer` object, required: What your app told us about the customer when the conversation started.
        - `name` string, nullable, required
        - `phone` string, nullable, required
        - `email` string, nullable, required
      - `language` string, required: The language the assistant opened in (nl, en, de, fr or es). It replies in the customer's language when that is one of its languages.
      - `turns` integer, required: Customer messages answered so far.
      - `max_turns` integer, required: After this many turns the conversation closes (close_reason turn_limit).
      - `created_at` string, date-time, required: When the conversation started.
      - `last_message_at` string, date-time, nullable, required: When the last message was sent.
      - `closed_at` string, date-time, nullable, required: When the conversation closed.
      - `close_reason` 'closed' | 'inactive' | 'turn_limit' | 'null', nullable, required: closed: POST /conversations/{id}/close. inactive: no message for 30 minutes. turn_limit: max_turns reached.
      - `has_summary` boolean, required: Whether the summary is ready. Fetch it with GET /conversations/{id}.
      - `summary_ready_at` string, date-time, nullable, required: When the summary was ready.
      - `test` boolean, required: true for a conversation in test mode (hm_test_): real replies, free, with a low daily limit.
    - `summary` Summary, required: The summary of a call.
      - `text` string, nullable, required: The summary in a few sentences.
      - `topics` string[], required: What the call was about.
      - `sentiment` 'positive' | 'neutral' | 'negative' | 'null', nullable, required: The mood of the caller.
      - `action_items` string[], required: What someone has to do after this call.
      - `next_step` string, nullable, required: The agreed next step, if any.

## Acknowledgement `2XX`

Received. Any 2xx counts.

---

[API](https://skmtc.dev/hypamoon/apis/hypamoon-api.md) · [All operations](https://skmtc.dev/hypamoon/apis/hypamoon-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hypamoon/apis/hypamoon-api/revisions/9f0b90004c06?raw)
