summaryrefslogtreecommitdiff
path: root/docs/api/boot.md
blob: 2b9cf002b0b622e75e011d1c1b26f92487601f70 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# Client initialization

```mermaid
---
Client lifecycle
---
sequenceDiagram
	actor Andrea
	participant API

	Andrea ->>+ API : GET /api/boot
	API -->- Andrea : Snapshot, resume_point=23

	Andrea ->>+ API : GET /api/events?resume_point=23
	loop
	API -) Andrea : Event
	end
	API <<->>- Andrea: Disconnect
```

Client initialization serves three purposes:

* It confirms that the client's [identity token](./authentication.md) is valid, and tells the client what user that token is associated with.
* It provides an initial snapshot of the state of the service.
* It provides a resume point for the [event stream](./events.md), which allows clients to consume events starting from the moment the snapshot was created.

## `GET /api/boot`

Returns the information needed to initialize a client.

This method is also the recommended way to validate the client's identity token, and to check that the service is fully configured.

### Success

This endpoint will respond with a status of
`200 Okay` when successful. The body of the response will be a JSON object containing the initial state for the client:

```json
{
  "user": {
    "name": "example username",
    "id": "U1234abcd"
  },
  "resume_point": 1312,
  "heartbeat": 30,
  "users": [
    {
      "id": "U1234abcd",
      "name": "example username"
    }
  ],
  "channels": [
    {
      "at": "2025-04-14T23:58:11.421901Z",
      "name": "nonsense and such",
      "id": "C1234abcd"
    }
  ],
  "messages": [
    {
      "at": "2024-09-27T23:19:10.208147Z",
      "channel": "C1234abcd",
      "sender": "U1234abcd",
      "id": "M1312acab",
      "body": "beep"
    }
  ]
}
```

The response will include the following fields:

| Field          | Type            | Description                                                                                                              |
|:---------------|:----------------|:-------------------------------------------------------------------------------------------------------------------------|
| `user`         | object          | The details of the caller's identity.                                                                                    |
| `resume_point` | integer         | A resume point for [events](./events.md), such that the event stream will begin immediately after the included snapshot. |
| `heartbeat`    | integer         | The [heartbeat timeout](./events.md#heartbeat-events), in seconds, for events.                                           |
| `users`        | array of object | A snapshot of the users present in the service.                                                                          |
| `channels`     | array of object | A snapshot of the channels present in the service.                                                                       |
| `messages`     | array of object | A snapshot of the messages present in the service.                                                                       |

The `user` object will include the following fields:

| Field  | Type   | Description                              |
|:-------|:-------|:-----------------------------------------|
| `name` | string | The name of the caller's login identity. |
| `id`   | string | The ID of the caller's login identity.   |

Each element of the `users` array describes a distinct user, and will include the following fields:

| Field  | Type   | Description                                                                                                                          |
|:-------|:-------|:-------------------------------------------------------------------------------------------------------------------------------------|
| `name` | string | The name for the user.                                                                                                               |
| `id`   | string | A unique identifier for the user. This can be used to associate the user with other events, or to make API calls targeting the user. |

Each element of the `channels` array describes a distinct channel, and will include the following fields:

| Field  | Type      | Description                                                                                                                                   |
|:-------|:----------|:----------------------------------------------------------------------------------------------------------------------------------------------|
| `at`   | timestamp | The moment the channel was created.                                                                                                           |
| `name` | string    | The name for the channel.                                                                                                                     |
| `id`   | string    | A unique identifier for the channel. This can be used to associate the channel with other events, or to make API calls targeting the channel. |

Each element of the `messages` array describes a distinct message, and will include the following fields:

| Field     | Type      | Description                                                                                                                                   |
|:----------|:----------|:----------------------------------------------------------------------------------------------------------------------------------------------|
| `at`      | timestamp | The moment the message was sent.                                                                                                              |
| `channel` | string    | The ID of the channel the message was sent to.                                                                                                |
| `sender`  | string    | The ID of the user that sent the message.                                                                                                     |
| `id`      | string    | A unique identifier for the message. This can be used to associate the message with other events, or to make API calls targeting the message. |
| `body`    | string    | The text of the message.                                                                                                                      |