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
Content-Type
application/json
Authorization
apikey = {Alice or Bob's key}
Query param
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
Content-Type
application/json
Authorization
apikey = {Alice or Bob's key}
Params
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
Content-Type
application/json
Authorization
apikey = {Alice's key}
Body
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
Content-Type
application/json
Authorization
apikey = {Bob's key}
Body
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
Content-Type
application/json
Authorization
apikey = {Alice's key}
Body
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
Content-Type
application/json
Authorization
None
Body
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