Skip to main content
Every Hyperstack credential is also available as an Open Badge. Hyperstack serves two versions of the 1EdTech Open Badges standard:
  • 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.
Other platforms can read these URLs to import or check your credentials.

Before you start

  • These URLs are public. They do not need an API key.
  • Use GET. POST also 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/.
In the URLs on this page, {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:
The key must be a UUID, such as 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:
The 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 type OpenBadgeCredential. 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.
Some values are the same for every credential:
  • criteria.narrative is always Completed all required course components.
  • The evidence text 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 cryptosuite eddsa-rdfc-2022.
  • The key is your organization’s Ed25519 key. Each organization has its own key.
  • verificationMethod is your issuer DID followed by #key-0. The public key is in your DID document.
  • Each request makes a new proof. created and proofValue change 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:
For a revoked or suspended credential, 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 the did: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.
The same document is also at the URL without /did.json:
The key #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.
The file is the baked 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:
For a suspended credential, 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.
Last modified on October 20, 2026