# Logins

## List bridge logins

`client.Bridges.Logins.List(ctx, bridgeID) (*BridgeLoginListResponse, error)`

**get** `/v1/bridges/{bridgeID}/logins`

List bridge logins. A bridge login is a signed-in identity for a bridge and can contain one or more chat accounts.

### Parameters

- `bridgeID string`

  Bridge ID.

### Returns

- `type BridgeLoginListResponse struct{…}`

  - `Items []BridgeLogin`

    - `BridgeID string`

      Bridge ID.

    - `LoginID string`

      Bridge login ID.

    - `RemoveScopes []string`

      - `const BridgeLoginRemoveScopeCurrentDevice BridgeLoginRemoveScope = "current-device"`

      - `const BridgeLoginRemoveScopeAllDevices BridgeLoginRemoveScope = "all-devices"`

    - `Status BridgeLoginStatus`

      - `const BridgeLoginStatusConnected BridgeLoginStatus = "connected"`

      - `const BridgeLoginStatusConnecting BridgeLoginStatus = "connecting"`

      - `const BridgeLoginStatusNeedsLogin BridgeLoginStatus = "needs_login"`

      - `const BridgeLoginStatusLoggedOut BridgeLoginStatus = "logged_out"`

      - `const BridgeLoginStatusUnknown BridgeLoginStatus = "unknown"`

    - `AccountIDs []string`

      Chat accounts that belong to this bridge login, when known.

    - `StatusText string`

      Human-friendly bridge login status text.

    - `User User`

      User the account belongs to.

      - `ID string`

        Stable Beeper user ID. Use as the primary key when referencing a person.

      - `CannotMessage bool`

        True if Beeper cannot initiate messages to this user (e.g., blocked, network restriction, or no DM path). The user may still message you.

      - `Email string`

        Email address if known. Not guaranteed verified.

      - `FullName string`

        Display name as shown in clients (e.g., 'Alice Example'). May include emojis.

      - `ImgURL string`

        Avatar image URL if available. This may be a remote URL, media URL, data URL, or local file URL depending on the source. May be temporary or available only on this device; download promptly if durable access is needed.

      - `IsSelf bool`

        True if this user represents the authenticated account's own identity.

      - `PhoneNumber string`

        User's phone number in E.164 format (e.g., '+14155552671'). Omit if unknown.

      - `Username string`

        Human-readable handle if available (e.g., '@alice'). May be network-specific and not globally unique.

### 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"),
  )
  logins, err := client.Bridges.Logins.List(context.TODO(), "local-whatsapp")
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", logins.Items)
}
```

#### Response

```json
{
  "items": [
    {
      "bridgeID": "bridgeID",
      "loginID": "loginID",
      "removeScopes": [
        "current-device"
      ],
      "status": "connected",
      "accountIDs": [
        "string"
      ],
      "statusText": "statusText",
      "user": {
        "id": "id",
        "cannotMessage": true,
        "email": "email",
        "fullName": "fullName",
        "imgURL": "imgURL",
        "isSelf": true,
        "phoneNumber": "phoneNumber",
        "username": "username"
      }
    }
  ]
}
```

## Get bridge login

`client.Bridges.Logins.Get(ctx, loginID, query) (*BridgeLogin, error)`

**get** `/v1/bridges/{bridgeID}/logins/{loginID}`

Get one bridge login.

### Parameters

- `loginID string`

  Bridge login ID.

- `query BridgeLoginGetParams`

  - `BridgeID param.Field[string]`

    Bridge ID.

### Returns

- `type BridgeLogin struct{…}`

  Signed-in identity for a bridge. One bridge login can contain multiple chat accounts.

  - `BridgeID string`

    Bridge ID.

  - `LoginID string`

    Bridge login ID.

  - `RemoveScopes []string`

    - `const BridgeLoginRemoveScopeCurrentDevice BridgeLoginRemoveScope = "current-device"`

    - `const BridgeLoginRemoveScopeAllDevices BridgeLoginRemoveScope = "all-devices"`

  - `Status BridgeLoginStatus`

    - `const BridgeLoginStatusConnected BridgeLoginStatus = "connected"`

    - `const BridgeLoginStatusConnecting BridgeLoginStatus = "connecting"`

    - `const BridgeLoginStatusNeedsLogin BridgeLoginStatus = "needs_login"`

    - `const BridgeLoginStatusLoggedOut BridgeLoginStatus = "logged_out"`

    - `const BridgeLoginStatusUnknown BridgeLoginStatus = "unknown"`

  - `AccountIDs []string`

    Chat accounts that belong to this bridge login, when known.

  - `StatusText string`

    Human-friendly bridge login status text.

  - `User User`

    User the account belongs to.

    - `ID string`

      Stable Beeper user ID. Use as the primary key when referencing a person.

    - `CannotMessage bool`

      True if Beeper cannot initiate messages to this user (e.g., blocked, network restriction, or no DM path). The user may still message you.

    - `Email string`

      Email address if known. Not guaranteed verified.

    - `FullName string`

      Display name as shown in clients (e.g., 'Alice Example'). May include emojis.

    - `ImgURL string`

      Avatar image URL if available. This may be a remote URL, media URL, data URL, or local file URL depending on the source. May be temporary or available only on this device; download promptly if durable access is needed.

    - `IsSelf bool`

      True if this user represents the authenticated account's own identity.

    - `PhoneNumber string`

      User's phone number in E.164 format (e.g., '+14155552671'). Omit if unknown.

    - `Username string`

      Human-readable handle if available (e.g., '@alice'). May be network-specific and not globally unique.

### 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"),
  )
  bridgeLogin, err := client.Bridges.Logins.Get(
    context.TODO(),
    "ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc",
    beeperdesktopapi.BridgeLoginGetParams{
      BridgeID: "local-whatsapp",
    },
  )
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", bridgeLogin.BridgeID)
}
```

