Skip to main content

Credential Templates

Templates are reusable blueprints that define the structure and requirements for credentials and verifications.

Overview

Credential Templates define the structure, attributes, and format of credentials you issue. They serve as reusable blueprints that ensure consistency across all credentials of the same type.

Credential Template Flow

Template Types

Skippy supports multiple credential formats:

SD-JWT (vc+sd-jwt)

  • Privacy-preserving credential format
  • Selective disclosure capabilities
  • Compact representation
  • Recommended for most use cases

MSO mDoc (mso_mdoc)

  • ISO 18013-5 compliant
  • Mobile driver's license format
  • Hardware-backed security

Creating a Credential Template

Prerequisites

Before creating a credential template, ensure you have:

  1. Created a Project: Credential templates belong to projects
  2. Created an Issuer DID: You'll need a DID to sign credentials

Step 1: Define Basic Information

Establish the foundational details of your credential:

  • Template Name: Descriptive name (e.g., "Employee Badge", "University Diploma")
  • Description: Clear explanation of what this credential represents
  • Credential Type: Unique identifier (e.g., "EmployeeBadge", "BachelorDegree")
  • Format Selection: Choose credential format (SD-JWT recommended for privacy)

Step 2: Design Credential Structure

Define the data fields (attributes) your credential will contain:

Attribute Configuration:

  • Name & Description: Clear labels and explanations for each field
  • Data Type: Choose from String, Number, Boolean, Date, or Object
  • Constraints: Set minimum/maximum values, patterns, or required formats
  • Disclosure Settings: Mark fields as always visible or selectively disclosable

Supported Data Types:

TypeDescriptionExample Use Cases
StringText valuesNames, IDs, addresses
NumberNumeric valuesAge, scores, levels
BooleanTrue/falseActive status, verified flags
DateTimestampsBirth date, expiration, issue date
ObjectNested structuresAddresses, contact info

Step 3: Configure Display Settings

Customize how the credential appears to holders:

Credential Card Example

  • Display Name: User-facing credential name
  • Background Color: Brand color for credential card
  • Text Color: Ensure readability and contrast
  • Logo (optional): Organization or issuer logo

Step 4: Set Validity Parameters

Define the credential's lifecycle:

  • Not Before (nbf): When the credential becomes valid
  • Expiration (exp): When the credential expires
  • Revocation: Enable if credentials may need to be revoked

Step 5: Assign Issuer

Select the issuer DID that will digitally sign credentials from this template. The issuer's signature:

  • ✅ Proves credential authenticity
  • ✅ Enables cryptographic verification
  • ✅ Links credential to trusted issuer

Step 6: Review and Save

Verify all configuration:

  • Confirm all required attributes are included
  • Check disclosure settings are appropriate
  • Review display configuration
  • Ensure validity periods are correct
  • Save the template

After creation, the template is ready for credential issuance.


Template Examples

Example 1: Employee Badge Template

A comprehensive employee identification credential with access control:

{
"name": "Employee Badge",
"description": "Employee identification and access credential",
"type": "EmployeeBadge",
"format": "vc+sd-jwt",
"attributes": {
"employeeId": {
"name": "Employee ID",
"type": "String",
"description": "Unique employee identifier",
"alwaysDisclosed": true
},
"fullName": {
"name": "Full Name",
"type": "String",
"description": "Employee's full name"
},
"department": {
"name": "Department",
"type": "String",
"description": "Employee's department"
},
"position": {
"name": "Job Title",
"type": "String",
"description": "Employee's job title"
},
"startDate": {
"name": "Start Date",
"type": "Date",
"description": "Employee start date"
},
"accessLevel": {
"name": "Access Level",
"type": "Number",
"description": "Security access level (1-5)",
"minimum": 1,
"maximum": 5
}
},
"display": {
"name": "Employee Badge",
"backgroundColor": "#0066CC",
"textColor": "#FFFFFF"
},
"nbf": 1704067200,
"exp": 1735689600,
"canBeRevoked": true
}

Key Features:

  • Always Disclosed Field: employeeId ensures immediate identification
  • Type Constraints: accessLevel limited to 1-5 range
  • Multiple Data Types: Combines Strings, Date, and Number types
  • Branded Display: Professional blue and white color scheme
  • Revocable: Can be revoked when employee departs

Example 2: Academic Certificate Template

A university degree credential with nested educational details:

{
"name": "Bachelor Degree Certificate",
"description": "University bachelor degree credential",
"type": "BachelorDegree",
"format": "vc+sd-jwt",
"attributes": {
"studentId": {
"name": "Student ID",
"type": "String",
"alwaysDisclosed": true
},
"fullName": {
"name": "Graduate Name",
"type": "String",
"alwaysDisclosed": true
},
"degree": {
"name": "Degree Title",
"type": "String",
"description": "e.g., Bachelor of Science"
},
"major": {
"name": "Major",
"type": "String",
"description": "Field of study"
},
"gpa": {
"name": "GPA",
"type": "Number",
"description": "Grade point average",
"minimum": 0.0,
"maximum": 4.0,
"alwaysDisclosed": false
},
"graduationDate": {
"name": "Graduation Date",
"type": "Date"
}
},
"display": {
"name": "Bachelor Degree",
"backgroundColor": "#8B0000",
"textColor": "#FFFFFF"
},
"canBeRevoked": false
}

Key Features:

  • No Expiration: Academic credentials typically don't expire
  • Privacy Option: GPA can be selectively disclosed
  • Non-Revocable: Degrees aren't typically revoked
  • Institution Branding: Custom university colors

Advanced Features

Nested Objects

For complex data structures, use the Object type with nested properties:

{
"address": {
"name": "Address",
"type": "Object",
"description": "Physical address",
"properties": {
"street": {
"name": "Street",
"type": "String",
"description": "Street address"
},
"city": {
"name": "City",
"type": "String",
"description": "City name"
},
"zipCode": {
"name": "ZIP Code",
"type": "String",
"description": "Postal code"
}
}
}
}

Selective Disclosure (SD-JWT)

For privacy-preserving credentials, control which attributes are always visible versus selectively disclosable:

{
"credentialId": {
"name": "Credential ID",
"type": "String",
"description": "Unique credential identifier",
"alwaysDisclosed": true
},
"age": {
"name": "Age",
"type": "Number",
"description": "User's age",
"alwaysDisclosed": false
},
"dateOfBirth": {
"name": "Date of Birth",
"type": "Date",
"description": "Full birth date",
"alwaysDisclosed": false
}
}

Selective Disclosure Best Practices

Always Disclosed (true):

  • Credential identifiers
  • Essential identification fields
  • Fields required for all verification scenarios

Selectively Disclosed (false):

  • Sensitive personal information
  • Fields that may not always be needed
  • Privacy-sensitive attributes

Example: For age verification, a holder can prove they're over 18 without revealing their exact birthdate.


Managing Credential Templates

View & Browse

Browse all templates in your project, filter by type, and search by name or credential type.

Edit Templates

Modify template details. Use caution if credentials have already been issued from this template.

Delete Unused

Remove templates that haven't been used to issue any credentials yet.

Next Steps

With your credential template created, you're ready to: