Open Badges American Council for Education (ACE) Extension

Open Badges American Council for Education (ACE) Extension

Candidate Final Public
Spec Version 1.0
Candidate Final Public
Document Version: 1.0
Date Issued: October 9, 2025
Status: This document is for review and adoption by the 1EdTech membership.
This version: https://www.imsglobal.org/spec/ob-ace/v1p0/main/
Latest version: https://www.imsglobal.org/spec/ob-ace/latest/main/
Errata: https://www.imsglobal.org/spec/ob-ace/v1p0/errata/

IPR and Distribution Notice

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.

1EdTech 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 1EdTech's procedures with respect to rights in 1EdTech specifications can be found at the 1EdTech Intellectual Property Rights webpage: https://www.1edtech.org/sites/default/files/media/docs/2023/imsipr_policyFinal.pdf .

Use of this specification to develop products or services is governed by the license with 1EdTech found on the 1EdTech website: https://www.1edtech.org/standards/specification-license.

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 1EdTech 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 should be directed to support@1edtech.org .

© 2025 1EdTech™ Consortium, Inc. All Rights Reserved.

Trademark information: https://www.1edtech.org/about/legal

Abstract

An extension to Open Badges that allows inserting American Council for Education credit recommendations and learning evaluation data.

1. Overview

1.1 Introduction

This section is non-normative.

This extension provides information about ACE's learning evaluation and credit recommendations for an Achievement. It allows for the inclusion of ACE's credit recommendations and learning evaluation data within the Open Badges framework.

To ensure integrity and verifiability, this information is embedded in an OpenBadgeCredential as an EndorsementCredential. This way, the information can be easily verified by a verifier using common Verifiable Credentials patterns.

Issuer MAY opt to embed ACE's EndorsementCredential directly within the Achievement, so it's embedded in subsequents OpenBadgeCredentials.

1.2 Use cases

This section is non-normative.

  • Describe the ACE's credit recommendations of an Achievement.
  • Describe the ACE's learning evaluation of an Achievement.

1.3 Terminology

The terminology used in this document is consistent with the terminology established in the Open Badges 3.0 specification [OB-30].

  • ACE: American Council of Education

1.4 Conformance Statements

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, OPTIONAL, RECOMMENDED, REQUIRED, SHALL, SHALL NOT, SHOULD, and SHOULD NOT in this document $are to be interpreted as described in $[object Object].

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 <a href="#document-set">Conformance and Certification Guide</a> for this specification may introduce greater normative constraints than those defined here for specific service or implementation categories.

1.5 Document Set

1.5.1 Normative Documents

Open Badges 3.0
Main specification of this extension: Open Badges Specification v3.0.
JSON Schema
The JSON Schema defines the syntactical restrictions of this extension: https://purl.imsglobal.org/spec/ob-ace/v1p0/schema/ob_ace_v1p0_endorsementcredential_schema.json.
JSON-LD Context
The JSON-LD context defines mappings for the terms used in this specification to their canonical IRIs: https://purl.imsglobal.org/spec/ob-ace/v1p0/context/context-1.0.0.json.
Errata
The errata details any erratum registered for this version of this specification since its publication [OB-ACE-20-ERRATA].

1.6 Extendable Badge Objects

EndorsementSubject, with the new type ACEEndorsementSubject

1.6.1 ACEEndorsementSubject

The ACEEndorsementSubject class is used to represent credit recommendations and learning evaluations from the ACE.

1.6.1.1 ACE ID

Each organization that receives an ACE endorsement is assigned a unique ACE ID. Since there's already an identifier property the Open Badges specification, which allows endorsers to include aditional identifiers of the recipient of a credential, the ACE ID can be expressed using that property. Therefore, ACE ID are expressed in the ACEEndorsementSubject as an identifier with its identityType with the value ext:ACEId.

Note
You need an ACE ID and either a version or validity period in the EndorsementCredential (validFrom and validUntil) to correctly identify this learning experience
1.6.1.2 CTID

Each organization registered in ACE is assigned a CTID from the Credential Registry. Since there's already an identifier property the Open Badges specification, which allows endorsers to include aditional identifiers of the recipient of a credential, the CTID can be expressed using that property. Therefore, CTID are expressed in the ACEEndorsementSubject as an identifier with its identityType with the value ext:CTId.

1.6.1.3 Minimum Passing Score

ACE capture and publish a minimum percentage passing score that is required for a learner to earn the credential. This helps institutions align the credit recommendations with their policies for transfer courses, which might require "a C or better" or similar language in order to accept a credential for credit. The Open Badges specification already has a ResultDescription entity, which allows issuers to define results of an achievement. Therefore, the minimum passing score can be expressed using that entity.

1.6.1.4 Credit Recommendation notes

An ACE Learning Evaluation contains an optional credit recommendation note to capture any nuance needed to accurately use the recommendations. Since the EndorsementSubject already has the property endorsementComment, which allows endorsers to make a simple claim in writing about the entity, this property can be used to convey the credit recommendation note.

1.6.1.6 Competencies

A Learning Evaluation can also validate workplace competencies at the request of the National Guide Client. These competences are expressed in the ACEEndorsementSubject as Alignment objects, with an appropriate targetType.

1.7 Data Model

At the top level is a very simple ACEEndorsementSubject object that contains the learning evaluation and credit recommendations.

1.7.1 Data Models

1.7.1.1 ACEEndorsementSubject

Property Type Description Multiplicity
type IRI The value of the type property MUST be an unordered set. One of the items MUST be the URI 'EndorsementSubject', and one of the items MUST be the URI 'ACEEndorsementSubject' [1..*]
identifier IdentityObject Other identifiers for the recipient of the endorsement [0..*]
version NonNegativeInteger Each Exhibit has a version number. The first time a course, exam, or apprenticeship is evaluated it is given the Version Number 1, and each subsequent re-evaluation is given a new number that corresponds with a new start and end date. Learners are issued credentials for the version that is active when they complete the experience. [0..1]
minimumPassingScore ResultDescription [0..1]
creditRecommendations ACECreditRecommendation A set of credit recommendations associated with this learning evaluation by the ACE. [0..*]
alignment Alignment set of competency statements associated with this learning evaluation by the ACE. [0..*]
This class can be extended with additional properties.
1.7.1.2 ACECreditRecommendation

