Truvera Documentation portal
WebsiteTruvera Workspace
  • Truvera overview
    • Decentralized identity explained
    • Roadmap
    • Subscription plans & billing
  • Solutions
    • Biometric-Bound Credentials
  • Truvera Workspace
    • Create an organization profile (DID)
    • Issue verifiable credentials
      • Filtering, downloading and deleting credentials
    • Verify credentials
    • Create a schema
    • Create a design
    • Team management
      • Inviting a team member
      • Removing a team member
      • Changing team member roles
      • Data retention policies
      • Sub-accounts
    • Revoking credentials
    • Ecosystem Tools
      • Ecosystem set up
      • Ecosystem example
    • Monetizing credentials
      • Setting up monetizable credentials
    • Creating API keys and webhook endpoints
    • Transaction history
    • Custom branded distribution emails
    • Truvera Workspace release notes
      • 2025 Release notes
        • Release notes Q1 2025
      • 2024 Release notes
        • Release Notes February 2024
        • Release Notes March 2024
        • Release Notes April 2024
        • Release Notes May 2024
        • Release Notes June 2024
        • Release Notes July 2024
        • Release Notes August 2024
        • Release Notes September 2024
        • Release Notes October 2024
        • Release notes November 2024
        • Release notes December 2024
  • Truvera API
    • Getting started
    • Webhooks
      • Webhooks API endpoints
    • Sample Postman collections
      • Issue-Store-Verify sample flow
      • Create ecosystems
      • Issue monetizable credentials
      • Create sub-accounts
      • Issue OpenID credentials
    • Truvera Swagger UI
    • DIDs
    • Profiles
    • Credentials
    • Presentations
      • Proof templates
      • Proof requests
      • Other proof endpoints
    • Registries
    • Revocation Status
    • Credential Schemas
    • Jobs
    • Templates
    • Sub-accounts
    • Teams
    • Messaging
    • OpenID
      • OpenID Issuance and Verification Integration Guide
    • iden3comm
    • Ecosystem Tools
      • Trust Registry Integration Guide
      • Creating a Trust Registry
      • Inviting participants
      • Verifiers and Public info
      • Trust Registry Schemas
      • Trust Registry Proof Templates
      • Reports
      • Updating and Deleting Trust Registry
    • Issuing paid credentials (KVAC algorithm integration)
    • Data
    • Verify
    • Keys
    • Schemas
  • System architecture
    • Proposed architecture with Truvera
    • Revocation
    • System scalability
    • Security policies
    • How data is processed and stored
  • Supported standards
    • Interoperability with OpenID
  • Credential wallet
    • Create and manage DIDs in the Truvera Wallet
    • White label wallet
      • Configuration
        • Enabling and Disabling Features
        • Customizing the Styling
        • Configuring for Android Builds
        • Configuring iOS Builds
      • Publishing in App Stores
        • Android Build Testing and Publishing
        • iOS Build Testing and Publishing
    • Wallet SDK
      • Getting started
        • Example Credential
        • Presentation definition
        • Verify credentials
      • Cloud wallet
      • Biometric plugin
      • Ecosystem Tools
    • Download Truvera Wallet
    • Truvera Wallet release notes
      • Release Notes 2025Q1
      • Release Notes 2024Q4
      • Release Notes 2024Q3
        • Release Notes September 2024
        • Release Notes August 2024
        • Release Notes July 2024
      • Release Notes June 2024
      • Release Notes May 2024
      • Release Notes April 2024
  • Open source community
    • Code of Conduct
    • Truvera Credential SDK
    • Blockchain archives
      • DOCK token
        • Migration terms and conditions
  • Support
    • System Status
    • Discord
    • Support services
    • Security policy
Powered by GitBook
On this page
  • 1. Create a DID
  • 2. Update the DID
  • 3. Create a Schema
  • 4. Issue a verifiable credential
  • 5. Import the credential into the wallet
  • 5. Create a proof template
  • 6. Create a proof request
  • 7. Verify the Presentation

Was this helpful?

Edit on GitHub
  1. Truvera API
  2. Sample Postman collections

Issue-Store-Verify sample flow

PreviousSample Postman collectionsNextCreate ecosystems

Last updated 1 month ago

Was this helpful?

This flow refers to Postman, but the general steps are the same however you use the API. The Issue Store Verify collection includes the scripts that automatically propagate results into the next request bodies when you follow the below steps.

Download the sample collection .

To issue a credential and or a presentation on the holder's behalf, the following steps are required:

1. Create a DID

