Credential Issuance
Install Dependency
Package: affinidi_tdk_credential_issuance_client
dart pub add affinidi_tdk_credential_issuance_clientCheck the latest version on pub.dev or view the source on GitHub.
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
Example
import 'package:dio/dio.dart';
import 'package:built_collection/built_collection.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late ConfigurationApi configurationApi;
final issuanceClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
configurationApi = issuanceClient.getConfigurationApi();
final name = "TestConfig";
final description = "Test issuance config";
final format = CreateIssuanceConfigInputFormatEnum.ldpVc;
final credentialOfferDuration = 600;
final metadata = SupportedCredentialMetadataBuilder()
..display = ListBuilder([
SupportedCredentialMetadataDisplayInner((b) => b
..name = "Test Display"
..logo = (SupportedCredentialMetadataItemLogoBuilder()
..url = "https://example.com/logo.png"
..altText = "Logo"))
]);
final credentialSupported = [
CredentialSupportedObject((b) => b
..credentialTypeId = "SchemaOne"
..jsonSchemaUrl = "https://schema.affinidi.io/SchemaOne.json"
..jsonLdContextUrl = "https://schema.affinidi.io/SchemaOne.jsonld"
..metadata = metadata),
CredentialSupportedObject((b) => b
..credentialTypeId = "SchemaTwo"
..jsonSchemaUrl = "https://schema.affinidi.io/SchemaTwo.json"
..jsonLdContextUrl = "https://schema.affinidi.io/SchemaTwo.jsonld"
..metadata = metadata),
CredentialSupportedObject((b) => b
..credentialTypeId = "SchemaThree"
..jsonSchemaUrl = "https://schema.affinidi.io/SchemaThree.json"
..jsonLdContextUrl = "https://schema.affinidi.io/SchemaThree.jsonld"
..metadata = metadata),
CredentialSupportedObject((b) => b
..credentialTypeId = "SchemaFour"
..jsonSchemaUrl = "https://schema.affinidi.io/SchemaFour.json"
..jsonLdContextUrl = "https://schema.affinidi.io/SchemaFour.jsonld"
..metadata = metadata),
];
final configInputBuilder = CreateIssuanceConfigInputBuilder()
..issuerWalletId = "<WALLET_ID>"
..name = name
..description = description
..format = format
..credentialOfferDuration = credentialOfferDuration
..credentialSupported = ListBuilder(credentialSupported);
final response = (await configurationApi.createIssuanceConfig(createIssuanceConfigInput: configInputBuilder.build()));
print(response);
} catch (e) {
print('Exception: $e');
}deleteIssuanceConfigById
Delete the issuance configuration by ID.
Parameters
configurationId
String
RequiredExample
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late ConfigurationApi configurationApi;
final issuanceClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
configurationApi = issuanceClient.getConfigurationApi();
final configurationId = "<CONFIG_ID>";
final response = (await configurationApi.deleteIssuanceConfigById(configurationId: configurationId));
print(response);
} catch (e) {
print('Exception: $e');
}getIssuanceConfigById
Retrieves the issuance configuration details by ID.
Parameters
configurationId
String
RequiredExample
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late ConfigurationApi configurationApi;
final issuanceClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
configurationApi = issuanceClient.getConfigurationApi();
final configurationId = "<CONFIG_ID>";
final response = (await configurationApi.getIssuanceConfigById(configurationId: configurationId));
print(response);
} catch (e) {
print('Exception: $e');
}getIssuanceConfigList
Get the list of issuance configurations for the current project.
No parameters required.
Example
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late ConfigurationApi configurationApi;
final issuanceClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
configurationApi = issuanceClient.getConfigurationApi();
final response = (await configurationApi.getIssuanceConfigList());
print(response);
} catch (e) {
print('Exception: $e');
}updateIssuanceConfigById
Update the existing issuance configuration by ID.
Parameters
configurationId
String
RequiredExample
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late ConfigurationApi configurationApi;
final issuanceClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
configurationApi = issuanceClient.getConfigurationApi();
final String updatedDescription = 'UpdatedDescription';
final configurationId = "<CONFIG_ID>";
final updateIssuanceConfigInput = UpdateIssuanceConfigInputBuilder()
..description = updatedDescription;
final response = (await configurationApi.updateIssuanceConfigById(configurationId: configurationId, updateIssuanceConfigInput: updateIssuanceConfigInput.build())).data;
print(response);
} catch (e) {
print('Exception: $e');
}Issuance API
Use to initiate issuance of the credential and check the status.
issuanceState
Retrieve the status of issuance.
Parameters
issuanceId
String
RequiredprojectId
String
RequiredExample
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late IssuanceApi issuanceApi;
final issuanceClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
issuanceApi = issuanceClient.getIssuanceApi();
final issuanceId = "<ISSUANCE_ID>";
final projectId = "<PROJECT_ID>";
final response = (await issuanceApi.issuanceState(issuanceId: issuanceId, projectId: projectId));
print(response);
} catch (e) {
print('Exception: $e');
}listIssuance
Get the list of issuances initiated in the project.
Parameters
projectId
String
RequiredExample
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late IssuanceApi issuanceApi;
final issuanceClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
issuanceApi = issuanceClient.getIssuanceApi();
final projectId = "<PROJECT_ID>";
final response = (await issuanceApi.listIssuance(projectId: projectId));
print(response);
} catch (e) {
print('Exception: $e');
}startIssuance
Initiate the issuance of a credential.
Parameters
projectId
String
RequiredExample
import 'package:built_collection/built_collection.dart';
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
import 'package:built_value/json_object.dart';
try {
late IssuanceApi issuanceApi;
final issuanceClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
issuanceApi = issuanceClient.getIssuanceApi();
final projectId = "<PROJECT_ID>";
final credentialTypeId = "SchemaOne";
final credentialData = {
"first_name": "FirstName",
"last_name": "LastName",
"dob": "1970-01-01",
};
final credentialDataBuilder = MapBuilder<String, JsonObject>(credentialData.map((key, value) => MapEntry(key, JsonObject(value))),);
final data = StartIssuanceInputDataInnerBuilder()
..credentialTypeId = credentialTypeId
..credentialData.replace(credentialDataBuilder.build());
final startIssuanceInput = StartIssuanceInputBuilder()
..holderDid = "did:key:holder-did-value"
..claimMode = StartIssuanceInputClaimModeEnum.FIXED_HOLDER
..data = ListBuilder<StartIssuanceInputDataInner>([data.build()]);
final response = (await issuanceApi.startIssuance(projectId: projectId, startIssuanceInput: startIssuanceInput.build()));
print(response);
} catch (e) {
print('Exception: $e');
}Credentials API
Issue a Verifiable Credentials to the users.
batchCredential
Allow digital wallets to claim multiple credentials at once.
Parameters
projectId
String
RequiredExample
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late CredentialsApi credentialsApi;
final credentialsClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
credentialsApi = credentialsClient.getCredentialsApi();
final projectId = "<PROJECT_ID>";
final proofType = CredentialProofProofTypeEnum.jwt;
final proof = CredentialProofBuilder()
..proofType = proofType
..jwt = '<PROOF_JWT>';
final credentialRequests = ListBuilder<BatchCredentialInputCredentialRequestsInner>();
credentialRequests.add(
BatchCredentialInputCredentialRequestsInner((b) => b
..credentialIdentifier = "credential_identifier"
..proof = proof));
final batchCredentialInput = BatchCredentialInputBuilder()
..credentialRequests = credentialRequests;
final response = (await credentialsApi.batchCredential(
projectId: projectId, batchCredentialInput : batchCredentialInput.build()));
print(response);
} catch (e) {
print('Exception: $e');
}generateCredentials
Generate and issue a credential offer to the user.
Parameters
projectId
String
RequiredExample
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late CredentialsApi credentialsApi;
final credentialsClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
credentialsApi = credentialsClient.getCredentialsApi();
final projectId = "<PROJECT_ID>";
final proofType = CredentialProofProofTypeEnum.jwt;
final proof = CredentialProofBuilder()
.. proofType = proofType
.. jwt = '<PROOF_JWT>';
final createCredentialInput = CreateCredentialInputBuilder()
..credentialIdentifier = "UniversityDegree-2024"
..proof = proof;
final response = (await credentialsApi.generateCredentials(projectId: projectId, createCredentialInput: createCredentialInput.build()));
print(response);
} catch (e) {
print('Exception: $e');
}getClaimedCredentials
Get claimed credentials in the specified range.
Parameters
projectId
String
RequiredconfigurationId
String
RequiredrangeStartTime
String
OptionalrangeEndTime
String
OptionalexclusiveStartKey
String
Optionallimit
Integer
OptionalExample
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late CredentialsApi credentialsApi;
final credentialsClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
credentialsApi = credentialsClient.getCredentialsApi();
final projectId = "<PROJECT_ID>";
final configurationId = "<CONFIG_ID>";
final rangeStartTime = "<START_DATE>";
final rangeEndTime = "<END_DATE>";
final exclusiveStartKey = "<exclusiveStartKey>";
final limit = 10;
final response = (await credentialsApi.getClaimedCredentials(
projectId: projectId, configurationId : configurationId, rangeStartTime : rangeStartTime, rangeEndTime : rangeEndTime, exclusiveStartKey : exclusiveStartKey, limit: limit));
print(response);
} catch (e) {
print('Exception: $e');
}Default API
Revoke a revocable Verifiable Credentials issued to the users.
changeCredentialStatus
Updates the status of the credential (e.g., REVOKED).
Parameters
projectId
String
RequiredconfigurationId
String
RequiredExample
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late DefaultApi defaultApi;
final defaultClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
defaultApi = defaultClient.getDefaultApi();
final projectId = "<PROJECT_ID>";
final configurationId = "<CONFIG_ID>";
final changeCredentialStatusInput = ChangeCredentialStatusInputBuilder()
..changeReason = ChangeCredentialStatusInputChangeReasonEnum.INVALID_CREDENTIAL;
final response = (await defaultApi.changeCredentialStatus(projectId: projectId, configurationId: configurationId, changeCredentialStatusInput: changeCredentialStatusInput.build()));
print(response);
} catch (e) {
print('Exception: $e');
}listIssuanceDataRecords
Retrieves the list of records of revocable credentials.
Parameters
projectId
String
RequiredconfigurationId
String
Requiredlimit
Integer
OptionalexclusiveStartKey
String
OptionalExample
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late DefaultApi defaultApi;
final defaultClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
defaultApi = defaultClient.getDefaultApi();
final projectId = "<PROJECT_ID>";
final configurationId = "<CONFIG_ID>";
final response = (await defaultApi.listIssuanceDataRecords(projectId: projectId, configurationId: configurationId));
print(response);
} catch (e) {
print('Exception: $e');
}Offer API
Used to get the credential offer initiated by the Issuance API.
getCredentialOffer
Retrieves the credential offer details.
Parameters
projectId
String
RequiredissuanceId
String
RequiredExample
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late OfferApi offerApi;
final offerClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
offerApi = offerClient.getOfferApi();
final projectId = "<PROJECT_ID>";
final issuanceId = "<ISSUANCE_ID>";
final response = (await offerApi.getCredentialOffer(issuanceId: issuanceId, projectId: projectId));
print(response);
} catch (e) {
print('Exception: $e');
}WellKnown API
Used to get the WellKnown OpenID Credential Issuer information.
getWellKnownOpenIdCredentialIssuer
Retrieves the credential issuer well-known configurations.
Parameters
projectId
String
RequiredExample
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late WellKnownApi wellKnownApi;
final wellKnownClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
wellKnownApi = wellKnownClient.getWellKnownApi();
final projectId = "<PROJECT_ID>";
final response = (await wellKnownApi.getWellKnownOpenIdCredentialIssuer(projectId: projectId));
print(response);
} catch (e) {
print('Exception: $e');
}Glad to hear it! Please tell us how we can improve more.
Sorry to hear that. Please tell us how we can improve.
Thank you for sharing your feedback so we can improve your experience.