Define a BadgeClass JSON-LD object hosted at a stable public URL, containing name, description, image, criteria, and issuer fields
Define an Issuer Profile JSON-LD object at another stable public URL with name, url, email, and optionally a publicKey for signed badges
Create an Assertion JSON-LD object with id (a stable hosted URL for the assertion), recipient (with type 'email' and a SHA-256 hashed identity), badge (URL of the BadgeClass), issuedOn (ISO 8601 datetime), and verification block
Host the Assertion JSON at the URL specified in its id field so that verifiers can perform hosted verification by fetching that URL
Deliver the assertion to the recipient as a baked PNG (JSON embedded in PNG metadata) using an Open Badges baking library, or as a direct URL link
Known gotchas
Assertion URLs must remain permanently accessible; if the URL returns 404 after issuance, all hosted verifications of that badge will fail
Hashing the recipient email with SHA-256 requires appending the salt value to the email before hashing; the salt must be stored and included in the assertion's identity object for verifiers to re-hash and compare
Open Badges 3.0 uses a different data model (W3C Verifiable Credentials); platforms that have migrated to OB 3.0 will reject OB 2.0 assertion JSON submitted through their OB 3.0 API endpoints
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp