- Open Badges 2.0: a hosted assertion, a badge class, an issuer profile and a baked badge image.
- Open Badges 3.0: a W3C Verifiable Credential, signed with your organization’s key, and a DID document for your organization.
Before you start
- These URLs are public. They do not need an API key.
- Use
GET.POSTalso works. - Any website can read them from the browser (CORS is open).
- They are on
https://api.thehyperstack.com. Open Badges 2.0 URLs start with/v1/openbadge/. Open Badges 3.0 and DID URLs start with/openbadge/v3/.
{key} is the key of one credential. It is the same value as document_id in API responses and webhook events. It is also the last part of the credential page URL:
9f1c2b3a-7d4e-4c5f-8a6b-2e3d4c5b6a7f.
Only published credentials have Open Badges. A credential that is a draft or under review returns 404. Revoked and suspended credentials still return data, so a platform can see their status. See Revoked and suspended credentials.
All URLs
Open Badges 2.0
The 2.0 files use hosted verification. A platform checks a badge by fetching its assertion from Hyperstack.
Each file is at two URLs. Both return the same data:
id and the links inside the JSON always use the /v1/openbadge/ form. Any other file name redirects to badge.json.
Open Badges 2.0 works only when the credential’s group has a badge design. If the group has no badge design, every 2.0 URL returns
404.Assertion
object
The recipient’s email address, hashed. The hash is SHA-256 of the email address followed by the
salt. To check an email address, hash it the same way and compare the result with the part of identity after sha256$.string
The credential’s issue date, in UTC. This is the issue date you set on the credential. If you did not set one, it is the publish date. The credential page shows the same date.
string
The credential’s expiry date. It is the same date as on the credential page. If you change the expiry date, this changes too. When the credential does not expire, there is no
expires field.Badge class
name and description come from the credential group. criteria is the group’s website. tags are the group’s skill tags. It is an empty list when the group has no tags.
Issuer
url is your organization’s website. If you have not set one, it is your organization page, such as https://hyperstack.id/acme-academy. email is your organization’s contact email. If you have not set one, it is connect@thehyperstack.com.
Badge image
badge.png returns a PNG file as a download. The image is the credential’s own badge. If the credential has no badge image of its own, it is the group’s badge design. If there is neither, it returns 404.
The PNG is baked: it holds the assertion URL in a PNG text chunk named openbadges. A tool that reads the image can find the assertion from this URL.
Open Badges 3.0
Open Badges 3.0 credentials are W3C Verifiable Credentials of typeOpenBadgeCredential.
Any other file name returns the credential without a
proof.
Signed credential
string
The recipient’s name.
string
The group’s description, without HTML.
object
Your organization.
id is your issuer DID. url is your website, or your organization page if you have not set one. email is your organization’s email, or connect+{your-org-name}@thehyperstack.com if you have not set one.object
The recipient and what they earned.
string
The credential’s issue date, in UTC: the issue date you set, or the publish date if you did not set one.
string
The same date as
issuanceDate. It does not change between requests.string
The credential’s expiry date, in UTC. It is the same date as on the credential page. If you change the expiry date, this changes too. When the credential does not expire, there is no
validUntil field.array
The signature. Only
credential.json and badge.json have it.criteria.narrativeis alwaysCompleted all required course components.- The
evidencetext is always made from the group title and your organization’s name.
Signature
Hyperstack signs the credential when you request it.- The proof type is
DataIntegrityProof, with the cryptosuiteeddsa-rdfc-2022. - The key is your organization’s Ed25519 key. Each organization has its own key.
verificationMethodis your issuer DID followed by#key-0. The public key is in your DID document.- Each request makes a new proof.
createdandproofValuechange every time.
Achievement, issuer and revocation list
achievement.json and issuer.json return the achievement and issuer objects shown above, on their own.
revocation_list.json returns the credential’s status. For a valid credential, revoked is false:
revoked is true and there is a revocationReason. See Revoked and suspended credentials.
Badge image
badge.png returns a PNG file as a download. The image is the group’s badge design. If the group has no badge design, it returns 404.
The PNG is baked: it holds the full signed credential as JSON, in a PNG text chunk named openbadgecredential.
Issuer DID
Each organization has a DID that uses thedid:web method:
{issuer_id} is a fixed ID of your organization. To find your DID, open any of your credentials at /openbadge/v3/{key} and read issuer.id.
The DID document is at this URL. A did:web resolver turns the DID into this URL.
/did.json:
#key-0 is a Multikey. publicKeyMultibase is your organization’s Ed25519 public key. It is the key that signs your Open Badges 3.0 credentials. email, url and description come from your organization profile. They are empty when you have not set them. description keeps any HTML formatting from your profile.
For recipients
Recipients can download the Open Badges 2.0 image from their credential page:1
Open the credential page
Open
https://hyperstack.id/credential/{key}.2
Show the badge
If the credential has a certificate and a badge, click Badge.
3
Download
Click the download button at the top of the page. For most organizations, it is labelled Print.
badge.png from Open Badges 2.0. The recipient can upload it to a platform that accepts Open Badges 2.0 images. The download button does not show when the credential is revoked or suspended.
Revoked and suspended credentials
Open Badges has no “suspended” state. Hyperstack shows a suspended credential as revoked. When you lift the suspension, the credential is valid again at the same URLs.
A revoked Open Badges 2.0 assertion returns HTTP
410 Gone, as the Open Badges 2.0 standard says:
revocationReason is Suspended by the issuer. The Open Badges 3.0 revocation list uses the same reasons.
The other files (badgeclass.json, issuer.json, the 3.0 credential and the badge images) still return their data. Platforms find the status from badge.json (2.0) or from credentialStatus (3.0).
Credential status
To check that a credential is still valid (not suspended, revoked or expired), use View Credential, or open its credential page and click Verify credential.Errors
A
404 returns an HTML page, not JSON.
