Verifiable Credentials

Issue a Verifiable Credential

post
/credential/issue

This endpoint issues a Verifiable Credential. As input it takes the list of issuerDid, subjectDid, attributes, and other parameters of the credential to be issued.

Authorizations
x-api-keystringRequired
Body

Input fields for the creating a Verifiable Credential.

issuerDidstringRequired

DID of the Verifiable Credential issuer. This needs to be a did:cheqd DID.

Example: did:cheqd:testnet:7bf81a20-633c-4cc7-bc4a-5a45801005e0
subjectDidstringRequired

DID of the Verifiable Credential holder/subject. This needs to be a did:key DID.

Example: did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK
attributesobjectRequired

JSON object containing the attributes to be included in the credential.

Example: {"name":"Bob","gender":"male"}
@contextstring[]Optional

Optional properties to be included in the @context property of the credential.

Example: ["https://schema.org/schema.jsonld","https://veramo.io/contexts/profile/v1"]
typestring[]Optional

Optional properties to be included in the type property of the credential.

Example: ["Person"]
expirationDatestring · date-timeOptional

Optional expiration date according to the <a href=https://www.w3.org/TR/vc-data-model/#expiration> VC Data Model specification.

Example: 2023-06-08T13:49:28.000Z
formatstring · enumOptional

Format of the Verifiable Credential. Defaults to VC-JWT.

Example: jwtPossible values:
termsOfUseobject[]Optional

Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential was issued.

Example: {"type":"IssuerPolicy","id":"http://example.com/policies/credential/4","profile":"http://example.com/profiles/credential","prohibition":[{"assigner":"https://example.edu/issuers/14","assignee":"AllVerifiers","target":"http://example.edu/credentials/3732","action":["Archival"]}]}
refreshServiceobject[]Optional

RefreshService property MUST be one or more refresh services that provides enough information to the recipient's software such that the recipient can refresh the verifiable credential.

Example: {"type":"ManualRefreshService2018","id":"https://example.edu/refresh/3732"}
evidenceobject[]Optional

Evidence property MUST be one or more evidence schemes providing enough information for a verifier to determine whether the evidence gathered by the issuer meets its confidence requirements for relying on the credential.

Example: {"type":["DocumentVerification"],"id":"https://example.edu/evidence/f2aeec97-fc0d-42bf-8ca7-0548192d4231","verifier":"https://example.edu/issuers/14","evidenceDocument":"DriversLicense","subjectPresence":"Physical","documentPresence":"Physical","licenseNumber":"123AB4567"}
Responses
200

The request was successful.

application/json
post
/credential/issue
POST /credential/issue HTTP/1.1
Host: studio-api.cheqd.net
x-api-key: YOUR_API_KEY
Content-Type: application/x-www-form-urlencoded
Accept: */*
Content-Length: 398

"issuerDid='did:cheqd:testnet:7bf81a20-633c-4cc7-bc4a-5a45801005e0'&subjectDid='did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK'&attributes={'gender':'male','name':'Bob'}&@context=['https://schema.org']&type=['Person']&format='jwt'&credentialStatus={'statusPurpose':'revocation','statusListName':'employee-credentials','statusListIndex':10,'statusListType':'StatusList2021'}"
{
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://schema.org",
    "https://veramo.io/contexts/profile/v1"
  ],
  "credentialSubject": {
    "gender": "male",
    "id": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK",
    "name": "Bob"
  },
  "credentialStatus": {
    "id": "https://resolver.cheqd.net/1.0/identifiers/did:cheqd:testnet:7c2b990c-3d05-4ebf-91af-f4f4d0091d2e?resourceName=cheqd-suspension-1&resourceType=StatusList2021Suspension#20",
    "statusIndex": 20,
    "statusPurpose": "suspension",
    "type": "StatusList2021Entry"
  },
  "issuanceDate": "2023-06-08T13:49:28.000Z",
  "issuer": {
    "id": "did:cheqd:testnet:7bf81a20-633c-4cc7-bc4a-5a45801005e0"
  },
  "proof": {
    "jwt": "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJkaWQ6Y2hlcWQ6dGVzdG5ldDo3YmY4MWEyMC02MzNjLTRjYzctYmM0YS01YTQ1ODAxMDA1ZTAiLCJuYmYiOjE2ODYyMzIxNjgsInN1YiI6ImRpZDprZXk6ejZNa2hhWGdCWkR2b3REa0w1MjU3ZmFpenRpR2lDMlF0S0xHcGJubkVHdGEyZG9LIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiLCJodHRwczovL3NjaGVtYS5vcmciLCJodHRwczovL3ZlcmFtby5pby9jb250ZXh0cy9wcm9maWxlL3YxIl0sImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImdlbmRlciI6Im1hbGUiLCJuYW1lIjoiQm9iIn0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJQZXJzb24iXX19.wMfdR6RtyAZA4eoWya5Aw97wwER2Cm5Guk780Xw8H9fA3sfudIJeLRLboqixpTchqSbYeA7KbuCTAnLgXTD_Cg",
    "type": "JwtProof2020"
  },
  "type": [
    "VerifiableCredential",
    "Person"
  ]
}

Verify a Verifiable Credential.

post
/credential/verify

This endpoint verifies a Verifiable Credential passed to it. As input, it can take the VC-JWT as a string or the entire credential itself.

Authorizations
x-api-keystringRequired
Query parameters
verifyStatusbooleanOptional

If set to true the verification will also check the status of the credential. Requires the VC to have a credentialStatus property.

Default: false
fetchRemoteContextsbooleanOptional

When dealing with JSON-LD you also MUST provide the proper contexts. Set this to true ONLY if you want the @context URLs to be fetched in case they are a custom context.

Default: false
allowDeactivatedDidbooleanOptional

If set to true allow to verify credential which based on deactivated DID.

Default: false
Body
credentialobjectOptional

Verifiable Credential to be verified as a VC-JWT string or a JSON object.

Responses
200

The request was successful.

application/json
post
/credential/verify
POST /credential/verify HTTP/1.1
Host: studio-api.cheqd.net
x-api-key: YOUR_API_KEY
Content-Type: application/x-www-form-urlencoded
Accept: */*
Content-Length: 89

