# Credential Issuance

> Issue Verifiable Credentials using Credential Issuance Service.

## Install Dependency

Package: AffinidiTdk.CredentialIssuanceClient

```bash
dotnet add package AffinidiTdk.CredentialIssuanceClient
```

Check the latest version on [nuget.org](https://www.nuget.org/packages/AffinidiTdk.CredentialIssuanceClient) or view the source on [GitHub](https://github.com/affinidi/affinidi-tdk-dotnet/tree/main/src/Clients/CredentialIssuanceClient).

## 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](https://github.com/affinidi/affinidi-tdk-dotnet/blob/main/src/Clients/CredentialIssuanceClient/docs/CreateIssuanceConfigInput.md)
    Required
  JSON object to provide the details of the configuration.

Example

```csharp
using AffinidiTdk.CredentialIssuanceClient.Api;
using AffinidiTdk.CredentialIssuanceClient.Client;
using AffinidiTdk.CredentialIssuanceClient.Model;

Configuration config = new Configuration();

config.AddApiKey("authorization", projectScopedToken);

ConfigurationApi api = new ConfigurationApi(config);

CreateIssuanceConfigInput input = new CreateIssuanceConfigInput();

IssuanceConfigDto result = api.CreateIssuanceConfig(input);
```

#### DeleteIssuanceConfigById

Delete the issuance configuration by ID.

Parameters

    configurationId
    String
    Required
  ID of the issuance configuration to delete.

Example

```csharp
using AffinidiTdk.CredentialIssuanceClient.Api;
using AffinidiTdk.CredentialIssuanceClient.Client;
using AffinidiTdk.CredentialIssuanceClient.Model;

Configuration config = new Configuration();

config.AddApiKey("authorization", projectScopedToken);

ConfigurationApi api = new ConfigurationApi(config);

api.DeleteIssuanceConfigById("");
```

#### GetIssuanceConfigById

Retrieves the Issuance Configuration details by ID.

Parameters

    configurationId
    String
    Required
  ID of the issuance configuration to retrieve.

Example

```csharp
using AffinidiTdk.CredentialIssuanceClient.Api;
using AffinidiTdk.CredentialIssuanceClient.Client;
using AffinidiTdk.CredentialIssuanceClient.Model;

Configuration config = new Configuration();
config.AddApiKey("authorization", projectScopedToken);

ConfigurationApi api = new ConfigurationApi(config);

var issuanceConfigId = "";

IssuanceConfigDto result = api.GetIssuanceConfigById(issuanceConfigId);
```

#### GetIssuanceConfigList

Get the list of issuance configuration for the current project.

No parameters required.

Example

```csharp
using AffinidiTdk.CredentialIssuanceClient.Api;
using AffinidiTdk.CredentialIssuanceClient.Client;
using AffinidiTdk.CredentialIssuanceClient.Model;

Configuration config = new Configuration();

config.AddApiKey("authorization", projectScopedToken);

ConfigurationApi api = new ConfigurationApi(config);

IssuanceConfigListResponse result = api.GetIssuanceConfigList();
```

#### UpdateIssuanceConfigById

Update the existing Issuance Configuration by ID.

Parameters

    configurationId
    String
    Required
  ID of the issuance configuration to retrieve.

    UpdateIssuanceConfigInput
    [Object](https://github.com/affinidi/affinidi-tdk-dotnet/blob/main/src/Clients/CredentialIssuanceClient/docs/UpdateIssuanceConfigInput.md)
    Required
  JSON object to provide the details to update the issuance configuration.

Example

```csharp
using AffinidiTdk.CredentialIssuanceClient.Api;
using AffinidiTdk.CredentialIssuanceClient.Client;
using AffinidiTdk.CredentialIssuanceClient.Model;

Configuration config = new Configuration();
config.AddApiKey("authorization", projectScopedToken);

ConfigurationApi api = new ConfigurationApi(config);

var issuanceConfigId = "";
UpdateIssuanceConfigInput input = new UpdateIssuanceConfigInput();

IssuanceConfigDto result = api.UpdateIssuanceConfigById(issuanceConfigId, input);
```

### Issuance API

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

#### IssuanceState

Retrieve the status of issuance.

Parameters

    issuanceId
    String
    Required
  ID of the initiated issuance.

    projectId
    String
    Required
  Project ID from where the issuance was initiated.

Example

```csharp
using AffinidiTdk.CredentialIssuanceClient.Api;
using AffinidiTdk.CredentialIssuanceClient.Client;
using AffinidiTdk.CredentialIssuanceClient.Model;

Configuration config = new Configuration();

config.AddApiKey("authorization", projectScopedToken);

IssuanceApi api = new IssuanceApi(config);

var issuanceId = "issuanceId_example";
var projectId = "projectId_example";

IssuanceStateResponse result = api.IssuanceState(issuanceId, projectId);
```

#### ListIssuance

Get the list of issuance initiated in the Project.

Parameters

    projectId
    String
    Required
  Project ID from where to list the issuance.

Example

```csharp
using AffinidiTdk.CredentialIssuanceClient.Api;
using AffinidiTdk.CredentialIssuanceClient.Client;
using AffinidiTdk.CredentialIssuanceClient.Model;

Configuration config = new Configuration();

config.AddApiKey("authorization", projectScopedToken);

IssuanceApi api = new IssuanceApi(config);

var projectId = "

";

ListIssuanceResponse result = api.ListIssuance(projectId);
```

#### StartIssuance

Used to initiate the issuance of the credential.

Parameters

    projectId
    String
    Required
  Project ID from where to initiate the issuance.

    StartIssuanceInput
    [Object](https://github.com/affinidi/affinidi-tdk-dotnet/blob/main/src/Clients/CredentialIssuanceClient/docs/StartIssuanceInput.md)
    Required
  JSON object to provide the details of the credentials to issue.

Example

```csharp
using AffinidiTdk.CredentialIssuanceClient.Api;
using AffinidiTdk.CredentialIssuanceClient.Client;
using AffinidiTdk.CredentialIssuanceClient.Model;

Configuration config = new Configuration();

config.AddApiKey("authorization", projectScopedToken);

IssuanceApi api = new IssuanceApi(config);

StartIssuanceInputDataInner inpuData = new StartIssuanceInputDataInner(credentialTypeId: "MyPersonalInfo", credentialData: new Dictionary()
  {
    { "Firstname", "John" },
    { "Lastname", "Doe" },
    { "ExpiryDate", "1970-01-01" },
  });

StartIssuanceInput input = new StartIssuanceInput(claimMode: StartIssuanceInput.ClaimModeEnum.TXCODE, data: [inpuData]);

var projectId = "";

StartIssuanceResponse result = api.StartIssuance(projectId, input);
```

### Credentials API

Issue a Verifiable Credentials to the users.

#### BatchCredential

Allow digital wallets to claim multiple credentials at once.

Parameters

    projectId
    String
    Required
  Project ID from where you want to issue the credential.

    BatchCredentialInput
    [Object](https://github.com/affinidi/affinidi-tdk-dotnet/blob/main/src/Clients/CredentialIssuanceClient/docs/BatchCredentialInput.md)
    Required
  JSON object to provide the details of the credential to generate.

Example

```csharp
using AffinidiTdk.CredentialIssuanceClient.Api;
using AffinidiTdk.CredentialIssuanceClient.Client;
using AffinidiTdk.CredentialIssuanceClient.Model;

Configuration config = new Configuration();

config.AddApiKey("authorization", projectScopedToken);

CredentialsApi api = new CredentialsApi(config);

var projectId = "

";
BatchCredentialInput input = new BatchCredentialInput();

BatchCredentialResponse result = api.BatchCredential(projectId, input);
```

#### GenerateCredentials

Generate and issue a credential offer to the user.

Parameters

    projectId
    String
    Required
  Project ID from where you want to issue the credential.

    CreateCredentialInput
    [Object](https://github.com/affinidi/affinidi-tdk-dotnet/blob/main/src/Clients/CredentialIssuanceClient/docs/CreateCredentialInput.md)
    Required
  JSON object to provide the details of the credential to generate.

Example

```csharp
using AffinidiTdk.CredentialIssuanceClient.Api;
using AffinidiTdk.CredentialIssuanceClient.Client;
using AffinidiTdk.CredentialIssuanceClient.Model;

Configuration config = new Configuration();

config.AddApiKey("authorization", projectScopedToken);

CredentialsApi api = new CredentialsApi(config);

var projectId = "

";
CreateCredentialInput input = new CreateCredentialInput();

CredentialResponse result = api.GenerateCredentials("

", input);
```

#### GetClaimedCredentials

Get claimed credentials in the specified range.

Example

```csharp
using AffinidiTdk.CredentialIssuanceClient.Api;
using AffinidiTdk.CredentialIssuanceClient.Client;
using AffinidiTdk.CredentialIssuanceClient.Model;

Configuration config = new Configuration();
config.AddApiKey("authorization", projectScopedToken);

CredentialsApi api = new CredentialsApi(config);

var projectId = "

";
var configId = "";
var rangeStartTime = "";
var rangeEndTime = "";
var exclusiveStartKey = "";
var limit = 20;

ClaimedCredentialListResponse result = api.GetClaimedCredentials(projectId, configId, rangeStartTime, rangeEndTime, exclusiveStartKey, limit);
```

#### GetIssuanceIdClaimedCredential

Get claimed VC linked to the issuanceId

Example

```csharp
using AffinidiTdk.CredentialIssuanceClient.Api;
using AffinidiTdk.CredentialIssuanceClient.Client;
using AffinidiTdk.CredentialIssuanceClient.Model;

Configuration config = new Configuration();
config.AddApiKey("authorization", projectScopedToken);

CredentialsApi api = new CredentialsApi(config);

var projectId = "

";
var configId = "";
var issuanceId = "";

ClaimedCredentialResponse result = apiInstance.GetIssuanceIdClaimedCredential(projectId, configurationId, issuanceId);
```

### Default API

Revoke a revocable Verifiable Credentials issued to the users.

#### ChangeCredentialStatus

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

Parameters

    projectId
    String
    Required
  Project ID from where the credential is issued.

    configurationId
    String
    Required
  Configuration ID from where the credential is issued.

    ChangeCredentialStatusInput
    [Object](https://github.com/affinidi/affinidi-tdk-dotnet/blob/main/src/Clients/CredentialIssuanceClient/docs/ChangeCredentialStatusInput.md)
    Required
  JSON object with details of the credential to revoke.

Example

```csharp
using AffinidiTdk.CredentialIssuanceClient.Api;
using AffinidiTdk.CredentialIssuanceClient.Client;
using AffinidiTdk.CredentialIssuanceClient.Model;

Configuration config = new Configuration();

config.AddApiKey("authorization", projectScopedToken);

DefaultApi api = new DefaultApi(config);

var projectId = "

";
var configId = "";
ChangeCredentialStatusInput input = new ChangeCredentialStatusInput();

FlowData result = api.ChangeCredentialStatus(projectId, configId, input);
```

#### 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
    Required
  Project ID from where the credential is issued.

    configurationId
    String
    Required
  Configuration ID from where the credential is issued.

    limit
    Integer
    Required
  Maximum number of records to fetch in a list.

    exclusiveStartKey
    String
    Required
  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

```csharp
using AffinidiTdk.CredentialIssuanceClient.Api;
using AffinidiTdk.CredentialIssuanceClient.Client;
using AffinidiTdk.CredentialIssuanceClient.Model;

Configuration config = new Configuration();
config.AddApiKey("authorization", projectScopedToken);

DefaultApi api = new DefaultApi(config);

var projectId = "

";
var configurationId = "";
var limit = 10;
var exclusiveStartKey = "";

ListIssuanceRecordResponse result = api.ListIssuanceDataRecords(projectId, configurationId, limit, exclusiveStartKey);
```

### Offer API

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

#### GetCredentialOffer

Retrieves the credential offer details.

Parameters

    projectId
    String
    Required
  Project ID from where the credential is issued.

    issuanceId
    String
    Required
  ID of the issuance initiated.

Example

```csharp
using AffinidiTdk.CredentialIssuanceClient.Api;
using AffinidiTdk.CredentialIssuanceClient.Client;
using AffinidiTdk.CredentialIssuanceClient.Model;

Configuration config = new Configuration();

config.AddApiKey("authorization", projectScopedToken);

OfferApi api = new OfferApi(config);

var issuanceId = "";
var projectId = "

";

CredentialOfferResponse result = api.GetCredentialOffer(projectId, issuanceId);
```

### WellKnown API

Used to get the WellKnown OpenID Credential Issuer information.

#### GetWellKnownOpenIdCredentialIssuer

Retrieves the credential issuer well-known configurations.

Parameters

    projectId
    String
    Required
  Project ID from where the credential is issued.

Example

```csharp
using AffinidiTdk.CredentialIssuanceClient.Api;
using AffinidiTdk.CredentialIssuanceClient.Client;
using AffinidiTdk.CredentialIssuanceClient.Model;

Configuration config = new Configuration();

config.AddApiKey("authorization", projectScopedToken);

WellKnownApi api = new WellKnownApi(config);

var projectId = "

";

WellKnownOpenIdCredentialIssuerResponse result = api.GetWellKnownOpenIdCredentialIssuer(projectId);
```
