Credential Issuance

Issue a Verifiable Credentials using Credential Issuance Service.

Install Dependency

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

<dependency>
    <groupId>com.affinidi.tdk</groupId>
    <artifactId>credential.issuance.client</artifactId>
    <version>VERSION_NUMBER</version>
</dependency>

You can check the latest version of this module on the Maven repository or view the source code at the GitHub repository.

Classes and Methods

Configuration API

Manage the issuance configuration for the project. Project only one issuance configuration.

createIssuanceConfig

Create an issuance configuration for the project.

Parameters

CreateIssuanceConfigInput [Object]

JSON object to provide the details of the configuration. See more here.

Example

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();
    // Configure API key authorization: ProjectTokenAuth
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    ConfigurationApi apiInstance = new ConfigurationApi(defaultClient);

    CreateIssuanceConfigInput requestInput = new CreateIssuanceConfigInput()
                .name("Issuance Name")
                .issuerWalletId("<WALLET_ID>")
                .returnUris(null)
                .credentialSupported(new ArrayList<CredentialSupportedObject>(
                                    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

Delete the issuance configuration by ID.

Parameters

configurationId [String]

ID of the issuance configuration to delete.

Example

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.apis.ConfigurationApi;

try {

    ApiClient defaultClient = Configuration.getDefaultApiClient();
    // Configure API key authorization: ProjectTokenAuth
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    ConfigurationApi apiInstance = new ConfigurationApi(defaultClient);

    String configurationId = "<CONFIG_ID>";

    apiInstance.deleteIssuanceConfigById(configurationId);

} catch (Exception e) {
    e.printStackTrace();
}

getIssuanceConfigById

Retrieves the Issuance Configuration details by ID.

Parameters

configurationId [String]

ID of the issuance configuration to retrieve.

Example

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.IssuanceConfigDto;
import com.affinidi.tdk.credential.issuance.client.apis.ConfigurationApi;

try {

    ApiClient defaultClient = Configuration.getDefaultApiClient();
    // Configure API key authorization: ProjectTokenAuth
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    ConfigurationApi apiInstance = new ConfigurationApi(defaultClient);

    String configurationId = "<CONFIG_ID>";

    IssuanceConfigDto response = apiInstance.getIssuanceConfigById(configurationId);

    System.out.println(response.toString());

} catch (Exception e) {
    e.printStackTrace();
}

getIssuanceConfigList

Get the list of issuance configuration for the current project.

Parameters

No Parameters Required

Example

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.IssuanceConfigListResponse;
import com.affinidi.tdk.credential.issuance.client.apis.ConfigurationApi;

try {

    ApiClient defaultClient = Configuration.getDefaultApiClient();
    // Configure API key authorization: ProjectTokenAuth
    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

Update the existing Issuance Configuration by ID.

Parameters

configurationId [String]

ID of the issuance configuration to retrieve.

UpdateIssuanceConfigInput [Object]

JSON object to provide the details to update the issuance configuration. See more here.

Example

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.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();
    // Configure API key authorization: ProjectTokenAuth
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    ConfigurationApi apiInstance = new ConfigurationApi(defaultClient);

    String configurationId = "e145ce65-e757-42d6-8e50-2fead95eb6f1";
    UpdateIssuanceConfigInput requestInput = new UpdateIssuanceConfigInput()
                .name("Issuance")
                .issuerWalletId("<WALLET_ID>")
                .returnUris(null)
                .credentialSupported(new ArrayList<CredentialSupportedObject>(
                                    List.of(new CredentialSupportedObject()
                                        .credentialTypeId("Membership")
                                        .jsonSchemaUrl("https://schema.affinidi.io/TMembershipV1R0.json")
                                        .jsonLdContextUrl("https://schema.affinidi.io/TMembershipV1R0.jsonld")
                                    )));

    IssuanceConfigDto response = apiInstance.updateIssuanceConfigById(configurationId, requestInput);

    System.out.println(response.toString());

} catch (Exception e) {
    e.printStackTrace();
}

Issuance API

Use to initiate issuance of the credential and check the status.

issuanceState

Retrieve the status of issuance.

Parameters

issuanceId [String]

ID of the initiated issuance.

projectId [String]

Project ID from where the issuance was initiated.

Example

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.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();
    // Configure API key authorization: ProjectTokenAuth
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    // Iniialize the API client
    IssuanceApi apiInstance = new IssuanceApi(defaultClient);
    
    String issuanceId = "<ISSUANCE_ID>";
    String projectId = "<PROJECT_ID>";

    IssuanceStateResponse response = apiInstance.issuanceState(issuanceId, projectId);

    System.out.println(response.toString());

} catch (Exception e) {
    e.printStackTrace();
}

listIssuance

Get the list of issuance initiated in the Project.

Parameters

projectId [String]

Project ID from where to list the issuance.

Example

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.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();
    // Configure API key authorization: ProjectTokenAuth
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    // Iniialize the API client
    IssuanceApi apiInstance = new IssuanceApi(defaultClient);
    
    String projectId = "<PROJECT_ID>";
    ListIssuanceResponse response = apiInstance.listIssuance(projectId);

    System.out.println(response.toString());

} catch (Exception e) {
    e.printStackTrace();
}
}