Property Type Description Multiplicity
type IRI The value of the type property MUST be an unordered set. One of the items MUST be the URI 'ACECreditRecommendation' [1..*]
creditRecommendationId UUID The ID for each set of elements that make up a single credit recommendation. [1]
semesterHours Float The number of semester hours that the evaluation team determined the experience to be equivalent to. It is a result of the review process by ACE. [0..1]
level CreditRecommendationLevelEnum The level represents the educational level of the evaluated learning. One exhibit version may have credit recommendations at different levels, based on the depth, breadth, rigor, and scope of the material covered and assessed learning. [0..1]
subject String The Subject of a credit recommendation is a free text field agreed upon by the faculty reviewers that identifies the academic disciplinary area for that credit recommendation. It is designed to help institutions align prior learning with courses in their catalog, and corresponds roughly to a college course. [0..1]
1.7.1.3 Alignment

Describes an alignment between an achievement and a node in an educational framework.

Property Type Description Multiplicity
type IRI The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Alignment'. [1..*]
targetCode String If applicable, a locally unique string identifier that identifies the alignment target within its framework and/or targetUrl. [0..1]
targetDescription String Short description of the alignment target. [0..1]
targetName String Name of the alignment. [1]
targetFramework String Name of the framework the alignment target. [0..1]
targetType AlignmentTargetType Enumeration The type of the alignment target node. [0..1]
targetUrl URL URL linking to the official description of the alignment target, for example an individual standard within an educational framework. [1]
This class can be extended with additional properties.
1.7.1.4 IdentityObject

A collection of information about the recipient of an achievement.

Property Type Description Multiplicity
type IRI MUST be the IRI 'IdentityObject'. [1]
hashed Boolean Whether or not the identityHash value is hashed. [1]
identityHash IdentityHash Either the IdentityHash of the identity or the plaintext value. If it's possible that the plaintext transmission and storage of the identity value would leak personally identifiable information where there is an expectation of privacy, it is strongly recommended that an IdentityHash be used. [1]
identityType IdentifierTypeEnum Enumeration The identity type. [1]
salt String If the identityHash is hashed, this should contain the string used to salt the hash. If this value is not provided, it should be assumed that the hash was not salted. [0..1]
1.7.1.5 ResultDescription

Describes a possible achievement result.

Property Type Description Multiplicity
id URI The unique URI for this result description. Required so a result can link to this result description. [1]
type IRI The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'ResultDescription'. [1..*]
alignment Alignment Alignments between this result description and nodes in external frameworks. [0..*]
allowedValue String An ordered list of allowed values. The values should be ordered from low to high as determined by the achievement creator. [0..*]
name String The name of the result. [1]
requiredLevel URI The id of the rubric criterion level required to pass as determined by the achievement creator. [0..1]
requiredValue String A value from allowedValue or within the range of valueMin to valueMax required to pass as determined by the achievement creator. [0..1]
resultType ResultType Enumeration The type of result this description represents. This is an extensible enumerated vocabulary. [1]
rubricCriterionLevel RubricCriterionLevel An ordered array of rubric criterion levels that may be asserted in the linked result. The levels should be ordered from low to high as determined by the achievement creator. [0..*]
valueMax String The maximum possible value that may be asserted in a linked result. [0..1]
valueMin String The minimum possible value that may be asserted in a linked result. [0..1]
This class can be extended with additional properties.
1.7.1.6 RubricCriterionLevel

Describes a rubric criterion level.

Property Type Description Multiplicity
id URI The unique URI for this rubric criterion level. Required so a result can link to this rubric criterion level. [1]
type IRI The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'RubricCriterionLevel'. [1..*]
alignment Alignment Alignments between this rubric criterion level and a rubric criterion levels defined in external frameworks. [0..*]
description String Description of the rubric criterion level. [0..1]
level String The rubric performance level in terms of success. [0..1]
name String The name of the rubric criterion level. [1]
points String The points associated with this rubric criterion level. [0..1]
This class can be extended with additional properties.

1.8 Enumerations

1.8.1 CreditRecommendationLevelEnum Enumeration

Term Description
VocationalCertificate Vocational-Certificate
LowerDivisionBaccalaureate Lower Division Baccalaureate
UpperDivisionBaccalaureate Upper Division Baccalaureate
Graduate Graduate

1.8.2 AlignmentTargetType Enumeration

The type of the alignment target node in the target framework.

Term Description
ceasn:Competency An alignment to a CTDL-ASN/CTDL competency published by Credential Engine.
ceterms:Credential An alignment to a CTDL Credential published by Credential Engine.
CFItem An alignment to a CASE Framework Item.
CFRubric An alignment to a CASE Framework Rubric.
CFRubricCriterion An alignment to a CASE Framework Rubric Criterion.
CFRubricCriterionLevel An alignment to a CASE Framework Rubric Criterion Level.
CTDL An alignment to a Credential Engine Item.
ext:ACENationalGuide An alignment to a ACE's National Guide Client.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

1.8.3 IdentifierTypeEnum Enumeration

Term Description
ext:ACEId ACE identifier of the recipient of the endorsement.
ext:CTId CTID of the recipient of the endorsement.
sourcedId
systemId
productId
userName
accountId
emailAddress
nationalIdentityNumber
isbn
issn
lisSourcedId
oneRosterSourcedId
sisSourcedId
ltiContextId
ltiDeploymentId
ltiToolId
ltiPlatformId
ltiUserId
identifier
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

1.8.4 ResultType Enumeration

The type of result. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.

Term Description
GradePointAverage The result is a grade point average.
LetterGrade The result is a letter grade.
Percent The result is a percent score.
PerformanceLevel The result is a performance level.
PredictedScore The result is a predicted score.
RawScore The result is a raw score.
Result A generic result.
RubricCriterion The result is from a rubric criterion.
RubricCriterionLevel The result is a rubric criterion level.
RubricScore The result represents a rubric score with both a name and a numeric value.
ScaledScore The result is a scaled score.
Status The result conveys the status of the achievement.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