"credential={}&policies={'issuanceDate':true,'expirationDate':true,'audience':false}"
{
  "verified": true,
  "polices": {},
  "issuer": "did:cheqd:testnet:7bf81a20-633c-4cc7-bc4a-5a45801005e0",
  "signer": {
    "controller": "did:cheqd:testnet:7bf81a20-633c-4cc7-bc4a-5a45801005e0",
    "id": "did:cheqd:testnet:7bf81a20-633c-4cc7-bc4a-5a45801005e0#key-1",
    "publicKeyBase58": "BTJiso1S4iSiReP6wGksSneGfiKHxz9SYcm2KknpqBJt",
    "type": "Ed25519VerificationKey2018"
  }
}

Revoke a Verifiable Credential.

post
/credential/revoke

This endpoint revokes a given Verifiable Credential. As input, it can take the VC-JWT as a string or the entire credential itself. The StatusList2021 or BitstringStatusList resource should already be setup in the VC and credentialStatus property present in the VC.

Authorizations
x-api-keystringRequired
Query parameters
listTypestring · enumRequired

The type of Status List.

Possible values:
publishbooleanRequired

Set whether the StatusList2021 or BitstringStatusList resource should be published to the ledger or not. If set to false, the StatusList2021 or BitstringStatusList publisher should manually publish the resource.

Default: true
Body
credentialone ofOptional

Verifiable Credential to be revoked as a VC-JWT string or a JSON object.

objectOptional
or
stringOptional
symmetricKeystringOptional

The symmetric key used to encrypt the StatusList2021 DID-Linked Resource. Required if the StatusList2021 DID-Linked Resource is encrypted.

Responses
200

The request was successful.

application/json
post
/credential/revoke
POST /credential/revoke?listType=StatusList2021&publish=true HTTP/1.1
Host: studio-api.cheqd.net
x-api-key: YOUR_API_KEY
Content-Type: application/x-www-form-urlencoded
Accept: */*
Content-Length: 39

"credential={}&symmetricKey='text'"
{
  "revoked": true
}

Suspend a Verifiable Credential.

post
/credential/suspend

This endpoint suspends a given Verifiable Credential. As input, it can take the VC-JWT as a string or the entire credential itself.

Authorizations
x-api-keystringRequired
Query parameters
listTypestring · enumRequired

The type of Status List.

Possible values:
publishbooleanOptional

Set whether the StatusList2021 or BitstringStatusList resource should be published to the ledger or not. If set to false, the StatusList2021 or BitstringStatusList publisher should manually publish the resource.

Body
credentialone ofOptional

Verifiable Credential to be revoked as a VC-JWT string or a JSON object.

objectOptional
or
stringOptional
symmetricKeystringOptional

The symmetric key used to encrypt the StatusList2021 DID-Linked Resource. Required if the StatusList2021 DID-Linked Resource is encrypted.

Responses
200

The request was successful.

application/json
post
/credential/suspend
POST /credential/suspend?listType=StatusList2021 HTTP/1.1
Host: studio-api.cheqd.net
x-api-key: YOUR_API_KEY
Content-Type: application/x-www-form-urlencoded
Accept: */*
Content-Length: 39

