## Get Beeper app setup state

**get** `/v1/app/setup`

Return the current Beeper Desktop or Beeper Server sign-in and encrypted messaging setup state. This endpoint is public before sign-in so apps can discover that sign-in is needed; after sign-in, pass a read token.

### Returns

- `e2ee: object { crossSigning, firstSyncDone, hasBackedUpRecoveryKey, 6 more }`

  Encrypted messaging setup status.

  - `crossSigning: boolean`

    Whether this account can verify trusted devices.

  - `firstSyncDone: boolean`

    Whether the first encrypted message sync is complete.

  - `hasBackedUpRecoveryKey: boolean`

    Whether the user confirmed that they saved their recovery key.

  - `initialized: boolean`

    Whether encrypted messaging setup has started.

  - `keyBackup: boolean`

    Whether encrypted message backup is available.

  - `secrets: object { masterKey, megolmBackupKey, recoveryKey, 2 more }`

    Encrypted messaging keys available on this device.

    - `masterKey: boolean`

      Whether the account identity key is available.

    - `megolmBackupKey: boolean`

      Whether the encrypted message backup key is available.

    - `recoveryKey: boolean`

      Whether a recovery key is available.

    - `selfSigningKey: boolean`

      Whether the device trust key is available.

    - `userSigningKey: boolean`

      Whether the user trust key is available.

  - `secretStorage: boolean`

    Whether secure key storage is available.

  - `verified: boolean`

    Whether this device is trusted for encrypted messages.

  - `recoveryKeyGeneratedAt: optional number`

    Unix timestamp for when the recovery key was created.

- `state: "needs-login" or "initializing" or "needs-cross-signing-setup" or 4 more`

  Current sign-in and encrypted messaging setup state for Beeper Desktop or Beeper Server.

  - `"needs-login"`

  - `"initializing"`

  - `"needs-cross-signing-setup"`

  - `"needs-verification"`

  - `"needs-secrets"`

  - `"needs-first-sync"`

  - `"ready"`

- `matrix: optional object { deviceID, homeserver, userID }`

  Signed-in account details. Omitted until sign-in is complete.

  - `deviceID: string`

    Current device ID.

  - `homeserver: string`

    Beeper homeserver URL for this account.

  - `userID: string`

    Signed-in Beeper user ID.

- `verification: optional object { id, availableActions, direction, 8 more }`

  Trusted device verification progress.

  - `id: string`

    Verification ID to pass in verification action paths.

  - `availableActions: array of "accept" or "cancel" or "qr.confirmScanned" or 2 more`

    Verification actions that are valid for the current state.

    - `"accept"`

    - `"cancel"`

    - `"qr.confirmScanned"`

    - `"sas.start"`

    - `"sas.confirm"`

  - `direction: "incoming" or "outgoing"`

    Whether this device started or received the verification.

    - `"incoming"`

    - `"outgoing"`

  - `methods: array of "qr" or "sas"`

    Verification methods supported for this transaction.

    - `"qr"`

    - `"sas"`

  - `purpose: "login" or "device"`

    Why this verification exists.

    - `"login"`

    - `"device"`

  - `state: "requested" or "ready" or "sas_ready" or 4 more`

    Current trusted-device verification state.

    - `"requested"`

    - `"ready"`

    - `"sas_ready"`

    - `"qr_scanned"`

    - `"done"`

    - `"cancelled"`

    - `"error"`

  - `error: optional object { code, reason }`

    Verification error details, if verification stopped.

    - `code: string`

      Verification error code.

    - `reason: string`

      User-facing verification error message.

  - `otherDevice: optional object { id, name }`

    Other device participating in verification.

    - `id: string`

      Other device ID.

    - `name: optional string`

      Other device display name, if known.

  - `otherUserID: optional string`

    Other Beeper user participating in verification.

  - `qr: optional object { data }`

    QR verification data.

    - `data: string`

      QR code payload to display for verification.

  - `sas: optional object { emojis, decimals }`

    Emoji or number comparison data for verification.

    - `emojis: string`

      Emoji sequence to compare on both devices.

    - `decimals: optional string`

      Number sequence to compare on both devices.

### Example

```http
curl http://localhost:23373/v1/app/setup \
    -H "Authorization: Bearer $BEEPER_ACCESS_TOKEN"
```

#### Response

```json
{
  "e2ee": {
    "crossSigning": true,
    "firstSyncDone": true,
    "hasBackedUpRecoveryKey": true,
    "initialized": true,
    "keyBackup": true,
    "secrets": {
      "masterKey": true,
      "megolmBackupKey": true,
      "recoveryKey": true,
      "selfSigningKey": true,
      "userSigningKey": true
    },
    "secretStorage": true,
    "verified": true,
    "recoveryKeyGeneratedAt": 0
  },
  "state": "needs-login",
  "matrix": {
    "deviceID": "deviceID",
    "homeserver": "homeserver",
    "userID": "userID"
  },
  "verification": {
    "id": "id",
    "availableActions": [
      "accept"
    ],
    "direction": "incoming",
    "methods": [
      "qr"
    ],
    "purpose": "login",
    "state": "requested",
    "error": {
      "code": "code",
      "reason": "reason"
    },
    "otherDevice": {
      "id": "id",
      "name": "name"
    },
    "otherUserID": "otherUserID",
    "qr": {
      "data": "data"
    },
    "sas": {
      "emojis": "emojis",
      "decimals": "decimals"
    }
  }
}
```
