> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oumla.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Addresses

> SDK methods for generating and managing addresses

Generate blockchain addresses for your profiles. Addresses belong to wallets and are used to send and receive funds.

## Methods

### `createAddress()`

Generate a new address for a profile (V1 API). **Requires wallet to exist first.**

**Signature:**

```typescript theme={null}
createAddress(
  request: CreateAddressRequest,
  requestOptions?: RequestOptions
): Promise<CreateAddressResponse>
```

**Parameters:**

| Parameter             | Type     | Required | Description                       |
| --------------------- | -------- | -------- | --------------------------------- |
| `request.reference`   | `string` | Yes      | Profile reference                 |
| `request.networkId`   | `string` | Yes      | Network ID (from `getNetworks()`) |
| `request.clientShare` | `string` | Yes      | Client share for key derivation   |

**Example:**

```typescript theme={null}
const address = await client.addresses.createAddress({
  reference: 'user-123',
  networkId: 'your-network-id',
  clientShare: 'your-client-share'
});

console.log('Address:', address.data.data?.address);
console.log('Address ID:', address.data.data?.id);
```

***

### `createAddressV2()`

Generate a new address (V2 API). **Automatically creates wallet if it doesn't exist.** This is the recommended method.

**Signature:**

```typescript theme={null}
createAddressV2(
  request: CreateAddressRequest,
  requestOptions?: RequestOptions
): Promise<CreateAddressResponse>
```

**Parameters:**

Same as `createAddress()`.

**Example:**

```typescript theme={null}
// V2 automatically creates wallet if needed
const address = await client.addresses.createAddressV2({
  reference: 'user-123',
  networkId: 'your-network-id',
  clientShare: 'your-client-share'
});

console.log('Address:', address.data.data?.address);
```

<Tip>
  **Use V2**: The `createAddressV2()` method is recommended as it automatically creates a wallet if one doesn't exist, simplifying your workflow.
</Tip>

***

### `getAddressById()`

Retrieve a single address by its UUID.

**Signature:**

```typescript theme={null}
getAddressById(
  request: GetAddressByIdRequest,
  requestOptions?: RequestOptions
): Promise<GetAddressByIdResponse>
```

**Parameters:**

| Parameter    | Type     | Required | Description  |
| ------------ | -------- | -------- | ------------ |
| `request.id` | `string` | Yes      | Address UUID |

**Example:**

```typescript theme={null}
const address = await client.addresses.getAddressById({
  id: '3fa85f64-5717-4562-b3fc-2c963f66afa6'
});

console.log('Address:', address.data.data?.address);
```

***

### `getAddressForProfile()`

Get addresses for a profile by reference.

**Signature:**

```typescript theme={null}
getAddressForProfile(
  reference: string,
  request?: GetAddressForProfileRequest,
  requestOptions?: RequestOptions
): Promise<AddressResponse>
```

**Parameters:**

| Parameter      | Type     | Required | Description                   |
| -------------- | -------- | -------- | ----------------------------- |
| `reference`    | `string` | Yes      | Profile reference             |
| `request.skip` | `number` | No       | Number of records to skip     |
| `request.take` | `number` | No       | Number of records to retrieve |

**Example:**

```typescript theme={null}
const addresses = await client.addresses.getAddressForProfile('user-123', {
  skip: 0,
  take: 50
});

console.log('Addresses:', addresses.data.data);
```

***

### `getAddressForOrganization()`

Get all addresses for an organization.

**Signature:**

```typescript theme={null}
getAddressForOrganization(
  request: GetAddressForOrganizationRequest,
  requestOptions?: RequestOptions
): Promise<AddressesResponse>
```

**Parameters:**

| Parameter      | Type     | Required | Description                   |
| -------------- | -------- | -------- | ----------------------------- |
| `request.skip` | `number` | No       | Number of records to skip     |
| `request.take` | `number` | No       | Number of records to retrieve |

**Example:**

```typescript theme={null}
const addresses = await client.addresses.getAddressForOrganization({
  skip: 0,
  take: 50
});

console.log('Organization addresses:', addresses.data.data);
```

***

## Complete Example

```typescript theme={null}
import { OumlaSdkApiClient, OumlaSdkApiEnvironment } from '@oumla/sdk';

const client = new OumlaSdkApiClient({
  environment: OumlaSdkApiEnvironment.Sandbox,
  apiKey: 'your-api-key'
});

async function manageAddresses() {
  // First, get available networks
  const networks = await client.networks.getNetworks({ skip: 0, take: 50, enabled: true });
  const networkId = networks.data.networks[0].id; // Use appropriate network ID

  // Generate address (V2 - auto-creates wallet)
  const address = await client.addresses.createAddressV2({
    reference: 'user-123',
    networkId,
    clientShare: process.env.CLIENT_SHARE!
  });

  console.log('Generated address:', address.data.data?.address);

  // Get addresses for profile
  const profileAddresses = await client.addresses.getAddressForProfile('user-123', {
    skip: 0,
    take: 50
  });

  console.log('Profile addresses:', profileAddresses.data.data);

  // List all organization addresses
  const orgAddresses = await client.addresses.getAddressForOrganization({
    skip: 0,
    take: 100
  });

  console.log('Total addresses:', orgAddresses.data.data?.length ?? 0);
}
```