startIssuance

Used to initiate the issuance of the credential.

Parameters

projectId [String]

Project ID from where to initiate the issuance.

StartIssuanceInput [Object]

JSON object to provide the details of the credentials to issue. See more here.

Example

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.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();
    // Configure API key authorization: ProjectTokenAuth
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    // Iniialize the API client
    IssuanceApi apiInstance = new IssuanceApi(defaultClient);

    Map<String, Object> credentialData = new HashMap<String, Object>();
        credentialData.put("Firstname","Firstname");
        credentialData.put("Lastname","Lastname");
        credentialData.put("ExpiryDate","1990-01-01");
    
    // Create input for issuance service
    StartIssuanceInput startIssuanceInput = new StartIssuanceInput()
            .claimMode(ClaimModeEnum.TX_CODE)
            .data(new ArrayList<StartIssuanceInputDataInner>(
                    List.of(new StartIssuanceInputDataInner()
                            .credentialTypeId("SchemaOne")
                            .credentialData(credentialData))));

    String projectId = "<PROJECT_ID>";
    
    // Issue the credential using the data above
    StartIssuanceResponse response = apiInstance.startIssuance(projectId, startIssuanceInput);

    System.out.println(response.toString());

} catch (Exception e) {
    e.printStackTrace();
}

Credentials API

Issue a Verifiable Credentials to the users.

generateCredentials

Generate and issue a credentil offer to the user.

Parameters

projectId [String]

Project ID from where you want to issue the credential.

CreateCredentialInput [Object]

JSON object to provide the details of the credential to generate. See more here.

