diff --git a/.github/workflows/deploy-cloud-run.yml b/.github/workflows/deploy-cloud-run.yml index ba6582dc..97a81984 100644 --- a/.github/workflows/deploy-cloud-run.yml +++ b/.github/workflows/deploy-cloud-run.yml @@ -26,11 +26,22 @@ env: AUTH0_AUDIENCE: ${{ vars.AUTH0_AUDIENCE }} AUTH_REDIRECT_URI: ${{ vars.AUTH_REDIRECT_URI }} AUTH_POST_LOGIN_REDIRECT: ${{ vars.AUTH_POST_LOGIN_REDIRECT }} - + LATEST_SPEC_VERSION: ${{ vars.LATEST_SPEC_VERSION }} + # Image service (diagram rendering at startup build) + IMAGE_SERVICE_URL: ${{ vars.IMAGE_SERVICE_URL }} + IMAGE_SERVICE_AUTH0_DOMAIN: ${{ vars.IMAGE_SERVICE_AUTH0_DOMAIN }} + IMAGE_SERVICE_AUTH0_AUDIENCE: ${{ vars.IMAGE_SERVICE_AUTH0_AUDIENCE }} + IMAGE_SERVICE_M2M_CLIENT_ID: ${{ vars.IMAGE_SERVICE_M2M_CLIENT_ID }} + # FastComments (discussion) + FASTCOMMENTS_TENANT_ID: ${{ vars.FASTCOMMENTS_TENANT_ID }} + FASTCOMMENTS_ENABLED: ${{ vars.FASTCOMMENTS_ENABLED }} + COMMENTS_SITE_KEY: ${{ vars.COMMENTS_SITE_KEY }} # Secrets AUTH0_CLIENT_SECRET: ${{ secrets.AUTH0_CLIENT_SECRET }} AUTH_COOKIE_SECRET: ${{ secrets.AUTH_COOKIE_SECRET }} MPS_API_KEY: ${{ secrets.MPS_API_KEY }} + IMAGE_SERVICE_M2M_CLIENT_SECRET: ${{ secrets.IMAGE_SERVICE_M2M_CLIENT_SECRET }} + FASTCOMMENTS_API_SECRET: ${{ secrets.FASTCOMMENTS_API_SECRET }} jobs: deploy: @@ -76,6 +87,16 @@ jobs: -t ${{ steps.vars.outputs.IMAGE_URI }} \ --push . + - name: Set health probe path + run: | + BASE="${ASTRO_BASE_PATH:-/}" + BASE="${BASE%/}" + if [ -z "$BASE" ] || [ "$BASE" = "/" ]; then + echo "HEALTHZ_PATH=/healthz" >> "$GITHUB_ENV" + else + echo "HEALTHZ_PATH=${BASE}/healthz" >> "$GITHUB_ENV" + fi + - name: Deploy to Cloud Run id: deploy uses: google-github-actions/deploy-cloudrun@v2 @@ -87,10 +108,12 @@ jobs: --allow-unauthenticated --ingress=internal-and-cloud-load-balancing --port=4321 - --startup-probe=httpGet.port=4321,initialDelaySeconds=10,timeoutSeconds=10,periodSeconds=120,failureThreshold=10 - --memory=1Gi + --startup-probe=httpGet.path=${{ env.HEALTHZ_PATH }},httpGet.port=4321,initialDelaySeconds=10,timeoutSeconds=10,periodSeconds=120,failureThreshold=10 + --memory=2Gi --timeout=60 --min-instances=1 + --concurrency=10 + --cpu=2 --set-env-vars ASTRO_BASE_PATH=${{ env.ASTRO_BASE_PATH }} --set-env-vars AUTH0_DOMAIN=${{ env.AUTH0_DOMAIN }} --set-env-vars AUTH0_CLIENT_ID=${{ env.AUTH0_CLIENT_ID }} @@ -100,8 +123,16 @@ jobs: --set-env-vars AUTH_REDIRECT_URI=${{ env.AUTH_REDIRECT_URI }} --set-env-vars AUTH_POST_LOGIN_REDIRECT=${{ env.AUTH_POST_LOGIN_REDIRECT }} --set-env-vars MPS_API_KEY=${{ env.MPS_API_KEY }} - + --set-env-vars LATEST_SPEC_VERSION=${{ env.LATEST_SPEC_VERSION }} + --set-env-vars IMAGE_SERVICE_URL=${{ env.IMAGE_SERVICE_URL }} + --set-env-vars IMAGE_SERVICE_AUTH0_DOMAIN=${{ env.IMAGE_SERVICE_AUTH0_DOMAIN }} + --set-env-vars IMAGE_SERVICE_AUTH0_AUDIENCE=${{ env.IMAGE_SERVICE_AUTH0_AUDIENCE }} + --set-env-vars IMAGE_SERVICE_M2M_CLIENT_ID=${{ env.IMAGE_SERVICE_M2M_CLIENT_ID }} + --set-env-vars IMAGE_SERVICE_M2M_CLIENT_SECRET=${{ env.IMAGE_SERVICE_M2M_CLIENT_SECRET }} + --set-env-vars FASTCOMMENTS_TENANT_ID=${{ env.FASTCOMMENTS_TENANT_ID }} + --set-env-vars FASTCOMMENTS_ENABLED=${{ env.FASTCOMMENTS_ENABLED }} + --set-env-vars FASTCOMMENTS_API_SECRET=${{ env.FASTCOMMENTS_API_SECRET }} + --set-env-vars COMMENTS_SITE_KEY=${{ env.COMMENTS_SITE_KEY }} - name: Output URL run: echo "Deployed to ${{ steps.deploy.outputs.url }}" - diff --git a/.microsite b/.microsite index 9d738667..ac849ec8 100644 --- a/.microsite +++ b/.microsite @@ -2,7 +2,20 @@ "title": "Open Badges", "description": "Share verified skills and achievements with learning providers and employers across multiple platforms.", "categories": { + "Specification": { + "order": 1 + }, + "Normative": { + "order": 2 + }, + "Guide": { + "order": 3 + }, + "Certification": { + "order": 4 + }, "Extension": { + "order": 5, "description": "Extensions are optional additions to the Open Badges standard that provide additional functionality or support for specific use cases. They are designed to be modular and can be implemented independently of the core standard.", "image": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmxpbms9Imh0dHA6Ly93d3cub3JnLzIwMDAveGxpbmsiIHZlcnNpb249IjEuMSIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCA2NCA2NCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNjQgNjQiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGQ9Ik0zOS40NywzMC43NWMtOC44NiwzLjAyLTEyLjMwLDE0LjIxLTYuNjQsMjEuNjhjMy42LDQuNzgsMTAuMDMsNi43NjEsMTUuNzAsNC44MkM1NC4xMyw1NS4zNCw1OCw0OS45Miw1OCw0NCAgQzU4LDM0LjU2LDQ4LjQyLDI3LjY5LDM5LjQ3LDMwLjc1eiBNNDkuNSw0Ni41aC0zdjNjMCwzLjIyLTUsMy4yMi01LDB2LTNoLTMgYy0zLjIyLDAuMDItMy4yMi01LDAuMDItNWgzdi0zYzAtMy4yMiw1LTMuMjIsNSwwdjNoMyAgQzUyLjcyLDQxLjUsNTIuNzIsNDYuNSw0OS41LDQ2LjV6Ii8+PHBhdGggZD0iTTIyLDU0aDkuNTEgYy01LjI4LTYuNi00LjQwLTE2LjQ3LDEuOTUtMjIuMDQgYzUuNzYtNS4wNSwxNC41Ny01LjIyOSwyMC41NC0wLjQ1VjIyYzAtMy4zMS0yLjY5LTYtNi02aC02LjY4ICBjMC45Ni0yLjAxLDAuOS00LjM2LTAuMTYtNi4zMmMtMS43Ni0zLjI3LTUuOS00LjYtOS4yMy0yLjk3Yy0zLjQsMS42Ni00Ljg4LDUuODctMy4yNSw5LjI5SDIyYy0zLjMxLDAtNiwyLjY5LTYsNnY1LjY4ICBjLTMuMTYtMS41LTcuMDYtMC4zOC04LjkyLDIuNTljLTIuMDEsMy4xOS0xLjA3LDcuNTMsMi4xLDkuNjAxYzIuMDQsMS4zMiw0LjYyLDEuNSw2LjgyLDAuNDVWNDhDMTYsNTEuMzEsMTguNjksNTQsMjIsNTR6Ii8+PC9zdmc+" } diff --git a/Dockerfile b/Dockerfile index a7f7fc5a..d3235a6b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,32 +1,19 @@ FROM us-central1-docker.pkg.dev/specautomation-458709/microsites/microsites-base:dev -ARG ASTRO_BASE_PATH=/case/ -ENV ASTRO_BASE_PATH=/case/ +ARG ASTRO_BASE_PATH=/open-badges/ +ENV ASTRO_BASE_PATH=/open-badges/ +ENV MICROSITE_CONTENT_ROOT=/app/content -# This clears some test upstream content bundled in the base image, preserving content.config.ts -RUN if [ -f /app/src/content/content.config.ts ]; then \ - cp /app/src/content/content.config.ts /tmp/content.config.ts; \ - fi && \ - rm -rf /app/src/content && \ - mkdir -p /app/src/content/standards && \ - if [ -f /tmp/content.config.ts ]; then \ - cp /tmp/content.config.ts /app/src/content/content.config.ts; \ - rm /tmp/content.config.ts; \ - fi +# Remove bundled upstream example content (mdexamples, diagram-examples, etc.) +RUN rm -rf /app/content/docs - -COPY --chown=astro:nodejs ob_v3p0/microsites /app/src/content/standards/ -COPY --chown=astro:nodejs .microsite /app/src/content/ +COPY --chown=astro:nodejs ob_v3p0/microsites /app/content/docs/standards/ +COPY --chown=astro:nodejs .microsite /app/content/.microsite # ACE Extension -COPY --chown=astro:nodejs extensions/aceExtension/v1p0/microsite /app/src/content/standards/ace-extension +COPY --chown=astro:nodejs extensions/aceExtension/v1p0/microsite /app/content/docs/standards/ob-ace # Assessment Extension -COPY --chown=astro:nodejs extensions/assessmentExtension/v2p0/microsite /app/src/content/standards/assessment-extension +COPY --chown=astro:nodejs extensions/assessmentExtension/v2p0/microsite /app/content/docs/standards/ob-assessment # Issuer Accreditation Extension -COPY --chown=astro:nodejs extensions/issuerAccreditationExtension/v2p0/microsite /app/src/content/standards/issuer-accreditation-extension - -# The base image handles everything: -# 1. Runtime processes the assets (transforms paths, copies assets) -# 2. Starts the Astro server -# No additional commands needed! \ No newline at end of file +COPY --chown=astro:nodejs extensions/issuerAccreditationExtension/v2p0/microsite /app/content/docs/standards/ob-accred diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..5714af1e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,48 @@ +services: + image-service: + image: us-central1-docker.pkg.dev/specautomation-458709/microsites/microsites-image-service:dev + platform: linux/amd64 + container_name: ob-image-service-dev + ports: + - "8080:8080" + environment: + NODE_ENV: development + IN_DOCKER: "true" + IMAGE_SERVICE_AUTH_DISABLED: "true" + CACHE_DIR: /cache + CACHE_PUBLIC_HOST: http://image-service:8080 + volumes: + - diagram-cache:/cache + + web: + build: + context: . + dockerfile: Dockerfile + args: + ASTRO_BASE_PATH: "/open-badges/" + platform: linux/amd64 + image: ob-microsite:local + container_name: ob-microsite-dev + ports: + - "4321:4321" + depends_on: + - image-service + environment: + NODE_ENV: development + IN_DOCKER: "true" + ASTRO_BASE_PATH: "/open-badges/" + MICROSITE_CONTENT_ROOT: "/app/content" + DISABLE_AUTH: "true" + HOST: "0.0.0.0" + IMAGE_SERVICE_URL: http://image-service:8080 + IMAGE_SERVICE_AUTH_DISABLED: "true" + LATEST_SPEC_VERSION: "v3p0" + # Optional: uncomment and set for MPS blocks or FastComments local testing + # MPS_API_KEY: "" + # MPS_HOST: "https://mps.1edtech.org" + # FASTCOMMENTS_TENANT_ID: "" + # FASTCOMMENTS_ENABLED: "true" + # COMMENTS_SITE_KEY: "open-badges" + +volumes: + diagram-cache: diff --git a/docs/context.json b/docs/context.json deleted file mode 100644 index c504c798..00000000 --- a/docs/context.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "@context" : { - "id" : "@id", - "type" : "@type", - - "obi" : "https://purl.imsglobal.org/spec/ob/vocab#", - "xsd" : "http://www.w3.org/2001/XMLSchema#", - - "dtAssertion" : "obi:dtAssertion", - "dtBadgeConnectAPI" : "obi:dtBadgeConnectAPI", - "dtProfile" : "obi:dtProfile", - "dtStatus" : "obi:dtStatus", - "dtStatusResponse" : "obi:dtStatusResponse", - - "dtCompactJWS" : { "@id" : "obi:dtCompactJWS", "@type" : "xsd:string" }, - "dtIRI" : { "@id" : "obi:dtIRI", "@type" : "xsd:normalizedString" }, - "dtURL" : { "@id" : "obi:dtURL", "@type" : "xsd:anyURI" }, - - "apiBase" : "obi:dtURL", - "assertion" : "obi:dtAssertion", - "assertions" : { "@id" : "obi:dtAssertion", "@container" : "@set" }, - "authorizationUrl" : "obi:dtURL", - "badgeConnectAPI" : { "@id" : "obi:dtBadgeConnectAPI", "@container" : "@set" }, - "error" : { "@id" : "obi:error", "@type" : "xsd:string" }, - "image" : { "@id" : "obi:image", "@type" : "xsd:anyURI" }, - "name" : { "@id" : "obi:name", "@type" : "xsd:string" }, - "privacyPolicyUrl" : "obi:dtURL", - "profile" : "obi:dtProfile", - "registrationUrl" : "obi:dtURL", - "scopesOffered" : { "@id" : "obi:scopesOffered", "@type" : "xsd:anyURI", "@container" : "@set" }, - "signedAssertion" : "obi:dtCompactJWS", - "signedAssertions" : { "@id" : "obi:dtCompactJWS", "@container" : "@set" }, - "status" : "obi:dtStatus", - "statusCode" : { "@id" : "obi:statusCode", "@type" : "xsd:integer" }, - "statusText" : "obi:StatusTextEnumDType", - "termsOfServiceUrl" : "obi:dtURL", - "tokenRevocationUrl" : "obi:dtURL", - "tokenUrl" : "obi:dtURL", - "version" : { "@id" : "obi:version", "@type" : "xsd:string" } - } -} diff --git a/docs/images/OB3_ACG_DynamicClientRegistration.svg b/docs/images/OB3_ACG_DynamicClientRegistration.svg deleted file mode 100644 index 8fbdb205..00000000 --- a/docs/images/OB3_ACG_DynamicClientRegistration.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/images/OB3_ACG_ObtainingTokens.svg b/docs/images/OB3_ACG_ObtainingTokens.svg deleted file mode 100644 index 4ff8562f..00000000 --- a/docs/images/OB3_ACG_ObtainingTokens.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/images/OB3_Architecture.svg b/docs/images/OB3_Architecture.svg deleted file mode 100644 index 0d294716..00000000 --- a/docs/images/OB3_Architecture.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/images/figure02-openbadges-3.0-diagram.png b/docs/images/figure02-openbadges-3.0-diagram.png deleted file mode 100644 index 8036e6b0..00000000 Binary files a/docs/images/figure02-openbadges-3.0-diagram.png and /dev/null differ diff --git a/docs/images/figure03-skill-assertion-with-evidence.png b/docs/images/figure03-skill-assertion-with-evidence.png deleted file mode 100644 index 887ba85e..00000000 Binary files a/docs/images/figure03-skill-assertion-with-evidence.png and /dev/null differ diff --git a/docs/images/figure04-defined-achievement-with-skill.png b/docs/images/figure04-defined-achievement-with-skill.png deleted file mode 100644 index 7463e339..00000000 Binary files a/docs/images/figure04-defined-achievement-with-skill.png and /dev/null differ diff --git a/docs/images/ob30-concept.png b/docs/images/ob30-concept.png deleted file mode 100644 index a1a38794..00000000 Binary files a/docs/images/ob30-concept.png and /dev/null differ diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 1fee4cc5..00000000 --- a/docs/index.html +++ /dev/null @@ -1,4 +0,0 @@ - -
Hello
- \ No newline at end of file diff --git a/docs/ob_v3p0.html b/docs/ob_v3p0.html deleted file mode 100644 index 384ebca0..00000000 --- a/docs/ob_v3p0.html +++ /dev/null @@ -1,5040 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- | Document Version: | -0 | -
| Date Issued: | -10 March 2022 | -
| Status: | -This document is for review and comment by IMS Contributing Members. | -
| This version: | -https://www.imsglobal.org/spec/ob/v3p0/main/ | -
| Latest version: | -https://www.imsglobal.org/spec/ob/latest/main/ | -
| Errata: | -https://www.imsglobal.org/spec/ob/v3p0/errata/ | -
| Issue Tracker | -- https://github.com/IMSGlobal/openbadges-specification/issues - | -
- Recipients of this document are requested to submit, with their - comments, notification of any relevant patent claims or other - intellectual property rights of which they may be aware that might be - infringed by any implementation of the specification set forth in this - document, and to provide supporting documentation. -
-- IMS takes no position regarding the validity or scope of any - intellectual property or other rights that might be claimed to pertain - implementation or use of the technology described in this document or - the extent to which any license under such rights might or might not be - available; neither does it represent that it has made any effort to - identify any such rights. Information on IMS's procedures with respect - to rights in IMS specifications can be found at the IMS Intellectual - Property Rights webpage: - - http://www.imsglobal.org/ipr/imsipr_policyFinal.pdf . -
-- The following participating organizations have made explicit license - commitments to this specification: -
| Org name | -Date election made | -Necessary claims | -Type | - -
|---|---|---|---|
| Concentric Sky | -October 24, 2019 | -No | -RF RAND (Required & Optional Elements) | -
| Digital Knowledge | -October 11, 2019 | -No | -RF RAND (Required & Optional Elements) | -
| Washington State Board for Community and Technical Colleges (WSBCTC) | -October 4, 2019 | -No | -RF RAND (Required & Optional Elements) | -
| Credly | -October 3, 2019 | -No | -RF RAND (Required & Optional Elements) | -
- Use of this specification to develop products or services is governed by - the license with IMS found on the IMS website: - - http://www.imsglobal.org/speclicense.html. -
-- Permission is granted to all parties to use excerpts from this document - as needed in producing requests for proposals. -
-- The limited permissions granted above are perpetual and will not be - revoked by IMS or its successors or assigns. -
-- THIS SPECIFICATION IS BEING OFFERED WITHOUT ANY WARRANTY WHATSOEVER, AND - IN PARTICULAR, ANY WARRANTY OF NONINFRINGEMENT IS EXPRESSLY DISCLAIMED. - ANY USE OF THIS SPECIFICATION SHALL BE MADE ENTIRELY AT THE - IMPLEMENTER'S OWN RISK, AND NEITHER THE CONSORTIUM, NOR ANY OF ITS - MEMBERS OR SUBMITTERS, SHALL HAVE ANY LIABILITY WHATSOEVER TO ANY - IMPLEMENTER OR THIRD PARTY FOR ANY DAMAGES OF ANY NATURE WHATSOEVER, - DIRECTLY OR INDIRECTLY, ARISING FROM THE USE OF THIS SPECIFICATION. -
-- Public contributions, comments and questions can be posted here: - - http://www.imsglobal.org/forums/ims-glc-public-forums-and-resources - . -
-- © 2022 IMS Global Learning Consortium, Inc. All - Rights Reserved. -
-- Trademark information: - http://www.imsglobal.org/copyright.html - -
-This is a proposal to recharter the Open Badges Workgroup to develop a new version of the IMS Global Open Badges Specification to align it to the conventions of the W3C Verifiable Credentials Data Model for the use cases of Defined Achievement Claim and a Skill Claim. The credentials that would be produced under this proposal could easily be bundled into Comprehensive Learner Records and Verifiable Presentations. Portability and learner data privacy may be improved by expanding the usage of cryptographic proofs/signatures, because this format will be compatible with a growing array of proof schemas that are developed for the Verifiable Credentials Data Model.
The target readers for this document are:
The Open Badges Specification has several related documents and artifacts shown below. Together they make up the specification.
-The Open API Specification (OAS) defines a standard, programming language-agnostic interface description for HTTP APIs, which allows both humans and computers to discover and understand the capabilities of a service without requiring access to source code, additional documentation, or inspection of network traffic. When properly defined via OpenAPI, a consumer can understand and interact with the remote service with a minimal amount of implementation logic. Similar to what interface descriptions have done for lower-level programming, the OpenAPI Specification removes guesswork in calling a service.
- -
This standard has OpenAPI 3.0 files for the Badge Connect API in both JSON and YAML format:
-When two people communicate with one another, the conversation takes place in a shared environment, typically called "the context of the conversation". This shared context allows the individuals to use shortcut terms, like the first name of a mutual friend, to communicate more quickly but without losing accuracy. A context in JSON-LD works in the same way. It allows two applications to use shortcut terms to communicate with one another more efficiently, but without losing accuracy.
-Simply speaking, a context is used to map terms to IRIs. Terms are case sensitive and any valid string that is not a reserved JSON-LD keyword can be used as a term.
--- JSON-LD 1.1
-
This specification includes this JSON-LD Context file:
This specification includes JSON Schema files for every class in the data model and every payload in the API.
- As well as sections marked as non-normative, all authoring guidelines, - diagrams, examples, and notes in this specification are non-normative. - Everything else in this specification is normative. -
- The key words MAY, MUST, MUST NOT, NOT RECOMMENDED, NOT REQUIRED, OPTIONAL, RECOMMENDED, REQUIRED, SHALL, SHALL NOT, SHOULD, and SHOULD NOT in this document - are to be interpreted as described in - [RFC2119]. -
- An implementation of this specification that fails to implement a - MUST/REQUIRED/SHALL requirement or fails to abide by a MUST NOT/SHALL NOT - prohibition is considered nonconformant. SHOULD/SHOULD NOT/RECOMMENDED - statements constitute a best practice. Ignoring a best practice does not - violate conformance but a decision to disregard such guidance should be - carefully considered. MAY/OPTIONAL statements indicate that implementers - are entirely free to choose whether or not to implement the option. -
- The Conformance and Certification Guide - for this specification may introduce greater normative constraints than - those defined here for specific service or implementation categories. -
Achievement Type: A vocabulary which describes the type of achievement.
-Alignment: An alignment is a reference to an achievement definition, whether referenced in a resource outside the package or contained within the package.
-Claim: A statement about the Credential Subject. A claim may include associated evidence, results, or other metadata regarding a specific achievement, skill or assertion.
-client: In a REST API, the client is the actor that initiates the DELETE, GET, or POST request. Also called a Consumer in the IMS Global Security Framework v1.1.
-Comprehensive Learner Record (CLR): Set of assertions that can be packaged as a verifiable credential.
-Credential Subject: Describes the claims being made by the Verifiable Credential. In the context of Open Badges and CLR is typically an individual but in the case of Open Badges, may be another entity type such as a course, book, or organization. Learners, Organizations and other entities can be explicit subclasses of Credential Subjects for purposes of business rules. [vc-data-model]
-Decentralized Identifiers: A type of identifier for people, organizations and any other entity, where each identifier is controlled independently of centralized registries. [did-core] [did-use-cases]
-Digital Credential Achievement (DC Achievement): This is the content description of a credential that an assertion references. It contains metadata such as the name of the achievement, description, alignment of skills, etc. An Open Badge asserts a single achievement. A CLR asserts a collection of assertions, each of which asserts a single achievement.
-Digital Credential Assertion (DC Assertion): The core of both Open Badges and CLR is the assertion about achievement(s). DC Assertion properties are specific to one learner's achievement and specify metadata such as issuer, date of achievement, expiration data, as well as results and evidence that support the assertion. A Verifiable Credential more broadly asserts a claim about a Credential Subject which can be applied to education and occupational achievements.
-Evidence: Information supporting a claim such as a URL to an artifact produced by the Learner.
-Issuer: The organization or entity that has made an assertion about a Credential Subject. The issuer of a DC Assertion is the authoritative source for that specific assertion.
-Learner: The person who is the subject of the CLR and assertions contained in a CLR.
-Badge: A single assertion of an achievement that is packaged as a verifiable credential.
-Organization: An organized group of one or more people with a particular purpose. [CEDS]
-Person: A human being, alive or deceased, as recognized by each jurisdiction’s legal definitions. [CEDS]
-Publisher: The organization or entity issuing the CLR (typically the educational institution or a 3rd-party agent). The publisher is either the issuer or has a trusted relationship with the issuer of all the assertions in the CLR.
-Relying Third-Party: Also referred to as the "verifier" of a VC. This entity requests, verifies, and may consume data being presented.
-REST API: A style of web API (Application Programming Interface) loosely based on HTTP methods (DELETE, GET, POST, and PUT) to access resources (e.g. CLRs) via a URL.
-Result: Describes a possible achievement result. A result may contain the rubric level that was achieved.
-Result Description: Describes a possible achievement result. A result description may contain a rubric.
-Rich Skill Descriptor (RSD): A machine readable reference to a description of a skill located at a unique URL. [RSD]
-Role: People have roles in organizations for specific periods of time. Roles are a time aware association between a person and an organization. [CEDS]
-Rubric: Defines levels associated with the achievement definition (e.g. "approaches", "meets", and "exceeds").
-server: In a REST API, the server is the actor that responds to a DELETE, GET, or POST request. Also called a Platform in the IMS Global Security Framework v1.1.
-Skill Assertion: An assertion that contains a "skill result."
-Verifiable Credential (VC): A tamper-evident credential whose issuer can be cryptographically verified. See [vc-data-model].
-Verifiable Presentation (VP): A tamper-evident presentation of one or more Verifiable Credentials of which cryptographic verification can be used to determine the trustworthiness of the authorship of the data. [vc-data-model]
-This conceptual model describes Open Badges concepts and the relationship between those concepts. The data model in appendix § B.2 org.1edtech.ob.v3p0.model below is the normative reference for the classes and properties that are used to implement the concepts.
The conceptual model is targeted for all § 1.1 Audiences, while the data model is targeted for Solution Architects and Product Developers.
In the diagram below, the concepts are shown in gray boxes (e.g. Assertion). Please see § 1.4 Terminology for definitions of the concepts.
Starting with this version of the Open Badges Specification, an Assertion is also a Verifiable Credential (VC) as defined by the Verifiable Credentials Data Model v1.1 specification. The diagram includes labels that show the relationships between VC terminology and Open Badges terminology (e.g. Issuer is identified by the VC "issuer").
- This section is non-normative.
Verifiable Credentials (VCs) are a format that is used to publish a limitless variety of claims about a subject person or other entity, typically through a cryptographic proof. VCs can be collected and delivered as part of a presentation whereby authorship of each VC from the same or multiple issuers can be trusted via cryptographic verification. The presentation can also be cryptographically signed to demonstrate that the holder has assembled and sent the collection of VCs.
These layers of cryptographic proof can provide security and privacy enhancements to Open Badges that are not yet available in version 2.0. Adoption of Verifiable Credentials can increase market penetration and use of Open Badges by addressing market needs for trustworthy machine-ready data to power connected ecosystems in education and workforce. This can unlock the door for Open Badges credentials to be included in a growing number of multi-purpose digital credential wallets entering the market. Stepping further into signed VCs and another associated technology, decentralized identifiers (DIDs), unlocks increased longevity and resilience of Open Badges that can describe achievements even more expressively than they do today.
This proposal is for a reasonable change to the structure of the Open Badges Assertion class, to adopt the conventions of the Verifiable Credential Data Model. This means that badges issued under the proposed version would not be conformant to all of the existing 2.x data model requirements.
An existing Open Badges Assertion, illustrated in the graphic below, structures its objects like this: -An Assertion identifies a recipient with a "recipient" relationship to an IdentityObject that contains identifying properties. It identifies which badge it represents with a "badge" relationship to a BadgeClass. It identifies its verification information with a "verification" relationship to a VerificationObject. It identifies its issuer with an "issuer" relationship between the BadgeClass and the Issuer.
- The proposed Verifiable Credentials structure depicted below offers the same information with a slightly different structure: A Verifiable Credential identifies its recipient with a "credentialSubject" relationship to a subject class that is identified by an identifier. It identifies its issuer with an "issuer" relationship directly to an Issuer. The Credential claims the subject has met the criteria of a specific BadgeClass (also known by its CLR alias as an "Achievement") with a "hasCredential" relationship to that defined achievement. It identifies its verification information with a "proof" relationship to an instance of a proof that follows a standardized schema.
- It can be risky to make breaking changes to a specification used as broadly as Open Badges, but there are a range of benefits to making this move now while the Verifiable Credentials ecosystem is young and growing fast. There are strong use cases for digital credentials for learning and skill achievements across the nexus of education and employment, as we have seen from the broad adoption of Open Badges and the proliferation of industry groups making connections between educational institutions and the employment market around digital credentials. Technical compatibility is in a more favorable position when faced with rapid ecosystem growth than competition between large communities issuing these learning credentials and other communities focused on different market verticals from government identity documents, commercial payments, and international trade, to name a few.
This proposal opens a path forward for a unified concept of digital credentials in the IMS Global community, collapsing the relevant differences between Open Badges and CLR, and addressing a clear set of single achievement use cases with a robust, flexible, and future-proof solution that can easily be integrated with the set-of-multiple credentials use cases familiar to Comprehensive Learner Record.
Below, we present a selection of benefits related to the proposed restructuring of Open Badges, and compare the opportunities opened by becoming compatible with Verifiable Credentials to the limitations that the Open Badges community has encountered with today's version of Open Badges and CLR.
Open Badges as VCs are designed to be issued and offered to learners who may accept them into their digital wallet. Wallets are software that runs on either the web or as a native app on a mobile device or desktop environment. A web wallet is another term to describe the application role known under 2.0 as a "Host". There is an existing and growing ecosystem of deployed technology to support VCs; integration with these becomes possible if Open Badges adopts VCs along the lines of this proposal. For example, a number of generic Verifiable Credential wallet implementations are available from a variety of vendors as native mobile apps. From a wallet, recipients may package their badges along with their other VCs into verifiable presentations. A presentation contains the credentials that the learner wishes to share with a relying party. The digital wallet application digitally signs the presentation using the key of the learner. The verifying third-parties can cryptographically verify that the presentation came unmodified directly from the credential holder as well as the integrity of each of the VCs included in the presentation as credentials signed by each of their respective issuers.
It is possible from a wallet to package credentials into a verifiable presentation in response to a request from a relying party who seeks credentials for a certain purpose. For example, a potential employer seeking to fill an internship role, may need to verify that a student is over 18, has completed a course on communication, and is a current student. A student could use their wallet to package three VCs (driver's license, course completion badge, and student ID) into a presentation that is signed by their private key. When the presentation is sent to the employer's website, the employer can verify that the VCs belong to the student and that the VCs are authentic. Protocols and interoperability around making and fulfilling requests are still at an early stage, but when these technologies are tested in the wild, it would be a good idea to already have educational credentials claim schemas available for the claim types ("defined achievement" and "skill assertion") possible to make with Open Badges.
The growing collection of VC wallets is an example of how adopting a Verifiable Credentials-based approach allows Open Badges to grow in impact and take advantage of existing momentum in the digital credentials space around tooling that is entering the market and heading towards maturity.
The W3C Verifiable Credentials Data Model specification describes how technologies can be used to present cryptographically verifiable and tamper-evident claims. Verifiable Credentials (VCs) can be verified through up-to-date and broadly interoperable schemas for verification. This can provide security and privacy enhancements to IMS Global Open Badges that are not available in Open Badges 2.0.
Currently, Open Badges 2.0 data can be verified via either (a) publicly accessible hosted JSON badge data or (b) JWS digitally signed badges with a limited number of algorithms and key types, depending on the verification method chosen by the issuer. In order to keep up with evolving cryptographic standards without taking on the burden of writing cryptographic suites as a community not specializing in that function, adopting Verifiable Credentials proofs allows experts to update algorithms to keep up with improvements to cryptography-breaking processing power.
Publicly hosted badge data has been the preferred method of many Open Badges issuers. This method can risk the privacy of badge recipients who are reliant on the issuers to host their data leaving them with no direct control over its accessibility. There is also the potential that data about individuals is publicly accessible without their knowledge. Most Open Badges don't contain significant amounts of personally identifiable information, but they are subject to correlation. This could lead to on-site identification, email spam, and also cause badges to be correlatable with other personally identifying data on the web.
Hosted badge data is also not tamper-evident since it is hosted on web servers typically as dynamically-generated JSON files populated by queries made to relational databases or static JSON files. This makes the data easy to change without any historic reference or preservation. This can be convenient for issuers but not assuring for relying third-parties seeking to put the data to use. Changes to badge metadata such as criteria, the issuedOn date, and recipient email can reduce the perceived quality of data and reflect incorrect information about the learners' experiences. Digitally signed 2.0 badges provide more assurances and privacy than the hosted badges but are not commonly issued and are not interoperable with VC wallets.
There's been very little evidence that badge JSON data has been readily consumed by machines, but technologies and the education and workforce markets have evolved since Open Badges 2.0 was released 4 years ago. Machine learning and AI uses have expanded alongside blockchain and other decentralized technologies creating opportunity for connecting learners to opportunities, more accurate skills-based hiring, and updated curricula more equitably reflecting the needs of students. The market is demanding that the achievement data be trustworthy. This means that it should be accessible, protected, have integrity, and communicate what was intended including that the issuer and subjects of the data can be authenticated and that the data has not been tampered with since it was issued. Shifting Open Badges to align with the VC conventions to verify learner achievements meets these expectations and provides learners with more agency over their achievement data by giving them immediate access to it for as long as they need it, allowing them to choose which data they share, protecting it, and making it work with other credentials in and outside of education and workforce.
With Open Badges up to 2.0, email addresses have been used as identifiers far more commonly than the other available options. This has been problematic because email addresses may be used by more than one person, are often revoked when an individual leaves a job or school, are insecure, and aren't intended to be identifiers. Identifiers in VCs commonly are HTTP-based URLs, follow another scheme of IRI, or take the form of a Decentralized Identifier.
Decentralized identifiers (DIDs) are a type of identifier for people, organizations and any other entity, where each identifier is controlled independently of centralized registries. Each DID can be resolved through an operation described by its particular "DID Method" to reveal a DID document that describes the subject. Whereas previous versions of Open Badges required HTTP(s) identifiers for issuers and typically used email (or rarely URL) identifiers for learners, adoption of the Verifiable Credentials Data Model provides simple conventions for badge issuers and recipients to begin to use DIDs when they desire.
Verification of control of identifiers is an important concept within any type of digital credential, both with respect to the issuer and the subject (recipient) of the credential. For issuers, Open Badges has relied on its own bespoke rules for determining whether a hosted Assertion URL or cryptographic key URL is associated with an issuer profile identified by a particular URL. URLs used for recipient identifiers have no built-in mechanism for authentication. Email and telephone number based recipient identifier authentication are up to the relying party, but there are common methods for performing this task essential to establishing trusted proof of control of credentials presented by a subject.
DIDs typically offer cryptographic proof of control, based on authorized keys or other verification methods expressed in the associated DID Document. While these protocols are not broadly implemented across domains today, the structure provides a forward-looking flexible and extensible mechanism to build the types of protocols needed to connect credentials back to the identities of their issuers and subjects. The Open Badges community may ultimately recommend use of only a small number of these capabilities in early releases or recommend them only for experimental use, like with cryptographic proof methods. But this is still an important step, because there is no reason for the Open Badges community to be closed to interoperability through the protocols being developed for use by the wallets and services coming into being elsewhere by delaying the option to use DIDs for recipient and issuer identifiers.
As described below, it is possible for Open Badges and CLR to produce coordinated specs particularly if both specs are aligned with Verifiable Credentials. Discussion of the components of individual achievements can occur within the Open Badges workgroup, and discussion of more complex use cases necessitating needs for bundling and association of multiple achievements on behalf of a publisher can occur within the CLR group. The cross-pollination of members of each effort will create opportunities to coordinate and ensure that all important use cases for single assertions and bundles of associated assertions are well-handled. The openness of the Open Badges Specification can be preserved so that the broader community can continue to be aware of and connected to the official developments.
At the core, Open Badges and CLR have similar objectives with the primary difference being single vs a collection of credentials. A common assertion model ensures that Open Badges can be included in CLR collections and that both CLRs and Open Badges can be held separately by learners in their Verifiable Credential wallets.
Both Open Badges and CLR make assertions about achievements and conceptually share many similar properties. With some judicious analysis and renaming of some properties, it is possible to have cross-alignment of achievement properties served by Open Badges and used by CLR. Examples include but are not limited to achievementType which describes the type of achievement being represented, and Result/ResultDescription which can describe possible levels of mastery associated to specific achievements. This will enrich Open Badges data and increase the perceived significance and usage of Open Badges to deliver verifiable single achievements such as certifications, licenses, courses, etc. Using a common model across Open Badges and CLR specifications for the core ideas of assertion and achievement will enable the CLR specification to focus on the more complex requirements of bundling collected assertions and expressing the associations between the achievements.
In Open Badges and CLR, the issuer is assumed to be the creator. Over the years, the Open Badges community has requested capabilities to distinguish between the issuer and creator of a badge. This is because there are plenty of examples where the assessor is the issuer but not the creator of the badge. The Original Creator Extensions is a step in this direction but provides no properties to describe the eligibility of issuers trusted by the original creator to duplicate and issue their own assertions of the badge.
In order to open up a wide swath of use cases for shared issuing responsibility of common credentials, we must do more. Conveniently, an issuer property for the entity that is digitally signing the credential is included in the VC assertion. Because of this, the issuer property referenced in the BadgeClass is redundant. This property is a logical placement for new properties to describe a creator(s) and the eligibility of potential outside issuers to share or have delegated responsibility for badge issuance. This will enable the use cases and give relying third-parties more contextual information about the achievement and the parties involved.
Many of the use cases for Open Badges and CLR involve describing "defined achievements" with the Achievement/BadgeClass data class. These achievements may sometimes be aligned to skills or competencies, as a means of indicating that those who earn them have achieved the aligned skills. As part of this proposal, we also introduce the concept of a Skill Assertion, showing how the Open Badges Specification can be expanded to assert achievement of single skills in a more flexible manner that is complementary to these use cases and that opens up a wide range of new use cases. A Skill Assertion offers a lightweight structure for issuers to make a claim that a learner has a skill, with a particular assessment result if desired.
A Skill Assertion is an Open Badges assertion that contains a "skill result." The idea of a skill result fits perfectly with the concept from CLR of a Result that is paired against the ResultDescription defined in an Achievement/BadgeClass, but a skill result targets a skill that may have been defined by a third-party organization, such as an industry group. This is a separate claim that may be composed alongside a "hasCredential" claim that identifies which Achievement/BadgeClass criteria has been met, or it could appear in an Open Badges Verifiable Credential without the defined achievement claim. This means that an issuer could easily make an assertion that a learner has achieved the criteria of a certain badge, or that they have achieved a specific skill, or both (whether or not the skill is specifically identified in the alignments of the badge).
The following diagram shows how these concepts are connected for a use case in which an issuer asserts that a credential subject has achieved a particular skill, using a "results" claim to establish a relationship with a Result class that identifies which skill is recognized and may describe other aspects of the skill achievement, such as the level at which it was assessed and a degree of confidence. Specific use cases for how this data needs to be consumed will drive the specific skill-specific properties of the Result class that may be added to give issuers the options they need. In this example, a Skill Definition that is identified by a unique URL at which information about the skill is published is referenced by the Result. This pattern, named by the Open Skills Network as a Rich Skill Descriptor (RSD), makes it possible for skills to be precisely referenced in other entities, such as credentials. Here, the RSD was published by an industry organization, and included in this credential by a different issuer. There is no need for the skill author and the credential issuer to have a pre-existing or discoverable relationship in order for a Skill Assertion to be valid. Evidence may also be included, just like in any Assertion.
- The notion of skill results can be combined with a defined achievement assertion claim "hasCredential". In this example, the same Skill Assertion appears, but additional criteria that the learner has met is described in the Achievement/BadgeClass as in many of our other examples. The Achievement aligns to the same skill that is recognized, but the Result allows the issuer to describe specifics about the assessment results relative to the skill.
- The inclusion of Skill Assertion claims makes a natural, ergonomic fit with defined achievement claims and evidence claims. Business logic to process each of the available claims can look for just the data a relying party needs, and extraneous claims do not get in the way.
This section is non-normative.
The use cases below drive the design of Open Badges 3.0 specification.
Gigantic State University is a badge issuer. It has awarded a badge to a student in the form of a verifiable credential. Some time after issuing the credential, GSU discovers academic misconduct on the part of the student and needs to revoke the credential's status. GSU updates a list of revoked credential IDs, noting the reason why it was revoked. Future verifications of the issued badge by consumers detect that the credential is now revoked and do not erroneously accept it.
Goal of the Primary Actor: Revoke a credential they have already awarded.
Actors: Credential issuer, Credential Subject, Consumer/Verifier
Preconditions for this Use Case:
Flow of Events:
Post-Conditions/Success Criteria:
Points of Failure:
Maya has completed an online course for an "Introduction to Web QA" at her local community college. The community college issues a course completion assertion. When Maya is ready to accept the assertion, she presents her wallet's location to the community college, which generates a request that Maya approves to receive the credential. Maya stores the assertion in her Verifiable Credentials enabled digital wallet with her other credentials.
Goal of the Primary Actor: Issue a verifiable credential to a student that she can use to take the next steps in her education journey.
Actors: Community college, Maya (student)
Preconditions for this Use Case:
Flow of Events:
Post-Conditions/Success Criteria:
Points of Failure:
A professional development/training vendor Training, Inc. recognizes Dawson's mastery of a competency by issuing an assertion to Dawson's email address.
Goal of the Primary Actor: Training, Inc. wishes to provide a verifiable record that Dawson may use to present proof of competency-based professional development.
Actors: Training, Inc (professional development/training vendor), Dawson (student)
Preconditions for this Use Case:
Flow of Events:
Post-Conditions/Success Criteria:
Points of Failure:
Kalamazoo Elementary School holds a schoolwide spelling bee and recognizes the achievement of a minor student, Maddie, for winning third place in said spelling bee. Kalamazoo delivers the assertion to Maddie's guardian, Cole, to maintain the assertion until such a time that Maddie can take control of that assertion.
Goal of the Primary Actor: Kalamazoo K-12 wishes to award an assertion that Maddie may eventually use, with the understanding that she may not be able to control a wallet on her own behalf today.
Actors: Kalamazoo K-12 district (issuer), Maddie (student), Cole (guardian)
Preconditions for this Use Case:
Flow of Events:
Post-Conditions/Success Criteria:
Points of Failure:
Jade takes a Standard First Aid course offered by a Red Cross authorized training company, ABC Corp., and receives a printed certificate including their name and certificate number to show that they are certified for SFA + CPR valid for 3 years. The certificate also includes a QR code that is a representation of an OB 3.0 assertion embedded with Jade's name, certificate number, and expiry date. Jade's employer then scans the QR code and verifies that Jade is now qualified to be a first aid attendant in the office (which gives Jade a $2/hr raise).
Goal of the Primary Actor: To be able to show that they hold current certification for SFA from the Red Cross which qualifies them to be a workplace first aid attendant and gives them a raise for the extra job role.
Actors: Organisation that does Red Cross training, course participant, participant's employer
Preconditions for this Use Case:
Flow of Events:
Post-Conditions/Success Criteria:
Points of Failure:
Maya registers for an advanced course and she is asked to provide proof that she completed a prerequisite course. From her wallet, Maya presents the course assertion as a verifiable presentation to the MOOC, which cryptographically verifies the issuer of the assertion, that Maya is the recipient, and that the assertion data has not been altered since it was issued. Upon verification, she is registered for the MOOC.
Goal of the Primary Actor: Register for advanced "Web QA" course
Actors: Maya, MOOC
Preconditions for this Use Case:
Flow of Events:
Post-Conditions/Success Criteria:
Points of Failure:
After Jeremy takes his electrician licensure exam, he accesses the online system for his state's licensure department to see his results and download his license. After he proves his identity by presenting his government issued ID from his digital wallet, he is informed that he passed the exam. The electrician license badge is issued to the DID Jeremy provided and is stored in his digital wallet with his other digital credentials.
Goal of the Primary Actor:
Actors:
Preconditions for this Use Case:
Flow of Events:
Post-Conditions/Success Criteria:
Points of Failure:
Syd is shifting careers after many years working in construction. In their digital wallet they had several skill badges describing their mastery of skills in construction but also in teamwork, communication, and organizational skills. Syd also had badges from some courses they'd taken in science and math over the last few years. After they uploaded the skill and course badges from their wallet to a career planning site, they were offered several opportunities to apply for work in software sales and cybersecurity.
Goal of the Primary Actor:
Actors:
Preconditions for this Use Case:
Flow of Events:
Post-Conditions/Success Criteria:
Points of Failure:
Denise was offered a new job at a hospital as a physician's assistant. Before starting, her continuing education training and license to practice needed to be verified. The last time she switched hospitals, the verification process took three weeks. This time, she was able to provide her badges to prove her training and license. Within minutes her credentials were verified and she was issued a new digital staff credential.
Goal of the Primary Actor:
Actors:
Preconditions for this Use Case:
Flow of Events:
Post-Conditions/Success Criteria:
Points of Failure:
Stacy has created a mobile app that demonstrates her abilities as a coder, designer, and product manager. She creates an account on a badging platform and designs the badge to include alignments to the skills that the badge recognizes. With her digital wallet app, she connects to the badging platform and issues this badge to herself which includes screenshots and a link to the mobile app as evidence. Stacy uses this badge and others like it as verifiable portfolio items.
Goal of the Primary Actor:
Actors:
Preconditions for this Use Case:
Flow of Events:
Post-Conditions/Success Criteria:
Points of Failure:
Ralph has been issued a verifiable credential badge for his most recent position at the hospital where he works by the hospital. The badge contains alignments to the skills related to his role. He requests that his peers endorse the skills he has acquired. A platform is able to communicate this request to peers, facilitate review of the skills, and process the issuance of endorsement VC badges that reference the original badge, colleagues as endorsers, and Ralph as the recipient.
Goal of the Primary Actor:
Actors:
Preconditions for this Use Case:
Flow of Events:
Post-Conditions/Success Criteria:
Points of Failure:
From her school's LMS, Dr. Cara chooses which skills and competencies will be taught in her class. These skills and competencies are aligned with the rubric in the syllabus that is presented to her students. Once the students have successfully completed the course, Dr. Cara assesses each student's assignments and participation and selects which skills and competencies were met and at what level. The selection of skills and competencies triggers an issuing of a skill assertion for each one and includes the assessment results in the evidence and results. The skill assertions are associated with the student's IDs, the students are notified and informed how they can use these skill assessments to inform their choice of classes in the future.
Goal of the Primary Actor:
Actors:
Preconditions for this Use Case:
Flow of Events:
Post-Conditions/Success Criteria:
Points of Failure:
Leo earned several badges while in highschool and graduates soon. The email address used as the recipient identity for these badges was an email address provided by his high school and he will no longer have access to it. Leo downloads a digital wallet and requests that the school reissue the badges to the identifier he created in the wallet.
Goal of the Primary Actor:
Actors:
Preconditions for this Use Case:
Flow of Events:
Post-Conditions/Success Criteria:
Points of Failure:
An institution has issued hundreds of badges in the form of VCs. A situation has arisen that requires the badge class to be effectively deleted or purged from the ecosystem. It is impractical (and arguably inaccurate) to revoke each assertion with individual records in perpetuity. The institution would like to set a status such that the badge class itself is treated as invalid.
Goal of the Primary Actor:
Actors:
Preconditions for this Use Case:
Flow of Events:
Post-Conditions/Success Criteria:
Points of Failure:
This section is non-normative.
If you are new to Open Badges, please start here.
If you are migrating from Open Badges 2.0 [OB-20] or 2.1 [OB-21] to OB 3.0, please start here.
Open Badges can be exchanged as JSON-LD documents as defined in this section, or by using the Open Badges API. Open Badges documents can be exchanged as a file or web resource, displayed as a QR code, or embedded in an image. The contents of an Open Badge document MUST meet the following criteria:
{
- "@context": [
- "https://www.w3.org/2018/credentials/v1",
- "https://imsglobal.github.io/openbadges-specification/context.json"
- ],
- "id": "http://example.edu/credentials/3732",
- "type": ["VerifiableCredential", "AssertionCredential"],
- "issuer": {
- "id": "https://example.edu/issuers/565049",
- "type": "Profile",
- "name": "Example University"
- },
- "issuanceDate": "2010-01-01T00:00:00Z",
- "credentialSubject": {
- "id": "did:example:ebfeb1f712ebc6f1c276e12ec21"
- },
- "credentialSchema": [{
- "id": "https://imsum2.herokuapp.com/jsonschema?classId=org.1edtech.ob.v3p0.assertioncredential.class",
- "type": "JsonSchemaValidator2020"
- }]
-}
- When the id of an Assertion is a URL, a GET request to that URL MUST return JSON representing an AssertionCredential as described above.
Content-Type SHOULD be application/json or application/ld+json.Some Assertions are quite long. Due to the large size of the resulting JSON string, the string MUST be compressed prior to rendering the QR Code. To ensure interoperability, the string MUST be compressed using Concise Binary Object Representation (CBOR) [RFC8949].
- Can an ObPresentation be baked into an image? What are the implications? -
-Assertions may be exchanged as image files with assertions encoded within. This allows assertions to be portable wherever image files may be stored or displayed.
"Baking" is the process of taking an AssertionCredential and embedding it into the image, so that when a user displays the image on a page, software that is Open Badges or CLR-aware can automatically extract that Assertion data and perform the checks necessary to see if a person legitimately earned the achievement within the image. The image must be in either PNG or SVG format in order to support baking.
An iTXt chunk should be inserted into the PNG with keyword openbadges. The text MUST be the JSON for the #org.1edtech.ob.v3p0.assertioncredential.class. Compression MUST NOT be used.
var chunk = new iTXt({
- keyword: 'openbadges',
- compression: 0,
- compressionMethod: 0,
- languageTag: '',
- translatedKeyword: '',
- text: JSON.stringify(assertion)
-})
- An iTXt chunk with the keyword openbadges MUST NOT appear in a PNG more than once. When baking an image that already contains assertion data, the implementor may choose whether to pass the user an error or overwrite the existing chunk.
Parse the PNG datastream until the first iTXt chunk is found with the keyword openbadges. The rest of the stream can be safely discarded. The text portion of the iTXt will be the JSON representation of a #org.1edtech.ob.v3p0.assertioncredential.class.
First, Add an xmlns:openbadges attribute to the <svg> tag with the value "https://purl.imsglobal.org/ob/v3p0". Directly after the <svg> tag, add an <openbadges:assertion> tag.
The JSON representation of the AssertionCredential MUST go into the body of the tag, wrapped in <![CDATA[...]]>.
<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg"
- xmlns:clr="https://purl.imsglobal.org/ob/v3p0"
- viewBox="0 0 512 512">
- <openbadges:assertion>
- <![CDATA[
- {
- "@context": [
- "https://www.w3.org/2018/credentials/v1",
- "https://www.w3.org/2018/credentials/examples/v1"
- ],
- "id": "http://example.edu/credentials/3732",
- "type": ["VerifiableCredential", "OpenBadge"],
- "issuer": {
- "id": "https://example.edu/issuers/565049",
- "type": "IssuerProfile",
- "name": "Example University"
- },
- "issuanceDate": "2010-01-01T00:00:00Z",
- "credentialSubject": {
- "id": "did:example:ebfeb1f712ebc6f1c276e12ec21"
- }
- }
- ]]>
- </openbadges:assertion>
-
- <!-- rest-of-image -->
-</svg>
- There MUST be only one <openbadges:assertion> tag in an SVG. When baking an image that already contains assertion data, the implementor may choose whether to pass the user an error or overwrite the existing tag.
Parse the SVG until you reach the first <openbadges:assertion> tag. The rest of the SVG data can safely be discarded.
- Open Badges can be exchanged using the API (application programming interface) defined here, or as - documents. -
-- This specification defines a RESTful API protocol to be implemented by applications serving in the roles of - Client and Resource Server. The API uses OAuth 2.0 for authentication and granular resource-based permission - scopes. Please see the Open Badges Specification Conformance and Certification Guide v3.0 for a list of which endpoints must be implemented for certification. -
- -- In addition to the documentation in this section, there are OpenAPI files for the - Open Badges API in both JSON and YAML format: -
-- There are five key components to the API architecture. -
-- The role of each component during Registration, Obtaining Tokens, and Authenticating with Tokens are described - below. -
-- All of the API endpoints are protected by OAuth 2.0 access tokens as described in § 7. Open Badges API Security. -
- -- Each endpoint requires an access token with a specific Open Badges scope as shown below. -
-| Operation | -Scope | -
|---|---|
| getAssertions | -
- https://purl.imsglobal.org/spec/ob/v3p0/scope/assertion.readonly -
- Permission to read assertions for the authenticated entity.
- |
-
| postAssertion | -
- https://purl.imsglobal.org/spec/ob/v3p0/scope/assertion.create -
- Permission to create assertions for the authenticated entity.
- |
-
| getProfile | -
- https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.readonly -
- Permission to read the profile for the authenticated entity.
- |
-
| postProfile | -
- https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.update -
- Permission to update the profile for the authenticated entity.
- |
-
All endpoint requests MUST be made over secure TLS 1.2 or 1.3 protocol.
- - -- Fetch Assertions from the resource server for the supplied parameters and access token. -
- -GET {baseUrl}/ims/ob/v3p0/assertions?limit={limit}&offset={offset}&since={since}
| URL Parameter | -Parameter Type | -Description | -Required | -
|---|---|---|---|
baseUrl |
- URL | -The HTTP scheme (which MUST be "https"), domain name, and any other path - elements required by the resource server (e.g. "https://example.com/tenant"). - | -Required | -
limit |
- PositiveInteger | -The maximum number of Assertions to return. | -Optional | -
offset |
- NonNegativeInteger - | -The index of the first Assertion to return. (zero indexed) | -Optional | -
since |
- DateTime | -Only include Assertions issued after this timestamp. | -Optional | -
| Request Header | -Description | -Required | -
|---|---|---|
Authorization: Bearer <access_token> |
- See § 7. Open Badges API Security for information on how to obtain an access_token. |
- Required | -
Accept: application/ld+json |
-
- If the content type application/ld+json is not not included in the Accept
- header, the resource server MUST respond with 406 Not Acceptable.
- |
- Required | -
There is no request payload.
- -GET {tenant}/ims/ob/v3p0/assertions?limit=2&offset=0 HTTP/1.1
-Host: example.com
-Authorization: Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
-Accept: application/ld+json
- | HTTP Status Code | -Payload Type | -Description | -Payload Required | -
|---|---|---|---|
| 200 | -ObPresentation | -'OK' - The assertions are returned in the payload. | -Required | -
| 400 | -Imsx_StatusInfo | -- 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained - in the response payload. - | -Required | -
| 401 | -Imsx_StatusInfo | -'Unauthorized' - The request requires user authentication. | -Required | -
| 403 | -Imsx_StatusInfo | -- 'Forbidden' - The resource server understood the request, but is refusing it or the access - is - not allowed. - | -Required | -
| 404 | -Imsx_StatusInfo | -'Not Found' - There is no CLR behind the URI. | -Required | -
| 406 | -Imsx_StatusInfo | -- 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept - header. - | -Required | -
| 421 | -Imsx_StatusInfo | -- 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. - | -Required | -
| Response Header | -Description | -Required | -
|---|---|---|
Content-Type: application/ld+json |
- The content type MUST be application/ld+json. |
- Required | -
X-Total-Count: <total_count> |
-
- The resource server MUST include an X-Total-Count response header if the total result
- count is known. If the total result count is not known, the total count header MUST be ommitted.
- |
- Conditionally Required for 200 OK Response |
-
Link: <pagination_links> |
-
- The resource server MUST include a
- Link response
- header if the list of assertions in the response is incomplete; and MAY include the Link
- header if the response is complete.
- |
- Conditionally Required for 200 OK Response |
-
- If present, the Link header MUST support all of the following link relations (rel
- values):
-
| Relation | -Description | -
|---|---|
| next | -- The link relation for the immediate next page of results. This MUST appear when the current list - response - is incomplete. - | -
| last | -The link relation for the last page of results. This MUST always appear. | -
| first | -The link relation for the first page of results. This MUST always appear. | -
| prev | -- The link relation for the immediate previous page of results. This MUST appear when the - offset is greater than zero. - | -
HTTP/1.1 200 OK
-Content-Type: application/ld+json
-X-Total-Count: 1
-Link: <https://www.imsglobal.org/ims/ob/v3p0/assertions?limit=2&offset=1>; rel="next",
- <https://www.imsglobal.org/ims/ob/v3p0/assertions?limit=2&offset=0>; rel="last",
- <https://www.imsglobal.org/ims/ob/v3p0/assertions?limit=2&offset=0>; rel="first",
- <https://www.imsglobal.org/ims/ob/v3p0/assertions?limit=2&offset=0>; rel="prev"
-
-{
- "@context": [
- "https://www.w3.org/2018/credentials/v1",
- "https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld"
- ],
- "type": ["VerifiablePresentation", "ObPresentation"],
- "verifiableCredential": [
- {
- "@context": [
- "https://www.w3.org/2018/credentials/v1",
- "https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld"
- ],
- "id": "http://example.edu/credentials/3732",
- "type": ["VerifiableCredential", "AssertionCredential"],
- "issuer": {
- "id": "https://example.edu/issuers/565049",
- "type": "Issuer",
- "name": "Example University"
- },
- "issuanceDate": "2010-01-01T00:00:00Z",
- "credentialSubject": {
- "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
- "achievement": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002",
- }
- }
- ]
-}
- Create or update an Assertion on the resource server.
-
- If the resource server is holding an Assertion with the same id, it will be updated. Otherwise
- the Assertion will be created and held by the resource server. Note that "created" is not the same
- as "issued". The resource server will simply store the Assertion in the request payload as a
- resource.
-
POST {baseUrl}/ims/ob/v3p0/assertions
| URL Parameter | -Parameter Type | -Description | -Required | -
|---|---|---|---|
baseUrl |
- URL | -- The HTTP scheme (which MUST be "https"), the domain name, and any other path elements required - by the resource server (e.g. "https://example.com/tenant"). - | -Required | -
| Request Header | -Description | -Required | -
|---|---|---|
Authorization: Bearer <access_token> |
- See § 7. Open Badges API Security for information on how to obtain an access_token. |
- Required | -
Accept: application/ld+json |
-
- If the content type application/ld+json is not not included in the Accept
- header, the resource server MUST respond with 406 Not Acceptable.
- |
- Required | -
Content-Type: application/ld+json |
-
- If the Content-Type is not application/ld+json, the resource server MUST
- respond with 406 Not Acceptable.
- |
- Required | -
| Request Payload Type | -Description | -Required | -
|---|---|---|
| AssertionCredential | -
- The Assertion to be updated or created on the resource server.
- Issue 4
- Should the payload be a VerifiablePresentation that contains the AssertionCredential?
- |
- Required | -
POST {tenant}/ims/ob/v3p0/assertions HTTP/1.1
-Host: example.com
-Authorization: Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
-Accept: application/ld+json
-Content-Type: application/ld+json
-
-{
- "@context": [
- "https://www.w3.org/2018/credentials/v1",
- "https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld"
- ],
- "id": "http://example.edu/credentials/3732",
- "type": ["VerifiableCredential", "AssertionCredential"],
- "issuer": {
- "id": "https://example.edu/issuers/565049",
- "type": "Publisher",
- "name": "Example University"
- },
- "issuanceDate": "2010-01-01T00:00:00Z",
- "credentialSubject": {
- "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
- "achievement": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
- }
-}
- | HTTP Status Code | -Payload Type | -Description | -Payload Required | -
|---|---|---|---|
| 200 | -AssertionCredential | -- 'OK' - The Assertion was successfully updated. The response payload MUST be the Assertion that - was - posted. - | -Required | -
| 201 | -AssertionCredential | -- 'Created' - The Assertion was successfully created. The response payload MUST be the Assertion - that was posted. - | -Required | -
| 400 | -Imsx_StatusInfo | -- 'Bad Request' - The request was invalid or cannot be served. The exact error should - be explained in the response payload. - | -Required | -
| 401 | -Imsx_StatusInfo | -'Unauthorized' - The request requires user authentication. | -Required | -
| 403 | -Imsx_StatusInfo | -- 'Forbidden' - The resource server understood the request, but is refusing it or the access - is - not allowed. - | -Required | -
| 405 | -Imsx_StatusInfo | -'Method Not Allowed' - The resource server does not support this operation. | -Required | -
| 406 | -Imsx_StatusInfo | -- 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept - header. - | -Required | -
| 421 | -Imsx_StatusInfo | -- 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. - | -Required | -
| Response Header | -Description | -Required | -
|---|---|---|
Content-Type: application/ld+json |
- The content type MUST be application/ld+json. |
- Required | -
{
- "@context": [
- "https://www.w3.org/2018/credentials/v1",
- "https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld"
- ],
- "id": "http://example.edu/credentials/3732",
- "type": ["VerifiableCredential", "AssertionCredential"],
- "issuer": {
- "id": "https://example.edu/issuers/565049",
- "type": "Publisher",
- "name": "Example University"
- },
- "issuanceDate": "2010-01-01T00:00:00Z",
- "credentialSubject": {
- "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
- "achievement": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
- }
-}
- - Fetch the profile from the resource server for the supplied access token. -
- -GET {baseUrl}/ims/ob/v3p0/profile
| URL Parameter | -Parameter Type | -Description | -Required | -
|---|---|---|---|
baseUrl |
- URL | -The HTTP scheme (which MUST be "https"), domain name, and any other path - elements required by the resource server (e.g. "https://example.com/tenant"). - | -Required | -
| Request Header | -Description | -Required | -
|---|---|---|
Authorization: Bearer <access_token> |
- See § 7. Open Badges API Security for information on how to obtain an access_token. |
- Required | -
Accept: application/ld+json |
-
- If the content type application/ld+json is not not included in the Accept
- header, the resource server MUST respond with 406 Not Acceptable.
- |
- Required | -
There is no request payload.
- -GET {tenant}/ims/ob/v3p0/profile HTTP/1.1
-Host: example.com
-Authorization: Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
-Accept: application/ld+json
- | HTTP Status Code | -Payload Type | -Description | -Payload Required | -
|---|---|---|---|
| 200 | -Profile | -'OK' - The matching profile. | -Required | -
| 400 | -Imsx_StatusInfo | -- 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained - in the response payload. - | -Required | -
| 401 | -Imsx_StatusInfo | -'Unauthorized' - The request requires user authentication. | -Required | -
| 403 | -Imsx_StatusInfo | -- 'Forbidden' - The resource server understood the request, but is refusing it or the access - is - not allowed. - | -Required | -
| 404 | -Imsx_StatusInfo | -'Not Found' - There is no matching profile. | -Required | -
| 406 | -Imsx_StatusInfo | -- 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept - header. - | -Required | -
| 421 | -Imsx_StatusInfo | -- 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. - | -Required | -
| Response Header | -Description | -Required | -
|---|---|---|
Content-Type: application/ld+json |
- The content type MUST be application/ld+json. |
- Required | -
HTTP/1.1 200 OK
-Content-Type: application/ld+json
-
-{
- "@context": [
- "https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld"
- ],
- "type": "Profile",
- "id": "https://example.edu/issuers/565049",
- "name": "Example University"
-}
- Update the Profile on the resource server for the authenticated entity.
-- The request SHOULD only include profile identifier properties to be added to the profile, not any existing data. - The values may never become part of the published profile. -
- -POST {baseUrl}/ims/ob/v3p0/profile
| URL Parameter | -Parameter Type | -Description | -Required | -
|---|---|---|---|
baseUrl |
- URL | -- The HTTP scheme (which MUST be "https"), the domain name, and any other path elements required - by the resource server (e.g. "https://example.com/tenant"). - | -Required | -
| Request Header | -Description | -Required | -
|---|---|---|
Authorization: Bearer <access_token> |
- See § 7. Open Badges API Security for information on how to obtain an access_token. |
- Required | -
Accept: application/ld+json |
-
- If the content type application/ld+json is not not included in the Accept
- header, the resource server MUST respond with 406 Not Acceptable.
- |
- Required | -
Content-Type: application/ld+json |
-
- If the Content-Type is not application/ld+json, the resource server MUST
- respond with 406 Not Acceptable.
- |
- Required | -
| Request Payload Type | -Description | -Required | -
|---|---|---|
| Profile | -- The profile to be updated resource server. The profile SHOULD only include properties to be added to - the profile, not any existing data. - | -Required | -
POST {tenant}/ims/ob/v3p0/profile HTTP/1.1
-Host: example.com
-Authorization: Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
-Accept: application/ld+json
-Content-Type: application/ld+json
-
-{
- "@context": [
- "https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld"
- ],
- "telephone": "111-222-3333"
-}
- | HTTP Status Code | -Payload Type | -Description | -Payload Required | -
|---|---|---|---|
| 200 | -Profile | -- 'OK' - The Profile will be updated. The response payload MUST be the same as GET Profile and may - not include the patched values (as the resource server may be waiting for asynchronous processes to - complete before accepting the values). - | -Required | -
| 400 | -Imsx_StatusInfo | -
- 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained
- in the response payload. A resource server MAY respond with 400 Bad Request to reject
- data that is known immediately to not be acceptable by the platform, e.g. to reject a "telephone"
- property
- if the Provider cannot validate telephone numbers.
- |
- Required | -
| 401 | -Imsx_StatusInfo | -'Unauthorized' - The request requires user authentication. | -Required | -
| 403 | -Imsx_StatusInfo | -- 'Forbidden' - The resource server understood the request, but is refusing it or the access - is - not allowed. - | -Required | -
| 405 | -Imsx_StatusInfo | -'Method Not Allowed' - The resource server does not support this operation. | -Required | -
| 406 | -Imsx_StatusInfo | -- 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept - header. - | -Required | -
| 421 | -Imsx_StatusInfo | -- 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. - | -Required | -
| Response Header | -Description | -Required | -
|---|---|---|
Content-Type: application/ld+json |
- The content type MUST be application/ld+json. |
- Required | -
{
- "@context": [
- "https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld"
- ],
- "type": "Profile",
- "id": "https://example.edu/issuers/565049",
- "name": "Example University"
-}
-
- Receivers of requests MAY implement a Retry-After header to indicate a period of time to wait before
- attempting the request again.
-
- If no Retry-After header is present and the response is non-2XX, it is recommended to retry the
- request in 30 minutes for an additional two attempts. After which, it MAY be desirable to alert the recipient that
- there is an issue with the connection (e.g. perhaps they need to reauthenticate or manually trigger the request
- when they believe services are back up).
-
- In scenarios where the learner or another third party is the user that owns the resources (badges), - there will not be a pre-established trust relationship. Therefore you MUST use of OAuth 2.0 Authorization - Code Grant. -
-- The Open Badges API endpoints use the method outlined in Section 4.2, "Using OAuth 2.0 Authorization Code - Grant" of the IMS Global Security Framework v1.1 to secure the API endpoints. This section describes the how Authorization - Code Grant is implemented for the Open Badges API. -
- - - - - -
- The recommended value of the access token's expires_in attribute is 3600 i.e. one hour. This
- means that the validity of the access token expires one hour after the time it was issued.
-
- When requesting an access token as part of the Authorization Code Grant process, an authorization server - MAY return a 'Refresh Token'. The refresh token can be used to obtain an access token using the same - authorization grant: this is described in Section 6 of [RFC6749]. The use of the Refresh Token avoids the - choreography for obtaining the credentials to gain access to the authorization server. -
-- An Authorization Server is NOT REQUIRED to support token refresh. -
- -
- If the access_token is expired or about to expire, and the client application received
- a refresh_token, the client application can use OAuth 2.0 Token Refresh to get a new
- access_token and refresh_token.
-
- The client makes a refresh POST request to the token endpoint by adding the following parameters - using the "application/x-www-form-urlencoded" format in the HTTP request entity-body: -
-| Parameter Name | -Type | -Description | -Required | -
|---|---|---|---|
grant_type |
- String | -Value MUST be set to "refresh_token". | -Required | -
refresh_token |
- String | -The refresh token issued to the client. | -Required | -
scope |
- String | -- The scope of the access request. The requested scope MUST NOT include any scope not - originally granted by the user, and if omitted is treated as equal to the scope - originally granted by the user. - | -Required | -
POST /token HTTP/1.1
-Host: auth.example.com
-Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
-Content-Type: application/x-www-form-urlencoded
-
-grant_type=refresh_token
- &refresh_token=tGzv3JOkF0XG5Qx2TlKWIA
- &scope=https%3A%2F%2Fpurl.imsglobal.org%2Fspec%2Fob%2Fv3p0%2Fscope%2assertion.readonly
- - If valid and authorized, the authorization server issues a new access token and optionally a new - refresh token as described earlier in § Access Token Response. If the request failed verification or - is invalid, the authorization server returns an error response as described earlier in - § Access Token Error Response. -
-- There may be deployments in which revocation of an access token is useful. The Token Revocation process is - based upon [RFC7009]. The client requests the revocation of a particular token by making an HTTP POST - request (using TLS) to the token revocation endpoint URL. Note that [RFC7009] states that implementations - MUST support the revocation of refresh tokens and SHOULD support the revocation of access tokens. -
- -- The client constructs the request by including the following parameters using the - "application/x-www-form-urlencoded" format in the HTTP request entity-body: -
-| Parameter Name | -Type | -Description | -Required | -
|---|---|---|---|
token |
- String | -The token that the client wants to get revoked. | -Required | -
token_type_hint |
- String | -MUST be set to either "access_token" or "refresh_token". | -Required | -
POST /revoke HTTP/1.1
-Host: auth.example.com
-Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
-Content-Type: application/x-www-form-urlencoded
-
-token=45ghiukldjahdnhzdauz&token_type_hint=refresh_token
-
- The authorization server responds with HTTP 200 OK status code if the token has been
- revoked successfully or if the client submitted an invalid token.
-
- When the request for revocation is rejected, the authorization server returns an error response as
- described earlier in § Access Token Error Response with an error code of "unsupported_token_type".
-
This section describes mechanisms for ensuring the authenticity and integrity of AssertionCredential documents and payloads. For general information about data integrity, please see Data Integrity 1.0.
A data integrity proof is comprised of information about the proof, parameters required to verify it, and the proof value itself. Please see the Proof class for details.
To ensure interoperability, this specification requires conforming implementations support ...
This section is non-normative.
Some of the terms used in this section:
This specification supports the use of DID URLs as an identifier for the issuer and subject of a credential, and the holder of a presentation. This specification also supports the use of DID URLs to identify the public key used to verify verifiable credentials and verifiable presentations with Linked Data Proofs. Until the Decentralized Identifiers (DIDs) v1.0 specification is approved by W3C and this specification is updated, conformance will not require DID support.
The data model as described in Appendix § B. Data Model is the canonical structural representation of an Open Badges verifiable credential (AchievementCredential) and verifiable presentation (ObPresentation). All serializations are representations of that data model in a specific format. This section specifies how the data model is realized in JSON-LD and plain JSON.
The data model can be encoded in Javascript Object Notation (JSON) [RFC8259] by mapping property types in the Data Model to JSON types as follows:
When serializing the JSON, these rules MUST be followed:
[JSON-LD] is a JSON-based format used to serialize Linked Data. The syntax is designed to easily integrate into deployed systems already using JSON, and provides a smooth upgrade path from JSON to [JSON-LD]. It is primarily intended to be a way to use Linked Data in Web-based programming environments, to build interoperable Web services, and to store Linked Data in JSON-based storage engines.
Instances of the data model are encoded in [JSON-LD] in the same way they are encoded in JSON (Section § A.1 JSON), with the addition of the @context property. The JSON-LD context is described in detail in the [JSON-LD] specification and its use is elaborated on in Section § C. Extensions.
Multiple contexts MAY be used or combined to express any arbitrary information about verifiable credentials in idiomatic JSON. The JSON-LD context for all verifiable credentials, available at https://www.w3.org/2018/credentials/v1, is a static document that is never updated and can therefore be downloaded and cached client side. The associated vocabulary document for the Verifiable Credentials Data Model is available at https://www.w3.org/2018/credentials. The JSON-LD context for Open Badges verifiable credentials is available at https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld. The associated vocabulary document for the Open Badges Data Model is available at https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.html. Open Badges verifiable credentials MUST be serialized with both JSON-LD contexts.
@context property be present, it is not required that the value of the @context property be processed using JSON-LD. This is to support processing using plain JSON libraries, such as those that might be used when the verifiable credential is encoded as a JWT. All libraries or processors MUST ensure that the order of the values in the @context property is what is expected for the specific application. Libraries or processors that support JSON-LD can process the @context property using full JSON-LD processing as expected.
-"@context": [
- "https://www.w3.org/2018/credentials/v1",
- "https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld"
-]
- - The data models in this section are specific to Open Badges Specification v3.0. -
-- The data models in this section are shared by Open Badges Specification v3.0 and Comprehensive Learner Record Standard v2.0. -
-{
- "@context": [
- "https://www.w3.org/2018/credentials/v1",
- "https://imsglobal.github.io/openbadges-specification/context.json"
- ],
- "id": "http://example.edu/credentials/3732",
- "type": ["VerifiableCredential", "AssertionCredential"],
- "issuer": {
- "id": "https://example.edu/issuers/565049",
- "name": "Example University"
- },
- "issuanceDate": "2010-01-01T00:00:00Z",
- "credentialSubject": {
- "id": "did:example:ebfeb1f712ebc6f1c276e12ec21"
- },
- "credentialSchema": [{
- "id": "https://imsum2.herokuapp.com/jsonschema?classId=org.1edtech.ob.v3p0.assertioncredential.class",
- "type": "JsonSchemaValidator2020"
- }]
-}
- - The data models in this section are shared by all IMS service specifications. -
-- The data models in this section are shared by all IMS service specifications. -
-- The data models in this section are shared by all IMS specifications. -
-- The data models in this section are shared by all IMS specifications. -
-| Status | -Doc Version | -Release Date | -Comments | -
|---|---|---|---|
| Base Document | -1.0 | -Work in progress | -- |
The following individuals contributed to the development of this document:
-| Name | -Organization | -Role | -
|---|---|---|
| Nate Otto | Concentric Sky | Editor |
| Kerri Lemoie | Concentric Sky | Editor |
| Phillip Long | Concentric Sky | Editor |
Referenced in:
-Referenced in:
- -Referenced in:
-Referenced in:
- -Referenced in:
- -Referenced in:
- -Referenced in:
- -Referenced in:
- -Referenced in:
-Referenced in:
-Referenced in:
- -Referenced in:
- -Referenced in:
- -
{
@@ -41,15 +41,17 @@
}
],
"credentialStatus": {
- "id": "https://state.gov/credentials/3732/revocations",
- "type": "1EdTechRevocationList"
+ "id": "https://1edtech.edu/credentials/revocationList#23",
+ "type": "BitstringStatusListEntry",
+ "statusPurpose": "revocation",
+ "statusListIndex": 23,
+ "statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://state.gov/credentials/3732",
"type": "1EdTechCredentialRefresh"
}
}
-
+
`;
diff --git a/ob_v3p0/examples/fullOpenBadge.html b/ob_v3p0/examples/fullOpenBadge.html
index f854f218..81baf452 100644
--- a/ob_v3p0/examples/fullOpenBadge.html
+++ b/ob_v3p0/examples/fullOpenBadge.html
@@ -3,7 +3,7 @@
{
@@ -99,7 +99,8 @@
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
- "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+ "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+ "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
],
"id": "http://1edtech.edu/endorsementcredential/3732",
"type": [
@@ -134,28 +135,30 @@
}
],
"credentialStatus": {
- "id": "https://1edtech.edu/credentials/3732/revocations",
- "type": "1EdTechRevocationList"
+ "id": "https://1edtech.edu/credentials/revocationList#23",
+ "type": "BitstringStatusListEntry",
+ "statusPurpose": "revocation",
+ "statusListIndex": 23,
+ "statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
"type": "1EdTechCredentialRefresh"
},
- "proof": [
- {
- "type": "DataIntegrityProof",
- "cryptosuite": "eddsa-rdf-2022",
- "created": "2022-05-26T18:17:08Z",
- "verificationMethod": "https://accrediter.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
- "proofPurpose": "assertionMethod",
- "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
- }
- ]
+ "proof": [{
+ "type": "DataIntegrityProof",
+ "created": "2010-01-01T19:23:24Z",
+ "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+ "cryptosuite": "eddsa-rdfc-2022",
+ "proofPurpose": "assertionMethod",
+ "proofValue": "z27zr9VnabHMVwHsrqu9j8mSmm6Yp2cJCrMcg4Cownc8h7kw4qwMkxFHdg8h4CVYVK1TGd1vgoPBgFkQodMtjWQ8f"
+ }]
},
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
- "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+ "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+ "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
],
"id": "http://1edtech.edu/endorsementcredential/3733",
"type": [
@@ -190,8 +193,11 @@
}
],
"credentialStatus": {
- "id": "https://state.gov/credentials/3732/revocations",
- "type": "1EdTechRevocationList"
+ "id": "https://1edtech.edu/credentials/revocationList#23",
+ "type": "BitstringStatusListEntry",
+ "statusPurpose": "revocation",
+ "statusListIndex": 23,
+ "statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://state.gov/credentials/3732",
@@ -199,12 +205,12 @@
},
"proof": [
{
- "type": "DataIntegrityProof",
- "cryptosuite": "eddsa-rdf-2022",
- "created": "2022-05-26T18:25:59Z",
- "verificationMethod": "https://accrediter.edu/issuers/565049#z5bDnmSgDczXwZGya6ZjxKaxkdKxzsCMiVSsgEVWxnaWK7ZqbKnzcCd7mUKE9DQaAL2QMXP5AquPeW6W2CWrZ7jNC",
- "proofPurpose": "assertionMethod",
- "proofValue": "z5bDnmSgDczXwZGya6ZjxKaxkdKxzsCMiVSsgEVWxnaWK7ZqbKnzcCd7mUKE9DQaAL2QMXP5AquPeW6W2CWrZ7jNC"
+ "type": "DataIntegrityProof",
+ "created": "2010-01-01T19:23:24Z",
+ "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+ "cryptosuite": "eddsa-rdfc-2022",
+ "proofPurpose": "assertionMethod",
+ "proofValue": "z4TUqPBaJx7Ld3QMxMy25dRU29fAPEwemPEUEZSRDS979nUKtfon7zu6ocgRyRCniXE9heY46NKPzwbFdqmKbUhkG"
}
]
}
@@ -263,7 +269,8 @@
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
- "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+ "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+ "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
],
"id": "http://1edtech.edu/endorsementcredential/3734",
"type": [
@@ -298,8 +305,11 @@
}
],
"credentialStatus": {
- "id": "https://1edtech.edu/credentials/3732/revocations",
- "type": "1EdTechRevocationList"
+ "id": "https://1edtech.edu/credentials/revocationList#23",
+ "type": "BitstringStatusListEntry",
+ "statusPurpose": "revocation",
+ "statusListIndex": 23,
+ "statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
@@ -308,11 +318,11 @@
"proof": [
{
"type": "DataIntegrityProof",
- "cryptosuite": "eddsa-rdf-2022",
- "created": "2022-05-26T18:17:08Z",
- "verificationMethod": "https://accrediter.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
+ "created": "2010-01-01T19:23:24Z",
+ "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+ "cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
- "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
+ "proofValue": "z3R4NfPDo67k5AXBqCLcqsFo9grbWND3zkQYSvBRFwYZ1JjZE5z4FBnpFNrckzSvDHPekBsyy5z8RL4H3J9r5VUGF"
}
]
}
@@ -512,7 +522,8 @@
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
- "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+ "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+ "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
],
"id": "http://1edtech.edu/endorsementcredential/3735",
"type": [
@@ -547,8 +558,11 @@
}
],
"credentialStatus": {
- "id": "https://1edtech.edu/credentials/3732/revocations",
- "type": "1EdTechRevocationList"
+ "id": "https://1edtech.edu/credentials/revocationList#23",
+ "type": "BitstringStatusListEntry",
+ "statusPurpose": "revocation",
+ "statusListIndex": 23,
+ "statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
@@ -557,11 +571,11 @@
"proof": [
{
"type": "DataIntegrityProof",
- "cryptosuite": "eddsa-rdf-2022",
- "created": "2022-05-26T18:17:08Z",
- "verificationMethod": "https://accrediter.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
+ "created": "2010-01-01T19:23:24Z",
+ "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+ "cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
- "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
+ "proofValue": "z3PbutAvPaLRfYRqSex4XcAcpBqj3Vhx5vxpCxtngeTuXoutFUx3yRf7J7yrc1vL8oksMWt7FVAa4ryd9XLpnKdQA"
}
]
}
@@ -602,7 +616,8 @@
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
- "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+ "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+ "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
],
"id": "http://1edtech.edu/endorsementcredential/3736",
"type": [
@@ -637,8 +652,11 @@
}
],
"credentialStatus": {
- "id": "https://1edtech.edu/credentials/3732/revocations",
- "type": "1EdTechRevocationList"
+ "id": "https://1edtech.edu/credentials/revocationList#23",
+ "type": "BitstringStatusListEntry",
+ "statusPurpose": "revocation",
+ "statusListIndex": 23,
+ "statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
@@ -646,12 +664,12 @@
},
"proof": [
{
- "type": "DataIntegrityProof",
- "cryptosuite": "eddsa-rdf-2022",
- "created": "2022-05-26T18:17:08Z",
- "verificationMethod": "https://accrediter.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
- "proofPurpose": "assertionMethod",
- "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
+ "type": "DataIntegrityProof",
+ "created": "2010-01-01T19:23:24Z",
+ "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+ "cryptosuite": "eddsa-rdfc-2022",
+ "proofPurpose": "assertionMethod",
+ "proofValue": "z3KqayPvBkJ196JzwYTgjuxZTYd7XQFSCauLg3Lo2xZKCcQTewydijTwfTouadyf2jBVYqAZg1CWXnug5JZkivUP6"
}
]
}
@@ -709,8 +727,11 @@
}
],
"credentialStatus": {
- "id": "https://1edtech.edu/credentials/3732/revocations",
- "type": "1EdTechRevocationList"
+ "id": "https://1edtech.edu/credentials/revocationList#23",
+ "type": "BitstringStatusListEntry",
+ "statusPurpose": "revocation",
+ "statusListIndex": 23,
+ "statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
diff --git a/ob_v3p0/microsites/spec/ob-v3p0.md b/ob_v3p0/microsites/v3p0.md
similarity index 94%
rename from ob_v3p0/microsites/spec/ob-v3p0.md
rename to ob_v3p0/microsites/v3p0.md
index e3d6f02e..236afeee 100644
--- a/ob_v3p0/microsites/spec/ob-v3p0.md
+++ b/ob_v3p0/microsites/v3p0.md
@@ -4,7 +4,7 @@ category: Specification
title: Open Badges Specification
shortcode: OB-30
status: Final
-lastUpdated: November 6, 2025
+lastUpdated: 2025-11-06
version: '3.0'
nature: normative
docType: specification
@@ -104,123 +104,131 @@ contributors:
role: Editor
ipDisclosures:
- organization: Concentric Sky
- date: October 24, 2019
+ date: 2019-10-24
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Arizona State University
- date: June 21, 2022
+ date: 2022-06-21
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Temple University
- date: June 10, 2022
+ date: 2022-06-10
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Credly
- date: October 3, 2019
+ date: 2019-10-03
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Workday, Inc.
- date: June 10, 2022
+ date: 2022-06-10
claim: false
type: RF RAND (Required & Optional Elements)
- organization: RANDA Solutions
- date: June 9, 2022
+ date: 2022-06-09
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Anthology
- date: April 16, 2024
+ date: 2024-04-16
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Unicon
- date: April 22, 2024
+ date: 2024-04-22
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Bowdoin College
- date: June 11, 2022
+ date: 2022-06-11
claim: false
type: RF RAND (Required & Optional Elements)
- organization: American Association of Collegiate Registrars and Admissions Officers (AACARO)
- date: April 15, 2024
+ date: 2024-04-15
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Desire to Learn (D2L)
- date: April 16, 2024
+ date: 2024-04-16
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Digital Knowledge EdTech Lab Inc.
- date: April 24, 2024
+ date: 2024-04-24
claim: false
type: RF RAND (Required & Optional Elements)
- organization: IQC Italian Quality Company
- date: April 19, 2024
+ date: 2024-04-19
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Skybridge Skills
- date: April 16, 2024
+ date: 2024-04-16
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Navigatr
- date: April 25, 2024
+ date: 2024-04-25
claim: false
type: RF RAND (Required & Optional Elements)
- organization: T3 Innovation Network, US Chamber of Commerce Foundation
- date: April 25, 2024
+ date: 2024-04-25
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Territorium
- date: April 23, 2024
+ date: 2024-04-23
claim: false
type: RF RAND (Required & Optional Elements)
- organization: 'Western Governors University (WGU) '
- date: June 11, 2022
+ date: 2022-06-11
claim: false
type: RF RAND (Required & Optional Elements)
releases:
- version: "Candidate Final"
docVersion: "1.0"
- date: July 14, 2022"
+ date: 2022-07-14
comments: "Open Badges 3.0 first Candidate Final release"
- version: "Candidate Public Final"
docVersion: "1.0.1"
- date: "February 9, 2023"
+ date: 2023-02-09
comments: "Open Badges 3.0 first Candidate Public Final release"
- version: "Final"
docVersion: "1.0"
- date: "May 27, 2024"
+ date: 2024-05-27
comments: "Open Badges 3.0 Final Release"
- version: "Final"
docVersion: "1.1"
- date: "July 26, 2024"
+ date: 2024-07-26
comments: "Fixed some typos. See [[OB-ERRATA-30]]\nAdded [[VC-DATA-MODEL-1.1]] compatible JSON schema in Document Set"
- version: "Final"
docVersion: "1.2"
- date: "Dec 23, 2024"
+ date: 2024-12-23
comments: "Clarified proof mechanism and algorithm selection. See [[OB-ERRATA-30]]"
- version: "Final"
docVersion: "1.3"
- date: "October 9, 2025"
+ date: 2025-10-09
comments: "Updated JSON Schemas with support for [[JSON-LD11-API]] compaction process\nDeprecated [[VCRL-10]] in favour of [[vc-bitstring-status-list]]"
- version: "Final"
docVersion: "1.4"
- date: "October 14, 2025"
+ date: 2025-10-14
comments: "Credential Status' id is an optional field as defined at [[vc-data-model-2.0]]"
- version: "Final"
docVersion: "1.4.1"
- date: "November 6, 2025"
+ date: 2025-11-06
comments: "Updated JSON-LD Context, adding the term `jti`"
+ - version: "Final"
+ docVersion: "1.4.2"
+ date: 2026-04-17
+ comments: "Updated CredentialStatus of all examples to BitstringStatusListEntry"
+ - version: "Final"
+ docVersion: "1.4.3"
+ date: 2026-04-22
+ comments: "Fixed links to OpenAPI files in Open Badges API section"
---
-@spec/abstract.md
+@standards/v3p0/spec/abstract.md
-@spec/introduction.md
+@standards/v3p0/spec/introduction.md
-@spec/overview.md
+@standards/v3p0/spec/overview.md
-@spec/usecases.md
+@standards/v3p0/spec/usecases.md
-@spec/gettingstarted.md
+@standards/v3p0/spec/gettingstarted.md
-@spec/docformat.md
+@standards/v3p0/spec/docformat.md
# Open Badges API
@@ -232,8 +240,8 @@ The API defined here is intended for [=Clients=] and [=servers=] that give indiv
In addition to the documentation in this section, there are [OpenAPI](#docs-openapi) files for the Open Badges API in both JSON and YAML format:
-* [JSON OpenAPI File](https://purl.imsglobal.org/spec/ob/v3p0/schema/openapi/imsob_v3p0.json)
-* [YAML OpenAPI File](https://purl.imsglobal.org/spec/ob/v3p0/schema/openapi/imsob_v3p0.yaml)
+* [JSON OpenAPI File](https://purl.imsglobal.org/spec/ob/v3p0/schema/openapi/ob_v3p0_oas.json)
+* [YAML OpenAPI File](https://purl.imsglobal.org/spec/ob/v3p0/schema/openapi/ob_v3p0_oas.yaml)
## Architecture
@@ -974,11 +982,11 @@ When the request for revocation is rejected, the [=authorization server=] return
-@spec/integrity.md
+@standards/v3p0/spec/integrity.md
-@spec/verification.md
+@standards/v3p0/spec/verification.md
-@spec/equality-and-comparison.md
+@standards/v3p0/spec/equality-and-comparison.md
# Verifiable Credentials Extensions
@@ -993,7 +1001,7 @@ This standard references four VC Extensions:
> **Note**: The 1EdTech extensions are designed to work with any [=verifiable credential=] and may be contributed to the [[VC-EXTENSION-REGISTRY]] in the future.
-@spec/serialization.md
+@standards/v3p0/spec/serialization.md
# Data Models
@@ -1070,7 +1078,7 @@ title: Verification Support Data Models
The data models in this section are used by the [[[#verification-and-validation]]] process for supporting older credentials created with [[VC-DATA-MODEL-1.1]].
-@spec/extending.md
+@standards/v3p0/spec/extending.md
# Examples
@@ -1117,7 +1125,7 @@ In this example, all required and optional properties are populated.
> **Note**: The endorsements were signed by different issuers and provided to the issuer of this OpenBadgeCredential.
```obv3p0 org.1edtech.ob.v3p0.achievementcredential.class
-{
+ {
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
@@ -1210,7 +1218,8 @@ In this example, all required and optional properties are populated.
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
- "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+ "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+ "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
],
"id": "http://1edtech.edu/endorsementcredential/3732",
"type": [
@@ -1245,28 +1254,30 @@ In this example, all required and optional properties are populated.
}
],
"credentialStatus": {
- "id": "https://1edtech.edu/credentials/3732/revocations",
- "type": "1EdTechRevocationList"
+ "id": "https://1edtech.edu/credentials/revocationList#23",
+ "type": "BitstringStatusListEntry",
+ "statusPurpose": "revocation",
+ "statusListIndex": 23,
+ "statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
"type": "1EdTechCredentialRefresh"
},
- "proof": [
- {
- "type": "DataIntegrityProof",
- "cryptosuite": "eddsa-rdf-2022",
- "created": "2022-05-26T18:17:08Z",
- "verificationMethod": "https://accrediter.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
- "proofPurpose": "assertionMethod",
- "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
- }
- ]
+ "proof": [{
+ "type": "DataIntegrityProof",
+ "created": "2010-01-01T19:23:24Z",
+ "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+ "cryptosuite": "eddsa-rdfc-2022",
+ "proofPurpose": "assertionMethod",
+ "proofValue": "z27zr9VnabHMVwHsrqu9j8mSmm6Yp2cJCrMcg4Cownc8h7kw4qwMkxFHdg8h4CVYVK1TGd1vgoPBgFkQodMtjWQ8f"
+ }]
},
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
- "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+ "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+ "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
],
"id": "http://1edtech.edu/endorsementcredential/3733",
"type": [
@@ -1301,8 +1312,11 @@ In this example, all required and optional properties are populated.
}
],
"credentialStatus": {
- "id": "https://state.gov/credentials/3732/revocations",
- "type": "1EdTechRevocationList"
+ "id": "https://1edtech.edu/credentials/revocationList#23",
+ "type": "BitstringStatusListEntry",
+ "statusPurpose": "revocation",
+ "statusListIndex": 23,
+ "statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://state.gov/credentials/3732",
@@ -1310,12 +1324,12 @@ In this example, all required and optional properties are populated.
},
"proof": [
{
- "type": "DataIntegrityProof",
- "cryptosuite": "eddsa-rdf-2022",
- "created": "2022-05-26T18:25:59Z",
- "verificationMethod": "https://accrediter.edu/issuers/565049#z5bDnmSgDczXwZGya6ZjxKaxkdKxzsCMiVSsgEVWxnaWK7ZqbKnzcCd7mUKE9DQaAL2QMXP5AquPeW6W2CWrZ7jNC",
- "proofPurpose": "assertionMethod",
- "proofValue": "z5bDnmSgDczXwZGya6ZjxKaxkdKxzsCMiVSsgEVWxnaWK7ZqbKnzcCd7mUKE9DQaAL2QMXP5AquPeW6W2CWrZ7jNC"
+ "type": "DataIntegrityProof",
+ "created": "2010-01-01T19:23:24Z",
+ "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+ "cryptosuite": "eddsa-rdfc-2022",
+ "proofPurpose": "assertionMethod",
+ "proofValue": "z4TUqPBaJx7Ld3QMxMy25dRU29fAPEwemPEUEZSRDS979nUKtfon7zu6ocgRyRCniXE9heY46NKPzwbFdqmKbUhkG"
}
]
}
@@ -1374,7 +1388,8 @@ In this example, all required and optional properties are populated.
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
- "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+ "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+ "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
],
"id": "http://1edtech.edu/endorsementcredential/3734",
"type": [
@@ -1409,8 +1424,11 @@ In this example, all required and optional properties are populated.
}
],
"credentialStatus": {
- "id": "https://1edtech.edu/credentials/3732/revocations",
- "type": "1EdTechRevocationList"
+ "id": "https://1edtech.edu/credentials/revocationList#23",
+ "type": "BitstringStatusListEntry",
+ "statusPurpose": "revocation",
+ "statusListIndex": 23,
+ "statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
@@ -1419,11 +1437,11 @@ In this example, all required and optional properties are populated.
"proof": [
{
"type": "DataIntegrityProof",
- "cryptosuite": "eddsa-rdf-2022",
- "created": "2022-05-26T18:17:08Z",
- "verificationMethod": "https://accrediter.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
+ "created": "2010-01-01T19:23:24Z",
+ "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+ "cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
- "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
+ "proofValue": "z3R4NfPDo67k5AXBqCLcqsFo9grbWND3zkQYSvBRFwYZ1JjZE5z4FBnpFNrckzSvDHPekBsyy5z8RL4H3J9r5VUGF"
}
]
}
@@ -1623,7 +1641,8 @@ In this example, all required and optional properties are populated.
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
- "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+ "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+ "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
],
"id": "http://1edtech.edu/endorsementcredential/3735",
"type": [
@@ -1658,8 +1677,11 @@ In this example, all required and optional properties are populated.
}
],
"credentialStatus": {
- "id": "https://1edtech.edu/credentials/3732/revocations",
- "type": "1EdTechRevocationList"
+ "id": "https://1edtech.edu/credentials/revocationList#23",
+ "type": "BitstringStatusListEntry",
+ "statusPurpose": "revocation",
+ "statusListIndex": 23,
+ "statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
@@ -1668,11 +1690,11 @@ In this example, all required and optional properties are populated.
"proof": [
{
"type": "DataIntegrityProof",
- "cryptosuite": "eddsa-rdf-2022",
- "created": "2022-05-26T18:17:08Z",
- "verificationMethod": "https://accrediter.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
+ "created": "2010-01-01T19:23:24Z",
+ "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+ "cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
- "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
+ "proofValue": "z3PbutAvPaLRfYRqSex4XcAcpBqj3Vhx5vxpCxtngeTuXoutFUx3yRf7J7yrc1vL8oksMWt7FVAa4ryd9XLpnKdQA"
}
]
}
@@ -1713,7 +1735,8 @@ In this example, all required and optional properties are populated.
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
- "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+ "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+ "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
],
"id": "http://1edtech.edu/endorsementcredential/3736",
"type": [
@@ -1748,8 +1771,11 @@ In this example, all required and optional properties are populated.
}
],
"credentialStatus": {
- "id": "https://1edtech.edu/credentials/3732/revocations",
- "type": "1EdTechRevocationList"
+ "id": "https://1edtech.edu/credentials/revocationList#23",
+ "type": "BitstringStatusListEntry",
+ "statusPurpose": "revocation",
+ "statusListIndex": 23,
+ "statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
@@ -1757,12 +1783,12 @@ In this example, all required and optional properties are populated.
},
"proof": [
{
- "type": "DataIntegrityProof",
- "cryptosuite": "eddsa-rdf-2022",
- "created": "2022-05-26T18:17:08Z",
- "verificationMethod": "https://accrediter.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
- "proofPurpose": "assertionMethod",
- "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
+ "type": "DataIntegrityProof",
+ "created": "2010-01-01T19:23:24Z",
+ "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+ "cryptosuite": "eddsa-rdfc-2022",
+ "proofPurpose": "assertionMethod",
+ "proofValue": "z3KqayPvBkJ196JzwYTgjuxZTYd7XQFSCauLg3Lo2xZKCcQTewydijTwfTouadyf2jBVYqAZg1CWXnug5JZkivUP6"
}
]
}
@@ -1820,8 +1846,11 @@ In this example, all required and optional properties are populated.
}
],
"credentialStatus": {
- "id": "https://1edtech.edu/credentials/3732/revocations",
- "type": "1EdTechRevocationList"
+ "id": "https://1edtech.edu/credentials/revocationList#23",
+ "type": "BitstringStatusListEntry",
+ "statusPurpose": "revocation",
+ "statusListIndex": 23,
+ "statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
@@ -1868,8 +1897,11 @@ In this example, all required and optional properties are populated.
}
],
"credentialStatus": {
- "id": "https://state.gov/credentials/3732/revocations",
- "type": "1EdTechRevocationList"
+ "id": "https://1edtech.edu/credentials/revocationList#23",
+ "type": "BitstringStatusListEntry",
+ "statusPurpose": "revocation",
+ "statusListIndex": 23,
+ "statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://state.gov/credentials/3732",
diff --git a/ob_v3p0/microsites/cert/ob-cert-v3p0.md b/ob_v3p0/microsites/v3p0/cert.md
similarity index 87%
rename from ob_v3p0/microsites/cert/ob-cert-v3p0.md
rename to ob_v3p0/microsites/v3p0/cert.md
index ce4df5c5..9405fc9f 100644
--- a/ob_v3p0/microsites/cert/ob-cert-v3p0.md
+++ b/ob_v3p0/microsites/v3p0/cert.md
@@ -4,7 +4,7 @@ category: Certification
title: Open Badges Specification Conformance and Certification Guide
shortcode: OB-CERT-30
status: Final
-lastUpdated: December 12, 2025
+lastUpdated: 2025-12-12
version: '3.0'
nature: normative
docType: conformance
@@ -104,108 +104,108 @@ contributors:
role: Editor
ipDisclosures:
- organization: Concentric Sky
- date: October 24, 2019
+ date: 2019-10-24
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Arizona State University
- date: June 21, 2022
+ date: 2022-06-21
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Temple University
- date: June 10, 2022
+ date: 2022-06-10
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Credly
- date: October 3, 2019
+ date: 2019-10-03
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Workday, Inc.
- date: June 10, 2022
+ date: 2022-06-10
claim: false
type: RF RAND (Required & Optional Elements)
- organization: RANDA Solutions
- date: June 9, 2022
+ date: 2022-06-09
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Anthology
- date: April 16, 2024
+ date: 2024-04-16
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Unicon
- date: April 22, 2024
+ date: 2024-04-22
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Bowdoin College
- date: June 11, 2022
+ date: 2022-06-11
claim: false
type: RF RAND (Required & Optional Elements)
- organization: American Association of Collegiate Registrars and Admissions Officers (AACARO)
- date: April 15, 2024
+ date: 2024-04-15
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Desire to Learn (D2L)
- date: April 16, 2024
+ date: 2024-04-16
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Digital Knowledge EdTech Lab Inc.
- date: April 24, 2024
+ date: 2024-04-24
claim: false
type: RF RAND (Required & Optional Elements)
- organization: IQC Italian Quality Company
- date: April 19, 2024
+ date: 2024-04-19
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Skybridge Skills
- date: April 16, 2024
+ date: 2024-04-16
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Navigatr
- date: April 25, 2024
+ date: 2024-04-25
claim: false
type: RF RAND (Required & Optional Elements)
- organization: T3 Innovation Network, US Chamber of Commerce Foundation
- date: April 25, 2024
+ date: 2024-04-25
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Territorium
- date: April 23, 2024
+ date: 2024-04-23
claim: false
type: RF RAND (Required & Optional Elements)
- organization: 'Western Governors University (WGU) '
- date: June 11, 2022
+ date: 2022-06-11
claim: false
type: RF RAND (Required & Optional Elements)
releases:
- version: Candidate Public Final
docVersion: 1.0
- date: November 10, 2022
+ date: 2022-11-10
comments: Open Badges 3.0 first Candidate Public Final release
- version: Final
docVersion: 1.0
- date: May 27, 2024
+ date: 2024-05-27
comments: Open Badges 3.0 Final Release
- version: Final
docVersion: 1.1
- date: Dec 23, 2024
+ date: 2024-12-23
comments: Added supported proof mechanisms for Issuer.\nAdded supported proof mechanisms for Displayer. Removed invalid Host tests.
- version: Final
docVersion: 1.2
- date: July 11, 2025
+ date: 2025-07-11
comments: Added ECDSA Cryptosuite ecdsa-sd-2023 to Issuer and Displayer supported proof mechanisms.
- version: Final
docVersion: 1.3
- date: December 12, 2025
+ date: 2025-12-12
comments: Added JSON-LD Safe mode requirement for issuer certification profile.
---
-@cert/abstract.md
+@standards/v3p0/cert/abstract.md
-@cert/introduction.md
+@standards/v3p0/cert/introduction.md
-@cert/conformance.md
+@standards/v3p0/cert/conformance.md
-@cert/issuer.md
+@standards/v3p0/cert/issuer.md
-@cert/displayer.md
+@standards/v3p0/cert/displayer.md
-@cert/host.md
+@standards/v3p0/cert/host.md
diff --git a/ob_v3p0/microsites/cert/abstract.md b/ob_v3p0/microsites/v3p0/cert/abstract.md
similarity index 86%
rename from ob_v3p0/microsites/cert/abstract.md
rename to ob_v3p0/microsites/v3p0/cert/abstract.md
index 14e6d3b9..fef20bbf 100644
--- a/ob_v3p0/microsites/cert/abstract.md
+++ b/ob_v3p0/microsites/v3p0/cert/abstract.md
@@ -1,3 +1,12 @@
+---
+title: "Abstract"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Abstract for the Open Badges 3.0 certification document"
+---
+
## Abstract
Open Badges are visual symbols of accomplishments packed with verifiable metadata according to the Open Badges specification. The Open Badges 3.0 specification [[OB-30]] defines the properties necessary to define an achievement and award it to a recipient, as well as procedures for verifying badge authenticity and “baking” badge information into portable image files. It includes term definitions for representations of data in Open Badges and defines an API for exchanging badge information. These term definitions appear in the current Open Badges JSON-LD Context File.
diff --git a/ob_v3p0/microsites/cert/conformance.md b/ob_v3p0/microsites/v3p0/cert/conformance.md
similarity index 93%
rename from ob_v3p0/microsites/cert/conformance.md
rename to ob_v3p0/microsites/v3p0/cert/conformance.md
index c97dddd1..e2d46bce 100644
--- a/ob_v3p0/microsites/cert/conformance.md
+++ b/ob_v3p0/microsites/v3p0/cert/conformance.md
@@ -1,3 +1,12 @@
+---
+title: "Conformance and Certification"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Overview of Open Badges 3.0 conformance and certification requirements"
+---
+
## Conformance and Certification
The goal of 1EdTech certification for Open Badges [[OB-30]] is to ensure interoperable implementations of badging systems that generate and issue digital badges as well as those that host and display badges.
diff --git a/ob_v3p0/microsites/cert/displayer.md b/ob_v3p0/microsites/v3p0/cert/displayer.md
similarity index 83%
rename from ob_v3p0/microsites/cert/displayer.md
rename to ob_v3p0/microsites/v3p0/cert/displayer.md
index 93176a83..d8670cae 100644
--- a/ob_v3p0/microsites/cert/displayer.md
+++ b/ob_v3p0/microsites/v3p0/cert/displayer.md
@@ -1,3 +1,12 @@
+---
+title: "Open Badges 3.0 Displayer Service Conformance"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Displayer service conformance requirements for Open Badges 3.0 certification"
+---
+
## Open Badges 3.0 Displayer Service Conformance {#displayer-conformance}
An Open Badges Displayer is an application that displays and verifies badges for viewers. The candidate platform must support viewer-initiated verification of a badge.
@@ -6,7 +15,7 @@ An Open Badges Displayer is an application that displays and verifies badges for
The tests within this section refer to possible values of the status of a badge. The meaning of these values and how to determine them from a credential is defined in sections 9.1 and 9.2 of [[OB-30]]. As a quick summary:
- - A Credential is revoked if the `credentialStatus` property is present, and the `type` of the CredentialStatus object is "1EdTechRevocationList".
+ - A Credential is revoked if the \`credentialStatus\` property is present, and the \`type\` of the CredentialStatus object is "BitstringStatusListEntry", and the \`statusPurpose\` of the CredentialStatus object is "revocation".
- A Credential is expired if the current date and time is after the `validUntil`.
### Tests {#display-tests}
diff --git a/ob_v3p0/microsites/cert/host.md b/ob_v3p0/microsites/v3p0/cert/host.md
similarity index 97%
rename from ob_v3p0/microsites/cert/host.md
rename to ob_v3p0/microsites/v3p0/cert/host.md
index a1e10ef4..37f82a63 100644
--- a/ob_v3p0/microsites/cert/host.md
+++ b/ob_v3p0/microsites/v3p0/cert/host.md
@@ -1,3 +1,12 @@
+---
+title: "Open Badges 3.0 Host Service Conformance"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Host service conformance requirements for Open Badges 3.0 certification"
+---
+
## Open Badges 3.0 Host Service Conformance {#host-conformance}
An Open Badges **Host** is an application that can aggregate and publicly host OpenBadgeCredential for recipients. It also supports export of badges at user request. The candidate platform must be able to import all formats of Open Badges as well as prove that badge metadata is not lost upon export of the badge. The candidate platform must also meet [[[#service-provider-write]]] requirements and accept an AchievementCredential or a Profile from an Issuer application. And meet [[[#service-consumer-read]]] and [[[#service-provider-read]]] requirements for exchanging AchievementCredentials with other Host applications.
diff --git a/ob_v3p0/microsites/cert/introduction.md b/ob_v3p0/microsites/v3p0/cert/introduction.md
similarity index 95%
rename from ob_v3p0/microsites/cert/introduction.md
rename to ob_v3p0/microsites/v3p0/cert/introduction.md
index a3caf712..204a90cc 100644
--- a/ob_v3p0/microsites/cert/introduction.md
+++ b/ob_v3p0/microsites/v3p0/cert/introduction.md
@@ -1,3 +1,12 @@
+---
+title: "Introduction"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Introduction for Open Badges 3.0 certification"
+---
+
## Introduction
### Conformance Statements {#conformance}
diff --git a/ob_v3p0/microsites/cert/issuer.md b/ob_v3p0/microsites/v3p0/cert/issuer.md
similarity index 94%
rename from ob_v3p0/microsites/cert/issuer.md
rename to ob_v3p0/microsites/v3p0/cert/issuer.md
index 0dafab89..59a00183 100644
--- a/ob_v3p0/microsites/cert/issuer.md
+++ b/ob_v3p0/microsites/v3p0/cert/issuer.md
@@ -1,3 +1,12 @@
+---
+title: "Open Badges 3.0 Issuer Service Conformance"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Issuer service conformance requirements for Open Badges 3.0 certification"
+---
+
## Open Badges 3.0 Issuer Service Conformance {#issuer-conformance}
A Open Badges **Issuer** is an application that allows for the creation of OpenBadgeCredentials and the subsequent delivery of OpenBadgeCredentials to recipients that conform to the Open Badges Specification. The candidate platform must issue a valid badge and demonstrate how the badge is retrieved by the recipient. The candidate platform may also meet Service Consumer (Write) requirements and can send an AchievementCredential or a Profile to a product that conforms to Service Provider (Write) requirements.
diff --git a/ob_v3p0/microsites/errata/ob-err-v3p0.md b/ob_v3p0/microsites/v3p0/errata.md
similarity index 94%
rename from ob_v3p0/microsites/errata/ob-err-v3p0.md
rename to ob_v3p0/microsites/v3p0/errata.md
index 98c18231..838a0359 100644
--- a/ob_v3p0/microsites/errata/ob-err-v3p0.md
+++ b/ob_v3p0/microsites/v3p0/errata.md
@@ -4,7 +4,7 @@ category: Specification
title: Open Badges Errata
shortcode: OB-ERRATA-30
status: Final
-lastUpdated: July 17, 2024
+lastUpdated: 2024-07-17
version: '3.0'
nature: informative
docType: errata
@@ -105,24 +105,24 @@ contributors:
releases:
- version: Version 3.0 Candidate Final
docVersion: 1.0
- date: March 6, 2023
+ date: 2023-03-06
comments: Added changes in context.json file
- version: Version 3.0 Final
docVersion: 1.0
- date: June 17, 2024
+ date: 2024-06-17
comments: Added typography errors
- version: Version 3.0 Final
docVersion: 1.1
- date: July 26, 2024
+ date: 2024-07-26
comments: Added typography errors
- version: Version 3.0 Final
docVersion: 1.2
- date: Dec 23, 2024
+ date: 2024-12-23
comments: Consolidated with version 1.2 of the specification.\nClarified proof mechanism and algorithm selection.
- version: Version 3.0 Final
docVersion: 1.3
- date: June 16, 2025
+ date: 2025-06-16
comments: Fixed typography errors in the errata document.
---
-@errata/errata.md
+@standards/v3p0/errata/errata.md
diff --git a/ob_v3p0/microsites/errata/errata.md b/ob_v3p0/microsites/v3p0/errata/errata.md
similarity index 96%
rename from ob_v3p0/microsites/errata/errata.md
rename to ob_v3p0/microsites/v3p0/errata/errata.md
index bf465999..ad6feeea 100644
--- a/ob_v3p0/microsites/errata/errata.md
+++ b/ob_v3p0/microsites/v3p0/errata/errata.md
@@ -1,3 +1,12 @@
+---
+title: "Errata for Open Badges 3.0 Specification"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Errata for the Open Badges 3.0 specification"
+---
+
## Errata for Open Badges 3.0 Specification
### Context file
diff --git a/docs/images/figure01-openbadges-2.0-diagram.png b/ob_v3p0/microsites/v3p0/images/figure01-openbadges-2.0-diagram.png
similarity index 100%
rename from docs/images/figure01-openbadges-2.0-diagram.png
rename to ob_v3p0/microsites/v3p0/images/figure01-openbadges-2.0-diagram.png
diff --git a/ob_v3p0/microsites/v3p0/images/ob30-concept.png b/ob_v3p0/microsites/v3p0/images/ob30-concept.png
new file mode 100644
index 00000000..ce31fa1b
Binary files /dev/null and b/ob_v3p0/microsites/v3p0/images/ob30-concept.png differ
diff --git a/ob_v3p0/microsites/impl/ob-impl-v3p0.md b/ob_v3p0/microsites/v3p0/impl.md
similarity index 97%
rename from ob_v3p0/microsites/impl/ob-impl-v3p0.md
rename to ob_v3p0/microsites/v3p0/impl.md
index 56d59be9..369f7e63 100644
--- a/ob_v3p0/microsites/impl/ob-impl-v3p0.md
+++ b/ob_v3p0/microsites/v3p0/impl.md
@@ -4,7 +4,7 @@ category: Guide
title: Open Badges Implementation Guide
shortcode: OB-IMPL-30
status: Final
-lastUpdated: Apr 7th, 2025
+lastUpdated: 2025-04-07
version: '3.0'
nature: informative
docType: guide
@@ -28,151 +28,151 @@ contributors:
role: Editor
ipDisclosures:
- organization: Concentric Sky
- date: October 24, 2019
+ date: 2019-10-24
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Arizona State University
- date: June 21, 2022
+ date: 2022-06-21
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Temple University
- date: June 10, 2022
+ date: 2022-06-10
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Credly
- date: October 3, 2019
+ date: 2019-10-03
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Workday, Inc.
- date: June 10, 2022
+ date: 2022-06-10
claim: false
type: RF RAND (Required & Optional Elements)
- organization: RANDA Solutions
- date: June 9, 2022
+ date: 2022-06-09
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Anthology
- date: April 16, 2024
+ date: 2024-04-16
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Unicon
- date: April 22, 2024
+ date: 2024-04-22
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Bowdoin College
- date: June 11, 2022
+ date: 2022-06-11
claim: false
type: RF RAND (Required & Optional Elements)
- organization: American Association of Collegiate Registrars and Admissions Officers (AACARO)
- date: April 15, 2024
+ date: 2024-04-15
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Desire to Learn (D2L)
- date: April 16, 2024
+ date: 2024-04-16
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Digital Knowledge EdTech Lab Inc.
- date: April 24, 2024
+ date: 2024-04-24
claim: false
type: RF RAND (Required & Optional Elements)
- organization: IQC Italian Quality Company
- date: April 19, 2024
+ date: 2024-04-19
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Skybridge Skills
- date: April 16, 2024
+ date: 2024-04-16
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Navigatr
- date: April 25, 2024
+ date: 2024-04-25
claim: false
type: RF RAND (Required & Optional Elements)
- organization: T3 Innovation Network, US Chamber of Commerce Foundation
- date: April 25, 2024
+ date: 2024-04-25
claim: false
type: RF RAND (Required & Optional Elements)
- organization: Territorium
- date: April 23, 2024
+ date: 2024-04-23
claim: false
type: RF RAND (Required & Optional Elements)
- organization: 'Western Governors University (WGU) '
- date: June 11, 2022
+ date: 2022-06-11
claim: false
type: RF RAND (Required & Optional Elements)
releases:
- version: Version 3.0 IMS Candidate Final
docVersion: 1.0
- date: November 10, 2022
+ date: 2022-11-10
comments: Covers Issuer, Displayer, and Host conformance and certification.
- version: Version 3.0 IMS Candidate Final
docVersion: 1.1
- date: June 20, 2023
+ date: 2023-06-20
comments: Updated Linked Data Proof to the new EdDSA Cryptosuite v2022 [[VC-DI-EDDSA]].
- version: Version 3.0 IMS Candidate Final
docVersion: 1.2
- date: July 14, 2023
+ date: 2023-07-14
comments: New version of the context.json (`context-3.0.2.json`) file. See [[OB-ERRATA-30]] for detailed changes
- version: Version 3.0 IMS Candidate Final
docVersion: 1.3
- date: September 8, 2023
+ date: 2023-09-08
comments: Reorganized some sections of the document to highlight Issuer, Displayer and Host roles.\nAdded recommended practice for including additional info of the recipient of a credential.\nAdded recommended practice for supporting old cryptosuites.\nAdded test vector data for signing Open Badges and Comprehensive Learner Record.
- version: Version 3.0 IMS Candidate Final
docVersion: 1.4
- date: September 22, 2023
+ date: 2023-09-22
comments: Added a section about including older Open Badges in CLR 2.0.
- version: Version 3.0 IMS Candidate Final
docVersion: 1.5
- date: November 9, 2023
+ date: 2023-11-09
comments: Added a section about issuer's key provenance.
- version: Version 3.0 IMS Candidate Final
docVersion: 1.6
- date: December 13, 2023
+ date: 2023-12-13
comments: New version of the context.json (`context-3.0.3.json`) file. See [[OB-ERRATA-30]] for detailed changes
- version: Version 3.0 IMS Candidate Final
docVersion: 1.7
- date: December 15, 2023
+ date: 2023-12-15
comments: Added sections about alignment of achievements with non-1EdTech vocabularies, such Credential Engine.
- version: Version 3.0 IMS Candidate Final
docVersion: 1.8
- date: January 26, 2023
+ date: 2023-01-26
comments: Language of related achievement now uses the new attribute `inLanguage` instead of `@language`.
- version: Version 3.0 IMS Candidate Final
docVersion: 1.9
- date: April 2, 2024
+ date: 2024-04-02
comments: Upgraded to [[VC-DATA-MODEL-2.0]]
- version: Version 3.0 IMS Candidate Final
docVersion: 1.10
- date: October 1, 2024
+ date: 2024-10-01
comments: Added section about extensions.\nAdded section about privacy.
- version: Final Release
docVersion: 1.0
- date: December 23, 2024
+ date: 2024-12-23
comments: Clarified proof mechanism and algorithm selection.
- version: Final Release
docVersion: 1.1
- date: February 12, 2025
+ date: 2025-02-12
comments: Reorganization.\nClarified some paragraphs.
- version: Final Release
docVersion: 2.0
- date: April 7, 2025
+ date: 2025-04-07
comments: Fixed some typos.
---
-@impl/introduction.md
+@standards/v3p0/impl/introduction.md
-@impl/getting-started.md
+@standards/v3p0/impl/getting-started.md
-@impl/recommended-practices.md
+@standards/v3p0/impl/recommended-practices.md
-@impl/reference-impls.md
+@standards/v3p0/impl/reference-impls.md
-@impl/conformance.md
+@standards/v3p0/impl/conformance.md
-@impl/migrating.md
+@standards/v3p0/impl/migrating.md
-@impl/extensions.md
+@standards/v3p0/impl/extensions.md
-@impl/help.md
+@standards/v3p0/impl/help.md
## Linked Data Proof Test Vector for Open Badges 3.0
diff --git a/ob_v3p0/microsites/impl/conformance.md b/ob_v3p0/microsites/v3p0/impl/conformance.md
similarity index 93%
rename from ob_v3p0/microsites/impl/conformance.md
rename to ob_v3p0/microsites/v3p0/impl/conformance.md
index bb16818f..6a8e4c3a 100644
--- a/ob_v3p0/microsites/impl/conformance.md
+++ b/ob_v3p0/microsites/v3p0/impl/conformance.md
@@ -1,3 +1,12 @@
+---
+title: "Conformance and Certification"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Conformance and certification for Open Badges 3.0 implementations"
+---
+
## Conformance and Certification{.informative}
The [[OB-CERT-30]] covers the specific requirements that implementers must cover
diff --git a/ob_v3p0/microsites/impl/extensions.md b/ob_v3p0/microsites/v3p0/impl/extensions.md
similarity index 96%
rename from ob_v3p0/microsites/impl/extensions.md
rename to ob_v3p0/microsites/v3p0/impl/extensions.md
index 918bd99b..d8c68ed7 100644
--- a/ob_v3p0/microsites/impl/extensions.md
+++ b/ob_v3p0/microsites/v3p0/impl/extensions.md
@@ -1,3 +1,12 @@
+---
+title: "Open Badges Extensions"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Open Badges 3.0 extensions"
+---
+
## Open Badges Extensions{#informative}
[Open Badges 3.0](/ob/specifications/ob-v3p0#extending) and [Comprehensive Learner Record 2.0](http://www.imsglobal.org/spec/clr/v2p0#extending) allows extensibility in several ways: data model, extensible enumerated vocabularies and API.
diff --git a/ob_v3p0/microsites/impl/getting-started.md b/ob_v3p0/microsites/v3p0/impl/getting-started.md
similarity index 99%
rename from ob_v3p0/microsites/impl/getting-started.md
rename to ob_v3p0/microsites/v3p0/impl/getting-started.md
index ca5c4bff..3d8fd322 100644
--- a/ob_v3p0/microsites/impl/getting-started.md
+++ b/ob_v3p0/microsites/v3p0/impl/getting-started.md
@@ -1,3 +1,12 @@
+---
+title: "Getting Started (for Developers)"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Getting started guide for Open Badges 3.0 developers"
+---
+
## Getting Started (for Developers){.informative}
It may seem like an overwhelming task to implement Open Badges 3.0 or CLR 2.0,
diff --git a/ob_v3p0/microsites/impl/help.md b/ob_v3p0/microsites/v3p0/impl/help.md
similarity index 83%
rename from ob_v3p0/microsites/impl/help.md
rename to ob_v3p0/microsites/v3p0/impl/help.md
index 4a9b774e..9e6955fc 100644
--- a/ob_v3p0/microsites/impl/help.md
+++ b/ob_v3p0/microsites/v3p0/impl/help.md
@@ -1,3 +1,12 @@
+---
+title: "Getting Help"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Getting help with Open Badges 3.0 implementations"
+---
+
## Getting Help{.informative}
If you have questions or need help with implementing Open Badges 3.0 or
diff --git a/ob_v3p0/microsites/impl/introduction.md b/ob_v3p0/microsites/v3p0/impl/introduction.md
similarity index 98%
rename from ob_v3p0/microsites/impl/introduction.md
rename to ob_v3p0/microsites/v3p0/impl/introduction.md
index 732375d0..43ce68c8 100644
--- a/ob_v3p0/microsites/impl/introduction.md
+++ b/ob_v3p0/microsites/v3p0/impl/introduction.md
@@ -1,3 +1,12 @@
+---
+title: "Introduction"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Introduction to the Open Badges 3.0 implementation guide"
+---
+
## Introduction
The 1EdTech digital credentials specifications, Open Badges and Comprehensive
diff --git a/ob_v3p0/microsites/impl/migrating.md b/ob_v3p0/microsites/v3p0/impl/migrating.md
similarity index 98%
rename from ob_v3p0/microsites/impl/migrating.md
rename to ob_v3p0/microsites/v3p0/impl/migrating.md
index 27e18641..3518e863 100644
--- a/ob_v3p0/microsites/impl/migrating.md
+++ b/ob_v3p0/microsites/v3p0/impl/migrating.md
@@ -1,3 +1,12 @@
+---
+title: "Migrating from OB 2.0, OB 2.1, and CLR 1.0"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Migration guide for Open Badges 3.0"
+---
+
## Migrating from OB 2.0, OB 2.1, and CLR 1.0{#informative}
Open Badges 3.0 and Comprehensive Learner Record 2.0 are major releases, and
diff --git a/ob_v3p0/microsites/impl/recommended-practices.md b/ob_v3p0/microsites/v3p0/impl/recommended-practices.md
similarity index 99%
rename from ob_v3p0/microsites/impl/recommended-practices.md
rename to ob_v3p0/microsites/v3p0/impl/recommended-practices.md
index f79aa677..8b5725a6 100644
--- a/ob_v3p0/microsites/impl/recommended-practices.md
+++ b/ob_v3p0/microsites/v3p0/impl/recommended-practices.md
@@ -1,3 +1,12 @@
+---
+title: "Recommended Practices"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Recommended practices for Open Badges 3.0 implementations"
+---
+
## Recommended Practices{.informative}
Conformance certification ensures consistency across an important but focused
diff --git a/ob_v3p0/microsites/impl/reference-impls.md b/ob_v3p0/microsites/v3p0/impl/reference-impls.md
similarity index 82%
rename from ob_v3p0/microsites/impl/reference-impls.md
rename to ob_v3p0/microsites/v3p0/impl/reference-impls.md
index 69f7d7f7..9948f13d 100644
--- a/ob_v3p0/microsites/impl/reference-impls.md
+++ b/ob_v3p0/microsites/v3p0/impl/reference-impls.md
@@ -1,3 +1,12 @@
+---
+title: "Using Reference Implementations"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Reference implementations for Open Badges 3.0"
+---
+
## Using Reference Implementations{.informative}
The Reference Implementation is an 1EdTech implementation of Open Badges 3.0 and
diff --git a/ob_v3p0/microsites/spec/abstract.md b/ob_v3p0/microsites/v3p0/spec/abstract.md
similarity index 77%
rename from ob_v3p0/microsites/spec/abstract.md
rename to ob_v3p0/microsites/v3p0/spec/abstract.md
index ef5a5114..891b5361 100644
--- a/ob_v3p0/microsites/spec/abstract.md
+++ b/ob_v3p0/microsites/v3p0/spec/abstract.md
@@ -1,3 +1,12 @@
-# Abstract
+---
+title: "Abstract"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Abstract for the Open Badges 3.0 specification"
+---
+
+## Abstract
This specification is a new version of the [1EdTech Open Badges Specification](https://www.imsglobal.org/activity/digital-badges) that aligns with the conventions of the [[VC-DATA-MODEL-2.0]] for the use cases of [=Defined Achievement Claim=] and a [=Skill Claim=]. The credentials that are produced are easily be bundled into [=Comprehensive Learner Records=] and [=Verifiable Presentations=]. Portability and learner data privacy are improved by expanding the usage of cryptographic proofs/signatures, because this format will be compatible with a growing array of proof schemas that are developed for the Verifiable Credentials Data Model.
diff --git a/ob_v3p0/microsites/spec/docformat.md b/ob_v3p0/microsites/v3p0/spec/docformat.md
similarity index 97%
rename from ob_v3p0/microsites/spec/docformat.md
rename to ob_v3p0/microsites/v3p0/spec/docformat.md
index e30a82fe..bec927f6 100644
--- a/ob_v3p0/microsites/spec/docformat.md
+++ b/ob_v3p0/microsites/v3p0/spec/docformat.md
@@ -1,4 +1,13 @@
-# Open Badges Document Formats {#docformat}
+---
+title: "Open Badges Document Formats"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Document formats for Open Badges 3.0 credentials"
+---
+
+## Open Badges Document Formats {#docformat}
[OpenBadgeCredentials](#org.1edtech.ob.v3p0.achievementcredential.class) can be exchanged as documents as defined in this section, or by using the [Open Badges API](#api). Documents can be exchanged as a text file, a web resource, or embedded in an image. The contents of an Open Badge document MUST meet the following criteria:
@@ -8,7 +17,7 @@
## Example: Sample OpenBadgeCredential file contents
-```obv3p0 org.1edtech.ob.v3p0.achievementcredential.class preventAdditionalProperties=true"
+```obv3p0 org.1edtech.ob.v3p0.achievementcredential.class preventAdditionalProperties=true
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
diff --git a/ob_v3p0/microsites/spec/equality-and-comparison.md b/ob_v3p0/microsites/v3p0/spec/equality-and-comparison.md
similarity index 95%
rename from ob_v3p0/microsites/spec/equality-and-comparison.md
rename to ob_v3p0/microsites/v3p0/spec/equality-and-comparison.md
index e2bb4a50..05060fd2 100644
--- a/ob_v3p0/microsites/spec/equality-and-comparison.md
+++ b/ob_v3p0/microsites/v3p0/spec/equality-and-comparison.md
@@ -1,4 +1,13 @@
-# Credential equality and comparison algorithm{#credential-equality-and-comparison}
+---
+title: "Credential equality and comparison algorithm"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Credential equality and comparison for Open Badges 3.0"
+---
+
+## Credential equality and comparison algorithm{#credential-equality-and-comparison}
Credential equality and comparison is the process to determine whether a [=verifiable credential=] is semantically equivalent to another one.
diff --git a/ob_v3p0/microsites/spec/extending.md b/ob_v3p0/microsites/v3p0/spec/extending.md
similarity index 97%
rename from ob_v3p0/microsites/spec/extending.md
rename to ob_v3p0/microsites/v3p0/spec/extending.md
index 3b6fbb81..f4640957 100644
--- a/ob_v3p0/microsites/spec/extending.md
+++ b/ob_v3p0/microsites/v3p0/spec/extending.md
@@ -1,3 +1,12 @@
+---
+title: "Extending and Profiling the Standard"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Extending and profiling the Open Badges 3.0 standard"
+---
+
## Extending and Profiling the Standard {#extending}
This standard can be extended in three ways:
diff --git a/ob_v3p0/microsites/spec/gettingstarted.md b/ob_v3p0/microsites/v3p0/spec/gettingstarted.md
similarity index 55%
rename from ob_v3p0/microsites/spec/gettingstarted.md
rename to ob_v3p0/microsites/v3p0/spec/gettingstarted.md
index 8edd5750..fc1a9949 100644
--- a/ob_v3p0/microsites/spec/gettingstarted.md
+++ b/ob_v3p0/microsites/v3p0/spec/gettingstarted.md
@@ -1,4 +1,13 @@
-# Getting Started
+---
+title: "Getting Started"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Getting started with the Open Badges 3.0 specification"
+---
+
+## Getting Started
## Implementation Guide
diff --git a/ob_v3p0/microsites/spec/integrity.md b/ob_v3p0/microsites/v3p0/spec/integrity.md
similarity index 98%
rename from ob_v3p0/microsites/spec/integrity.md
rename to ob_v3p0/microsites/v3p0/spec/integrity.md
index fa0c0a03..cd21cc00 100644
--- a/ob_v3p0/microsites/spec/integrity.md
+++ b/ob_v3p0/microsites/v3p0/spec/integrity.md
@@ -1,4 +1,13 @@
-# Proofs (Signatures) {#data-integrity}
+---
+title: "Proofs (Signatures)"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Data integrity proofs and signatures for Open Badges 3.0"
+---
+
+## Proofs (Signatures) {#data-integrity}
This section describes mechanisms for ensuring the authenticity and integrity of OpenBadgeCredentials. At least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a [=credential=] to be a [=verifiable credential=]; that is, to be [=verifiable=]. In order to pass 1EdTech conformance tests, issuers MUST use a proof mechanism supported by the 1EdTech conformance test suite. See more about [Selecting proof methods and crypto algorithms](impl#selecting-proof-methods-and-crypto-algorithms) in the Implementation Guide.
diff --git a/ob_v3p0/microsites/spec/introduction.md b/ob_v3p0/microsites/v3p0/spec/introduction.md
similarity index 98%
rename from ob_v3p0/microsites/spec/introduction.md
rename to ob_v3p0/microsites/v3p0/spec/introduction.md
index dc26ea9f..a45b7f95 100644
--- a/ob_v3p0/microsites/spec/introduction.md
+++ b/ob_v3p0/microsites/v3p0/spec/introduction.md
@@ -1,4 +1,13 @@
-# Introduction
+---
+title: "Introduction"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Introduction for the Open Badges 3.0 specification"
+---
+
+## Introduction
## Audiences
@@ -195,7 +204,7 @@ In the diagram below, the concepts are shown in gray boxes (e.g. Assertion). Ple
Starting with this version of the Open Badges Specification, an Assertion is also a Verifiable Credential (VC) as defined by the [[vc-data-model-2.0]] specification. The diagram includes labels that show the relationships between VC terminology and Open Badges terminology (e.g. Issuer is identified by the VC "issuer").
-
+
*Diagram shows the major conceptual components of an Open Badge Verifiable Credential*
diff --git a/ob_v3p0/microsites/spec/overview.md b/ob_v3p0/microsites/v3p0/spec/overview.md
similarity index 98%
rename from ob_v3p0/microsites/spec/overview.md
rename to ob_v3p0/microsites/v3p0/spec/overview.md
index 5e608938..ea8ef830 100644
--- a/ob_v3p0/microsites/spec/overview.md
+++ b/ob_v3p0/microsites/v3p0/spec/overview.md
@@ -1,4 +1,13 @@
-# Overview{.informative}
+---
+title: "Overview"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Overview of the Open Badges 3.0 specification"
+---
+
+## Overview{.informative}
## What is the problem this solves for?
@@ -13,11 +22,11 @@ This specification changes the structure of the Open Badges [Assertion](#achieve
Previous versions of an Open Badges Assertion, illustrated in the graphic below, structures its objects like this:
An Assertion identifies a recipient with a "recipient" relationship to an IdentityObject that contains identifying properties. It identifies which badge it represents with a "badge" relationship to a BadgeClass. It identifies its verification information with a "verification" relationship to a VerificationObject. It identifies its issuer with an "issuer" relationship between the BadgeClass and the Issuer.
-
+
The Verifiable Credentials structure in this specification depicted below offers the same information with a slightly different structure: A Verifiable Credential identifies its recipient with a "credentialSubject" relationship to a subject class that is identified by an identifier. It identifies its issuer with an "issuer" relationship directly to an Issuer. The Credential claims the subject has met the criteria of a specific Achievement (also known as the BadgeClass in previous versions) with an "achievement" relationship to that defined achievement. And it identifies its verification information with a proof.
-
+
## Benefits and Opportunities
diff --git a/ob_v3p0/microsites/spec/serialization.md b/ob_v3p0/microsites/v3p0/spec/serialization.md
similarity index 96%
rename from ob_v3p0/microsites/spec/serialization.md
rename to ob_v3p0/microsites/v3p0/spec/serialization.md
index 95fae19c..8ba3b3fc 100644
--- a/ob_v3p0/microsites/spec/serialization.md
+++ b/ob_v3p0/microsites/v3p0/spec/serialization.md
@@ -1,4 +1,13 @@
-# Serialization
+---
+title: "Serialization"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Serialization formats for Open Badges 3.0"
+---
+
+## Serialization
The data model as described in Appendix [[[#data-models]]] is the canonical structural representation of an Open Badges [=verifiable credential=] ([AchievementCredential](#org.1edtech.ob.v3p0.achievementcredential.class)). All serializations are representations of that data model in a specific format. This section specifies how the data model is realized in JSON-LD and plain JSON.
diff --git a/ob_v3p0/microsites/spec/usecases.md b/ob_v3p0/microsites/v3p0/spec/usecases.md
similarity index 98%
rename from ob_v3p0/microsites/spec/usecases.md
rename to ob_v3p0/microsites/v3p0/spec/usecases.md
index 11e711fd..1943378f 100644
--- a/ob_v3p0/microsites/spec/usecases.md
+++ b/ob_v3p0/microsites/v3p0/spec/usecases.md
@@ -1,4 +1,13 @@
-# Use Cases{.informative}
+---
+title: "Use Cases"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Use cases for the Open Badges 3.0 specification"
+---
+
+## Use Cases{.informative}
The use cases below drive the design of Open Badges 3.0 specification.
diff --git a/ob_v3p0/microsites/spec/verification.md b/ob_v3p0/microsites/v3p0/spec/verification.md
similarity index 97%
rename from ob_v3p0/microsites/spec/verification.md
rename to ob_v3p0/microsites/v3p0/spec/verification.md
index a6ec90b7..95451938 100644
--- a/ob_v3p0/microsites/spec/verification.md
+++ b/ob_v3p0/microsites/v3p0/spec/verification.md
@@ -1,4 +1,13 @@
-# Verification and Validation
+---
+title: "Verification and Validation"
+docType: "segment"
+status: "Final"
+author: "1Edtech Consortium"
+lastUpdated: 2023-08-10
+description: "Verification and validation for Open Badges 3.0 credentials"
+---
+
+## Verification and Validation
[=Verification=] is the process to determine whether a [=verifiable credential=] or [=verifiable presentation=] is an authentic and timely statement of the issuer or presenter respectively. This includes checking that: the credential (or presentation) conforms to the specification; the proof method is satisfied; and, if present, the status check succeeds. Verification of a credential does not imply evaluation of the truth of claims encoded in the credential.
diff --git a/ob_v3p0/ob_v3p0.html b/ob_v3p0/ob_v3p0.html
index f80a2e97..15b3a463 100644
--- a/ob_v3p0/ob_v3p0.html
+++ b/ob_v3p0/ob_v3p0.html
@@ -27,9 +27,9 @@
specNature: "normative", // spec nature is "normative" or "informative"
specType: "main", // spec type is "main", "cert", "impl", "errata" or other agreed upon string
specVersion: "3.0",
- docVersion: "1.4.1",
+ docVersion: "1.4.3",
specStatus: "Final Release",
- specDate: "November 6, 2025",
+ specDate: "April 22, 2026",
contributors: _contributors,
localBiblio: _localBiblio,
iprs: _iprs,
@@ -250,6 +250,26 @@ Revision History
+
+ Final
+ 1.4.2
+ April 17, 2026
+
+
+ - Updated
CredentialStatus of all examples to BitstringStatusListEntry
+
+
+
+
+ Final
+ 1.4.3
+ April 22, 2026
+
+
+ - Fixed links to OpenAPI files in Open Badges API section
+
+
+