---
title: "Close a conversation"
method: POST
path: "/conversations/{id}/close"
tags: ["Chat"]
---

# Close a conversation

`POST /conversations/{id}/close`

## Request

- Base URL: `https://api.hypamoon.com/api/v1`
- URL: `https://api.hypamoon.com/api/v1/conversations/{id}/close`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://app.hypamoon.com/oauth/authorize`, token URL `https://api.hypamoon.com/oauth/token`, scopes: `chat:write`)

Closes the conversation: it accepts no more messages, and the summary follows as conversation.summary.ready and in GET /conversations/{id}. Without a customer message there is no summary. Closing an already closed conversation returns it unchanged. A conversation closes automatically after 30 minutes without messages.

## Path parameters

- `id` string, uuid, required

## Response `200`

The conversation, closed.

- Conversation: 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.

## Other responses

- `401`: Unauthorized: unauthorized, missing_api_key, invalid_api_key, api_key_revoked, project_deleted.
- `403`: Forbidden: project_not_enabled, key_mode_mismatch, missing_scope, verification_required.
- `404`: Not Found: not_found.
- `429`: Too Many Requests: rate_limited.
- `500`: Internal Server Error: internal_error.
- `503`: Service Unavailable: service_unavailable.

---

[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)
