## Create account for setup

`client.App.Setup.Register(ctx, body) (*AppSetupRegisterResponse, error)`

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

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

### Parameters

- `body AppSetupRegisterParams`

  - `AcceptTerms param.Field[bool]`

    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).

    - `const AppSetupRegisterParamsAcceptTermsTrue AppSetupRegisterParamsAcceptTerms = true`

  - `LeadToken param.Field[string]`

    Registration token returned by Beeper.

  - `SetupRequestID param.Field[string]`

    Setup request ID returned by the start step.

  - `Username param.Field[string]`

    Username selected by the user.

### Returns

- `type AppSetupRegisterResponse struct{…}`

  - `Matrix AppSetupRegisterResponseMatrix`

    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 AppSetupRegisterResponseSession`

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

    - `E2EE AppSetupRegisterResponseSessionE2EE`

      Encrypted messaging setup status.

      - `CrossSigning bool`

        Whether this account can verify trusted devices.

      - `FirstSyncDone bool`

        Whether the first encrypted message sync is complete.

      - `HasBackedUpRecoveryKey bool`

        Whether the user confirmed that they saved their recovery key.

      - `Initialized bool`

        Whether encrypted messaging setup has started.

      - `KeyBackup bool`

        Whether encrypted message backup is available.

      - `Secrets AppSetupRegisterResponseSessionE2EESecrets`

        Encrypted messaging keys available on this device.

        - `MasterKey bool`

          Whether the account identity key is available.

        - `MegolmBackupKey bool`

          Whether the encrypted message backup key is available.

        - `RecoveryKey bool`

          Whether a recovery key is available.

        - `SelfSigningKey bool`

          Whether the device trust key is available.

        - `UserSigningKey bool`

          Whether the user trust key is available.

      - `SecretStorage bool`

        Whether secure key storage is available.

      - `Verified bool`

        Whether this device is trusted for encrypted messages.

      - `RecoveryKeyGeneratedAt float64`

        Unix timestamp for when the recovery key was created.

    - `State string`

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

      - `const AppSetupRegisterResponseSessionStateNeedsLogin AppSetupRegisterResponseSessionState = "needs-login"`

      - `const AppSetupRegisterResponseSessionStateInitializing AppSetupRegisterResponseSessionState = "initializing"`

      - `const AppSetupRegisterResponseSessionStateNeedsCrossSigningSetup AppSetupRegisterResponseSessionState = "needs-cross-signing-setup"`

      - `const AppSetupRegisterResponseSessionStateNeedsVerification AppSetupRegisterResponseSessionState = "needs-verification"`

      - `const AppSetupRegisterResponseSessionStateNeedsSecrets AppSetupRegisterResponseSessionState = "needs-secrets"`

      - `const AppSetupRegisterResponseSessionStateNeedsFirstSync AppSetupRegisterResponseSessionState = "needs-first-sync"`

      - `const AppSetupRegisterResponseSessionStateReady AppSetupRegisterResponseSessionState = "ready"`

    - `Matrix AppSetupRegisterResponseSessionMatrix`

      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 AppSetupRegisterResponseSessionVerification`

      Trusted device verification progress.

      - `ID string`

        Verification ID to pass in verification action paths.

      - `AvailableActions []string`

        Verification actions that are valid for the current state.

        - `const AppSetupRegisterResponseSessionVerificationAvailableActionAccept AppSetupRegisterResponseSessionVerificationAvailableAction = "accept"`

        - `const AppSetupRegisterResponseSessionVerificationAvailableActionCancel AppSetupRegisterResponseSessionVerificationAvailableAction = "cancel"`

        - `const AppSetupRegisterResponseSessionVerificationAvailableActionQRConfirmScanned AppSetupRegisterResponseSessionVerificationAvailableAction = "qr.confirmScanned"`

        - `const AppSetupRegisterResponseSessionVerificationAvailableActionSASStart AppSetupRegisterResponseSessionVerificationAvailableAction = "sas.start"`

        - `const AppSetupRegisterResponseSessionVerificationAvailableActionSASConfirm AppSetupRegisterResponseSessionVerificationAvailableAction = "sas.confirm"`

      - `Direction string`

        Whether this device started or received the verification.

        - `const AppSetupRegisterResponseSessionVerificationDirectionIncoming AppSetupRegisterResponseSessionVerificationDirection = "incoming"`

        - `const AppSetupRegisterResponseSessionVerificationDirectionOutgoing AppSetupRegisterResponseSessionVerificationDirection = "outgoing"`

      - `Methods []string`

        Verification methods supported for this transaction.

        - `const AppSetupRegisterResponseSessionVerificationMethodQR AppSetupRegisterResponseSessionVerificationMethod = "qr"`

        - `const AppSetupRegisterResponseSessionVerificationMethodSAS AppSetupRegisterResponseSessionVerificationMethod = "sas"`

      - `Purpose string`

        Why this verification exists.

        - `const AppSetupRegisterResponseSessionVerificationPurposeLogin AppSetupRegisterResponseSessionVerificationPurpose = "login"`

        - `const AppSetupRegisterResponseSessionVerificationPurposeDevice AppSetupRegisterResponseSessionVerificationPurpose = "device"`

      - `State string`

        Current trusted-device verification state.

        - `const AppSetupRegisterResponseSessionVerificationStateRequested AppSetupRegisterResponseSessionVerificationState = "requested"`

        - `const AppSetupRegisterResponseSessionVerificationStateReady AppSetupRegisterResponseSessionVerificationState = "ready"`

        - `const AppSetupRegisterResponseSessionVerificationStateSASReady AppSetupRegisterResponseSessionVerificationState = "sas_ready"`

        - `const AppSetupRegisterResponseSessionVerificationStateQRScanned AppSetupRegisterResponseSessionVerificationState = "qr_scanned"`

        - `const AppSetupRegisterResponseSessionVerificationStateDone AppSetupRegisterResponseSessionVerificationState = "done"`

        - `const AppSetupRegisterResponseSessionVerificationStateCancelled AppSetupRegisterResponseSessionVerificationState = "cancelled"`

        - `const AppSetupRegisterResponseSessionVerificationStateError AppSetupRegisterResponseSessionVerificationState = "error"`

      - `Error AppSetupRegisterResponseSessionVerificationError`

        Verification error details, if verification stopped.

        - `Code string`

          Verification error code.

        - `Reason string`

          User-facing verification error message.

      - `OtherDevice AppSetupRegisterResponseSessionVerificationOtherDevice`

        Other device participating in verification.

        - `ID string`

          Other device ID.

        - `Name string`

          Other device display name, if known.

      - `OtherUserID string`

        Other Beeper user participating in verification.

      - `QR AppSetupRegisterResponseSessionVerificationQR`

        QR verification data.

        - `Data string`

          QR code payload to display for verification.

      - `SAS AppSetupRegisterResponseSessionVerificationSAS`

        Emoji or number comparison data for verification.

        - `Emojis string`

          Emoji sequence to compare on both devices.

        - `Decimals string`

          Number sequence to compare on both devices.

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/beeper/desktop-api-go"
  "github.com/beeper/desktop-api-go/option"
)

func main() {
  client := beeperdesktopapi.NewClient(
    option.WithAccessToken("My Access Token"),
  )
  response, err := client.App.Setup.Register(context.TODO(), beeperdesktopapi.AppSetupRegisterParams{
    AcceptTerms: true,
    LeadToken: "leadToken",
    SetupRequestID: "setupRequestID",
    Username: "x",
  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", 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"
      }
    }
  }
}
```
