## Create account for setup

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

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

### Body Parameters

- `acceptTerms: 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`

- `leadToken: string`

  Registration token returned by Beeper.

- `setupRequestID: string`

  Setup request ID returned by the start step.

- `username: string`

  Username selected by the user.

### Returns

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

  Account credentials for first-party app setup.

  - `accessToken: string`

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

  - `deviceID: string`

    Current device ID.

  - `homeserver: string`

    Beeper homeserver URL for this account.

  - `userID: string`

    Signed-in Beeper user ID.

- `session: object { e2ee, state, matrix, verification }`

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

  - `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/register \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer $BEEPER_ACCESS_TOKEN" \
    -d '{
          "acceptTerms": true,
          "leadToken": "leadToken",
          "setupRequestID": "setupRequestID",
          "username": "x"
        }'
```

#### 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"
      }
    }
  }
}
```
