| Value | Description |
authorization_expired | The Device Authorization Grant expired |
device_already_exists | The device ID specified by the new client already exists in the Homeserver provided device list |
device_not_found | The new device is not present in the device list as returned by the Homeserver |
unexpected_message_received | Sent by either device to indicate that they received a message of a type that they weren't expecting |
unsupported_protocol | Sent by a device where no suitable protocol is available or the requested protocol is not supported |
user_cancelled | Sent by either new or existing device to indicate that the user has cancelled the login |
unable_to_open_verification_uri | Sent by existing device to indicate that it was unable to open the `verification_uri_complete` (or `verification_uri`) |
|
+|`homeserver`|`string`| When the existing device is sending this it can include the [server name] of the Matrix homeserver so that the new device can at least save the user the hassle of typing it in|
+
+Example:
+
+```json
+{
+ "type":"m.login.failure",
+ "reason": "unsupported_protocol",
+ "homeserver": "matrix.org"
+}
+```
+
+### `m.login.declined`
+
+- Sent by: new device
+- Purpose: Indicates that the user declined the request
+
+Fields:
+
+|Field|Type||
+|--- |--- |--- |
+|`type`|required `string`|`m.login.declined`|
+
+Example:
+
+```json
+{
+ "type":"m.login.declined"
+}
+```
+
+### `m.login.success`
+
+- Sent by: new device
+- Purpose: to inform the existing device that it has successfully obtained an access token.
+
+Fields:
+
+|Field|Type||
+|--- |--- |--- |
+|`type`|required `string`|`m.login.success`|
+
+Example:
+
+```json
+{
+ "type": "m.login.success"
+}
+```
+
+### `m.login.secrets`
+
+- Sent by: existing device
+- Purpose: Shares the secrets used for cross-signing and room key backups
+
+Fields:
+
+|Field|Type||
+|--- |--- |--- |
+|`type`|required `string`|`m.login.secrets`|
+|`cross_signing`|required `object`|