> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qoder.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List thread events

> List events scoped to one Session thread.

`GET /api/v1/cloud/sessions/{session_id}/threads/{thread_id}/events`

Retrieves public events for one thread with cursor pagination.

## Path parameters

| Parameter    | Type   | Description                        |
| ------------ | ------ | ---------------------------------- |
| `session_id` | string | Session ID with the `sess_` prefix |
| `thread_id`  | string | Thread ID with the `sthr_` prefix  |

## Headers

| Header          | Required | Description         |
| --------------- | -------- | ------------------- |
| `Authorization` | Yes      | `Bearer $QODER_PAT` |

## Query parameters

| Parameter   | Type    | Required | Description                                                                                                       |
| ----------- | ------- | -------- | ----------------------------------------------------------------------------------------------------------------- |
| `limit`     | integer | No       | Maximum number of events to return. Default 20, range 1-100. Values above 100 return `400 invalid_request_error`. |
| `page`      | string  | No       | Opaque cursor from a previous response's `next_page`. Mutually exclusive with `before_id` and `after_id`          |
| `before_id` | string  | No       | Return events ordered before this event ID. Mutually exclusive with `page` and `after_id`                         |
| `after_id`  | string  | No       | Return events ordered after this event ID. Mutually exclusive with `page` and `before_id`                         |

## Example request

```bash theme={null}
curl -X GET "https://api.qoder.com/api/v1/cloud/sessions/sess_019f00000000000000000000000000aa/threads/sthr_019f00000000000000000000000002bb/events?limit=20" \
  -H "Authorization: Bearer $QODER_PAT"
```

## Example response

```json theme={null}
{
  "data": [
    {
      "id": "evt_019f00000000000000000000000003cc",
      "type": "agent.message",
      "content": [{"type": "text", "text": "Thread response"}],
      "processed_at": "2026-06-15T08:02:00.000Z"
    }
  ],
  "first_id": "evt_019f00000000000000000000000003cc",
  "has_more": false,
  "last_id": "evt_019f00000000000000000000000003cc",
  "next_page": null
}
```

## Response fields

| Field       | Type                                                                     | Description                                         |
| ----------- | ------------------------------------------------------------------------ | --------------------------------------------------- |
| `data`      | array of [Event object](/cloud-agents/api/sessions/schemas#event-object) | Thread-scoped events                                |
| `has_more`  | boolean                                                                  | Whether more results are available beyond this page |
| `first_id`  | string \| null                                                           | ID of the first event in the current page           |
| `last_id`   | string \| null                                                           | ID of the last event in the current page            |
| `next_page` | string \| null                                                           | Opaque cursor for the next page                     |

## Errors

| HTTP | Type                    | Trigger                                                                                                       |
| ---- | ----------------------- | ------------------------------------------------------------------------------------------------------------- |
| 400  | `invalid_request_error` | Invalid `limit` (non-integer or non-positive), or simultaneously providing `page` with `before_id`/`after_id` |
| 401  | `authentication_error`  | PAT invalid or expired                                                                                        |
| 404  | `not_found_error`       | Session or thread does not exist                                                                              |

**HTTP 404 Not Found**

```json theme={null}
{
  "type": "error",
  "request_id": "cb80235f-76a2-4ff3-9e28-5aa2da12dc14",
  "error": {
    "type": "not_found_error",
    "message": "Session thread 'sthr_fakefakefake_xxxxxxxxxxxxxxxx' was not found."
  },
  "request_id": "b5822072-f264-48da-9d61-6d48ffb07551"
}
```

See [Errors](/cloud-agents/api/conventions/errors) for the full error envelope.

## Related

<CardGroup cols={2}>
  <Card title="Managed Agents" icon="user-gear" href="/cloud-agents/managed-agents">
    Understand thread event semantics in multi-agent collaboration.
  </Card>

  <Card title="Stream Thread Events (SSE)" icon="bolt" href="/cloud-agents/api/sessions/stream-thread-events">
    Receive thread events in real time via Server-Sent Events.
  </Card>

  <Card title="List Session Threads" icon="list" href="/cloud-agents/api/sessions/list-threads">
    View all threads in a session.
  </Card>
</CardGroup>