Example

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.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();
    // Configure API key authorization: ProjectTokenAuth
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    CredentialsApi apiInstance = new CredentialsApi(defaultClient);

    String projectId = dotenv.get("PROJECT_ID");
    CreateCredentialInput createCredentialInput = new CreateCredentialInput()
        .credentialIdentifier(projectId)
        .proof(new CredentialProof()
                .proofType(ProofTypeEnum.JWT)
                .jwt("eyJ0eXAiOiJvcGVuaWQ0dmNpLXByb29mK2p3dCIsImFsZyI6IkVTMjU2IiwiandrI
            jp7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYiLCJ4IjoiblVXQW9BdjNYWml0aDhFN2k
            xOU9kYXhPTFlGT3dNLVoyRXVNMDJUaXJUNCIsInkiOiJIc2tIVThCalVpMVU5WHFpN
            1N3bWo4Z3dBS18weGtjRGpFV183MVNvc0VZIn19.eyJhdWQiOiJodHRwczovL2NyZW
            RlbnRpYWwtaXNzdWVyLmV4YW1wbGUuY29tIiwiaWF0IjoxNzAxOTYwNDQ0LCJub25j
            ZSI6IkxhclJHU2JtVVBZdFJZTzZCUTR5bjgifQ.-a3EDsxClUB4O3LeDD5DVGEnNMT
            01FCQW4P6-2-BNBqc_Zxf0Qw4CWayLEpqkAomlkLb9zioZoipdP-jvh1WlA"));

    CredentialResponse response = apiInstance.generateCredentials(projectId, createCredentialInput);

    System.out.println(response.toString());

} catch (Exception e) {
    e.printStackTrace();
}

Default API

Revoke a revocable Verifiable Credentials issued to the users.

changeCredentialStatus

Updates the status of the credential (e.g., REVOKED).

Parameters

projectId [String]

Project ID from where the credential is issued.

configurationId [String]

Configuration ID from where the credential is issued.

ChangeCredentialStatusInput [Object]

JSON object with details of the credential to revoke. See more here.

Example

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.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();
    // Configure API key authorization: ProjectTokenAuth
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    DefaultApi apiInstance = new DefaultApi(defaultClient);

    String projectId = "<PROJECT_ID>";
    String configurationId = "<CONFIG_ID>";

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

    FlowData response = apiInstance.changeCredentialStatus(projectId, configurationId, requestInput);

    System.out.println(response.toString());

} catch (Exception e) {
    e.printStackTrace();
}

listIssuanceDataRecords

Retrieves the list of records of revocable credentials. The list contains information about the issued credential, such as status, including the record ID, which you can use to revoke a particular credential.

Parameters

projectId [String]

Project ID from where the credential is issued.

configurationId [String]

Configuration ID from where the credential is issued.

limit [Integer]

Maximum number of records to fetch in a list.

exclusiveStartKey [String]

The base64url encoded key of the first item that this operation will evaluate (it is not returned). Use the value that was returned in the previous operation.

Example

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.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();
    // Configure API key authorization: ProjectTokenAuth
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    DefaultApi apiInstance = new DefaultApi(defaultClient);

    String projectId = "<PROJECT_ID>";
    String configurationId = "<CONFIG_ID>";
    Integer limit = 10;

    ListIssuanceRecordResponse response = apiInstance.listIssuanceDataRecords(projectId, configurationId, limit, null);

    System.out.println(response.toString());

} catch (Exception e) {
    e.printStackTrace();
}

Offer API

Used to get the credential offer initiated by the Issuance API.

getCredentialOffer

Retrieves the credential offer details.

Parameters

issuanceId [String]

ID of the issuance initiated.

Example

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.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();
    // Configure API key authorization: ProjectTokenAuth
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    OfferApi apiInstance = new OfferApi(defaultClient);

    String projectId = "<PROJECT_ID>";
    String issuanceId = "<ISSUANCE_ID>";

    CredentialOfferResponse response = apiInstance.getCredentialOffer(projectId, issuanceId);

    System.out.println(response.toString());

} catch (Exception e) {
    e.printStackTrace();
}

WellKnown API

Used to get the WellKnown OpenID Credential Issuer information.

getWellKnownOpenIdCredentialIssuer

Retrieves the credential issuer well-known configurations.

Parameters

No Parameters Required

Example

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.WellKnownOpenIdCredentialIssuerResponse;
import com.affinidi.tdk.credential.issuance.client.apis.WellKnownApi;

try {

    ApiClient defaultClient = Configuration.getDefaultApiClient();
    // Configure API key authorization: ProjectTokenAuth
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    WellKnownApi apiInstance = new WellKnownApi(defaultClient);

    String projectId = "<PROJECT_ID>";

    WellKnownOpenIdCredentialIssuerResponse response = apiInstance.getWellKnownOpenIdCredentialIssuer(projectId);

    System.out.println(response.toString());

} catch (Exception e) {
    e.printStackTrace();
}