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>

Check the latest version on the Maven Central repository or view the source on GitHub.

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 Required
Details of the issuance configuration to create.

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();
    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<>(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

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("<CONFIG_ID>");
} 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

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("<CONFIG_ID>");
    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

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 Required
Updated configuration details.

Example

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("<WALLET_ID>")
        .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("<CONFIG_ID>", 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

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("<ISSUANCE_ID>", "<PROJECT_ID>");
    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

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("<PROJECT_ID>");
    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 Required
Details of the credentials to issue, including credential type, data, and claim mode.

Example

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<String, Object> 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("<PROJECT_ID>", 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 Required
List of credential requests, each with a credential identifier and a proof JWT.

Example

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("<PROOF_JWT>");

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

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

    BatchCredentialResponse result = apiInstance.batchCredential("<PROJECT_ID>", 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 Required
Credential identifier and proof JWT.

Example

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("<PROOF_JWT>"));

    CredentialResponse response = apiInstance.generateCredentials("<PROJECT_ID>", 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

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(
        "<PROJECT_ID>", "<CONFIG_ID>", "<START_DATE>", "<END_DATE>", 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 Required
Revocation reason and issuance record ID.

Example

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("<RECORD_ID>");

    FlowData response = apiInstance.changeCredentialStatus("<PROJECT_ID>", "<CONFIG_ID>", 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

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(
        "<PROJECT_ID>", "<CONFIG_ID>", 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

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("<PROJECT_ID>", "<ISSUANCE_ID>");
    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

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("<PROJECT_ID>");
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}