documentation/content/en/methods/timelines/streaming.md

96 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: streaming
description: >-
Subscribe to server-sent events for real-time updates via a long-lived HTTP
connection or via WebSocket.
menu:
docs:
weight: 40
parent: methods-timelines
---
Your application can use a [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events) endpoint to receive updates in real-time. Server-sent events is an incredibly simple transport method that relies entirely on chunked-encoding transfer, i.e. the HTTP connection is kept open and receives new data periodically.
Alternatively, a WebSocket connection can also be established.
## Server-sent events \(HTTP\)
### Endpoints <a id="endpoints"></a>
#### GET /api/v1/streaming/health
Returns `OK` when streaming service is fine. Added in 2.5.0
#### GET /api/v1/streaming/user
Returns events that are relevant to the authorized user, i.e. home timeline and notifications
#### GET /api/v1/streaming/public
Returns all public statuses
#### GET /api/v1/streaming/public/local
Returns all local statuses
#### GET /api/v1/streaming/hashtag?tag=:hashtag
Returns all public statuses for a particular hashtag
#### GET /api/v1/streaming/hashtag/local?tag=:hashtag
Returns all local statuses for a particular hashtag
#### GET /api/v1/streaming/list?list=:list_id
Returns statuses for a list
#### GET /api/v1/streaming/direct
Returns all direct messages
### Stream contents <a id="stream-contents"></a>
The stream will contain events as well as heartbeat comments. Lines that begin with a colon \(`:`\) can be ignored by parsers, they are simply there to keep the connection open. Events have this structure:
```text
event: name
data: payload
```
## WebSocket <a id="websocket"></a>
For WebSockets, there is only one URL path \(`/api/v1/streaming`\). The access token as well as the endpoint you are interested in must be provided with query params, respectively `access_token` and `stream`. Query params `list` and `tag` are likewise supported for relevant endpoints.
Possible `stream` values:
* `user`
* `public`
* `public:local`
* `hashtag`
* `hashtag:local`
* `list`
* `direct`
## Event types <a id="event-types"></a>
| Event | Description | Whats in the payload |
| :--- | :--- | :--- |
| `update` | A new status has appeared | [Status]({{< relref "../../entities/status.md" >}}) |
| `notification` | A new notification has appeared | [Notification]({{< relref "../../entities/notification.md" >}}) |
| `delete` | A status has been deleted | ID of the deleted status |
| `filters_changed` | Keyword filters have been changed | |
| `conversation` | A conversation has been updated | |
| `announcement` | A new server-wide announcement has been published | |
| `announcement.reaction` | A published announcement has received a new reaction | |
| `announcement.delete` | A published announcement has been removed | |
The payload is JSON-encoded.
{{< hint style="info" >}}
In case of `filters_changed` event, `payload` is not defined.
{{< /hint >}}