---
title: "Create a thread reply"
url: https://docs.gleap.ai/en/reference/rest-api/create-thread-reply
method: POST
path: "/messages/{messageId}/thread"
api: "API Reference"
tag: "Messages"
operationId: "CreateThreadReply"
updatedAt: "2026-11-01T18:40:15.677Z"
language: en
---

# Create a thread reply

`POST https://api.gleap.io/v3/messages/{messageId}/thread`

Reply inside a message's thread.

Thread replies are INTERNAL — they never reach the customer, never fire webhooks/integrations/SLA, and never move the ticket's latest message.

## Authorization

- `Authorization` (header, required): `Bearer <token>`

## Path parameters

- `messageId` (string, required)

## Headers

- `project` (string, required)

## Request body (`application/json`, required)

- `data` (any): Message payload; `data.content` is TipTap JSON (mention nodes intact). Typed `any` deliberately — TSOA silently strips `Record<string, any>`.
- `attachments` (object[])
  - `name` (string, required)
  - `url` (string, required)
  - `type` (string)
- `clientMutationId` (string): Client-supplied, so a retried optimistic send doesn't double-post.

## Example request

```bash
curl --request POST \
  --url 'https://api.gleap.io/v3/messages/{messageId}/thread' \
  --header 'Authorization: Bearer <token>' \
  --header 'project: <project>' \
  --header 'Content-Type: application/json' \
  --data '{
  "clientMutationId": "<clientMutationId>"
}'
```

## Responses

### 200 (`application/json`)

Ok