#### Response

```json
{
  "bridgeID": "bridgeID",
  "loginID": "loginID",
  "removeScopes": [
    "current-device"
  ],
  "status": "connected",
  "accountIDs": [
    "string"
  ],
  "statusText": "statusText",
  "user": {
    "id": "id",
    "cannotMessage": true,
    "email": "email",
    "fullName": "fullName",
    "imgURL": "imgURL",
    "isSelf": true,
    "phoneNumber": "phoneNumber",
    "username": "username"
  }
}
```

## Remove bridge login

`client.Bridges.Logins.Remove(ctx, loginID, params) (*BridgeLoginRemoveResponse, error)`

**post** `/v1/bridges/{bridgeID}/logins/{loginID}/remove`

Remove a bridge login from this device or, when supported by the bridge, from all devices.

### Parameters

- `loginID string`

  Bridge login ID.

- `params BridgeLoginRemoveParams`

  - `BridgeID param.Field[string]`

    Path param: Bridge ID.

  - `Scope param.Field[BridgeLoginRemoveParamsScope]`

    Body param: Where this bridge login should be removed.

    - `const BridgeLoginRemoveParamsScopeCurrentDevice BridgeLoginRemoveParamsScope = "current-device"`

    - `const BridgeLoginRemoveParamsScopeAllDevices BridgeLoginRemoveParamsScope = "all-devices"`

### Returns

- `type BridgeLoginRemoveResponse struct{…}`

  - `BridgeID string`

  - `LoginID string`

  - `Scope BridgeLoginRemoveResponseScope`

    Where this bridge login should be removed.

    - `const BridgeLoginRemoveResponseScopeCurrentDevice BridgeLoginRemoveResponseScope = "current-device"`

    - `const BridgeLoginRemoveResponseScopeAllDevices BridgeLoginRemoveResponseScope = "all-devices"`

  - `Status Removed`

    - `const RemovedRemoved Removed = "removed"`

  - `AffectedAccountIDs []string`

### 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"),
  )
  login, err := client.Bridges.Logins.Remove(
    context.TODO(),
    "ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc",
    beeperdesktopapi.BridgeLoginRemoveParams{
      BridgeID: "local-whatsapp",
      Scope: beeperdesktopapi.BridgeLoginRemoveParamsScopeCurrentDevice,
    },
  )
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", login.BridgeID)
}
```

#### Response

```json
{
  "bridgeID": "bridgeID",
  "loginID": "loginID",
  "scope": "current-device",
  "status": "removed",
  "affectedAccountIDs": [
    "string"
  ]
}
```