1.9 Derived Types

The derived types in this section are shared by all 1EdTech specifications.

Type Description
BaseTerm A term in an enumeration which serves as a common term for all other entries in this enumeration, and as such is less specific. The lexical constraints are the same as for Term.
Identifier A NormalizedString that functions as an identifier.
IdentityHash A String consisting of an algorithm identifier, a $ separator, and a hash across an identifier and an optionally appended salt string. The only supported algorithms are MD5 [RFC1321] and SHA-256 [FIPS-180-4], identified by the strings 'md5' and 'sha256' respectively. Identifiers and salts MUST be encoded in UTF-8 prior to hashing, and the resulting hash MUST be expressed in hexadecimal using uppercase (A-F, 0-9) or lowercase character (a-f, 0-9) sets. For example: 'sha256$b5809d8a92f8858436d7e6b87c12ebc0ae1eac4baecc2c0b913aee2c922ef399' represents the result of calculating a SHA-256 hash on the string 'a@example.comKosher'. in which the email identifier 'a@example.com' is salted with 'Kosher'
IRI A NormalizedString that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).
Term A term in an enumeration. The lexical constraints are the same as for Token.
URI A NormalizedString that respresents a Uniform Resource Identifier (URI).
URL A URI that represents a Uniform Resource Locator (URL).
UUID An Identifier with the lexical restrictions of a UUID [RFC4122]

1.10 Primitive Types

The primitive types in this section are shared by all 1EdTech specifications.

Type Description
Boolean A boolean, expressed as true or false
Date An [ISO8601] calendar date using the syntax YYYY-MM-DD.
Float
Namespace A namespace data type for defining data from a context other than that as the default for the data model. This is used for importing other data models.
NonNegativeInteger
NormalizedString A String conforming to the normalizedString definition in [XMLSCHEMA-2].
String Character strings.

A. Examples

A.1 EndorsementCredential

