# Credential Issuance

> Issue a Verifiable Credentials using Credential Issuance Service.

## Install Dependency

Package: affinidi_tdk_credential_issuance_client

```bash
pip install affinidi_tdk_credential_issuance_client
```

Check the latest version on the [PyPI repository](https://pypi.org/project/affinidi_tdk_credential_issuance_client/) or view the source on [GitHub](https://github.com/affinidi/affinidi-tdk/tree/main/clients/python/credential_issuance_client).

## Classes and Methods

### Configuration API

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

#### create_issuance_config

Creates an issuance configuration for the project.

Parameters

    create_issuance_config_input
    [CreateIssuanceConfigInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/python/credential_issuance_client/docs/CreateIssuanceConfigInput.md)
    Required
  Details of the issuance configuration to create.

Example

```python
import affinidi_tdk_credential_issuance_client

configuration = affinidi_tdk_credential_issuance_client.Configuration()
configuration.api_key['ProjectTokenAuth'] = projectScopedToken

with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
    api_instance = affinidi_tdk_credential_issuance_client.ConfigurationApi(api_client)

    request_json = {
        'credentialSupported': [
            {
                'credentialTypeId': 'SchemaOne',
                'jsonSchemaUrl': 'https://schema.affinidi.io/SchemaOneV1R1.json',
                'jsonLdContextUrl': 'https://schema.affinidi.io/SchemaOneV1R1.jsonld',
            }
        ],
        'issuerWalletId': '',
        'credentialOfferDuration': 3600,
        'format': 'ldp_vc',
    }

    create_issuance_config_input = affinidi_tdk_credential_issuance_client.CreateIssuanceConfigInput.from_dict(request_json)
    api_response = api_instance.create_issuance_config(create_issuance_config_input=create_issuance_config_input)
```

#### delete_issuance_config_by_id

Deletes the issuance configuration by ID.

Parameters

    configurationId
    str
    Required
  ID of the issuance configuration to delete.

Example

```python
import affinidi_tdk_credential_issuance_client

configuration = affinidi_tdk_credential_issuance_client.Configuration()
configuration.api_key['ProjectTokenAuth'] = projectScopedToken

with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
    api_instance = affinidi_tdk_credential_issuance_client.ConfigurationApi(api_client)
    api_response = api_instance.delete_issuance_config_by_id('')
```

#### get_issuance_config_by_id

Retrieves the issuance configuration details by ID.

Parameters

    configurationId
    str
    Required
  ID of the issuance configuration to retrieve.

Example

```python
import affinidi_tdk_credential_issuance_client

configuration = affinidi_tdk_credential_issuance_client.Configuration()
configuration.api_key['ProjectTokenAuth'] = projectScopedToken

with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
    api_instance = affinidi_tdk_credential_issuance_client.ConfigurationApi(api_client)
    api_response = api_instance.get_issuance_config_by_id('')
```

#### get_issuance_config_list

Returns the list of issuance configurations for the current project.

No parameters required.

Example

```python
import affinidi_tdk_credential_issuance_client

configuration = affinidi_tdk_credential_issuance_client.Configuration()
configuration.api_key['ProjectTokenAuth'] = projectScopedToken

with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
    api_instance = affinidi_tdk_credential_issuance_client.ConfigurationApi(api_client)
    api_response = api_instance.get_issuance_config_list()
```

#### update_issuance_config_by_id

Updates an existing issuance configuration by ID.

Parameters

    configurationId
    str
    Required
  ID of the issuance configuration to update.

    update_issuance_config_input
    [UpdateIssuanceConfigInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/python/credential_issuance_client/docs/UpdateIssuanceConfigInput.md)
    Required
  Updated configuration details.

Example

```python
import affinidi_tdk_credential_issuance_client

configuration = affinidi_tdk_credential_issuance_client.Configuration()
configuration.api_key['ProjectTokenAuth'] = projectScopedToken

with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
    api_instance = affinidi_tdk_credential_issuance_client.ConfigurationApi(api_client)

    request_json = {
        'credentialSupported': [
            {
                'credentialTypeId': 'SchemaOne',
                'jsonSchemaUrl': 'https://schema.affinidi.io/SchemaOneV1R1.json',
                'jsonLdContextUrl': 'https://schema.affinidi.io/SchemaOneV1R1.jsonld',
            }
        ],
        'issuerWalletId': '',
        'credentialOfferDuration': 3600,
        'format': 'ldp_vc',
    }

    update_issuance_config_input = affinidi_tdk_credential_issuance_client.UpdateIssuanceConfigInput.from_dict(request_json)
    api_response = api_instance.update_issuance_config_by_id('', update_issuance_config_input=update_issuance_config_input)
```

### Issuance API

Initiates issuance of credentials and checks their status.

#### issuance_state

Retrieves the status of an issuance.

Parameters

    issuanceId
    str
    Required
  ID of the initiated issuance.

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

Example

```python
import affinidi_tdk_credential_issuance_client

configuration = affinidi_tdk_credential_issuance_client.Configuration()
configuration.api_key['ProjectTokenAuth'] = projectScopedToken

with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
    api_instance = affinidi_tdk_credential_issuance_client.IssuanceApi(api_client)
    api_response = api_instance.issuance_state('', '

')
```

#### list_issuance

Returns the list of issuances initiated in the project.

Parameters

    projectId
    str
    Required
  ID of the project.

Example

```python
import affinidi_tdk_credential_issuance_client

configuration = affinidi_tdk_credential_issuance_client.Configuration()
configuration.api_key['ProjectTokenAuth'] = projectScopedToken

with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
    api_instance = affinidi_tdk_credential_issuance_client.IssuanceApi(api_client)
    api_response = api_instance.list_issuance('

')
```

#### start_issuance

Initiates the issuance of credentials.

Parameters

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

    start_issuance_input
    [StartIssuanceInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/python/credential_issuance_client/docs/StartIssuanceInput.md)
    Required
  Details of the credentials to issue.

Example

```python
import affinidi_tdk_credential_issuance_client

configuration = affinidi_tdk_credential_issuance_client.Configuration()
configuration.api_key['ProjectTokenAuth'] = projectScopedToken

with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
    api_instance = affinidi_tdk_credential_issuance_client.IssuanceApi(api_client)

    request_json = {
        'data': [{
            'credentialTypeId': 'SchemaOne',
            'credentialData': {
                'first_name': 'FirstName',
                'last_name': 'LastName',
                'dob': '1970-01-01',
            },
        }],
        'holderDid': 'did:key:holder-did-value',
        'claimMode': 'FIXED_HOLDER',
    }

    start_issuance_input = affinidi_tdk_credential_issuance_client.StartIssuanceInput.from_dict(request_json)
    api_response = api_instance.start_issuance('

', start_issuance_input=start_issuance_input)
```

### Credentials API

Issues Verifiable Credentials to users.

#### batchCredential

Allows digital wallets to claim multiple credentials at once.

Parameters

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

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

Example

```python
import affinidi_tdk_credential_issuance_client

configuration = affinidi_tdk_credential_issuance_client.Configuration()
configuration.api_key['ProjectTokenAuth'] = projectScopedToken

with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
    api_instance = affinidi_tdk_credential_issuance_client.CredentialsApi(api_client)

    credential_requests = [
        {
            'credential_identifier': 'credentialIdentifier',
            'proof': {
                'proof_type': 'jwt',
                'jwt': '

',
            },
        }
    ]

    batch_credential_input = affinidi_tdk_credential_issuance_client.BatchCredentialInput(
        credential_requests=credential_requests
    )
    api_response = api_instance.generate_credentials('

', batch_credential_input=batch_credential_input)
```

#### generate_credentials

Generates and issues a credential offer to the user.

Parameters

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

    create_credential_input
    [CreateCredentialInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/python/credential_issuance_client/docs/CreateCredentialInput.md)
    Required
  Credential identifier and proof JWT.

Example

```python
import affinidi_tdk_credential_issuance_client

configuration = affinidi_tdk_credential_issuance_client.Configuration()
configuration.api_key['ProjectTokenAuth'] = projectScopedToken

with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
    api_instance = affinidi_tdk_credential_issuance_client.CredentialsApi(api_client)

    request_json = {
        'credential_identifier': 'SchemaOne',
        'proof': {
            'proof_type': 'jwt',
            'jwt': '

',
        },
    }

    create_credential_input = affinidi_tdk_credential_issuance_client.CreateCredentialInput.from_dict(request_json)
    api_response = api_instance.generate_credentials('

', create_credential_input=create_credential_input)
```

#### getClaimedCredentials

Retrieves claimed credentials in the specified date range.

Parameters

    project_id
    str
    Required
  ID of the project.

    configuration_id
    str
    Required
  ID of the issuance configuration.

    range_start_time
    str
    Required
  Start date of the range (ISO 8601 format).

    range_end_time
    str
    Required
  End date of the range (ISO 8601 format).

    exclusive_start_key
    str
    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
    int
    Optional
  Maximum number of records to return. Defaults to 20.

Example

```python
import affinidi_tdk_credential_issuance_client

configuration = affinidi_tdk_credential_issuance_client.Configuration()
configuration.api_key['ProjectTokenAuth'] = projectScopedToken

with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
    api_instance = affinidi_tdk_credential_issuance_client.CredentialsApi(api_client)
    api_response = api_instance.batch_credential(
        '

',
        '',
        '',
        '',
    )
```

### Default API

Revokes revocable Verifiable Credentials issued to users.

#### change_credential_status

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

Parameters

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

    configurationId
    str
    Required
  ID of the issuance configuration.

    change_credential_status_input
    [ChangeCredentialStatusInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/python/credential_issuance_client/docs/ChangeCredentialStatusInput.md)
    Required
  Revocation reason and issuance record ID.

Example

```python
import affinidi_tdk_credential_issuance_client

configuration = affinidi_tdk_credential_issuance_client.Configuration()
configuration.api_key['ProjectTokenAuth'] = projectScopedToken

with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
    api_instance = affinidi_tdk_credential_issuance_client.DefaultApi(api_client)

    request_json = {
        'changeReason': 'INVALID_CREDENTIAL',
        'issuanceRecordId': '',
    }

    change_credential_status_input = affinidi_tdk_credential_issuance_client.ChangeCredentialStatusInput.from_dict(request_json)
    api_response = api_instance.change_credential_status('

', '', change_credential_status_input=change_credential_status_input)
```

#### list_issuance_data_records

Retrieves the list of records for revocable credentials.

Parameters

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

    configurationId
    str
    Required
  ID of the issuance configuration.

    limit
    int
    Optional
  Maximum number of records to return.

    exclusiveStartKey
    str
    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.

Example

```python
import affinidi_tdk_credential_issuance_client

configuration = affinidi_tdk_credential_issuance_client.Configuration()
configuration.api_key['ProjectTokenAuth'] = projectScopedToken

with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
    api_instance = affinidi_tdk_credential_issuance_client.DefaultApi(api_client)
    api_response = api_instance.list_issuance_data_records('

', '')
```

### Offer API

Retrieves credential offers initiated by the Issuance API.

#### get_credential_offer

Retrieves the credential offer details.

Parameters

    projectId
    str
    Required
  ID of the project.

    issuanceId
    str
    Required
  ID of the initiated issuance.

Example

```python
import affinidi_tdk_credential_issuance_client

configuration = affinidi_tdk_credential_issuance_client.Configuration()
configuration.api_key['ProjectTokenAuth'] = projectScopedToken

with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
    api_instance = affinidi_tdk_credential_issuance_client.OfferApi(api_client)
    api_response = api_instance.get_credential_offer('

', '')
```

### WellKnown API

Retrieves WellKnown OpenID Credential Issuer information.

#### get_well_known_open_id_credential_issuer

Retrieves the credential issuer well-known configurations.

Parameters

    projectId
    str
    Required
  ID of the project.

Example

```python
import affinidi_tdk_credential_issuance_client

configuration = affinidi_tdk_credential_issuance_client.Configuration()
configuration.api_key['ProjectTokenAuth'] = projectScopedToken

with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
    api_instance = affinidi_tdk_credential_issuance_client.WellKnownApi(api_client)
    api_response = api_instance.get_well_known_open_id_credential_issuer('

')
```
