# Event: listenKeyExpired

## Event Description

The listenKey lapsed. The connection closes immediately after this frame.

## Event Name

`listenKeyExpired`

## Response Example

```json
{"e":"listenKeyExpired","E":1789013945678,"listenKey":"pqia91ma19a5s61cv6a81va65sdf19v8a65a1a5s61cv6a81va65sdf19v8a65a1"}
```

| Field | Type | Description |
| - | - | - |
| `e` | STRING | `"listenKeyExpired"` |
| `E` | LONG | Event time, Unix ms. |
| `listenKey` | STRING | The key that expired. |

The same frame, followed by the close (code `1000`, reason `listenKey expired`), is sent when the key
lapses, when you call [`DELETE /v1/listenKey`](/user-data-streams/close-user-data-stream.md),
and when you connect with a key that does not exist. Expiry is checked about every 30 seconds, so
the frame can arrive up to that long after the 60-minute lifetime ends.

Recover: `POST /v1/listenKey`, reconnect, then **resnapshot** (below). Seeing this event means your
keepalive schedule is wrong — it should fire every 30 minutes on a timer.