To create a new DID to issue with, go to Create DID and click Send. The id property denotes a job ID in the system that you can use to query for blockchain transaction status.

The Truvera API supports did:cheqd and did:key method creation.

Body
{
"type": "cheqd"
}
200 Response
{
    "did": "did:cheqd:5CvswSAkWbyn6iQdRtMiD8tUAQmpXBghPVs9JqK5cJTiAhJk",
    "controller": "did:cheqd:5CvswSAkWbyn6iQdRtMiD8tUAQmpXBghPVs9JqK5cJTiAhJk",
    "id": "23677",
    "data": {
        "did": "did:cheqd:5CvswSAkWbyn6iQdRtMiD8tUAQmpXBghPVs9JqK5cJTiAhJk",
        "controller": "did:cheqd:5CvswSAkWbyn6iQdRtMiD8tUAQmpXBghPVs9JqK5cJTiAhJk"
    }
}

Creating a cheqd DID submits a transaction to the blockchain, this could take some time to process.

2. Update the DID

To add information about your Organization to the DID, e.g. name and logo, you will need to update the DID profile.

Body
{
    "did":"did:cheqd:5CfsgqHioKCHNddVK9Y2Lu8fHQpvXh3nc9xVjLZNDqk1ZJ9z",
    "name": "Postman Test",
    "logo":""
}
200 Response
{
    "did": "did:cheqd:5CfsgqHioKCHNddVK9Y2Lu8fHQpvXh3nc9xVjLZNDqk1ZJ9z",
    "name": "Postman Test",
    "logo": ""
}

You only need to create a DID once and then you can issue many credentials with it. A subject/holder DID should not be the same as the issuer DID in a real world credential.

3. Create a Schema

To issue a credential you will need to set a schema that will define which attributes need to be included in the credential.

Body
{
      "$schema": "http://json-schema.org/schema",
      "name": "My Sample schema",
      "description": "description of my schema",
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "emailAddress": {
          "type": "string",
          "format": "email"
        },
        "textAttribute": {
          "type": "string"
        },
        "numberAttribute": {
          "type": "number"
        }
    },
      "required": [
        "emailAddress",
        "textAttribute",
        "numberAttribute"
      ],
      "additionalProperties": false
    }
200 Response
{
    "id": "0",
    "data": {
        "schema": {
            "$schema": "http://json-schema.org/schema",
            "name": "My Sample schema",
            "description": "description of my schema",
            "type": "object",
            "properties": {
                "id": {
                    "type": "string"
                },
                "emailAddress": {
                    "type": "string",
                    "format": "email"
                },
                "textAttribute": {
                    "type": "string"
                },
                "numberAttribute": {
                    "type": "number"
                }
            },
            "required": [
                "emailAddress",
                "textAttribute",
                "numberAttribute"
            ],
            "additionalProperties": false,
            "$metadata": {
                "version": 1,
                "uris": {
                    "jsonSchema": "https://schema.truvera.io/MySampleSchema-V1-1737454702610.json",
                    "jsonLdContext": "https://schema.truvera.io/MySampleSchema-V1737454702610.json-ld"
                }
            },
            "$id": "https://schema.truvera.io/MySampleSchema-V1-1737454702610.json"
        },
        "id": "https://schema.truvera.io/MySampleSchema-V1-1737454702610.json",
        "uri": "https://schema.truvera.io/MySampleSchema-V1-1737454702610.json",
        "created": "2025-01-21T10:18:22.707Z",
        "isOwner": true,
        "ownerName": "",
        "ownerLogo": ""
    }
}

4. Issue a verifiable credential

To create a Verifiable Credential using the the new issuer DID, update Issuer with the DID you have created in the first step and add the required information to the attributes. It will return a Verifiable Credential that conforms to the W3C spec.