Example 1: Sample EndorsementCredential with ACE extension
 {
     "@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/extensions.json",
         "https://purl.imsglobal.org/spec/ob-ace/v1p0/context/context-1.0.0.json"
     ],
     "id": "http://example.com/credentials/3527",
     "type": [
         "VerifiableCredential",
         "EndorsementCredential"
     ],
     "name": "SDE endorsement",
     "issuer": {
         "id": "https://state.gov/issuers/565049",
         "type": ["Profile"],
         "name": "State Department of Education"
     },
     "validFrom": "2010-01-01T00:00:00Z",
     "validUntil": "2030-01-01T00:00:00Z",
     "credentialSubject": {
         "id": "https://1edtech.edu/issuers/565049",
         "type": ["EndorsementSubject", "ACEEndorsementSubject"],
         "endorsementComment": "Some notes about the credit recommendations.",
         "identifier": [{
             "type": ["IdentityObject"],
             "hashed": false,
             "identityType": "ext:ACEId",
             "identityHash": "ACE-123456"
         }],
         "minimumPassingScore": {
             "type": ["ResultDescription"],
             "name": "Passing Score",
             "resultType": "Percent",
             "requiredValue": "80"
         },
         "version": 1,
         "creditRecommendations": [
             {
                 "type": ["ACECreditRecommendation"],
                 "creditRecommendationId": "b7e8c2a1-4f3d-4e2b-9d6f-8a1c2e3f4b5a",
                 "semesterHours": 12.0,
                 "level": "LowerDivisionBaccalaureate",
                 "subject": "Computer networking"
             },
             {
                 "type": ["ACECreditRecommendation"],
                 "creditRecommendationId": "a3f9d7c4-2b1e-4a6f-9e8d-7c6b5a4e3f2d",
                 "semesterHours": 24.0,
                 "level": "VocationalCertificate",
                 "subject": "Computer networking"
             }
         ],
         "alignment": [{
	"type": ["Alignment"],
	"targetDescription": "Robot software is a set of commands and procedures robots use to respond to input and perform autonomous tasks.",
	"targetName": "Robot Programming",
	"targetFramework": "Example Robotics Framework",
	"targetType": "CFItem",
	"targetUrl": "https://robotics-competencies.example.com/competencies/robot-programming"
}, {
             "type": ["Alignment"],
             "targetName": "National Guide Link",
             "targetType": "ext:ACENationalGuideLink",
             "targetUrl": "https://example.com"
         }]
     },
     "credentialSchema": [
         {
         "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential_schema.json",
         "type": "1EdTechJsonSchemaValidator2019"
         },
         {
         "id": "https://purl.imsglobal.org/spec/ob-ace/v1p0/schema/ob_ace_v1p0_endorsementcredential_schema.json",
         "type": "1EdTechJsonSchemaValidator2019"
         }
     ]
 }
{
  "@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/extensions.json",
    "https://purl.imsglobal.org/spec/ob-ace/v1p0/context/context-1.0.0.json"
  ],
  "id": "http://example.com/credentials/3527",
  "type": [
    "VerifiableCredential",
    "EndorsementCredential"
  ],
  "name": "SDE endorsement",
  "issuer": {
    "id": "https://state.gov/issuers/565049",
    "type": [
      "Profile"
    ],
    "name": "State Department of Education"
  },
  "validFrom": "2010-01-01T00:00:00Z",
  "validUntil": "2030-01-01T00:00:00Z",
  "credentialSubject": {
    "id": "https://1edtech.edu/issuers/565049",
    "type": [
      "EndorsementSubject",
      "ACEEndorsementSubject"
    ],
    "endorsementComment": "Some notes about the credit recommendations.",
    "identifier": [
      {
        "type": [
          "IdentityObject"
        ],
        "hashed": false,
        "identityType": "ext:ACEId",
        "identityHash": "ACE-123456"
      }
    ],
    "minimumPassingScore": {
      "type": [
        "ResultDescription"
      ],
      "name": "Passing Score",
      "resultType": "Percent",
      "requiredValue": "80"
    },
    "version": 1,
    "creditRecommendations": [
      {
        "type": [
          "ACECreditRecommendation"
        ],
        "creditRecommendationId": "b7e8c2a1-4f3d-4e2b-9d6f-8a1c2e3f4b5a",
        "semesterHours": 12,
        "level": "LowerDivisionBaccalaureate",
        "subject": "Computer networking"
      },
      {
        "type": [
          "ACECreditRecommendation"
        ],
        "creditRecommendationId": "a3f9d7c4-2b1e-4a6f-9e8d-7c6b5a4e3f2d",
        "semesterHours": 24,
        "level": "VocationalCertificate",
        "subject": "Computer networking"
      }
    ],
    "alignment": [
      {
        "type": [
          "Alignment"
        ],
        "targetDescription": "Robot software is a set of commands and procedures robots use to respond to input and perform autonomous tasks.",
        "targetName": "Robot Programming",
        "targetFramework": "Example Robotics Framework",
        "targetType": "CFItem",
        "targetUrl": "https://robotics-competencies.example.com/competencies/robot-programming"
      },
      {
        "type": [
          "Alignment"
        ],
        "targetName": "National Guide Link",
        "targetType": "ext:ACENationalGuideLink",
        "targetUrl": "https://example.com"
      }
    ]
  },
  "credentialSchema": [
    {
      "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential_schema.json",
      "type": "1EdTechJsonSchemaValidator2019"
    },
    {
      "id": "https://purl.imsglobal.org/spec/ob-ace/v1p0/schema/ob_ace_v1p0_endorsementcredential_schema.json",
      "type": "1EdTechJsonSchemaValidator2019"
    }
  ],
  "proof": [
    {
      "type": "DataIntegrityProof",
      "created": "2025-10-09T16:12:32Z",
      "verificationMethod": "https://state.gov/issuers/565049#z6MkmUmSiHYLmdMp4dPanGhmd6StYCKv8VxkqDeWG798PwET",
      "cryptosuite": "eddsa-rdfc-2022",
      "proofPurpose": "assertionMethod",
      "proofValue": "z45gtDbS8B41LnQ1gTBJyD2SVHgMpKAvJ8ErZPxvwJeAszt3NimjnReD2UdydPwBsNwFdqqB9MHBeKGFiBUH1PwnL"
    }
  ]
}
---------------- JWT header ---------------
{
  "alg": "RS256",
  "typ": "JWT",
  "jwk": {
    "e": "AQAB",
    "kty": "RSA",
    "n": "tVcBWo-UPj0voL9L83l0YQD5qWaiAQ-RRVeAzSW5rSZYXe9_1qwu0_BD4o6Ql2CFVDqeCf
ui3u_ngbtkV1-Qcw11pTOiMO-wcuSmkBdEcyIXySyGzpGdm16UXoL7R-Z1CdmEvotQ-VyHjOzYS8Whjd
tQQeSHaKkj97TibLOU7jHL-hpg-nVrReEi_kDkoikXsPUIoLwyduyNDT6yKO3WRAl4v7LLxHS58e8XMo
QahV5BbWMDZZCeAgL_HQJeEC4rLE-rRAPGBEOh3o4inUUcNZzuQLxidBdcI1lmvNveblA5g8rRpC9NLP
KqP98AUJwDeWOkVluIFc585CUeboYXCQ"
  }
}
--------------- JWT payload ---------------
// NOTE: The example below uses a valid VC-JWT serialization
//       that duplicates the iss, nbf, jti, and sub fields in the
//       Verifiable Credential (vc) field.
{
  "@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/extensions.json",
    "https://purl.imsglobal.org/spec/ob-ace/v1p0/context/context-1.0.0.json"
  ],
  "id": "http://example.com/credentials/3527",
  "type": [
    "VerifiableCredential",
    "EndorsementCredential"
  ],
  "name": "SDE endorsement",
  "issuer": {
    "id": "https://state.gov/issuers/565049",
    "type": [
      "Profile"
    ],
    "name": "State Department of Education"
  },
  "validFrom": "2010-01-01T00:00:00Z",
  "validUntil": "2030-01-01T00:00:00Z",
  "credentialSubject": {
    "id": "https://1edtech.edu/issuers/565049",
    "type": [
      "EndorsementSubject",
      "ACEEndorsementSubject"
    ],
    "endorsementComment": "Some notes about the credit recommendations.",
    "identifier": [
      {
        "type": [
          "IdentityObject"
        ],
        "hashed": false,
        "identityType": "ext:ACEId",
        "identityHash": "ACE-123456"
      }
    ],
    "minimumPassingScore": {
      "type": [
        "ResultDescription"
      ],
      "name": "Passing Score",
      "resultType": "Percent",
      "requiredValue": "80"
    },
    "version": 1,
    "creditRecommendations": [
      {
        "type": [
          "ACECreditRecommendation"
        ],
        "creditRecommendationId": "b7e8c2a1-4f3d-4e2b-9d6f-8a1c2e3f4b5a",
        "semesterHours": 12,
        "level": "LowerDivisionBaccalaureate",
        "subject": "Computer networking"
      },
      {
        "type": [
          "ACECreditRecommendation"
        ],
        "creditRecommendationId": "a3f9d7c4-2b1e-4a6f-9e8d-7c6b5a4e3f2d",
        "semesterHours": 24,
        "level": "VocationalCertificate",
        "subject": "Computer networking"
      }
    ],
    "alignment": [
      {
        "type": [
          "Alignment"
        ],
        "targetDescription": "Robot software is a set of commands and procedures
 robots use to respond to input and perform autonomous tasks.",
        "targetName": "Robot Programming",
        "targetFramework": "Example Robotics Framework",
        "targetType": "CFItem",
        "targetUrl": "https://robotics-competencies.example.com/competencies/rob
ot-programming"
      },
      {
        "type": [
          "Alignment"
        ],
        "targetName": "National Guide Link",
        "targetType": "ext:ACENationalGuideLink",
        "targetUrl": "https://example.com"
      }
    ]
  },
  "credentialSchema": [
    {
      "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorse
mentcredential_schema.json",
      "type": "1EdTechJsonSchemaValidator2019"
    },
    {
      "id": "https://purl.imsglobal.org/spec/ob-ace/v1p0/schema/ob_ace_v1p0_endo
rsementcredential_schema.json",
      "type": "1EdTechJsonSchemaValidator2019"
    }
  ],
  "iss": "https://state.gov/issuers/565049",
  "jti": "http://example.com/credentials/3527",
  "sub": "https://1edtech.edu/issuers/565049"
}
--------------- JWT ---------------
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4i
OiJ0VmNCV28tVVBqMHZvTDlMODNsMFlRRDVxV2FpQVEtUlJWZUF6U1c1clNaWVhlOV8xcXd1MF9CRDRv
NlFsMkNGVkRxZUNmdWkzdV9uZ2J0a1YxLVFjdzExcFRPaU1PLXdjdVNta0JkRWN5SVh5U3lHenBHZG0x
NlVYb0w3Ui1aMUNkbUV2b3RRLVZ5SGpPellTOFdoamR0UVFlU0hhS2tqOTdUaWJMT1U3akhMLWhwZy1u
VnJSZUVpX2tEa29pa1hzUFVJb0x3eWR1eU5EVDZ5S08zV1JBbDR2N0xMeEhTNThlOFhNb1FhaFY1QmJX
TURaWkNlQWdMX0hRSmVFQzRyTEUtclJBUEdCRU9oM280aW5VVWNOWnp1UUx4aWRCZGNJMWxtdk52ZWJs
QTVnOHJScEM5TkxQS3FQOThBVUp3RGVXT2tWbHVJRmM1ODVDVWVib1lYQ1EifX0.eyJAY29udGV4dCI6
WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv
YmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIiwiaHR0cHM6Ly9wdXJsLmltc2ds
b2JhbC5vcmcvc3BlYy9vYi92M3AwL2V4dGVuc2lvbnMuanNvbiIsImh0dHBzOi8vcHVybC5pbXNnbG9i
YWwub3JnL3NwZWMvb2ItYWNlL3YxcDAvY29udGV4dC9jb250ZXh0LTEuMC4wLmpzb24iXSwiaWQiOiJo
dHRwOi8vZXhhbXBsZS5jb20vY3JlZGVudGlhbHMvMzUyNyIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRl
bnRpYWwiLCJFbmRvcnNlbWVudENyZWRlbnRpYWwiXSwibmFtZSI6IlNERSBlbmRvcnNlbWVudCIsImlz
c3VlciI6eyJpZCI6Imh0dHBzOi8vc3RhdGUuZ292L2lzc3VlcnMvNTY1MDQ5IiwidHlwZSI6WyJQcm9m
aWxlIl0sIm5hbWUiOiJTdGF0ZSBEZXBhcnRtZW50IG9mIEVkdWNhdGlvbiJ9LCJ2YWxpZEZyb20iOiIy
MDEwLTAxLTAxVDAwOjAwOjAwWiIsInZhbGlkVW50aWwiOiIyMDMwLTAxLTAxVDAwOjAwOjAwWiIsImNy
ZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdS9pc3N1ZXJzLzU2NTA0OSIs
InR5cGUiOlsiRW5kb3JzZW1lbnRTdWJqZWN0IiwiQUNFRW5kb3JzZW1lbnRTdWJqZWN0Il0sImVuZG9y
c2VtZW50Q29tbWVudCI6IlNvbWUgbm90ZXMgYWJvdXQgdGhlIGNyZWRpdCByZWNvbW1lbmRhdGlvbnMu
IiwiaWRlbnRpZmllciI6W3sidHlwZSI6WyJJZGVudGl0eU9iamVjdCJdLCJoYXNoZWQiOmZhbHNlLCJp
ZGVudGl0eVR5cGUiOiJleHQ6QUNFSWQiLCJpZGVudGl0eUhhc2giOiJBQ0UtMTIzNDU2In1dLCJtaW5p
bXVtUGFzc2luZ1Njb3JlIjp7InR5cGUiOlsiUmVzdWx0RGVzY3JpcHRpb24iXSwibmFtZSI6IlBhc3Np
bmcgU2NvcmUiLCJyZXN1bHRUeXBlIjoiUGVyY2VudCIsInJlcXVpcmVkVmFsdWUiOiI4MCJ9LCJ2ZXJz
aW9uIjoxLCJjcmVkaXRSZWNvbW1lbmRhdGlvbnMiOlt7InR5cGUiOlsiQUNFQ3JlZGl0UmVjb21tZW5k
YXRpb24iXSwiY3JlZGl0UmVjb21tZW5kYXRpb25JZCI6ImI3ZThjMmExLTRmM2QtNGUyYi05ZDZmLThh
MWMyZTNmNGI1YSIsInNlbWVzdGVySG91cnMiOjEyLCJsZXZlbCI6Ikxvd2VyRGl2aXNpb25CYWNjYWxh
dXJlYXRlIiwic3ViamVjdCI6IkNvbXB1dGVyIG5ldHdvcmtpbmcifSx7InR5cGUiOlsiQUNFQ3JlZGl0
UmVjb21tZW5kYXRpb24iXSwiY3JlZGl0UmVjb21tZW5kYXRpb25JZCI6ImEzZjlkN2M0LTJiMWUtNGE2
Zi05ZThkLTdjNmI1YTRlM2YyZCIsInNlbWVzdGVySG91cnMiOjI0LCJsZXZlbCI6IlZvY2F0aW9uYWxD
ZXJ0aWZpY2F0ZSIsInN1YmplY3QiOiJDb21wdXRlciBuZXR3b3JraW5nIn1dLCJhbGlnbm1lbnQiOlt7
InR5cGUiOlsiQWxpZ25tZW50Il0sInRhcmdldERlc2NyaXB0aW9uIjoiUm9ib3Qgc29mdHdhcmUgaXMg
YSBzZXQgb2YgY29tbWFuZHMgYW5kIHByb2NlZHVyZXMgcm9ib3RzIHVzZSB0byByZXNwb25kIHRvIGlu
cHV0IGFuZCBwZXJmb3JtIGF1dG9ub21vdXMgdGFza3MuIiwidGFyZ2V0TmFtZSI6IlJvYm90IFByb2dy
YW1taW5nIiwidGFyZ2V0RnJhbWV3b3JrIjoiRXhhbXBsZSBSb2JvdGljcyBGcmFtZXdvcmsiLCJ0YXJn
ZXRUeXBlIjoiQ0ZJdGVtIiwidGFyZ2V0VXJsIjoiaHR0cHM6Ly9yb2JvdGljcy1jb21wZXRlbmNpZXMu
ZXhhbXBsZS5jb20vY29tcGV0ZW5jaWVzL3JvYm90LXByb2dyYW1taW5nIn0seyJ0eXBlIjpbIkFsaWdu
bWVudCJdLCJ0YXJnZXROYW1lIjoiTmF0aW9uYWwgR3VpZGUgTGluayIsInRhcmdldFR5cGUiOiJleHQ6
QUNFTmF0aW9uYWxHdWlkZUxpbmsiLCJ0YXJnZXRVcmwiOiJodHRwczovL2V4YW1wbGUuY29tIn1dfSwi
Y3JlZGVudGlhbFNjaGVtYSI6W3siaWQiOiJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL29i
L3YzcDAvc2NoZW1hL2pzb24vb2JfdjNwMF9lbmRvcnNlbWVudGNyZWRlbnRpYWxfc2NoZW1hLmpzb24i
LCJ0eXBlIjoiMUVkVGVjaEpzb25TY2hlbWFWYWxpZGF0b3IyMDE5In0seyJpZCI6Imh0dHBzOi8vcHVy
bC5pbXNnbG9iYWwub3JnL3NwZWMvb2ItYWNlL3YxcDAvc2NoZW1hL29iX2FjZV92MXAwX2VuZG9yc2Vt
ZW50Y3JlZGVudGlhbF9zY2hlbWEuanNvbiIsInR5cGUiOiIxRWRUZWNoSnNvblNjaGVtYVZhbGlkYXRv
cjIwMTkifV0sImlzcyI6Imh0dHBzOi8vc3RhdGUuZ292L2lzc3VlcnMvNTY1MDQ5IiwianRpIjoiaHR0
cDovL2V4YW1wbGUuY29tL2NyZWRlbnRpYWxzLzM1MjciLCJzdWIiOiJodHRwczovLzFlZHRlY2guZWR1
L2lzc3VlcnMvNTY1MDQ5In0.UokdwogM-HsYykkthm-dwKGxKyf44s-JcxRBOrWJDTafYCE3_HGI6m_c
4wKWzW9171Y9ulH-4NT632XBzM-nkEttdMCDbi4Ri6IWRQ2dfgby4EcEHvpFDFXU2TGHiwvhmjGCIvbP
8ovSXK9huohd7A58ctmJSbWWV1ImyJ2pW3Iwn1oqp1kN1pSmmbYKNf4TzMM74mqpxJGMo6aPx0bT9NSa
SA2n9lURpSm9wYFkkjP7dyqC5yaJajtmR1GotHleK46DwG-hRyXHdi4_0rM2VE0PoTxFpbd_pzNLDMK5
H0qdVWJVZWvZJb-iYZCaRNgmqkuSb1ounNBDnPDXD9xzDQ

A.2 Schema

A.2.1 Context

        
{
  "@context": {
    "@protected": true,
    "id": "@id",
    "type": "@type",
    "ACEEndorsementSubject": {
      "@id": "https://purl.imsglobal.org/spec/vc/ob-ace/vocab.html#ACEEndorsementSubject",
      "@context": {
        "@protected": true,
        "id": "@id",
        "type": "@type",
        "identifier": {
          "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identifier",
          "@container": "@set"
        },
        "version": {
          "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#version"
        },
        "minimumPassingScore": {
          "@id": "https://purl.imsglobal.org/spec/vc/ob-ace/vocab.html#minimumPassingScore",
          "@container": "@set"
        },
        "creditRecommendations": {
          "@id": "https://purl.imsglobal.org/spec/vc/ob-ace/vocab.html#creditRecommendations",
          "@container": "@set"
        }
      }
    },
    "ACECreditRecommendation": {
      "@id": "https://purl.imsglobal.org/spec/vc/ob-ace/vocab.html#CreditRecommendation",
      "@context": {
        "@protected": true,
        "id": "@id",
        "type": "@type",
        "creditRecommendationId": {
          "@id": "https://purl.imsglobal.org/spec/vc/ob-ace/vocab.html#creditRecommendationId"
        },
        "semesterHours": {
          "@id": "https://purl.imsglobal.org/spec/vc/ob-ace/vocab.html#semesterHours",
          "@type": "https://www.w3.org/2001/XMLSchema#float"
        },
        "level": {
          "@id": "https://purl.imsglobal.org/spec/vc/ob-ace/vocab.html#level"
        },
        "subject": {
          "@id": "https://purl.imsglobal.org/spec/vc/ob-ace/vocab.html#subject",
          "@type": "https://www.w3.org/2001/XMLSchema#string"
        }
      }
    }
  }
}

