# Credential Issuance

> Issue a Verifiable Credentials using Credential Issuance Service.

## Install Dependency

Package: pkg:maven/com.affinidi.tdk/credential.issuance.client@1.4.0

```xml

    com.affinidi.tdk
    credential.issuance.client
    VERSION_NUMBER

```

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

## Classes and Methods

### Configuration API

Manages the issuance configuration for the project. Each project supports one issuance configuration.

#### createIssuanceConfig

Creates an issuance configuration for the project.

Parameters

    createIssuanceConfigInput
    [CreateIssuanceConfigInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/credential.issuance.client/docs/CreateIssuanceConfigInput.md)
    Required
  Details of the issuance configuration to create.

Example

```java
import com.affinidi.tdk.authProvider.AuthProvider;
import com.affinidi.tdk.credential.issuance.client.ApiClient;
import com.affinidi.tdk.credential.issuance.client.Configuration;
import com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth;
import com.affinidi.tdk.credential.issuance.client.models.CreateIssuanceConfigInput;
import com.affinidi.tdk.credential.issuance.client.models.CredentialSupportedObject;
import com.affinidi.tdk.credential.issuance.client.models.IssuanceConfigDto;
import com.affinidi.tdk.credential.issuance.client.apis.ConfigurationApi;

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

    ConfigurationApi apiInstance = new ConfigurationApi(defaultClient);

    CreateIssuanceConfigInput requestInput = new CreateIssuanceConfigInput()
        .name("Issuance Name")
        .issuerWalletId("")
        .returnUris(null)
        .credentialSupported(new ArrayList<>(List.of(
            new CredentialSupportedObject()
                .credentialTypeId("Membership")
                .jsonSchemaUrl("https://schema.affinidi.io/TMembershipV1R0.json")
                .jsonLdContextUrl("https://schema.affinidi.io/TMembershipV1R0.jsonld")
        )));

    IssuanceConfigDto response = apiInstance.createIssuanceConfig(requestInput);
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### deleteIssuanceConfigById

Deletes the issuance configuration by ID.

Parameters

    configurationId
    String
    Required
  ID of the issuance configuration to delete.

Example

```java
import com.affinidi.tdk.credential.issuance.client.ApiClient;
import com.affinidi.tdk.credential.issuance.client.Configuration;
import com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth;
import com.affinidi.tdk.credential.issuance.client.apis.ConfigurationApi;

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

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

#### getIssuanceConfigById

Retrieves the issuance configuration details by ID.

Parameters

    configurationId
    String
    Required
  ID of the issuance configuration to retrieve.

Example

```java
import com.affinidi.tdk.credential.issuance.client.ApiClient;
import com.affinidi.tdk.credential.issuance.client.Configuration;
import com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth;
import com.affinidi.tdk.credential.issuance.client.models.IssuanceConfigDto;
import com.affinidi.tdk.credential.issuance.client.apis.ConfigurationApi;

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

    ConfigurationApi apiInstance = new ConfigurationApi(defaultClient);
    IssuanceConfigDto response = apiInstance.getIssuanceConfigById("");
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### getIssuanceConfigList

Returns the list of issuance configurations for the current project.

No parameters required.

Example

```java
import com.affinidi.tdk.credential.issuance.client.ApiClient;
import com.affinidi.tdk.credential.issuance.client.Configuration;
import com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth;
import com.affinidi.tdk.credential.issuance.client.models.IssuanceConfigListResponse;
import com.affinidi.tdk.credential.issuance.client.apis.ConfigurationApi;

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

    ConfigurationApi apiInstance = new ConfigurationApi(defaultClient);
    IssuanceConfigListResponse response = apiInstance.getIssuanceConfigList();
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### updateIssuanceConfigById

Updates an existing issuance configuration by ID.

Parameters

    configurationId
    String
    Required
  ID of the issuance configuration to update.

    updateIssuanceConfigInput
    [UpdateIssuanceConfigInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/credential.issuance.client/docs/UpdateIssuanceConfigInput.md)
    Required
  Updated configuration details.

Example

