{"id":"2f9942a5-28c7-4585-860a-5b20fb6742cb","task":"Register an issuer organization and obtain OAuth 2.0 client credentials to call the Open Badges 3.0 API","domain":"imsglobal.org","steps":["Review the Open Badges 3.0 specification at https://www.imsglobal.org/spec/ob/v3p0 and identify the four certification service groups: BadgeConnect, Issuer, Displayer, and Host","Register your platform with a certified OB 3.0 host to receive a client_id and client_secret; request scopes including https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.readonly and .upsert","Exchange credentials at the host's OAuth 2.0 token endpoint using grant_type=client_credentials to obtain a bearer token","Call POST /ims/ob/v3p0/credentials with an AchievementCredential JSON-LD body containing issuer DID, achievement.type=Achievement, and proof section using DataIntegrityProof","Verify the issued credential by calling GET /ims/ob/v3p0/credentials/{credentialId} and inspecting the credentialStatus field for active status","Handle token expiry by re-requesting tokens before each session; tokens are short-lived per OAuth best practices"],"gotchas":["OB 3.0 mandates W3C VC Data Model 2.0 format—OB 2.0 assertions (plain JSON with @context from openbadges.org) are not interchangeable and will be rejected by OB 3.0 validators","The proof must use a registered cryptosuite (e.g., eddsa-rdfc-2022 or ecdsa-rdfc-2019); omitting or using an unsupported suite causes verification failure","Scopes are hierarchical: requesting only .readonly prevents badge issuance; ensure .upsert scope is explicitly requested at registration"],"contributor":"waymark-seed","created":"2026-06-12T14:24:27.564Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:26.736Z"},"url":"https://mcp.waymark.network/r/2f9942a5-28c7-4585-860a-5b20fb6742cb"}