A.2.2 Open Badges ACE Extension JSON Schema

A.2.2.1 JSON Schema
A.2.2.2 EndorsementCredential

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/ob-ace/v1p0/schema/json/ob-ace_v1p0_endorsementcredential-jsonschema1.json",
  "title": "JSON Schema for the EndorsementCredential class.",
  "description": "No description supplied.",
  "type": "object",
  "properties": {
    "credentialSubject": {
      "$ref": "#/$defs/ACEEndorsementSubject"
    }
  },
  "required": [
    "credentialSubject"
  ],
  "additionalProperties": true,
  "$defs": {
    "ACEEndorsementSubject": {
      "description": "No description supplied.",
      "type": "object",
      "properties": {
        "type": {
          "allOf": [
            {
              "type": "array",
              "minItems": 1,
              "contains": {
                "enum": [
                  "EndorsementSubject"
                ]
              },
              "items": {
                "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'EndorsementSubject', and one of the items MUST be the URI 'ACEEndorsementSubject'",
                "$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
                "type": "string"
              }
            },
            {
              "type": "array",
              "minItems": 1,
              "contains": {
                "enum": [
                  "ACEEndorsementSubject"
                ]
              },
              "items": {
                "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'EndorsementSubject', and one of the items MUST be the URI 'ACEEndorsementSubject'",
                "$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
                "type": "string"
              }
            }
          ]
        },
        "identifier": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/IdentityObject"
          }
        },
        "version": {
          "description": "Each Exhibit has a version number. The first time a course, exam, or apprenticeship is evaluated it is given the Version Number 1, and each subsequent re-evaluation is given a new number that corresponds with a new start and end date. Learners are issued credentials for the version that is active when they complete the experience.",
          "$comment": "Origin: NonNegativeInteger (PrimitiveType)",
          "type": "integer"
        },
        "minimumPassingScore": {
          "$ref": "#/$defs/ResultDescription"
        },
        "creditRecommendations": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/ACECreditRecommendation"
          }
        },
        "alignment": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Alignment"
          }
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": true
    },
    "ACECreditRecommendation": {
      "description": "No description supplied.",
      "type": "object",
      "properties": {
        "type": {
          "type": "array",
          "minItems": 1,
          "contains": {
            "enum": [
              "ACECreditRecommendation"
            ]
          },
          "items": {
            "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'ACECreditRecommendation'",
            "$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
            "type": "string"
          }
        },
        "creditRecommendationId": {
          "description": "The ID for each set of elements that make up a single credit recommendation.",
          "$comment": "Origin: UUID (DerivedType); An `Identifier` with the lexical restrictions of a UUID [[RFC4122]]",
          "type": "string",
          "format": "uuid"
        },
        "semesterHours": {
          "description": "The number of semester hours that the evaluation team determined the experience to be equivalent to. It is a result of the review process by ACE.",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        },
        "level": {
          "description": "The level represents the educational level of the evaluated learning. One exhibit version may have credit recommendations at different levels, based on the depth, breadth, rigor, and scope of the material covered and assessed learning.",
          "$comment": "Origin: CreditRecommendationLevelEnum (Enum)",
          "type": "string",
          "enum": [
            "VocationalCertificate",
            "LowerDivisionBaccalaureate",
            "UpperDivisionBaccalaureate",
            "Graduate"
          ]
        },
        "subject": {
          "description": "The Subject of a credit recommendation is a free text field agreed upon by the faculty reviewers that identifies the academic disciplinary area for that credit recommendation. It is designed to help institutions align prior learning with courses in their catalog, and corresponds roughly to a college course.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "type",
        "creditRecommendationId"
      ],
      "additionalProperties": false
    },
    "ResultDescription": {
      "description": "Describes a possible achievement result.",
      "type": "object",
      "properties": {
        "id": {
          "description": "The unique URI for this result description. Required so a result can link to this result description.",
          "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
          "type": "string"
        },
        "type": {
          "type": "array",
          "minItems": 1,
          "contains": {
            "enum": [
              "ResultDescription"
            ]
          },
          "items": {
            "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'ResultDescription'.",
            "$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
            "type": "string"
          }
        },
        "alignment": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Alignment"
          }
        },
        "allowedValue": {
          "type": "array",
          "items": {
            "description": "An ordered list of allowed values. The values should be ordered from low to high as determined by the achievement creator.",
            "$comment": "Origin: String (PrimitiveType); Character strings.",
            "type": "string"
          }
        },
        "name": {
          "description": "The name of the result.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "requiredLevel": {
          "description": "The `id` of the rubric criterion level required to pass as determined by the achievement creator.",
          "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
          "type": "string"
        },
        "requiredValue": {
          "description": "A value from `allowedValue` or within the range of `valueMin` to `valueMax` required to pass as determined by the achievement creator.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "resultType": {
          "description": "The type of result this description represents. This is an extensible enumerated vocabulary.",
          "$comment": "Origin: ResultType (EnumExt); The type of result. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "GradePointAverage",
                "LetterGrade",
                "Percent",
                "PerformanceLevel",
                "PredictedScore",
                "RawScore",
                "Result",
                "RubricCriterion",
                "RubricCriterionLevel",
                "RubricScore",
                "ScaledScore",
                "Status"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "rubricCriterionLevel": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/RubricCriterionLevel"
          }
        },
        "valueMax": {
          "description": "The maximum possible `value` that may be asserted in a linked result.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "valueMin": {
          "description": "The minimum possible `value` that may be asserted in a linked result.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "id",
        "type",
        "name",
        "resultType"
      ],
      "additionalProperties": true
    },
    "IdentityObject": {
      "description": "A collection of information about the recipient of an achievement.",
      "type": "object",
      "properties": {
        "type": {
          "description": "MUST be the IRI 'IdentityObject'.",
          "$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
          "type": "string",
          "enum": [
            "IdentityObject"
          ]
        },
        "hashed": {
          "description": "Whether or not the `identityHash` value is hashed.",
          "$comment": "Origin: Boolean (PrimitiveType); A boolean, expressed as `true` or `false`",
          "type": "boolean"
        },
        "identityHash": {
          "description": "Either the IdentityHash of the identity or the plaintext value. If it's possible that the plaintext transmission and storage of the identity value would leak personally identifiable information where there is an expectation of privacy, it is strongly recommended that an IdentityHash be used.",
          "$comment": "Origin: IdentityHash (DerivedType); A `String` consisting of an algorithm identifier, a `$` separator, and a hash across an identifier and an optionally appended salt string. The only supported algorithms are MD5 [[RFC1321]] and SHA-256 [[FIPS-180-4]], identified by the strings 'md5' and 'sha256' respectively. Identifiers and salts MUST be encoded in UTF-8 prior to hashing, and the resulting hash MUST be expressed in hexadecimal using uppercase (A-F, 0-9) or lowercase character (a-f, 0-9) sets. For example: 'sha256$b5809d8a92f8858436d7e6b87c12ebc0ae1eac4baecc2c0b913aee2c922ef399' represents the result of calculating a SHA-256 hash on the string 'a@example.comKosher'. in which the email identifier 'a@example.com' is salted with 'Kosher'",
          "type": "string"
        },
        "identityType": {
          "description": "The identity type.",
          "$comment": "Origin: IdentifierTypeEnum (EnumExt)",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "ext:ACEId",
                "ext:CTId",
                "sourcedId",
                "systemId",
                "productId",
                "userName",
                "accountId",
                "emailAddress",
                "nationalIdentityNumber",
                "isbn",
                "issn",
                "lisSourcedId",
                "oneRosterSourcedId",
                "sisSourcedId",
                "ltiContextId",
                "ltiDeploymentId",
                "ltiToolId",
                "ltiPlatformId",
                "ltiUserId",
                "identifier"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "salt": {
          "description": "If the `identityHash` is hashed, this should contain the string used to salt the hash. If this value is not provided, it should be assumed that the hash was not salted.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "type",
        "hashed",
        "identityHash",
        "identityType"
      ],
      "additionalProperties": false
    },
    "Alignment": {
      "description": "Describes an alignment between an achievement and a node in an educational framework.",
      "type": "object",
      "properties": {
        "type": {
          "type": "array",
          "minItems": 1,
          "contains": {
            "enum": [
              "Alignment"
            ]
          },
          "items": {
            "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Alignment'.",
            "$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
            "type": "string"
          }
        },
        "targetCode": {
          "description": "If applicable, a locally unique string identifier that identifies the alignment target within its framework and/or targetUrl.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "targetDescription": {
          "description": "Short description of the alignment target.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "targetName": {
          "description": "Name of the alignment.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "targetFramework": {
          "description": "Name of the framework the alignment target.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "targetType": {
          "description": "The type of the alignment target node.",
          "$comment": "Origin: AlignmentTargetType (EnumExt); The type of the alignment target node in the target framework.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "ceasn:Competency",
                "ceterms:Credential",
                "CFItem",
                "CFRubric",
                "CFRubricCriterion",
                "CFRubricCriterionLevel",
                "CTDL",
                "ext:ACENationalGuide"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "targetUrl": {
          "description": "URL linking to the official description of the alignment target, for example an individual standard within an educational framework.",
          "$comment": "Origin: URL (DerivedType); A `URI` that represents a Uniform Resource Locator (URL).",
          "type": "string"
        }
      },
      "required": [
        "type",
        "targetName",
        "targetUrl"
      ],
      "additionalProperties": true
    },
    "RubricCriterionLevel": {
      "description": "Describes a rubric criterion level.",
      "type": "object",
      "properties": {
        "id": {
          "description": "The unique URI for this rubric criterion level. Required so a result can link to this rubric criterion level.",
          "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
          "type": "string"
        },
        "type": {
          "type": "array",
          "minItems": 1,
          "contains": {
            "enum": [
              "RubricCriterionLevel"
            ]
          },
          "items": {
            "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'RubricCriterionLevel'.",
            "$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
            "type": "string"
          }
        },
        "alignment": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Alignment"
          }
        },
        "description": {
          "description": "Description of the rubric criterion level.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "level": {
          "description": "The rubric performance level in terms of success.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "name": {
          "description": "The name of the rubric criterion level.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "points": {
          "description": "The points associated with this rubric criterion level.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "id",
        "type",
        "name"
      ],
      "additionalProperties": true
    }
  }
}