Body
{
  "persist": true,
  "password": "1234",
  "algorithm": "dockbbs",
  "recipientEmail":"agne@truvera.io",
  "distribute": true,
  "format": "jsonld",
  "credential": {
    "name": "My test credential",
    "description": "describing my test credential",
    "schema": "https://schema.truvera.io/MySampleSchema-V1-1736946620866.json",
    "type": [
      "SampleSchema"
    ],
    "subject": {
        "id":"1234",
        "emailAddress":"myemail@address.com",
        "textAttribute":"Some text",
        "numberAttribute":1
    },
    "issuer": "did:cheqd:testnet:64b9e235-7267-4ca3-a643-8123292466c6",
    "issuanceDate": "2025-01-21T11:03:35.610Z"
  }
}
```
200 Response
{
    "@context": [
        "https://www.w3.org/2018/credentials/v1",
        "https://ld.dock.io/credentials/extensions-v1",
        "https://ld.dock.io/security/bbs23/v1",
        "https://schema.truvera.io/MySampleSchema-V1736946620866.json-ld"
    ],
    "id": "https://creds-testnet.truvera.io/649587d77d648a56c9be7a43668a6c4c44dfa7eee6fbfd9188cbf293616457a3",
    "type": [
        "VerifiableCredential",
        "SampleSchema"
    ],
    "credentialSubject": {
        "id": "1234",
        "emailAddress": "myemail@address.com",
        "textAttribute": "Some text",
        "numberAttribute": 1
    },
    "issuanceDate": "2025-01-21T11:03:35.610Z",
    "issuer": {
        "name": "My new DID",
        "logo": "https://placehold.co/400",
        "id": "did:cheqd:testnet:64b9e235-7267-4ca3-a643-8123292466c6"
    },
    "credentialSchema": {
        "id": "https://schema.truvera.io/MySampleSchema-V1-1736946620866.json",
        "type": "JsonSchemaValidator2018",
        "details": "{\"jsonSchema\":{\"$id\":\"https://schema.truvera.io/MySampleSchema-V1-1736946620866.json\",\"$schema\":\"http://json-schema.org/schema\",\"description\":\"description of my schema\",\"name\":\"My Sample schema\",\"properties\":{\"@context\":{\"type\":\"string\"},\"credentialSchema\":{\"properties\":{\"details\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"type\":{\"type\":\"string\"},\"version\":{\"type\":\"string\"}},\"type\":\"object\"},\"credentialSubject\":{\"additionalProperties\":false,\"properties\":{\"emailAddress\":{\"format\":\"email\",\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"numberAttribute\":{\"type\":\"number\"},\"textAttribute\":{\"type\":\"string\"}},\"required\":[\"emailAddress\",\"textAttribute\",\"numberAttribute\"],\"type\":\"object\"},\"cryptoVersion\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"issuanceDate\":{\"format\":\"date-time\",\"type\":\"string\"},\"issuer\":{\"properties\":{\"id\":{\"type\":\"string\"},\"logo\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"type\":\"object\"},\"name\":{\"type\":\"string\"},\"proof\":{\"properties\":{\"@context\":{\"items\":[{\"properties\":{\"proof\":{\"properties\":{\"@container\":{\"type\":\"string\"},\"@id\":{\"type\":\"string\"},\"@type\":{\"type\":\"string\"}},\"type\":\"object\"},\"sec\":{\"type\":\"string\"}},\"type\":\"object\"},{\"type\":\"string\"}],\"type\":\"array\"},\"created\":{\"format\":\"date-time\",\"type\":\"string\"},\"proofPurpose\":{\"type\":\"string\"},\"type\":{\"type\":\"string\"},\"verificationMethod\":{\"type\":\"string\"}},\"type\":\"object\"},\"type\":{\"type\":\"string\"}},\"type\":\"object\"},\"parsingOptions\":{\"defaultDecimalPlaces\":4,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":true}}",
        "version": "0.4.0"
    },
    "name": "My test credential",
    "description": "describing my test credential",
    "cryptoVersion": "0.6.0",
    "proof": {
        "@context": [
            {
                "sec": "https://w3id.org/security#",
                "proof": {
                    "@id": "sec:proof",
                    "@type": "@id",
                    "@container": "@graph"
                }
            },
            "https://ld.dock.io/security/bbs23/v1"
        ],
        "type": "Bls12381BBSSignatureDock2023",
        "created": "2025-01-21T13:04:29Z",
        "verificationMethod": "did:cheqd:testnet:64b9e235-7267-4ca3-a643-8123292466c6#keys-2",
        "proofPurpose": "assertionMethod",
        "proofValue": "z2qWh3aNTysCYP8f41cj9jouGMHTKnag3vP4rfUJwXpQsnhjHgR6VfXYsj5TZAhNpG2jpkA4xTh1pDJjdsVgMdoXo8rdgAaNL5ovY36UqpsAC7V"
    }
}

5. Import the credential into the wallet

5. Create a proof template

To verify a credential you will need a verification template, that will indicate which attributes need to be fulfilled for successful verification. Verification templates can be reused.

Body
{
  "name": "My Sample Proof Template",
  "request": {
    "name": "sample proof template",
    "purpose": "test my sample proof template",
    "input_descriptors": [
      {
        "id": "Credential 1",
            "name": "Verify Sample credential",
            "purpose": "verify sample credential",
            "constraints": {
            "fields": [
                {
                "path": [
                    "$.credentialSubject.emailAddress"
                ],
                "optional": false
            },
            {
                "path": [
                    "$.credentialSubject.numberAttribute"
                ],
                "filter": {
                    "type": "number",
                    "exclusiveMinimum": 0
                },
                "optional": false,
                "predicate": "required"
            },
            {
                "path": [
                    "$.credentialSchema.id"
                ],
                "filter": {
                    "const": "https://schema.truvera.io/MySampleSchema-V1-1736946620866.json"
                }
            },
            {
                "path": [
                    "$.credentialSubject.textAttribute"
                ]
            }
          ]
        }
      }
    ]
  }
}
200 Response
{
    "id": "6cc6abd6-d47e-46c4-9ba1-3677a904237b",
    "did": "",
    "name": "My Sample Proof Template",
    "created": "2025-01-21T13:05:50.319Z",
    "updated": "2025-01-21T13:05:50.319Z",
    "request": {
        "name": "sample proof template",
        "purpose": "test my sample proof template",
        "input_descriptors": [
            {
                "id": "Credential 1",
                "name": "Verify Sample credential",
                "purpose": "verify sample credential",
                "constraints": {
                    "fields": [
                        {
                            "path": [
                                "$.credentialSubject.emailAddress"
                            ],
                            "optional": false
                        },
                        {
                            "path": [
                                "$.credentialSubject.numberAttribute"
                            ],
                            "filter": {
                                "type": "number",
                                "exclusiveMinimum": 0
                            },
                            "optional": false,
                            "predicate": "required"
                        },
                        {
                            "path": [
                                "$.credentialSchema.id"
                            ],
                            "filter": {
                                "const": "https://schema.truvera.io/MySampleSchema-V1-1736946620866.json"
                            }
                        },
                        {
                            "path": [
                                "$.credentialSubject.textAttribute"
                            ]
                        }
                    ]
                }
            }
        ]
    },
    "totalRequests": 0,
    "types": [
        "jsonld"
    ]
}

6. Create a proof request

Using the verification template created in the previous step in the endpoint POST/proof-templates/{id}/ request a single use proof request will be created.

200 Response
{
    "id": "86189366-c2a5-452e-b512-e052e26c84c1",
    "name": "My Sample Proof Template",
    "nonce": "6ef48e6c5f7a6f57eb92ab193f03fc8f",
    "did": "",
    "verified": false,
    "created": "2025-01-21T13:06:59.139Z",
    "updated": "2025-01-21T13:06:59.139Z",
    "signature": null,
    "presentation": {},
    "response_url": "https://api-testnet.truvera.io/proof-requests/86189366-c2a5-452e-b512-e052e26c84c1/send-presentation",
    "type": "proof-request",
    "qr": "https://creds-testnet.truvera.io/proof/86189366-c2a5-452e-b512-e052e26c84c1",
    "request": {
        "name": "sample proof template",
        "purpose": "test my sample proof template",
        "input_descriptors": [
            {
                "id": "Credential 1",
                "name": "Verify Sample credential",
                "purpose": "verify sample credential",
                "constraints": {
                    "fields": [
                        {
                            "path": [
                                "$.credentialSubject.emailAddress"
                            ],
                            "optional": false
                        },
                        {
                            "path": [
                                "$.credentialSubject.numberAttribute"
                            ],
                            "filter": {
                                "type": "number",
                                "exclusiveMinimum": 0
                            },
                            "optional": false,
                            "predicate": "required"
                        },
                        {
                            "path": [
                                "$.credentialSchema.id"
                            ],
                            "filter": {
                                "const": "https://schema.truvera.io/MySampleSchema-V1-1736946620866.json"
                            }
                        },
                        {
                            "path": [
                                "$.credentialSubject.textAttribute"
                            ]
                        }
                    ]
                }
            }
        ],
        "id": "86189366-c2a5-452e-b512-e052e26c84c1"
    },
    "types": [
        "jsonld"
    ]
}

The proof request is one time use so that the information from the credential can be associated to a specific transaction event. However, the proof template can be used as many times as needed.

If there is a need to have a static QR code for multiple verification, a small service can be created to make proof requests from the verification template as and when needed.

7. Verify the Presentation

Scan the QR code from the proof presentation using your wallet to verify the credential.

and click on the email link that was sent when issuing the credential. If not using the email distribution download the json of the credential an import it to the wallet using the json import option.

here
Download Truvera wallet