```java
import com.affinidi.tdk.credential.issuance.client.ApiClient;
import com.affinidi.tdk.credential.issuance.client.Configuration;
import com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth;
import com.affinidi.tdk.credential.issuance.client.models.CredentialSupportedObject;
import com.affinidi.tdk.credential.issuance.client.models.IssuanceConfigDto;
import com.affinidi.tdk.credential.issuance.client.models.UpdateIssuanceConfigInput;
import com.affinidi.tdk.credential.issuance.client.apis.ConfigurationApi;

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

    ConfigurationApi apiInstance = new ConfigurationApi(defaultClient);

    UpdateIssuanceConfigInput requestInput = new UpdateIssuanceConfigInput()
        .name("Issuance")
        .issuerWalletId("")
        .returnUris(null)
        .credentialSupported(new ArrayList<>(List.of(
            new CredentialSupportedObject()
                .credentialTypeId("Membership")
                .jsonSchemaUrl("https://schema.affinidi.io/TMembershipV1R0.json")
                .jsonLdContextUrl("https://schema.affinidi.io/TMembershipV1R0.jsonld")
        )));

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

### Issuance API

Initiates issuance of credentials and checks their status.

#### issuanceState

Retrieves the status of an issuance.

Parameters

    issuanceId
    String
    Required
  ID of the initiated issuance.

    projectId
    String
    Required
  ID of the project from which the issuance was initiated.

Example

```java
import com.affinidi.tdk.credential.issuance.client.ApiClient;
import com.affinidi.tdk.credential.issuance.client.Configuration;
import com.affinidi.tdk.credential.issuance.client.apis.IssuanceApi;
import com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth;
import com.affinidi.tdk.credential.issuance.client.models.IssuanceStateResponse;

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

    IssuanceApi apiInstance = new IssuanceApi(defaultClient);
    IssuanceStateResponse response = apiInstance.issuanceState("", "

");
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### listIssuance

Returns the list of issuances initiated in the project.

Parameters

    projectId
    String
    Required
  ID of the project.

Example

```java
import com.affinidi.tdk.credential.issuance.client.ApiClient;
import com.affinidi.tdk.credential.issuance.client.Configuration;
import com.affinidi.tdk.credential.issuance.client.apis.IssuanceApi;
import com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth;
import com.affinidi.tdk.credential.issuance.client.models.ListIssuanceResponse;

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

    IssuanceApi apiInstance = new IssuanceApi(defaultClient);
    ListIssuanceResponse response = apiInstance.listIssuance("

");
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### startIssuance

Initiates the issuance of credentials.

Parameters

    projectId
    String
    Required
  ID of the project from which to initiate the issuance.

    startIssuanceInput
    [StartIssuanceInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/credential.issuance.client/docs/StartIssuanceInput.md)
    Required
  Details of the credentials to issue, including credential type, data, and claim mode.

Example

```java
import com.affinidi.tdk.credential.issuance.client.ApiClient;
import com.affinidi.tdk.credential.issuance.client.Configuration;
import com.affinidi.tdk.credential.issuance.client.apis.IssuanceApi;
import com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth;
import com.affinidi.tdk.credential.issuance.client.models.StartIssuanceInput;
import com.affinidi.tdk.credential.issuance.client.models.StartIssuanceInput.ClaimModeEnum;
import com.affinidi.tdk.credential.issuance.client.models.StartIssuanceInputDataInner;
import com.affinidi.tdk.credential.issuance.client.models.StartIssuanceResponse;

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

    IssuanceApi apiInstance = new IssuanceApi(defaultClient);

    Map credentialData = new HashMap<>();
    credentialData.put("Firstname", "Firstname");
    credentialData.put("Lastname", "Lastname");
    credentialData.put("ExpiryDate", "1990-01-01");

    StartIssuanceInput startIssuanceInput = new StartIssuanceInput()
        .claimMode(ClaimModeEnum.TX_CODE)
        .data(new ArrayList<>(List.of(
            new StartIssuanceInputDataInner()
                .credentialTypeId("SchemaOne")
                .credentialData(credentialData)
        )));

    StartIssuanceResponse response = apiInstance.startIssuance("

", startIssuanceInput);
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

### Credentials API

Issues Verifiable Credentials to users.

#### batchCredential

Allows digital wallets to claim multiple credentials at once.

Parameters

    projectId
    String
    Required
  ID of the project from which to issue the credentials.

    batchCredentialInput
    [BatchCredentialInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/credential.issuance.client/docs/BatchCredentialInput.md)
    Required
  List of credential requests, each with a credential identifier and a proof JWT.

Example

```java
import com.affinidi.tdk.credential.issuance.client.ApiClient;
import com.affinidi.tdk.credential.issuance.client.Configuration;
import com.affinidi.tdk.credential.issuance.client.apis.CredentialsApi;
import com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth;
import com.affinidi.tdk.credential.issuance.client.models.BatchCredentialInput;
import com.affinidi.tdk.credential.issuance.client.models.BatchCredentialInputCredentialRequestsInner;
import com.affinidi.tdk.credential.issuance.client.models.BatchCredentialResponse;
import com.affinidi.tdk.credential.issuance.client.models.CredentialProof;

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

    CredentialsApi apiInstance = new CredentialsApi(defaultClient);

    CredentialProof proof = new CredentialProof()
        .proofType(CredentialProof.ProofTypeEnum.JWT)
        .jwt("

");

    List credentialRequests = new ArrayList<>();
    credentialRequests.add(new BatchCredentialInputCredentialRequestsInner()
        .credentialIdentifier("credential_identifier_1")
        .proof(proof));

    BatchCredentialInput batchCredentialInput = new BatchCredentialInput()
        .credentialRequests(credentialRequests);

    BatchCredentialResponse result = apiInstance.batchCredential("

", batchCredentialInput);
    System.out.println(result.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### generateCredentials

Generates and issues a credential offer to the user.

Parameters

    projectId
    String
    Required
  ID of the project from which to issue the credential.

    createCredentialInput
    [CreateCredentialInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/credential.issuance.client/docs/CreateCredentialInput.md)
    Required
  Credential identifier and proof JWT.

Example

```java
import com.affinidi.tdk.credential.issuance.client.ApiClient;
import com.affinidi.tdk.credential.issuance.client.Configuration;
import com.affinidi.tdk.credential.issuance.client.apis.CredentialsApi;
import com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth;
import com.affinidi.tdk.credential.issuance.client.models.CreateCredentialInput;
import com.affinidi.tdk.credential.issuance.client.models.CredentialProof;
import com.affinidi.tdk.credential.issuance.client.models.CredentialResponse;
import com.affinidi.tdk.credential.issuance.client.models.CredentialProof.ProofTypeEnum;

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

    CredentialsApi apiInstance = new CredentialsApi(defaultClient);

    CreateCredentialInput createCredentialInput = new CreateCredentialInput()
        .credentialIdentifier("SchemaOne")
        .proof(new CredentialProof()
            .proofType(ProofTypeEnum.JWT)
            .jwt("

"));

    CredentialResponse response = apiInstance.generateCredentials("

", createCredentialInput);
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### getClaimedCredentials

Retrieves claimed credentials in the specified date range.

Parameters

    projectId
    String
    Required
  ID of the project.

    configurationId
    String
    Required
  ID of the issuance configuration.

    rangeStartTime
    String
    Required
  Start date of the range (ISO 8601 format).

    rangeEndTime
    String
    Required
  End date of the range (ISO 8601 format).

    exclusiveStartKey
    String
    Optional
  Base64url-encoded key of the first item that this operation will evaluate (it is not returned). Use the value returned in the previous operation to paginate.

    limit
    Integer
    Optional
  Maximum number of records to return.

Example

```java
import com.affinidi.tdk.credential.issuance.client.ApiClient;
import com.affinidi.tdk.credential.issuance.client.Configuration;
import com.affinidi.tdk.credential.issuance.client.apis.CredentialsApi;
import com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth;

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

    CredentialsApi apiInstance = new CredentialsApi(defaultClient);
    Object result = apiInstance.getClaimedCredentials(
        "

", "", "", "", null, 10
    );
    System.out.println(result.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

### Default API

Revokes revocable Verifiable Credentials issued to users.

#### changeCredentialStatus

Updates the status of a credential (for example, REVOKED).

Parameters

    projectId
    String
    Required
  ID of the project from which the credential was issued.

    configurationId
    String
    Required
  ID of the issuance configuration.

    changeCredentialStatusInput
    [ChangeCredentialStatusInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/credential.issuance.client/docs/ChangeCredentialStatusInput.md)
    Required
  Revocation reason and issuance record ID.

Example

```java
import com.affinidi.tdk.credential.issuance.client.ApiClient;
import com.affinidi.tdk.credential.issuance.client.Configuration;
import com.affinidi.tdk.credential.issuance.client.apis.DefaultApi;
import com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth;
import com.affinidi.tdk.credential.issuance.client.models.ChangeCredentialStatusInput;
import com.affinidi.tdk.credential.issuance.client.models.ChangeCredentialStatusInput.ChangeReasonEnum;
import com.affinidi.tdk.credential.issuance.client.models.FlowData;

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

    DefaultApi apiInstance = new DefaultApi(defaultClient);

    ChangeCredentialStatusInput requestInput = new ChangeCredentialStatusInput()
        .changeReason(ChangeReasonEnum.INVALID_CREDENTIAL)
        .issuanceRecordId("");

    FlowData response = apiInstance.changeCredentialStatus("

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

#### listIssuanceDataRecords

Retrieves the list of records for revocable credentials.

Parameters

    projectId
    String
    Required
  ID of the project from which the credentials were issued.

    configurationId
    String
    Required
  ID of the issuance configuration.

    limit
    Integer
    Optional
  Maximum number of records to return.

Example

```java
import com.affinidi.tdk.credential.issuance.client.ApiClient;
import com.affinidi.tdk.credential.issuance.client.Configuration;
import com.affinidi.tdk.credential.issuance.client.apis.DefaultApi;
import com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth;
import com.affinidi.tdk.credential.issuance.client.models.ListIssuanceRecordResponse;

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

    DefaultApi apiInstance = new DefaultApi(defaultClient);
    ListIssuanceRecordResponse response = apiInstance.listIssuanceDataRecords(
        "

", "", 10, null
    );
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

### Offer API

Retrieves credential offers initiated by the Issuance API.

#### getCredentialOffer

Retrieves the credential offer details.

Parameters

    projectId
    String
    Required
  ID of the project.

    issuanceId
    String
    Required
  ID of the initiated issuance.

Example

```java
import com.affinidi.tdk.credential.issuance.client.ApiClient;
import com.affinidi.tdk.credential.issuance.client.Configuration;
import com.affinidi.tdk.credential.issuance.client.apis.OfferApi;
import com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth;
import com.affinidi.tdk.credential.issuance.client.models.CredentialOfferResponse;

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

    OfferApi apiInstance = new OfferApi(defaultClient);
    CredentialOfferResponse response = apiInstance.getCredentialOffer("

", "");
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

### WellKnown API

Retrieves WellKnown OpenID Credential Issuer information.

#### getWellKnownOpenIdCredentialIssuer

Retrieves the credential issuer well-known configurations.

Parameters

    projectId
    String
    Required
  ID of the project.

Example

```java
import com.affinidi.tdk.credential.issuance.client.ApiClient;
import com.affinidi.tdk.credential.issuance.client.Configuration;
import com.affinidi.tdk.credential.issuance.client.auth.ApiKeyAuth;
import com.affinidi.tdk.credential.issuance.client.models.WellKnownOpenIdCredentialIssuerResponse;
import com.affinidi.tdk.credential.issuance.client.apis.WellKnownApi;

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

    WellKnownApi apiInstance = new WellKnownApi(defaultClient);
    WellKnownOpenIdCredentialIssuerResponse response = apiInstance.getWellKnownOpenIdCredentialIssuer("

");
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```