"credential={}&symmetricKey='text'"
{
  "suspended": true
}

Reinstate a suspended Verifiable Credential.

post
/credential/reinstate

Set whether the StatusList2021 or BitstringStatusList resource should be published to the ledger or not. If set to false, the StatusList2021 or BitstringStatusList publisher should manually publish the resource.

Authorizations
x-api-keystringRequired
Query parameters
listTypestring · enumRequired

The type of Status List.

Possible values:
publishbooleanOptional

Set whether the StatusList2021 or BitstringStatusList resource should be published to the ledger or not. If set to false, the StatusList2021 or BitstringStatusList publisher should manually publish the resource.

Body
credentialone ofOptional

Verifiable Credential to be revoked as a VC-JWT string or a JSON object.

objectOptional
or
stringOptional
symmetricKeystringOptional

The symmetric key used to encrypt the StatusList2021 DID-Linked Resource. Required if the StatusList2021 DID-Linked Resource is encrypted.

Responses
200

The request was successful.

application/json
post
/credential/reinstate
POST /credential/reinstate?listType=StatusList2021 HTTP/1.1
Host: studio-api.cheqd.net
x-api-key: YOUR_API_KEY
Content-Type: application/x-www-form-urlencoded
Accept: */*
Content-Length: 39

"credential={}&symmetricKey='text'"
{
  "unsuspended": true
}

List credentials issued from an associated account.

get
/credentials/issued

This endpoint returns the list of issued credentials controlled by the account. It provides a unified view across all providers with filtering and pagination.

Authorizations
x-api-keystringRequired
Query parameters
pagenumberOptional

Page number for pagination.

Default: 1
limitnumberOptional

Number of items per page.

Default: 10
providerIdstringOptional

Filter credentials by provider ID (e.g., 'studio', 'dock').

issuerIdstringOptional

Filter credentials by issuer DID or ID.

subjectIdstringOptional

Filter credentials by subject DID or ID.

statusstring · enumOptional

Filter credentials by status.

Possible values:
formatstring · enumOptional

Filter credentials by format.

Possible values:
categorystring · enumOptional

Filter credentials by category.

Possible values:
createdAtstring · date-timeOptional

Filter credentials created before or on this date.

credentialTypestringOptional

Filter credentials by type (e.g., 'VerifiableCredential', 'UniversityDegreeCredential').

statusRegistryIdstringOptional

Filter issued credentials using status registry ID.

Responses
200

The request was successful.

application/json
get
/credentials/issued
GET /credentials/issued HTTP/1.1
Host: studio-api.cheqd.net
x-api-key: YOUR_API_KEY
Accept: */*
{
  "total": 1,
  "credentials": [
    {
      "issuedCredentialId": "text",
      "providerId": "text",
      "providerCredentialId": "text",
      "issuerId": "text",
      "subjectId": "text",
      "format": "jwt_vc",
      "category": "credential",
      "type": [
        "VerifiableCredential"
      ],
      "status": "active",
      "statusUpdatedAt": "2025-12-06T18:17:42.278Z",
      "issuedAt": "2025-12-06T18:17:42.278Z",
      "expiresAt": "2025-12-06T18:17:42.278Z",
      "credentialStatus": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      },
      "statusRegistryId": "text",
      "statusIndex": 1,
      "retryCount": 1,
      "lastError": "text",
      "providerMetadata": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      },
      "credential": {
        "@context": "text",
        "id": "text",
        "type": [
          "text"
        ],
        "issuer": "text",
        "issuanceDate": "2025-12-06T18:17:42.278Z",
        "expirationDate": "2025-12-06T18:17:42.278Z",
        "credentialSubject": {
          "ANY_ADDITIONAL_PROPERTY": "anything"
        },
        "proof": {
          "ANY_ADDITIONAL_PROPERTY": "anything"
        },
        "credentialStatus": {
          "ANY_ADDITIONAL_PROPERTY": "anything"
        }
      },
      "createdAt": "2025-12-06T18:17:42.278Z",
      "updatedAt": "2025-12-06T18:17:42.278Z"
    }
  ]
}

Get a single issued credential by ID.

get
/credentials/issued/{id}

This endpoint retrieves a single issued credential using multi-strategy lookup. It can search by UUID (issuedCredentialId) or provider-specific credential ID (providerCredentialId).

