Read the public Event history of a Forward Session Thread with cursor pagination.
GET /api/v1/forward/sessions/{session_id}/threads/{thread_id}/events
Request headers
| Header | Required | Description |
|---|---|---|
| Authorization | Yes | Bearer <PAT or SAT> |
Path and query parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| session_id | string | Yes | - | Session ID with the sess_ prefix. |
| thread_id | string | Yes | - | Thread ID with the sthr_ prefix. |
| limit | integer | No | 20 | Page size from 1 to 100. |
| after_id | string | No | - | Return records after this Event ID. |
| before_id | string | No | - | Return records before this Event ID. |
after_id and before_id together. Results are always sorted in ascending order.
Thread Event history does not support order, type, types, types[], include_tool_calls, include_thinking, or event_deltas[]. Passing any of these parameters, even with an empty value, returns 400 invalid_request.
Example request
Example response
| Field | Type | Description |
|---|---|---|
| data | array | Event objects on this page. |
| first_id | string | null | First Event ID on this page, or null when empty. |
| last_id | string | null | Last Event ID on this page, or null when empty. |
| has_more | boolean | Whether more records are available. |
Errors
| HTTP | Type | Code | Condition |
|---|---|---|---|
| 400 | invalid_request | invalid_limit | limit is not an integer from 1 to 100. |
| 400 | invalid_request | invalid_pagination | Both after_id and before_id were provided. |
| 400 | invalid_request | invalid_request | An unsupported selector was provided. |
| 401 | authentication_error | authentication_required | The PAT or SAT is invalid or expired. |
| 404 | not_found | session_not_found | The Session does not exist or is not visible to the caller. |
| 404 | not_found_error | thread_not_found | The Thread does not exist or does not belong to the Session. |
| 502 | api_error | runtime_unavailable | The Thread runtime service is unavailable. |
Notes
- Thread Events use the same public field projection as Session Events. Unknown Event types return only the minimum Event envelope.
- After a Thread is archived, its full message and tool history is no longer available here. Recover lifecycle Events from the parent Session history or stream, and retrieve final state with the get Thread endpoint.