Implement the BadgeConnect service per the OB 3.0 specification: the LMS acts as a Host and must expose GET /ims/ob/v3p0/credentials and POST /ims/ob/v3p0/credentials endpoints
Implement OAuth 2.0 dynamic client registration at GET /.well-known/openid-configuration so that external wallets can discover and register against the LMS dynamically
When a learner earns a badge, POST an AchievementCredential to the learner's connected wallet via the wallet's POST /ims/ob/v3p0/credentials endpoint using the learner-authorized access token
Support the required scopes: https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.upsert for writing credentials and https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.readonly for reading learner profile
Implement response pagination per the OB 3.0 spec: list endpoints must return X-Total-Count header and support limit and offset query parameters
Test interoperability using the 1EdTech conformance test suite before seeking OB 3.0 certification; certification is required for the platform to appear in the 1EdTech certified products list
Known gotchas
Dynamic client registration is mandatory in OB 3.0 BadgeConnect; static client registration is not sufficient for certification, even if it works functionally
The learner must explicitly authorize the LMS to push to their wallet via an OAuth consent screen; auto-pushing without user consent violates the OB 3.0 privacy model and fails certification
1EdTech certification requires passing all required endpoint tests; partial implementations that only support read operations will fail the Issuer certification profile
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