## Create account for setup

`app.setup.register(SetupRegisterParams**kwargs)  -> SetupRegisterResponse`

**post** `/v1/app/setup/register`

Create a Beeper account after the user chooses a username and accepts the Terms of Use.

### Parameters

- `accept_terms: Literal[true]`

  Confirms that the user agreed to our [terms of use](https://www.beeper.com/terms-onboarding) and has read our [privacy policy](https://www.beeper.com/privacy).

  - `true`

- `lead_token: str`

  Registration token returned by Beeper.

- `setup_request_id: str`

  Setup request ID returned by the start step.

- `username: str`

  Username selected by the user.

### Returns

- `class SetupRegisterResponse: …`

  - `matrix: Matrix`

    Account credentials for first-party app setup.

    - `access_token: str`

      Beeper account access token. Returned once for first-party app setup.

    - `device_id: str`

      Current device ID.

    - `homeserver: str`

      Beeper homeserver URL for this account.

    - `user_id: str`

      Signed-in Beeper user ID.

  - `session: Session`

    Current app sign-in and encrypted messaging setup state after sign-in.

    - `e2ee: SessionE2EE`

      Encrypted messaging setup status.

      - `cross_signing: bool`

        Whether this account can verify trusted devices.

      - `first_sync_done: bool`

        Whether the first encrypted message sync is complete.

      - `has_backed_up_recovery_key: bool`

        Whether the user confirmed that they saved their recovery key.

      - `initialized: bool`

        Whether encrypted messaging setup has started.

      - `key_backup: bool`

        Whether encrypted message backup is available.

      - `secrets: SessionE2EESecrets`

        Encrypted messaging keys available on this device.

        - `master_key: bool`

          Whether the account identity key is available.

        - `megolm_backup_key: bool`

          Whether the encrypted message backup key is available.

        - `recovery_key: bool`

          Whether a recovery key is available.

        - `self_signing_key: bool`

          Whether the device trust key is available.

        - `user_signing_key: bool`

          Whether the user trust key is available.

      - `secret_storage: bool`

        Whether secure key storage is available.

      - `verified: bool`

        Whether this device is trusted for encrypted messages.

      - `recovery_key_generated_at: Optional[float]`

        Unix timestamp for when the recovery key was created.

    - `state: Literal["needs-login", "initializing", "needs-cross-signing-setup", 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[SessionMatrix]`

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

      - `device_id: str`

        Current device ID.

      - `homeserver: str`

        Beeper homeserver URL for this account.

      - `user_id: str`

        Signed-in Beeper user ID.

    - `verification: Optional[SessionVerification]`

      Trusted device verification progress.

      - `id: str`

        Verification ID to pass in verification action paths.

      - `available_actions: List[Literal["accept", "cancel", "qr.confirmScanned", 2 more]]`

        Verification actions that are valid for the current state.

        - `"accept"`

        - `"cancel"`

        - `"qr.confirmScanned"`

        - `"sas.start"`

        - `"sas.confirm"`

      - `direction: Literal["incoming", "outgoing"]`

        Whether this device started or received the verification.

        - `"incoming"`

        - `"outgoing"`

      - `methods: List[Literal["qr", "sas"]]`

        Verification methods supported for this transaction.

        - `"qr"`

        - `"sas"`

      - `purpose: Literal["login", "device"]`

        Why this verification exists.

        - `"login"`

        - `"device"`

      - `state: Literal["requested", "ready", "sas_ready", 4 more]`

        Current trusted-device verification state.

        - `"requested"`

        - `"ready"`

        - `"sas_ready"`

        - `"qr_scanned"`

        - `"done"`

        - `"cancelled"`

        - `"error"`

      - `error: Optional[SessionVerificationError]`

        Verification error details, if verification stopped.

        - `code: str`

          Verification error code.

        - `reason: str`

          User-facing verification error message.

      - `other_device: Optional[SessionVerificationOtherDevice]`

        Other device participating in verification.

        - `id: str`

          Other device ID.

        - `name: Optional[str]`

          Other device display name, if known.

      - `other_user_id: Optional[str]`

        Other Beeper user participating in verification.

      - `qr: Optional[SessionVerificationQR]`

        QR verification data.

        - `data: str`

          QR code payload to display for verification.

      - `sas: Optional[SessionVerificationSAS]`

        Emoji or number comparison data for verification.

        - `emojis: str`

          Emoji sequence to compare on both devices.

        - `decimals: Optional[str]`

          Number sequence to compare on both devices.

### Example

```python
from beeper_desktop_api import BeeperDesktop

client = BeeperDesktop()
response = client.app.setup.register(
    accept_terms=True,
    lead_token="leadToken",
    setup_request_id="setupRequestID",
    username="x",
)
print(response.matrix)
```

#### Response

```json
{
  "matrix": {
    "accessToken": "accessToken",
    "deviceID": "deviceID",
    "homeserver": "homeserver",
    "userID": "userID"
  },
  "session": {
    "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"
      }
    }
  }
}
```
