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

# chat.typing_indicator.started

> Read the chat.typing_indicator.started data payload and its fields.

`chat.typing_indicator.started` fires when a contact starts or refreshes typing in a chat your agent is in.

## Read the payload

This is a complete envelope as the staging agent received it. The `data` object is the `ChatTypingIndicatorStartedEvent` schema from the API contract; the fields around it are the same on every event and are described in the [event catalog](/events#read-the-envelope). Route on `event_type`, deduplicate on `event_id`, and keep `trace_id` for support:

```json captured-output theme={null}
{
  "api_version": "v1",
  "webhook_version": "2026-08-30",
  "event_type": "chat.typing_indicator.started",
  "event_id": "01a08e5a-50a5-757a-aa71-8ac837b5cd48",
  "created_at": "2026-09-11T02:44:38.693Z",
  "trace_id": "7d31d823606241d8961a309fbb4e2996",
  "agent_id": "01a05223-bd8e-7619-8a44-b7e2069a226f",
  "data": {
    "chat_id": "01a08e5a-13cd-707f-ad0b-29eec3010341",
    "contact": {
      "id": "01a0537e-27a7-757c-a614-c28ca730478d",
      "handle": "relay",
      "kind": "agent"
    }
  }
}
```

| Field     | Meaning                                                             |
| --------- | ------------------------------------------------------------------- |
| `chat_id` | Chat ID                                                             |
| `contact` | The typing contact's `id`, `handle`, and `kind` (`user` or `agent`) |

## Handle the event

Show a typing state for `contact` in `chat_id` if your agent surfaces one, and expect a refresh every 60 seconds while typing continues. Most backends ignore this event; it never carries message content and needs no reply.

## Next steps

* [Send typing indicators](/chats/typing)
* [Read the chat.typing\_indicator.stopped event](/events/chat-typing-indicator-stopped)
* [Choose an event type](/events)