Authorizations
x-api-keystringRequired
Path parameters
idstringRequired

Credential identifier (UUID or provider-specific ID).

Query parameters
includeCredentialbooleanOptional

If true, fetch and include the full credential payload from the provider.

Default: false
syncStatusbooleanOptional

If true, synchronize credential status from the provider API before returning.

Default: false
providerIdstringOptional

Provider hint to optimize lookup when using provider-specific credential ID.

Responses
200

The request was successful.

application/json
get
/credentials/issued/{id}
GET /credentials/issued/{id} HTTP/1.1
Host: studio-api.cheqd.net
x-api-key: YOUR_API_KEY
Accept: */*
{
  "issuedCredentialId": "text",
  "providerId": "text",
  "providerCredentialId": "text",
  "issuerId": "text",
  "subjectId": "text",
  "format": "jwt_vc",
  "category": "credential",
  "type": [
    "VerifiableCredential"
  ],
  "status": "active",
  "statusUpdatedAt": "2025-12-06T18:17:42.278Z",
  "issuedAt": "2025-12-06T18:17:42.278Z",
  "expiresAt": "2025-12-06T18:17:42.278Z",
  "credentialStatus": {
    "ANY_ADDITIONAL_PROPERTY": "anything"
  },
  "statusRegistryId": "text",
  "statusIndex": 1,
  "retryCount": 1,
  "lastError": "text",
  "providerMetadata": {
    "ANY_ADDITIONAL_PROPERTY": "anything"
  },
  "credential": {
    "@context": "text",
    "id": "text",
    "type": [
      "text"
    ],
    "issuer": "text",
    "issuanceDate": "2025-12-06T18:17:42.278Z",
    "expirationDate": "2025-12-06T18:17:42.278Z",
    "credentialSubject": {
      "ANY_ADDITIONAL_PROPERTY": "anything"
    },
    "proof": {
      "ANY_ADDITIONAL_PROPERTY": "anything"
    },
    "credentialStatus": {
      "ANY_ADDITIONAL_PROPERTY": "anything"
    }
  },
  "createdAt": "2025-12-06T18:17:42.278Z",
  "updatedAt": "2025-12-06T18:17:42.278Z"
}

Update an issued credential metadata.

put
/credentials/issued/{id}

This endpoint updates metadata for an issued credential. It allows updating providerCredentialId, status, and providerMetadata fields.

Authorizations
x-api-keystringRequired
Path parameters
idstringRequired

Credential identifier (issuedCredentialId).

Body
providerCredentialIdstringOptional

Provider-specific credential ID (e.g., resource ID for studio provider).

statusstring · enumOptional

Credential status.

Possible values:
providerMetadataobjectOptional

Additional provider-specific metadata.

Responses
200

The request was successful.

application/json
put
/credentials/issued/{id}
PUT /credentials/issued/{id} HTTP/1.1
Host: studio-api.cheqd.net
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 71

{
  "providerCredentialId": "text",
  "status": "issued",
  "providerMetadata": {}
}
{
  "success": true,
  "data": {
    "issuedCredentialId": "text",
    "providerId": "text",
    "providerCredentialId": "text",
    "issuerId": "text",
    "subjectId": "text",
    "format": "jwt_vc",
    "category": "credential",
    "type": [
      "VerifiableCredential"
    ],
    "status": "active",
    "statusUpdatedAt": "2025-12-06T18:17:42.278Z",
    "issuedAt": "2025-12-06T18:17:42.278Z",
    "expiresAt": "2025-12-06T18:17:42.278Z",
    "credentialStatus": {
      "ANY_ADDITIONAL_PROPERTY": "anything"
    },
    "statusRegistryId": "text",
    "statusIndex": 1,
    "retryCount": 1,
    "lastError": "text",
    "providerMetadata": {
      "ANY_ADDITIONAL_PROPERTY": "anything"
    },
    "credential": {
      "@context": "text",
      "id": "text",
      "type": [
        "text"
      ],
      "issuer": "text",
      "issuanceDate": "2025-12-06T18:17:42.278Z",
      "expirationDate": "2025-12-06T18:17:42.278Z",
      "credentialSubject": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      },
      "proof": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      },
      "credentialStatus": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      }
    },
    "createdAt": "2025-12-06T18:17:42.278Z",
    "updatedAt": "2025-12-06T18:17:42.278Z"
  }
}

Reissue an issued credential with failed state.

post
/credentials/issued/{id}/re-issue

This endpoint re-issues the issued credential record in failed state.

Authorizations
x-api-keystringRequired
Path parameters
idstringRequired

Credential identifier (issuedCredentialId).

Body
attributesobjectRequired

JSON object containing the attributes to be included in the credential.

Example: {"name":"Bob","gender":"male"}
@contextstring[]Optional

Optional properties to be included in the @context property of the credential.

Example: ["https://schema.org/schema.jsonld","https://veramo.io/contexts/profile/v1"]
typestring[]Optional

Optional properties to be included in the type property of the credential.

Example: ["Person"]
expirationDatestring · date-timeOptional

Optional expiration date according to the <a href=https://www.w3.org/TR/vc-data-model/#expiration> VC Data Model specification.

Example: 2023-06-08T13:49:28.000Z
termsOfUseobject[]Optional

Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential was issued.

Example: {"type":"IssuerPolicy","id":"http://example.com/policies/credential/4","profile":"http://example.com/profiles/credential","prohibition":[{"assigner":"https://example.edu/issuers/14","assignee":"AllVerifiers","target":"http://example.edu/credentials/3732","action":["Archival"]}]}
refreshServiceobject[]Optional

RefreshService property MUST be one or more refresh services that provides enough information to the recipient's software such that the recipient can refresh the verifiable credential.

Example: {"type":"ManualRefreshService2018","id":"https://example.edu/refresh/3732"}
evidenceobject[]Optional

Evidence property MUST be one or more evidence schemes providing enough information for a verifier to determine whether the evidence gathered by the issuer meets its confidence requirements for relying on the credential.

Example: {"type":["DocumentVerification"],"id":"https://example.edu/evidence/f2aeec97-fc0d-42bf-8ca7-0548192d4231","verifier":"https://example.edu/issuers/14","evidenceDocument":"DriversLicense","subjectPresence":"Physical","documentPresence":"Physical","licenseNumber":"123AB4567"}
Responses
200

The request was successful.

application/json
post
/credentials/issued/{id}/re-issue
POST /credentials/issued/{id}/re-issue HTTP/1.1
Host: studio-api.cheqd.net
x-api-key: YOUR_API_KEY
Content-Type: application/x-www-form-urlencoded
Accept: */*
Content-Length: 872