A.3 Revision History

This section is non-normative.

A.3.1 Version History

Version No. Release Date Comments
Working Document 1.0 July 8th, 2025 Initial proof of concept.
Candidate Final Public 1.0 October 9th, 2025 Candidate Final Public

B. References

B.1 Normative references

[FIPS-180-4]
FIPS PUB 180-4: Secure Hash Standard (SHS). U.S. Department of Commerce/National Institute of Standards and Technology. August 2015. National Standard. URL: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf
[ISO8601]
Representation of dates and times. ISO 8601:2004.. International Organization for Standardization (ISO). 2004. ISO 8601:2004. URL: http://www.iso.org/iso/catalogue_detail?csnumber=40874
[OB-30]
Open Badges Specification v3.0. 1EdTech. 1EdTech Final Release. URL: https://www.imsglobal.org/spec/ob/v3p0/
[OB-ACE-20-ERRATA]
Open Badges American Council of Education (ACE) Extension v1.0: Errata. URL: https://www.imsglobal.org/spec/ob-ace/v1p0/errata/
[RFC1321]
The MD5 Message-Digest Algorithm. R. Rivest. IETF. April 1992. Informational. URL: https://www.rfc-editor.org/rfc/rfc1321
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC4122]
A Universally Unique IDentifier (UUID) URN Namespace. P. Leach; M. Mealling; R. Salz. IETF. July 2005. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc4122
[XMLSCHEMA-2]
XML Schema Part 2: Datatypes Second Edition. Paul V. Biron; Ashok Malhotra. W3C. 28 October 2004. W3C Recommendation. URL: https://www.w3.org/TR/xmlschema-2/

C. List of Contributors

The following individuals contributed to the development of this document:

Name Organization Role
Xavi Aracil1EdtechEditor

1EdTech™ Consortium, Inc. ("1EdTech") is publishing the information contained in this document ("Specification") for purposes of scientific, experimental, and scholarly collaboration only.

1EdTech makes no warranty or representation regarding the accuracy or completeness of the Specification.

This material is provided on an "As Is" and "As Available" basis.

The Specification is at all times subject to change and revision without notice.

It is your sole responsibility to evaluate the usefulness, accuracy, and completeness of the Specification as it relates to you.

1EdTech would appreciate receiving your comments and suggestions.

Please contact 1EdTech through our website at www.1edtech.org

Please refer to Document Name: Open Badges American Council for Education (ACE) Extension 1.0

Date: October 9, 2025