# Credential Issuance

> Issue a Verifiable Credentials using Credential Issuance Service.

## Install Dependency

Package: @affinidi-tdk/credential-issuance-client

```bash
npm install @affinidi-tdk/credential-issuance-client --save
```

Check the latest version on the [npm registry](https://www.npmjs.com/package/@affinidi-tdk/credential-issuance-client) or view the source on [GitHub](https://github.com/affinidi/affinidi-tdk/tree/main/clients/typescript/credential-issuance-client).

## 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

    request
    [CreateIssuanceConfigInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/typescript/credential-issuance-client/docs/CreateIssuanceConfigInput.md)
    Required
  Issuance configuration details, including supported credential types and issuer wallet.

Example

```typescript
import {
  ConfigurationApi,
  Configuration,
  CreateIssuanceConfigInput,
} from '@affinidi-tdk/credential-issuance-client'

const api = new ConfigurationApi(
  new Configuration({ apiKey: authProvider.fetchProjectScopedToken.bind(authProvider) })
)

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

const { data } = await api.createIssuanceConfig(request)
```

#### deleteIssuanceConfigById

Deletes an issuance configuration by ID.

Parameters

    configurationId
    string
    Required
  ID of the issuance configuration to delete.

Example

```typescript
import { ConfigurationApi, Configuration } from '@affinidi-tdk/credential-issuance-client'

const api = new ConfigurationApi(
  new Configuration({ apiKey: authProvider.fetchProjectScopedToken.bind(authProvider) })
)

const configurationId = ''

const result = await api.deleteIssuanceConfigById(configurationId)
```

#### getIssuanceConfigById

Retrieves an issuance configuration by ID.

Parameters

    configurationId
    string
    Required
  ID of the issuance configuration to retrieve.

Example

```typescript
import { ConfigurationApi, Configuration } from '@affinidi-tdk/credential-issuance-client'

const api = new ConfigurationApi(
  new Configuration({ apiKey: authProvider.fetchProjectScopedToken.bind(authProvider) })
)

const configurationId = ''

const result = await api.getIssuanceConfigById(configurationId)
```

#### getIssuanceConfigList

Returns the list of issuance configurations for the current project.

Parameters

No parameters required.

Example

```typescript
import { ConfigurationApi, Configuration } from '@affinidi-tdk/credential-issuance-client'

const api = new ConfigurationApi(
  new Configuration({ apiKey: authProvider.fetchProjectScopedToken.bind(authProvider) })
)

const { data } = await api.getIssuanceConfigList()
```

#### updateIssuanceConfigById

Updates an existing issuance configuration by ID.

Parameters

    configurationId
    string
    Required
  ID of the issuance configuration to update.

    request
    [UpdateIssuanceConfigInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/typescript/credential-issuance-client/docs/UpdateIssuanceConfigInput.md)
    Required
  Updated configuration details.

Example

```typescript
import {
  ConfigurationApi,
  Configuration,
  UpdateIssuanceConfigInput,
} from '@affinidi-tdk/credential-issuance-client'

const api = new ConfigurationApi(
  new Configuration({ apiKey: authProvider.fetchProjectScopedToken.bind(authProvider) })
)

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

const { data } = await api.updateIssuanceConfigById(configurationId, request)
```

### Issuance API

Initiates credential issuance and checks issuance status.

#### issuanceState

Retrieves the status of an issuance.

Parameters

    issuanceId
    string
    Required
  ID of the initiated issuance.

    projectId
    string
    Required
  ID of the project where the issuance was initiated.

Example

```typescript
import { IssuanceApi, Configuration } from '@affinidi-tdk/credential-issuance-client'

const api = new IssuanceApi(
  new Configuration({ apiKey: authProvider.fetchProjectScopedToken.bind(authProvider) })
)

const issuanceId = ''
const projectId = '

'

const { data } = await api.issuanceState(issuanceId, projectId)
```

#### listIssuance

Returns the list of issuances initiated in the project.

Parameters

    projectId
    string
    Required
  ID of the project to list issuances for.

Example

```typescript
import { IssuanceApi, Configuration } from '@affinidi-tdk/credential-issuance-client'

const api = new IssuanceApi(
  new Configuration({ apiKey: authProvider.fetchProjectScopedToken.bind(authProvider) })
)

const projectId = '

'

const { data } = await api.listIssuance(projectId)
```

#### startIssuance

Initiates the issuance of a credential.

Parameters

    projectId
    string
    Required
  ID of the project to initiate issuance from.

    request
    [StartIssuanceInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/typescript/credential-issuance-client/docs/StartIssuanceInput.md)
    Required
  Details of the credentials to issue.

Example

```typescript
import {
  IssuanceApi,
  Configuration,
  StartIssuanceInput,
} from '@affinidi-tdk/credential-issuance-client'

const api = new IssuanceApi(
  new Configuration({ apiKey: authProvider.fetchProjectScopedToken.bind(authProvider) })
)

const projectId = '

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

const { data } = await api.startIssuance(projectId, request)
```

### 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 to issue credentials from.

    request
    [BatchCredentialInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/typescript/credential-issuance-client/docs/BatchCredentialInput.md)
    Required
  Batch of credential requests.

Example

```typescript
import {
  CredentialsApi,
  Configuration,
  BatchCredentialInput,
  BatchCredentialInputCredentialRequestsInner,
} from '@affinidi-tdk/credential-issuance-client'

const api = new CredentialsApi(
  new Configuration({ apiKey: authProvider.fetchProjectScopedToken.bind(authProvider) })
)

const projectId = '

'
const credentialRequests: Array = [
  {
    credential_identifier: 'credentialIdentifier1',
    proof: {
      proof_type: 'proof',
      jwt: '

',
    },
  },
]
const request: BatchCredentialInput = { credential_requests: credentialRequests }

const { data } = await api.batchCredential(projectId, request)
```

#### generateCredentials

Generates and issues a credential to the user.

Parameters

    projectId
    string
    Required
  ID of the project to issue the credential from.

    request
    [CreateCredentialInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/typescript/credential-issuance-client/docs/CreateCredentialInput.md)
    Required
  Credential request details, including proof.

Example

```typescript
import {
  CredentialsApi,
  Configuration,
  CreateCredentialInput,
} from '@affinidi-tdk/credential-issuance-client'

const api = new CredentialsApi(
  new Configuration({ apiKey: authProvider.fetchProjectScopedToken.bind(authProvider) })
)

const projectId = '

'
const request: CreateCredentialInput = {
  credential_identifier: 'UniversityDegree-2024',
  proof: {
    proof_type: 'jwt',
    jwt: '

',
  },
}

const { data } = await api.generateCredentials(projectId, request)
```

#### getClaimedCredentials

Returns claimed credentials within a specified time range.

Parameters

    project_id
    string
    Required
  ID of the project.

    configuration_id
    string
    Required
  ID of the issuance configuration.

    range_start_time
    string
    Optional
  Start of the time range (ISO 8601).

    range_end_time
    string
    Optional
  End of the time range (ISO 8601).

    exclusive_start_key
    string
    Optional
  Pagination cursor — the last key returned from the previous call.

    limit
    number
    Optional
  Maximum number of records to return. Defaults to 20.

Example

```typescript
import { CredentialsApi, Configuration } from '@affinidi-tdk/credential-issuance-client'

const api = new CredentialsApi(
  new Configuration({ apiKey: authProvider.fetchProjectScopedToken.bind(authProvider) })
)

const project_id = '

'
const configuration_id = ''
const range_start_time = ''
const range_end_time = ''
const exclusive_start_key = ''
const limit = 20

const { data } = await api.getClaimedCredentials(
  project_id,
  configuration_id,
  range_start_time,
  range_end_time,
  exclusive_start_key,
  limit,
)
```

### Default API

Revokes Verifiable Credentials issued to users.

#### changeCredentialStatus

Updates the status of a credential, for example to revoke it.

Parameters

    projectId
    string
    Required
  ID of the project where the credential was issued.

    configurationId
    string
    Required
  ID of the issuance configuration used.

    request
    [ChangeCredentialStatusInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/typescript/credential-issuance-client/docs/ChangeCredentialStatusInput.md)
    Required
  Details of the credential to revoke.

Example

```typescript
import {
  DefaultApi,
  Configuration,
  ChangeCredentialStatusInput,
} from '@affinidi-tdk/credential-issuance-client'

const api = new DefaultApi(
  new Configuration({ apiKey: authProvider.fetchProjectScopedToken.bind(authProvider) })
)

const projectId = '

'
const configId = ''
const request: ChangeCredentialStatusInput = {
  changeReason: 'INVALID_CREDENTIAL',
  issuanceRecordId: '',
}

const { data } = await api.changeCredentialStatus(projectId, configId, request)
```

#### listIssuanceDataRecords

Returns the list of revocable credential records, including status and record ID.

Parameters

    projectId
    string
    Required
  ID of the project where the credentials were issued.

    configurationId
    string
    Required
  ID of the issuance configuration used.

    limit
    number
    Optional
  Maximum number of records to return.

    exclusiveStartKey
    string
    Optional
  Pagination cursor — the base64url-encoded key returned from the previous call.

Example

```typescript
import { DefaultApi, Configuration } from '@affinidi-tdk/credential-issuance-client'

const api = new DefaultApi(
  new Configuration({ apiKey: authProvider.fetchProjectScopedToken.bind(authProvider) })
)

const projectId = '

'
const configId = ''

const { data } = await api.listIssuanceDataRecords(projectId, configId)
```

### Offer API

Retrieves the credential offer created by the Issuance API.

#### getCredentialOffer

Retrieves the credential offer details.

Parameters

    projectId
    string
    Required
  ID of the project that initiated the issuance.

    issuanceId
    string
    Required
  ID of the initiated issuance.

Example

```typescript
import { OfferApi, Configuration } from '@affinidi-tdk/credential-issuance-client'

const api = new OfferApi(
  new Configuration({ apiKey: authProvider.fetchProjectScopedToken.bind(authProvider) })
)

const projectId = '

'
const issuanceId = ''

const result = await api.getCredentialOffer(projectId, issuanceId)
```

### WellKnown API

Retrieves OpenID Connect credential issuer configuration.

#### getWellKnownOpenIdCredentialIssuer

Retrieves the well-known credential issuer configuration for OpenID Connect.

Parameters

    projectId
    string
    Required
  ID of the project.

Example

```typescript
import { WellKnownApi, Configuration } from '@affinidi-tdk/credential-issuance-client'

const api = new WellKnownApi(
  new Configuration({ apiKey: authProvider.fetchProjectScopedToken.bind(authProvider) })
)

const projectId = '

'

const result = await api.getWellKnownOpenIdCredentialIssuer(projectId)
```