"attributes={'name':'Bob','gender':'male'}&@context=['https://schema.org/schema.jsonld','https://veramo.io/contexts/profile/v1']&type=['Person']&expirationDate='2023-06-08T13:49:28.000Z'&termsOfUse=[{'type':'IssuerPolicy','id':'http://example.com/policies/credential/4','profile':'http://example.com/profiles/credential','prohibition':[{'assigner':'https://example.edu/issuers/14','assignee':'AllVerifiers','target':'http://example.edu/credentials/3732','action':['Archival']}]}]&refreshService=[{'type':'ManualRefreshService2018','id':'https://example.edu/refresh/3732'}]&evidence=[{'type':['DocumentVerification'],'id':'https://example.edu/evidence/f2aeec97-fc0d-42bf-8ca7-0548192d4231','verifier':'https://example.edu/issuers/14','evidenceDocument':'DriversLicense','subjectPresence':'Physical','documentPresence':'Physical','licenseNumber':'123AB4567'}]"
{
  "success": true,
  "data": {
    "issuedCredentialId": "text",
    "providerId": "text",
    "providerCredentialId": "text",
    "issuerId": "text",
    "subjectId": "text",
    "format": "jwt_vc",
    "category": "credential",
    "type": [
      "VerifiableCredential"
    ],
    "status": "active",
    "statusUpdatedAt": "2025-12-06T18:17:42.278Z",
    "issuedAt": "2025-12-06T18:17:42.278Z",
    "expiresAt": "2025-12-06T18:17:42.278Z",
    "credentialStatus": {
      "ANY_ADDITIONAL_PROPERTY": "anything"
    },
    "statusRegistryId": "text",
    "statusIndex": 1,
    "retryCount": 1,
    "lastError": "text",
    "providerMetadata": {
      "ANY_ADDITIONAL_PROPERTY": "anything"
    },
    "credential": {
      "@context": "text",
      "id": "text",
      "type": [
        "text"
      ],
      "issuer": "text",
      "issuanceDate": "2025-12-06T18:17:42.278Z",
      "expirationDate": "2025-12-06T18:17:42.278Z",
      "credentialSubject": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      },
      "proof": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      },
      "credentialStatus": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      }
    },
    "createdAt": "2025-12-06T18:17:42.278Z",
    "updatedAt": "2025-12-06T18:17:42.278Z"
  }
}

Last updated

Was this helpful?