Credentials

This API suite focuses on defining the types of verifiable credentials.

Retrieve the list of issued credential offers

GET /api/v1/vc/offers

Retrieves the list of issued credential offers (no thid) or a specific offer (thid specified), either pending, accepted, or issued (point of view of Received or Issuer).

Headers

NameValue

Content-Type

application/json

Authorization

apikey = {Alice or Bob's key}

Query param

NameTypeDescription

thid

string

The thid of the offer

Response

{
"data": [
        {
            "recordId": "61faa8cb-7bc9-4c41-a0e5-7c10d81dd98f",
            "thid": "87323d88-51ec-424f-882a-a1f2655888db",
            "credentialFormat": "JWT",
            "validityPeriod": 3600,
            "claims": {
                "uid": "12345",
                "name": "Stable Diffusion SDXL"
            },
            "automaticIssuance": false,
            "createdAt": "2024-10-03T15:28:01.776806Z",
            "updatedAt": "2024-10-03T15:28:02.395132Z",
            "role": "Issuer",
            "protocolState": "OfferSent",
            "metaRetries": 5
        }
    ]
}

Get first Credential that matches a type

point of view of Holder or Issuer

GET /api/v1/vc/match/{type}

Headers

NameValue

Content-Type

application/json

Authorization

apikey = {Alice or Bob's key}

Params

NameTypeDescription

type

string

the claim_type

Response

{
"data": {
        "recordId": "fde44892-7269-45fb-ab80-b88869450cd0",
        "vc": {
            "recordId": "fde44892-7269-45fb-ab80-b88869450cd0",
            "thid": "259caa16-25db-48d0-a0d9-4400818ab2e0",
            "credentialFormat": "JWT",
            "subjectId": "did:prism:ca602ff65d8021bb4b77cbce6df6917e0b062d73f8c5fb7d0d6c3cded5874d88",
            "claims": {
                "claim_type": "test",
                "object": "a simple test"
            },
            "createdAt": "2024-10-04T14:30:00.484157Z",
            "updatedAt": "2024-10-04T14:30:58.621911Z",
            "role": "Holder",
            "protocolState": "CredentialReceived",
            "credential": "ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKRlV6STFOa3NpZlEuZXlKcGMzTWlPaUprYVdRNmNISnBjMjA2WVRObFl6Y3hZVE01Wm1JMVltUTROMlF4T1Roa1lXTmhNVGM1TnpWbU5qTmpaalZpT1RVMk56YzBORGRsTlRjM05XRTVaV1JoWmpSak5XSXdORFE0WWpwRGJtOUxaVUpKTlVOblZuSmFXR3QwVFZKQlJWTnBORXREV0U1c1dUTkJlVTVVV25KTlVrbG9RV2M1VEMxa1UybExVRXBDVmpSWU9GQjNZa1pQTm1zemFtSlRlRlo0Y1ZOcFQyWnJTbVJXTnpkSVlXaEZhbk5MUWpJeGFHTXpVbXhqYWtGUlFWVnZkVU5uYkhwYVYwNTNUV3BWTW1GNlJWTkpVVTFwYjB0S05taHpWa0p4UlhkQ1VtdHplRzlxZVhkUGFIcDJSRm95U1RWaVZVcHZSalJxYUZOSFFUaEJJaXdpYzNWaUlqb2laR2xrT25CeWFYTnRPbU5oTmpBeVptWTJOV1E0TURJeFltSTBZamMzWTJKalpUWmtaalk1TVRkbE1HSXdOakprTnpObU9HTTFabUkzWkRCa05tTXpZMlJsWkRVNE56UmtPRGc2UTI1dlMyVkNTVFZEWjFaeVdsaHJkRTFvUVVWVGFUUkxRMWhPYkZrelFYbE9WRnB5VFZKSmFFRjZjak5pTFVwTU1HOHlRbVpmUWtsclRqTkZUWFJ5ZWprNFJHVTVXa2hPVm5WTmNVUnhRVU5LTW1jMFJXcHpTMEl5TVdoak0xSnNZMnBCVVVGVmIzVkRaMng2V2xkT2QwMXFWVEpoZWtWVFNWRk9kbGxMY1dWVGVXMW5kVUl5VUhoTGRGSnZWRmRzY1ZWelQwUkJhM0pQY1dGaE1FMVlZemxUWnpkbVFTSXNJbTVpWmlJNk1UY3lPREExTWpJMU5pd2laWGh3SWpveE56TXdOalEwTWpVMkxDSjJZeUk2ZXlKamNtVmtaVzUwYVdGc1UzVmlhbVZqZENJNmV5SmpiR0ZwYlY5MGVYQmxJam9pZEdWemRDSXNJbWxrSWpvaVpHbGtPbkJ5YVhOdE9tTmhOakF5Wm1ZMk5XUTRNREl4WW1JMFlqYzNZMkpqWlRaa1pqWTVNVGRsTUdJd05qSmtOek5tT0dNMVptSTNaREJrTm1NelkyUmxaRFU0TnpSa09EZzZRMjV2UzJWQ1NUVkRaMVp5V2xocmRFMW9RVVZUYVRSTFExaE9iRmt6UVhsT1ZGcHlUVkpKYUVGNmNqTmlMVXBNTUc4eVFtWmZRa2xyVGpORlRYUnllams0UkdVNVdraE9WblZOY1VSeFFVTktNbWMwUldwelMwSXlNV2hqTTFKc1kycEJVVUZWYjNWRFoyeDZXbGRPZDAxcVZUSmhla1ZUU1ZGT2RsbExjV1ZUZVcxbmRVSXlVSGhMZEZKdlZGZHNjVlZ6VDBSQmEzSlBjV0ZoTUUxWVl6bFRaemRtUVNJc0ltOWlhbVZqZENJNkltRWdjMmx0Y0d4bElIUmxjM1FpZlN3aWRIbHdaU0k2V3lKV1pYSnBabWxoWW14bFEzSmxaR1Z1ZEdsaGJDSmRMQ0pBWTI5dWRHVjRkQ0k2V3lKb2RIUndjenBjTDF3dmQzZDNMbmN6TG05eVoxd3ZNakF4T0Z3dlkzSmxaR1Z1ZEdsaGJITmNMM1l4SWwwc0ltbHpjM1ZsY2lJNkltUnBaRHB3Y21semJUcGhNMlZqTnpGaE16bG1ZalZpWkRnM1pERTVPR1JoWTJFeE56azNOV1kyTTJObU5XSTVOVFkzTnpRME4yVTFOemMxWVRsbFpHRm1OR00xWWpBME5EaGlPa051YjB0bFFrazFRMmRXY2xwWWEzUk5Va0ZGVTJrMFMwTllUbXhaTTBGNVRsUmFjazFTU1doQlp6bE1MV1JUYVV0UVNrSldORmc0VUhkaVJrODJhek5xWWxONFZuaHhVMmxQWm10S1pGWTNOMGhoYUVWcWMwdENNakZvWXpOU2JHTnFRVkZCVlc5MVEyZHNlbHBYVG5kTmFsVXlZWHBGVTBsUlRXbHZTMG8yYUhOV1FuRkZkMEpTYTNONGIycDVkMDlvZW5aRVdqSkpOV0pWU205R05HcG9VMGRCT0VFaUxDSmpjbVZrWlc1MGFXRnNVM1JoZEhWeklqcDdJbk4wWVhSMWMxQjFjbkJ2YzJVaU9pSlNaWFp2WTJGMGFXOXVJaXdpYzNSaGRIVnpUR2x6ZEVsdVpHVjRJam95Tml3aWFXUWlPaUpvZEhSd09sd3ZYQzlvYjNOMExtUnZZMnRsY2k1cGJuUmxjbTVoYkRvNE1UQXdYQzlqYkc5MVpDMWhaMlZ1ZEZ3dlkzSmxaR1Z1ZEdsaGJDMXpkR0YwZFhOY0x6azVOVFk1TWpnNExXTTJNR1V0TkdVd1ppMWhOREJtTFRBMU5ESXpOVEJsWldRMVlpTXlOaUlzSW5SNWNHVWlPaUpUZEdGMGRYTk1hWE4wTWpBeU1VVnVkSEo1SWl3aWMzUmhkSFZ6VEdsemRFTnlaV1JsYm5ScFlXd2lPaUpvZEhSd09sd3ZYQzlvYjNOMExtUnZZMnRsY2k1cGJuUmxjbTVoYkRvNE1UQXdYQzlqYkc5MVpDMWhaMlZ1ZEZ3dlkzSmxaR1Z1ZEdsaGJDMXpkR0YwZFhOY0x6azVOVFk1TWpnNExXTTJNR1V0TkdVd1ppMWhOREJtTFRBMU5ESXpOVEJsWldRMVlpSjlmWDAubmw1RnB6ZlJ1Z1FBZU5sdUNCM1drdnlITTcyUlBYNVE1d3NOYk5MalpGWFRTM0VjdE9tZE1nbll0YVVoMll3QmZ2WEZMQVQtWFZiVDNwRHFyR0s4TFE=",
            "metaRetries": 5
        }
    }
}

Create a credential offer without using a referenced schema

POST /api/v1/vc/offer-noschema

Headers

NameValue

Content-Type

application/json

Authorization

apikey = {Alice's key}

Body

NameTypeDescription

connection

string

didComm connection_id for exchanging request (offer/accept)

author

string

published short DID of author for this offer

validity

number

offer valid for x seconds

claims

string JSON

the claims to be issued in the VC

Response

{
    "data": {
        "recordId": "61faa8cb-7bc9-4c41-a0e5-7c10d81dd98f",
        "thid": "87323d88-51ec-424f-882a-a1f2655888db",
        "credentialFormat": "JWT",
        "validityPeriod": 3600,
        "claims": {
            "uid": "12345",
            "name": "Stable Diffusion SDXL"
        },
        "automaticIssuance": false,
        "createdAt": "2024-10-03T15:28:01.77680643Z",
        "role": "Issuer",
        "protocolState": "OfferPending",
        "metaRetries": 5
    }
}

Accept an offer and issue the credential

POST /api/v1/vc/accept

<Description of the endpoint>

Headers

NameValue

Content-Type

application/json

Authorization

apikey = {Bob's key}

Body

NameTypeDescription

recordId

string

id of the pending offer to accept (compulsory / point of view of receiver)

did

string

did of the holder

Response

{
 "data": {
        "recordId": "5aa7a5ec-35dc-4327-8e06-d9f51952c8ec",
        "thid": "87323d88-51ec-424f-882a-a1f2655888db",
        "credentialFormat": "JWT",
        "subjectId": "did:prism:ca602ff65d8021bb4b77cbce6df6917e0b062d73f8c5fb7d0d6c3cded5874d88",
        "claims": {
            "uid": "12345",
            "name": "Stable Diffusion SDXL"
        },
        "createdAt": "2024-10-03T15:28:02.385192Z",
        "updatedAt": "2024-10-04T14:42:23.328716Z",
        "role": "Holder",
        "protocolState": "RequestPending",
        "metaRetries": 5
    }
}

Issue the credential to the holder

POST /api/v1/vc/issue

Finalizes the credential issuance for the offer and officially issues the credential.

Headers

NameValue

Content-Type

application/json

Authorization

apikey = {Alice's key}

Body

NameTypeDescription

recordId

string

id of the pending offer to accept (compulsory / point of view of issuer)

Response

{
  "data": {
        "recordId": "61faa8cb-7bc9-4c41-a0e5-7c10d81dd98f",
        "thid": "87323d88-51ec-424f-882a-a1f2655888db",
        "credentialFormat": "JWT",
        "validityPeriod": 3600,
        "claims": {
            "uid": "12345",
            "name": "Stable Diffusion SDXL"
        },
        "automaticIssuance": false,
        "createdAt": "2024-10-03T15:28:01.776806Z",
        "updatedAt": "2024-10-04T14:45:04.421Z",
        "role": "Issuer",
        "protocolState": "CredentialPending",
        "metaRetries": 5
    }
}

Create a Credentials offer, accept it, and issue it to holder

POST /api/v1/vc/issuance/custodial

A full offer + accept + issue vc (used in custodial mode)

Headers

NameValue

Content-Type

application/json

Authorization

None

Body

NameTypeDescription

connection

string

the connectionId between issuer and holder (compulsory)

key_peer1

string

apikey of peer 1 (issuer)

key_peer2

string

apikey of peer 2 (holder)

did_peer1

string

published short DID of issuer

did_peer2

string

published short DID of holder

validity

number

Note: does not work well in Identus...

claims

string JSON

the claims to be issued in the VC

noDuplicate

boolean

if true, will not duplicate issuance of same type, but will reuse latest one

Response

{
    "data": {
        "wasOffered": true,
        "wasAccepted": true,
        "vc": {
            "recordId": "fde44892-7269-45fb-ab80-b88869450cd0",
            "thid": "259caa16-25db-48d0-a0d9-4400818ab2e0",
            "credentialFormat": "JWT",
            "subjectId": "did:prism:ca602ff65d8021bb4b77cbce6df6917e0b062d73f8c5fb7d0d6c3cded5874d88",
            "claims": {
                "claim_type": "test",
                "object": "a simple test"
            },
            "createdAt": "2024-10-04T14:30:00.484157Z",
            "updatedAt": "2024-10-04T14:30:58.621911Z",
            "role": "Holder",
            "protocolState": "CredentialReceived",
            "credential": "ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKRlV6STFOa3NpZlEuZXlKcGMzTWlPaUprYVdRNmNISnBjMjA2WVRObFl6Y3hZVE01Wm1JMVltUTROMlF4T1Roa1lXTmhNVGM1TnpWbU5qTmpaalZpT1RVMk56YzBORGRsTlRjM05XRTVaV1JoWmpSak5XSXdORFE0WWpwRGJtOUxaVUpKTlVOblZuSmFXR3QwVFZKQlJWTnBORXREV0U1c1dUTkJlVTVVV25KTlVrbG9RV2M1VEMxa1UybExVRXBDVmpSWU9GQjNZa1pQTm1zemFtSlRlRlo0Y1ZOcFQyWnJTbVJXTnpkSVlXaEZhbk5MUWpJeGFHTXpVbXhqYWtGUlFWVnZkVU5uYkhwYVYwNTNUV3BWTW1GNlJWTkpVVTFwYjB0S05taHpWa0p4UlhkQ1VtdHplRzlxZVhkUGFIcDJSRm95U1RWaVZVcHZSalJxYUZOSFFUaEJJaXdpYzNWaUlqb2laR2xrT25CeWFYTnRPbU5oTmpBeVptWTJOV1E0TURJeFltSTBZamMzWTJKalpUWmtaalk1TVRkbE1HSXdOakprTnpObU9HTTFabUkzWkRCa05tTXpZMlJsWkRVNE56UmtPRGc2UTI1dlMyVkNTVFZEWjFaeVdsaHJkRTFvUVVWVGFUUkxRMWhPYkZrelFYbE9WRnB5VFZKSmFFRjZjak5pTFVwTU1HOHlRbVpmUWtsclRqTkZUWFJ5ZWprNFJHVTVXa2hPVm5WTmNVUnhRVU5LTW1jMFJXcHpTMEl5TVdoak0xSnNZMnBCVVVGVmIzVkRaMng2V2xkT2QwMXFWVEpoZWtWVFNWRk9kbGxMY1dWVGVXMW5kVUl5VUhoTGRGSnZWRmRzY1ZWelQwUkJhM0pQY1dGaE1FMVlZemxUWnpkbVFTSXNJbTVpWmlJNk1UY3lPREExTWpJMU5pd2laWGh3SWpveE56TXdOalEwTWpVMkxDSjJZeUk2ZXlKamNtVmtaVzUwYVdGc1UzVmlhbVZqZENJNmV5SmpiR0ZwYlY5MGVYQmxJam9pZEdWemRDSXNJbWxrSWpvaVpHbGtPbkJ5YVhOdE9tTmhOakF5Wm1ZMk5XUTRNREl4WW1JMFlqYzNZMkpqWlRaa1pqWTVNVGRsTUdJd05qSmtOek5tT0dNMVptSTNaREJrTm1NelkyUmxaRFU0TnpSa09EZzZRMjV2UzJWQ1NUVkRaMVp5V2xocmRFMW9RVVZUYVRSTFExaE9iRmt6UVhsT1ZGcHlUVkpKYUVGNmNqTmlMVXBNTUc4eVFtWmZRa2xyVGpORlRYUnllams0UkdVNVdraE9WblZOY1VSeFFVTktNbWMwUldwelMwSXlNV2hqTTFKc1kycEJVVUZWYjNWRFoyeDZXbGRPZDAxcVZUSmhla1ZUU1ZGT2RsbExjV1ZUZVcxbmRVSXlVSGhMZEZKdlZGZHNjVlZ6VDBSQmEzSlBjV0ZoTUUxWVl6bFRaemRtUVNJc0ltOWlhbVZqZENJNkltRWdjMmx0Y0d4bElIUmxjM1FpZlN3aWRIbHdaU0k2V3lKV1pYSnBabWxoWW14bFEzSmxaR1Z1ZEdsaGJDSmRMQ0pBWTI5dWRHVjRkQ0k2V3lKb2RIUndjenBjTDF3dmQzZDNMbmN6TG05eVoxd3ZNakF4T0Z3dlkzSmxaR1Z1ZEdsaGJITmNMM1l4SWwwc0ltbHpjM1ZsY2lJNkltUnBaRHB3Y21semJUcGhNMlZqTnpGaE16bG1ZalZpWkRnM1pERTVPR1JoWTJFeE56azNOV1kyTTJObU5XSTVOVFkzTnpRME4yVTFOemMxWVRsbFpHRm1OR00xWWpBME5EaGlPa051YjB0bFFrazFRMmRXY2xwWWEzUk5Va0ZGVTJrMFMwTllUbXhaTTBGNVRsUmFjazFTU1doQlp6bE1MV1JUYVV0UVNrSldORmc0VUhkaVJrODJhek5xWWxONFZuaHhVMmxQWm10S1pGWTNOMGhoYUVWcWMwdENNakZvWXpOU2JHTnFRVkZCVlc5MVEyZHNlbHBYVG5kTmFsVXlZWHBGVTBsUlRXbHZTMG8yYUhOV1FuRkZkMEpTYTNONGIycDVkMDlvZW5aRVdqSkpOV0pWU205R05HcG9VMGRCT0VFaUxDSmpjbVZrWlc1MGFXRnNVM1JoZEhWeklqcDdJbk4wWVhSMWMxQjFjbkJ2YzJVaU9pSlNaWFp2WTJGMGFXOXVJaXdpYzNSaGRIVnpUR2x6ZEVsdVpHVjRJam95Tml3aWFXUWlPaUpvZEhSd09sd3ZYQzlvYjNOMExtUnZZMnRsY2k1cGJuUmxjbTVoYkRvNE1UQXdYQzlqYkc5MVpDMWhaMlZ1ZEZ3dlkzSmxaR1Z1ZEdsaGJDMXpkR0YwZFhOY0x6azVOVFk1TWpnNExXTTJNR1V0TkdVd1ppMWhOREJtTFRBMU5ESXpOVEJsWldRMVlpTXlOaUlzSW5SNWNHVWlPaUpUZEdGMGRYTk1hWE4wTWpBeU1VVnVkSEo1SWl3aWMzUmhkSFZ6VEdsemRFTnlaV1JsYm5ScFlXd2lPaUpvZEhSd09sd3ZYQzlvYjNOMExtUnZZMnRsY2k1cGJuUmxjbTVoYkRvNE1UQXdYQzlqYkc5MVpDMWhaMlZ1ZEZ3dlkzSmxaR1Z1ZEdsaGJDMXpkR0YwZFhOY0x6azVOVFk1TWpnNExXTTJNR1V0TkdVd1ppMWhOREJtTFRBMU5ESXpOVEJsWldRMVlpSjlmWDAubmw1RnB6ZlJ1Z1FBZU5sdUNCM1drdnlITTcyUlBYNVE1d3NOYk5MalpGWFRTM0VjdE9tZE1nbll0YVVoMll3QmZ2WEZMQVQtWFZiVDNwRHFyR0s4TFE=",
            "metaRetries": 5
        }
    }
}

Last updated