# Wallets

> Manage Digital Wallet with Wallets Service.

## Install Dependency

Package: pkg:maven/com.affinidi.tdk/wallets.client

```xml

    com.affinidi.tdk
    wallets.client

```

Check the latest version on the [Maven Central repository](https://central.sonatype.com/artifact/com.affinidi.tdk/wallets.client) or view the source on [GitHub](https://github.com/affinidi/affinidi-tdk/tree/main/clients/java/wallets.client).

## Classes and Methods

### Wallet API

Used to manage digital wallets for issuing credentials.

#### createWallet

Creates a wallet by type.

Parameters

    createWalletInput
    [CreateWalletInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/wallets.client/docs/CreateWalletInput.md)
    Required
  Details for the wallet to create.

Example

```java
import com.affinidi.tdk.wallets.client.Configuration;
import com.affinidi.tdk.wallets.client.ApiClient;
import com.affinidi.tdk.wallets.client.apis.WalletApi;
import com.affinidi.tdk.wallets.client.auth.ApiKeyAuth;
import com.affinidi.tdk.wallets.client.models.CreateWalletInput;
import com.affinidi.tdk.wallets.client.models.CreateWalletResponse;
import com.affinidi.tdk.wallets.client.models.CreateWalletInput.DidMethodEnum;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    WalletApi apiInstance = new WalletApi(defaultClient);

    CreateWalletInput requestInput = new CreateWalletInput()
        .name("Wallet Name")
        .description("Description")
        .didMethod(DidMethodEnum.KEY);

    CreateWalletResponse result = apiInstance.createWallet(requestInput);
    System.out.println(result.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### deleteWallet

Deletes a wallet by ID.

Parameters

    walletId
    String
    Required
  ID of the wallet to delete.

Example

```java
import com.affinidi.tdk.wallets.client.Configuration;
import com.affinidi.tdk.wallets.client.ApiClient;
import com.affinidi.tdk.wallets.client.apis.WalletApi;
import com.affinidi.tdk.wallets.client.auth.ApiKeyAuth;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    WalletApi apiInstance = new WalletApi(defaultClient);
    apiInstance.deleteWallet("");
} catch (Exception e) {
    e.printStackTrace();
}
```

#### getWallet

Retrieves the details of a wallet.

Parameters

    walletId
    String
    Required
  ID of the wallet to retrieve.

Example

```java
import com.affinidi.tdk.wallets.client.Configuration;
import com.affinidi.tdk.wallets.client.ApiClient;
import com.affinidi.tdk.wallets.client.apis.WalletApi;
import com.affinidi.tdk.wallets.client.auth.ApiKeyAuth;
import com.affinidi.tdk.wallets.client.models.WalletDto;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    WalletApi apiInstance = new WalletApi(defaultClient);
    WalletDto result = apiInstance.getWallet("");
    System.out.println(result.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### listWallets

Returns the list of wallets for the current project.

No parameters required.

Example

```java
import com.affinidi.tdk.wallets.client.Configuration;
import com.affinidi.tdk.wallets.client.ApiClient;
import com.affinidi.tdk.wallets.client.apis.WalletApi;
import com.affinidi.tdk.wallets.client.auth.ApiKeyAuth;
import com.affinidi.tdk.wallets.client.models.WalletsListDto;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    WalletApi apiInstance = new WalletApi(defaultClient);
    WalletsListDto result = apiInstance.listWallets(null);
    System.out.println(result.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### signCredential

Signs a credential with the wallet’s DID document.

Parameters

    walletId
    String
    Required
  ID of the wallet used for signing.

    signCredentialInputDto
    [SignCredentialInputDto](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/wallets.client/docs/SignCredentialInputDto.md)
    Required
  Credential data to sign.

Example

```java
import com.affinidi.tdk.wallets.client.Configuration;
import com.affinidi.tdk.wallets.client.ApiClient;
import com.affinidi.tdk.wallets.client.apis.WalletApi;
import com.affinidi.tdk.wallets.client.auth.ApiKeyAuth;
import com.affinidi.tdk.wallets.client.models.SignCredentialInputDto;
import com.affinidi.tdk.wallets.client.models.SignCredentialInputDto.CredentialFormatEnum;
import com.affinidi.tdk.wallets.client.models.SignCredentialInputDtoUnsignedCredentialParams;
import com.affinidi.tdk.wallets.client.models.SignCredentialResultDto;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    WalletApi apiInstance = new WalletApi(defaultClient);

    SignCredentialInputDto requestInput = new SignCredentialInputDto()
        .credentialFormat(CredentialFormatEnum.LDP_VC)
        .revocable(false)
        .unsignedCredential(new Object())
        .unsignedCredentialParams(new SignCredentialInputDtoUnsignedCredentialParams());

    SignCredentialResultDto response = apiInstance.signCredential("", requestInput);
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### signJwtToken

Signs a JSON Web Token with the wallet’s DID document.

Parameters

    walletId
    String
    Required
  ID of the wallet used for signing.

    signJwtToken
    [SignJwtToken](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/wallets.client/docs/SignJwtToken.md)
    Required
  JWT header and payload to sign.

Example

```java
import com.affinidi.tdk.wallets.client.Configuration;
import com.affinidi.tdk.wallets.client.ApiClient;
import com.affinidi.tdk.wallets.client.apis.WalletApi;
import com.affinidi.tdk.wallets.client.auth.ApiKeyAuth;
import com.affinidi.tdk.wallets.client.models.SignJwtToken;
import com.affinidi.tdk.wallets.client.models.SignJwtTokenOK;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    WalletApi apiInstance = new WalletApi(defaultClient);

    SignJwtToken requestInput = new SignJwtToken()
        .header(new Object())
        .payload(new Object());

    SignJwtTokenOK response = apiInstance.signJwtToken("", requestInput);
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### updateWallet

Updates an existing wallet by ID.

Parameters

    walletId
    String
    Required
  ID of the wallet to update.

    updateWalletInput
    [UpdateWalletInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/wallets.client/docs/UpdateWalletInput.md)
    Required
  Updated name and description for the wallet.

Example

```java
import com.affinidi.tdk.wallets.client.Configuration;
import com.affinidi.tdk.wallets.client.ApiClient;
import com.affinidi.tdk.wallets.client.apis.WalletApi;
import com.affinidi.tdk.wallets.client.auth.ApiKeyAuth;
import com.affinidi.tdk.wallets.client.models.UpdateWalletInput;
import com.affinidi.tdk.wallets.client.models.WalletDto;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    WalletApi apiInstance = new WalletApi(defaultClient);

    UpdateWalletInput requestInput = new UpdateWalletInput()
        .name("Name")
        .description("Description");

    WalletDto result = apiInstance.updateWallet("", requestInput);
    System.out.println(result.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### createWalletKey

Adds a cryptographic key to an existing wallet.

Note: Multiple keys are only supported for did:web wallets.

Parameters

    walletId
    String
    Required
  ID of the wallet to add a key to.

    createWalletKeyInput
    [CreateWalletKeyInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/wallets.client/docs/CreateWalletKeyInput.md)
    Required
  Key type and verification relationships.

Example

```java
import com.affinidi.tdk.wallets.client.Configuration;
import com.affinidi.tdk.wallets.client.ApiClient;
import com.affinidi.tdk.wallets.client.apis.WalletApi;
import com.affinidi.tdk.wallets.client.auth.ApiKeyAuth;
import java.util.List;
import com.affinidi.tdk.wallets.client.models.CreateWalletKeyInput;
import com.affinidi.tdk.wallets.client.models.WalletKeyDto;
import com.affinidi.tdk.wallets.client.models.VerificationRelationship;
import com.affinidi.tdk.wallets.client.models.CreateWalletKeyInput.KeyTypeEnum;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    WalletApi apiInstance = new WalletApi(defaultClient);

    CreateWalletKeyInput requestInput = new CreateWalletKeyInput()
        .keyType(KeyTypeEnum.ED25519)
        .relationships(List.of(VerificationRelationship.AUTHENTICATION, VerificationRelationship.ASSERTION_METHOD));

    WalletKeyDto result = apiInstance.createWalletKey("", requestInput);
    System.out.println(result.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### listWalletKeys

Retrieves all keys associated with a wallet.

Note: Multiple keys are only supported for did:web wallets.

Parameters

    walletId
    String
    Required
  ID of the wallet.

Example

```java
import com.affinidi.tdk.wallets.client.Configuration;
import com.affinidi.tdk.wallets.client.ApiClient;
import com.affinidi.tdk.wallets.client.apis.WalletApi;
import com.affinidi.tdk.wallets.client.auth.ApiKeyAuth;
import com.affinidi.tdk.wallets.client.models.ListWalletKeysOK;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    WalletApi apiInstance = new WalletApi(defaultClient);
    ListWalletKeysOK result = apiInstance.listWalletKeys("");
    System.out.println(result.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### removeWalletKey

Removes a key from a wallet.

Note: Multiple keys are only supported for did:web wallets.

Parameters

    walletId
    String
    Required
  ID of the wallet.

    keyId
    String
    Required
  Wallet-scoped key identifier (e.g. "key-1").

Example

```java
import com.affinidi.tdk.wallets.client.Configuration;
import com.affinidi.tdk.wallets.client.ApiClient;
import com.affinidi.tdk.wallets.client.apis.WalletApi;
import com.affinidi.tdk.wallets.client.auth.ApiKeyAuth;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    WalletApi apiInstance = new WalletApi(defaultClient);
    apiInstance.removeWalletKey("", "key-1");
} catch (Exception e) {
    e.printStackTrace();
}
```

#### updateWalletKey

Updates the verification relationships of an existing wallet key.

Note: Multiple keys are only supported for did:web wallets.

Parameters

    walletId
    String
    Required
  ID of the wallet.

    keyId
    String
    Required
  Wallet-scoped key identifier (e.g. "key-1").

    updateWalletKeyInput
    [UpdateWalletKeyInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/wallets.client/docs/UpdateWalletKeyInput.md)
    Required
  Updated verification relationships for the key.

Example

```java
import com.affinidi.tdk.wallets.client.Configuration;
import com.affinidi.tdk.wallets.client.ApiClient;
import com.affinidi.tdk.wallets.client.apis.WalletApi;
import com.affinidi.tdk.wallets.client.auth.ApiKeyAuth;
import java.util.List;
import com.affinidi.tdk.wallets.client.models.UpdateWalletKeyInput;
import com.affinidi.tdk.wallets.client.models.WalletKeyDto;
import com.affinidi.tdk.wallets.client.models.VerificationRelationship;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    WalletApi apiInstance = new WalletApi(defaultClient);

    UpdateWalletKeyInput requestInput = new UpdateWalletKeyInput()
        .relationships(List.of(VerificationRelationship.AUTHENTICATION, VerificationRelationship.KEY_AGREEMENT));

    WalletKeyDto result = apiInstance.updateWalletKey("", "key-1", requestInput);
    System.out.println(result.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### createServiceEndpoint

Adds a DID service endpoint to a wallet’s DID document.

Parameters

    walletId
    String
    Required
  ID of the wallet.

    serviceEndpointInput
    [ServiceEndpointInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/wallets.client/docs/ServiceEndpointInput.md)
    Required
  Service endpoint URL, name, and type.

Example

```java
import com.affinidi.tdk.wallets.client.Configuration;
import com.affinidi.tdk.wallets.client.ApiClient;
import com.affinidi.tdk.wallets.client.apis.WalletApi;
import com.affinidi.tdk.wallets.client.auth.ApiKeyAuth;
import com.affinidi.tdk.wallets.client.models.ServiceEndpointInput;
import com.affinidi.tdk.wallets.client.models.ServiceEndpointDto;
import com.affinidi.tdk.wallets.client.models.ServiceEndpointInput.ServiceTypeEnum;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    WalletApi apiInstance = new WalletApi(defaultClient);

    ServiceEndpointInput requestInput = new ServiceEndpointInput()
        .url("https://example.com/messaging")
        .name("My Messaging Service")
        .serviceType(ServiceTypeEnum.DID_COMM_MESSAGING);

    ServiceEndpointDto result = apiInstance.createServiceEndpoint("", requestInput);
    System.out.println(result.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### listServiceEndpoints

Retrieves all service endpoints associated with a wallet.

Parameters

    walletId
    String
    Required
  ID of the wallet.

Example

```java
import com.affinidi.tdk.wallets.client.Configuration;
import com.affinidi.tdk.wallets.client.ApiClient;
import com.affinidi.tdk.wallets.client.apis.WalletApi;
import com.affinidi.tdk.wallets.client.auth.ApiKeyAuth;
import com.affinidi.tdk.wallets.client.models.ListServiceEndpointsOK;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    WalletApi apiInstance = new WalletApi(defaultClient);
    ListServiceEndpointsOK result = apiInstance.listServiceEndpoints("");
    System.out.println(result.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### removeServiceEndpoint

Removes a service endpoint from a wallet’s DID document.

Parameters

    walletId
    String
    Required
  ID of the wallet.

    serviceId
    String
    Required
  ID of the service endpoint to remove.

Example

```java
import com.affinidi.tdk.wallets.client.Configuration;
import com.affinidi.tdk.wallets.client.ApiClient;
import com.affinidi.tdk.wallets.client.apis.WalletApi;
import com.affinidi.tdk.wallets.client.auth.ApiKeyAuth;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    WalletApi apiInstance = new WalletApi(defaultClient);
    apiInstance.removeServiceEndpoint("", "");
} catch (Exception e) {
    e.printStackTrace();
}
```

#### updateServiceEndpoint

Updates an existing service endpoint on a wallet.

Parameters

    walletId
    String
    Required
  ID of the wallet.

    serviceId
    String
    Required
  ID of the service endpoint to update.

    updateServiceEndpointInput
    [UpdateServiceEndpointInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/wallets.client/docs/UpdateServiceEndpointInput.md)
    Required
  Updated name and URL for the service endpoint.

Example

```java
import com.affinidi.tdk.wallets.client.Configuration;
import com.affinidi.tdk.wallets.client.ApiClient;
import com.affinidi.tdk.wallets.client.apis.WalletApi;
import com.affinidi.tdk.wallets.client.auth.ApiKeyAuth;
import com.affinidi.tdk.wallets.client.models.UpdateServiceEndpointInput;
import com.affinidi.tdk.wallets.client.models.ServiceEndpointDto;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    WalletApi apiInstance = new WalletApi(defaultClient);

    UpdateServiceEndpointInput requestInput = new UpdateServiceEndpointInput()
        .name("Updated Service Name")
        .url("https://new-endpoint.example.com");

    ServiceEndpointDto result = apiInstance.updateServiceEndpoint("", "", requestInput);
    System.out.println(result.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```
