## List chat events

**get** `/v1/chats/{chat}/events`

Lists the chat's event log: the ordered record you rebuild your own
state from. Each entry carries a `seq` that only ever counts up, with no
gaps; page with `after_seq`.

### Path Parameters

- `chat: string`

### Query Parameters

- `after_seq: optional number`

  Return entries with `seq` greater than this; omitted (or non-numeric) reads from the start.

- `limit: optional number`

  Page size; absent or outside 1–100 reads as 100.

### Returns

- `data: array of JournalEntry`

  - `actor: string`

    Who wrote it: `customer`, `partner`, `human`, `system` or `brand`.

  - `created_at: string`

  - `payload: unknown`

    The event's own JSON payload; shape depends on `type`.

  - `seq: number`

    Gapless per-chat sequence number: the events cursor.

  - `type: string`

    Event type (`message_received`, `message_sent`, `owner_changed`, …).

  - `operator: optional string`

    WHICH human, for the events that have one: the operator name the acting
    request carried (attributed through our agent console). Present ONLY beside `actor: "human"`, and only
    when the caller named an operator; absent everywhere else, including on
    every event recorded before an operator id was ever sent. So its presence
    is the signal that this row can be rendered as "Dana accepted this" rather
    than "someone accepted this"; its absence is never "no human", only
    "unattributed".

### Example

```http
curl https://messages.api.linqapp.com/v1/chats/$CHAT/events \
    -H "Authorization: Bearer $LINQ_AMB_API_KEY"
```

#### Response

```json
{
  "data": [
    {
      "seq": 13,
      "type": "message_received",
      "actor": "customer",
      "payload": {
        "body": "where is my driver?"
      },
      "created_at": "2026-08-06T14:01:58Z"
    }
  ]
}
```
