---
title: "Reply to the customer"
method: POST
path: "/support/conversations/{id}/reply"
---

# Reply to the customer

`POST /support/conversations/{id}/reply`

## Request

- Base URL: `https://api.web2wave.com/api`
- URL: `https://api.web2wave.com/api/support/conversations/{id}/reply`
- Auth: API key in header `api_key`

Sends an email to the customer from the project's "Send emails from" address (Project → Emails; 422 if it is not set),
with the reply signature appended and `{placeholders}` (`{email}`, `{user_id}`, `{project_name}` …) filled in.
The conversation becomes `open` if it was `unread` or `closed`; an unassigned conversation is assigned to the sender (client keys).

Send `multipart/form-data` with `attachments[]` to attach files (up to 10, 20 MB each). To make a retry safe, pass a
`client_key` (or an `Idempotency-Key` header): the same key within 15 minutes returns the first message instead of emailing again.
For the demo conversation the reply is stored but nothing is sent.

## Path parameters

- `id` integer, required

## Headers

- `api_key` string, required
- `X-Web2wave-Project-Id` string
- `Idempotency-Key` string

## Request body

- object
  - `body` string, required: Plain text
  - `client_key` string

## Response `201`

Sent

- object
  - `success` boolean
  - `message` SupportMessage
    - `id` integer
    - `type` 'message'
    - `direction` 'inbound' | 'outbound': `inbound` = from the customer, `outbound` = to the customer
    - `is_automated` boolean: Sent by an auto reply, follow-up or auto close
    - `automation_type` 'after_reply' | 'follow_up' | 'close', nullable
    - `sender_name` string: `User` for the customer, `System` for automatic messages, otherwise the agent's name at the time of sending
    - `sent_by_client_id` integer, nullable
    - `from_email` string
    - `to_email` string, nullable
    - `subject` string, nullable
    - `body_text` string: Plain text. For the customer's mail, converted from HTML when the mail had no text part
    - `body_html` string: Only with `include_html=1`; sanitised HTML of the customer's mail
    - `attachments` SupportAttachment[]
      - `id` integer
      - `filename` string
      - `mime_type` string, nullable
      - `size` integer: Bytes
      - `url` string, nullable
      - `is_image` boolean
      - `is_inline` boolean
    - `sent_at` string, date-time
  - `conversation` SupportConversation: One customer conversation (all mail with one customer address in a project).
    - `id` integer
    - `user_email` string, email: The customer's address
    - `subject` string, nullable
    - `status` 'unread' | 'open' | 'closed': `unread` = waiting, nobody opened it; `open` = being handled; `closed` = done. A new message from the customer sets it back to `unread`.
    - `status_label` string
    - `assignee` object, nullable
      - `id` integer
      - `name` string
    - `request_type` 'refund_charge' | 'cancel_subscription' | 'pricing_payment' | 'access_login' | 'bug' | 'how_to' | 'data_compliance' | 'services_partnership' | 'feature_feedback' | 'spam_auto' | 'other', nullable: What the customer asks about. Set by AI when the conversation starts, or by hand. `null` = not classified.
    - `request_type_label` string, nullable
    - `request_type_source` 'ai' | 'manual', nullable
    - `request_type_confidence` integer, nullable: AI confidence, 0–100
    - `first_message_preview` string, nullable
    - `last_message_preview` string, nullable
    - `first_message_at` string, date-time, nullable
    - `last_message_at` string, date-time, nullable
    - `last_user_message_at` string, date-time, nullable
    - `last_agent_reply_at` string, date-time, nullable: Last reply written by a person (automatic messages do not count)
    - `auto_replied_at` string, date-time, nullable
    - `auto_followup_at` string, date-time, nullable
    - `is_demo` boolean: The built-in welcome conversation; nothing sent to it leaves the system
    - `created_at` string, date-time, nullable

## Other responses

- `404`: Not found
- `422`: Validation error, or the project cannot send mail yet
- `429`: More than 60 replies per minute
- `502`: The mail provider failed

## Changes

- **2026-11-03** `eb8b2d9124ac`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/web2wave/apis/web2wave-api/changes/support/conversations/:id/reply/post.md)

---

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