# getAddresses

Your app can request the current account's Bitcoin addresses with `getAddresses`. The app must have first [connected to the wallet](https://docs.xverse.app/sats-connect/connecting-to-the-wallet/connect-to-xverse-wallet) and obtained [account read permissions.](https://docs.xverse.app/sats-connect/xverse-wallet-permissions)&#x20;

* Apps can specify which wallet addresses they require: Bitcoin ordinals address or Bitcoin payment address, using the `purposes` request parameter
* The `message` request param gives apps the option to display a message the user when requesting their addresses.&#x20;

<table><thead><tr><th width="205">request parameters</th><th>Description</th></tr></thead><tbody><tr><td><code>purposes</code></td><td><p>Array of strings used to specify the purpose of the address(es) to request:</p><ul><li><code>'ordinals'</code> is preferably used to manage the user’s ordinals</li><li><code>'payment'</code> is preferably used to manage the user’s bitcoin</li></ul><p>Example: <code>['ordinals', 'payment']</code> </p></td></tr><tr><td><code>message</code></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2139">ℹ️</span> Optional<br>a message to be displayed to the user in the request prompt.</td></tr></tbody></table>

{% code fullWidth="false" %}

```typescript
import { request } from "sats-connect";

try {
  const response = await request("getAddresses", null);
  console.log("getAccounts ~ response:", response);
  if (response.status === "success") {
    const paymentAddressItem = response.result.find(
      (address) => address.purpose === AddressPurpose.Payment,
    );
    const ordinalsAddressItem = response.result.find(
      (address) => address.purpose === AddressPurpose.Ordinals,
    );
    const stacksAddressItem = response.result.find(
      (address) => address.purpose === AddressPurpose.Stacks,
    );
  } else {
    if (response.error.code === RpcErrorCode.USER_REJECTION) {
      // handle user cancellation error
    } else {
      // handle error
    }
  }
} catch (err) {
  alert(err.error.message);
}
```

{% endcode %}

Once resolved, the method returns `GetAddressResult`: an array of the user’s wallet address objects, defined as:

```typescript
type address = {
    address: string;
    publicKey: string;
    purpose: "payment" | "ordinals" 
    addressType: "p2tr" | "p2wpkh" | "p2sh" 
}
```

You can use these addresses to make further requests such as [signing a message](https://docs.xverse.app/sats-connect/bitcoin-methods/signmessage), [signing a transaction](https://docs.xverse.app/sats-connect/bitcoin-methods/signpsbt), etc.

Currently, apps can retrieve two types of Bitcoin addresses, the user's Bitcoin payment address and the Ordinals address which is a taproot address.

An example response:

```typescript
GetAddressesResult: [
  {
    address: "tb1pzwa68q3udj0f7g5xtdakgecvf45dvssu66ry7y3at22w7vus20vq3sgw62",
    publicKey: "b9907521ddb85e0e6a37622b7c685efbdc8ae53a334928adbd12cf204ad4e717",
    purpose: "ordinals",
    addressType: "p2tr",
    walletType: "software"
  },
  {
    address: "2NBfRKCUpafbatj5gV9T82uau3igdSf9BXJ",
    publicKey: "02818b7ff740a40f311d002123087053d5d9e0e1546674aedb10e15a5b57fd3985",
    purpose: "payment",
    addressType: "p2sh",
    walletType: "software"
  }
]
```

Where:

<table><thead><tr><th width="162">address field</th><th>Description</th></tr></thead><tbody><tr><td><code>address</code> </td><td>string - the user’s connected wallet address</td></tr><tr><td><code>publicKey</code></td><td>A hex string representing the bytes of the public key of the account. You can use this to construct partially signed Bitcoin transactions (PSBT).</td></tr><tr><td><code>purpose</code></td><td><p>string - The purpose of the address:</p><ul><li><code>ordinals</code> is preferably used to manage the user’s ordinals</li><li><code>payment</code> is preferably used to manage the user’s bitcoin</li></ul></td></tr><tr><td><code>addressType</code></td><td><p>string - the address’s format:</p><ul><li><code>P2TR</code> for ordinals</li><li><code>P2SH</code> for payment</li><li><code>P2WPKH</code> for payment using Ledger</li></ul></td></tr><tr><td><code>network</code></td><td><p>string - the network where the address is being used:</p><ul><li><code>mainnet</code> for Bitcoin Mainnet</li><li><code>testnet</code> for Bitcoin Testnet</li><li><code>Signet</code> for Bitcoin Signet</li></ul></td></tr><tr><td><code>walletType</code></td><td><p>string - the type of wallet used for the account</p><ul><li><code>ledger</code> if the user's account is using a Ledger device</li><li><code>software</code> otherwise</li></ul></td></tr></tbody></table>
