---
title: "List messages"
url: https://docs.gleap.ai/en/reference/conversations-api/list-messages
method: GET
path: "/s2s/conversations/{conversationId}/messages"
api: "Conversations API"
tag: "S2S Conversations"
operationId: "ListMessages"
updatedAt: "2026-11-01T18:40:16.191Z"
language: en
---

# List messages

`GET https://api.gleap.io/v3/s2s/conversations/{conversationId}/messages`

Read the conversation's messages, oldest first, cursor-paginated (max 100 per page). Pass `after` = the last message id you have. Reading messages does NOT mark the conversation read — use the explicit read receipt.

## Authorization

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

## Path parameters

- `conversationId` (string, required)

## Query parameters

- `after` (string)
- `limit` (number<double>)

## Headers

- `Gleap-Version` (string): Pin a specific API version; defaults to the current version.

## Example request

```bash
curl --request GET \
  --url 'https://api.gleap.io/v3/s2s/conversations/{conversationId}/messages' \
  --header 'Authorization: Bearer <token>'
```

## Responses

### 200 (`application/json`)

Ok

- `next_after` (string | null, required)
- `has_more` (boolean, required)
- `items` (object[], required)
  - `id` (string, required)
  - `conversationId` (string, required)
  - `text` (string)
  - `author` (object, required)
    - `type` (enum<string>, required): One of: `contact`, `agent`, `bot`, `system`.
    - `id` (string)
    - `name` (string)
    - `avatar` (string)
  - `attachments` (object[], required)
    - `url` (string, required)
    - `name` (string)
    - `contentType` (string)
  - `replyToMessageId` (string)
  - `rating` (string)
  - `unread` (boolean, required)
  - `createdAt` (string<date-time>, required)

```json
{
  "next_after": "string",
  "has_more": true,
  "items": [
    {
      "id": "string",
      "conversationId": "string",
      "text": "string",
      "author": {
        "type": "contact",
        "id": "string",
        "name": "string",
        "avatar": "string"
      },
      "attachments": [
        {
          "url": "string",
          "name": "string",
          "contentType": "string"
        }
      ],
      "replyToMessageId": "string",
      "rating": "string",
      "unread": true,
      "createdAt": "2026-01-01T12:00:00Z"
    }
  ]
}
```

### 401 (`application/problem+json`)

Missing, invalid or revoked service account token.

- `type` (string, required)
- `title` (string, required)
- `status` (number, required)
- `code` (string, required)
- `detail` (string)
- `request_id` (string)

```json
{
  "type": "https://docs.gleap.io/s2s/problems/conversation_closed",
  "title": "string",
  "status": 0,
  "code": "conversation_closed",
  "detail": "string",
  "request_id": "req_66c0ffee0000000000000001"
}
```

### 404 (`application/problem+json`)

The addressed resource does not exist in this project.

- `type` (string, required)
- `title` (string, required)
- `status` (number, required)
- `code` (string, required)
- `detail` (string)
- `request_id` (string)

```json
{
  "type": "https://docs.gleap.io/s2s/problems/conversation_closed",
  "title": "string",
  "status": 0,
  "code": "conversation_closed",
  "detail": "string",
  "request_id": "req_66c0ffee0000000000000001"
}
```

### 422 (`application/problem+json`)

Idempotency-Key reuse with a different request body.

- `type` (string, required)
- `title` (string, required)
- `status` (number, required)
- `code` (string, required)
- `detail` (string)
- `request_id` (string)

```json
{
  "type": "https://docs.gleap.io/s2s/problems/conversation_closed",
  "title": "string",
  "status": 0,
  "code": "conversation_closed",
  "detail": "string",
  "request_id": "req_66c0ffee0000000000000001"
}
```

### 429 (`application/problem+json`)

Rate limit exceeded — honor the Retry-After header.

- `type` (string, required)
- `title` (string, required)
- `status` (number, required)
- `code` (string, required)
- `detail` (string)
- `request_id` (string)

```json
{
  "type": "https://docs.gleap.io/s2s/problems/conversation_closed",
  "title": "string",
  "status": 0,
  "code": "conversation_closed",
  "detail": "string",
  "request_id": "req_66c0ffee0000000000000001"
}
```

### default (`application/problem+json`)

Any other error, including validation\_failed (400) and internal\_error (500).

- `type` (string, required)
- `title` (string, required)
- `status` (number, required)
- `code` (string, required)
- `detail` (string)
- `request_id` (string)

```json
{
  "type": "https://docs.gleap.io/s2s/problems/conversation_closed",
  "title": "string",
  "status": 0,
  "code": "conversation_closed",
  "detail": "string",
  "request_id": "req_66c0ffee0000000000000001"
}
```
