Open Badges Specification
Spec Version 3.0
Document Version: | 1.2 |
Date Issued: | Dec 23, 2024 |
Status: | This document is made available for adoption by the public community at large. |
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/ |
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: 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) |
Arizona State University | June 21, 2022 | No | RF RAND (Required & Optional Elements) |
Temple University | June 10, 2022 | No | RF RAND (Required & Optional Elements) |
Credly | October 3, 2019 | No | RF RAND (Required & Optional Elements) |
Workday, Inc. | June 10, 2022 | No | RF RAND (Required & Optional Elements) |
RANDA Solutions | June 9, 2022 | No | RF RAND (Required & Optional Elements) |
Anthology | April 16, 2024 | No | RF RAND (Required & Optional Elements) |
Unicon | April 22, 2024 | No | RF RAND (Required & Optional Elements) |
Bowdoin College | June 11, 2022 | No | RF RAND (Required & Optional Elements) |
American Association of Collegiate Registrars and Admissions Officers (AACARO) | April 15, 2024 | No | RF RAND (Required & Optional Elements) |
Desire to Learn (D2L) | April 16, 2024 | No | RF RAND (Required & Optional Elements) |
Digital Knowledge EdTech Lab Inc. | April 24, 2024 | No | RF RAND (Required & Optional Elements) |
IQC Italian Quality Company | April 19, 2024 | No | RF RAND (Required & Optional Elements) |
Skybridge Skills | April 16, 2024 | No | RF RAND (Required & Optional Elements) |
Navigatr | April 25, 2024 | No | RF RAND (Required & Optional Elements) |
T3 Innovation Network, US Chamber of Commerce Foundation | April 25, 2024 | No | RF RAND (Required & Optional Elements) |
Territorium | April 23, 2024 | No | RF RAND (Required & Optional Elements) |
Western Governors University (WGU) | June 11, 2022 | No | RF RAND (Required & Optional Elements) |
Use of this specification to develop products or services is governed by the license with 1EdTech found on the 1EdTech 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 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 can be posted here: http://www.imsglobal.org/forums/ims-glc-public-forums-and-resources .
© 2024 1EdTech™ Consortium, Inc. All Rights Reserved.
Trademark information: http://www.imsglobal.org/copyright.html
Abstract
This specification is a new version of the 1EdTech Open Badges Specification that aligns with the conventions of the Verifiable Credentials Data Model v2.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.
The target readers for this document are:
- Business Leaders - the people who are responsible for identifying the business case for using verifiable digital credentials and badges
- Solution Architects - the people who are responsible for the definition and design of systems, applications, and tools that are to be used to issue, exchange, and verify digital credentials and badges
- Product Developers - the people who are adding functionality to issue, exchange, and verify digital credentials
The Open Badges Specification has several related documents and artifacts shown below. Together they make up the specification.
- Open Badges Specification v3.0 ([OB-30]) - The main Open Badges Specification document.
- Open Badges Implementation Guide v3.0 ([OB-IMPL-30]) - Provides information to lead you to successful implementation and certification of the Open Badges 3.0 specification.
- Open Badges Specification Conformance and Certification Guide v3.0 ([OB-CERT-30]) - Specifies the conformance tests and certification requirements for this 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.
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
All JSON Schema can be found in § E.2 JSON Schema. JSON Schema files for credential and API schema verification are available online:
- AchievementCredential JSON schema
- EndorsementCredential JSON schema
- GetOpenBadgeCredentialsResponse JSON schema
- Profile JSON schema
- Imsx_StatusInfo JSON schema
- AchievementCredential JSON schema (Verifiable Credential Data Model v1.1 compatible)
- EndorsementCredential JSON schema (Verifiable Credential Data Model v1.1 compatible)
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.
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 Assertion asserts a single achievement. A CLR asserts a collection of assertions, each of which asserts a single achievement.
Assertion: The core of both Open Badges and CLR is the assertion about achievement(s). 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.
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: A set of one or more claims made by an issuer. A verifiable credential is a tamper-evident credential that has authorship that can be cryptographically verified. Verifiable credentials can be used to build verifiable presentations, which can also be cryptographically verified.
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-2.0]
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]
Defined Achievement Claim: An assertion that the learner achieved a specific achievement.
DID URL: A DID plus any additional syntactic component that conforms to the definition in Section 3.2 DID URL Syntax of [DID-CORE]. This includes an optional DID path (with its leading / character), optional DID query (with its leading ? character), and optional DID fragment (with its leading # character).
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.
Linked Data Proof: A type of embedded signature proof.
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]
Presentation: Data derived from one or more verifiable credentials, issued by one or more issuers, that is shared with a specific verifier. A verifiable presentation is a tamper-evident presentation encoded in such a way that authorship of the data can be trusted after a process of cryptographic verification.
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: Measurable or observable knowledge, skill, or ability necessary to successful performance of a person.
Skill Assertion: An assertion that contains a "skill result."
Skill Claim: An assertion that the learner has the specified skill.
Subject: A person about which claims are made.
Validation: The process of assuring the verifiable credential or verifiable presentation meets the needs of the verifier and other dependent stakeholders. Validating verifiable credentials or verifiable presentations is outside the scope of this specification.
Verifiable Credential (VC): A tamper-evident credential whose issuer can be cryptographically verified. See [vc-data-model-2.0].
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-2.0]
Verification: The evaluation of 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.
Verifier: The entity that receives a verifiable credential or verifiable presentation and verifies the credential or presentation has not been tampered with.
This conceptual model describes Open Badges concepts and the relationship between those concepts. The data model in appendix § B.1 Credential Data Models 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 v2.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").
- I, issuer assert a claim about this Credential Subject that may describe an achievement, experience, membership, etc.,
- The assertion provides the identity of the issuer, issuance date, and instructions on how to cryptographically prove the issuer identity and that the assertion and claim contents have not been tampered with since issuance.
- The claim must contain a single Credential Subject which identifies the recipient of the Open Badge.
- The claim may also contain: evidence of the achievement, and other properties supporting the achievement description.
- The Achievement description is described using properties that may be shared with the CLR including, name, description, criteria, etc.
- The assertion provides the identity of the issuer, issuance date, and instructions on how to cryptographically prove the issuer identity and that the assertion and claim contents have not been tampered with since issuance.
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.
These layers of cryptographic proof can provide security and privacy enhancements to Open Badges that were not available in version 2.0. Adoption of Verifiable Credentials will 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 will 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) v1.0, unlocks increased longevity and resilience of Open Badges that can describe achievements even more expressively than they do today.
This specification changes the structure of the Open Badges Assertion class, to adopt the conventions of the Verifiable Credentials Data Model v2.0. This means that badges issued under this specification will not be conformant to all of the existing 2.x data model requirements.
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.
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 specification opens a path forward for a unified concept of digital credentials in the 1EdTech community, collapsing the relevant differences between Open Badges and Comprehensive Learner Record (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 CLR.
Below, we present a selection of benefits related to this 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 previous versions 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 [OB-20] as a "Host". There is an existing and growing ecosystem of deployed technology to support VCs; integration with these becomes possible with this specification. 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.
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.
2.3.2 Verifiable Credentials Support Increases Learner Data Privacy and Trustworthiness of Open Badges
The Verifiable Credentials Data Model v2.0 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 1EdTech 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 will allow 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 issue 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 v2.0 was released in 2018. 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) [DID-CORE] 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 has been 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 [OB-30] and [CLR-20] 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.
The core claim enabled by Open Badges v3.0 is that of the AchievementCredential, a Verifiable Credential that makes the claim that a subject (usually a learner), has met criteria an issuer has defined for a named Achievement. Standardizing this method of recognizing an achievement allows for issuers across the education and employment ecosystem to create Verifiable Credentials with consistent properties, so that wallets and verifiers can build broadly reusable software to interpret a wide range of use cases that fit into the defined achievement model. Verifiers of AchievementCredentials that are aware of a specific defined achievement SHOULD ensure that the issued AchievementCredential is issued by an issuer they trust to recognize this achievement, usually the creator of the achievement.
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 was 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 can take advantage of the Verifiable Credentials Data Model to do more. Conveniently, an issuer property for the entity that is digitally signing the credential is included in the VC assertion. We may now separate the issuer from the creator of the Achievement/BadgeClass itself, and in the near term, we may open up use cases for creators to offer verifiable delegation of responsibility for achievement credential issuance. This will enable the use cases and give relying third-parties more contextual information about the achievement and the parties involved. When an Achievement does not include a reference to its creator, verifiers SHOULD interpret it as an entity associated with the credential issuer. Verifiers SHOULD ensure that they trust a particular credential's issuer to recognize the accomplishments described by the Achievement it contains. Verifiers SHOULD NOT trust that an issuer has accurately represented the creator or data of an achievement definition within a credential when that entity is authored by another party, but SHOULD understand that the data within the credential is the data the issuer wished to recognize, even if the verifier encounters a different representation of that data elsewhere.
Many of the use cases for Open Badges and CLR involve an issuer's own "defined achievements", where an issuer bundles the details of an educational opportunity, assessment, and criteria they offer using the Achievement data class. In previous versions of Open Badges, the creator of an Achievement (known as a "BadgeClass") was the only entity that could issue it, but in v3.0, the door opens to many issuers recognizing the same achievement based on their own assessment. This practice of shared achievements enables skill assertions, where multiple issuers use a shared achievement definition to recognize achievement of a skill with each issuer doing their own assessment. In addition, further recording of related skills, competencies, standards, and other associations are enabled by the alignment
of an Achievement.
A Skill Assertion is an AchievementCredential asserting a subject holds an Achievement that is used by multiple issuers to recognize the same skill. The content of the Achievement, often with achievementType
"Competency", is not specific to a learning opportunity or assessment offered by one specific provider only, but is designed to be generic to allow for assessment by any issuer. Verifiers of AchievementCredentials who are looking for a holder to demonstrate a specific Achievement SHOULD ensure that they trust the issuer of a credential to make this claim, because a credential may be considered valid as issued by any issuer, including self-issuance by the subject.
This section is non-normative.
The use cases below drive the design of Open Badges 3.0 specification.
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:
- Community college creates badge for course completion
- Maya completes the course
- Maya downloads and installs a VC enabled digital wallet
- Maya has an identifier she uses for educational badges
- Maya is able to connect her wallet to the community college's issuing platform (assuming community college is using a platform) through authentication with the platform
- The community college has established an issuer profile, relevant cryptographic keys, and has published an Achievement corresponding to completion of the "Introduction to Web QA" course.
- Maya has provided an identifier to the college that it has accepted (or controls an identifier that the college has assigned to her)
Flow of Events:
- Maya completes course requirements, receives a grade and is marked as complete for the "Introduction to Web QA" course.
- Maya provides or selects an identifier to use as her identifier for badges while enrolled at the community college, and proves the identifier represents her to the college if necessary, and through mechanisms appropriate to the identifier type.
- The community college issues an assertion of the previously defined achievement to Maya's identifier and cryptographically signs it
- Maya accepts the credential into her wallet.
Alternative Flows:
- The badge is issued to a parent or guardian of the recipient
- The school has Maya's parent or guardian identifier on record
- Maya completes the course
- The school issues an assertion to the parent or guardian identifier
- The parent or guardian accepts the credential into their wallet
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:
- Dawson is authenticated, associated with a particular email address to the vendor's platform.
- The vendor has established an issuer profile, defined an Achievement and has the capability to create and deliver assertions to Dawson via Badge Connect
Flow of Events:
- Dawson authenticates to the vendor platform, proving control of a chosen email address.
- Dawson connects a Badge Connect backpack to the vendor platform, resulting in the platform holding an auth token on his behalf scoped to allow pushing assertions to his backpack.
- Dawson engages with a learning opportunity, gains new knowledge, skills, and abilities, and successfully completes an assessment demonstrating mastery of a specific competency.
- Training, Inc. creates an assertion of the achievement that recognizes the competency.
- Training, Inc. transmits the assertion to Dawson's backpack via Badge Connect API.
Alternative Flows:
- Training, Inc. bakes the assertion into a PNG or SVG image file and transmits the image to Dawson who imports the baked badge into his backpack
- Training, Inc. encodes the assertion into a QR code transmits the QR code to Dawson who uses the backpack to scan the QR code and import the assertion
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:
- Maya completed prerequisite course
- Issuer issued a verifiable assertion (i.e. completion of prerequisite course) to Maya
- Maya has a VC-compatible wallet
- Maya has received the VC representing her competion of the prerequisite course
- The MOOC is capable of receiving the verifiable presentation of the badge
Flow of Events:
- Maya authenticates to the MOOC platform
- The MOOC platform requests a credential matching a certain criteria (completion of a prerequisite course option)
- Maya prepares and transmits a presentation of her assertion to the MOOC platform
- The MOOC platform verifies the assertion is valid and fitting its needs
- The MOOC platform grants the authenticated user Maya access to the advanced course
Points of Failure:
- Maya's wallet and the MOOC platform must be capable of establishing a transmission channel for the assertion.
- The MOOC platform must be capable of expressing a request for a credential that matches the assertion that Maya holds.
- There must be a mutual capability between the wallet and the MOOC platform to prove Maya's is represented by recipient identifier
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.
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.
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.
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.
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.
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.
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.
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:
- Issuer creates a badge class
- Issuer issues a credential to a subject
- Credential references a revocation list
- Uses the credentialStatus property
- OB 3.0 standard comes to consensus on what to use
- Issuer has access to a revocation list to update
- Verification process of badge credentials checks associated list
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.
The Open Badges Implementation Guide v3.0 contains non-normative information on how to implement OB 3.0 and CLR 2.0.
Open Badges Specification Conformance and Certification Guide v3.0 - Specifies the conformance tests and certification requirements for this specification.
OpenBadgeCredentials can be exchanged as documents as defined in this section, or by using the Open Badges 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:
- The contents of the file MUST represent exactly one OpenBadgeCredential
- The OpenBadgeCredential MUST be serialized as JSON and JSON-LD (see § A. Serialization)
- JSON exchanged between systems that are not part of a closed ecosystem MUST be encoded using UTF-8 [RFC3629].
{
"@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"
],
"id": "http://example.edu/credentials/3732",
"type": ["VerifiableCredential", "OpenBadgeCredential"],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": ["Profile"],
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"name": "Example University Degree",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": ["AchievementSubject"],
"achievement": {
"id": "https://example.com/achievements/21st-century-skills/teamwork",
"type": ["Achievement"],
"criteria": {
"narrative": "Team members are nominated for this badge by their peers and recognized upon review by Example Corp management."
},
"description": "This badge recognizes the development of the capacity to collaborate within a group environment.",
"name": "Teamwork"
}
},
"credentialSchema": [{
"id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredential_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" ], "id": "http://example.edu/credentials/3732", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "issuer": { "id": "https://example.edu/issuers/565049", "type": [ "Profile" ], "name": "Example University" }, "validFrom": "2010-01-01T00:00:00Z", "name": "Example University Degree", "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", "type": [ "AchievementSubject" ], "achievement": { "id": "https://example.com/achievements/21st-century-skills/teamwork", "type": [ "Achievement" ], "criteria": { "narrative": "Team members are nominated for this badge by their peers and recognized upon review by Example Corp management." }, "description": "This badge recognizes the development of the capacity to collaborate within a group environment.", "name": "Teamwork" } }, "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" } ], "proof": [ { "type": "DataIntegrityProof", "created": "2024-12-23T10:54:14Z", "verificationMethod": "https://example.edu/issuers/565049#z6MkevCo7JVbQxBW1YgPA4JFGMPaxHZZqSNEyoSF9WDoQE7e", "cryptosuite": "eddsa-rdfc-2022", "proofPurpose": "assertionMethod", "proofValue": "z2kyHMLt6Mt2Mj66eG5oq4roEGsSJ4qomwpFfwwfa6DmQzqnzNBpr6Co2FLU3zExUvJLhp7jvBLQoqAnwjDdqu5Ss" } ] }
---------------- JWT header --------------- { "alg": "RS256", "typ": "JWT", "jwk": { "e": "AQAB", "kty": "RSA", "n": "rNczEGou3w9tbNXUtzFeiZDcKJrCHJ9jEKnjlXaJ5xH5eGi2qcP8M6XqKUNRXB6VD-A2Sq GehdR7liZG_bvfPlMxlcWgLW9sY0N6BNxrk9U85xyK1jJgAkGqyhnzElunE3Dq6Nurr09LDwE08aF5wg 6pViX5KfdCSC7wtFEx734WbqaQplvIcErgslRPa2KuzG5kLmWTUj3tPfg4YmbUZ6uoOsGKRS46c9zkv5 mhZ0rUzXXTlJc9outVgfajlWJDt8oiR4rRBJV4-RLqCd9dsO3My5ma-cDGntUff7kKfhN-cwSev6y3aM Ume7u4VhE00dmcEGX9RYorUuj2LOPhpw" } } --------------- 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" ], "id": "http://example.edu/credentials/3732", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "issuer": { "id": "https://example.edu/issuers/565049", "type": [ "Profile" ], "name": "Example University" }, "validFrom": "2010-01-01T00:00:00Z", "name": "Example University Degree", "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", "type": [ "AchievementSubject" ], "achievement": { "id": "https://example.com/achievements/21st-century-skills/teamwork", "type": [ "Achievement" ], "criteria": { "narrative": "Team members are nominated for this badge by their peers a nd recognized upon review by Example Corp management." }, "description": "This badge recognizes the development of the capacity to c ollaborate within a group environment.", "name": "Teamwork" } }, "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achieve mentcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" } ], "iss": "https://example.edu/issuers/565049", "jti": "http://example.edu/credentials/3732", "sub": "did:example:ebfeb1f712ebc6f1c276e12ec21" } --------------- JWT --------------- eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4i OiJyTmN6RUdvdTN3OXRiTlhVdHpGZWlaRGNLSnJDSEo5akVLbmpsWGFKNXhINWVHaTJxY1A4TTZYcUtV TlJYQjZWRC1BMlNxR2VoZFI3bGlaR19idmZQbE14bGNXZ0xXOXNZME42Qk54cms5VTg1eHlLMWpKZ0Fr R3F5aG56RWx1bkUzRHE2TnVycjA5TER3RTA4YUY1d2c2cFZpWDVLZmRDU0M3d3RGRXg3MzRXYnFhUXBs dkljRXJnc2xSUGEyS3V6RzVrTG1XVFVqM3RQZmc0WW1iVVo2dW9Pc0dLUlM0NmM5emt2NW1oWjByVXpY WFRsSmM5b3V0VmdmYWpsV0pEdDhvaVI0clJCSlY0LVJMcUNkOWRzTzNNeTVtYS1jREdudFVmZjdrS2Zo Ti1jd1NldjZ5M2FNVW1lN3U0VmhFMDBkbWNFR1g5UllvclV1ajJMT1BocHcifX0.eyJAY29udGV4dCI6 WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv YmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIiwiaHR0cHM6Ly9wdXJsLmltc2ds b2JhbC5vcmcvc3BlYy9vYi92M3AwL2V4dGVuc2lvbnMuanNvbiJdLCJpZCI6Imh0dHA6Ly9leGFtcGxl LmVkdS9jcmVkZW50aWFscy8zNzMyIiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIk9wZW5C YWRnZUNyZWRlbnRpYWwiXSwiaXNzdWVyIjp7ImlkIjoiaHR0cHM6Ly9leGFtcGxlLmVkdS9pc3N1ZXJz LzU2NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdLCJuYW1lIjoiRXhhbXBsZSBVbml2ZXJzaXR5In0sInZh bGlkRnJvbSI6IjIwMTAtMDEtMDFUMDA6MDA6MDBaIiwibmFtZSI6IkV4YW1wbGUgVW5pdmVyc2l0eSBE ZWdyZWUiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2 ZjFjMjc2ZTEyZWMyMSIsInR5cGUiOlsiQWNoaWV2ZW1lbnRTdWJqZWN0Il0sImFjaGlldmVtZW50Ijp7 ImlkIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9hY2hpZXZlbWVudHMvMjFzdC1jZW50dXJ5LXNraWxscy90 ZWFtd29yayIsInR5cGUiOlsiQWNoaWV2ZW1lbnQiXSwiY3JpdGVyaWEiOnsibmFycmF0aXZlIjoiVGVh bSBtZW1iZXJzIGFyZSBub21pbmF0ZWQgZm9yIHRoaXMgYmFkZ2UgYnkgdGhlaXIgcGVlcnMgYW5kIHJl Y29nbml6ZWQgdXBvbiByZXZpZXcgYnkgRXhhbXBsZSBDb3JwIG1hbmFnZW1lbnQuIn0sImRlc2NyaXB0 aW9uIjoiVGhpcyBiYWRnZSByZWNvZ25pemVzIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgY2FwYWNpdHkg dG8gY29sbGFib3JhdGUgd2l0aGluIGEgZ3JvdXAgZW52aXJvbm1lbnQuIiwibmFtZSI6IlRlYW13b3Jr In19LCJjcmVkZW50aWFsU2NoZW1hIjpbeyJpZCI6Imh0dHBzOi8vcHVybC5pbXNnbG9iYWwub3JnL3Nw ZWMvb2IvdjNwMC9zY2hlbWEvanNvbi9vYl92M3AwX2FjaGlldmVtZW50Y3JlZGVudGlhbF9zY2hlbWEu anNvbiIsInR5cGUiOiIxRWRUZWNoSnNvblNjaGVtYVZhbGlkYXRvcjIwMTkifV0sImlzcyI6Imh0dHBz Oi8vZXhhbXBsZS5lZHUvaXNzdWVycy81NjUwNDkiLCJqdGkiOiJodHRwOi8vZXhhbXBsZS5lZHUvY3Jl ZGVudGlhbHMvMzczMiIsInN1YiI6ImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMy MSJ9.JOz6iFOnoJSQ9XotDQJNPd_w5Chty8Xzoh76lBFBI9hiBBC3PZpikUZ4nJZxeMDRws_qxDOvmMf 89Iri6f1_x1vmcfP8BHXcCnp0gn60Fp__MhFtUVKO3U8z39SxrfyaTwNM0svCWNW2y72dS_9tEJquUPW weDghctXI7Ia4v9vIFtGQrqhJqRjQH7ND2g52uon39PZj_a6DYRxMbCtDAYglQqVr51DE-eGpLgc_8P7 Q_bgpxPa21GEuZ-xUkIVr6OGGXRTA6OvjvTcf313gFkBS0c0dP8snHqEnyO_bdBrv3UwHiz5rzb0XzXR BxvRLVySRI8SMkaLN-t8sf-z9FA
If the credential is signed using the § 8.2 JSON Web Token Proof Format (VC-JWT) the contents of the file MUST be the Compact JWS string formed as a result of signing the OpenBadgeCredential with VC-JWT. The file extension SHOULD be ".jws" or ".jwt".
If an embedded proof method is used instead, the contents of the file MUST be the JSON representation of the OpenBadgeCredential. The file extension SHOULD be ".json".
If the credential is signed using the § 8.2 JSON Web Token Proof Format (VC-JWT) the contents of the response MUST be the Compact JWS string formed as a result of signing the OpenBadgeCredential with VC-JWT. The Content-Type
SHOULD be text/plain
.
If an embedded proof method is used instead, the contents of the response MUST be the JSON representation of the OpenBadgeCredential. The Content-Type
SHOULD be application/vc+ld+json
, although generic representations such application/ld+json
or application/json
are also allowed.
OpenBadgeCredentials may be exchanged as image files with the credential encoded (baked) within. This allows the credential to be portable wherever image files may be stored or displayed.
"Baking" is the process of taking an OpenBadgeCredential and embedding it into the image, so that when a user displays the image on a page, software that is Open Badges aware can automatically extract that OpenBadgeCredential 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 [PNG] or SVG [SVG11] format in order to support baking.
An iTXt
chunk should be inserted into the PNG with keyword openbadgecredential
.
If the credential is signed using the § 8.2 JSON Web Token Proof Format (VC-JWT) the text value of the chunk MUST be the Compact JWS string formed as a result of signing the OpenBadgeCredential with VC-JWT. Compression MUST NOT be used.
var chunk = new iTXt({
keyword: 'openbadgecredential',
compression: 0,
compressionMethod: 0,
languageTag: '',
translatedKeyword: '',
text: 'header.payload.signature'
})
If an embedded proof method is used instead, the text value of the chunk MUST be the JSON representation of the OpenBadgeCredential. Compression MUST NOT be used.
var chunk = new iTXt({
keyword: 'openbadgecredential',
compression: 0,
compressionMethod: 0,
languageTag: '',
translatedKeyword: '',
text: '{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
],
"id": "http://example.edu/credentials/3732",
"type": ["VerifiableCredential", "OpenBadgeCredential"],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": "Profile",
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21"
},
"proof": { }
}'
})
An iTXt chunk with the keyword openbadgecredential
MUST NOT appear in a PNG more than once. When baking an image that already contains credential data, the implementer 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 openbadgecredential
. The rest of the stream can be safely discarded. The text portion of the iTXt will either be the JSON representation of a § B.1.2 AchievementCredential or the Compact JWS string that was the result of signing the OpenBadgeCredential with § 8.2 JSON Web Token Proof Format.
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:credential>
tag.
If the credential is signed using the § 8.2 JSON Web Token Proof Format (VC-JWT) add a verify
attribute to the <openbadges:credential>
tag. The value of verify
attribute MUST be the Compact JWS string formed as a result of signing the OpenBadgeCredential with VC-JWT.
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:openbadges="https://purl.imsglobal.org/ob/v3p0"
viewBox="0 0 512 512">
<openbadges:credential verify="header.payload.signature"></openbadges:credential>
<!-- rest-of-image -->
</svg>
If an embedded proof method is used instead, omit the verify
attribute, and the JSON representation of the OpenBadgeCredential 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:openbadges="https://purl.imsglobal.org/ob/v3p0"
viewBox="0 0 512 512">
<openbadges:credential>
<![CDATA[
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
],
"id": "http://example.edu/credentials/3732",
"type": ["VerifiableCredential", "OpenBadgeCredential"],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": "Profile",
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21"
},
"proof": { }
}
]]>
</openbadges:credential>
<!-- rest-of-image -->
</svg>
There MUST be only one <openbadges:credential>
tag in an SVG. When baking an image that already contains OpenBadgeCredential data, the implementer may choose whether to pass the user an error or overwrite the existing tag.
Parse the SVG until you reach the first <openbadges:credential>
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.
The API defined here is intended for Clients and servers that give individual users control over access to their resources. While system-to-system bulk transfers using OAuth 2.0 Client-Credentials Grant are expected to occur, it is out of scope for this version of the specification to define. Future versions of this specification may add explicit support for OAuth 2.0 Client-Credentials Grant.
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.
- User
- This is the user that owns the resources (badges) that are on the resource server. Also called a Resource Owner.
- Web Browser
- This is the web browser the user interacts with.
- Client
- This is the web application that interacts with the resource server on behalf of the user. Also called Consumer in the IMS Global Security Framework v1.1.
- Authorization Server
- This is a server that implements the OAuth 2.0 endpoints on behalf of the resource server. In many systems, the authorization server and the resource server are combined.
- Resource Server
- This is the server that has the protected resources (badges). Also called Provider in the IMS Global Security Framework v1.1.
The role of each component during Registration, Obtaining Tokens, and Authenticating with Tokens are described below.
These endpoints are used to exchange OpenBadgeCredentials and Profile information.
All secure endpoint requests MUST be made over secure TLS 1.2 or 1.3 protocol.
All of the Secure REST 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 |
---|---|
getCredentials |
https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.readonly
- Permission to read OpenBadgeCredentials for the authenticated
entity.
|
upsertCredential |
https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.upsert
- Permission to create or update OpenBadgeCredentials for the
authenticated entity.
|
getProfile |
https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.readonly
- Permission to read the profile for the authenticated entity.
|
putProfile |
https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.update
- Permission to update the profile for the authenticated entity.
|
Get issued OpenBadgeCredentials from the resource server for the supplied parameters and access token.
GET /ims/ob/v3p0/credentials?limit={limit}&offset={offset}&since={since}
Parameter | Parameter Type | Description | Required |
---|---|---|---|
limit
(query)
|
PositiveInteger | The maximum number of OpenBadgeCredentials to return per page. | Optional |
offset
(query)
|
NonNegativeInteger | The index of the first AchievementCredential to return. (zero indexed) | Optional |
since
(query)
|
DateTime | Only include OpenBadgeCredentials issued after this timestamp. | Optional |
Status Code | Content-Type Header | Content Type | Content Description | Content Required |
---|---|---|---|---|
200 | application/json | GetOpenBadgeCredentialsResponse | The set of OpenBadgeCredentials that meet the request parameters. Paging applies to the total number of OpenBadgeCredentials in the response. | Required |
400 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. | Required |
401 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. | Required |
403 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. | Required |
405 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the server does not allow the method. | Required |
500 | application/json | Imsx_StatusInfo | As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. | Required |
DEFAULT | application/json | Imsx_StatusInfo | The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. | Required |
GET /ims/ob/v3p0/credentials=2&offset=0 HTTP/1.1
Host: example.edu
Authorization: Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
Accept: application/json
HTTP/1.1 200 OK
Content-Type: application/ld+json
X-Total-Count: 1
Link: <https://www.imsglobal.org/ims/ob/v3p0/credentials?limit=2&offset=1>; rel="next",
<https://www.imsglobal.org/ims/ob/v3p0/credentials?limit=2&offset=0>; rel="last",
<https://www.imsglobal.org/ims/ob/v3p0/credentials?limit=2&offset=0>; rel="first",
<https://www.imsglobal.org/ims/ob/v3p0/credentials?limit=2&offset=0>; rel="prev"
{
"compactJwsStrings": [
"header.payload.signature",
"header.payload.signature"
]
}
Create or replace an AchievementCredential on the resource server, appending it to the list of credentials for the subject, or replacing an existing entry in that list. The resource server SHOULD use the credential equality and comparison algorithm to compare and determine initial equality. The response code makes clear whether the operation resulted in a replacement or an insertion.
POST /ims/ob/v3p0/credentials
Content-Type Header | Content Type | Content Description | Content Required |
---|---|---|---|
application/json | AchievementCredential |
If the AchievementCredential is not signed with the VC-JWT Proof Format, the request body MUST be a AchievementCredential and the Content-Type MUST be application/vc+ld+json or application/json .
|
Required |
text/plain | CompactJws |
If the AchievementCredential is signed with the VC-JWT Proof Format, the request body MUST be a CompactJws string and the Content-Type MUST be text/plain .
|
Required |
Status Code | Content-Type Header | Content Type | Content Description | Content Required |
---|---|---|---|---|
200 | application/json | AchievementCredential |
The AchievementCredential was successfully replaced on the resource server. The response body MUST be the AchievementCredential in the request.
If the AchievementCredential is not signed with the VC-JWT Proof Format, the response body MUST be a AchievementCredential and the Content-Type MUST be application/vc+ld+json or application/json .
|
Required |
200 | text/plain | CompactJws |
The AchievementCredential was successfully replaced on the resource server. The response body MUST be the AchievementCredential in the request.
If the AchievementCredential is signed with the VC-JWT Proof Format, the response body MUST be a CompactJws string and the Content-Type MUST be text/plain .
|
Required |
201 | application/json | AchievementCredential |
The AchievementCredential was successfully created on the resource server. The response body MUST be the AchievementCredential in the request.
If the AchievementCredential is not signed with the VC-JWT Proof Format, the response body MUST be a AchievementCredential and the Content-Type MUST be application/vc+ld+json or application/json .
|
Required |
201 | text/plain | CompactJws |
The AchievementCredential was successfully created on the resource server. The response body MUST be the AchievementCredential in the request.
If the AchievementCredential is signed with the VC-JWT Proof Format, the response body MUST be a CompactJws string and the Content-Type MUST be text/plain .
|
Required |
304 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that there is no need for the server to transfer a representation of the target resource because the request indicates that the client, which made the request conditional, already has a valid representation. | Required |
400 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. | Required |
401 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. | Required |
403 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. | Required |
404 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. | Required |
405 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the server does not allow the method. | Required |
500 | application/json | Imsx_StatusInfo | As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. | Required |
DEFAULT | application/json | Imsx_StatusInfo | The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. | Required |
POST /ims/ob/v3p0/credentials HTTP/1.1
Host: example.edu
Authorization: Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
Accept: text/plain
Content-Type: text/plain
header.payload.signature
HTTP/1.1 200 OK
Content-Type: text/plain
header.payload.signature
Fetch the profile from the resource server for the supplied access token. Profiles that are received MAY contain attributes that a Host SHOULD authenticate before using in practice.
GET /ims/ob/v3p0/profile
Status Code | Content-Type Header | Content Type | Content Description | Content Required |
---|---|---|---|---|
200 | application/json | Profile | The matching profile. | Required |
404 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. | Required |
400 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. | Required |
401 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. | Required |
403 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. | Required |
405 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the server does not allow the method. | Required |
500 | application/json | Imsx_StatusInfo | As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. | Required |
DEFAULT | application/json | Imsx_StatusInfo | The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. | Required |
GET /ims/ob/v3p0/profile HTTP/1.1
Host: example.edu
Authorization: Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
Accept: application/json
HTTP/1.1 200 OK
Content-Type: application/json
{
"@context": [
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
],
"type": "Profile",
"id": "https://example.edu/issuers/565049",
"name": "Example University"
}
Update the profile for the authenticate entity.
PUT /ims/ob/v3p0/profile
Content-Type Header | Content Type | Content Description | Content Required |
---|---|---|---|
application/json | Profile | The request MUST include the entire Profile object. The 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 resource server cannot validate telephone numbers. | Required |
Status Code | Content-Type Header | Content Type | Content Description | Content Required |
---|---|---|---|---|
200 | application/json | Profile | The matching profile. Successful request responses will 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 value). The values may never become part of the published profile. | Required |
202 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the request has been accepted for processing, but the processing has not been completed. | Required |
304 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that there is no need for the server to transfer a representation of the target resource because the request indicates that the client, which made the request conditional, already has a valid representation. | Required |
400 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. | Required |
401 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. | Required |
403 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. | Required |
404 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. | Required |
405 | application/json | Imsx_StatusInfo | As defined in [rfc9110], indicating that the server does not allow the method. | Required |
500 | application/json | Imsx_StatusInfo | As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. | Required |
DEFAULT | application/json | Imsx_StatusInfo | The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. | Required |
PUT /ims/ob/v3p0/profile HTTP/1.1
Host: example.edu
Authorization: Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
Accept: application/json
Content-Type: application/json
{
"@context": [
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
],
"type": "Profile",
"id": "https://example.edu/issuers/565049",
"name": "Example University",
"phone": "111-222-3333"
}
{
"@context": [
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
],
"type": "Profile",
"id": "https://example.edu/issuers/565049",
"name": "Example University",
"phone": "111-222-3333"
}
Access to the discovery endpoint MUST NOT be protected. The Service Description Document (SDD) MUST be provided over HTTPS with TLS 1.2 or 1.3.
Fetch the Service Description Document from the resource server.
GET /ims/ob/v3p0/discovery
Status Code | Content-Type Header | Content Type | Content Description | Content Required |
---|---|---|---|---|
200 | application/json | ServiceDescriptionDocument | The service discovery document. | Required |
DEFAULT | application/json | Imsx_StatusInfo | The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. | Required |
GET /ims/ob/v3p0/discovery HTTP/1.1
Host: example.edu
Accept: application/json
HTTP/1.1 200 OK
Content-Type: application/json
...
"components": {
"securitySchemes": {
"OAuth2ACG": {
"type": "oauth2",
"description": "OAuth 2.0 Authorization Code Grant authorization",
"x-imssf-name": "Example Provider",
"x-imssf-privacyPolicyUrl": "provider.example.com/privacy",
"x-imssf-registrationUrl": "provider.example.com/registration",
"x-imssf-termsOfServiceUrl": "provider.example.com/terms",
"flows": {
"authorizationCode": {
"tokenUrl": "provider.example.com/token",
"authorizationUrl": "provider.example.com/authorize",
"refreshUrl": "provider.example.com/token",
"scopes": {
"https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.readonly" : "...",
"https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.upsert" : "...",
"https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.readonly" : "...",
"https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.update" : "..."
}
}
}
}
},
"schemas": {
...
}
}
...
Pagination of getCredentials
results is controlled by two query
string parameters appended to the request. The response includes the following
pagination headers.
Response Header | Description | 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 credentials 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. |
Resource Servers 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 user 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).
The Open Badges API endpoints use the methods outlined in Section 4, "Securing Web Services" of the IMS Global Security Framework v1.1. Clients and servers that give individual users control over access to their resources MUST use the OAuth 2.0 Authorization Code Grant method.
The API defined here is intended for Clients and servers that give individual users control over access to their resources. While system-to-system bulk transfers using OAuth 2.0 Client-Credentials Grant are expected to occur, it is out of scope for this version of the specification to define. Future versions of this specification may add explicit support for OAuth 2.0 Client-Credentials Grant.
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.1edtech.org
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%2credential.readonly
If valid and authorized, the authorization server issues a new access token and optionally a new refresh token as described earlier in § 7.1.2.4 Access Token Response. If the request failed verification or is invalid, the authorization server returns an error response as described earlier in § 7.1.2.4.1 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.1edtech.org
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 § 7.1.2.4.1 Access Token Error Response with an error
code of "unsupported_token_type".
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 in the Implementation Guide.
The proof formats included in this specification fall into two categories:
- JSON Web Token Proof - Sometimes called VC-JWT, this format has a single implementation: the credential is encoded into a JWT which is then signed and encoded as a JWS. The JSON Web Token proof is called an external proof because the proof wraps the credential object.
- Linked Data Proofs - The credential is signed and the signature is used to form a Proof object which is appended to the credential. This format supports many different proof types. These are called embedded proofs because the proof is embedded in the data.
A third category of proof format called Non-Signature Proof is not covered by this specification. This category includes proofs such as proof of work.
This proof format relies on the well established JWT (JSON Web Token) [RFC7519] and JWS (JSON Web Signature) [RFC7515] specifications. A JSON Web Token Proof is a JWT signed and encoded as a Compact JWS string. The proof format is described in detail in [VC-JOSE-COSE], referred from Section 5.13 "Securing Mechanism Specifications" of Verifiable Credentials Data Model v2.0. That description allows several options which may inhibit interoperability. This specification limits the options while maintaining compatibility with [VC-DATA-MODEL-2.0] to help ensure interoperability.
Some of the terms used in this section include:
- JWT - "JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted." [RFC7519]
- JWS - "JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification." [RFC7515]
- JWK - "A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key." [RFC7517]
- Compact JWS - "A compact representation of a JWS." [RFC7515]
A JWS is a signed JWT with three parts separated by period (".") characters. Each part contains a base64url-encoded value.
- JOSE Header - Describes the cryptographic operations applied to the JWT and optionally, additional properties of the JWT. [RFC7515]
- JWT Payload - The JSON object that will be signed. In this specification, the JWT Payload includes the OpenBadgeCredential.
- JWS Signature - The computed signature of the JWT Payload.
The JOSE Header, JWT Payload, and JWS Signature are combined to form a Compact JWS. To transform a credential into a Compact JWS takes 4 steps:
- Create the JOSE Header, specifying the signing algorithm to use
- Create the JWT Payload from the credential to be signed
- Compute the signature of the JWT Payload
- Encode the resulting JWS as a Compact JWS
The resulting JWS proves that the issuer signed the JWT Payload turning the credential into a verifiable credential.
When using the JSON Web Token Proof Format, the proof
property MAY be omitted from the OpenBadgeCredential. If a Linked Data Proof is also provided, it MUST be created before the JSON Web Token Proof Format is created.
The JOSE Header is a JSON object with the following properties (also called JOSE Headers). Additional JOSE Headers are NOT allowed.
Property / JOSE Header | Type | Description | Required? |
---|---|---|---|
alg |
String | The signing algorithm MUST be "RS256" as a minimum as defined in [RFC7518]. Support for other algorithms is permitted but their use limits interoperability. Later versions of this specification MAY add OPTIONAL support for other algorithms. See Section 6.1 RSA Key of the IMS Global Security Framework v1.1. | Required |
kid |
URI | A URI that can be dereferenced to an object of type JWK representing the public key used to verify the signature. If you do not include a kid property in the header, you MUST include the public key in the jwk property. Be careful not to accidentally expose the JWK representation of a private key. See RFC7517 for examples of private key representations. The JWK MUST never contain "d" . |
Optional |
jwk |
JWK | A JWK representing the public key used to verify the signature. If you do not include a jwk property in the header, you MUST include the kid property. Be careful not to accidentally expose the JWK representation of a private key. See RFC7517 for examples of private key representations. The JWK MUST never contain "d" . |
Optional |
typ |
String | If present, MUST be set to "JWT". | Optional |
{
"alg": "RS256",
"kid": "https://example.edu/keys#key-1",
"typ": "JWT"
}
If you are going to use both external and embedded proof formats, add the embedded proofs prior to creating the JWT Payload.
The JWT Payload is the JSON object of the OpenBadgeCredential with the following properties (JWT Claims). Additional standard JWT Claims Names are allowed, but their relationship to the credential is not defined.
Property / Claim Name | Type | Description | Required? |
---|---|---|---|
exp |
NumericDate | The validUntil property of the OpenBadgeCredential. Required if the OpenBadgeCredential has an validUntil . |
Optional |
iss |
URI | The issuer.id property of the OpenBadgeCredential. |
Required |
jti |
URI | The id property of the OpenBadgeCredential. |
Required |
nbf |
NumericDate | The validFrom property of the OpenBadgeCredential. |
Required |
sub |
URI | The credentialSubject.id property of the OpenBadgeCredential. |
Required |
1EdTech strongly recommends using an existing, stable library for this step.
This section uses the follow notations:
JOSE Header
- denotes the JSON string representation of the JOSE Header.JWT Payload
- denotes the JSON string representation of the JWT Payload.BASE64URL(OCTETS)
- denotes the base64url encoding of OCTETS per [RFC7515].UTF8(STRING)
- denotes the octets of the UTF-8 [RFC3629] representation of STRING, where STRING is a sequence of Unicode [UNICODE] characters.- The concatenation of two values A and B is denoted as
A || B
.
The steps to sign and encode the credential as a Compact JWS are shown below:
- Encode the JOSE Header as
BASE64URL(UTF8(JOSE Header))
. - Encode the JWT Payload as
BASE64URL(JWT Payload)
. - Concatenate the encoded JOSE Header and the encoded JSW Payload as
A | "." | B
. - Calculate the
JWS Signature
forC
as described in [RFC7515]. - Encode the signature as
BASE64URL(JWS Signature)
. - Concatenate
C
andE
asC | "." | E
.
The resulting string is the Compact JWS representation of the credential. The Compact JWS includes the credential AND acts as the proof for the credential.
Verifiers that receive a OpenBadgeCredential in Compact JWS format MUST perform the following steps to verify the embedded credential.
Base64url-decode the JOSE Header.
If the header includes a
kid
property, Dereference thekid
value to retrieve the public key JWK.If the header includes a
jwk
property, convert thejwk
value into the public key JWK.Use the public key JWK to verify the signature as described in "Section 5.2 Message Signature or MAC Validation" of [RFC7515]. If the signature is not valid, the credential proof is not valid.
Note: Verifying the JWS Signature1EdTech strongly recommends using an existing, stable library for this step.
Base64url-decode the JWT Payload segment of the Compact JWS and parse it into a JSON object.
Convert the value of the JWT Payload to an OpenBadgeCredential and continue with § 8.2.6.1 Verify a Credential VC-JWT Signature.
NoteCredentials created following Verifiable Credentials Data Model v1.1 ([VC-DATA-MODEL]) store the OpenBadgeCredential in thevc
claim of the JWT Payload. In this case, the contents of thevc
claim must be converted to an OpenBadgeCredential and continue with § 8.2.6.1 Verify a Credential VC-JWT Signature.
- The JSON object MUST have the
iss
claim, and the value MUST match theissuer.id
of the OpenBadgeCredential object. If they do not match, the credential is not valid. - The JSON object MUST have the
sub
claim, and the value MUST match thecredentialSubject.id
of the OpenBadgeCredential object. If they do not match, the credential is not valid. - The JSON object MUST have the
nbf
claim, and the NumericDate value MUST be converted to a DateTime, and MUST equal thevalidFrom
of the OpenBadgeCredential object. If they do not match or if thevalidFrom
has not yet occurred, the credential is not valid. - The JSON object MUST have the
jti
claim, and the value MUST match theid
of the OpenBadgeCredential object. If they do not match, the credential is not valid. - If the JSON object has the
exp
claim, the NumericDate MUST be converted to a DateTime, and MUST be used to set the value of thevalidUntil
of the OpenBadgeCredential object. If the credential has expired, the credential is not valid.
issuanceDate
and expirationDate
instead of validFrom
and validUntil
, respectively
This standard supports the Linked Data Proof format. In order to pass conformance tests for this format issuers MUST use an option supported by the 1EdTech conformance test suite, which is currently limited to the Data Integrity EdDSA Cryptosuites v1.0 suite.
Attach a Linked Data Proof to the credential, for example by following these steps to use a proof with the [VC-DI-EDDSA] suite:
- Create an instance of Multikey as shown in Section 2.1.1 DataIntegrityProof of [VC-DI-EDDSA].
- Using the key material, sign the credential object as shown in Section 7.1 Proof Algorithm of [DATA-INTEGRITY-SPEC] to produce a Proof as shown in Section 2.2.1 DataIntegrityProof of [VC-DI-EDDSA] with a
proofPurpose
of "assertionMethod". - Add the resulting proof object to the credential
proof
property.
Verify the Linked Data Proof signature as shown in Section 7.2 Proof Verification Algorithm of [DATA-INTEGRITY-SPEC].
Issuers will need to manage asymmetric keys. The mechanisms by which keys are minted and distributed is outside the scope of this specification. See Section 6. Key Management of the IMS Global Security Framework v1.1.
All the proof formats in this specification, and all Digital Integrity proofs in general, require the verifier to "dereference" the public key from a URI. Dereferencing means using the URI to get the public key in JWK format. This specification allows the use of an HTTP URL (e.g. https://1edtech.org/keys/1
) or a DID URL (e.g. did:key:123
), but only requires HTTP URL support.
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.
Validation is the process of assuring the verifiable credential or verifiable presentation meets the needs of the verifier and other dependent stakeholders. Validating verifiable credentials or verifiable presentations is outside the scope of this specification.
This section applies to Verifiable Credentials with a type
of "OpenBadgeCredential" or "AchievementCredential".
Check that the OpenBadgeCredential conforms to the specification:
- If the OpenBadgeCredential has a
credentialSchema
property, and thetype
of the CredentialSchema object is "1EdTechJsonSchemaValidator2019", check that the credential conforms to JSON Schema as shown in 1EdTech JSON Schema Validator 2019. If it does not, the credential does not conform to the specification. - Check that the
credentialSubject
is identified by anid
and/or anidentifier
. If neither is present, the credential does not conform to the specification.
NoteOpenBadgeCredentials created following Verifiable Credentials Data Model v1.1 ([VC-DATA-MODEL]) have different names for attributes used in this process. Concretely, they haveissuanceDate
andexpirationDate
instead ofvalidFrom
andvalidUntil
, respectively. The data model of these credentials and their corresponding JSON schemas, are described at § B.9 Verification Support Data Models and § E.2.1 Open Badges JSON Schema, respectively.- If the OpenBadgeCredential has a
Check that the proof method is satisfied:
- If the OpenBadgeCredential is signed using the § 8.2 JSON Web Token Proof Format (VC-JWT), verify the signature as shown in § 8.2.6 Verify a Credential. If the OpenBadgeCredential is signed using an embedded proof, verify the signature as shown in § 8.3.2 Verify an OpenBadgeCredential Linked Data Signature. If the signature cannot be verified, the proof method is not satisfied.
NoteThe OpenBadgeCredential may have a VC-JWT proof and one or more Linked Data proofs. In this case, the Linked Data proofs will be attached to the OpenBadgeCredential in the signed JWT Payload. You may accept any one proof for verification. You do not need to verify all the signatures.Refresh the OpenBadgeCredential:
NoteRefresh must be completed after checking the proof so that the verifier is not spoofed into receiving a refreshed OpenBadgeCredential from a bad actor.- If the
refreshService
property is present, and thetype
of the RefreshService object is "1EdTechCredentialRefresh", refresh the OpenBadgeCredential as shown in 1EdTech Credential Refresh Service and then repeat steps 1 and 2. If the refresh is not successful, continue the verification process using the original OpenBadgeCredential.NoteOnly perform Refresh once. That is, do not complete Refresh a second time even if the refreshed OpenBadgeCredential also has arefreshService
defined.
- If the
Check the status:
- A Credential is revoked if the
credentialStatus
property is present, and thetype
of the CredentialStatus object is "1EdTechRevocationList", and if the ClrCredential has been revoked as shown in 1EdTech Revocation List Status Method. - If the current date and time is before the
validFrom
, the OpenBadgeCredential is not yet valid. - If the current date and time is after the
validUntil
, the OpenBadgeCredential is expired.
NoteOpenBadgeCredentials created following Verifiable Credentials Data Model v1.1 ([VC-DATA-MODEL]) have different names for attributes used in this process. Concretely, they haveissuanceDate
andexpirationDate
instead ofvalidFrom
andvalidUntil
, respectively. The data model of these credentials and their corresponding JSON schemas, are described at § B.9 Verification Support Data Models and § E.2.1 Open Badges JSON Schema, respectively.- A Credential is revoked if the
Optionally verify the subject (recipient):
NoteThis step is optional, but RECOMMENDED when the OpenBadgeCredential has been exchanged with the verifier as one of the § 5. Open Badges Document Formats.- An OpenBadgeCredential is about a person called the recipient. The recipient is identified in the
credentialSubject
(see AchievementSubject) byid
and/or one or moreidentifier
(see IdentityObject). The id or identifier value to use for verification must be shared with the verifier in an out-of-band process such as by email. This is called the known value. - To verify the recipient using a known id, simply compare the known value with the
id
in the ClrSubject. If they are equal then the recipient is verified. - To verify the recipient using a known identifier such as email address follow these steps shown in § 9.3 Verify the Recipient Using an Identifier. If you find a match then the recipient is verified.
- If no match is found, the recipient is not verified.
- An OpenBadgeCredential is about a person called the recipient. The recipient is identified in the
Verify EndorsementCredentials:
- If the OpenBadgeCredential contains any EndorsementCredentials, verify the EndorsementCredentials as shown in § 9.2 EndorsementCredential Verification.
If all the above steps pass, the OpenBadgeCredential may be treated as verified.
This section applies to Verifiable Credentials with a type
of "EndorsementCredential".
Check that the EndorsementCredential conforms to the specification:
- If the credential has a
credentialSchema
property, and thetype
of the CredentialSchema object is "1EdTechJsonSchemaValidator2019", check that the credential conforms to JSON Schema as shown in 1EdTech JSON Schema Validator 2019. If it does not, the credential does not conform to the specification.
NoteEndorsementCredentials created following [VC-DATA-MODEL] have different names for attributes used in this process. Concretely, they haveissuanceDate
andexpirationDate
instead ofvalidFrom
andvalidUntil
, respectively. The data model of these credentials and their corresponding JSON schemas, are described at § B.9 Verification Support Data Models and § E.2.1 Open Badges JSON Schema, respectively.- If the credential has a
Check that the proof method is satisfied:
- If the EndorsementCredential is signed using the § 8.2 JSON Web Token Proof Format (VC-JWT), verify the signature as shown in § 8.2.6 Verify a Credential. If the EndorsementCredential is signed using an embedded proof, verify the signature as shown in § 8.3.2 Verify an OpenBadgeCredential Linked Data Signature. If the signature cannot be verified, the proof method is not satisfied.NoteThe EndorsementCredential may have a VC-JWT proof and one or more Linked Data proofs. In this case, the Linked Data proofs will be attached to the EndorsementCredential in the appropriate claim of the signed JWT Payload. You may accept any one proof for verification. You do not need to verify all the signatures.
- If the EndorsementCredential is signed using the § 8.2 JSON Web Token Proof Format (VC-JWT), verify the signature as shown in § 8.2.6 Verify a Credential. If the EndorsementCredential is signed using an embedded proof, verify the signature as shown in § 8.3.2 Verify an OpenBadgeCredential Linked Data Signature. If the signature cannot be verified, the proof method is not satisfied.
Refresh the EndorsementCredential:
- If the
refreshService
property is present, and thetype
of the RefreshService object is "1EdTechCredentialRefresh", refresh the EndorsementCredential as shown in 1EdTech Credential Refresh Service and then repeat steps 1 and 2. If the refresh is not successful, continue the verification process using the original EndorsementCredential.NoteRefresh must be completed after checking the proof so that the verifier is not spoofed into receiving a refreshed EndorsementCredential from a bad actor.NoteOnly perform Refresh once. That is, do not complete Refresh a second time even if the refreshed EndorsementCredential also has arefreshService
defined.
- If the
Check the status:
- If the
credentialStatus
property is present, and thetype
of the CredentialStatus object is "1EdTechRevocationList", determine if the EndorsementCredential has been revoked as shown in 1EdTech Revocation List Status Method. - If the current date and time is before the
validFrom
, the EndorsementCredential is not yet valid. - If the current date and time is after the
validUntil
, the EndorsementCredential is expired.
NoteEndorsementCredentials created following [VC-DATA-MODEL] have different names for attributes used in this process. Concretely, they haveissuanceDate
andexpirationDate
instead ofvalidFrom
andvalidUntil
, respectively. The data model of these credentials and their corresponding JSON schemas, are described at § B.9 Verification Support Data Models and § E.2.1 Open Badges JSON Schema, respectively.- If the
If all the above steps pass, the EndorsementCredential may be treated as verified.
The known identifier MUST be a plaintext string value. The known identifier type MUST be one of the types in IdentifierTypeEnum or an extension type. For example, if the known identifier is an email address, the known identifier type is emailAddress
.
The ClrCredential issuer may include multiple identifiers that can be used for verification. The verifier should compare the known identifier (e.g. known email address) with all the identifiers included by the issuer until a match is found.
- If
identifier.identityType
does not match the known identifier type, skip to the nextidentifier
. - If
identifier.hashed
istrue
, calculate the known identifier IdentityHash using the known identifier and theidentifier.salt
. If the known identifier IdentityHash matches theidentifier.identityHash
, the recipient is verified. - If
identifier.hashed
isfalse
, and if the known identifier matches theidentifier.identityHash
, the recipient is verified.
Credential equality and comparison is the process to determine whether a verifiable credential is semantically equivalent to another one.
A Host SHOULD treat a credential as the same as another when both the issuer id
and the AchievementCredential id
are equal after unescaping of any percent encoded characters [RFC3986] followed by truncation of leading and trailing whitespace.
If the two credentials are equal according to the above, then the credential with the newer validFrom
is the more up-to-date representation and could be interpreted as a replacement of the prior issued credential.
Credentials A and B are equal since they have the same id
and the same issuer.id
.
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
"https://www.w3.org/2018/credentials/examples/v2"
],
"id": "http://example.edu/credentials/3732",
"type": ["VerifiableCredential", "OpenBadgeCredential"],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": ["Profile"],
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"name": "Teamwork Badge",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": ["AchievementSubject"],
"achievement": {
"id": "https://example.com/achievements/21st-century-skills/teamwork",
"type": [
"Achievement"
],
"criteria": {
"narrative": "Team members are nominated for this badge by their peers and recognized upon review by Example Corp management."
},
"description": "This badge recognizes the development of the capacity to collaborate within a group environment.",
"name": "Teamwork"
}
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
"https://www.w3.org/2018/credentials/examples/v2"
],
"id": "http://example.edu/credentials/3732",
"type": ["VerifiableCredential", "OpenBadgeCredential"],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": ["Profile"],
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"name": "Teamwork Badge",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": ["AchievementSubject"],
"achievement": {
"id": "https://example.com/achievements/21st-century-skills/teamwork",
"type": [
"Achievement"
],
"criteria": {
"narrative": "Team members are nominated for this badge by their peers and recognized upon review by Example Corp management."
},
"description": "This badge recognizes the development of the capacity to collaborate within a group environment.",
"name": "Teamwork"
}
}
}
Since they also have the same validFrom
both are up-to-date.
Credentials C and D are equal since they have the same id
and the same issuer.id
.
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
"https://www.w3.org/2018/credentials/examples/v2"
],
"id": "http://example.edu/credentials/3732",
"type": ["VerifiableCredential", "OpenBadgeCredential"],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": ["Profile"],
"name": "Example University"
},
"validFrom": "2010-03-01T00:00:00Z",
"name": "Teamwork Badge",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": ["AchievementSubject"],
"achievement": {
"id": "https://example.com/achievements/21st-century-skills/teamwork",
"type": [
"Achievement"
],
"criteria": {
"narrative": "Team members are nominated for this badge by their peers and recognized upon review by Example Corp management."
},
"description": "This badge recognizes the development of the capacity to collaborate within a group environment.",
"name": "Teamwork"
}
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
"https://www.w3.org/2018/credentials/examples/v2"
],
"id": "http://example.edu/credentials/3732",
"type": ["VerifiableCredential", "OpenBadgeCredential"],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": ["Profile"],
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"name": "Teamwork Badge",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": ["AchievementSubject"],
"achievement": {
"id": "https://example.com/achievements/21st-century-skills/teamwork",
"type": [
"Achievement"
],
"criteria": {
"narrative": "Team members are nominated for this badge by their peers and recognized upon review by Example Corp management."
},
"description": "This badge recognizes the development of the capacity to collaborate within a group environment.",
"name": "Teamwork"
}
}
}
The credential C is the up-to-date representation because it has a more recent validFrom
(2010-03-01T00:00:00Z
).
The Verifiable Credentials Data Model v2.0 standard defines several types of extensions to enable "permissionless innovation". Conformant extensions are tracked in the Verifiable Credentials Extension Registry.
This standard references four VC Extensions:
- A Proof Method called
DataIntegrityProof
defined at Data Integrity EdDSA Cryptosuites v1.0 - A Status Method called 1EdTech Revocation List Status Method
- A Refresh Method called 1EdTech Credential Refresh Service
- A Data Schema Validation Method called 1EdTech JSON Schema Validator 2019
The data model as described in Appendix § B. Data Models is the canonical structural representation of an Open Badges verifiable credential (AchievementCredential). 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:
- Numeric values representable as [IEEE-754] MUST be represented as a JSON Number.
- Boolean values MUST be represented as a JSON Boolean.
- Sequence values MUST be represented as an JSON Array, NOT as a single value.
- Unordered sets (i.e.
0.._
and1.._
multiplicities) of values MUST be represented as an JSON Array, NOT as a single value. - Complex types (i.e. not primitive types or derived types) MUST be represented as an JSON Object, NOT as a URI.
- Other values MUST be represented as a JSON String.
- Null values and empty arrays MUST be ommitted from the serialized JSON. This includes empty Arrays.
[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. Extending and Profiling the Standard.
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/ns/credentials/v2
, 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-3.0.3.json
. The associated vocabulary document for the Open Badges Data Model is available at https://purl.imsglobal.org/spec/vc/ob/vocab.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/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
]
[JSON-LD11-API] defines a compaction process for [JSON-LD11] documents, applying a context to shorten several fields of the document. The purpose of compaction is making the document to be represented in a form that is tailored to the use of the JSON-LD document directly as JSON.
One of the transformations made by this compaction process is representing properties with only one value as string or maps, while properties with multiple values are represented as an array of strings or maps.
The JSON-LD binding for Open Badges verifiable credentials MAY use singular values compaction in some attributes in the data model, such they can be expressed as a string – when having only one value – or an array of strings – when having multiple values.
The properties that may be compacted are listed in the following table:
Class | Property |
---|---|
Achievement | type |
AchievementCredential | type |
AchievementCredential | credentialSchema |
AchievementCredential | proof |
AchievementCredential | termsOfUse |
AchievementSubject | type |
Address | type |
Alignment | type |
EndorsementCredential | type |
EndorsementCredential | credentialSchema |
EndorsementCredential | proof |
EndorsementCredential | termsOfUse |
EndorsementSubject | type |
Evidence | type |
Profile | type |
Related | type |
Result | type |
ResultDescription | type |
RubricCriterionLevel | type |
VerifiableCredential | type |
VerifiableCredential | proof |
VerifiableCredential | credentialSchema |
VerifiableCredential | termsOfUse |
When using the compacted document form, the resulting document MAY not pass canonical JSON Schema files. This MAY
end up in an unsuccessful verification of the credential, specially when the CredentialSchema
property is used. To solve this, JSON Schema files compatible with [JSON-LD11-API] compaction process are available online:
- AchievementCredential JSON schema
- EndorsementCredential JSON schema
- GetOpenBadgeCredentialsResponse JSON schema
- Profile JSON schema
- Imsx_StatusInfo JSON schema
Implementations using CredentialSchema
MAY rely on this JSON schema files as valid values.
The data models in this section are shared by Open Badges Specification v3.0 and Comprehensive Learner Record Standard v2.0.
A collection of information about the accomplishment recognized by the Assertion. Many assertions may be created corresponding to one Achievement.
Property | Type | Description | Multiplicity |
---|---|---|---|
id | URI | Unique URI for the Achievement. | [1] |
type | IRI | The type MUST include the IRI 'Achievement'. | [1..*] |
alignment | Alignment | An object describing which objectives or educational standards this achievement aligns to, if any. | [0..*] |
achievementType | AchievementType Enumeration | The type of achievement. This is an extensible vocabulary. | [0..1] |
creator | Profile | The person or organization that created the achievement definition. | [0..1] |
creditsAvailable | Float | Credit hours associated with this entity, or credit hours possible. For example 3.0. | [0..1] |
criteria | Criteria | Criteria describing how to earn the achievement. | [1] |
description | String | A short description of the achievement. | [1] |
endorsement | EndorsementCredential | Allows endorsers to make specific claims about the Achievement. These endorsements are signed with a Data Integrity proof format. | [0..*] |
endorsementJwt | CompactJws | Allows endorsers to make specific claims about the Achievement. These endorsements are signed with the VC-JWT proof format. | [0..*] |
fieldOfStudy | String | Category, subject, area of study, discipline, or general branch of knowledge. Examples include Business, Education, Psychology, and Technology. | [0..1] |
humanCode | String | The code, generally human readable, associated with an achievement. | [0..1] |
image | Image | An image representing the achievement. | [0..1] |
inLanguage | LanguageCode | The language of the achievement. | [0..1] |
name | String | The name of the achievement. | [1] |
otherIdentifier | IdentifierEntry | A list of identifiers for the described entity. | [0..*] |
related | Related | The related property identifies another Achievement that should be considered the same for most purposes. It is primarily intended to identify alternate language editions or previous versions of Achievements. | [0..*] |
resultDescription | ResultDescription | The set of result descriptions that may be asserted as results with this achievement. | [0..*] |
specialization | String | Name given to the focus, concentration, or specific area of study defined in the achievement. Examples include 'Entrepreneurship', 'Technical Communication', and 'Finance'. | [0..1] |
tag | String | One or more short, human-friendly, searchable, keywords that describe the type of achievement. | [0..*] |
version | String | The version property allows issuers to set a version string for an Achievement. This is particularly useful when replacing a previous version with an update. | [0..1] |
This class can be extended with additional properties. |
AchievementCredentials are representations of an awarded achievement, used to share information about a achievement belonging to one earner. Maps to a Verifiable Credential as defined in the [VC-DATA-MODEL-2.0]. As described in § 8. Proofs (Signatures), at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the proof
property.
Property | Type | Description | Multiplicity |
---|---|---|---|
@context | Context |
The value of the @context property MUST be an ordered set where the first item is a URI with the value 'https://www.w3.org/ns/credentials/v2', and the second item is a URI with the value 'https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json'.
|
[2..*] |
id | URI | Unambiguous reference to the credential. | [1] |
type | IRI | The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'AchievementCredential' or the URI 'OpenBadgeCredential'. | [1..*] |
name | String | The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views. | [0..1] |
description | String | The short description of the credential for display purposes in wallets. | [0..1] |
image | Image | The image representing the credential for display purposes in wallets. | [0..1] |
awardedDate | DateTimeZ |
Timestamp of when the credential was awarded. validFrom is used to determine the most recent version of a Credential in conjunction with issuer and id . Consequently, the only way to update a Credental is to update the validFrom , losing the date when the Credential was originally awarded. awardedDate is meant to keep this original date.
|
[0..1] |
credentialSubject | AchievementSubject | The recipient of the achievement. | [1] |
endorsement | EndorsementCredential | Allows endorsers to make specific claims about the credential, and the achievement and profiles in the credential. These endorsements are signed with a Data Integrity proof format. | [0..*] |
endorsementJwt | CompactJws | Allows endorsers to make specific claims about the credential, and the achievement and profiles in the credential. These endorsements are signed with the VC-JWT proof format. | [0..*] |
evidence | Evidence | A description of the work that the recipient did to earn the achievement. This can be a page that links out to other pages if linking directly to the work is infeasible. | [0..*] |
issuer | ProfileRef | A description of the individual, entity, or organization that issued the credential. | [1] |
validFrom | DateTimeZ | Timestamp of when the credential becomes valid. | [1] |
validUntil | DateTimeZ | If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid. | [0..1] |
proof | Proof | If present, one or more embedded cryptographic proofs that can be used to detect tampering and verify the authorship of the credential. | [0..*] |
credentialSchema | CredentialSchema |
The value of the credentialSchema property MUST be one or more data schemas that provide verifiers with enough information to determine if the provided data conforms to the provided schema.
|
[0..*] |
credentialStatus | CredentialStatus | The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked. | [0..1] |
refreshService | RefreshService | The information in RefreshService is used to refresh the verifiable credential. | [0..1] |
termsOfUse | TermsOfUse |
The value of the termsOfUse property tells the verifier what actions it is required to perform (an obligation), not allowed to perform (a prohibition), or allowed to perform (a permission) if it is to accept the verifiable credential.
|
[0..*] |
This class can be extended with additional properties. |
A collection of information about the recipient of an achievement. Maps to Credential Subject in [VC-DATA-MODEL-2.0].
Property | Type | Description | Multiplicity |
---|---|---|---|
id | URI |
An identifier for the Credential Subject. Either id or at least one identifier MUST be supplied.
|
[0..1] |
type | IRI | The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'AchievementSubject'. | [1..*] |
activityEndDate | DateTime | The datetime the activity ended. | [0..1] |
activityStartDate | DateTime | The datetime the activity started. | [0..1] |
creditsEarned | Float |
The number of credits earned, generally in semester or quarter credit hours. This field correlates with the Achievement creditsAvailable field.
|
[0..1] |
achievement | Achievement | The achievement being awarded. | [1] |
identifier | IdentityObject |
Other identifiers for the recipient of the achievement. Either id or at least one identifier MUST be supplied.
|
[0..*] |
image | Image | An image representing this user's achievement. If present, this must be a PNG or SVG image, and should be prepared via the 'baking' instructions. An 'unbaked' image for the achievement is defined in the Achievement class and should not be duplicated here. | [0..1] |
licenseNumber | String | The license number that was issued with this credential. | [0..1] |
narrative | Markdown | A narrative that connects multiple pieces of evidence. Likely only present at this location if evidence is a multi-value array. | [0..1] |
result | Result | The set of results being asserted. | [0..*] |
role | String | Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc. | [0..1] |
source | Profile | The person, organization, or system that assessed the achievement on behalf of the issuer. For example, a school may assess the achievement, while the school district issues the credential. | [0..1] |
term | String | The academic term in which this assertion was achieved. | [0..1] |
This class can be extended with additional properties. |
An address for the described entity.
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 'Address'. | [1..*] |
addressCountry | String | A country. | [0..1] |
addressCountryCode | CountryCode | A country code. The value must be a ISO 3166-1 alpha-2 country code [ISO3166-1]. | [0..1] |
addressRegion | String | A region within the country. | [0..1] |
addressLocality | String | A locality within the region. | [0..1] |
streetAddress | String | A street address within the locality. | [0..1] |
postOfficeBoxNumber | String | A post office box number for PO box addresses. | [0..1] |
postalCode | String | A postal code. | [0..1] |
geo | GeoCoordinates | The geographic coordinates of the location. | [0..1] |
This class can be extended with additional properties. |
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. |
Descriptive metadata about the achievements necessary to be recognized with an assertion of a particular achievement. This data is added to the Achievement class so that it may be rendered when the achievement assertion is displayed, instead of simply a link to human-readable criteria external to the achievement. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether. Criteria is used to allow would-be recipients to learn what is required of them to be recognized with an assertion of a particular achievement. It is also used after the assertion is awarded to a recipient to let those inspecting earned achievements know the general requirements that the recipients met in order to earn it.
id
or narrative
fields.Property | Type | Description | Multiplicity |
---|---|---|---|
id | URI | The URI of a webpage that describes in a human-readable format the criteria for the achievement. | [0..1] |
narrative | Markdown | A narrative of what is needed to earn the achievement. Markdown is allowed. | [0..1] |
This class can be extended with additional properties. |
A verifiable credential that asserts a claim about an entity. As described in § 8. Proofs (Signatures), at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the proof
property.
Property | Type | Description | Multiplicity |
---|---|---|---|
@context | Context |
The value of the @context property MUST be an ordered set where the first item is a URI with the value 'https://www.w3.org/ns/credentials/v2', and the second item is a URI with the value 'https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json'.
|
[2..*] |
type | IRI | The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'. | [1..*] |
id | URI | Unambiguous reference to the credential. | [1] |
name | String | The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views. | [1] |
description | String | The short description of the credential for display purposes in wallets. | [0..1] |
credentialSubject | EndorsementSubject | The individual, entity, organization, assertion, or achievement that is endorsed and the endorsement comment. | [1] |
awardedDate | DateTimeZ |
Timestamp of when the credential was awarded. validFrom is used to determine the most recent version of a Credential in conjunction with issuer and id . Consequently, the only way to update a Credental is to update the validFrom , losing the date when the Credential was originally awarded. awardedDate is meant to keep this original date.
|
[0..1] |
issuer | ProfileRef | A description of the individual, entity, or organization that issued the credential. | [1] |
validFrom | DateTimeZ | Timestamp of when the credential becomes valid. | [1] |
validUntil | DateTimeZ | If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid. | [0..1] |
proof | Proof | If present, one or more embedded cryptographic proofs that can be used to detect tampering and verify the authorship of the credential. | [0..*] |
credentialSchema | CredentialSchema |
The value of the credentialSchema property MUST be one or more data schemas that provide verifiers with enough information to determine if the provided data conforms to the provided schema.
|
[0..*] |
credentialStatus | CredentialStatus | The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked. | [0..1] |
refreshService | RefreshService | The information in RefreshService is used to refresh the verifiable credential. | [0..1] |
termsOfUse | TermsOfUse |
The value of the termsOfUse property tells the verifier what actions it is required to perform (an obligation), not allowed to perform (a prohibition), or allowed to perform (a permission) if it is to accept the verifiable credential.
|
[0..*] |
This class can be extended with additional properties. |
A collection of information about the subject of the endorsement.
Property | Type | Description | Multiplicity |
---|---|---|---|
id | URI | The identifier of the individual, entity, organization, assertion, or achievement that is endorsed. | [1] |
type | IRI | The value of the type property MUST be an unordered set. One of the items MUST be the URI 'EndorsementSubject'. | [1..*] |
endorsementComment | Markdown | Allows endorsers to make a simple claim in writing about the entity. | [0..1] |
This class can be extended with additional properties. |
Descriptive metadata about evidence related to the achievement assertion. Each instance of the evidence class present in an assertion corresponds to one entity, though a single entry can describe a set of items collectively. There may be multiple evidence entries referenced from an assertion. The narrative property is also in scope of the assertion class to provide an overall description of the achievement related to the assertion in rich text. It is used here to provide a narrative of achievement of the specific entity described. If both the description and narrative properties are present, displayers can assume the narrative value goes into more detail and is not simply a recapitulation of description.
Property | Type | Description | Multiplicity |
---|---|---|---|
id | URI | The URL of a webpage presenting evidence of achievement or the evidence encoded as a Data URI. The schema of the webpage is undefined. | [0..1] |
type | IRI | The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Evidence'. | [1..*] |
narrative | Markdown | A narrative that describes the evidence and process of achievement that led to an assertion. | [0..1] |
name | String | A descriptive title of the evidence. | [0..1] |
description | String | A longer description of the evidence. | [0..1] |
genre | String | A string that describes the type of evidence. For example, Poetry, Prose, Film. | [0..1] |
audience | String | A description of the intended audience for a piece of evidence. | [0..1] |
This class can be extended with additional properties. |
The geographic coordinates of a location.
Property | Type | Description | Multiplicity |
---|---|---|---|
type | IRI | MUST be the IRI 'GeoCoordinates'. | [1] |
latitude | Float | The latitude of the location [WGS84]. | [1] |
longitude | Float | The longitude of the location [WGS84]. | [1] |
This class can be extended with additional properties. |
Property | Type | Description | Multiplicity |
---|---|---|---|
type | IRI | MUST be the IRI 'IdentifierEntry'. | [1] |
identifier | Identifier | An identifier. | [1] |
identifierType | IdentifierTypeEnum Enumeration | The identifier type. | [1] |
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] |
Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.
Property | Type | Description | Multiplicity |
---|---|---|---|
id | URI | The URI or Data URI of the image. | [1] |
type | IRI | MUST be the IRI 'Image'. | [1] |
caption | String | The caption for the image. | [0..1] |
A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.
Property | Type | Description | Multiplicity |
---|---|---|---|
id | URI | Unique URI for the Issuer/Profile file. | [1] |
type | IRI | The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'. | [1..*] |
name | String | The name of the entity or organization. | [0..1] |
url | URI | The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP. | [0..1] |
phone | PhoneNumber | A phone number. | [0..1] |
description | String | A short description of the issuer entity or organization. | [0..1] |
endorsement | EndorsementCredential | Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with a Data Integrity proof format. | [0..*] |
endorsementJwt | CompactJws | Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format. | [0..*] |
image | Image | An image representing the issuer. This must be a PNG or SVG image. | [0..1] |
EmailAddress | An email address. | [0..1] | |
address | Address | An address for the individual or organization. | [0..1] |
otherIdentifier | IdentifierEntry | A list of identifiers for the described entity. | [0..*] |
official | String |
If the entity is an organization, official is the name of an authorized official of the organization.
|
[0..1] |
parentOrg | Profile | The parent organization of the entity. | [0..1] |
familyName | String | Family name. In the western world, often referred to as the 'last name' of a person. | [0..1] |
givenName | String | Given name. In the western world, often referred to as the 'first name' of a person. | [0..1] |
additionalName | String | Additional name. Includes what is often referred to as 'middle name' in the western world. | [0..1] |
patronymicName | String | Patronymic name. | [0..1] |
honorificPrefix | String | Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr'). | [0..1] |
honorificSuffix | String | Honorific suffix(es) following a person's name (e.g. 'M.D, PhD'). | [0..1] |
familyNamePrefix | String | Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer'). | [0..1] |
dateOfBirth | Date | Birthdate of the person. | [0..1] |
This class can be extended with additional properties. |
Describes a result that was achieved.
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 'Result'. | [1..*] |
achievedLevel | URI |
If the result represents an achieved rubric criterion level (e.g. Mastered), the value is the id of the RubricCriterionLevel in linked ResultDescription.
|
[0..1] |
alignment | Alignment | The alignments between this result and nodes in external frameworks. This set of alignments are in addition to the set of alignments defined in the corresponding ResultDescription object. | [0..*] |
resultDescription | URI |
An achievement can have many result descriptions describing possible results. The value of resultDescription is the id of the result description linked to this result. The linked result description must be in the achievement that is being asserted.
|
[0..1] |
status | ResultStatusType Enumeration |
The status of the achievement. Required if resultType of the linked ResultDescription is Status.
|
[0..1] |
value | String | A string representing the result of the performance, or demonstration, of the achievement. For example, 'A' if the recipient received an A grade in class. | [0..1] |
This class can be extended with additional properties. |
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. |
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. |
A Verifiable Credential as defined in the [VC-DATA-MODEL-2.0]. As described in § 8. Proofs (Signatures), at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the proof
property.
Property | Type | Description | Multiplicity |
---|---|---|---|
@context | Context |
The value of the @context property MUST be an ordered set where the first item is a URI with the value 'https://www.w3.org/ns/credentials/v2'.
|
[1..*] |
id | URI | Unambiguous reference to the credential. | [0..1] |
type | IRI | The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential'. | [1..*] |
issuer | ProfileRef | A description of the individual, entity, or organization that issued the credential. | [1] |
validFrom | DateTimeZ | Timestamp of when the credential becomes valid. | [1] |
validUntil | DateTimeZ | If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid. | [0..1] |
credentialSubject | CredentialSubject | The subject of the credential. | [1] |
proof | Proof | If present, one or more embedded cryptographic proofs that can be used to detect tampering and verify the authorship of the credential. | [0..*] |
credentialSchema | CredentialSchema |
The value of the credentialSchema property MUST be one or more data schemas that provide verifiers with enough information to determine if the provided data conforms to the provided schema.
|
[0..*] |
credentialStatus | CredentialStatus | The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked. | [0..1] |
refreshService | RefreshService | The information in RefreshService is used to refresh the verifiable credential. | [0..1] |
termsOfUse | TermsOfUse |
The value of the termsOfUse property tells the verifier what actions it is required to perform (an obligation), not allowed to perform (a prohibition), or allowed to perform (a permission) if it is to accept the verifiable credential.
|
[0..*] |
This class can be extended with additional properties. |
A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.
The ultimate representation of this class is a choice of exactly one of the classes in the following set:
Type | Description |
---|---|
URI |
A NormalizedString that respresents a Uniform Resource Identifier (URI).
|
Profile | A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address. |
Identify the type and location of a data schema.
Property | Type | Description | Multiplicity |
---|---|---|---|
id | URI |
The value MUST be a URI identifying the schema file. One instance of CredentialSchema MUST have an id that is the URL of the JSON Schema for this credential defined by this specification.
|
[1] |
type | IRI |
The value MUST identify the type of data schema validation. One instance of CredentialSchema MUST have a type of '1EdTechJsonSchemaValidator2019'.
|
[1] |
This class can be extended with additional properties. |
The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.
Property | Type | Description | Multiplicity |
---|---|---|---|
id | URI | The value MUST be the URL of the issuer's credential status method. | [1] |
type | IRI | The name of the credential status method. | [1] |
This class can be extended with additional properties. |
Claims about the credential subject. Maps to Credential Subject as defined in the [VC-DATA-MODEL-2.0].
Property | Type | Description | Multiplicity |
---|---|---|---|
id | URI | The identity of the credential subject. | [0..1] |
This class can be extended with additional properties. |
A JSON-LD Linked Data proof.
Property | Type | Description | Multiplicity |
---|---|---|---|
type | IRI | Signature suite used to produce proof. | [1] |
created | DateTime | Date the proof was created. | [0..1] |
cryptosuite | String | The suite used to create the proof. | [0..1] |
challenge | String | A value chosen by the verifier to mitigate authentication proof replay attacks. | [0..1] |
domain | String | The domain of the proof to restrict its use to a particular target. | [0..1] |
nonce | String | A value chosen by the creator of proof to randomize proof values for privacy purposes. | [0..1] |
proofPurpose | String |
The purpose of the proof to be used with verificationMethod . MUST be 'assertionMethod'.
|
[0..1] |
proofValue | String | Value of the proof. | [0..1] |
verificationMethod | URI | The URL of the public key that can verify the signature. | [0..1] |
This class can be extended with additional properties. |
The information in RefreshService is used to refresh the verifiable credential.
Property | Type | Description | Multiplicity |
---|---|---|---|
id | URI | The value MUST be the URL of the issuer's refresh service. | [1] |
type | IRI | The name of the refresh service method. | [1] |
This class can be extended with additional properties. |
Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued
Property | Type | Description | Multiplicity |
---|---|---|---|
id | URI | The value MUST be a URI identifying the term of use. | [0..1] |
type | IRI | The value MUST identify the type of the terms of use. | [1] |
This class can be extended with additional properties. |
JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.
The ultimate representation of this class is a choice of exactly one of the classes in the following set:
Type | Description |
---|---|
Map | A map representing an object with unknown, arbitrary properties |
URI |
A NormalizedString that respresents a Uniform Resource Identifier (URI).
|
A map representing an object with unknown, arbitrary properties
Property | Type | Description | Multiplicity |
---|---|---|---|
This class can be extended with additional properties. |
The type of achievement, for example 'Award' or 'Certification'. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.
Term | Description |
---|---|
Achievement | Represents a generic achievement. |
ApprenticeshipCertificate |
Credential earned through work-based learning and earn-and-learn models that meet standards and are applicable to industry trades and professions. This is an exact match of ApprenticeshipCertificate in [CTDL-TERMS].
|
Assessment |
Direct, indirect, formative, and summative evaluation or estimation of the nature, ability, or quality of an entity, performance, or outcome of an action. This is an exact match of Assessment in [CTDL-TERMS].
|
Assignment | Represents the result of a curricular, or co-curricular assignment or exam. |
AssociateDegree |
College/university award for students typically completing the first one to two years of post secondary school education. Equivalent to an award at UNESCO ISCED 2011, Level 5. This is an exact match of AssociateDegree in [CTDL-TERMS].
|
Award | Represents an award. |
Badge |
Visual symbol containing verifiable claims in accordance with the Open Badges specification and delivered digitally. This is an exact match of Badge in [CTDL-TERMS].
|
BachelorDegree |
College/university award for students typically completing three to five years of education where course work and activities advance skills beyond those of the first one to two years of college/university study. Equivalent to an award at UNESCO ISCED 2011, Level 6. Use for 5-year cooperative (work-study) programs. A cooperative plan provides for alternate class attendance and employment in business, industry, or government; thus, it allows students to combine actual work experience with their college studies. Also includes bachelor's degrees in which the normal 4 years of work are completed in 3 years. This is an exact match of BachelorDegree in [CTDL-TERMS].
|
Certificate |
Credential that designates requisite knowledge and skills of an occupation, profession, or academic program. This is an exact match of Certificate in [CTDL-TERMS].
|
CertificateOfCompletion |
Credential that acknowledges completion of an assignment, training or other activity. A record of the activity may or may not exist, and the credential may or may not be designed as preparation for another resource such as a credential, assessment, or learning opportunity. This is an exact match of CertificateOfCompletion in [CTDL-TERMS].
|
Certification |
Time-limited, revocable, renewable credential awarded by an authoritative body for demonstrating the knowledge, skills, and abilities to perform specific tasks or an occupation. Certifications can typically be revoked if not renewed, for a violation of a code of ethics (if applicable) or proven incompetence after due process. Description of revocation criteria for a specific Certification should be defined using Revocation Profile. This is an exact match of Certification in [CTDL-TERMS].
|
CommunityService | Represents community service. |
Competency |
Measurable or observable knowledge, skill, or ability necessary to successful performance of a person. This is an exact match of Competency in [CTDL-ASN-TERMS].
|
Course | Represents a course completion. |
CoCurricular | Represents a co-curricular activity. |
Degree |
Academic credential conferred upon completion of a program or course of study, typically over multiple years at a college or university. This is an exact match of Degree in [CTDL-TERMS].
|
Diploma |
Credential awarded by educational institutions for successful completion of a course of study or its equivalent. This is an exact match of Diploma in [CTDL-TERMS].
|
DoctoralDegree |
Highest credential award for students who have completed both a bachelor's degree and a master's degree or their equivalent as well as independent research and/or a significant project or paper. Equivalent to UNESCO ISCED, Level 8. This is an exact match of DoctoralDegree in [CTDL-TERMS].
|
Fieldwork | Represents practical activities that are done away school, college, or place of work. Includes internships and practicums. |
GeneralEducationDevelopment |
(GED) Credential awarded by examination that demonstrates that an individual has acquired secondary school-level academic skills. Equivalent to a secondary school diploma, based on passing a state- or province-selected examination such as GED, HiSET, or TASC; or to an award at UNESCO ISCED 2011 Levels 2 or 3. This is an exact match of GeneralEducationDevelopment in [CTDL-TERMS].
|
JourneymanCertificate |
Credential awarded to skilled workers on successful completion of an apprenticeship in industry trades and professions. This is an exact match of JourneymanCertificate in [CTDL-TERMS].
|
LearningProgram |
Set of learning opportunities that leads to an outcome, usually a credential like a degree or certificate. This is an exact match of LearningProgram in [CTDL-TERMS].
|
License |
Credential awarded by a government agency or other authorized organization that constitutes legal authority to do a specific job and/or utilize a specific item, system or infrastructure and are typically earned through some combination of degree or certificate attainment, certifications, assessments, work experience, and/or fees, and are time-limited and must be renewed periodically. This is an exact match of License in [CTDL-TERMS].
|
Membership | Represents membership. |
ProfessionalDoctorate |
Doctoral degree conferred upon completion of a program providing the knowledge and skills for the recognition, credential, or license required for professional practice. Equivalent to an award at UNESCO ISCED 2011, Level 8. This is an exact match of ProfessionalDoctorate in [CTDL-TERMS].
|
QualityAssuranceCredential |
Credential assuring that an organization, program, or awarded credential meets prescribed requirements and may include development and administration of qualifying examinations. This is an exact match of QualityAssuranceCredential in [CTDL-TERMS].
|
MasterCertificate |
Credential awarded upon demonstration through apprenticeship of the highest level of skills and performance in industry trades and professions. This is an exact match of MasterCertificate in [CTDL-TERMS].
|
MasterDegree |
Credential awarded for a graduate level course of study where course work and activities advance skills beyond those of the bachelor's degree or its equivalent. Equivalent to an award at UNESCO ISCED 2011, Level 7. This is an exact match of MasterDegree in [CTDL-TERMS].
|
MicroCredential |
Credential that addresses a subset of field-specific knowledge, skills, or competencies; often developmental with relationships to other micro-credentials and field credentials. This is an exact match of MicroCredential in [CTDL-TERMS].
|
ResearchDoctorate |
Doctoral degree conferred for advanced work beyond the master level, including the preparation and defense of a thesis or dissertation based on original research, or the planning and execution of an original project demonstrating substantial artistic or scholarly achievement. Equivalent to an award at UNESCO ISCED 2011, Level 8. This is an exact match of ResearchDoctorate in [CTDL-TERMS].
|
SecondarySchoolDiploma |
Diploma awarded by secondary education institutions for successful completion of a secondary school program of study. Equivalent to an award at UNESCO ISCED 2011 Levels 2 or 3. This is an exact match of SecondarySchoolDiploma in [CTDL-TERMS].
|
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'. |
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. |
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'. |
Term | Description |
---|---|
name | |
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:'. |
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:'. |
Defined vocabulary to convey the status of an achievement.
Term | Description |
---|---|
Completed | The learner has successfully completed the achievement. This is the default status if no status result is included. |
Enrolled | The learner is enrolled in the activity described by the achievement. |
Failed | The learner has unsuccessfully completed the achievement. |
InProgress | The learner has started progress in the activity described by the achievement. |
OnHold | The learner has completed the activity described by the achievement, but successful completion has not been awarded, typically for administrative reasons. |
Provisional | The learner has completed the activity described by the achievement, but the completed result has not yet been confirmed. |
Withdrew | The learner withdrew from the activity described by the achievement before completion. |
The data models in this section are used by the § 6. Open Badges API.
Property | Type | Description | Multiplicity |
---|---|---|---|
credential | AchievementCredential |
OpenBadgeCredentials that have not been signed with the VC-JWT Proof Format MUST be in the credential array.
|
[0..*] |
compactJwsString | CompactJws |
OpenBadgeCredentials that have been signed with the VC-JWT Proof Format MUST be in the compactJwsString array.
|
[0..*] |
The data models in this section are shared by all 1EdTech service specifications.
This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider.
Property | Type | Description | Multiplicity |
---|---|---|---|
imsx_codeMajor | Imsx_CodeMajor Enumeration | The code major value (from the corresponding enumerated vocabulary). | [1] |
imsx_severity | Imsx_Severity Enumeration | The severity value (from the corresponding enumerated vocabulary). | [1] |
imsx_description | String | A human readable description supplied by the entity creating the status code information. | [0..1] |
imsx_codeMinor | Imsx_CodeMinor | The set of reported code minor status codes. | [0..1] |
This is the set of primary status report values i.e. the major code assigned to the status block. This is used in conjunction with the 'Severity' structure in the status object.
Term | Description |
---|---|
failure | Denotes that the transaction request has failed. The detailed reason will be reported in the accompanying 'codeMinor' fields. |
processing | Denotes that the request is being processed at the destination or there has been a local transmission failure. This value is used in asynchronous services. |
success | Denotes that the request has been successfully completed. If the associated 'severity' value is 'warning' then the request has been partially successful i.e. best effort by the service provider. Other parts of the status information may provide more insight into a partial success response. |
unsupported | Denotes that the service provider does not support the requested operation. This is the required default response for an unsupported operation by an implementation. |
This is the context for the status report values. This is used in conjunction with the 'CodeMajor' structure in the status object.
Term | Description |
---|---|
error | A catastrophic error has occurred in processing the request and so the request was not completed (the Service Provider may not even have received the request). |
status | The request has been completed and a response was received from the Service Provider. |
warning | The request has only been partially completed. For an asynchronous service a further response should be expected. |
This is the container for the set of code minor status codes reported in the responses from the Service Provider.
Property | Type | Description | Multiplicity |
---|---|---|---|
imsx_codeMinorField | Imsx_CodeMinorField | Each reported code minor status code. | [1..*] |
This is the container for a single code minor status code.
Property | Type | Description | Multiplicity |
---|---|---|---|
imsx_codeMinorFieldName | NormalizedString | This should contain the identity of the system that has produced the code minor status code report. | [1] |
imsx_codeMinorFieldValue | Imsx_CodeMinorFieldValue Enumeration | The code minor status code (this is a value from the corresponding enumerated vocabulary). | [1] |
This is the set of codeMinor status codes that are used to provide further insight into the completion status of the end-to-end transaction i.e. this should be used to provide more information than would be supplied by an HTTP code.
Term | Description |
---|---|
forbidden | This is used to indicate that the server can be reached and process the request but refuses to take any further action. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '403'. |
fullsuccess | The request has been fully and successfully implemented by the service provider. For a REST binding this will have an HTTP code of '200' for a successful search request. |
internal_server_error | This should be used only if there is catastrophic error and there is not a more appropriate code. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '500'. |
invalid_data | This error condition may occur if a JSON request/response body contains well-formed (i.e. syntactically correct), but semantically erroneous, JSON instructions. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and a HTTP code of '422'. |
invalid_query_parameter | An invalid data query parameter field was supplied and the query could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '400'. |
misdirected_request | This is used to indicate that the request was made with a protocol that is not supported by the server. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '421'. |
not_acceptable | This is used to indicate that the server cannot provide a response with a Content-Type that matches any of the content types in the request Accept header. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '406'. |
not_allowed | This is used to indicate that the server does not allow the HTTP method. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '405'. |
not_found | This is used to indicate that the server did not find the resource. This would be accompanied by the 'codeMajor/severity' values of 'failure/status' and for a REST binding a HTTP code of '404'. |
not_modified | This is used to indicate that the server did not modify the resource. This would be accompanied by the 'codeMajor/severity' values of 'success/status' and for a REST binding a HTTP code of '304'. |
server_busy | The server is receiving too many requests. Retry at a later time. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '429'. |
unauthorizedrequest | The request was not correctly authorised. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '401'. |
unknown | Any other error occurred. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code corresponding to the error. |
The data models in this section are shared by all 1EdTech service specifications.
The Service Description Document (SDD) is a machine readable document that contains the description of the service features supported by the Provider/Platform. The SDD is an OpenAPI 3.0 (JSON) [OPENAPIS-3.0] structured document that MUST be a profiled version of the OpenAPI 3.0 (JSON) file provided provided with this specification. This profiled version contains all of the details about the supported set of service end-points, the supported optional data fields, definitions of the proprietary data fields supplied using the permitted extension mechanisms, definitions of the available proprietary endpoints, and information about the security mechanisms.
Property | Type | Description | Multiplicity |
---|---|---|---|
openapi | String | This string MUST be the semantic version number of the OpenAPI Specification version that the OpenAPI document uses. The openapi field SHOULD be used by tooling specifications and clients to interpret the OpenAPI document. This is not related to the API info.version string. | [1] |
info | OpenApiInfo |
Information about the API and the resource server.
Note The proprietary fields x-imssf-image and x-imssf-privacyPolicyUrl are found here. |
[1] |
components | OpenApiComponents |
Holds a set of reusable objects for different aspects of the OAS.
Note The proprietary field x-imssf-registrationUrl is found in the securitySchemes components. |
[1] |
This class can be extended with additional properties. |
Holds a set of reusable objects for different aspects of the OAS. All objects defined within the components object will have no effect on the API unless they are explicitly referenced from properties outside the components object.
Property | Type | Description | Multiplicity |
---|---|---|---|
securitySchemes | OpenApiSecuritySchemes | The Map of security scheme objects supported by this specification. | [1] |
This class can be extended with additional properties. |
The object provides metadata about the API. The metadata MAY be used by the clients if needed, and MAY be presented in editing or documentation generation tools for convenience.
Property | Type | Description | Multiplicity |
---|---|---|---|
termsOfService | URL | A fully qualified URL to the resource server's terms of service. | [1] |
title | String | The name of the resource server. | [1] |
version | String | The version of the API. | [1] |
x-imssf-image | URI | An image representing the resource server. MAY be a Data URI or the URL where the image may be found. | [0..1] |
x-imssf-privacyPolicyUrl | URL | A fully qualified URL to the resource server's privacy policy. | [1] |
This class can be extended with additional properties. |
Defines an OAuth2 security scheme that can be used by the operations.
Property | Type | Description | Multiplicity |
---|---|---|---|
type | String |
MUST be the string oauth2 .
|
[1] |
description | String | A short description for the security scheme. | [0..1] |
x-imssf-registrationUrl | URL | A fully qualified URL to the Client Registration endpoint. | [1] |
This class can be extended with additional properties. |
The Map of security scheme objects supported by this specification.
Property | Type | Description | Multiplicity |
---|---|---|---|
OAuth2ACG | OpenApiOAuth2SecurityScheme | REQUIRED if the authorization server supports the Authorization Code Grant Flow. | [0..1] |
The data models in this section are shared by all 1EdTech service specifications.
This is the set of ASCII error code strings that may be returned in response to a client registration request. See [RFC7591].
Term | Description |
---|---|
invalid_redirect_uri | The value of one or more redirection URIs is invalid. |
invalid_client_metadata | The value of one of the client metadata fields is invalid and the server has rejected this request. Note that an authorization server MAY choose to substitute a valid value for any requested parameter of a client's metadata. |
invalid_software_statement | The software statement presented is invalid. This MUST only be returned if a Software Statement has been supplied in the registration request. Use of a Software Statement is NOT RECOMMENDED. |
unapproved_software_statement | The software statement presented is not approved for use by this authorization server. This MUST only be returned if a Software Statement has been supplied in the registration request. Use of a Software Statement is NOT RECOMMENDED. |
This is the set of ASCII error code strings that may be returned in response to a client token request. See Section 5.2 of [RFC6749].
Term | Description |
---|---|
invalid_request | The request is missing a required parameter, includes an unsupported parameter value (other than grant type), repeats a parameter, includes multiple credentials, utilizes more than one mechanism for authenticating the client, or is otherwise malformed. |
invalid_client | Client authentication failed (e.g., unknown client, no client authentication included, or unsupported authentication method). The authorization server MAY return an HTTP 401 (Unauthorized) status code to indicate which HTTP authentication schemes are supported. If the client attempted to authenticate via the "Authorization" request header field, the authorization server MUST respond with an HTTP 401 (Unauthorized) status code and include the "WWW-Authenticate" response header field matching the authentication scheme used by the client. |
invalid_grant | The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client. |
unauthorized_client | The authenticated client is not authorized to use this authorization grant type. |
unsupported_grant_type | The authorization grant type is not supported by the authorization server. |
unsupported_token_type | The authorization server does not support the revocation of the presented token type. That is, the client tried to revoke an access token on a server not supporting this feature. |
invalid_scope | The requested scope is invalid, unknown, malformed, or exceeds the scope granted by the resource owner. |
Data models for the JSON Web Token Proof Format (VC-JWT) [VC-DATA-MODEL-2.0] shared by Open Badges Specification v3.0 and Comprehensive Learner Record Standard v2.0.
Property | Type | Description | Multiplicity |
---|---|---|---|
id | URI |
The id of the verification method MUST be the JWK thumbprint calculated from the publicKeyMultibase property value according to [MULTIBASE].
|
[1] |
type | String |
The type of the verification method MUST be the string DataIntegrityProof .
|
[0..1] |
cryptosuite | String |
The cryptosuite of the verification method MUST be the string eddsa-rdf-2022 .
|
[1] |
controller | URI | The identify of the entity that controls this public key. | [0..1] |
publicKeyMultibase | String |
The publicKeyMultibase property of the verification method MUST be a public key encoded according to [MULTICODEC] and formatted according to [MULTIBASE]. The multicodec encoding of a Ed25519 public key is the two-byte prefix 0xed01 followed by the 32-byte public key data.
|
[1] |
A JSON Web Key (JWK) formatted according to [RFC7517].
Property | Type | Description | Multiplicity |
---|---|---|---|
kty | String |
The kty (key type) parameter identifies the cryptographic algorithm family used with the key, such as RSA or EC .
|
[1] |
use | String |
The use (public key use) parameter identifies the intended use of the public key, such as sig (signature) or end (encryption).
|
[0..1] |
key_ops | String |
The key_ops (key operations) parameter identifies the operation(s) for which the key is intended to be used, such as sign (compute digital signature or MAC) or verify (verify digital signature or MAC).
|
[0..1] |
alg | String |
The alg (algorithm) parameter identifies the algorithm intended for use with the key, such as RS256 or PS256 .
|
[0..1] |
kid | String |
The kid (key ID) parameter is used to match a specific key.
|
[0..1] |
x5u | URI |
The x5u (X.509 URL) parameter is a URI that refers to a resource for an X.509 public key certificate or certificate chain [RFC5280].
|
[0..1] |
x5c | String |
The x5c (X.509 certificate chain) parameter contains a chain of one or more PKIX certificates [RFC5280].
|
[0..*] |
x5t | String |
The x5t (X.509 certificate SHA-1 thumbprint) parameter is a base64url-encoded SHA-1 thumbprint (a.k.a. digest) of the DER encoding of an X.509 certificate [RFC5280].
|
[0..1] |
x5t_S256 | String |
The x5t#S256 (X.509 certificate SHA-256 thumbprint) parameter is a base64url-encoded SHA-256 thumbprint (a.k.a. digest) of the DER encoding of an X.509 certificate [RFC5280].
|
[0..1] |
This class can be extended with additional properties. |
A JWK Set (JWKS) formatted according to [RFC7517].
Property | Type | Description | Multiplicity |
---|---|---|---|
keys | JWK | A JWK Set is a JSON object that represents a set of JWKs. | [1..*] |
The derived types in this section are shared by all 1EdTech specifications.
Type | Description |
---|---|
ASCIIString | An ASCII [RFC20] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E. |
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 .
|
CompactJws |
A String in Compact JWS format [RFC7515].
|
CountryCode | A two-digit ISO 3166-1 alpha-2 country code [ISO3166-1]. |
DateTimeZ |
A DateTime with the trailing timezone specifier included, e.g. 2021-09-07T02:09:59+02:00
|
EmailAddress |
A NormalizedString representing an email address.
|
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).
|
LanguageCode | A language code [BCP47]. |
Markdown |
A String that may contain Markdown.
|
NumericDate |
An Integer representing the number of seconds from from 1970-01-01T00:00:00Z UTC until the specified UTC data/time, ignoring leap seconds.
|
PhoneNumber |
A NormalizedString representing a phone number.
|
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]
|
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. |
DateTime | An [ISO8601] time using the syntax YYYY-MM-DDThh:mm:ss. |
Float | |
Integer | |
Language | A language code [BCP47]. |
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].
|
PositiveInteger | |
String | Character strings. |
The data models in this section are used by the § 9. Verification and Validation process for supporting older credentials created with [VC-DATA-MODEL].
AnyAchievementCredential represents an AchievementCredential that might be built using [VC-DATA-MODEL] or [VC-DATA-MODEL-2.0]. The scope of this class is only for verification purposes. It is not intended to be used in the creation of new credentials, where the § B.1.2 AchievementCredential class MUST be used.
The ultimate representation of this class is a choice of exactly one of the classes in the following set:
Type | Description |
---|---|
AchievementCredential |
AchievementCredentials are representations of an awarded achievement, used to share information about a achievement belonging to one earner. Maps to a Verifiable Credential as defined in the [VC-DATA-MODEL-2.0]. As described in § 8. Proofs (Signatures), at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the proof property.
|
AchievementCredentialv1p1 |
AchievementCredentials are representations of an awarded achievement, used to share information about a achievement belonging to one earner. Maps to a Verifiable Credential as defined in the [VC-DATA-MODEL]. As described in § 8. Proofs (Signatures), at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the proof property.
|
AchievementCredentials are representations of an awarded achievement, used to share information about a achievement belonging to one earner. Maps to a Verifiable Credential as defined in the [VC-DATA-MODEL]. As described in § 8. Proofs (Signatures), at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the proof
property.
Property | Type | Description | Multiplicity |
---|---|---|---|
@context | Context |
The value of the @context property MUST be an ordered set where the first item is a URI with the value 'https://www.w3.org/2018/credentials/v1', and the second item is a URI with the value 'https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json'.
|
[2..*] |
id | URI | Unambiguous reference to the credential. | [1] |
type | IRI | The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'AchievementCredential' or the URI 'OpenBadgeCredential'. | [1..*] |
name | String | The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views. | [1] |
description | String | The short description of the credential for display purposes in wallets. | [0..1] |
image | Image | The image representing the credential for display purposes in wallets. | [0..1] |
awardedDate | DateTimeZ |
Timestamp of when the credential was awarded. validFrom is used to determine the most recent version of a Credential in conjunction with issuer and id . Consequently, the only way to update a Credental is to update the validFrom , losing the date when the Credential was originally awarded. awardedDate is meant to keep this original date.
|
[0..1] |
credentialSubject | AchievementSubjectv1p1 | The recipient of the achievement. | [1] |
endorsement | EndorsementCredentialv1p1 | Allows endorsers to make specific claims about the credential, and the achievement and profiles in the credential. These endorsements are signed with a Data Integrity proof format. | [0..*] |
endorsementJwt | CompactJws | Allows endorsers to make specific claims about the credential, and the achievement and profiles in the credential. These endorsements are signed with the VC-JWT proof format. | [0..*] |
evidence | Evidence | [0..*] | |
issuer | Profilev1p1 | A description of the individual, entity, or organization that issued the credential. | [1] |
issuanceDate | DateTimeZ | Timestamp of when the credential was issued. | [1] |
expirationDate | DateTimeZ | If the credential has some notion of expiry, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered expired. | [0..1] |
proof | Proof | If present, one or more embedded cryptographic proofs that can be used to detect tampering and verify the authorship of the credential. | [0..*] |
credentialSchema | CredentialSchema |
The value of the credentialSchema property MUST be one or more data schemas that provide verifiers with enough information to determine if the provided data conforms to the provided schema.
|
[0..*] |
credentialStatus | CredentialStatus | The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked. | [0..1] |
refreshService | RefreshService | The information in RefreshService is used to refresh the verifiable credential. | [0..1] |
termsOfUse | TermsOfUse |
The value of the termsOfUse property tells the verifier what actions it is required to perform (an obligation), not allowed to perform (a prohibition), or allowed to perform (a permission) if it is to accept the verifiable credential.
|
[0..*] |
This class can be extended with additional properties. |
AnyEndorsementCredential represents an EndorsementCredential that might be built using [VC-DATA-MODEL] or [VC-DATA-MODEL-2.0]. The scope of this class is only for verification purposes. It is not intended to be used in the creation of new credentials, where the [[[#endorsementcredential]] class MUST be used.
The ultimate representation of this class is a choice of exactly one of the classes in the following set:
Type | Description |
---|---|
EndorsementCredential |
A verifiable credential that asserts a claim about an entity. As described in § 8. Proofs (Signatures), at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the proof property.
|
EndorsementCredentialv1p1 |
A verifiable credential that asserts a claim about an entity. As described in § 8. Proofs (Signatures), at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the proof property.
|
A verifiable credential that asserts a claim about an entity. As described in § 8. Proofs (Signatures), at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the proof
property.
Property | Type | Description | Multiplicity |
---|---|---|---|
@context | Context |
The value of the @context property MUST be an ordered set where the first item is a URI with the value 'https://www.w3.org/2018/credentials/v1', and the second item is a URI with the value 'https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json'.
|
[2..*] |
type | IRI | The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'. | [1..*] |
id | URI | Unambiguous reference to the credential. | [1] |
name | String | The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views. | [1] |
description | String | The short description of the credential for display purposes in wallets. | [0..1] |
credentialSubject | EndorsementSubject | The individual, entity, organization, assertion, or achievement that is endorsed and the endorsement comment. | [1] |
awardedDate | DateTimeZ |
Timestamp of when the credential was awarded. validFrom is used to determine the most recent version of a Credential in conjunction with issuer and id . Consequently, the only way to update a Credental is to update the validFrom , losing the date when the Credential was originally awarded. awardedDate is meant to keep this original date.
|
[0..1] |
issuer | Profilev1p1 | A description of the individual, entity, or organization that issued the credential. | [1] |
issuanceDate | DateTimeZ | Timestamp of when the credential was issued. | [1] |
expirationDate | DateTimeZ | If the credential has some notion of expiry, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered expired. | [0..1] |
proof | Proof | If present, one or more embedded cryptographic proofs that can be used to detect tampering and verify the authorship of the credential. | [0..*] |
credentialSchema | CredentialSchema |
The value of the credentialSchema property MUST be one or more data schemas that provide verifiers with enough information to determine if the provided data conforms to the provided schema.
|
[0..*] |
credentialStatus | CredentialStatus | The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked. | [0..1] |
refreshService | RefreshService | The information in RefreshService is used to refresh the verifiable credential. | [0..1] |
termsOfUse | TermsOfUse |
The value of the termsOfUse property tells the verifier what actions it is required to perform (an obligation), not allowed to perform (a prohibition), or allowed to perform (a permission) if it is to accept the verifiable credential.
|
[0..*] |
This class can be extended with additional properties. |
A Verifiable Credential as defined in the [VC-DATA-MODEL]. As described in § 8. Proofs (Signatures), at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the proof
property.
Property | Type | Description | Multiplicity |
---|---|---|---|
@context | Context |
The value of the @context property MUST be an ordered set where the first item is a URI with the value 'https://www.w3.org/2018/credentials/v1'.
|
[1..*] |
id | URI | Unambiguous reference to the credential. | [0..1] |
type | IRI | The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential'. | [1..*] |
issuer | Profilev1p1 | A description of the individual, entity, or organization that issued the credential. | [1] |
issuanceDate | DateTimeZ | Timestamp of when the credential was issued. | [1] |
expirationDate | DateTimeZ | If the credential has some notion of expiry, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered expired. | [0..1] |
credentialSubject | CredentialSubject | The subject of the credential. | [1] |
proof | Proof | If present, one or more embedded cryptographic proofs that can be used to detect tampering and verify the authorship of the credential. | [0..*] |
credentialSchema | CredentialSchema |
The value of the credentialSchema property MUST be one or more data schemas that provide verifiers with enough information to determine if the provided data conforms to the provided schema.
|
[0..*] |
credentialStatus | CredentialStatus | The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked. | [0..1] |
refreshService | RefreshService | The information in RefreshService is used to refresh the verifiable credential. | [0..1] |
termsOfUse | TermsOfUse |
The value of the termsOfUse property tells the verifier what actions it is required to perform (an obligation), not allowed to perform (a prohibition), or allowed to perform (a permission) if it is to accept the verifiable credential.
|
[0..*] |
This class can be extended with additional properties. |
A collection of information about the recipient of an achievement. Maps to Credential Subject in [VC-DATA-MODEL-2.0].
Property | Type | Description | Multiplicity |
---|---|---|---|
id | URI |
An identifier for the Credential Subject. Either id or at least one identifier MUST be supplied.
|
[0..1] |
type | IRI | The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'AchievementSubject'. | [1..*] |
activityEndDate | DateTime | The datetime the activity ended. | [0..1] |
activityStartDate | DateTime | The datetime the activity started. | [0..1] |
creditsEarned | Float |
The number of credits earned, generally in semester or quarter credit hours. This field correlates with the Achievement creditsAvailable field.
|
[0..1] |
achievement | Achievementv1p1 | The achievement being awarded. | [1] |
identifier | IdentityObject |
Other identifiers for the recipient of the achievement. Either id or at least one identifier MUST be supplied.
|
[0..*] |
image | Image | An image representing this user's achievement. If present, this must be a PNG or SVG image, and should be prepared via the 'baking' instructions. An 'unbaked' image for the achievement is defined in the Achievement class and should not be duplicated here. | [0..1] |
licenseNumber | String | The license number that was issued with this credential. | [0..1] |
narrative | Markdown | A narrative that connects multiple pieces of evidence. Likely only present at this location if evidence is a multi-value array. | [0..1] |
result | Result | The set of results being asserted. | [0..*] |
role | String | Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc. | [0..1] |
source | Profilev1p1 | The person, organization, or system that assessed the achievement on behalf of the issuer. For example, a school may assess the achievement, while the school district issues the credential. | [0..1] |
term | String | The academic term in which this assertion was achieved. | [0..1] |
A collection of information about the accomplishment recognized by the Assertion. Many assertions may be created corresponding to one Achievement.
Property | Type | Description | Multiplicity |
---|---|---|---|
id | URI | Unique URI for the Achievement. | [1] |
type | IRI | [1..*] | |
alignment | Alignment | An object describing which objectives or educational standards this achievement aligns to, if any. | [0..*] |
achievementType | AchievementType Enumeration | The type of achievement. This is an extensible vocabulary. | [0..1] |
creator | Profilev1p1 | The person or organization that created the achievement definition. | [0..1] |
creditsAvailable | Float | Credit hours associated with this entity, or credit hours possible. For example 3.0. | [0..1] |
criteria | Criteria | Criteria describing how to earn the achievement. | [1] |
description | String | A short description of the achievement. | [1] |
endorsement | EndorsementCredentialv1p1 | Allows endorsers to make specific claims about the Achievement. These endorsements are signed with a Data Integrity proof format. | [0..*] |
endorsementJwt | CompactJws | Allows endorsers to make specific claims about the Achievement. These endorsements are signed with the VC-JWT proof format. | [0..*] |
fieldOfStudy | String | Category, subject, area of study, discipline, or general branch of knowledge. Examples include Business, Education, Psychology, and Technology. | [0..1] |
humanCode | String | The code, generally human readable, associated with an achievement. | [0..1] |
image | Image | An image representing the achievement. | [0..1] |
inLanguage | LanguageCode | The language of the achievement. | [0..1] |
name | String | The name of the achievement. | [1] |
otherIdentifier | IdentifierEntry | A list of identifiers for the described entity. | [0..*] |
related | Related | The related property identifies another Achievement that should be considered the same for most purposes. It is primarily intended to identify alternate language editions or previous versions of Achievements. | [0..*] |
resultDescription | ResultDescription | The set of result descriptions that may be asserted as results with this achievement. | [0..*] |
specialization | String | Name given to the focus, concentration, or specific area of study defined in the achievement. Examples include 'Entrepreneurship', 'Technical Communication', and 'Finance'. | [0..1] |
tag | String | One or more short, human-friendly, searchable, keywords that describe the type of achievement. | [0..*] |
version | String | The version property allows issuers to set a version string for an Achievement. This is particularly useful when replacing a previous version with an update. | [0..1] |
This class can be extended with additional properties. |
A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.
Property | Type | Description | Multiplicity |
---|---|---|---|
id | URI | Unique URI for the Issuer/Profile file. | [1] |
type | IRI | The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'. | [1..*] |
name | String | The name of the entity or organization. | [0..1] |
url | URI | The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP. | [0..1] |
phone | PhoneNumber | A phone number. | [0..1] |
description | String | A short description of the issuer entity or organization. | [0..1] |
endorsement | EndorsementCredentialv1p1 | Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with a Data Integrity proof format. | [0..*] |
endorsementJwt | CompactJws | Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format. | [0..*] |
image | Image | An image representing the issuer. This must be a PNG or SVG image. | [0..1] |
EmailAddress | An email address. | [0..1] | |
address | Address | An address for the individual or organization. | [0..1] |
otherIdentifier | IdentifierEntry | A list of identifiers for the described entity. | [0..*] |
official | String |
If the entity is an organization, official is the name of an authorized official of the organization.
|
[0..1] |
parentOrg | Profile | The parent organization of the entity. | [0..1] |
familyName | String | Family name. In the western world, often referred to as the 'last name' of a person. | [0..1] |
givenName | String | Given name. In the western world, often referred to as the 'first name' of a person. | [0..1] |
additionalName | String | Additional name. Includes what is often referred to as 'middle name' in the western world. | [0..1] |
patronymicName | String | Patronymic name. | [0..1] |
honorificPrefix | String | Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr'). | [0..1] |
honorificSuffix | String | Honorific suffix(es) following a person's name (e.g. 'M.D, PhD'). | [0..1] |
familyNamePrefix | String | Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer'). | [0..1] |
dateOfBirth | Date | Birthdate of the person. | [0..1] |
This class can be extended with additional properties. |
This standard can be extended in three ways:
- Extend the Data Model with new classes and new properties to existing extensible classes
- Extend the Extensible Enumerated Vocabularies in the Data Model
- Extend the API with new endpoints and new responses to existing endpoints
Extensions SHOULD be presented to the Comprehensive Learner Record project group for review and socialization.
Extensions MUST NOT be required.
Extensions WILL NOT be tested during conformance testing.
This standard can also be profiled. In general, profiling is used to:
- Refine which endpoints are used and which operations are supported for each endpoint
- Refine the data models by increasing the constraints on the base definitions
A data model extension may add new classes to the Data Model and/or new properties to existing extensible classes. Extensible classes are identified by the phrase, "This class can be extended with additional properties" shown at the bottom of the table of properties. For example, the Alignment class is extensible.
The extension SHOULD be documented with the following artifacts:
- A description of the extension and the problem it solves. Ideally the description would include a use case formatted like the use cases in this specification.
- Definitions of the new classes being introduced. Each definition MUST include the class name, description, and properties; and indicate whether the class can be extended.
- Definitions of the new properties being introduced. The each definition MUST include the property name, type, and description; and indicate whether the property is required.
- A JSON Schema file that defines the new classes and/or properties. The JSON Schema file MUST be hosted on a publicly accessible server with no CORS restrictions.
- A JSON-LD Context file that defines the new classes and/or properties. The context file MUST be hosted on a publically accessible server with no CORS restrictions.
- Ideally a modified version of the CLR Standard OpenAPI file that includes the new classes and/or properties.
To use the extension implementers MUST do the following:
- Include the JSON-LD Context file URL in the
@context
property. See Serialization. - Include the JSON Schema file URL in the
credentialSchema
property.
All extensible enumerated vocabularies may be extended with custom terms. Extensible vocabularies are identified by the phrase, "This enumeration can be extended with new, proprietary terms" shown at the bottom of the table of terms. For example, the AchivementType enumeration is extensible.
Extended terms MUST start with the prefix "ext:". For example, "ext:MyTerm".
The extended terms SHOULD be documented with the following artifacts:
- A description of the extension and the problem it solves. Ideally the description would include a use case formatted like the use cases in this specification.
- Definitions of each extended term. Each definition MUST include the extended term (e.g. "ext:MyTerm") and description.
- A JSON Schema file is not required. The existing JSON Schema for extensible vocabularies allows extended terms that follow the naming rule above.
- You MAY include a JSON-LD Context file that defines the new extended terms. If one is supplied, it MUST be hosted on a publically accessible server with no CORS restrictions.
To use the extended vocabulary implementers MAY do the following:
- Include the JSON-LD Context file URL in the
@context
property. See Serialization.
An API extension may add new endpoints (with or without new scopes) to the CLR Standard API and/or new responses to the existing endpoints.
The extension SHOULD be documented with the following artifacts:
- A description of the extension and the problem it solves. Ideally the description would include a use case formatted like the use cases in this specification.
- Definitions of the new endpoints being introduced. Each definition MUST include the endpoint name, description, HTTP Method, URL format, required request query parameters (if any), required request headers, required request payload (if any), required responses, and required response headers.
- The URL format MUST following 1EdTech naming conventions. Specifically, the path "/ims/clr/v2p0/" must precede the final URL segment. For example, "/ims/clr/v2p0/myendpoint".
- The definition must indicate if the endpoint requires authorization. If it does, the definition must define the scope that is required. New endpoints that require authorization MUST follow the requirements shown in CLR Standard API Security.
- Each required query parameter definition MUST include the parameter type and description.
- Each required request header definition MUST include the header and a description.
- A required request payload definition MUST include the payload type.
- Each required request response definition MUST include the HTTP Status Code, payload type (if any), and description. Non-successful responses (i.e. HTTP Status Code >= 400) SHOULD use the Imsx_StatusInfo payload.
- Each requied response header defintion MUST include the header and a description.
- Definitions of the new responses to existing endpoints. The each definition MUST include the HTTP Status Code, payload type (if any), and description. Non-successful responses (i.e. HTTP Status Code >= 400) SHOULD use the Imsx_StatusInfo payload.
- Ideally an OpenAPI file that describes the new endpoints and/or responses to existing endpoints.
Profiling is the process by which an 1EdTech specification is tailored to meet the requirements of a specific community: the community could be a reflection of a market sector, a geographic location, etc. An example of such a community is the Norwegian K-12/Schools for whom a profile of the 1EdTech OneRoster 1.2 specification has been created. The process of profiling starts with the corresponding base specification and defines a set of new constraints to make the subsequent modified specification better fit the requirements of the target community. Once the profile has been defined, the next step is to create the corresponding Conformance Test Systems and Certification process for that profile: these will be modified versions of the equivalents created for the base specification. It is recommended that profiling is undertaken within 1EdTech so that the 1EdTech model driven specification tools can be used.
A profile is the product produced by the process of specification Profiling. A Profile of an 1EdTech specification consists of a set of new constraints. In general an 1EdTech specification enables a wide range education and learning workflows, processes and practices. A profile is designed to establish and impose best practices for the target community. A profile MUST only increase constraints i.e. it MUST NOT relax constraints in the base specification. For example the multiplicity of a property in the data model MAY be changed from [1..] (required and permitting many) to [1..1] (required and only one) but MUST NOT become [0..] (optional and permitting many). The most common profiling changes include more strict data typing, changes to enumerations, vocabulary changes, prohibition of endpoints and creation of new endpoints. A profile could make use of the extension capabilties to extend the specification to support new features. The key objective of a rofile is to remove, wherever possible, interoperability uncertainty e.g. by removing optionality.
It is strongly recommended that a profile of this standard is undertaken either by, or with the close support, of 1EdTech. However, no matter who is responsible for creating the profile artefacts (documents, schemas, etc.), it is strongly recommended that 1EdTech specification tools are used. This will ensure that the artefacts are consistent with the base specifications and that useful support documentation is automatically produced e.g. creation of a document that summarises the differences between the base specification and the profile.
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
],
"id": "http://example.com/credentials/3527",
"type": ["VerifiableCredential", "OpenBadgeCredential"],
"issuer": {
"id": "https://example.com/issuers/876543",
"type": ["Profile"],
"name": "Example Corp"
},
"validFrom": "2010-01-01T00:00:00Z",
"name": "Teamwork Badge",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": ["AchievementSubject"],
"achievement": {
"id": "https://example.com/achievements/21st-century-skills/teamwork",
"type": ["Achievement"],
"criteria": {
"narrative": "Team members are nominated for this badge by their peers and recognized upon review by Example Corp management."
},
"description": "This badge recognizes the development of the capacity to collaborate within a group environment.",
"name": "Teamwork"
}
}
}
{ "@context": [ "https://www.w3.org/ns/credentials/v2", "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json" ], "id": "http://example.com/credentials/3527", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "issuer": { "id": "https://example.com/issuers/876543", "type": [ "Profile" ], "name": "Example Corp" }, "validFrom": "2010-01-01T00:00:00Z", "name": "Teamwork Badge", "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", "type": [ "AchievementSubject" ], "achievement": { "id": "https://example.com/achievements/21st-century-skills/teamwork", "type": [ "Achievement" ], "criteria": { "narrative": "Team members are nominated for this badge by their peers and recognized upon review by Example Corp management." }, "description": "This badge recognizes the development of the capacity to collaborate within a group environment.", "name": "Teamwork" } }, "proof": [ { "type": "DataIntegrityProof", "created": "2024-12-23T10:54:14Z", "verificationMethod": "https://example.com/issuers/876543#z6Mkh953DJ1YEzK51grZTVu8YrVkRUEeG2oWf47fvgZ8cTb8", "cryptosuite": "eddsa-rdfc-2022", "proofPurpose": "assertionMethod", "proofValue": "z2CuDZWwCJB4TbmXQwMGM7sNiWr9DMCm6n18egjV5MAq9rjmYyHQ84Qef1y6Rk5NvmxHabSvvWbN1r9r9GgqC9kNJ" } ] }
---------------- JWT header --------------- { "alg": "RS256", "typ": "JWT", "jwk": { "e": "AQAB", "kty": "RSA", "n": "koNsrQm1-sVl4qRNmsYeB-PtyUeaogrzN0PEvnS0qScvr9Nd-WIJPbOoDZJcf7Ajjx2xFT ZXUDxp2zo8OumVgEa0bHpuD8KeYfQ4sYui0mXtNev1VIVMcPyVXrNeD0HVvOQUxZzFKXp3N5SXPe8ClQ 0RvQFU3Petw5T8jbcqOnAk0kJNptUEFgB0Of3kCfxG34x1CXv6PW2qvjX8Ovi62FQbILPN31XLqtybd_ c-TnI43nSQ_543V-ncgnuYplAohRlYw54e3ljnSiFRuDQJNQWZFNV3zg23Tir5cltmY02QOgQ5KTA4el qLEeOJWLo8ANW3aYFMEfGISyBnUYh98w" } } --------------- 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" ], "id": "http://example.com/credentials/3527", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "issuer": { "id": "https://example.com/issuers/876543", "type": [ "Profile" ], "name": "Example Corp" }, "validFrom": "2010-01-01T00:00:00Z", "name": "Teamwork Badge", "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", "type": [ "AchievementSubject" ], "achievement": { "id": "https://example.com/achievements/21st-century-skills/teamwork", "type": [ "Achievement" ], "criteria": { "narrative": "Team members are nominated for this badge by their peers a nd recognized upon review by Example Corp management." }, "description": "This badge recognizes the development of the capacity to c ollaborate within a group environment.", "name": "Teamwork" } }, "iss": "https://example.com/issuers/876543", "jti": "http://example.com/credentials/3527", "sub": "did:example:ebfeb1f712ebc6f1c276e12ec21" } --------------- JWT --------------- eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4i OiJrb05zclFtMS1zVmw0cVJObXNZZUItUHR5VWVhb2dyek4wUEV2blMwcVNjdnI5TmQtV0lKUGJPb0Ra SmNmN0FqangyeEZUWlhVRHhwMnpvOE91bVZnRWEwYkhwdUQ4S2VZZlE0c1l1aTBtWHROZXYxVklWTWNQ eVZYck5lRDBIVnZPUVV4WnpGS1hwM041U1hQZThDbFEwUnZRRlUzUGV0dzVUOGpiY3FPbkFrMGtKTnB0 VUVGZ0IwT2Yza0NmeEczNHgxQ1h2NlBXMnF2alg4T3ZpNjJGUWJJTFBOMzFYTHF0eWJkX2MtVG5JNDNu U1FfNTQzVi1uY2dudVlwbEFvaFJsWXc1NGUzbGpuU2lGUnVEUUpOUVdaRk5WM3pnMjNUaXI1Y2x0bVkw MlFPZ1E1S1RBNGVscUxFZU9KV0xvOEFOVzNhWUZNRWZHSVN5Qm5VWWg5OHcifX0.eyJAY29udGV4dCI6 WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv YmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIl0sImlkIjoiaHR0cDovL2V4YW1w bGUuY29tL2NyZWRlbnRpYWxzLzM1MjciLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiT3Bl bkJhZGdlQ3JlZGVudGlhbCJdLCJpc3N1ZXIiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuY29tL2lzc3Vl cnMvODc2NTQzIiwidHlwZSI6WyJQcm9maWxlIl0sIm5hbWUiOiJFeGFtcGxlIENvcnAifSwidmFsaWRG cm9tIjoiMjAxMC0wMS0wMVQwMDowMDowMFoiLCJuYW1lIjoiVGVhbXdvcmsgQmFkZ2UiLCJjcmVkZW50 aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSIs InR5cGUiOlsiQWNoaWV2ZW1lbnRTdWJqZWN0Il0sImFjaGlldmVtZW50Ijp7ImlkIjoiaHR0cHM6Ly9l eGFtcGxlLmNvbS9hY2hpZXZlbWVudHMvMjFzdC1jZW50dXJ5LXNraWxscy90ZWFtd29yayIsInR5cGUi OlsiQWNoaWV2ZW1lbnQiXSwiY3JpdGVyaWEiOnsibmFycmF0aXZlIjoiVGVhbSBtZW1iZXJzIGFyZSBu b21pbmF0ZWQgZm9yIHRoaXMgYmFkZ2UgYnkgdGhlaXIgcGVlcnMgYW5kIHJlY29nbml6ZWQgdXBvbiBy ZXZpZXcgYnkgRXhhbXBsZSBDb3JwIG1hbmFnZW1lbnQuIn0sImRlc2NyaXB0aW9uIjoiVGhpcyBiYWRn ZSByZWNvZ25pemVzIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgY2FwYWNpdHkgdG8gY29sbGFib3JhdGUg d2l0aGluIGEgZ3JvdXAgZW52aXJvbm1lbnQuIiwibmFtZSI6IlRlYW13b3JrIn19LCJpc3MiOiJodHRw czovL2V4YW1wbGUuY29tL2lzc3VlcnMvODc2NTQzIiwianRpIjoiaHR0cDovL2V4YW1wbGUuY29tL2Ny ZWRlbnRpYWxzLzM1MjciLCJzdWIiOiJkaWQ6ZXhhbXBsZTplYmZlYjFmNzEyZWJjNmYxYzI3NmUxMmVj MjEifQ.DSXwJPuNGNrXEETzuD1bKV4NlnRBe6GUYCJHjhvnFGOMJsCjExaTc5zqNsXtKv9cIi6urA-US _vtN9fpzk13OMU0k6ZKwSubUTaL9TH1kIatNmqZUayGawNtUBB0fMG3Vyr1QfNGyVsWhdZX4O1BywZah GXD_nC6QqudkHiuj00kvMNrOkqRACR4qjvxOxWJNpKIu-eQLbm5Ble9ySy109Q1ITtkQkEKJ5wVs-j4m xI14EBrMfhjNC1Py8yxt8uxPmGVeTZPnTTOFHjOt5eit9FNZmGPPEZlyCYB7gWPNIrLc5iLFqZxyLQt5 vMLHJixk_KTq8lhsZjvthkb6hJ-gw
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/extensions.json"
],
"id": "http://1edtech.edu/credentials/3732",
"type": [
"VerifiableCredential",
"OpenBadgeCredential"
],
"name": "1EdTech University Degree for Example Student",
"description": "1EdTech University Degree Description",
"image": {
"id": "https://1edtech.edu/credentials/3732/image",
"type": "Image",
"caption": "1EdTech University Degree for Example Student"
},
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type":
["AchievementSubject"]
,
"activityEndDate": "2010-01-02T00:00:00Z",
"activityStartDate": "2010-01-01T00:00:00Z",
"creditsEarned": 42.0,
"licenseNumber": "A-9320041",
"role": "Major Domo",
"source": {
"id": "https://school.edu/issuers/201234",
"type": ["Profile"],
"name": "1EdTech College of Arts"
},
"term": "Fall",
"identifier": [
{
"type": "IdentityObject",
"identityHash": "student@1edtech.edu",
"identityType": "emailAddress",
"hashed": false,
"salt": "not-used"
},
{
"type": "IdentityObject",
"identityHash": "somebody@gmail.com",
"identityType": "emailAddress",
"hashed": false,
"salt": "not-used"
}
],
"achievement": {
"id": "https://1edtech.edu/achievements/degree",
"type":
["Achievement"]
,
"alignment": [
{
"type":
["Alignment"]
,
"targetCode": "degree",
"targetDescription": "1EdTech University Degree programs.",
"targetName": "1EdTech University Degree",
"targetFramework": "1EdTech University Program and Course Catalog",
"targetType": "CFItem",
"targetUrl": "https://1edtech.edu/catalog/degree"
},
{
"type":
["Alignment"]
,
"targetCode": "degree",
"targetDescription": "1EdTech University Degree programs.",
"targetName": "1EdTech University Degree",
"targetFramework": "1EdTech University Program and Course Catalog",
"targetType": "CTDL",
"targetUrl": "https://credentialengineregistry.org/resources/ce-98cb027b-95ef-4494-908d-6f7790ec6b6b"
}
],
"achievementType": "Degree",
"creator": {
"id": "https://1edtech.edu/issuers/565049",
"type":
["Profile"]
,
"name": "1EdTech University",
"url": "https://1edtech.edu",
"phone": "1-222-333-4444",
"description": "1EdTech University provides online degree programs.",
"endorsement": [
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
],
"id": "http://1edtech.edu/endorsementcredential/3732",
"type": [
"VerifiableCredential",
"EndorsementCredential"
],
"name": "SDE endorsement",
"issuer": {
"id": "https://accrediter.edu/issuers/565049",
"type":
["Profile"]
,
"name": "Example Accrediting Agency"
},
"validFrom": "2010-01-01T00:00:00Z",
"validUntil": "2020-01-01T00:00:00Z",
"credentialSubject": {
"id": "https://1edtech.edu/issuers/565049",
"type":
["EndorsementSubject"]
,
"endorsementComment": "1EdTech University is in good standing"
},
"credentialSchema": [
{
"id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
},
{
"id": "https://accrediter.edu/schema/endorsementcredential.json",
"type": "1EdTechJsonSchemaValidator2019"
}
],
"credentialStatus": {
"id": "https://1edtech.edu/credentials/3732/revocations",
"type": "1EdTechRevocationList"
},
"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"
}
]
},
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
],
"id": "http://1edtech.edu/endorsementcredential/3733",
"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": "2020-01-01T00:00:00Z",
"credentialSubject": {
"id": "https://1edtech.edu/issuers/565049",
"type":
["EndorsementSubject"]
,
"endorsementComment": "1EdTech University is in good standing"
},
"credentialSchema": [
{
"id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
},
{
"id": "https://state.gov/schema/endorsementcredential.json",
"type": "1EdTechJsonSchemaValidator2019"
}
],
"credentialStatus": {
"id": "https://state.gov/credentials/3732/revocations",
"type": "1EdTechRevocationList"
},
"refreshService": {
"id": "http://state.gov/credentials/3732",
"type": "1EdTechCredentialRefresh"
},
"proof": [
{
"type": "DataIntegrityProof",
"cryptosuite": "eddsa-rdf-2022",
"created": "2022-05-26T18:25:59Z",
"verificationMethod": "https://accrediter.edu/issuers/565049#z5bDnmSgDczXwZGya6ZjxKaxkdKxzsCMiVSsgEVWxnaWK7ZqbKnzcCd7mUKE9DQaAL2QMXP5AquPeW6W2CWrZ7jNC",
"proofPurpose": "assertionMethod",
"proofValue": "z5bDnmSgDczXwZGya6ZjxKaxkdKxzsCMiVSsgEVWxnaWK7ZqbKnzcCd7mUKE9DQaAL2QMXP5AquPeW6W2CWrZ7jNC"
}
]
}
],
"image": {
"id": "https://1edtech.edu/logo.png",
"type": "Image",
"caption": "1EdTech University logo"
},
"email": "registrar@1edtech.edu",
"address": {
"type": [
"Address"
],
"addressCountry": "USA",
"addressCountryCode": "US",
"addressRegion": "TX",
"addressLocality": "Austin",
"streetAddress": "123 First St",
"postOfficeBoxNumber": "1",
"postalCode": "12345",
"geo": {
"type": "GeoCoordinates",
"latitude": 1.0,
"longitude": 1.0
}
},
"otherIdentifier": [
{
"type": "IdentifierEntry",
"identifier": "12345",
"identifierType": "sourcedId"
},
{
"type": "IdentifierEntry",
"identifier": "67890",
"identifierType": "nationalIdentityNumber"
}
],
"official": "Horace Mann",
"parentOrg": {
"id": "did:example:123456789",
"type":
["Profile"]
,
"name": "Universal Universities"
}
},
"creditsAvailable": 36.0,
"criteria": {
"id": "https://1edtech.edu/achievements/degree",
"narrative": "# Degree Requirements\nStudents must complete..."
},
"description": "1EdTech University Degree Description",
"endorsement": [
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
],
"id": "http://1edtech.edu/endorsementcredential/3734",
"type": [
"VerifiableCredential",
"EndorsementCredential"
],
"name": "EAA endorsement",
"issuer": {
"id": "https://accrediter.edu/issuers/565049",
"type":
["Profile"]
,
"name": "Example Accrediting Agency"
},
"validFrom": "2010-01-01T00:00:00Z",
"validUntil": "2020-01-01T00:00:00Z",
"credentialSubject": {
"id": "https://1edtech.edu/issuers/565049",
"type":
["EndorsementSubject"]
,
"endorsementComment": "1EdTech University is in good standing"
},
"credentialSchema": [
{
"id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
},
{
"id": "https://accrediter.edu/schema/endorsementcredential.json",
"type": "1EdTechJsonSchemaValidator2019"
}
],
"credentialStatus": {
"id": "https://1edtech.edu/credentials/3732/revocations",
"type": "1EdTechRevocationList"
},
"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"
}
]
}
],
"fieldOfStudy": "Research",
"humanCode": "R1",
"image": {
"id": "https://1edtech.edu/achievements/degree/image",
"type": "Image",
"caption": "1EdTech University Degree"
},
"name": "1EdTech University Degree",
"otherIdentifier": [
{
"type": "IdentifierEntry",
"identifier": "abde",
"identifierType": "identifier"
}
],
"resultDescription": [
{
"id": "urn:uuid:f6ab24cd-86e8-4eaf-b8c6-ded74e8fd41c",
"type":
["ResultDescription"]
,
"alignment": [
{
"type":
["Alignment"]
,
"targetCode": "project",
"targetDescription": "Project description",
"targetName": "Final Project",
"targetFramework": "1EdTech University Program and Course Catalog",
"targetType": "CFItem",
"targetUrl": "https://1edtech.edu/catalog/degree/project"
}
],
"allowedValue": [
"D",
"C",
"B",
"A"
],
"name": "Final Project Grade",
"requiredValue": "C",
"resultType": "LetterGrade"
},
{
"id": "urn:uuid:a70ddc6a-4c4a-4bd8-8277-cb97c79f40c5",
"type":
["ResultDescription"]
,
"alignment": [
{
"type":
["Alignment"]
,
"targetCode": "project",
"targetDescription": "Project description",
"targetName": "Final Project",
"targetFramework": "1EdTech University Program and Course Catalog",
"targetType": "CFItem",
"targetUrl": "https://1edtech.edu/catalog/degree/project"
}
],
"allowedValue": [
"D",
"C",
"B",
"A"
],
"name": "Final Project Grade",
"requiredLevel": "urn:uuid:d05a0867-d0ad-4b03-bdb5-28fb5d2aab7a",
"resultType": "RubricCriterionLevel",
"rubricCriterionLevel": [
{
"id": "urn:uuid:d05a0867-d0ad-4b03-bdb5-28fb5d2aab7a",
"type":
["RubricCriterionLevel"]
,
"alignment": [
{
"type":
["Alignment"]
,
"targetCode": "project",
"targetDescription": "Project description",
"targetName": "Final Project",
"targetFramework": "1EdTech University Program and Course Catalog",
"targetType": "CFRubricCriterionLevel",
"targetUrl": "https://1edtech.edu/catalog/degree/project/rubric/levels/mastered"
}
],
"description": "The author demonstrated...",
"level": "Mastered",
"name": "Mastery",
"points": "4"
},
{
"id": "urn:uuid:6b84b429-31ee-4dac-9d20-e5c55881f80e",
"type":
["RubricCriterionLevel"]
,
"alignment": [
{
"type":
["Alignment"]
,
"targetCode": "project",
"targetDescription": "Project description",
"targetName": "Final Project",
"targetFramework": "1EdTech University Program and Course Catalog",
"targetType": "CFRubricCriterionLevel",
"targetUrl": "https://1edtech.edu/catalog/degree/project/rubric/levels/basic"
}
],
"description": "The author demonstrated...",
"level": "Basic",
"name": "Basic",
"points": "4"
}
]
},
{
"id": "urn:uuid:b07c0387-f2d6-4b65-a3f4-f4e4302ea8f7",
"type":
["ResultDescription"]
,
"name": "Project Status",
"resultType": "Status"
}
],
"specialization": "Computer Science Research",
"tag": [
"research",
"computer science"
]
},
"image": {
"id": "https://1edtech.edu/credentials/3732/image",
"type": "Image",
"caption": "1EdTech University Degree for Example Student"
},
"narrative": "There is a final project report and source code evidence.",
"result": [
{
"type": [
"Result"
],
"alignment": [
{
"type":
["Alignment"]
,
"targetCode": "project",
"targetDescription": "Project description",
"targetName": "Final Project",
"targetFramework": "1EdTech University Program and Course Catalog",
"targetType": "CFItem",
"targetUrl": "https://1edtech.edu/catalog/degree/project/result/1"
}
],
"resultDescription": "urn:uuid:f6ab24cd-86e8-4eaf-b8c6-ded74e8fd41c",
"value": "A"
},
{
"type": [
"Result"
],
"achievedLevel": "urn:uuid:d05a0867-d0ad-4b03-bdb5-28fb5d2aab7a",
"alignment": [
{
"type":
["Alignment"]
,
"targetCode": "project",
"targetDescription": "Project description",
"targetName": "Final Project",
"targetFramework": "1EdTech University Program and Course Catalog",
"targetType": "CFItem",
"targetUrl": "https://1edtech.edu/catalog/degree/project/result/1"
}
],
"resultDescription": "urn:uuid:f6ab24cd-86e8-4eaf-b8c6-ded74e8fd41c"
},
{
"type": [
"Result"
],
"resultDescription": "urn:uuid:f6ab24cd-86e8-4eaf-b8c6-ded74e8fd41c",
"status": "Completed"
}
]
},
"endorsement": [
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
],
"id": "http://1edtech.edu/endorsementcredential/3735",
"type": [
"VerifiableCredential",
"EndorsementCredential"
],
"name": "EAA endorsement",
"issuer": {
"id": "https://accrediter.edu/issuers/565049",
"type":
["Profile"]
,
"name": "Example Accrediting Agency"
},
"validFrom": "2010-01-01T00:00:00Z",
"validUntil": "2020-01-01T00:00:00Z",
"credentialSubject": {
"id": "https://1edtech.edu/issuers/565049",
"type":
["EndorsementSubject"]
,
"endorsementComment": "1EdTech University is in good standing"
},
"credentialSchema": [
{
"id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
},
{
"id": "https://accrediter.edu/schema/endorsementcredential.json",
"type": "1EdTechJsonSchemaValidator2019"
}
],
"credentialStatus": {
"id": "https://1edtech.edu/credentials/3732/revocations",
"type": "1EdTechRevocationList"
},
"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"
}
]
}
],
"evidence": [
{
"id": "https://1edtech.edu/credentials/3732/evidence/1",
"type":
["Evidence"]
,
"narrative": "# Final Project Report \n This project was ...",
"name": "Final Project Report",
"description": "This is the final project report.",
"genre": "Research",
"audience": "Department"
},
{
"id": "https://github.com/somebody/project",
"type":
["Evidence"]
,
"name": "Final Project Code",
"description": "This is the source code for the final project app.",
"genre": "Research",
"audience": "Department"
}
],
"issuer": {
"id": "https://1edtech.edu/issuers/565049",
"type":
["Profile"]
,
"name": "1EdTech University",
"url": "https://1edtech.edu",
"phone": "1-222-333-4444",
"description": "1EdTech University provides online degree programs.",
"endorsement": [
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
],
"id": "http://1edtech.edu/endorsementcredential/3736",
"type": [
"VerifiableCredential",
"EndorsementCredential"
],
"name": "EAA endorsement",
"issuer": {
"id": "https://accrediter.edu/issuers/565049",
"type":
["Profile"]
,
"name": "Example Accrediting Agency"
},
"validFrom": "2010-01-01T00:00:00Z",
"validUntil": "2020-01-01T00:00:00Z",
"credentialSubject": {
"id": "https://1edtech.edu/issuers/565049",
"type":
["EndorsementSubject"]
,
"endorsementComment": "1EdTech University is in good standing"
},
"credentialSchema": [
{
"id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
},
{
"id": "https://accrediter.edu/schema/endorsementcredential.json",
"type": "1EdTechJsonSchemaValidator2019"
}
],
"credentialStatus": {
"id": "https://1edtech.edu/credentials/3732/revocations",
"type": "1EdTechRevocationList"
},
"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"
}
]
}
],
"image": {
"id": "https://1edtech.edu/logo.png",
"type": "Image",
"caption": "1EdTech University logo"
},
"email": "registrar@1edtech.edu",
"address": {
"type": [
"Address"
],
"addressCountry": "USA",
"addressCountryCode": "US",
"addressRegion": "TX",
"addressLocality": "Austin",
"streetAddress": "123 First St",
"postOfficeBoxNumber": "1",
"postalCode": "12345",
"geo": {
"type": "GeoCoordinates",
"latitude": 1.0,
"longitude": 1.0
}
},
"otherIdentifier": [
{
"type": "IdentifierEntry",
"identifier": "12345",
"identifierType": "sourcedId"
},
{
"type": "IdentifierEntry",
"identifier": "67890",
"identifierType": "nationalIdentityNumber"
}
],
"official": "Horace Mann",
"parentOrg": {
"id": "did:example:123456789",
"type":
["Profile"]
,
"name": "Universal Universities"
}
},
"validFrom": "2010-01-01T00:00:00Z",
"validUntil": "2030-01-01T00:00:00Z",
"credentialSchema": [
{
"id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
}
],
"credentialStatus": {
"id": "https://1edtech.edu/credentials/3732/revocations",
"type": "1EdTechRevocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
"type": "1EdTechCredentialRefresh"
}
}
{ "@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" ], "id": "http://1edtech.edu/credentials/3732", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "name": "1EdTech University Degree for Example Student", "description": "1EdTech University Degree Description", "image": { "id": "https://1edtech.edu/credentials/3732/image", "type": "Image", "caption": "1EdTech University Degree for Example Student" }, "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", "type": [ "AchievementSubject" ], "activityEndDate": "2010-01-02T00:00:00Z", "activityStartDate": "2010-01-01T00:00:00Z", "creditsEarned": 42, "licenseNumber": "A-9320041", "role": "Major Domo", "source": { "id": "https://school.edu/issuers/201234", "type": [ "Profile" ], "name": "1EdTech College of Arts" }, "term": "Fall", "identifier": [ { "type": "IdentityObject", "identityHash": "student@1edtech.edu", "identityType": "emailAddress", "hashed": false, "salt": "not-used" }, { "type": "IdentityObject", "identityHash": "somebody@gmail.com", "identityType": "emailAddress", "hashed": false, "salt": "not-used" } ], "achievement": { "id": "https://1edtech.edu/achievements/degree", "type": [ "Achievement" ], "alignment": [ { "type": [ "Alignment" ], "targetCode": "degree", "targetDescription": "1EdTech University Degree programs.", "targetName": "1EdTech University Degree", "targetFramework": "1EdTech University Program and Course Catalog", "targetType": "CFItem", "targetUrl": "https://1edtech.edu/catalog/degree" }, { "type": [ "Alignment" ], "targetCode": "degree", "targetDescription": "1EdTech University Degree programs.", "targetName": "1EdTech University Degree", "targetFramework": "1EdTech University Program and Course Catalog", "targetType": "CTDL", "targetUrl": "https://credentialengineregistry.org/resources/ce-98cb027b-95ef-4494-908d-6f7790ec6b6b" } ], "achievementType": "Degree", "creator": { "id": "https://1edtech.edu/issuers/565049", "type": [ "Profile" ], "name": "1EdTech University", "url": "https://1edtech.edu", "phone": "1-222-333-4444", "description": "1EdTech University provides online degree programs.", "endorsement": [ { "@context": [ "https://www.w3.org/ns/credentials/v2", "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json" ], "id": "http://1edtech.edu/endorsementcredential/3732", "type": [ "VerifiableCredential", "EndorsementCredential" ], "name": "SDE endorsement", "issuer": { "id": "https://accrediter.edu/issuers/565049", "type": [ "Profile" ], "name": "Example Accrediting Agency" }, "validFrom": "2010-01-01T00:00:00Z", "validUntil": "2020-01-01T00:00:00Z", "credentialSubject": { "id": "https://1edtech.edu/issuers/565049", "type": [ "EndorsementSubject" ], "endorsementComment": "1EdTech University is in good standing" }, "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" }, { "id": "https://accrediter.edu/schema/endorsementcredential.json", "type": "1EdTechJsonSchemaValidator2019" } ], "credentialStatus": { "id": "https://1edtech.edu/credentials/3732/revocations", "type": "1EdTechRevocationList" }, "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" } ] }, { "@context": [ "https://www.w3.org/ns/credentials/v2", "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json" ], "id": "http://1edtech.edu/endorsementcredential/3733", "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": "2020-01-01T00:00:00Z", "credentialSubject": { "id": "https://1edtech.edu/issuers/565049", "type": [ "EndorsementSubject" ], "endorsementComment": "1EdTech University is in good standing" }, "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" }, { "id": "https://state.gov/schema/endorsementcredential.json", "type": "1EdTechJsonSchemaValidator2019" } ], "credentialStatus": { "id": "https://state.gov/credentials/3732/revocations", "type": "1EdTechRevocationList" }, "refreshService": { "id": "http://state.gov/credentials/3732", "type": "1EdTechCredentialRefresh" }, "proof": [ { "type": "DataIntegrityProof", "cryptosuite": "eddsa-rdf-2022", "created": "2022-05-26T18:25:59Z", "verificationMethod": "https://accrediter.edu/issuers/565049#z5bDnmSgDczXwZGya6ZjxKaxkdKxzsCMiVSsgEVWxnaWK7ZqbKnzcCd7mUKE9DQaAL2QMXP5AquPeW6W2CWrZ7jNC", "proofPurpose": "assertionMethod", "proofValue": "z5bDnmSgDczXwZGya6ZjxKaxkdKxzsCMiVSsgEVWxnaWK7ZqbKnzcCd7mUKE9DQaAL2QMXP5AquPeW6W2CWrZ7jNC" } ] } ], "image": { "id": "https://1edtech.edu/logo.png", "type": "Image", "caption": "1EdTech University logo" }, "email": "registrar@1edtech.edu", "address": { "type": [ "Address" ], "addressCountry": "USA", "addressCountryCode": "US", "addressRegion": "TX", "addressLocality": "Austin", "streetAddress": "123 First St", "postOfficeBoxNumber": "1", "postalCode": "12345", "geo": { "type": "GeoCoordinates", "latitude": 1, "longitude": 1 } }, "otherIdentifier": [ { "type": "IdentifierEntry", "identifier": "12345", "identifierType": "sourcedId" }, { "type": "IdentifierEntry", "identifier": "67890", "identifierType": "nationalIdentityNumber" } ], "official": "Horace Mann", "parentOrg": { "id": "did:example:123456789", "type": [ "Profile" ], "name": "Universal Universities" } }, "creditsAvailable": 36, "criteria": { "id": "https://1edtech.edu/achievements/degree", "narrative": "# Degree Requirements\nStudents must complete..." }, "description": "1EdTech University Degree Description", "endorsement": [ { "@context": [ "https://www.w3.org/ns/credentials/v2", "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json" ], "id": "http://1edtech.edu/endorsementcredential/3734", "type": [ "VerifiableCredential", "EndorsementCredential" ], "name": "EAA endorsement", "issuer": { "id": "https://accrediter.edu/issuers/565049", "type": [ "Profile" ], "name": "Example Accrediting Agency" }, "validFrom": "2010-01-01T00:00:00Z", "validUntil": "2020-01-01T00:00:00Z", "credentialSubject": { "id": "https://1edtech.edu/issuers/565049", "type": [ "EndorsementSubject" ], "endorsementComment": "1EdTech University is in good standing" }, "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" }, { "id": "https://accrediter.edu/schema/endorsementcredential.json", "type": "1EdTechJsonSchemaValidator2019" } ], "credentialStatus": { "id": "https://1edtech.edu/credentials/3732/revocations", "type": "1EdTechRevocationList" }, "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" } ] } ], "fieldOfStudy": "Research", "humanCode": "R1", "image": { "id": "https://1edtech.edu/achievements/degree/image", "type": "Image", "caption": "1EdTech University Degree" }, "name": "1EdTech University Degree", "otherIdentifier": [ { "type": "IdentifierEntry", "identifier": "abde", "identifierType": "identifier" } ], "resultDescription": [ { "id": "urn:uuid:f6ab24cd-86e8-4eaf-b8c6-ded74e8fd41c", "type": [ "ResultDescription" ], "alignment": [ { "type": [ "Alignment" ], "targetCode": "project", "targetDescription": "Project description", "targetName": "Final Project", "targetFramework": "1EdTech University Program and Course Catalog", "targetType": "CFItem", "targetUrl": "https://1edtech.edu/catalog/degree/project" } ], "allowedValue": [ "D", "C", "B", "A" ], "name": "Final Project Grade", "requiredValue": "C", "resultType": "LetterGrade" }, { "id": "urn:uuid:a70ddc6a-4c4a-4bd8-8277-cb97c79f40c5", "type": [ "ResultDescription" ], "alignment": [ { "type": [ "Alignment" ], "targetCode": "project", "targetDescription": "Project description", "targetName": "Final Project", "targetFramework": "1EdTech University Program and Course Catalog", "targetType": "CFItem", "targetUrl": "https://1edtech.edu/catalog/degree/project" } ], "allowedValue": [ "D", "C", "B", "A" ], "name": "Final Project Grade", "requiredLevel": "urn:uuid:d05a0867-d0ad-4b03-bdb5-28fb5d2aab7a", "resultType": "RubricCriterionLevel", "rubricCriterionLevel": [ { "id": "urn:uuid:d05a0867-d0ad-4b03-bdb5-28fb5d2aab7a", "type": [ "RubricCriterionLevel" ], "alignment": [ { "type": [ "Alignment" ], "targetCode": "project", "targetDescription": "Project description", "targetName": "Final Project", "targetFramework": "1EdTech University Program and Course Catalog", "targetType": "CFRubricCriterionLevel", "targetUrl": "https://1edtech.edu/catalog/degree/project/rubric/levels/mastered" } ], "description": "The author demonstrated...", "level": "Mastered", "name": "Mastery", "points": "4" }, { "id": "urn:uuid:6b84b429-31ee-4dac-9d20-e5c55881f80e", "type": [ "RubricCriterionLevel" ], "alignment": [ { "type": [ "Alignment" ], "targetCode": "project", "targetDescription": "Project description", "targetName": "Final Project", "targetFramework": "1EdTech University Program and Course Catalog", "targetType": "CFRubricCriterionLevel", "targetUrl": "https://1edtech.edu/catalog/degree/project/rubric/levels/basic" } ], "description": "The author demonstrated...", "level": "Basic", "name": "Basic", "points": "4" } ] }, { "id": "urn:uuid:b07c0387-f2d6-4b65-a3f4-f4e4302ea8f7", "type": [ "ResultDescription" ], "name": "Project Status", "resultType": "Status" } ], "specialization": "Computer Science Research", "tag": [ "research", "computer science" ] }, "image": { "id": "https://1edtech.edu/credentials/3732/image", "type": "Image", "caption": "1EdTech University Degree for Example Student" }, "narrative": "There is a final project report and source code evidence.", "result": [ { "type": [ "Result" ], "alignment": [ { "type": [ "Alignment" ], "targetCode": "project", "targetDescription": "Project description", "targetName": "Final Project", "targetFramework": "1EdTech University Program and Course Catalog", "targetType": "CFItem", "targetUrl": "https://1edtech.edu/catalog/degree/project/result/1" } ], "resultDescription": "urn:uuid:f6ab24cd-86e8-4eaf-b8c6-ded74e8fd41c", "value": "A" }, { "type": [ "Result" ], "achievedLevel": "urn:uuid:d05a0867-d0ad-4b03-bdb5-28fb5d2aab7a", "alignment": [ { "type": [ "Alignment" ], "targetCode": "project", "targetDescription": "Project description", "targetName": "Final Project", "targetFramework": "1EdTech University Program and Course Catalog", "targetType": "CFItem", "targetUrl": "https://1edtech.edu/catalog/degree/project/result/1" } ], "resultDescription": "urn:uuid:f6ab24cd-86e8-4eaf-b8c6-ded74e8fd41c" }, { "type": [ "Result" ], "resultDescription": "urn:uuid:f6ab24cd-86e8-4eaf-b8c6-ded74e8fd41c", "status": "Completed" } ] }, "endorsement": [ { "@context": [ "https://www.w3.org/ns/credentials/v2", "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json" ], "id": "http://1edtech.edu/endorsementcredential/3735", "type": [ "VerifiableCredential", "EndorsementCredential" ], "name": "EAA endorsement", "issuer": { "id": "https://accrediter.edu/issuers/565049", "type": [ "Profile" ], "name": "Example Accrediting Agency" }, "validFrom": "2010-01-01T00:00:00Z", "validUntil": "2020-01-01T00:00:00Z", "credentialSubject": { "id": "https://1edtech.edu/issuers/565049", "type": [ "EndorsementSubject" ], "endorsementComment": "1EdTech University is in good standing" }, "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" }, { "id": "https://accrediter.edu/schema/endorsementcredential.json", "type": "1EdTechJsonSchemaValidator2019" } ], "credentialStatus": { "id": "https://1edtech.edu/credentials/3732/revocations", "type": "1EdTechRevocationList" }, "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" } ] } ], "evidence": [ { "id": "https://1edtech.edu/credentials/3732/evidence/1", "type": [ "Evidence" ], "narrative": "# Final Project Report \n This project was ...", "name": "Final Project Report", "description": "This is the final project report.", "genre": "Research", "audience": "Department" }, { "id": "https://github.com/somebody/project", "type": [ "Evidence" ], "name": "Final Project Code", "description": "This is the source code for the final project app.", "genre": "Research", "audience": "Department" } ], "issuer": { "id": "https://1edtech.edu/issuers/565049", "type": [ "Profile" ], "name": "1EdTech University", "url": "https://1edtech.edu", "phone": "1-222-333-4444", "description": "1EdTech University provides online degree programs.", "endorsement": [ { "@context": [ "https://www.w3.org/ns/credentials/v2", "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json" ], "id": "http://1edtech.edu/endorsementcredential/3736", "type": [ "VerifiableCredential", "EndorsementCredential" ], "name": "EAA endorsement", "issuer": { "id": "https://accrediter.edu/issuers/565049", "type": [ "Profile" ], "name": "Example Accrediting Agency" }, "validFrom": "2010-01-01T00:00:00Z", "validUntil": "2020-01-01T00:00:00Z", "credentialSubject": { "id": "https://1edtech.edu/issuers/565049", "type": [ "EndorsementSubject" ], "endorsementComment": "1EdTech University is in good standing" }, "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" }, { "id": "https://accrediter.edu/schema/endorsementcredential.json", "type": "1EdTechJsonSchemaValidator2019" } ], "credentialStatus": { "id": "https://1edtech.edu/credentials/3732/revocations", "type": "1EdTechRevocationList" }, "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" } ] } ], "image": { "id": "https://1edtech.edu/logo.png", "type": "Image", "caption": "1EdTech University logo" }, "email": "registrar@1edtech.edu", "address": { "type": [ "Address" ], "addressCountry": "USA", "addressCountryCode": "US", "addressRegion": "TX", "addressLocality": "Austin", "streetAddress": "123 First St", "postOfficeBoxNumber": "1", "postalCode": "12345", "geo": { "type": "GeoCoordinates", "latitude": 1, "longitude": 1 } }, "otherIdentifier": [ { "type": "IdentifierEntry", "identifier": "12345", "identifierType": "sourcedId" }, { "type": "IdentifierEntry", "identifier": "67890", "identifierType": "nationalIdentityNumber" } ], "official": "Horace Mann", "parentOrg": { "id": "did:example:123456789", "type": [ "Profile" ], "name": "Universal Universities" } }, "validFrom": "2010-01-01T00:00:00Z", "validUntil": "2030-01-01T00:00:00Z", "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" } ], "credentialStatus": { "id": "https://1edtech.edu/credentials/3732/revocations", "type": "1EdTechRevocationList" }, "refreshService": { "id": "http://1edtech.edu/credentials/3732", "type": "1EdTechCredentialRefresh" }, "proof": [ { "type": "DataIntegrityProof", "created": "2024-12-23T10:54:14Z", "verificationMethod": "https://1edtech.edu/issuers/565049#z6MkjdiQeaUkBM5XMNyeyR1w6Lk8q7vz5kqV9FmXBoMURpYC", "cryptosuite": "eddsa-rdfc-2022", "proofPurpose": "assertionMethod", "proofValue": "z59ryE7LG9JTnAsQpqtNuD3yH2JQTiZoKZ68WZbcirRShoqURdKoQqH2zmuS9ceyBq48ap9dcAxSPXPXoLVdnooaM" } ] }
---------------- JWT header --------------- { "alg": "RS256", "typ": "JWT", "jwk": { "e": "AQAB", "kty": "RSA", "n": "kkBZO7APYwh3RC2R1jwdPFJ36aD5cGurOAAg4RHznnfN7St5hpa5JD5egwswKEWEIq0vLY ec7fgYXiZZeb1FdlTAPXe41eMEGrGFPfbaoFazNOGOPw6qmgyKBxgBuXl7lAXkHetyAkQuFcFwWMQrCR pIr5JdCDTL-_hdtGowklm1kwepwHZY8yRNdy2VegLrh7dbu8JGqAZw623TdiiiqYvgIH_M1Wu_HJBRh4 X50XhPK9XEX1gtHQwrS8Lej5Z8fX2uYLEn12q7ImkfktAKie5e2xgSTquMfcgCNq_nU4-2opYVj78t4H kXqkKzS3h8qbYEdefqC7I4nw-TR30P7Q" } } --------------- 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" ], "id": "http://1edtech.edu/credentials/3732", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "name": "1EdTech University Degree for Example Student", "description": "1EdTech University Degree Description", "image": { "id": "https://1edtech.edu/credentials/3732/image", "type": "Image", "caption": "1EdTech University Degree for Example Student" }, "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", "type": [ "AchievementSubject" ], "activityEndDate": "2010-01-02T00:00:00Z", "activityStartDate": "2010-01-01T00:00:00Z", "creditsEarned": 42, "licenseNumber": "A-9320041", "role": "Major Domo", "source": { "id": "https://school.edu/issuers/201234", "type": [ "Profile" ], "name": "1EdTech College of Arts" }, "term": "Fall", "identifier": [ { "type": "IdentityObject", "identityHash": "student@1edtech.edu", "identityType": "emailAddress", "hashed": false, "salt": "not-used" }, { "type": "IdentityObject", "identityHash": "somebody@gmail.com", "identityType": "emailAddress", "hashed": false, "salt": "not-used" } ], "achievement": { "id": "https://1edtech.edu/achievements/degree", "type": [ "Achievement" ], "alignment": [ { "type": [ "Alignment" ], "targetCode": "degree", "targetDescription": "1EdTech University Degree programs.", "targetName": "1EdTech University Degree", "targetFramework": "1EdTech University Program and Course Catalog", "targetType": "CFItem", "targetUrl": "https://1edtech.edu/catalog/degree" }, { "type": [ "Alignment" ], "targetCode": "degree", "targetDescription": "1EdTech University Degree programs.", "targetName": "1EdTech University Degree", "targetFramework": "1EdTech University Program and Course Catalog", "targetType": "CTDL", "targetUrl": "https://credentialengineregistry.org/resources/ce-98cb02 7b-95ef-4494-908d-6f7790ec6b6b" } ], "achievementType": "Degree", "creator": { "id": "https://1edtech.edu/issuers/565049", "type": [ "Profile" ], "name": "1EdTech University", "url": "https://1edtech.edu", "phone": "1-222-333-4444", "description": "1EdTech University provides online degree programs.", "endorsement": [ { "@context": [ "https://www.w3.org/ns/credentials/v2", "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json" ], "id": "http://1edtech.edu/endorsementcredential/3732", "type": [ "VerifiableCredential", "EndorsementCredential" ], "name": "SDE endorsement", "issuer": { "id": "https://accrediter.edu/issuers/565049", "type": [ "Profile" ], "name": "Example Accrediting Agency" }, "validFrom": "2010-01-01T00:00:00Z", "validUntil": "2020-01-01T00:00:00Z", "credentialSubject": { "id": "https://1edtech.edu/issuers/565049", "type": [ "EndorsementSubject" ], "endorsementComment": "1EdTech University is in good standing" }, "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3 p0_endorsementcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" }, { "id": "https://accrediter.edu/schema/endorsementcredential.json" , "type": "1EdTechJsonSchemaValidator2019" } ], "credentialStatus": { "id": "https://1edtech.edu/credentials/3732/revocations", "type": "1EdTechRevocationList" }, "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#zvP kQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sW RYgtA", "proofPurpose": "assertionMethod", "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQ HqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA" } ] }, { "@context": [ "https://www.w3.org/ns/credentials/v2", "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json" ], "id": "http://1edtech.edu/endorsementcredential/3733", "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": "2020-01-01T00:00:00Z", "credentialSubject": { "id": "https://1edtech.edu/issuers/565049", "type": [ "EndorsementSubject" ], "endorsementComment": "1EdTech University is in good standing" }, "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3 p0_endorsementcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" }, { "id": "https://state.gov/schema/endorsementcredential.json", "type": "1EdTechJsonSchemaValidator2019" } ], "credentialStatus": { "id": "https://state.gov/credentials/3732/revocations", "type": "1EdTechRevocationList" }, "refreshService": { "id": "http://state.gov/credentials/3732", "type": "1EdTechCredentialRefresh" }, "proof": [ { "type": "DataIntegrityProof", "cryptosuite": "eddsa-rdf-2022", "created": "2022-05-26T18:25:59Z", "verificationMethod": "https://accrediter.edu/issuers/565049#z5b DnmSgDczXwZGya6ZjxKaxkdKxzsCMiVSsgEVWxnaWK7ZqbKnzcCd7mUKE9DQaAL2QMXP5AquPeW6W2CW rZ7jNC", "proofPurpose": "assertionMethod", "proofValue": "z5bDnmSgDczXwZGya6ZjxKaxkdKxzsCMiVSsgEVWxnaWK7Zqb KnzcCd7mUKE9DQaAL2QMXP5AquPeW6W2CWrZ7jNC" } ] } ], "image": { "id": "https://1edtech.edu/logo.png", "type": "Image", "caption": "1EdTech University logo" }, "email": "registrar@1edtech.edu", "address": { "type": [ "Address" ], "addressCountry": "USA", "addressCountryCode": "US", "addressRegion": "TX", "addressLocality": "Austin", "streetAddress": "123 First St", "postOfficeBoxNumber": "1", "postalCode": "12345", "geo": { "type": "GeoCoordinates", "latitude": 1, "longitude": 1 } }, "otherIdentifier": [ { "type": "IdentifierEntry", "identifier": "12345", "identifierType": "sourcedId" }, { "type": "IdentifierEntry", "identifier": "67890", "identifierType": "nationalIdentityNumber" } ], "official": "Horace Mann", "parentOrg": { "id": "did:example:123456789", "type": [ "Profile" ], "name": "Universal Universities" } }, "creditsAvailable": 36, "criteria": { "id": "https://1edtech.edu/achievements/degree", "narrative": "# Degree Requirements\nStudents must complete..." }, "description": "1EdTech University Degree Description", "endorsement": [ { "@context": [ "https://www.w3.org/ns/credentials/v2", "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json" ], "id": "http://1edtech.edu/endorsementcredential/3734", "type": [ "VerifiableCredential", "EndorsementCredential" ], "name": "EAA endorsement", "issuer": { "id": "https://accrediter.edu/issuers/565049", "type": [ "Profile" ], "name": "Example Accrediting Agency" }, "validFrom": "2010-01-01T00:00:00Z", "validUntil": "2020-01-01T00:00:00Z", "credentialSubject": { "id": "https://1edtech.edu/issuers/565049", "type": [ "EndorsementSubject" ], "endorsementComment": "1EdTech University is in good standing" }, "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0 _endorsementcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" }, { "id": "https://accrediter.edu/schema/endorsementcredential.json", "type": "1EdTechJsonSchemaValidator2019" } ], "credentialStatus": { "id": "https://1edtech.edu/credentials/3732/revocations", "type": "1EdTechRevocationList" }, "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#zvPkQ iUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRY gtA", "proofPurpose": "assertionMethod", "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHq G7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA" } ] } ], "fieldOfStudy": "Research", "humanCode": "R1", "image": { "id": "https://1edtech.edu/achievements/degree/image", "type": "Image", "caption": "1EdTech University Degree" }, "name": "1EdTech University Degree", "otherIdentifier": [ { "type": "IdentifierEntry", "identifier": "abde", "identifierType": "identifier" } ], "resultDescription": [ { "id": "urn:uuid:f6ab24cd-86e8-4eaf-b8c6-ded74e8fd41c", "type": [ "ResultDescription" ], "alignment": [ { "type": [ "Alignment" ], "targetCode": "project", "targetDescription": "Project description", "targetName": "Final Project", "targetFramework": "1EdTech University Program and Course Catalog" , "targetType": "CFItem", "targetUrl": "https://1edtech.edu/catalog/degree/project" } ], "allowedValue": [ "D", "C", "B", "A" ], "name": "Final Project Grade", "requiredValue": "C", "resultType": "LetterGrade" }, { "id": "urn:uuid:a70ddc6a-4c4a-4bd8-8277-cb97c79f40c5", "type": [ "ResultDescription" ], "alignment": [ { "type": [ "Alignment" ], "targetCode": "project", "targetDescription": "Project description", "targetName": "Final Project", "targetFramework": "1EdTech University Program and Course Catalog" , "targetType": "CFItem", "targetUrl": "https://1edtech.edu/catalog/degree/project" } ], "allowedValue": [ "D", "C", "B", "A" ], "name": "Final Project Grade", "requiredLevel": "urn:uuid:d05a0867-d0ad-4b03-bdb5-28fb5d2aab7a", "resultType": "RubricCriterionLevel", "rubricCriterionLevel": [ { "id": "urn:uuid:d05a0867-d0ad-4b03-bdb5-28fb5d2aab7a", "type": [ "RubricCriterionLevel" ], "alignment": [ { "type": [ "Alignment" ], "targetCode": "project", "targetDescription": "Project description", "targetName": "Final Project", "targetFramework": "1EdTech University Program and Course Cata log", "targetType": "CFRubricCriterionLevel", "targetUrl": "https://1edtech.edu/catalog/degree/project/rubri c/levels/mastered" } ], "description": "The author demonstrated...", "level": "Mastered", "name": "Mastery", "points": "4" }, { "id": "urn:uuid:6b84b429-31ee-4dac-9d20-e5c55881f80e", "type": [ "RubricCriterionLevel" ], "alignment": [ { "type": [ "Alignment" ], "targetCode": "project", "targetDescription": "Project description", "targetName": "Final Project", "targetFramework": "1EdTech University Program and Course Cata log", "targetType": "CFRubricCriterionLevel", "targetUrl": "https://1edtech.edu/catalog/degree/project/rubri c/levels/basic" } ], "description": "The author demonstrated...", "level": "Basic", "name": "Basic", "points": "4" } ] }, { "id": "urn:uuid:b07c0387-f2d6-4b65-a3f4-f4e4302ea8f7", "type": [ "ResultDescription" ], "name": "Project Status", "resultType": "Status" } ], "specialization": "Computer Science Research", "tag": [ "research", "computer science" ] }, "image": { "id": "https://1edtech.edu/credentials/3732/image", "type": "Image", "caption": "1EdTech University Degree for Example Student" }, "narrative": "There is a final project report and source code evidence.", "result": [ { "type": [ "Result" ], "alignment": [ { "type": [ "Alignment" ], "targetCode": "project", "targetDescription": "Project description", "targetName": "Final Project", "targetFramework": "1EdTech University Program and Course Catalog", "targetType": "CFItem", "targetUrl": "https://1edtech.edu/catalog/degree/project/result/1" } ], "resultDescription": "urn:uuid:f6ab24cd-86e8-4eaf-b8c6-ded74e8fd41c", "value": "A" }, { "type": [ "Result" ], "achievedLevel": "urn:uuid:d05a0867-d0ad-4b03-bdb5-28fb5d2aab7a", "alignment": [ { "type": [ "Alignment" ], "targetCode": "project", "targetDescription": "Project description", "targetName": "Final Project", "targetFramework": "1EdTech University Program and Course Catalog", "targetType": "CFItem", "targetUrl": "https://1edtech.edu/catalog/degree/project/result/1" } ], "resultDescription": "urn:uuid:f6ab24cd-86e8-4eaf-b8c6-ded74e8fd41c" }, { "type": [ "Result" ], "resultDescription": "urn:uuid:f6ab24cd-86e8-4eaf-b8c6-ded74e8fd41c", "status": "Completed" } ] }, "endorsement": [ { "@context": [ "https://www.w3.org/ns/credentials/v2", "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json" ], "id": "http://1edtech.edu/endorsementcredential/3735", "type": [ "VerifiableCredential", "EndorsementCredential" ], "name": "EAA endorsement", "issuer": { "id": "https://accrediter.edu/issuers/565049", "type": [ "Profile" ], "name": "Example Accrediting Agency" }, "validFrom": "2010-01-01T00:00:00Z", "validUntil": "2020-01-01T00:00:00Z", "credentialSubject": { "id": "https://1edtech.edu/issuers/565049", "type": [ "EndorsementSubject" ], "endorsementComment": "1EdTech University is in good standing" }, "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_end orsementcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" }, { "id": "https://accrediter.edu/schema/endorsementcredential.json", "type": "1EdTechJsonSchemaValidator2019" } ], "credentialStatus": { "id": "https://1edtech.edu/credentials/3732/revocations", "type": "1EdTechRevocationList" }, "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#zvPkQiUFf JrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA" , "proofPurpose": "assertionMethod", "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fM eMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA" } ] } ], "evidence": [ { "id": "https://1edtech.edu/credentials/3732/evidence/1", "type": [ "Evidence" ], "narrative": "# Final Project Report \n This project was ...", "name": "Final Project Report", "description": "This is the final project report.", "genre": "Research", "audience": "Department" }, { "id": "https://github.com/somebody/project", "type": [ "Evidence" ], "name": "Final Project Code", "description": "This is the source code for the final project app.", "genre": "Research", "audience": "Department" } ], "issuer": { "id": "https://1edtech.edu/issuers/565049", "type": [ "Profile" ], "name": "1EdTech University", "url": "https://1edtech.edu", "phone": "1-222-333-4444", "description": "1EdTech University provides online degree programs.", "endorsement": [ { "@context": [ "https://www.w3.org/ns/credentials/v2", "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json" ], "id": "http://1edtech.edu/endorsementcredential/3736", "type": [ "VerifiableCredential", "EndorsementCredential" ], "name": "EAA endorsement", "issuer": { "id": "https://accrediter.edu/issuers/565049", "type": [ "Profile" ], "name": "Example Accrediting Agency" }, "validFrom": "2010-01-01T00:00:00Z", "validUntil": "2020-01-01T00:00:00Z", "credentialSubject": { "id": "https://1edtech.edu/issuers/565049", "type": [ "EndorsementSubject" ], "endorsementComment": "1EdTech University is in good standing" }, "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_e ndorsementcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" }, { "id": "https://accrediter.edu/schema/endorsementcredential.json", "type": "1EdTechJsonSchemaValidator2019" } ], "credentialStatus": { "id": "https://1edtech.edu/credentials/3732/revocations", "type": "1EdTechRevocationList" }, "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#zvPkQiU FfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgt A", "proofPurpose": "assertionMethod", "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7 fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA" } ] } ], "image": { "id": "https://1edtech.edu/logo.png", "type": "Image", "caption": "1EdTech University logo" }, "email": "registrar@1edtech.edu", "address": { "type": [ "Address" ], "addressCountry": "USA", "addressCountryCode": "US", "addressRegion": "TX", "addressLocality": "Austin", "streetAddress": "123 First St", "postOfficeBoxNumber": "1", "postalCode": "12345", "geo": { "type": "GeoCoordinates", "latitude": 1, "longitude": 1 } }, "otherIdentifier": [ { "type": "IdentifierEntry", "identifier": "12345", "identifierType": "sourcedId" }, { "type": "IdentifierEntry", "identifier": "67890", "identifierType": "nationalIdentityNumber" } ], "official": "Horace Mann", "parentOrg": { "id": "did:example:123456789", "type": [ "Profile" ], "name": "Universal Universities" } }, "validFrom": "2010-01-01T00:00:00Z", "validUntil": "2030-01-01T00:00:00Z", "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achieve mentcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" } ], "credentialStatus": { "id": "https://1edtech.edu/credentials/3732/revocations", "type": "1EdTechRevocationList" }, "refreshService": { "id": "http://1edtech.edu/credentials/3732", "type": "1EdTechCredentialRefresh" }, "iss": "https://1edtech.edu/issuers/565049", "jti": "http://1edtech.edu/credentials/3732", "sub": "did:example:ebfeb1f712ebc6f1c276e12ec21" } --------------- JWT --------------- eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4i OiJra0JaTzdBUFl3aDNSQzJSMWp3ZFBGSjM2YUQ1Y0d1ck9BQWc0Ukh6bm5mTjdTdDVocGE1SkQ1ZWd3 c3dLRVdFSXEwdkxZZWM3ZmdZWGlaWmViMUZkbFRBUFhlNDFlTUVHckdGUGZiYW9GYXpOT0dPUHc2cW1n eUtCeGdCdVhsN2xBWGtIZXR5QWtRdUZjRndXTVFyQ1JwSXI1SmRDRFRMLV9oZHRHb3drbG0xa3dlcHdI Wlk4eVJOZHkyVmVnTHJoN2RidThKR3FBWnc2MjNUZGlpaXFZdmdJSF9NMVd1X0hKQlJoNFg1MFhoUEs5 WEVYMWd0SFF3clM4TGVqNVo4ZlgydVlMRW4xMnE3SW1rZmt0QUtpZTVlMnhnU1RxdU1mY2dDTnFfblU0 LTJvcFlWajc4dDRIa1hxa0t6UzNoOHFiWUVkZWZxQzdJNG53LVRSMzBQN1EifX0.eyJAY29udGV4dCI6 WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv YmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIiwiaHR0cHM6Ly9wdXJsLmltc2ds b2JhbC5vcmcvc3BlYy9vYi92M3AwL2V4dGVuc2lvbnMuanNvbiJdLCJpZCI6Imh0dHA6Ly8xZWR0ZWNo LmVkdS9jcmVkZW50aWFscy8zNzMyIiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIk9wZW5C YWRnZUNyZWRlbnRpYWwiXSwibmFtZSI6IjFFZFRlY2ggVW5pdmVyc2l0eSBEZWdyZWUgZm9yIEV4YW1w bGUgU3R1ZGVudCIsImRlc2NyaXB0aW9uIjoiMUVkVGVjaCBVbml2ZXJzaXR5IERlZ3JlZSBEZXNjcmlw dGlvbiIsImltYWdlIjp7ImlkIjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdS9jcmVkZW50aWFscy8zNzMyL2lt YWdlIiwidHlwZSI6IkltYWdlIiwiY2FwdGlvbiI6IjFFZFRlY2ggVW5pdmVyc2l0eSBEZWdyZWUgZm9y IEV4YW1wbGUgU3R1ZGVudCJ9LCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtcGxlOmVi ZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSIsInR5cGUiOlsiQWNoaWV2ZW1lbnRTdWJqZWN0Il0sImFj dGl2aXR5RW5kRGF0ZSI6IjIwMTAtMDEtMDJUMDA6MDA6MDBaIiwiYWN0aXZpdHlTdGFydERhdGUiOiIy MDEwLTAxLTAxVDAwOjAwOjAwWiIsImNyZWRpdHNFYXJuZWQiOjQyLCJsaWNlbnNlTnVtYmVyIjoiQS05 MzIwMDQxIiwicm9sZSI6Ik1ham9yIERvbW8iLCJzb3VyY2UiOnsiaWQiOiJodHRwczovL3NjaG9vbC5l ZHUvaXNzdWVycy8yMDEyMzQiLCJ0eXBlIjpbIlByb2ZpbGUiXSwibmFtZSI6IjFFZFRlY2ggQ29sbGVn ZSBvZiBBcnRzIn0sInRlcm0iOiJGYWxsIiwiaWRlbnRpZmllciI6W3sidHlwZSI6IklkZW50aXR5T2Jq ZWN0IiwiaWRlbnRpdHlIYXNoIjoic3R1ZGVudEAxZWR0ZWNoLmVkdSIsImlkZW50aXR5VHlwZSI6ImVt YWlsQWRkcmVzcyIsImhhc2hlZCI6ZmFsc2UsInNhbHQiOiJub3QtdXNlZCJ9LHsidHlwZSI6IklkZW50 aXR5T2JqZWN0IiwiaWRlbnRpdHlIYXNoIjoic29tZWJvZHlAZ21haWwuY29tIiwiaWRlbnRpdHlUeXBl IjoiZW1haWxBZGRyZXNzIiwiaGFzaGVkIjpmYWxzZSwic2FsdCI6Im5vdC11c2VkIn1dLCJhY2hpZXZl bWVudCI6eyJpZCI6Imh0dHBzOi8vMWVkdGVjaC5lZHUvYWNoaWV2ZW1lbnRzL2RlZ3JlZSIsInR5cGUi OlsiQWNoaWV2ZW1lbnQiXSwiYWxpZ25tZW50IjpbeyJ0eXBlIjpbIkFsaWdubWVudCJdLCJ0YXJnZXRD b2RlIjoiZGVncmVlIiwidGFyZ2V0RGVzY3JpcHRpb24iOiIxRWRUZWNoIFVuaXZlcnNpdHkgRGVncmVl IHByb2dyYW1zLiIsInRhcmdldE5hbWUiOiIxRWRUZWNoIFVuaXZlcnNpdHkgRGVncmVlIiwidGFyZ2V0 RnJhbWV3b3JrIjoiMUVkVGVjaCBVbml2ZXJzaXR5IFByb2dyYW0gYW5kIENvdXJzZSBDYXRhbG9nIiwi dGFyZ2V0VHlwZSI6IkNGSXRlbSIsInRhcmdldFVybCI6Imh0dHBzOi8vMWVkdGVjaC5lZHUvY2F0YWxv Zy9kZWdyZWUifSx7InR5cGUiOlsiQWxpZ25tZW50Il0sInRhcmdldENvZGUiOiJkZWdyZWUiLCJ0YXJn ZXREZXNjcmlwdGlvbiI6IjFFZFRlY2ggVW5pdmVyc2l0eSBEZWdyZWUgcHJvZ3JhbXMuIiwidGFyZ2V0 TmFtZSI6IjFFZFRlY2ggVW5pdmVyc2l0eSBEZWdyZWUiLCJ0YXJnZXRGcmFtZXdvcmsiOiIxRWRUZWNo IFVuaXZlcnNpdHkgUHJvZ3JhbSBhbmQgQ291cnNlIENhdGFsb2ciLCJ0YXJnZXRUeXBlIjoiQ1RETCIs InRhcmdldFVybCI6Imh0dHBzOi8vY3JlZGVudGlhbGVuZ2luZXJlZ2lzdHJ5Lm9yZy9yZXNvdXJjZXMv Y2UtOThjYjAyN2ItOTVlZi00NDk0LTkwOGQtNmY3NzkwZWM2YjZiIn1dLCJhY2hpZXZlbWVudFR5cGUi OiJEZWdyZWUiLCJjcmVhdG9yIjp7ImlkIjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdS9pc3N1ZXJzLzU2NTA0 OSIsInR5cGUiOlsiUHJvZmlsZSJdLCJuYW1lIjoiMUVkVGVjaCBVbml2ZXJzaXR5IiwidXJsIjoiaHR0 cHM6Ly8xZWR0ZWNoLmVkdSIsInBob25lIjoiMS0yMjItMzMzLTQ0NDQiLCJkZXNjcmlwdGlvbiI6IjFF ZFRlY2ggVW5pdmVyc2l0eSBwcm92aWRlcyBvbmxpbmUgZGVncmVlIHByb2dyYW1zLiIsImVuZG9yc2Vt ZW50IjpbeyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJo dHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIl0s ImlkIjoiaHR0cDovLzFlZHRlY2guZWR1L2VuZG9yc2VtZW50Y3JlZGVudGlhbC8zNzMyIiwidHlwZSI6 WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkVuZG9yc2VtZW50Q3JlZGVudGlhbCJdLCJuYW1lIjoiU0RF IGVuZG9yc2VtZW50IiwiaXNzdWVyIjp7ImlkIjoiaHR0cHM6Ly9hY2NyZWRpdGVyLmVkdS9pc3N1ZXJz LzU2NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdLCJuYW1lIjoiRXhhbXBsZSBBY2NyZWRpdGluZyBBZ2Vu Y3kifSwidmFsaWRGcm9tIjoiMjAxMC0wMS0wMVQwMDowMDowMFoiLCJ2YWxpZFVudGlsIjoiMjAyMC0w MS0wMVQwMDowMDowMFoiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6Imh0dHBzOi8vMWVkdGVjaC5l ZHUvaXNzdWVycy81NjUwNDkiLCJ0eXBlIjpbIkVuZG9yc2VtZW50U3ViamVjdCJdLCJlbmRvcnNlbWVu dENvbW1lbnQiOiIxRWRUZWNoIFVuaXZlcnNpdHkgaXMgaW4gZ29vZCBzdGFuZGluZyJ9LCJjcmVkZW50 aWFsU2NoZW1hIjpbeyJpZCI6Imh0dHBzOi8vcHVybC5pbXNnbG9iYWwub3JnL3NwZWMvb2IvdjNwMC9z Y2hlbWEvanNvbi9vYl92M3AwX2VuZG9yc2VtZW50Y3JlZGVudGlhbF9zY2hlbWEuanNvbiIsInR5cGUi OiIxRWRUZWNoSnNvblNjaGVtYVZhbGlkYXRvcjIwMTkifSx7ImlkIjoiaHR0cHM6Ly9hY2NyZWRpdGVy LmVkdS9zY2hlbWEvZW5kb3JzZW1lbnRjcmVkZW50aWFsLmpzb24iLCJ0eXBlIjoiMUVkVGVjaEpzb25T Y2hlbWFWYWxpZGF0b3IyMDE5In1dLCJjcmVkZW50aWFsU3RhdHVzIjp7ImlkIjoiaHR0cHM6Ly8xZWR0 ZWNoLmVkdS9jcmVkZW50aWFscy8zNzMyL3Jldm9jYXRpb25zIiwidHlwZSI6IjFFZFRlY2hSZXZvY2F0 aW9uTGlzdCJ9LCJyZWZyZXNoU2VydmljZSI6eyJpZCI6Imh0dHA6Ly8xZWR0ZWNoLmVkdS9jcmVkZW50 aWFscy8zNzMyIiwidHlwZSI6IjFFZFRlY2hDcmVkZW50aWFsUmVmcmVzaCJ9LCJwcm9vZiI6W3sidHlw ZSI6IkRhdGFJbnRlZ3JpdHlQcm9vZiIsImNyeXB0b3N1aXRlIjoiZWRkc2EtcmRmLTIwMjIiLCJjcmVh dGVkIjoiMjAyMi0wNS0yNlQxODoxNzowOFoiLCJ2ZXJpZmljYXRpb25NZXRob2QiOiJodHRwczovL2Fj Y3JlZGl0ZXIuZWR1L2lzc3VlcnMvNTY1MDQ5I3p2UGtRaVVGZkpyZ25DUmh5UGtUU2tnckdYYm5MUjE1 cEhINUhaVllOZE00VENBd1FIcUc3Zk1lTVBMdFlOUm5FZ29WMWFKZFI1RTYxZVd1NXNXUllndEEiLCJw cm9vZlB1cnBvc2UiOiJhc3NlcnRpb25NZXRob2QiLCJwcm9vZlZhbHVlIjoienZQa1FpVUZmSnJnbkNS aHlQa1RTa2dyR1hibkxSMTVwSEg1SFpWWU5kTTRUQ0F3UUhxRzdmTWVNUEx0WU5SbkVnb1YxYUpkUjVF NjFlV3U1c1dSWWd0QSJ9XX0seyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVu dGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0z LjAuMy5qc29uIl0sImlkIjoiaHR0cDovLzFlZHRlY2guZWR1L2VuZG9yc2VtZW50Y3JlZGVudGlhbC8z NzMzIiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkVuZG9yc2VtZW50Q3JlZGVudGlhbCJd LCJuYW1lIjoiU0RFIGVuZG9yc2VtZW50IiwiaXNzdWVyIjp7ImlkIjoiaHR0cHM6Ly9zdGF0ZS5nb3Yv aXNzdWVycy81NjUwNDkiLCJ0eXBlIjpbIlByb2ZpbGUiXSwibmFtZSI6IlN0YXRlIERlcGFydG1lbnQg b2YgRWR1Y2F0aW9uIn0sInZhbGlkRnJvbSI6IjIwMTAtMDEtMDFUMDA6MDA6MDBaIiwidmFsaWRVbnRp bCI6IjIwMjAtMDEtMDFUMDA6MDA6MDBaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiaWQiOiJodHRwczov LzFlZHRlY2guZWR1L2lzc3VlcnMvNTY1MDQ5IiwidHlwZSI6WyJFbmRvcnNlbWVudFN1YmplY3QiXSwi ZW5kb3JzZW1lbnRDb21tZW50IjoiMUVkVGVjaCBVbml2ZXJzaXR5IGlzIGluIGdvb2Qgc3RhbmRpbmci fSwiY3JlZGVudGlhbFNjaGVtYSI6W3siaWQiOiJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVj L29iL3YzcDAvc2NoZW1hL2pzb24vb2JfdjNwMF9lbmRvcnNlbWVudGNyZWRlbnRpYWxfc2NoZW1hLmpz b24iLCJ0eXBlIjoiMUVkVGVjaEpzb25TY2hlbWFWYWxpZGF0b3IyMDE5In0seyJpZCI6Imh0dHBzOi8v c3RhdGUuZ292L3NjaGVtYS9lbmRvcnNlbWVudGNyZWRlbnRpYWwuanNvbiIsInR5cGUiOiIxRWRUZWNo SnNvblNjaGVtYVZhbGlkYXRvcjIwMTkifV0sImNyZWRlbnRpYWxTdGF0dXMiOnsiaWQiOiJodHRwczov L3N0YXRlLmdvdi9jcmVkZW50aWFscy8zNzMyL3Jldm9jYXRpb25zIiwidHlwZSI6IjFFZFRlY2hSZXZv Y2F0aW9uTGlzdCJ9LCJyZWZyZXNoU2VydmljZSI6eyJpZCI6Imh0dHA6Ly9zdGF0ZS5nb3YvY3JlZGVu dGlhbHMvMzczMiIsInR5cGUiOiIxRWRUZWNoQ3JlZGVudGlhbFJlZnJlc2gifSwicHJvb2YiOlt7InR5 cGUiOiJEYXRhSW50ZWdyaXR5UHJvb2YiLCJjcnlwdG9zdWl0ZSI6ImVkZHNhLXJkZi0yMDIyIiwiY3Jl YXRlZCI6IjIwMjItMDUtMjZUMTg6MjU6NTlaIiwidmVyaWZpY2F0aW9uTWV0aG9kIjoiaHR0cHM6Ly9h Y2NyZWRpdGVyLmVkdS9pc3N1ZXJzLzU2NTA0OSN6NWJEbm1TZ0Rjelh3Wkd5YTZaanhLYXhrZEt4enND TWlWU3NnRVZXeG5hV0s3WnFiS256Y0NkN21VS0U5RFFhQUwyUU1YUDVBcXVQZVc2VzJDV3JaN2pOQyIs InByb29mUHVycG9zZSI6ImFzc2VydGlvbk1ldGhvZCIsInByb29mVmFsdWUiOiJ6NWJEbm1TZ0Rjelh3 Wkd5YTZaanhLYXhrZEt4enNDTWlWU3NnRVZXeG5hV0s3WnFiS256Y0NkN21VS0U5RFFhQUwyUU1YUDVB cXVQZVc2VzJDV3JaN2pOQyJ9XX1dLCJpbWFnZSI6eyJpZCI6Imh0dHBzOi8vMWVkdGVjaC5lZHUvbG9n by5wbmciLCJ0eXBlIjoiSW1hZ2UiLCJjYXB0aW9uIjoiMUVkVGVjaCBVbml2ZXJzaXR5IGxvZ28ifSwi ZW1haWwiOiJyZWdpc3RyYXJAMWVkdGVjaC5lZHUiLCJhZGRyZXNzIjp7InR5cGUiOlsiQWRkcmVzcyJd LCJhZGRyZXNzQ291bnRyeSI6IlVTQSIsImFkZHJlc3NDb3VudHJ5Q29kZSI6IlVTIiwiYWRkcmVzc1Jl Z2lvbiI6IlRYIiwiYWRkcmVzc0xvY2FsaXR5IjoiQXVzdGluIiwic3RyZWV0QWRkcmVzcyI6IjEyMyBG aXJzdCBTdCIsInBvc3RPZmZpY2VCb3hOdW1iZXIiOiIxIiwicG9zdGFsQ29kZSI6IjEyMzQ1IiwiZ2Vv Ijp7InR5cGUiOiJHZW9Db29yZGluYXRlcyIsImxhdGl0dWRlIjoxLCJsb25naXR1ZGUiOjF9fSwib3Ro ZXJJZGVudGlmaWVyIjpbeyJ0eXBlIjoiSWRlbnRpZmllckVudHJ5IiwiaWRlbnRpZmllciI6IjEyMzQ1 IiwiaWRlbnRpZmllclR5cGUiOiJzb3VyY2VkSWQifSx7InR5cGUiOiJJZGVudGlmaWVyRW50cnkiLCJp ZGVudGlmaWVyIjoiNjc4OTAiLCJpZGVudGlmaWVyVHlwZSI6Im5hdGlvbmFsSWRlbnRpdHlOdW1iZXIi fV0sIm9mZmljaWFsIjoiSG9yYWNlIE1hbm4iLCJwYXJlbnRPcmciOnsiaWQiOiJkaWQ6ZXhhbXBsZTox MjM0NTY3ODkiLCJ0eXBlIjpbIlByb2ZpbGUiXSwibmFtZSI6IlVuaXZlcnNhbCBVbml2ZXJzaXRpZXMi fX0sImNyZWRpdHNBdmFpbGFibGUiOjM2LCJjcml0ZXJpYSI6eyJpZCI6Imh0dHBzOi8vMWVkdGVjaC5l ZHUvYWNoaWV2ZW1lbnRzL2RlZ3JlZSIsIm5hcnJhdGl2ZSI6IiMgRGVncmVlIFJlcXVpcmVtZW50c1xu U3R1ZGVudHMgbXVzdCBjb21wbGV0ZS4uLiJ9LCJkZXNjcmlwdGlvbiI6IjFFZFRlY2ggVW5pdmVyc2l0 eSBEZWdyZWUgRGVzY3JpcHRpb24iLCJlbmRvcnNlbWVudCI6W3siQGNvbnRleHQiOlsiaHR0cHM6Ly93 d3cudzMub3JnL25zL2NyZWRlbnRpYWxzL3YyIiwiaHR0cHM6Ly9wdXJsLmltc2dsb2JhbC5vcmcvc3Bl Yy9vYi92M3AwL2NvbnRleHQtMy4wLjMuanNvbiJdLCJpZCI6Imh0dHA6Ly8xZWR0ZWNoLmVkdS9lbmRv cnNlbWVudGNyZWRlbnRpYWwvMzczNCIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJFbmRv cnNlbWVudENyZWRlbnRpYWwiXSwibmFtZSI6IkVBQSBlbmRvcnNlbWVudCIsImlzc3VlciI6eyJpZCI6 Imh0dHBzOi8vYWNjcmVkaXRlci5lZHUvaXNzdWVycy81NjUwNDkiLCJ0eXBlIjpbIlByb2ZpbGUiXSwi bmFtZSI6IkV4YW1wbGUgQWNjcmVkaXRpbmcgQWdlbmN5In0sInZhbGlkRnJvbSI6IjIwMTAtMDEtMDFU MDA6MDA6MDBaIiwidmFsaWRVbnRpbCI6IjIwMjAtMDEtMDFUMDA6MDA6MDBaIiwiY3JlZGVudGlhbFN1 YmplY3QiOnsiaWQiOiJodHRwczovLzFlZHRlY2guZWR1L2lzc3VlcnMvNTY1MDQ5IiwidHlwZSI6WyJF bmRvcnNlbWVudFN1YmplY3QiXSwiZW5kb3JzZW1lbnRDb21tZW50IjoiMUVkVGVjaCBVbml2ZXJzaXR5 IGlzIGluIGdvb2Qgc3RhbmRpbmcifSwiY3JlZGVudGlhbFNjaGVtYSI6W3siaWQiOiJodHRwczovL3B1 cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvc2NoZW1hL2pzb24vb2JfdjNwMF9lbmRvcnNlbWVu dGNyZWRlbnRpYWxfc2NoZW1hLmpzb24iLCJ0eXBlIjoiMUVkVGVjaEpzb25TY2hlbWFWYWxpZGF0b3Iy MDE5In0seyJpZCI6Imh0dHBzOi8vYWNjcmVkaXRlci5lZHUvc2NoZW1hL2VuZG9yc2VtZW50Y3JlZGVu dGlhbC5qc29uIiwidHlwZSI6IjFFZFRlY2hKc29uU2NoZW1hVmFsaWRhdG9yMjAxOSJ9XSwiY3JlZGVu dGlhbFN0YXR1cyI6eyJpZCI6Imh0dHBzOi8vMWVkdGVjaC5lZHUvY3JlZGVudGlhbHMvMzczMi9yZXZv Y2F0aW9ucyIsInR5cGUiOiIxRWRUZWNoUmV2b2NhdGlvbkxpc3QifSwicmVmcmVzaFNlcnZpY2UiOnsi aWQiOiJodHRwOi8vMWVkdGVjaC5lZHUvY3JlZGVudGlhbHMvMzczMiIsInR5cGUiOiIxRWRUZWNoQ3Jl ZGVudGlhbFJlZnJlc2gifSwicHJvb2YiOlt7InR5cGUiOiJEYXRhSW50ZWdyaXR5UHJvb2YiLCJjcnlw dG9zdWl0ZSI6ImVkZHNhLXJkZi0yMDIyIiwiY3JlYXRlZCI6IjIwMjItMDUtMjZUMTg6MTc6MDhaIiwi dmVyaWZpY2F0aW9uTWV0aG9kIjoiaHR0cHM6Ly9hY2NyZWRpdGVyLmVkdS9pc3N1ZXJzLzU2NTA0OSN6 dlBrUWlVRmZKcmduQ1JoeVBrVFNrZ3JHWGJuTFIxNXBISDVIWlZZTmRNNFRDQXdRSHFHN2ZNZU1QTHRZ TlJuRWdvVjFhSmRSNUU2MWVXdTVzV1JZZ3RBIiwicHJvb2ZQdXJwb3NlIjoiYXNzZXJ0aW9uTWV0aG9k IiwicHJvb2ZWYWx1ZSI6Inp2UGtRaVVGZkpyZ25DUmh5UGtUU2tnckdYYm5MUjE1cEhINUhaVllOZE00 VENBd1FIcUc3Zk1lTVBMdFlOUm5FZ29WMWFKZFI1RTYxZVd1NXNXUllndEEifV19XSwiZmllbGRPZlN0 dWR5IjoiUmVzZWFyY2giLCJodW1hbkNvZGUiOiJSMSIsImltYWdlIjp7ImlkIjoiaHR0cHM6Ly8xZWR0 ZWNoLmVkdS9hY2hpZXZlbWVudHMvZGVncmVlL2ltYWdlIiwidHlwZSI6IkltYWdlIiwiY2FwdGlvbiI6 IjFFZFRlY2ggVW5pdmVyc2l0eSBEZWdyZWUifSwibmFtZSI6IjFFZFRlY2ggVW5pdmVyc2l0eSBEZWdy ZWUiLCJvdGhlcklkZW50aWZpZXIiOlt7InR5cGUiOiJJZGVudGlmaWVyRW50cnkiLCJpZGVudGlmaWVy IjoiYWJkZSIsImlkZW50aWZpZXJUeXBlIjoiaWRlbnRpZmllciJ9XSwicmVzdWx0RGVzY3JpcHRpb24i Olt7ImlkIjoidXJuOnV1aWQ6ZjZhYjI0Y2QtODZlOC00ZWFmLWI4YzYtZGVkNzRlOGZkNDFjIiwidHlw ZSI6WyJSZXN1bHREZXNjcmlwdGlvbiJdLCJhbGlnbm1lbnQiOlt7InR5cGUiOlsiQWxpZ25tZW50Il0s InRhcmdldENvZGUiOiJwcm9qZWN0IiwidGFyZ2V0RGVzY3JpcHRpb24iOiJQcm9qZWN0IGRlc2NyaXB0 aW9uIiwidGFyZ2V0TmFtZSI6IkZpbmFsIFByb2plY3QiLCJ0YXJnZXRGcmFtZXdvcmsiOiIxRWRUZWNo IFVuaXZlcnNpdHkgUHJvZ3JhbSBhbmQgQ291cnNlIENhdGFsb2ciLCJ0YXJnZXRUeXBlIjoiQ0ZJdGVt IiwidGFyZ2V0VXJsIjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdS9jYXRhbG9nL2RlZ3JlZS9wcm9qZWN0In1d LCJhbGxvd2VkVmFsdWUiOlsiRCIsIkMiLCJCIiwiQSJdLCJuYW1lIjoiRmluYWwgUHJvamVjdCBHcmFk ZSIsInJlcXVpcmVkVmFsdWUiOiJDIiwicmVzdWx0VHlwZSI6IkxldHRlckdyYWRlIn0seyJpZCI6InVy bjp1dWlkOmE3MGRkYzZhLTRjNGEtNGJkOC04Mjc3LWNiOTdjNzlmNDBjNSIsInR5cGUiOlsiUmVzdWx0 RGVzY3JpcHRpb24iXSwiYWxpZ25tZW50IjpbeyJ0eXBlIjpbIkFsaWdubWVudCJdLCJ0YXJnZXRDb2Rl IjoicHJvamVjdCIsInRhcmdldERlc2NyaXB0aW9uIjoiUHJvamVjdCBkZXNjcmlwdGlvbiIsInRhcmdl dE5hbWUiOiJGaW5hbCBQcm9qZWN0IiwidGFyZ2V0RnJhbWV3b3JrIjoiMUVkVGVjaCBVbml2ZXJzaXR5 IFByb2dyYW0gYW5kIENvdXJzZSBDYXRhbG9nIiwidGFyZ2V0VHlwZSI6IkNGSXRlbSIsInRhcmdldFVy bCI6Imh0dHBzOi8vMWVkdGVjaC5lZHUvY2F0YWxvZy9kZWdyZWUvcHJvamVjdCJ9XSwiYWxsb3dlZFZh bHVlIjpbIkQiLCJDIiwiQiIsIkEiXSwibmFtZSI6IkZpbmFsIFByb2plY3QgR3JhZGUiLCJyZXF1aXJl ZExldmVsIjoidXJuOnV1aWQ6ZDA1YTA4NjctZDBhZC00YjAzLWJkYjUtMjhmYjVkMmFhYjdhIiwicmVz dWx0VHlwZSI6IlJ1YnJpY0NyaXRlcmlvbkxldmVsIiwicnVicmljQ3JpdGVyaW9uTGV2ZWwiOlt7Imlk IjoidXJuOnV1aWQ6ZDA1YTA4NjctZDBhZC00YjAzLWJkYjUtMjhmYjVkMmFhYjdhIiwidHlwZSI6WyJS dWJyaWNDcml0ZXJpb25MZXZlbCJdLCJhbGlnbm1lbnQiOlt7InR5cGUiOlsiQWxpZ25tZW50Il0sInRh cmdldENvZGUiOiJwcm9qZWN0IiwidGFyZ2V0RGVzY3JpcHRpb24iOiJQcm9qZWN0IGRlc2NyaXB0aW9u IiwidGFyZ2V0TmFtZSI6IkZpbmFsIFByb2plY3QiLCJ0YXJnZXRGcmFtZXdvcmsiOiIxRWRUZWNoIFVu aXZlcnNpdHkgUHJvZ3JhbSBhbmQgQ291cnNlIENhdGFsb2ciLCJ0YXJnZXRUeXBlIjoiQ0ZSdWJyaWND cml0ZXJpb25MZXZlbCIsInRhcmdldFVybCI6Imh0dHBzOi8vMWVkdGVjaC5lZHUvY2F0YWxvZy9kZWdy ZWUvcHJvamVjdC9ydWJyaWMvbGV2ZWxzL21hc3RlcmVkIn1dLCJkZXNjcmlwdGlvbiI6IlRoZSBhdXRo b3IgZGVtb25zdHJhdGVkLi4uIiwibGV2ZWwiOiJNYXN0ZXJlZCIsIm5hbWUiOiJNYXN0ZXJ5IiwicG9p bnRzIjoiNCJ9LHsiaWQiOiJ1cm46dXVpZDo2Yjg0YjQyOS0zMWVlLTRkYWMtOWQyMC1lNWM1NTg4MWY4 MGUiLCJ0eXBlIjpbIlJ1YnJpY0NyaXRlcmlvbkxldmVsIl0sImFsaWdubWVudCI6W3sidHlwZSI6WyJB bGlnbm1lbnQiXSwidGFyZ2V0Q29kZSI6InByb2plY3QiLCJ0YXJnZXREZXNjcmlwdGlvbiI6IlByb2pl Y3QgZGVzY3JpcHRpb24iLCJ0YXJnZXROYW1lIjoiRmluYWwgUHJvamVjdCIsInRhcmdldEZyYW1ld29y ayI6IjFFZFRlY2ggVW5pdmVyc2l0eSBQcm9ncmFtIGFuZCBDb3Vyc2UgQ2F0YWxvZyIsInRhcmdldFR5 cGUiOiJDRlJ1YnJpY0NyaXRlcmlvbkxldmVsIiwidGFyZ2V0VXJsIjoiaHR0cHM6Ly8xZWR0ZWNoLmVk dS9jYXRhbG9nL2RlZ3JlZS9wcm9qZWN0L3J1YnJpYy9sZXZlbHMvYmFzaWMifV0sImRlc2NyaXB0aW9u IjoiVGhlIGF1dGhvciBkZW1vbnN0cmF0ZWQuLi4iLCJsZXZlbCI6IkJhc2ljIiwibmFtZSI6IkJhc2lj IiwicG9pbnRzIjoiNCJ9XX0seyJpZCI6InVybjp1dWlkOmIwN2MwMzg3LWYyZDYtNGI2NS1hM2Y0LWY0 ZTQzMDJlYThmNyIsInR5cGUiOlsiUmVzdWx0RGVzY3JpcHRpb24iXSwibmFtZSI6IlByb2plY3QgU3Rh dHVzIiwicmVzdWx0VHlwZSI6IlN0YXR1cyJ9XSwic3BlY2lhbGl6YXRpb24iOiJDb21wdXRlciBTY2ll bmNlIFJlc2VhcmNoIiwidGFnIjpbInJlc2VhcmNoIiwiY29tcHV0ZXIgc2NpZW5jZSJdfSwiaW1hZ2Ui OnsiaWQiOiJodHRwczovLzFlZHRlY2guZWR1L2NyZWRlbnRpYWxzLzM3MzIvaW1hZ2UiLCJ0eXBlIjoi SW1hZ2UiLCJjYXB0aW9uIjoiMUVkVGVjaCBVbml2ZXJzaXR5IERlZ3JlZSBmb3IgRXhhbXBsZSBTdHVk ZW50In0sIm5hcnJhdGl2ZSI6IlRoZXJlIGlzIGEgZmluYWwgcHJvamVjdCByZXBvcnQgYW5kIHNvdXJj ZSBjb2RlIGV2aWRlbmNlLiIsInJlc3VsdCI6W3sidHlwZSI6WyJSZXN1bHQiXSwiYWxpZ25tZW50Ijpb eyJ0eXBlIjpbIkFsaWdubWVudCJdLCJ0YXJnZXRDb2RlIjoicHJvamVjdCIsInRhcmdldERlc2NyaXB0 aW9uIjoiUHJvamVjdCBkZXNjcmlwdGlvbiIsInRhcmdldE5hbWUiOiJGaW5hbCBQcm9qZWN0IiwidGFy Z2V0RnJhbWV3b3JrIjoiMUVkVGVjaCBVbml2ZXJzaXR5IFByb2dyYW0gYW5kIENvdXJzZSBDYXRhbG9n IiwidGFyZ2V0VHlwZSI6IkNGSXRlbSIsInRhcmdldFVybCI6Imh0dHBzOi8vMWVkdGVjaC5lZHUvY2F0 YWxvZy9kZWdyZWUvcHJvamVjdC9yZXN1bHQvMSJ9XSwicmVzdWx0RGVzY3JpcHRpb24iOiJ1cm46dXVp ZDpmNmFiMjRjZC04NmU4LTRlYWYtYjhjNi1kZWQ3NGU4ZmQ0MWMiLCJ2YWx1ZSI6IkEifSx7InR5cGUi OlsiUmVzdWx0Il0sImFjaGlldmVkTGV2ZWwiOiJ1cm46dXVpZDpkMDVhMDg2Ny1kMGFkLTRiMDMtYmRi NS0yOGZiNWQyYWFiN2EiLCJhbGlnbm1lbnQiOlt7InR5cGUiOlsiQWxpZ25tZW50Il0sInRhcmdldENv ZGUiOiJwcm9qZWN0IiwidGFyZ2V0RGVzY3JpcHRpb24iOiJQcm9qZWN0IGRlc2NyaXB0aW9uIiwidGFy Z2V0TmFtZSI6IkZpbmFsIFByb2plY3QiLCJ0YXJnZXRGcmFtZXdvcmsiOiIxRWRUZWNoIFVuaXZlcnNp dHkgUHJvZ3JhbSBhbmQgQ291cnNlIENhdGFsb2ciLCJ0YXJnZXRUeXBlIjoiQ0ZJdGVtIiwidGFyZ2V0 VXJsIjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdS9jYXRhbG9nL2RlZ3JlZS9wcm9qZWN0L3Jlc3VsdC8xIn1d LCJyZXN1bHREZXNjcmlwdGlvbiI6InVybjp1dWlkOmY2YWIyNGNkLTg2ZTgtNGVhZi1iOGM2LWRlZDc0 ZThmZDQxYyJ9LHsidHlwZSI6WyJSZXN1bHQiXSwicmVzdWx0RGVzY3JpcHRpb24iOiJ1cm46dXVpZDpm NmFiMjRjZC04NmU4LTRlYWYtYjhjNi1kZWQ3NGU4ZmQ0MWMiLCJzdGF0dXMiOiJDb21wbGV0ZWQifV19 LCJlbmRvcnNlbWVudCI6W3siQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnL25zL2NyZWRlbnRp YWxzL3YyIiwiaHR0cHM6Ly9wdXJsLmltc2dsb2JhbC5vcmcvc3BlYy9vYi92M3AwL2NvbnRleHQtMy4w LjMuanNvbiJdLCJpZCI6Imh0dHA6Ly8xZWR0ZWNoLmVkdS9lbmRvcnNlbWVudGNyZWRlbnRpYWwvMzcz NSIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJFbmRvcnNlbWVudENyZWRlbnRpYWwiXSwi bmFtZSI6IkVBQSBlbmRvcnNlbWVudCIsImlzc3VlciI6eyJpZCI6Imh0dHBzOi8vYWNjcmVkaXRlci5l ZHUvaXNzdWVycy81NjUwNDkiLCJ0eXBlIjpbIlByb2ZpbGUiXSwibmFtZSI6IkV4YW1wbGUgQWNjcmVk aXRpbmcgQWdlbmN5In0sInZhbGlkRnJvbSI6IjIwMTAtMDEtMDFUMDA6MDA6MDBaIiwidmFsaWRVbnRp bCI6IjIwMjAtMDEtMDFUMDA6MDA6MDBaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiaWQiOiJodHRwczov LzFlZHRlY2guZWR1L2lzc3VlcnMvNTY1MDQ5IiwidHlwZSI6WyJFbmRvcnNlbWVudFN1YmplY3QiXSwi ZW5kb3JzZW1lbnRDb21tZW50IjoiMUVkVGVjaCBVbml2ZXJzaXR5IGlzIGluIGdvb2Qgc3RhbmRpbmci fSwiY3JlZGVudGlhbFNjaGVtYSI6W3siaWQiOiJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVj L29iL3YzcDAvc2NoZW1hL2pzb24vb2JfdjNwMF9lbmRvcnNlbWVudGNyZWRlbnRpYWxfc2NoZW1hLmpz b24iLCJ0eXBlIjoiMUVkVGVjaEpzb25TY2hlbWFWYWxpZGF0b3IyMDE5In0seyJpZCI6Imh0dHBzOi8v YWNjcmVkaXRlci5lZHUvc2NoZW1hL2VuZG9yc2VtZW50Y3JlZGVudGlhbC5qc29uIiwidHlwZSI6IjFF ZFRlY2hKc29uU2NoZW1hVmFsaWRhdG9yMjAxOSJ9XSwiY3JlZGVudGlhbFN0YXR1cyI6eyJpZCI6Imh0 dHBzOi8vMWVkdGVjaC5lZHUvY3JlZGVudGlhbHMvMzczMi9yZXZvY2F0aW9ucyIsInR5cGUiOiIxRWRU ZWNoUmV2b2NhdGlvbkxpc3QifSwicmVmcmVzaFNlcnZpY2UiOnsiaWQiOiJodHRwOi8vMWVkdGVjaC5l ZHUvY3JlZGVudGlhbHMvMzczMiIsInR5cGUiOiIxRWRUZWNoQ3JlZGVudGlhbFJlZnJlc2gifSwicHJv b2YiOlt7InR5cGUiOiJEYXRhSW50ZWdyaXR5UHJvb2YiLCJjcnlwdG9zdWl0ZSI6ImVkZHNhLXJkZi0y MDIyIiwiY3JlYXRlZCI6IjIwMjItMDUtMjZUMTg6MTc6MDhaIiwidmVyaWZpY2F0aW9uTWV0aG9kIjoi aHR0cHM6Ly9hY2NyZWRpdGVyLmVkdS9pc3N1ZXJzLzU2NTA0OSN6dlBrUWlVRmZKcmduQ1JoeVBrVFNr Z3JHWGJuTFIxNXBISDVIWlZZTmRNNFRDQXdRSHFHN2ZNZU1QTHRZTlJuRWdvVjFhSmRSNUU2MWVXdTVz V1JZZ3RBIiwicHJvb2ZQdXJwb3NlIjoiYXNzZXJ0aW9uTWV0aG9kIiwicHJvb2ZWYWx1ZSI6Inp2UGtR aVVGZkpyZ25DUmh5UGtUU2tnckdYYm5MUjE1cEhINUhaVllOZE00VENBd1FIcUc3Zk1lTVBMdFlOUm5F Z29WMWFKZFI1RTYxZVd1NXNXUllndEEifV19XSwiZXZpZGVuY2UiOlt7ImlkIjoiaHR0cHM6Ly8xZWR0 ZWNoLmVkdS9jcmVkZW50aWFscy8zNzMyL2V2aWRlbmNlLzEiLCJ0eXBlIjpbIkV2aWRlbmNlIl0sIm5h cnJhdGl2ZSI6IiMgRmluYWwgUHJvamVjdCBSZXBvcnQgXG4gVGhpcyBwcm9qZWN0IHdhcyAuLi4iLCJu YW1lIjoiRmluYWwgUHJvamVjdCBSZXBvcnQiLCJkZXNjcmlwdGlvbiI6IlRoaXMgaXMgdGhlIGZpbmFs IHByb2plY3QgcmVwb3J0LiIsImdlbnJlIjoiUmVzZWFyY2giLCJhdWRpZW5jZSI6IkRlcGFydG1lbnQi fSx7ImlkIjoiaHR0cHM6Ly9naXRodWIuY29tL3NvbWVib2R5L3Byb2plY3QiLCJ0eXBlIjpbIkV2aWRl bmNlIl0sIm5hbWUiOiJGaW5hbCBQcm9qZWN0IENvZGUiLCJkZXNjcmlwdGlvbiI6IlRoaXMgaXMgdGhl IHNvdXJjZSBjb2RlIGZvciB0aGUgZmluYWwgcHJvamVjdCBhcHAuIiwiZ2VucmUiOiJSZXNlYXJjaCIs ImF1ZGllbmNlIjoiRGVwYXJ0bWVudCJ9XSwiaXNzdWVyIjp7ImlkIjoiaHR0cHM6Ly8xZWR0ZWNoLmVk dS9pc3N1ZXJzLzU2NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdLCJuYW1lIjoiMUVkVGVjaCBVbml2ZXJz aXR5IiwidXJsIjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdSIsInBob25lIjoiMS0yMjItMzMzLTQ0NDQiLCJk ZXNjcmlwdGlvbiI6IjFFZFRlY2ggVW5pdmVyc2l0eSBwcm92aWRlcyBvbmxpbmUgZGVncmVlIHByb2dy YW1zLiIsImVuZG9yc2VtZW50IjpbeyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3Jl ZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4 dC0zLjAuMy5qc29uIl0sImlkIjoiaHR0cDovLzFlZHRlY2guZWR1L2VuZG9yc2VtZW50Y3JlZGVudGlh bC8zNzM2IiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkVuZG9yc2VtZW50Q3JlZGVudGlh bCJdLCJuYW1lIjoiRUFBIGVuZG9yc2VtZW50IiwiaXNzdWVyIjp7ImlkIjoiaHR0cHM6Ly9hY2NyZWRp dGVyLmVkdS9pc3N1ZXJzLzU2NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdLCJuYW1lIjoiRXhhbXBsZSBB Y2NyZWRpdGluZyBBZ2VuY3kifSwidmFsaWRGcm9tIjoiMjAxMC0wMS0wMVQwMDowMDowMFoiLCJ2YWxp ZFVudGlsIjoiMjAyMC0wMS0wMVQwMDowMDowMFoiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6Imh0 dHBzOi8vMWVkdGVjaC5lZHUvaXNzdWVycy81NjUwNDkiLCJ0eXBlIjpbIkVuZG9yc2VtZW50U3ViamVj dCJdLCJlbmRvcnNlbWVudENvbW1lbnQiOiIxRWRUZWNoIFVuaXZlcnNpdHkgaXMgaW4gZ29vZCBzdGFu ZGluZyJ9LCJjcmVkZW50aWFsU2NoZW1hIjpbeyJpZCI6Imh0dHBzOi8vcHVybC5pbXNnbG9iYWwub3Jn L3NwZWMvb2IvdjNwMC9zY2hlbWEvanNvbi9vYl92M3AwX2VuZG9yc2VtZW50Y3JlZGVudGlhbF9zY2hl bWEuanNvbiIsInR5cGUiOiIxRWRUZWNoSnNvblNjaGVtYVZhbGlkYXRvcjIwMTkifSx7ImlkIjoiaHR0 cHM6Ly9hY2NyZWRpdGVyLmVkdS9zY2hlbWEvZW5kb3JzZW1lbnRjcmVkZW50aWFsLmpzb24iLCJ0eXBl IjoiMUVkVGVjaEpzb25TY2hlbWFWYWxpZGF0b3IyMDE5In1dLCJjcmVkZW50aWFsU3RhdHVzIjp7Imlk IjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdS9jcmVkZW50aWFscy8zNzMyL3Jldm9jYXRpb25zIiwidHlwZSI6 IjFFZFRlY2hSZXZvY2F0aW9uTGlzdCJ9LCJyZWZyZXNoU2VydmljZSI6eyJpZCI6Imh0dHA6Ly8xZWR0 ZWNoLmVkdS9jcmVkZW50aWFscy8zNzMyIiwidHlwZSI6IjFFZFRlY2hDcmVkZW50aWFsUmVmcmVzaCJ9 LCJwcm9vZiI6W3sidHlwZSI6IkRhdGFJbnRlZ3JpdHlQcm9vZiIsImNyeXB0b3N1aXRlIjoiZWRkc2Et cmRmLTIwMjIiLCJjcmVhdGVkIjoiMjAyMi0wNS0yNlQxODoxNzowOFoiLCJ2ZXJpZmljYXRpb25NZXRo b2QiOiJodHRwczovL2FjY3JlZGl0ZXIuZWR1L2lzc3VlcnMvNTY1MDQ5I3p2UGtRaVVGZkpyZ25DUmh5 UGtUU2tnckdYYm5MUjE1cEhINUhaVllOZE00VENBd1FIcUc3Zk1lTVBMdFlOUm5FZ29WMWFKZFI1RTYx ZVd1NXNXUllndEEiLCJwcm9vZlB1cnBvc2UiOiJhc3NlcnRpb25NZXRob2QiLCJwcm9vZlZhbHVlIjoi enZQa1FpVUZmSnJnbkNSaHlQa1RTa2dyR1hibkxSMTVwSEg1SFpWWU5kTTRUQ0F3UUhxRzdmTWVNUEx0 WU5SbkVnb1YxYUpkUjVFNjFlV3U1c1dSWWd0QSJ9XX1dLCJpbWFnZSI6eyJpZCI6Imh0dHBzOi8vMWVk dGVjaC5lZHUvbG9nby5wbmciLCJ0eXBlIjoiSW1hZ2UiLCJjYXB0aW9uIjoiMUVkVGVjaCBVbml2ZXJz aXR5IGxvZ28ifSwiZW1haWwiOiJyZWdpc3RyYXJAMWVkdGVjaC5lZHUiLCJhZGRyZXNzIjp7InR5cGUi OlsiQWRkcmVzcyJdLCJhZGRyZXNzQ291bnRyeSI6IlVTQSIsImFkZHJlc3NDb3VudHJ5Q29kZSI6IlVT IiwiYWRkcmVzc1JlZ2lvbiI6IlRYIiwiYWRkcmVzc0xvY2FsaXR5IjoiQXVzdGluIiwic3RyZWV0QWRk cmVzcyI6IjEyMyBGaXJzdCBTdCIsInBvc3RPZmZpY2VCb3hOdW1iZXIiOiIxIiwicG9zdGFsQ29kZSI6 IjEyMzQ1IiwiZ2VvIjp7InR5cGUiOiJHZW9Db29yZGluYXRlcyIsImxhdGl0dWRlIjoxLCJsb25naXR1 ZGUiOjF9fSwib3RoZXJJZGVudGlmaWVyIjpbeyJ0eXBlIjoiSWRlbnRpZmllckVudHJ5IiwiaWRlbnRp ZmllciI6IjEyMzQ1IiwiaWRlbnRpZmllclR5cGUiOiJzb3VyY2VkSWQifSx7InR5cGUiOiJJZGVudGlm aWVyRW50cnkiLCJpZGVudGlmaWVyIjoiNjc4OTAiLCJpZGVudGlmaWVyVHlwZSI6Im5hdGlvbmFsSWRl bnRpdHlOdW1iZXIifV0sIm9mZmljaWFsIjoiSG9yYWNlIE1hbm4iLCJwYXJlbnRPcmciOnsiaWQiOiJk aWQ6ZXhhbXBsZToxMjM0NTY3ODkiLCJ0eXBlIjpbIlByb2ZpbGUiXSwibmFtZSI6IlVuaXZlcnNhbCBV bml2ZXJzaXRpZXMifX0sInZhbGlkRnJvbSI6IjIwMTAtMDEtMDFUMDA6MDA6MDBaIiwidmFsaWRVbnRp bCI6IjIwMzAtMDEtMDFUMDA6MDA6MDBaIiwiY3JlZGVudGlhbFNjaGVtYSI6W3siaWQiOiJodHRwczov L3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvc2NoZW1hL2pzb24vb2JfdjNwMF9hY2hpZXZl bWVudGNyZWRlbnRpYWxfc2NoZW1hLmpzb24iLCJ0eXBlIjoiMUVkVGVjaEpzb25TY2hlbWFWYWxpZGF0 b3IyMDE5In1dLCJjcmVkZW50aWFsU3RhdHVzIjp7ImlkIjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdS9jcmVk ZW50aWFscy8zNzMyL3Jldm9jYXRpb25zIiwidHlwZSI6IjFFZFRlY2hSZXZvY2F0aW9uTGlzdCJ9LCJy ZWZyZXNoU2VydmljZSI6eyJpZCI6Imh0dHA6Ly8xZWR0ZWNoLmVkdS9jcmVkZW50aWFscy8zNzMyIiwi dHlwZSI6IjFFZFRlY2hDcmVkZW50aWFsUmVmcmVzaCJ9LCJpc3MiOiJodHRwczovLzFlZHRlY2guZWR1 L2lzc3VlcnMvNTY1MDQ5IiwianRpIjoiaHR0cDovLzFlZHRlY2guZWR1L2NyZWRlbnRpYWxzLzM3MzIi LCJzdWIiOiJkaWQ6ZXhhbXBsZTplYmZlYjFmNzEyZWJjNmYxYzI3NmUxMmVjMjEifQ.JJnOO6NyOYJcX TIqiyRSxDuce-Miu_ll96ApqUPVC7jizvmaGV6pvY0oymyBLMwdqazIti86I25SCPRTXgVy-Fmw4CY9G Zb4hM-r15FT-QSYAF9yPi_bcn_EsAarr5rdaNCilggbunm2p9Y8csUlxyf1RWYN6K0wp7w_wCSrTcEEv z3XgSojuypDZDhPOSJdMVw7uhbVKLUuA2NzZvm10HRTl52XwjA2peOojluB1p2Kxs3vhIJHtoILURPXd 4FO8mJxBvO00m5p13sRokz19-odFbafj8JdqRL_s4J-gHRCDttmegHWVeRevGvNxg-shxwkTELXptUtk dRBWkZm8Q
{
"@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"
],
"id": "http://1edtech.edu/endorsementcredential/3732",
"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"],
"endorsementComment": "1EdTech University is in good standing"
},
"credentialSchema": [
{
"id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
},
{
"id": "https://state.gov/schema/endorsementcredential.json",
"type": "1EdTechJsonSchemaValidator2019"
}
],
"credentialStatus": {
"id": "https://state.gov/credentials/3732/revocations",
"type": "1EdTechRevocationList"
},
"refreshService": {
"id": "http://state.gov/credentials/3732",
"type": "1EdTechCredentialRefresh"
}
}
{ "@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" ], "id": "http://1edtech.edu/endorsementcredential/3732", "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" ], "endorsementComment": "1EdTech University is in good standing" }, "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" }, { "id": "https://state.gov/schema/endorsementcredential.json", "type": "1EdTechJsonSchemaValidator2019" } ], "credentialStatus": { "id": "https://state.gov/credentials/3732/revocations", "type": "1EdTechRevocationList" }, "refreshService": { "id": "http://state.gov/credentials/3732", "type": "1EdTechCredentialRefresh" }, "proof": [ { "type": "DataIntegrityProof", "created": "2024-12-23T10:54:14Z", "verificationMethod": "https://state.gov/issuers/565049#z6MktrHkwB8tZdQFyPvHStJFC9HQs2LUxp4ERRqzXL3dxqKt", "cryptosuite": "eddsa-rdfc-2022", "proofPurpose": "assertionMethod", "proofValue": "z24cM2LgYURaotFbHT3ERAgQRcrzjSfj6nYoJQ7CvRZU2JZm9Nq6iUHJsyhsQtqMkGhKM7hNCvdxaLrmmkxMJLp3j" } ] }
---------------- JWT header --------------- { "alg": "RS256", "typ": "JWT", "jwk": { "e": "AQAB", "kty": "RSA", "n": "jBeDokMQHvvnja1au5op_W0A2-oJpZidGVvdjndQhTXlz4FZjPet6W_x7m4DiFTKLpTChC yGLq2w1NZQA_-8sZEgcmrsByFZ4OXJ230h4-O_4dgjx9TcqpPGiy2XSSqbkI1feN9UIWbpMUFWzeZwCD gSpUhDZjIrZAg-LLGvPmfyeiw2_cToMRFwtxnurODQ-TrMxzPxSjeyoOZn9CdftHEQeetP1G9hupdHYm viHJIhF6RVdQL0O6fDzD1_HoQ_kOUt6OsoFlcZptQuQPYXmoFtDFFf08avmFHz4gjainrKVtJiw9eVAU CVOhd7o5WJdIhlolYs0kQ73Dw9IERtJw" } } --------------- 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" ], "id": "http://1edtech.edu/endorsementcredential/3732", "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" ], "endorsementComment": "1EdTech University is in good standing" }, "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorse mentcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" }, { "id": "https://state.gov/schema/endorsementcredential.json", "type": "1EdTechJsonSchemaValidator2019" } ], "credentialStatus": { "id": "https://state.gov/credentials/3732/revocations", "type": "1EdTechRevocationList" }, "refreshService": { "id": "http://state.gov/credentials/3732", "type": "1EdTechCredentialRefresh" }, "iss": "https://state.gov/issuers/565049", "jti": "http://1edtech.edu/endorsementcredential/3732", "sub": "https://1edtech.edu/issuers/565049" } --------------- JWT --------------- eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4i OiJqQmVEb2tNUUh2dm5qYTFhdTVvcF9XMEEyLW9KcFppZEdWdmRqbmRRaFRYbHo0RlpqUGV0NldfeDdt NERpRlRLTHBUQ2hDeUdMcTJ3MU5aUUFfLThzWkVnY21yc0J5Rlo0T1hKMjMwaDQtT180ZGdqeDlUY3Fw UEdpeTJYU1NxYmtJMWZlTjlVSVdicE1VRld6ZVp3Q0RnU3BVaERaaklyWkFnLUxMR3ZQbWZ5ZWl3Ml9j VG9NUkZ3dHhudXJPRFEtVHJNeHpQeFNqZXlvT1puOUNkZnRIRVFlZXRQMUc5aHVwZEhZbXZpSEpJaEY2 UlZkUUwwTzZmRHpEMV9Ib1Ffa09VdDZPc29GbGNacHRRdVFQWVhtb0Z0REZGZjA4YXZtRkh6NGdqYWlu cktWdEppdzllVkFVQ1ZPaGQ3bzVXSmRJaGxvbFlzMGtRNzNEdzlJRVJ0SncifX0.eyJAY29udGV4dCI6 WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv YmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIiwiaHR0cHM6Ly9wdXJsLmltc2ds b2JhbC5vcmcvc3BlYy9vYi92M3AwL2V4dGVuc2lvbnMuanNvbiJdLCJpZCI6Imh0dHA6Ly8xZWR0ZWNo LmVkdS9lbmRvcnNlbWVudGNyZWRlbnRpYWwvMzczMiIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRp YWwiLCJFbmRvcnNlbWVudENyZWRlbnRpYWwiXSwibmFtZSI6IlNERSBlbmRvcnNlbWVudCIsImlzc3Vl ciI6eyJpZCI6Imh0dHBzOi8vc3RhdGUuZ292L2lzc3VlcnMvNTY1MDQ5IiwidHlwZSI6WyJQcm9maWxl Il0sIm5hbWUiOiJTdGF0ZSBEZXBhcnRtZW50IG9mIEVkdWNhdGlvbiJ9LCJ2YWxpZEZyb20iOiIyMDEw LTAxLTAxVDAwOjAwOjAwWiIsInZhbGlkVW50aWwiOiIyMDMwLTAxLTAxVDAwOjAwOjAwWiIsImNyZWRl bnRpYWxTdWJqZWN0Ijp7ImlkIjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdS9pc3N1ZXJzLzU2NTA0OSIsInR5 cGUiOlsiRW5kb3JzZW1lbnRTdWJqZWN0Il0sImVuZG9yc2VtZW50Q29tbWVudCI6IjFFZFRlY2ggVW5p dmVyc2l0eSBpcyBpbiBnb29kIHN0YW5kaW5nIn0sImNyZWRlbnRpYWxTY2hlbWEiOlt7ImlkIjoiaHR0 cHM6Ly9wdXJsLmltc2dsb2JhbC5vcmcvc3BlYy9vYi92M3AwL3NjaGVtYS9qc29uL29iX3YzcDBfZW5k b3JzZW1lbnRjcmVkZW50aWFsX3NjaGVtYS5qc29uIiwidHlwZSI6IjFFZFRlY2hKc29uU2NoZW1hVmFs aWRhdG9yMjAxOSJ9LHsiaWQiOiJodHRwczovL3N0YXRlLmdvdi9zY2hlbWEvZW5kb3JzZW1lbnRjcmVk ZW50aWFsLmpzb24iLCJ0eXBlIjoiMUVkVGVjaEpzb25TY2hlbWFWYWxpZGF0b3IyMDE5In1dLCJjcmVk ZW50aWFsU3RhdHVzIjp7ImlkIjoiaHR0cHM6Ly9zdGF0ZS5nb3YvY3JlZGVudGlhbHMvMzczMi9yZXZv Y2F0aW9ucyIsInR5cGUiOiIxRWRUZWNoUmV2b2NhdGlvbkxpc3QifSwicmVmcmVzaFNlcnZpY2UiOnsi aWQiOiJodHRwOi8vc3RhdGUuZ292L2NyZWRlbnRpYWxzLzM3MzIiLCJ0eXBlIjoiMUVkVGVjaENyZWRl bnRpYWxSZWZyZXNoIn0sImlzcyI6Imh0dHBzOi8vc3RhdGUuZ292L2lzc3VlcnMvNTY1MDQ5IiwianRp IjoiaHR0cDovLzFlZHRlY2guZWR1L2VuZG9yc2VtZW50Y3JlZGVudGlhbC8zNzMyIiwic3ViIjoiaHR0 cHM6Ly8xZWR0ZWNoLmVkdS9pc3N1ZXJzLzU2NTA0OSJ9.WCyojC3D-gk0GwJROmeC5qymlFefumY4drT ISGe53I956QO9rACXQN3I3NN21GD9mgJZpIqRMGBtmgfnNbg3ZAjvGhxy-_6m1yaHzPLgwJVaz5eH2Wo 9sqVCkDm-5Rs18dm6smNHDW_47nHIx_WqHqCbJHvCWYlpIXecHwrVYrNj6BxtA_S42tFuCL7R2MarAtu vd9XnyzG0zQ2KkXKWc98kqKmuepo8jJkrxG4Bqct5H6XbcPqREt3paWJmj76JeLPMBIDIBUS_z66vHER IuZ57We7VkBeCXiBsSj5AYzdGj4NNLGVAa1UrJaUSzkbqlAQ2Q1SU2zXYdPkIO_LepA
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
],
"id": "http://example.edu/credentials/3732",
"type": ["VerifiableCredential", "OpenBadgeCredential"],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": ["Profile"],
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"name": "Example University Degree",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": ["AchievementSubject"],
"achievement": {
"id": "https://1edtech.edu/achievements/1",
"type": ["Achievement"],
"criteria": {
"narrative": "Cite strong and thorough textual evidence to support analysis of what the text says explicitly as well as inferences drawn from the text, including determining where the text leaves matters uncertain"
},
"description": "Analyze a sample text",
"name": "Text analysis",
"alignment": [{
"type": ["Alignment"],
"targetCode": "74f5bb7d-d7cc-11e8-824f-0242ac160002",
"targetFramework": "Alabama Course of Study: English Language Arts",
"targetName": "Cite strong and thorough textual evidence to support analysis of what the text says explicitly as well as inferences drawn from the text, including determining where the text leaves matters uncertain",
"targetType": "CFItem",
"targetUrl": "https://caseregistry.imsglobal.org/uri/74f5bb7d-d7cc-11e8-824f-0242ac160002"
}]
}
}
}
{ "@context": [ "https://www.w3.org/ns/credentials/v2", "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json" ], "id": "http://example.edu/credentials/3732", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "issuer": { "id": "https://example.edu/issuers/565049", "type": [ "Profile" ], "name": "Example University" }, "validFrom": "2010-01-01T00:00:00Z", "name": "Example University Degree", "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", "type": [ "AchievementSubject" ], "achievement": { "id": "https://1edtech.edu/achievements/1", "type": [ "Achievement" ], "criteria": { "narrative": "Cite strong and thorough textual evidence to support analysis of what the text says explicitly as well as inferences drawn from the text, including determining where the text leaves matters uncertain" }, "description": "Analyze a sample text", "name": "Text analysis", "alignment": [ { "type": [ "Alignment" ], "targetCode": "74f5bb7d-d7cc-11e8-824f-0242ac160002", "targetFramework": "Alabama Course of Study: English Language Arts", "targetName": "Cite strong and thorough textual evidence to support analysis of what the text says explicitly as well as inferences drawn from the text, including determining where the text leaves matters uncertain", "targetType": "CFItem", "targetUrl": "https://caseregistry.imsglobal.org/uri/74f5bb7d-d7cc-11e8-824f-0242ac160002" } ] } }, "proof": [ { "type": "DataIntegrityProof", "created": "2024-12-23T10:54:14Z", "verificationMethod": "https://example.edu/issuers/565049#z6MkevCo7JVbQxBW1YgPA4JFGMPaxHZZqSNEyoSF9WDoQE7e", "cryptosuite": "eddsa-rdfc-2022", "proofPurpose": "assertionMethod", "proofValue": "zXX3ZACTFPAKaYSM5df4iDTP9y4ZKoBAFXF6xmEj5LjPzW2YezeuBLw8GVd38Q9VmKHkHPPGHTW79sY4wh424sjN" } ] }
---------------- JWT header --------------- { "alg": "RS256", "typ": "JWT", "jwk": { "e": "AQAB", "kty": "RSA", "n": "rNczEGou3w9tbNXUtzFeiZDcKJrCHJ9jEKnjlXaJ5xH5eGi2qcP8M6XqKUNRXB6VD-A2Sq GehdR7liZG_bvfPlMxlcWgLW9sY0N6BNxrk9U85xyK1jJgAkGqyhnzElunE3Dq6Nurr09LDwE08aF5wg 6pViX5KfdCSC7wtFEx734WbqaQplvIcErgslRPa2KuzG5kLmWTUj3tPfg4YmbUZ6uoOsGKRS46c9zkv5 mhZ0rUzXXTlJc9outVgfajlWJDt8oiR4rRBJV4-RLqCd9dsO3My5ma-cDGntUff7kKfhN-cwSev6y3aM Ume7u4VhE00dmcEGX9RYorUuj2LOPhpw" } } --------------- 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" ], "id": "http://example.edu/credentials/3732", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "issuer": { "id": "https://example.edu/issuers/565049", "type": [ "Profile" ], "name": "Example University" }, "validFrom": "2010-01-01T00:00:00Z", "name": "Example University Degree", "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", "type": [ "AchievementSubject" ], "achievement": { "id": "https://1edtech.edu/achievements/1", "type": [ "Achievement" ], "criteria": { "narrative": "Cite strong and thorough textual evidence to support analy sis of what the text says explicitly as well as inferences drawn from the text, including determining where the text leaves matters uncertain" }, "description": "Analyze a sample text", "name": "Text analysis", "alignment": [ { "type": [ "Alignment" ], "targetCode": "74f5bb7d-d7cc-11e8-824f-0242ac160002", "targetFramework": "Alabama Course of Study: English Language Arts", "targetName": "Cite strong and thorough textual evidence to support an alysis of what the text says explicitly as well as inferences drawn from the tex t, including determining where the text leaves matters uncertain", "targetType": "CFItem", "targetUrl": "https://caseregistry.imsglobal.org/uri/74f5bb7d-d7cc-11e 8-824f-0242ac160002" } ] } }, "iss": "https://example.edu/issuers/565049", "jti": "http://example.edu/credentials/3732", "sub": "did:example:ebfeb1f712ebc6f1c276e12ec21" } --------------- JWT --------------- eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4i OiJyTmN6RUdvdTN3OXRiTlhVdHpGZWlaRGNLSnJDSEo5akVLbmpsWGFKNXhINWVHaTJxY1A4TTZYcUtV TlJYQjZWRC1BMlNxR2VoZFI3bGlaR19idmZQbE14bGNXZ0xXOXNZME42Qk54cms5VTg1eHlLMWpKZ0Fr R3F5aG56RWx1bkUzRHE2TnVycjA5TER3RTA4YUY1d2c2cFZpWDVLZmRDU0M3d3RGRXg3MzRXYnFhUXBs dkljRXJnc2xSUGEyS3V6RzVrTG1XVFVqM3RQZmc0WW1iVVo2dW9Pc0dLUlM0NmM5emt2NW1oWjByVXpY WFRsSmM5b3V0VmdmYWpsV0pEdDhvaVI0clJCSlY0LVJMcUNkOWRzTzNNeTVtYS1jREdudFVmZjdrS2Zo Ti1jd1NldjZ5M2FNVW1lN3U0VmhFMDBkbWNFR1g5UllvclV1ajJMT1BocHcifX0.eyJAY29udGV4dCI6 WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv YmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIl0sImlkIjoiaHR0cDovL2V4YW1w bGUuZWR1L2NyZWRlbnRpYWxzLzM3MzIiLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiT3Bl bkJhZGdlQ3JlZGVudGlhbCJdLCJpc3N1ZXIiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2lzc3Vl cnMvNTY1MDQ5IiwidHlwZSI6WyJQcm9maWxlIl0sIm5hbWUiOiJFeGFtcGxlIFVuaXZlcnNpdHkifSwi dmFsaWRGcm9tIjoiMjAxMC0wMS0wMVQwMDowMDowMFoiLCJuYW1lIjoiRXhhbXBsZSBVbml2ZXJzaXR5 IERlZ3JlZSIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmV4YW1wbGU6ZWJmZWIxZjcxMmVi YzZmMWMyNzZlMTJlYzIxIiwidHlwZSI6WyJBY2hpZXZlbWVudFN1YmplY3QiXSwiYWNoaWV2ZW1lbnQi OnsiaWQiOiJodHRwczovLzFlZHRlY2guZWR1L2FjaGlldmVtZW50cy8xIiwidHlwZSI6WyJBY2hpZXZl bWVudCJdLCJjcml0ZXJpYSI6eyJuYXJyYXRpdmUiOiJDaXRlIHN0cm9uZyBhbmQgdGhvcm91Z2ggdGV4 dHVhbCBldmlkZW5jZSB0byBzdXBwb3J0IGFuYWx5c2lzIG9mIHdoYXQgdGhlIHRleHQgc2F5cyBleHBs aWNpdGx5IGFzIHdlbGwgYXMgaW5mZXJlbmNlcyBkcmF3biBmcm9tIHRoZSB0ZXh0LCBpbmNsdWRpbmcg ZGV0ZXJtaW5pbmcgd2hlcmUgdGhlIHRleHQgbGVhdmVzIG1hdHRlcnMgdW5jZXJ0YWluIn0sImRlc2Ny aXB0aW9uIjoiQW5hbHl6ZSBhIHNhbXBsZSB0ZXh0IiwibmFtZSI6IlRleHQgYW5hbHlzaXMiLCJhbGln bm1lbnQiOlt7InR5cGUiOlsiQWxpZ25tZW50Il0sInRhcmdldENvZGUiOiI3NGY1YmI3ZC1kN2NjLTEx ZTgtODI0Zi0wMjQyYWMxNjAwMDIiLCJ0YXJnZXRGcmFtZXdvcmsiOiJBbGFiYW1hIENvdXJzZSBvZiBT dHVkeTogRW5nbGlzaCBMYW5ndWFnZSBBcnRzIiwidGFyZ2V0TmFtZSI6IkNpdGUgc3Ryb25nIGFuZCB0 aG9yb3VnaCB0ZXh0dWFsIGV2aWRlbmNlIHRvIHN1cHBvcnQgYW5hbHlzaXMgb2Ygd2hhdCB0aGUgdGV4 dCBzYXlzIGV4cGxpY2l0bHkgYXMgd2VsbCBhcyBpbmZlcmVuY2VzIGRyYXduIGZyb20gdGhlIHRleHQs IGluY2x1ZGluZyBkZXRlcm1pbmluZyB3aGVyZSB0aGUgdGV4dCBsZWF2ZXMgbWF0dGVycyB1bmNlcnRh aW4iLCJ0YXJnZXRUeXBlIjoiQ0ZJdGVtIiwidGFyZ2V0VXJsIjoiaHR0cHM6Ly9jYXNlcmVnaXN0cnku aW1zZ2xvYmFsLm9yZy91cmkvNzRmNWJiN2QtZDdjYy0xMWU4LTgyNGYtMDI0MmFjMTYwMDAyIn1dfX0s ImlzcyI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvaXNzdWVycy81NjUwNDkiLCJqdGkiOiJodHRwOi8vZXhh bXBsZS5lZHUvY3JlZGVudGlhbHMvMzczMiIsInN1YiI6ImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2 ZjFjMjc2ZTEyZWMyMSJ9.Jkh_XXhPqcDzgUgMq3KTykxjAztqvwtypTj6cj99TElXCwBBA_8KMGE84sE YdDQUYcv7zlJdb2OVqkpeWGltydYq7zRsFRVxjRn7cnCxVR8S5_uFTXp7QEps9HyHZOEwC0k3WRBlfIf RhOyuS1E6dtreTsxZbk-hIFHC9RDhcSP5y8pRpJcDt8RGrSv1-7PBlnryRWq25E1sUwYFSX30zASZlAV l0rBa2OhcLsSSo8IzdF2G7yGL8UnZF68sGdu9gqLieOwXniBNykI7Q2q2TGH0SbrqoMFTHMUITrOVyqn 93rsrLR66ZlNE4WVYiZVpaRt-UuuJynmlcX_V50y5yg
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
],
"id": "http://example.edu/credentials/3732",
"type": ["VerifiableCredential", "OpenBadgeCredential"],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": ["Profile"],
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"name": "Example University Degree",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": ["AchievementSubject"],
"achievement": {
"id": "https://1edtech.edu/achievements/1",
"type": ["Achievement"],
"criteria": {
"narrative": "Cite strong and thorough textual evidence to support analysis of what the text says explicitly as well as inferences drawn from the text, including determining where the text leaves matters uncertain"
},
"description": "Analyze a sample text",
"name": "Text analysis",
"alignment": [{
"type": ["Alignment"],
"targetCode": "ce-cf4dee18-7cea-443a-b920-158a0762c6bf",
"targetFramework": "Edmonds College Course Catalog",
"targetName": "Requirements Analysis",
"targetType": "ceterms:Credential",
"targetUrl": "https://credentialfinder.org/credential/20229/Requirements_Analysis"
}]
}
}
}
{ "@context": [ "https://www.w3.org/ns/credentials/v2", "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json" ], "id": "http://example.edu/credentials/3732", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "issuer": { "id": "https://example.edu/issuers/565049", "type": [ "Profile" ], "name": "Example University" }, "validFrom": "2010-01-01T00:00:00Z", "name": "Example University Degree", "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", "type": [ "AchievementSubject" ], "achievement": { "id": "https://1edtech.edu/achievements/1", "type": [ "Achievement" ], "criteria": { "narrative": "Cite strong and thorough textual evidence to support analysis of what the text says explicitly as well as inferences drawn from the text, including determining where the text leaves matters uncertain" }, "description": "Analyze a sample text", "name": "Text analysis", "alignment": [ { "type": [ "Alignment" ], "targetCode": "ce-cf4dee18-7cea-443a-b920-158a0762c6bf", "targetFramework": "Edmonds College Course Catalog", "targetName": "Requirements Analysis", "targetType": "ceterms:Credential", "targetUrl": "https://credentialfinder.org/credential/20229/Requirements_Analysis" } ] } }, "proof": [ { "type": "DataIntegrityProof", "created": "2024-12-23T10:54:14Z", "verificationMethod": "https://example.edu/issuers/565049#z6MkevCo7JVbQxBW1YgPA4JFGMPaxHZZqSNEyoSF9WDoQE7e", "cryptosuite": "eddsa-rdfc-2022", "proofPurpose": "assertionMethod", "proofValue": "z3TKMNt9i4CSH65ZZqtLEfKQ6T2rKJuX3Na7nAPCuP8wPZFmTsWycqS2bJGSdXEf12eWm6U1NGDcJCGARYnSLsbkd" } ] }
---------------- JWT header --------------- { "alg": "RS256", "typ": "JWT", "jwk": { "e": "AQAB", "kty": "RSA", "n": "rNczEGou3w9tbNXUtzFeiZDcKJrCHJ9jEKnjlXaJ5xH5eGi2qcP8M6XqKUNRXB6VD-A2Sq GehdR7liZG_bvfPlMxlcWgLW9sY0N6BNxrk9U85xyK1jJgAkGqyhnzElunE3Dq6Nurr09LDwE08aF5wg 6pViX5KfdCSC7wtFEx734WbqaQplvIcErgslRPa2KuzG5kLmWTUj3tPfg4YmbUZ6uoOsGKRS46c9zkv5 mhZ0rUzXXTlJc9outVgfajlWJDt8oiR4rRBJV4-RLqCd9dsO3My5ma-cDGntUff7kKfhN-cwSev6y3aM Ume7u4VhE00dmcEGX9RYorUuj2LOPhpw" } } --------------- 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" ], "id": "http://example.edu/credentials/3732", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "issuer": { "id": "https://example.edu/issuers/565049", "type": [ "Profile" ], "name": "Example University" }, "validFrom": "2010-01-01T00:00:00Z", "name": "Example University Degree", "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", "type": [ "AchievementSubject" ], "achievement": { "id": "https://1edtech.edu/achievements/1", "type": [ "Achievement" ], "criteria": { "narrative": "Cite strong and thorough textual evidence to support analy sis of what the text says explicitly as well as inferences drawn from the text, including determining where the text leaves matters uncertain" }, "description": "Analyze a sample text", "name": "Text analysis", "alignment": [ { "type": [ "Alignment" ], "targetCode": "ce-cf4dee18-7cea-443a-b920-158a0762c6bf", "targetFramework": "Edmonds College Course Catalog", "targetName": "Requirements Analysis", "targetType": "ceterms:Credential", "targetUrl": "https://credentialfinder.org/credential/20229/Requiremen ts_Analysis" } ] } }, "iss": "https://example.edu/issuers/565049", "jti": "http://example.edu/credentials/3732", "sub": "did:example:ebfeb1f712ebc6f1c276e12ec21" } --------------- JWT --------------- eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4i OiJyTmN6RUdvdTN3OXRiTlhVdHpGZWlaRGNLSnJDSEo5akVLbmpsWGFKNXhINWVHaTJxY1A4TTZYcUtV TlJYQjZWRC1BMlNxR2VoZFI3bGlaR19idmZQbE14bGNXZ0xXOXNZME42Qk54cms5VTg1eHlLMWpKZ0Fr R3F5aG56RWx1bkUzRHE2TnVycjA5TER3RTA4YUY1d2c2cFZpWDVLZmRDU0M3d3RGRXg3MzRXYnFhUXBs dkljRXJnc2xSUGEyS3V6RzVrTG1XVFVqM3RQZmc0WW1iVVo2dW9Pc0dLUlM0NmM5emt2NW1oWjByVXpY WFRsSmM5b3V0VmdmYWpsV0pEdDhvaVI0clJCSlY0LVJMcUNkOWRzTzNNeTVtYS1jREdudFVmZjdrS2Zo Ti1jd1NldjZ5M2FNVW1lN3U0VmhFMDBkbWNFR1g5UllvclV1ajJMT1BocHcifX0.eyJAY29udGV4dCI6 WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv YmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIl0sImlkIjoiaHR0cDovL2V4YW1w bGUuZWR1L2NyZWRlbnRpYWxzLzM3MzIiLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiT3Bl bkJhZGdlQ3JlZGVudGlhbCJdLCJpc3N1ZXIiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2lzc3Vl cnMvNTY1MDQ5IiwidHlwZSI6WyJQcm9maWxlIl0sIm5hbWUiOiJFeGFtcGxlIFVuaXZlcnNpdHkifSwi dmFsaWRGcm9tIjoiMjAxMC0wMS0wMVQwMDowMDowMFoiLCJuYW1lIjoiRXhhbXBsZSBVbml2ZXJzaXR5 IERlZ3JlZSIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmV4YW1wbGU6ZWJmZWIxZjcxMmVi YzZmMWMyNzZlMTJlYzIxIiwidHlwZSI6WyJBY2hpZXZlbWVudFN1YmplY3QiXSwiYWNoaWV2ZW1lbnQi OnsiaWQiOiJodHRwczovLzFlZHRlY2guZWR1L2FjaGlldmVtZW50cy8xIiwidHlwZSI6WyJBY2hpZXZl bWVudCJdLCJjcml0ZXJpYSI6eyJuYXJyYXRpdmUiOiJDaXRlIHN0cm9uZyBhbmQgdGhvcm91Z2ggdGV4 dHVhbCBldmlkZW5jZSB0byBzdXBwb3J0IGFuYWx5c2lzIG9mIHdoYXQgdGhlIHRleHQgc2F5cyBleHBs aWNpdGx5IGFzIHdlbGwgYXMgaW5mZXJlbmNlcyBkcmF3biBmcm9tIHRoZSB0ZXh0LCBpbmNsdWRpbmcg ZGV0ZXJtaW5pbmcgd2hlcmUgdGhlIHRleHQgbGVhdmVzIG1hdHRlcnMgdW5jZXJ0YWluIn0sImRlc2Ny aXB0aW9uIjoiQW5hbHl6ZSBhIHNhbXBsZSB0ZXh0IiwibmFtZSI6IlRleHQgYW5hbHlzaXMiLCJhbGln bm1lbnQiOlt7InR5cGUiOlsiQWxpZ25tZW50Il0sInRhcmdldENvZGUiOiJjZS1jZjRkZWUxOC03Y2Vh LTQ0M2EtYjkyMC0xNThhMDc2MmM2YmYiLCJ0YXJnZXRGcmFtZXdvcmsiOiJFZG1vbmRzIENvbGxlZ2Ug Q291cnNlIENhdGFsb2ciLCJ0YXJnZXROYW1lIjoiUmVxdWlyZW1lbnRzIEFuYWx5c2lzIiwidGFyZ2V0 VHlwZSI6ImNldGVybXM6Q3JlZGVudGlhbCIsInRhcmdldFVybCI6Imh0dHBzOi8vY3JlZGVudGlhbGZp bmRlci5vcmcvY3JlZGVudGlhbC8yMDIyOS9SZXF1aXJlbWVudHNfQW5hbHlzaXMifV19fSwiaXNzIjoi aHR0cHM6Ly9leGFtcGxlLmVkdS9pc3N1ZXJzLzU2NTA0OSIsImp0aSI6Imh0dHA6Ly9leGFtcGxlLmVk dS9jcmVkZW50aWFscy8zNzMyIiwic3ViIjoiZGlkOmV4YW1wbGU6ZWJmZWIxZjcxMmViYzZmMWMyNzZl MTJlYzIxIn0.bM6Ye2pKpHSEvMw2amdfj5uJl1ZNpuNXpTxlrmWBSKth6AMOSyACRvOVIojBoAYSD07l ziWrdJF0LQ3fhq0_7T56srtSjrHkvxjUNm0ysX3uKtiwCtKc5cRG6nmrGkCSZ3WhgsOF-p0vRZ5QSku- b2z_M2YSCr9nA8L6qu9Rc8O1jzef_j4ndYZkUQ31LHFQDZIRWVkONwsCq9QfI_BkAEBBwsbmPiMdGKbl YXiOdriD0zHq7ed9HoOyZBUkgrGuMQWqJ_FI_g2aJo6KZ28CrThn3TsZREfmQ-4BuZjio4aSTJ0Ho3fZ I9oQYmax821KA_B8K20paPD3JWHekYj8nQ
{
"@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"
],
"id": "http://1edtech.edu/credentials/3732",
"type": [
"VerifiableCredential",
"OpenBadgeCredential"
],
"name": "Robot Programming Skill Credential",
"description": "A badge recognizing the development of skills in robot implementation, specifically the software",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": ["AchievementSubject"],
"achievement": {
"id": "https://example.com/achievements/robotics/robot-programming",
"type": ["Achievement"],
"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"
}],
"achievementType": "Competency",
"creator": {
"id": "https://example.com/issuers/123767",
"type": ["Profile"],
"name": "Example Industry Group",
"url": "https://example.com",
"description": "Example Industry Group is a consortium of luminaries who publish skills data for common usage.",
"email": "info@exammple.com"
},
"criteria": {
"narrative": "Learners must present source code showing the ability for a robot to accept manual or sensor input and perform conditional actions in response."
},
"description": "This achievement represents developing capability to develop software for robotic applications.",
"image": {
"id": "https://example.com/achievements/robotics/robot-programming/image",
"type": "Image",
"caption": "A robot filled with ones and zeroes representing its programming"
},
"name": "Robot Programming"
}
},
"evidence": [{
"id": "https://github.com/somebody/project",
"type": ["Evidence"],
"name": "Final Project Code",
"description": "The source code for the 'Beeper 1.0' robot project. It responds by saying 'beep' when the 'beep' button is pressed."
}],
"issuer": {
"id": "https://1edtech.edu/issuers/565049",
"type": ["Profile"],
"name": "1EdTech University",
"url": "https://1edtech.edu",
"phone": "1-222-333-4444",
"description": "1EdTech University provides online degree programs.",
"image": {
"id": "https://1edtech.edu/logo.png",
"type": "Image",
"caption": "1EdTech University logo"
},
"email": "registrar@1edtech.edu"
},
"validFrom": "2022-07-01T00:00:00Z",
"credentialSchema": [{
"id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredential_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" ], "id": "http://1edtech.edu/credentials/3732", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "name": "Robot Programming Skill Credential", "description": "A badge recognizing the development of skills in robot implementation, specifically the software", "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", "type": [ "AchievementSubject" ], "achievement": { "id": "https://example.com/achievements/robotics/robot-programming", "type": [ "Achievement" ], "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" } ], "achievementType": "Competency", "creator": { "id": "https://example.com/issuers/123767", "type": [ "Profile" ], "name": "Example Industry Group", "url": "https://example.com", "description": "Example Industry Group is a consortium of luminaries who publish skills data for common usage.", "email": "info@exammple.com" }, "criteria": { "narrative": "Learners must present source code showing the ability for a robot to accept manual or sensor input and perform conditional actions in response." }, "description": "This achievement represents developing capability to develop software for robotic applications.", "image": { "id": "https://example.com/achievements/robotics/robot-programming/image", "type": "Image", "caption": "A robot filled with ones and zeroes representing its programming" }, "name": "Robot Programming" } }, "evidence": [ { "id": "https://github.com/somebody/project", "type": [ "Evidence" ], "name": "Final Project Code", "description": "The source code for the 'Beeper 1.0' robot project. It responds by saying 'beep' when the 'beep' button is pressed." } ], "issuer": { "id": "https://1edtech.edu/issuers/565049", "type": [ "Profile" ], "name": "1EdTech University", "url": "https://1edtech.edu", "phone": "1-222-333-4444", "description": "1EdTech University provides online degree programs.", "image": { "id": "https://1edtech.edu/logo.png", "type": "Image", "caption": "1EdTech University logo" }, "email": "registrar@1edtech.edu" }, "validFrom": "2022-07-01T00:00:00Z", "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" } ], "proof": [ { "type": "DataIntegrityProof", "created": "2024-12-23T10:54:14Z", "verificationMethod": "https://1edtech.edu/issuers/565049#z6MkjdiQeaUkBM5XMNyeyR1w6Lk8q7vz5kqV9FmXBoMURpYC", "cryptosuite": "eddsa-rdfc-2022", "proofPurpose": "assertionMethod", "proofValue": "zedc6ThqJTuT9jDMnTYwEToyDJLhHpAmmYCvvuSQqkWspKvjJDn8ThnkDDP6gLw1QgpC2RNLAbnvyduWzMFDBWLN" } ] }
---------------- JWT header --------------- { "alg": "RS256", "typ": "JWT", "jwk": { "e": "AQAB", "kty": "RSA", "n": "kkBZO7APYwh3RC2R1jwdPFJ36aD5cGurOAAg4RHznnfN7St5hpa5JD5egwswKEWEIq0vLY ec7fgYXiZZeb1FdlTAPXe41eMEGrGFPfbaoFazNOGOPw6qmgyKBxgBuXl7lAXkHetyAkQuFcFwWMQrCR pIr5JdCDTL-_hdtGowklm1kwepwHZY8yRNdy2VegLrh7dbu8JGqAZw623TdiiiqYvgIH_M1Wu_HJBRh4 X50XhPK9XEX1gtHQwrS8Lej5Z8fX2uYLEn12q7ImkfktAKie5e2xgSTquMfcgCNq_nU4-2opYVj78t4H kXqkKzS3h8qbYEdefqC7I4nw-TR30P7Q" } } --------------- 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" ], "id": "http://1edtech.edu/credentials/3732", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "name": "Robot Programming Skill Credential", "description": "A badge recognizing the development of skills in robot impleme ntation, specifically the software", "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", "type": [ "AchievementSubject" ], "achievement": { "id": "https://example.com/achievements/robotics/robot-programming", "type": [ "Achievement" ], "alignment": [ { "type": [ "Alignment" ], "targetDescription": "Robot software is a set of commands and procedur es 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/r obot-programming" } ], "achievementType": "Competency", "creator": { "id": "https://example.com/issuers/123767", "type": [ "Profile" ], "name": "Example Industry Group", "url": "https://example.com", "description": "Example Industry Group is a consortium of luminaries who publish skills data for common usage.", "email": "info@exammple.com" }, "criteria": { "narrative": "Learners must present source code showing the ability for a robot to accept manual or sensor input and perform conditional actions in resp onse." }, "description": "This achievement represents developing capability to devel op software for robotic applications.", "image": { "id": "https://example.com/achievements/robotics/robot-programming/image ", "type": "Image", "caption": "A robot filled with ones and zeroes representing its program ming" }, "name": "Robot Programming" } }, "evidence": [ { "id": "https://github.com/somebody/project", "type": [ "Evidence" ], "name": "Final Project Code", "description": "The source code for the 'Beeper 1.0' robot project. It res ponds by saying 'beep' when the 'beep' button is pressed." } ], "issuer": { "id": "https://1edtech.edu/issuers/565049", "type": [ "Profile" ], "name": "1EdTech University", "url": "https://1edtech.edu", "phone": "1-222-333-4444", "description": "1EdTech University provides online degree programs.", "image": { "id": "https://1edtech.edu/logo.png", "type": "Image", "caption": "1EdTech University logo" }, "email": "registrar@1edtech.edu" }, "validFrom": "2022-07-01T00:00:00Z", "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achieve mentcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" } ], "iss": "https://1edtech.edu/issuers/565049", "jti": "http://1edtech.edu/credentials/3732", "sub": "did:example:ebfeb1f712ebc6f1c276e12ec21" } --------------- JWT --------------- eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4i OiJra0JaTzdBUFl3aDNSQzJSMWp3ZFBGSjM2YUQ1Y0d1ck9BQWc0Ukh6bm5mTjdTdDVocGE1SkQ1ZWd3 c3dLRVdFSXEwdkxZZWM3ZmdZWGlaWmViMUZkbFRBUFhlNDFlTUVHckdGUGZiYW9GYXpOT0dPUHc2cW1n eUtCeGdCdVhsN2xBWGtIZXR5QWtRdUZjRndXTVFyQ1JwSXI1SmRDRFRMLV9oZHRHb3drbG0xa3dlcHdI Wlk4eVJOZHkyVmVnTHJoN2RidThKR3FBWnc2MjNUZGlpaXFZdmdJSF9NMVd1X0hKQlJoNFg1MFhoUEs5 WEVYMWd0SFF3clM4TGVqNVo4ZlgydVlMRW4xMnE3SW1rZmt0QUtpZTVlMnhnU1RxdU1mY2dDTnFfblU0 LTJvcFlWajc4dDRIa1hxa0t6UzNoOHFiWUVkZWZxQzdJNG53LVRSMzBQN1EifX0.eyJAY29udGV4dCI6 WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv YmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIiwiaHR0cHM6Ly9wdXJsLmltc2ds b2JhbC5vcmcvc3BlYy9vYi92M3AwL2V4dGVuc2lvbnMuanNvbiJdLCJpZCI6Imh0dHA6Ly8xZWR0ZWNo LmVkdS9jcmVkZW50aWFscy8zNzMyIiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIk9wZW5C YWRnZUNyZWRlbnRpYWwiXSwibmFtZSI6IlJvYm90IFByb2dyYW1taW5nIFNraWxsIENyZWRlbnRpYWwi LCJkZXNjcmlwdGlvbiI6IkEgYmFkZ2UgcmVjb2duaXppbmcgdGhlIGRldmVsb3BtZW50IG9mIHNraWxs cyBpbiByb2JvdCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBzb2Z0d2FyZSIsImNyZWRl bnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmV4YW1wbGU6ZWJmZWIxZjcxMmViYzZmMWMyNzZlMTJlYzIx IiwidHlwZSI6WyJBY2hpZXZlbWVudFN1YmplY3QiXSwiYWNoaWV2ZW1lbnQiOnsiaWQiOiJodHRwczov L2V4YW1wbGUuY29tL2FjaGlldmVtZW50cy9yb2JvdGljcy9yb2JvdC1wcm9ncmFtbWluZyIsInR5cGUi OlsiQWNoaWV2ZW1lbnQiXSwiYWxpZ25tZW50IjpbeyJ0eXBlIjpbIkFsaWdubWVudCJdLCJ0YXJnZXRE ZXNjcmlwdGlvbiI6IlJvYm90IHNvZnR3YXJlIGlzIGEgc2V0IG9mIGNvbW1hbmRzIGFuZCBwcm9jZWR1 cmVzIHJvYm90cyB1c2UgdG8gcmVzcG9uZCB0byBpbnB1dCBhbmQgcGVyZm9ybSBhdXRvbm9tb3VzIHRh c2tzLiIsInRhcmdldE5hbWUiOiJSb2JvdCBQcm9ncmFtbWluZyIsInRhcmdldEZyYW1ld29yayI6IkV4 YW1wbGUgUm9ib3RpY3MgRnJhbWV3b3JrIiwidGFyZ2V0VHlwZSI6IkNGSXRlbSIsInRhcmdldFVybCI6 Imh0dHBzOi8vcm9ib3RpY3MtY29tcGV0ZW5jaWVzLmV4YW1wbGUuY29tL2NvbXBldGVuY2llcy9yb2Jv dC1wcm9ncmFtbWluZyJ9XSwiYWNoaWV2ZW1lbnRUeXBlIjoiQ29tcGV0ZW5jeSIsImNyZWF0b3IiOnsi aWQiOiJodHRwczovL2V4YW1wbGUuY29tL2lzc3VlcnMvMTIzNzY3IiwidHlwZSI6WyJQcm9maWxlIl0s Im5hbWUiOiJFeGFtcGxlIEluZHVzdHJ5IEdyb3VwIiwidXJsIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIs ImRlc2NyaXB0aW9uIjoiRXhhbXBsZSBJbmR1c3RyeSBHcm91cCBpcyBhIGNvbnNvcnRpdW0gb2YgbHVt aW5hcmllcyB3aG8gcHVibGlzaCBza2lsbHMgZGF0YSBmb3IgY29tbW9uIHVzYWdlLiIsImVtYWlsIjoi aW5mb0BleGFtbXBsZS5jb20ifSwiY3JpdGVyaWEiOnsibmFycmF0aXZlIjoiTGVhcm5lcnMgbXVzdCBw cmVzZW50IHNvdXJjZSBjb2RlIHNob3dpbmcgdGhlIGFiaWxpdHkgZm9yIGEgcm9ib3QgdG8gYWNjZXB0 IG1hbnVhbCBvciBzZW5zb3IgaW5wdXQgYW5kIHBlcmZvcm0gY29uZGl0aW9uYWwgYWN0aW9ucyBpbiBy ZXNwb25zZS4ifSwiZGVzY3JpcHRpb24iOiJUaGlzIGFjaGlldmVtZW50IHJlcHJlc2VudHMgZGV2ZWxv cGluZyBjYXBhYmlsaXR5IHRvIGRldmVsb3Agc29mdHdhcmUgZm9yIHJvYm90aWMgYXBwbGljYXRpb25z LiIsImltYWdlIjp7ImlkIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9hY2hpZXZlbWVudHMvcm9ib3RpY3Mv cm9ib3QtcHJvZ3JhbW1pbmcvaW1hZ2UiLCJ0eXBlIjoiSW1hZ2UiLCJjYXB0aW9uIjoiQSByb2JvdCBm aWxsZWQgd2l0aCBvbmVzIGFuZCB6ZXJvZXMgcmVwcmVzZW50aW5nIGl0cyBwcm9ncmFtbWluZyJ9LCJu YW1lIjoiUm9ib3QgUHJvZ3JhbW1pbmcifX0sImV2aWRlbmNlIjpbeyJpZCI6Imh0dHBzOi8vZ2l0aHVi LmNvbS9zb21lYm9keS9wcm9qZWN0IiwidHlwZSI6WyJFdmlkZW5jZSJdLCJuYW1lIjoiRmluYWwgUHJv amVjdCBDb2RlIiwiZGVzY3JpcHRpb24iOiJUaGUgc291cmNlIGNvZGUgZm9yIHRoZSAnQmVlcGVyIDEu MCcgcm9ib3QgcHJvamVjdC4gSXQgcmVzcG9uZHMgYnkgc2F5aW5nICdiZWVwJyB3aGVuIHRoZSAnYmVl cCcgYnV0dG9uIGlzIHByZXNzZWQuIn1dLCJpc3N1ZXIiOnsiaWQiOiJodHRwczovLzFlZHRlY2guZWR1 L2lzc3VlcnMvNTY1MDQ5IiwidHlwZSI6WyJQcm9maWxlIl0sIm5hbWUiOiIxRWRUZWNoIFVuaXZlcnNp dHkiLCJ1cmwiOiJodHRwczovLzFlZHRlY2guZWR1IiwicGhvbmUiOiIxLTIyMi0zMzMtNDQ0NCIsImRl c2NyaXB0aW9uIjoiMUVkVGVjaCBVbml2ZXJzaXR5IHByb3ZpZGVzIG9ubGluZSBkZWdyZWUgcHJvZ3Jh bXMuIiwiaW1hZ2UiOnsiaWQiOiJodHRwczovLzFlZHRlY2guZWR1L2xvZ28ucG5nIiwidHlwZSI6Iklt YWdlIiwiY2FwdGlvbiI6IjFFZFRlY2ggVW5pdmVyc2l0eSBsb2dvIn0sImVtYWlsIjoicmVnaXN0cmFy QDFlZHRlY2guZWR1In0sInZhbGlkRnJvbSI6IjIwMjItMDctMDFUMDA6MDA6MDBaIiwiY3JlZGVudGlh bFNjaGVtYSI6W3siaWQiOiJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvc2No ZW1hL2pzb24vb2JfdjNwMF9hY2hpZXZlbWVudGNyZWRlbnRpYWxfc2NoZW1hLmpzb24iLCJ0eXBlIjoi MUVkVGVjaEpzb25TY2hlbWFWYWxpZGF0b3IyMDE5In1dLCJpc3MiOiJodHRwczovLzFlZHRlY2guZWR1 L2lzc3VlcnMvNTY1MDQ5IiwianRpIjoiaHR0cDovLzFlZHRlY2guZWR1L2NyZWRlbnRpYWxzLzM3MzIi LCJzdWIiOiJkaWQ6ZXhhbXBsZTplYmZlYjFmNzEyZWJjNmYxYzI3NmUxMmVjMjEifQ.R09vynFdx_tI- DRdYFXKBghlhTWFbPwwYtClzctW7Lp5E-3rolCFOW2akjlX4pCj9muQY3kfnW1pJJDJIzWYZu_eTKjeN NQlt--DY5GGlM4AGpvn-VXh9MQj6eZZpDI3DktABCxLia_lGFZwyTDXdSPKKWtjbt6-thLVESL2YKAT5 -s8JTNHz7kBvCZUf72ZFrS17W6ZRFAc-LsfEt_iL-OHvB5BEYcDdeMZQDb33fN_ScRnDDHjN2fzWNYt6 m8YiGQ8Yuyhe3hppzXkPvLvJJVenNhQ1nImCuoNO_jhgNV0rLAQ9Va2D0vS5xXcMbN5S9Dg5u6vNGfxy RLQxWFvcQ
{
"@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"
],
"id": "http://1edtech.edu/credentials/3732",
"type": [
"VerifiableCredential",
"OpenBadgeCredential"
],
"name": "Solve and graph linear equations and inequalities",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": ["AchievementSubject"],
"achievement": {
"id": "https://example.com/achievements/math/linear-1",
"type": ["Achievement"],
"alignment": [{
"type": ["Alignment"],
"targetCode": "ce-6369c51f-4d86-4592-a761-8b32ae70a045",
"targetFramework": "Ivy Tech Community College of Indiana, MATH 135, FINITE MATH",
"targetName": "Solve and graph linear equations and inequalities",
"targetType": "ceasn:Competency",
"targetUrl": "https://credentialfinder.org/competency/ce-6369c51f-4d86-4592-a761-8b32ae70a045"
}],
"achievementType": "Competency",
"creator": {
"id": "https://example.com/issuers/123767",
"type": ["Profile"],
"name": "Example Industry Group",
"url": "https://example.com",
"description": "Example Industry Group is a consortium of luminaries who publish skills data for common usage.",
"email": "info@exammple.com"
},
"criteria": {
"narrative": "Learners must demonstrate understanding of linear algebra and graphic representation of linear equations."
},
"description": "This achievement represents developing capability to solve and graph linear equations and inequalities",
"image": {
"id": "https://example.com/achievements/math/linear-1/image",
"type": "Image",
"caption": "A line, sloping upward optimistically"
},
"name": "Linear equations and inequalities"
}
},
"issuer": {
"id": "https://1edtech.edu/issuers/565049",
"type": ["Profile"],
"name": "1EdTech University",
"url": "https://1edtech.edu",
"phone": "1-222-333-4444",
"description": "1EdTech University provides online degree programs.",
"image": {
"id": "https://1edtech.edu/logo.png",
"type": "Image",
"caption": "1EdTech University logo"
},
"email": "registrar@1edtech.edu"
},
"validFrom": "2022-07-01T00:00:00Z",
"credentialSchema": [{
"id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredential_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" ], "id": "http://1edtech.edu/credentials/3732", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "name": "Solve and graph linear equations and inequalities", "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", "type": [ "AchievementSubject" ], "achievement": { "id": "https://example.com/achievements/math/linear-1", "type": [ "Achievement" ], "alignment": [ { "type": [ "Alignment" ], "targetCode": "ce-6369c51f-4d86-4592-a761-8b32ae70a045", "targetFramework": "Ivy Tech Community College of Indiana, MATH 135, FINITE MATH", "targetName": "Solve and graph linear equations and inequalities", "targetType": "ceasn:Competency", "targetUrl": "https://credentialfinder.org/competency/ce-6369c51f-4d86-4592-a761-8b32ae70a045" } ], "achievementType": "Competency", "creator": { "id": "https://example.com/issuers/123767", "type": [ "Profile" ], "name": "Example Industry Group", "url": "https://example.com", "description": "Example Industry Group is a consortium of luminaries who publish skills data for common usage.", "email": "info@exammple.com" }, "criteria": { "narrative": "Learners must demonstrate understanding of linear algebra and graphic representation of linear equations." }, "description": "This achievement represents developing capability to solve and graph linear equations and inequalities", "image": { "id": "https://example.com/achievements/math/linear-1/image", "type": "Image", "caption": "A line, sloping upward optimistically" }, "name": "Linear equations and inequalities" } }, "issuer": { "id": "https://1edtech.edu/issuers/565049", "type": [ "Profile" ], "name": "1EdTech University", "url": "https://1edtech.edu", "phone": "1-222-333-4444", "description": "1EdTech University provides online degree programs.", "image": { "id": "https://1edtech.edu/logo.png", "type": "Image", "caption": "1EdTech University logo" }, "email": "registrar@1edtech.edu" }, "validFrom": "2022-07-01T00:00:00Z", "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" } ], "proof": [ { "type": "DataIntegrityProof", "created": "2024-12-23T10:54:14Z", "verificationMethod": "https://1edtech.edu/issuers/565049#z6MkjdiQeaUkBM5XMNyeyR1w6Lk8q7vz5kqV9FmXBoMURpYC", "cryptosuite": "eddsa-rdfc-2022", "proofPurpose": "assertionMethod", "proofValue": "z35hsb6CZdik74k8kAfssqAicKi1oCtGaqJe3UrToqC9PgDB7zn489BKEXc8PPTTmpVQkAeX8P9udCq11wdDYTjWL" } ] }
---------------- JWT header --------------- { "alg": "RS256", "typ": "JWT", "jwk": { "e": "AQAB", "kty": "RSA", "n": "kkBZO7APYwh3RC2R1jwdPFJ36aD5cGurOAAg4RHznnfN7St5hpa5JD5egwswKEWEIq0vLY ec7fgYXiZZeb1FdlTAPXe41eMEGrGFPfbaoFazNOGOPw6qmgyKBxgBuXl7lAXkHetyAkQuFcFwWMQrCR pIr5JdCDTL-_hdtGowklm1kwepwHZY8yRNdy2VegLrh7dbu8JGqAZw623TdiiiqYvgIH_M1Wu_HJBRh4 X50XhPK9XEX1gtHQwrS8Lej5Z8fX2uYLEn12q7ImkfktAKie5e2xgSTquMfcgCNq_nU4-2opYVj78t4H kXqkKzS3h8qbYEdefqC7I4nw-TR30P7Q" } } --------------- 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" ], "id": "http://1edtech.edu/credentials/3732", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "name": "Solve and graph linear equations and inequalities", "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", "type": [ "AchievementSubject" ], "achievement": { "id": "https://example.com/achievements/math/linear-1", "type": [ "Achievement" ], "alignment": [ { "type": [ "Alignment" ], "targetCode": "ce-6369c51f-4d86-4592-a761-8b32ae70a045", "targetFramework": "Ivy Tech Community College of Indiana, MATH 135, F INITE MATH", "targetName": "Solve and graph linear equations and inequalities", "targetType": "ceasn:Competency", "targetUrl": "https://credentialfinder.org/competency/ce-6369c51f-4d86 -4592-a761-8b32ae70a045" } ], "achievementType": "Competency", "creator": { "id": "https://example.com/issuers/123767", "type": [ "Profile" ], "name": "Example Industry Group", "url": "https://example.com", "description": "Example Industry Group is a consortium of luminaries who publish skills data for common usage.", "email": "info@exammple.com" }, "criteria": { "narrative": "Learners must demonstrate understanding of linear algebra and graphic representation of linear equations." }, "description": "This achievement represents developing capability to solve and graph linear equations and inequalities", "image": { "id": "https://example.com/achievements/math/linear-1/image", "type": "Image", "caption": "A line, sloping upward optimistically" }, "name": "Linear equations and inequalities" } }, "issuer": { "id": "https://1edtech.edu/issuers/565049", "type": [ "Profile" ], "name": "1EdTech University", "url": "https://1edtech.edu", "phone": "1-222-333-4444", "description": "1EdTech University provides online degree programs.", "image": { "id": "https://1edtech.edu/logo.png", "type": "Image", "caption": "1EdTech University logo" }, "email": "registrar@1edtech.edu" }, "validFrom": "2022-07-01T00:00:00Z", "credentialSchema": [ { "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achieve mentcredential_schema.json", "type": "1EdTechJsonSchemaValidator2019" } ], "iss": "https://1edtech.edu/issuers/565049", "jti": "http://1edtech.edu/credentials/3732", "sub": "did:example:ebfeb1f712ebc6f1c276e12ec21" } --------------- JWT --------------- eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4i OiJra0JaTzdBUFl3aDNSQzJSMWp3ZFBGSjM2YUQ1Y0d1ck9BQWc0Ukh6bm5mTjdTdDVocGE1SkQ1ZWd3 c3dLRVdFSXEwdkxZZWM3ZmdZWGlaWmViMUZkbFRBUFhlNDFlTUVHckdGUGZiYW9GYXpOT0dPUHc2cW1n eUtCeGdCdVhsN2xBWGtIZXR5QWtRdUZjRndXTVFyQ1JwSXI1SmRDRFRMLV9oZHRHb3drbG0xa3dlcHdI Wlk4eVJOZHkyVmVnTHJoN2RidThKR3FBWnc2MjNUZGlpaXFZdmdJSF9NMVd1X0hKQlJoNFg1MFhoUEs5 WEVYMWd0SFF3clM4TGVqNVo4ZlgydVlMRW4xMnE3SW1rZmt0QUtpZTVlMnhnU1RxdU1mY2dDTnFfblU0 LTJvcFlWajc4dDRIa1hxa0t6UzNoOHFiWUVkZWZxQzdJNG53LVRSMzBQN1EifX0.eyJAY29udGV4dCI6 WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv YmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIiwiaHR0cHM6Ly9wdXJsLmltc2ds b2JhbC5vcmcvc3BlYy9vYi92M3AwL2V4dGVuc2lvbnMuanNvbiJdLCJpZCI6Imh0dHA6Ly8xZWR0ZWNo LmVkdS9jcmVkZW50aWFscy8zNzMyIiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIk9wZW5C YWRnZUNyZWRlbnRpYWwiXSwibmFtZSI6IlNvbHZlIGFuZCBncmFwaCBsaW5lYXIgZXF1YXRpb25zIGFu ZCBpbmVxdWFsaXRpZXMiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtcGxlOmViZmVi MWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSIsInR5cGUiOlsiQWNoaWV2ZW1lbnRTdWJqZWN0Il0sImFjaGll dmVtZW50Ijp7ImlkIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9hY2hpZXZlbWVudHMvbWF0aC9saW5lYXIt MSIsInR5cGUiOlsiQWNoaWV2ZW1lbnQiXSwiYWxpZ25tZW50IjpbeyJ0eXBlIjpbIkFsaWdubWVudCJd LCJ0YXJnZXRDb2RlIjoiY2UtNjM2OWM1MWYtNGQ4Ni00NTkyLWE3NjEtOGIzMmFlNzBhMDQ1IiwidGFy Z2V0RnJhbWV3b3JrIjoiSXZ5IFRlY2ggQ29tbXVuaXR5IENvbGxlZ2Ugb2YgSW5kaWFuYSwgTUFUSCAx MzUsIEZJTklURSBNQVRIIiwidGFyZ2V0TmFtZSI6IlNvbHZlIGFuZCBncmFwaCBsaW5lYXIgZXF1YXRp b25zIGFuZCBpbmVxdWFsaXRpZXMiLCJ0YXJnZXRUeXBlIjoiY2Vhc246Q29tcGV0ZW5jeSIsInRhcmdl dFVybCI6Imh0dHBzOi8vY3JlZGVudGlhbGZpbmRlci5vcmcvY29tcGV0ZW5jeS9jZS02MzY5YzUxZi00 ZDg2LTQ1OTItYTc2MS04YjMyYWU3MGEwNDUifV0sImFjaGlldmVtZW50VHlwZSI6IkNvbXBldGVuY3ki LCJjcmVhdG9yIjp7ImlkIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9pc3N1ZXJzLzEyMzc2NyIsInR5cGUi OlsiUHJvZmlsZSJdLCJuYW1lIjoiRXhhbXBsZSBJbmR1c3RyeSBHcm91cCIsInVybCI6Imh0dHBzOi8v ZXhhbXBsZS5jb20iLCJkZXNjcmlwdGlvbiI6IkV4YW1wbGUgSW5kdXN0cnkgR3JvdXAgaXMgYSBjb25z b3J0aXVtIG9mIGx1bWluYXJpZXMgd2hvIHB1Ymxpc2ggc2tpbGxzIGRhdGEgZm9yIGNvbW1vbiB1c2Fn ZS4iLCJlbWFpbCI6ImluZm9AZXhhbW1wbGUuY29tIn0sImNyaXRlcmlhIjp7Im5hcnJhdGl2ZSI6Ikxl YXJuZXJzIG11c3QgZGVtb25zdHJhdGUgdW5kZXJzdGFuZGluZyBvZiBsaW5lYXIgYWxnZWJyYSBhbmQg Z3JhcGhpYyByZXByZXNlbnRhdGlvbiBvZiBsaW5lYXIgZXF1YXRpb25zLiJ9LCJkZXNjcmlwdGlvbiI6 IlRoaXMgYWNoaWV2ZW1lbnQgcmVwcmVzZW50cyBkZXZlbG9waW5nIGNhcGFiaWxpdHkgdG8gc29sdmUg YW5kIGdyYXBoIGxpbmVhciBlcXVhdGlvbnMgYW5kIGluZXF1YWxpdGllcyIsImltYWdlIjp7ImlkIjoi aHR0cHM6Ly9leGFtcGxlLmNvbS9hY2hpZXZlbWVudHMvbWF0aC9saW5lYXItMS9pbWFnZSIsInR5cGUi OiJJbWFnZSIsImNhcHRpb24iOiJBIGxpbmUsIHNsb3BpbmcgdXB3YXJkIG9wdGltaXN0aWNhbGx5In0s Im5hbWUiOiJMaW5lYXIgZXF1YXRpb25zIGFuZCBpbmVxdWFsaXRpZXMifX0sImlzc3VlciI6eyJpZCI6 Imh0dHBzOi8vMWVkdGVjaC5lZHUvaXNzdWVycy81NjUwNDkiLCJ0eXBlIjpbIlByb2ZpbGUiXSwibmFt ZSI6IjFFZFRlY2ggVW5pdmVyc2l0eSIsInVybCI6Imh0dHBzOi8vMWVkdGVjaC5lZHUiLCJwaG9uZSI6 IjEtMjIyLTMzMy00NDQ0IiwiZGVzY3JpcHRpb24iOiIxRWRUZWNoIFVuaXZlcnNpdHkgcHJvdmlkZXMg b25saW5lIGRlZ3JlZSBwcm9ncmFtcy4iLCJpbWFnZSI6eyJpZCI6Imh0dHBzOi8vMWVkdGVjaC5lZHUv bG9nby5wbmciLCJ0eXBlIjoiSW1hZ2UiLCJjYXB0aW9uIjoiMUVkVGVjaCBVbml2ZXJzaXR5IGxvZ28i fSwiZW1haWwiOiJyZWdpc3RyYXJAMWVkdGVjaC5lZHUifSwidmFsaWRGcm9tIjoiMjAyMi0wNy0wMVQw MDowMDowMFoiLCJjcmVkZW50aWFsU2NoZW1hIjpbeyJpZCI6Imh0dHBzOi8vcHVybC5pbXNnbG9iYWwu b3JnL3NwZWMvb2IvdjNwMC9zY2hlbWEvanNvbi9vYl92M3AwX2FjaGlldmVtZW50Y3JlZGVudGlhbF9z Y2hlbWEuanNvbiIsInR5cGUiOiIxRWRUZWNoSnNvblNjaGVtYVZhbGlkYXRvcjIwMTkifV0sImlzcyI6 Imh0dHBzOi8vMWVkdGVjaC5lZHUvaXNzdWVycy81NjUwNDkiLCJqdGkiOiJodHRwOi8vMWVkdGVjaC5l ZHUvY3JlZGVudGlhbHMvMzczMiIsInN1YiI6ImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2 ZTEyZWMyMSJ9.ZvglTc7gQPZMSyMaIhGtu0H2xXGtVcvx2Ude9d0l2p4vmBtFlXe710A3H5QR-8O_65S A3Yj38E5-XiTej23Vo5fx9Jp8PUiSICUe471OZqH_izjkXgQV9o6GZ-_mzX6Sz3oghK9Ev6V2X0TrCTQ bU0mhcer0VbkFSXWeR0KQVjcM1eZkKbKVnpaZV9JAm2TAgUdw_8SCBbiGqV-zCjJMmLZP2vFLQ-9sY__ -qUGxT83Nv3VDW6l1woda2F4GLqnGzwbw3emvvfMAnho6NY8TI2hcug5XvIy3JHkAX5gbkWqlFEtNDDZ R3HkiXcycQi1nDY1CRxEEEI0LVcADABwi9A
{
"@context": {
"@protected": true,
"id": "@id",
"type": "@type",
"OpenBadgeCredential": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#OpenBadgeCredential"
},
"Achievement": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Achievement",
"@context": {
"@protected": true,
"id": "@id",
"type": "@type",
"achievementType": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#achievementType"
},
"alignment": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#alignment",
"@container": "@set"
},
"creator": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#creator"
},
"creditsAvailable": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#creditsAvailable",
"@type": "https://www.w3.org/2001/XMLSchema#float"
},
"criteria": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Criteria",
"@type": "@id"
},
"fieldOfStudy": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#fieldOfStudy"
},
"humanCode": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#humanCode"
},
"image": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#image",
"@type": "@id"
},
"otherIdentifier": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#otherIdentifier",
"@container": "@set"
},
"related": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#related",
"@container": "@set"
},
"resultDescription": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#resultDescription",
"@container": "@set"
},
"specialization": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#specialization"
},
"tag": {
"@id": "https://schema.org/keywords",
"@container": "@set"
},
"version": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#version"
},
"inLanguage": {
"@id": "https://schema.org/inLanguage"
}
}
},
"AchievementCredential": {
"@id": "OpenBadgeCredential"
},
"AchievementSubject": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#AchievementSubject",
"@context": {
"@protected": true,
"id": "@id",
"type": "@type",
"achievement": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#achievement"
},
"activityEndDate": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#activityEndDate",
"@type": "https://www.w3.org/2001/XMLSchema#date"
},
"activityStartDate": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#activityStartDate",
"@type": "https://www.w3.org/2001/XMLSchema#date"
},
"creditsEarned": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#creditsEarned",
"@type": "https://www.w3.org/2001/XMLSchema#float"
},
"identifier": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identifier",
"@container": "@set"
},
"image": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#image",
"@type": "@id"
},
"licenseNumber": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#licenseNumber"
},
"result": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#result",
"@container": "@set"
},
"role": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#role"
},
"source": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#source",
"@type": "@id"
},
"term": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#term"
}
}
},
"Address": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Address",
"@context": {
"@protected": true,
"id": "@id",
"type": "@type",
"addressCountry": {
"@id": "https://schema.org/addressCountry"
},
"addressCountryCode": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#CountryCode"
},
"addressLocality": {
"@id": "https://schema.org/addressLocality"
},
"addressRegion": {
"@id": "https://schema.org/addressRegion"
},
"geo": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#GeoCoordinates"
},
"postOfficeBoxNumber": {
"@id": "https://schema.org/postOfficeBoxNumber"
},
"postalCode": {
"@id": "https://schema.org/postalCode"
},
"streetAddress": {
"@id": "https://schema.org/streetAddress"
}
}
},
"Alignment": {
"@id": "https://schema.org/AlignmentObject",
"@context": {
"@protected": true,
"id": "@id",
"type": "@type",
"targetCode": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#targetCode"
},
"targetDescription": {
"@id": "https://schema.org/targetDescription"
},
"targetFramework": {
"@id": "https://schema.org/targetFramework"
},
"targetName": {
"@id": "https://schema.org/targetName"
},
"targetType": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#targetType"
},
"targetUrl": {
"@id": "https://schema.org/targetUrl",
"@type": "https://www.w3.org/2001/XMLSchema#anyURI"
}
}
},
"Criteria": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Criteria"
},
"EndorsementCredential": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#EndorsementCredential"
},
"EndorsementSubject": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#EndorsementSubject",
"@context": {
"@protected": true,
"id": "@id",
"type": "@type",
"endorsementComment": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#endorsementComment"
}
}
},
"Evidence": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Evidence",
"@context": {
"@protected": true,
"id": "@id",
"type": "@type",
"audience": {
"@id": "https://schema.org/audience"
},
"genre": {
"@id": "https://schema.org/genre"
}
}
},
"GeoCoordinates": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#GeoCoordinates",
"@context": {
"@protected": true,
"id": "@id",
"type": "@type",
"latitude": {
"@id": "https://schema.org/latitude"
},
"longitude": {
"@id": "https://schema.org/longitude"
}
}
},
"IdentifierEntry": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#IdentifierEntry",
"@context": {
"@protected": true,
"id": "@id",
"type": "@type",
"identifier": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identifier"
},
"identifierType": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identifierType"
}
}
},
"IdentityObject": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#IdentityObject",
"@context": {
"@protected": true,
"id": "@id",
"type": "@type",
"hashed": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#hashed",
"@type": "https://www.w3.org/2001/XMLSchema#boolean"
},
"identityHash": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identityHash"
},
"identityType": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identityType"
},
"salt": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#salt"
}
}
},
"Image": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Image",
"@context": {
"@protected": true,
"id": "@id",
"type": "@type",
"caption": {
"@id": "https://schema.org/caption"
}
}
},
"Profile": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Profile",
"@context": {
"@protected": true,
"id": "@id",
"type": "@type",
"additionalName": {
"@id": "https://schema.org/additionalName"
},
"address": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#address",
"@type": "@id"
},
"dateOfBirth": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#dateOfBirth",
"@type": "https://www.w3.org/2001/XMLSchema#date"
},
"email": {
"@id": "https://schema.org/email"
},
"familyName": {
"@id": "https://schema.org/familyName"
},
"familyNamePrefix": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#familyNamePrefix"
},
"givenName": {
"@id": "https://schema.org/givenName"
},
"honorificPrefix": {
"@id": "https://schema.org/honorificPrefix"
},
"honorificSuffix": {
"@id": "https://schema.org/honorificSuffix"
},
"image": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#image",
"@type": "@id"
},
"otherIdentifier": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#otherIdentifier",
"@container": "@set"
},
"parentOrg": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#parentOrg",
"@type": "@id"
},
"patronymicName": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#patronymicName"
},
"phone": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#phone"
},
"official": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#official"
}
}
},
"Related": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Related",
"@context": {
"@protected": true,
"id": "@id",
"type": "@type",
"version": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#version"
},
"inLanguage": {
"@id": "https://schema.org/inLanguage"
}
}
},
"Result": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Result",
"@context": {
"@protected": true,
"id": "@id",
"type": "@type",
"achievedLevel": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#achievedLevel",
"@type": "https://www.w3.org/2001/XMLSchema#anyURI"
},
"resultDescription": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#resultDescription",
"@type": "https://www.w3.org/2001/XMLSchema#anyURI"
},
"status": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#status"
},
"value": {
"@id": "https://schema.org/value"
}
}
},
"ResultDescription": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#ResultDescription",
"@context": {
"@protected": true,
"id": "@id",
"type": "@type",
"allowedValue": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#allowedValue",
"@container": "@list"
},
"requiredLevel": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#requiredLevel",
"@type": "https://www.w3.org/2001/XMLSchema#anyURI"
},
"requiredValue": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#requiredValue"
},
"resultType": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#resultType"
},
"rubricCriterionLevel": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#rubricCriterionLevel",
"@container": "@set"
},
"valueMax": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#valueMax"
},
"valueMin": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#valueMin"
}
}
},
"RubricCriterionLevel": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#RubricCriterionLevel",
"@context": {
"@protected": true,
"id": "@id",
"type": "@type",
"level": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#level"
},
"points": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#points"
}
}
},
"alignment": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#alignment",
"@container": "@set"
},
"description": {
"@id": "https://schema.org/description"
},
"endorsement": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#endorsement",
"@container": "@set"
},
"image": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#image",
"@type": "@id"
},
"inLanguage": {
"@id": "https://schema.org/inLanguage"
},
"name": {
"@id": "https://schema.org/name"
},
"narrative": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#narrative"
},
"url": {
"@id": "https://schema.org/url",
"@type": "https://www.w3.org/2001/XMLSchema#anyURI"
},
"awardedDate": {
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#awardedDate",
"@type": "xsd:dateTime"
}
}
}
A collection of information about the accomplishment recognized by the Assertion. Many assertions may be created corresponding to one Achievement.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievement-jsonschema1.json", "title": "JSON Schema for the Achievement class.", "description": "A collection of information about the accomplishment recognized by the Assertion. Many assertions may be created corresponding to one Achievement.", "type": "object", "properties": { "id": { "description": "Unique URI for the Achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Achievement" ] }, "items": { "description": "The type MUST include the IRI 'Achievement'.", "$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" } }, "achievementType": { "description": "The type of achievement. This is an extensible vocabulary.", "$comment": "Origin: AchievementType (EnumExt); The type of achievement, for example 'Award' or 'Certification'. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.", "oneOf": [ { "type": "string", "enum": [ "Achievement", "ApprenticeshipCertificate", "Assessment", "Assignment", "AssociateDegree", "Award", "Badge", "BachelorDegree", "Certificate", "CertificateOfCompletion", "Certification", "CommunityService", "Competency", "Course", "CoCurricular", "Degree", "Diploma", "DoctoralDegree", "Fieldwork", "GeneralEducationDevelopment", "JourneymanCertificate", "LearningProgram", "License", "Membership", "ProfessionalDoctorate", "QualityAssuranceCredential", "MasterCertificate", "MasterDegree", "MicroCredential", "ResearchDoctorate", "SecondarySchoolDiploma" ] }, { "type": "string", "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+" } ] }, "creator": { "$ref": "#/$defs/Profile" }, "creditsAvailable": { "description": "Credit hours associated with this entity, or credit hours possible. For example 3.0.", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "criteria": { "$ref": "#/$defs/Criteria" }, "description": { "description": "A short description of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the Achievement. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "fieldOfStudy": { "description": "Category, subject, area of study, discipline, or general branch of knowledge. Examples include Business, Education, Psychology, and Technology.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "humanCode": { "description": "The code, generally human readable, associated with an achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "image": { "$ref": "#/$defs/Image" }, "inLanguage": { "description": "The language of the achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "name": { "description": "The name of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "related": { "type": "array", "items": { "$ref": "#/$defs/Related" } }, "resultDescription": { "type": "array", "items": { "$ref": "#/$defs/ResultDescription" } }, "specialization": { "description": "Name given to the focus, concentration, or specific area of study defined in the achievement. Examples include 'Entrepreneurship', 'Technical Communication', and 'Finance'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "tag": { "type": "array", "items": { "description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "version": { "description": "The version property allows issuers to set a version string for an Achievement. This is particularly useful when replacing a previous version with an update.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type", "criteria", "description", "name" ], "additionalProperties": true, "$defs": { "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" ] }, { "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 }, "Criteria": { "description": "Descriptive metadata about the achievements necessary to be recognized with an assertion of a particular achievement. This data is added to the Achievement class so that it may be rendered when the achievement assertion is displayed, instead of simply a link to human-readable criteria external to the achievement. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether. Criteria is used to allow would-be recipients to learn what is required of them to be recognized with an assertion of a particular achievement. It is also used after the assertion is awarded to a recipient to let those inspecting earned achievements know the general requirements that the recipients met in order to earn it.", "type": "object", "properties": { "id": { "description": "The URI of a webpage that describes in a human-readable format the criteria for the achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "narrative": { "description": "A narrative of what is needed to earn the achievement. Markdown is allowed.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [], "additionalProperties": true }, "EndorsementCredential": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "CredentialStatus": { "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "IdentifierEntry": { "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "additionalProperties": false }, "Proof": { "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "RefreshService": { "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Image": { "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": false }, "EndorsementSubject": { "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Context": { "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "$comment": "Origin: Map (Unordered); A map representing an object with unknown, arbitrary properties", "type": "object" }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } ] }, "TermsOfUse": { "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "additionalProperties": true }, "ProfileRef": { "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, { "$ref": "#/$defs/Profile" } ] }, "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 }, "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 }, "Related": { "description": "Identifies a related achievement.", "type": "object", "properties": { "id": { "description": "The related achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Related" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Related'.", "$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" } }, "inLanguage": { "description": "The language of the related achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "version": { "description": "The version of the related achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Profile": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Address": { "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true }, "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }, "CredentialSchema": { "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true } } }
AchievementCredentials are representations of an awarded achievement, used to share information about a achievement belonging to one earner. Maps to a Verifiable Credential as defined in the [VC-DATA-MODEL-2.0]. As described in § 8. Proofs (Signatures), at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the proof
property.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredential-jsonschema1.json", "title": "JSON Schema for the AchievementCredential class.", "description": "AchievementCredentials are representations of an awarded achievement, used to share information about a achievement belonging to one earner. Maps to a Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]]. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'AchievementCredential' or the URI 'OpenBadgeCredential'.", "$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": [ "AchievementCredential", "OpenBadgeCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'AchievementCredential' or the URI 'OpenBadgeCredential'.", "$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" } } ] }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "image": { "$ref": "#/$defs/Image" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "credentialSubject": { "$ref": "#/$defs/AchievementSubject" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the credential, and the achievement and profiles in the credential. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "evidence": { "type": "array", "items": { "$ref": "#/$defs/Evidence" } }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "id", "type", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true, "$defs": { "Context": { "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "$comment": "Origin: Map (Unordered); A map representing an object with unknown, arbitrary properties", "type": "object" }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } ] }, "TermsOfUse": { "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "additionalProperties": true }, "CredentialStatus": { "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "AchievementSubject": { "description": "A collection of information about the recipient of an achievement. Maps to Credential Subject in [[VC-DATA-MODEL-2.0]].", "type": "object", "properties": { "id": { "description": "An identifier for the Credential Subject. Either `id` or at least one `identifier` MUST be supplied.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "AchievementSubject" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'AchievementSubject'.", "$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" } }, "activityEndDate": { "description": "The datetime the activity ended.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "activityStartDate": { "description": "The datetime the activity started.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "creditsEarned": { "description": "The number of credits earned, generally in semester or quarter credit hours. This field correlates with the Achievement `creditsAvailable` field.", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "achievement": { "$ref": "#/$defs/Achievement" }, "identifier": { "type": "array", "items": { "$ref": "#/$defs/IdentityObject" } }, "image": { "$ref": "#/$defs/Image" }, "licenseNumber": { "description": "The license number that was issued with this credential.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "narrative": { "description": "A narrative that connects multiple pieces of evidence. Likely only present at this location if evidence is a multi-value array.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" }, "result": { "type": "array", "items": { "$ref": "#/$defs/Result" } }, "role": { "description": "Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "source": { "$ref": "#/$defs/Profile" }, "term": { "description": "The academic term in which this assertion was achieved.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type", "achievement" ], "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": [ "name", "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 }, "Evidence": { "description": "Descriptive metadata about evidence related to the achievement assertion. Each instance of the evidence class present in an assertion corresponds to one entity, though a single entry can describe a set of items collectively. There may be multiple evidence entries referenced from an assertion. The narrative property is also in scope of the assertion class to provide an overall description of the achievement related to the assertion in rich text. It is used here to provide a narrative of achievement of the specific entity described. If both the description and narrative properties are present, displayers can assume the narrative value goes into more detail and is not simply a recapitulation of description.", "type": "object", "properties": { "id": { "description": "The URL of a webpage presenting evidence of achievement or the evidence encoded as a Data URI. The schema of the webpage is undefined.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Evidence" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Evidence'.", "$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" } }, "narrative": { "description": "A narrative that describes the evidence and process of achievement that led to an assertion.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" }, "name": { "description": "A descriptive title of the evidence.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "A longer description of the evidence.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "genre": { "description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "audience": { "description": "A description of the intended audience for a piece of evidence.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "EndorsementCredential": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "Achievement": { "description": "A collection of information about the accomplishment recognized by the Assertion. Many assertions may be created corresponding to one Achievement.", "type": "object", "properties": { "id": { "description": "Unique URI for the Achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Achievement" ] }, "items": { "description": "The type MUST include the IRI 'Achievement'.", "$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" } }, "achievementType": { "description": "The type of achievement. This is an extensible vocabulary.", "$comment": "Origin: AchievementType (EnumExt); The type of achievement, for example 'Award' or 'Certification'. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.", "oneOf": [ { "type": "string", "enum": [ "Achievement", "ApprenticeshipCertificate", "Assessment", "Assignment", "AssociateDegree", "Award", "Badge", "BachelorDegree", "Certificate", "CertificateOfCompletion", "Certification", "CommunityService", "Competency", "Course", "CoCurricular", "Degree", "Diploma", "DoctoralDegree", "Fieldwork", "GeneralEducationDevelopment", "JourneymanCertificate", "LearningProgram", "License", "Membership", "ProfessionalDoctorate", "QualityAssuranceCredential", "MasterCertificate", "MasterDegree", "MicroCredential", "ResearchDoctorate", "SecondarySchoolDiploma" ] }, { "type": "string", "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+" } ] }, "creator": { "$ref": "#/$defs/Profile" }, "creditsAvailable": { "description": "Credit hours associated with this entity, or credit hours possible. For example 3.0.", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "criteria": { "$ref": "#/$defs/Criteria" }, "description": { "description": "A short description of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the Achievement. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "fieldOfStudy": { "description": "Category, subject, area of study, discipline, or general branch of knowledge. Examples include Business, Education, Psychology, and Technology.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "humanCode": { "description": "The code, generally human readable, associated with an achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "image": { "$ref": "#/$defs/Image" }, "inLanguage": { "description": "The language of the achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "name": { "description": "The name of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "related": { "type": "array", "items": { "$ref": "#/$defs/Related" } }, "resultDescription": { "type": "array", "items": { "$ref": "#/$defs/ResultDescription" } }, "specialization": { "description": "Name given to the focus, concentration, or specific area of study defined in the achievement. Examples include 'Entrepreneurship', 'Technical Communication', and 'Finance'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "tag": { "type": "array", "items": { "description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "version": { "description": "The version property allows issuers to set a version string for an Achievement. This is particularly useful when replacing a previous version with an update.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type", "criteria", "description", "name" ], "additionalProperties": true }, "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" ] }, { "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 }, "Criteria": { "description": "Descriptive metadata about the achievements necessary to be recognized with an assertion of a particular achievement. This data is added to the Achievement class so that it may be rendered when the achievement assertion is displayed, instead of simply a link to human-readable criteria external to the achievement. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether. Criteria is used to allow would-be recipients to learn what is required of them to be recognized with an assertion of a particular achievement. It is also used after the assertion is awarded to a recipient to let those inspecting earned achievements know the general requirements that the recipients met in order to earn it.", "type": "object", "properties": { "id": { "description": "The URI of a webpage that describes in a human-readable format the criteria for the achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "narrative": { "description": "A narrative of what is needed to earn the achievement. Markdown is allowed.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [], "additionalProperties": true }, "IdentifierEntry": { "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "additionalProperties": false }, "Proof": { "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "RefreshService": { "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Image": { "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": false }, "EndorsementSubject": { "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Result": { "description": "Describes a result that was achieved.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Result" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Result'.", "$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" } }, "achievedLevel": { "description": "If the result represents an achieved rubric criterion level (e.g. Mastered), the value is the `id` of the RubricCriterionLevel in linked ResultDescription.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "alignment": { "type": "array", "items": { "$ref": "#/$defs/Alignment" } }, "resultDescription": { "description": "An achievement can have many result descriptions describing possible results. The value of `resultDescription` is the `id` of the result description linked to this result. The linked result description must be in the achievement that is being asserted.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "status": { "description": "The status of the achievement. Required if `resultType` of the linked ResultDescription is Status.", "$comment": "Origin: ResultStatusType (Enumeration); Defined vocabulary to convey the status of an achievement.", "type": "string", "enum": [ "Completed", "Enrolled", "Failed", "InProgress", "OnHold", "Provisional", "Withdrew" ] }, "value": { "description": "A string representing the result of the performance, or demonstration, of the achievement. For example, 'A' if the recipient received an A grade in class.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "ProfileRef": { "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, { "$ref": "#/$defs/Profile" } ] }, "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 }, "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 }, "Related": { "description": "Identifies a related achievement.", "type": "object", "properties": { "id": { "description": "The related achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Related" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Related'.", "$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" } }, "inLanguage": { "description": "The language of the related achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "version": { "description": "The version of the related achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Profile": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Address": { "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true }, "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }, "CredentialSchema": { "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true } } }
A collection of information about the recipient of an achievement. Maps to Credential Subject in [VC-DATA-MODEL-2.0].
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementsubject-jsonschema1.json", "title": "JSON Schema for the AchievementSubject class.", "description": "A collection of information about the recipient of an achievement. Maps to Credential Subject in [[VC-DATA-MODEL-2.0]].", "type": "object", "properties": { "id": { "description": "An identifier for the Credential Subject. Either `id` or at least one `identifier` MUST be supplied.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "AchievementSubject" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'AchievementSubject'.", "$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" } }, "activityEndDate": { "description": "The datetime the activity ended.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "activityStartDate": { "description": "The datetime the activity started.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "creditsEarned": { "description": "The number of credits earned, generally in semester or quarter credit hours. This field correlates with the Achievement `creditsAvailable` field.", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "achievement": { "$ref": "#/$defs/Achievement" }, "identifier": { "type": "array", "items": { "$ref": "#/$defs/IdentityObject" } }, "image": { "$ref": "#/$defs/Image" }, "licenseNumber": { "description": "The license number that was issued with this credential.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "narrative": { "description": "A narrative that connects multiple pieces of evidence. Likely only present at this location if evidence is a multi-value array.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" }, "result": { "type": "array", "items": { "$ref": "#/$defs/Result" } }, "role": { "description": "Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "source": { "$ref": "#/$defs/Profile" }, "term": { "description": "The academic term in which this assertion was achieved.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type", "achievement" ], "additionalProperties": true, "$defs": { "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": [ "name", "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 }, "Achievement": { "description": "A collection of information about the accomplishment recognized by the Assertion. Many assertions may be created corresponding to one Achievement.", "type": "object", "properties": { "id": { "description": "Unique URI for the Achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Achievement" ] }, "items": { "description": "The type MUST include the IRI 'Achievement'.", "$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" } }, "achievementType": { "description": "The type of achievement. This is an extensible vocabulary.", "$comment": "Origin: AchievementType (EnumExt); The type of achievement, for example 'Award' or 'Certification'. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.", "oneOf": [ { "type": "string", "enum": [ "Achievement", "ApprenticeshipCertificate", "Assessment", "Assignment", "AssociateDegree", "Award", "Badge", "BachelorDegree", "Certificate", "CertificateOfCompletion", "Certification", "CommunityService", "Competency", "Course", "CoCurricular", "Degree", "Diploma", "DoctoralDegree", "Fieldwork", "GeneralEducationDevelopment", "JourneymanCertificate", "LearningProgram", "License", "Membership", "ProfessionalDoctorate", "QualityAssuranceCredential", "MasterCertificate", "MasterDegree", "MicroCredential", "ResearchDoctorate", "SecondarySchoolDiploma" ] }, { "type": "string", "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+" } ] }, "creator": { "$ref": "#/$defs/Profile" }, "creditsAvailable": { "description": "Credit hours associated with this entity, or credit hours possible. For example 3.0.", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "criteria": { "$ref": "#/$defs/Criteria" }, "description": { "description": "A short description of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the Achievement. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "fieldOfStudy": { "description": "Category, subject, area of study, discipline, or general branch of knowledge. Examples include Business, Education, Psychology, and Technology.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "humanCode": { "description": "The code, generally human readable, associated with an achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "image": { "$ref": "#/$defs/Image" }, "inLanguage": { "description": "The language of the achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "name": { "description": "The name of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "related": { "type": "array", "items": { "$ref": "#/$defs/Related" } }, "resultDescription": { "type": "array", "items": { "$ref": "#/$defs/ResultDescription" } }, "specialization": { "description": "Name given to the focus, concentration, or specific area of study defined in the achievement. Examples include 'Entrepreneurship', 'Technical Communication', and 'Finance'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "tag": { "type": "array", "items": { "description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "version": { "description": "The version property allows issuers to set a version string for an Achievement. This is particularly useful when replacing a previous version with an update.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type", "criteria", "description", "name" ], "additionalProperties": true }, "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" ] }, { "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 }, "Criteria": { "description": "Descriptive metadata about the achievements necessary to be recognized with an assertion of a particular achievement. This data is added to the Achievement class so that it may be rendered when the achievement assertion is displayed, instead of simply a link to human-readable criteria external to the achievement. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether. Criteria is used to allow would-be recipients to learn what is required of them to be recognized with an assertion of a particular achievement. It is also used after the assertion is awarded to a recipient to let those inspecting earned achievements know the general requirements that the recipients met in order to earn it.", "type": "object", "properties": { "id": { "description": "The URI of a webpage that describes in a human-readable format the criteria for the achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "narrative": { "description": "A narrative of what is needed to earn the achievement. Markdown is allowed.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [], "additionalProperties": true }, "EndorsementCredential": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "CredentialStatus": { "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "IdentifierEntry": { "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "additionalProperties": false }, "Proof": { "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "RefreshService": { "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Image": { "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": false }, "EndorsementSubject": { "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Result": { "description": "Describes a result that was achieved.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Result" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Result'.", "$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" } }, "achievedLevel": { "description": "If the result represents an achieved rubric criterion level (e.g. Mastered), the value is the `id` of the RubricCriterionLevel in linked ResultDescription.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "alignment": { "type": "array", "items": { "$ref": "#/$defs/Alignment" } }, "resultDescription": { "description": "An achievement can have many result descriptions describing possible results. The value of `resultDescription` is the `id` of the result description linked to this result. The linked result description must be in the achievement that is being asserted.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "status": { "description": "The status of the achievement. Required if `resultType` of the linked ResultDescription is Status.", "$comment": "Origin: ResultStatusType (Enumeration); Defined vocabulary to convey the status of an achievement.", "type": "string", "enum": [ "Completed", "Enrolled", "Failed", "InProgress", "OnHold", "Provisional", "Withdrew" ] }, "value": { "description": "A string representing the result of the performance, or demonstration, of the achievement. For example, 'A' if the recipient received an A grade in class.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "Context": { "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "$comment": "Origin: Map (Unordered); A map representing an object with unknown, arbitrary properties", "type": "object" }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } ] }, "TermsOfUse": { "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "additionalProperties": true }, "ProfileRef": { "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, { "$ref": "#/$defs/Profile" } ] }, "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 }, "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 }, "Related": { "description": "Identifies a related achievement.", "type": "object", "properties": { "id": { "description": "The related achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Related" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Related'.", "$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" } }, "inLanguage": { "description": "The language of the related achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "version": { "description": "The version of the related achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Profile": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Address": { "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true }, "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }, "CredentialSchema": { "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true } } }
An address for the described entity.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_address-jsonschema1.json", "title": "JSON Schema for the Address class.", "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true, "$defs": { "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true } } }
Describes an alignment between an achievement and a node in an educational framework.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_alignment-jsonschema1.json", "title": "JSON Schema for the Alignment class.", "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" ] }, { "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 }
Descriptive metadata about the achievements necessary to be recognized with an assertion of a particular achievement. This data is added to the Achievement class so that it may be rendered when the achievement assertion is displayed, instead of simply a link to human-readable criteria external to the achievement. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether. Criteria is used to allow would-be recipients to learn what is required of them to be recognized with an assertion of a particular achievement. It is also used after the assertion is awarded to a recipient to let those inspecting earned achievements know the general requirements that the recipients met in order to earn it.
id
or narrative
fields.{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_criteria-jsonschema1.json", "title": "JSON Schema for the Criteria class.", "description": "Descriptive metadata about the achievements necessary to be recognized with an assertion of a particular achievement. This data is added to the Achievement class so that it may be rendered when the achievement assertion is displayed, instead of simply a link to human-readable criteria external to the achievement. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether. Criteria is used to allow would-be recipients to learn what is required of them to be recognized with an assertion of a particular achievement. It is also used after the assertion is awarded to a recipient to let those inspecting earned achievements know the general requirements that the recipients met in order to earn it.", "type": "object", "properties": { "id": { "description": "The URI of a webpage that describes in a human-readable format the criteria for the achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "narrative": { "description": "A narrative of what is needed to earn the achievement. Markdown is allowed.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [], "additionalProperties": true }
A verifiable credential that asserts a claim about an entity. As described in § 8. Proofs (Signatures), at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the proof
property.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential-jsonschema1.json", "title": "JSON Schema for the EndorsementCredential class.", "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true, "$defs": { "Context": { "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "$comment": "Origin: Map (Unordered); A map representing an object with unknown, arbitrary properties", "type": "object" }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } ] }, "TermsOfUse": { "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "additionalProperties": true }, "CredentialStatus": { "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "ProfileRef": { "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, { "$ref": "#/$defs/Profile" } ] }, "Proof": { "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "RefreshService": { "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "EndorsementSubject": { "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Profile": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "EndorsementCredential": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "IdentifierEntry": { "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "additionalProperties": false }, "Image": { "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": false }, "Address": { "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true }, "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }, "CredentialSchema": { "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true } } }
A collection of information about the subject of the endorsement.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementsubject-jsonschema1.json", "title": "JSON Schema for the EndorsementSubject class.", "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }
Descriptive metadata about evidence related to the achievement assertion. Each instance of the evidence class present in an assertion corresponds to one entity, though a single entry can describe a set of items collectively. There may be multiple evidence entries referenced from an assertion. The narrative property is also in scope of the assertion class to provide an overall description of the achievement related to the assertion in rich text. It is used here to provide a narrative of achievement of the specific entity described. If both the description and narrative properties are present, displayers can assume the narrative value goes into more detail and is not simply a recapitulation of description.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_evidence-jsonschema1.json", "title": "JSON Schema for the Evidence class.", "description": "Descriptive metadata about evidence related to the achievement assertion. Each instance of the evidence class present in an assertion corresponds to one entity, though a single entry can describe a set of items collectively. There may be multiple evidence entries referenced from an assertion. The narrative property is also in scope of the assertion class to provide an overall description of the achievement related to the assertion in rich text. It is used here to provide a narrative of achievement of the specific entity described. If both the description and narrative properties are present, displayers can assume the narrative value goes into more detail and is not simply a recapitulation of description.", "type": "object", "properties": { "id": { "description": "The URL of a webpage presenting evidence of achievement or the evidence encoded as a Data URI. The schema of the webpage is undefined.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Evidence" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Evidence'.", "$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" } }, "narrative": { "description": "A narrative that describes the evidence and process of achievement that led to an assertion.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" }, "name": { "description": "A descriptive title of the evidence.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "A longer description of the evidence.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "genre": { "description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "audience": { "description": "A description of the intended audience for a piece of evidence.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }
The geographic coordinates of a location.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_geocoordinates-jsonschema1.json", "title": "JSON Schema for the GeoCoordinates class.", "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_identifierentry-jsonschema1.json", "title": "JSON Schema for the IdentifierEntry class.", "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "additionalProperties": false }
A collection of information about the recipient of an achievement.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_identityobject-jsonschema1.json", "title": "JSON Schema for the IdentityObject class.", "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": [ "name", "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 }
Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_image-jsonschema1.json", "title": "JSON Schema for the Image class.", "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": false }
A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_profile-jsonschema1.json", "title": "JSON Schema for the Profile class.", "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true, "$defs": { "EndorsementCredential": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "CredentialStatus": { "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "IdentifierEntry": { "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "additionalProperties": false }, "Proof": { "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "RefreshService": { "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Image": { "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": false }, "EndorsementSubject": { "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Context": { "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "$comment": "Origin: Map (Unordered); A map representing an object with unknown, arbitrary properties", "type": "object" }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } ] }, "TermsOfUse": { "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "additionalProperties": true }, "ProfileRef": { "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, { "$ref": "#/$defs/Profile" } ] }, "Address": { "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true }, "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }, "Profile": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "CredentialSchema": { "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true } } }
Describes a result that was achieved.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_result-jsonschema1.json", "title": "JSON Schema for the Result class.", "description": "Describes a result that was achieved.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Result" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Result'.", "$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" } }, "achievedLevel": { "description": "If the result represents an achieved rubric criterion level (e.g. Mastered), the value is the `id` of the RubricCriterionLevel in linked ResultDescription.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "alignment": { "type": "array", "items": { "$ref": "#/$defs/Alignment" } }, "resultDescription": { "description": "An achievement can have many result descriptions describing possible results. The value of `resultDescription` is the `id` of the result description linked to this result. The linked result description must be in the achievement that is being asserted.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "status": { "description": "The status of the achievement. Required if `resultType` of the linked ResultDescription is Status.", "$comment": "Origin: ResultStatusType (Enumeration); Defined vocabulary to convey the status of an achievement.", "type": "string", "enum": [ "Completed", "Enrolled", "Failed", "InProgress", "OnHold", "Provisional", "Withdrew" ] }, "value": { "description": "A string representing the result of the performance, or demonstration, of the achievement. For example, 'A' if the recipient received an A grade in class.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type" ], "additionalProperties": true, "$defs": { "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" ] }, { "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 } } }
Describes a possible achievement result.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_resultdescription-jsonschema1.json", "title": "JSON Schema for the ResultDescription class.", "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, "$defs": { "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" ] }, { "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 } } }
Describes a rubric criterion level.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_rubriccriterionlevel-jsonschema1.json", "title": "JSON Schema for the RubricCriterionLevel class.", "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, "$defs": { "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" ] }, { "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 } } }
A Verifiable Credential as defined in the [VC-DATA-MODEL-2.0]. As described in § 8. Proofs (Signatures), at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the proof
property.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_verifiablecredential-jsonschema1.json", "title": "JSON Schema for the VerifiableCredential class.", "description": "A Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]]. As described in [[[#proofs-signatures]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 1, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential'.", "$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" } }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "credentialSubject": { "$ref": "#/$defs/CredentialSubject" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "issuer", "validFrom", "credentialSubject" ], "additionalProperties": true, "$defs": { "Context": { "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "$comment": "Origin: Map (Unordered); A map representing an object with unknown, arbitrary properties", "type": "object" }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } ] }, "TermsOfUse": { "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "additionalProperties": true }, "CredentialSubject": { "description": "Claims about the credential subject. Maps to Credential Subject as defined in the [[VC-DATA-MODEL-2.0]].", "type": "object", "properties": { "id": { "description": "The identity of the credential subject.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [], "additionalProperties": true }, "CredentialStatus": { "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "ProfileRef": { "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, { "$ref": "#/$defs/Profile" } ] }, "Proof": { "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "RefreshService": { "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Profile": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "EndorsementCredential": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "IdentifierEntry": { "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "additionalProperties": false }, "Image": { "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": false }, "EndorsementSubject": { "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Address": { "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true }, "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }, "CredentialSchema": { "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true } } }
A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_profileref-jsonschema1.json", "title": "JSON Schema for the ProfileRef class.", "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "object", "properties": {}, "required": [], "additionalProperties": false }, { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true } ], "$defs": { "EndorsementCredential": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "CredentialStatus": { "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "IdentifierEntry": { "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "additionalProperties": false }, "Proof": { "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "RefreshService": { "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Image": { "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": false }, "EndorsementSubject": { "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Context": { "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "$comment": "Origin: Map (Unordered); A map representing an object with unknown, arbitrary properties", "type": "object" }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } ] }, "TermsOfUse": { "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "additionalProperties": true }, "ProfileRef": { "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, { "$ref": "#/$defs/Profile" } ] }, "Address": { "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true }, "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }, "Profile": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "CredentialSchema": { "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true } } }
Identify the type and location of a data schema.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_credentialschema-jsonschema1.json", "title": "JSON Schema for the CredentialSchema class.", "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }
The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_credentialstatus-jsonschema1.json", "title": "JSON Schema for the CredentialStatus class.", "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }
Claims about the credential subject. Maps to Credential Subject as defined in the [VC-DATA-MODEL-2.0].
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_credentialsubject-jsonschema1.json", "title": "JSON Schema for the CredentialSubject class.", "description": "Claims about the credential subject. Maps to Credential Subject as defined in the [[VC-DATA-MODEL-2.0]].", "type": "object", "properties": { "id": { "description": "The identity of the credential subject.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [], "additionalProperties": true }
A JSON-LD Linked Data proof.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_proof-jsonschema1.json", "title": "JSON Schema for the Proof class.", "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }
The information in RefreshService is used to refresh the verifiable credential.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_refreshservice-jsonschema1.json", "title": "JSON Schema for the RefreshService class.", "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }
Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_termsofuse-jsonschema1.json", "title": "JSON Schema for the TermsOfUse class.", "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "additionalProperties": true }
JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_context-jsonschema1.json", "title": "JSON Schema for the Context class.", "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "type": "object", "properties": {}, "required": [], "additionalProperties": true }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "object", "properties": {}, "required": [], "additionalProperties": false } ] }
A map representing an object with unknown, arbitrary properties
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_map-jsonschema1.json", "title": "JSON Schema for the Map class.", "description": "A map representing an object with unknown, arbitrary properties", "type": "object", "properties": {}, "required": [], "additionalProperties": true }
The type of achievement, for example 'Award' or 'Certification'. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementtype-jsonschema1.json", "title": "JSON Schema for the AchievementType class.", "description": "The type of achievement, for example 'Award' or 'Certification'. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.", "type": "object", "properties": { "Achievement": { "description": "Represents a generic achievement.", "$comment": "Origin: BaseTerm (DerivedType); 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`.", "type": "string" }, "ApprenticeshipCertificate": { "description": "Credential earned through work-based learning and earn-and-learn models that meet standards and are applicable to industry trades and professions. This is an exact match of `ApprenticeshipCertificate` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Assessment": { "description": "Direct, indirect, formative, and summative evaluation or estimation of the nature, ability, or quality of an entity, performance, or outcome of an action. This is an exact match of `Assessment` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Assignment": { "description": "Represents the result of a curricular, or co-curricular assignment or exam.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "AssociateDegree": { "description": "College/university award for students typically completing the first one to two years of post secondary school education. Equivalent to an award at UNESCO ISCED 2011, Level 5. This is an exact match of `AssociateDegree` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Award": { "description": "Represents an award.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Badge": { "description": "Visual symbol containing verifiable claims in accordance with the Open Badges specification and delivered digitally. This is an exact match of `Badge` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "BachelorDegree": { "description": "College/university award for students typically completing three to five years of education where course work and activities advance skills beyond those of the first one to two years of college/university study. Equivalent to an award at UNESCO ISCED 2011, Level 6. Use for 5-year cooperative (work-study) programs. A cooperative plan provides for alternate class attendance and employment in business, industry, or government; thus, it allows students to combine actual work experience with their college studies. Also includes bachelor's degrees in which the normal 4 years of work are completed in 3 years. This is an exact match of `BachelorDegree` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Certificate": { "description": "Credential that designates requisite knowledge and skills of an occupation, profession, or academic program. This is an exact match of `Certificate` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "CertificateOfCompletion": { "description": "Credential that acknowledges completion of an assignment, training or other activity. A record of the activity may or may not exist, and the credential may or may not be designed as preparation for another resource such as a credential, assessment, or learning opportunity. This is an exact match of `CertificateOfCompletion` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Certification": { "description": "Time-limited, revocable, renewable credential awarded by an authoritative body for demonstrating the knowledge, skills, and abilities to perform specific tasks or an occupation. Certifications can typically be revoked if not renewed, for a violation of a code of ethics (if applicable) or proven incompetence after due process. Description of revocation criteria for a specific Certification should be defined using Revocation Profile. This is an exact match of `Certification` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "CommunityService": { "description": "Represents community service.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Competency": { "description": "Measurable or observable knowledge, skill, or ability necessary to successful performance of a person. This is an exact match of `Competency` in [[CTDL-ASN-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Course": { "description": "Represents a course completion.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "CoCurricular": { "description": "Represents a co-curricular activity.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Degree": { "description": "Academic credential conferred upon completion of a program or course of study, typically over multiple years at a college or university. This is an exact match of `Degree` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Diploma": { "description": "Credential awarded by educational institutions for successful completion of a course of study or its equivalent. This is an exact match of `Diploma` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "DoctoralDegree": { "description": "Highest credential award for students who have completed both a bachelor's degree and a master's degree or their equivalent as well as independent research and/or a significant project or paper. Equivalent to UNESCO ISCED, Level 8. This is an exact match of `DoctoralDegree` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Fieldwork": { "description": "Represents practical activities that are done away school, college, or place of work. Includes internships and practicums.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "GeneralEducationDevelopment": { "description": "(GED) Credential awarded by examination that demonstrates that an individual has acquired secondary school-level academic skills. Equivalent to a secondary school diploma, based on passing a state- or province-selected examination such as GED, HiSET, or TASC; or to an award at UNESCO ISCED 2011 Levels 2 or 3. This is an exact match of `GeneralEducationDevelopment` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "JourneymanCertificate": { "description": "Credential awarded to skilled workers on successful completion of an apprenticeship in industry trades and professions. This is an exact match of `JourneymanCertificate` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "LearningProgram": { "description": "Set of learning opportunities that leads to an outcome, usually a credential like a degree or certificate. This is an exact match of `LearningProgram` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "License": { "description": "Credential awarded by a government agency or other authorized organization that constitutes legal authority to do a specific job and/or utilize a specific item, system or infrastructure and are typically earned through some combination of degree or certificate attainment, certifications, assessments, work experience, and/or fees, and are time-limited and must be renewed periodically. This is an exact match of `License` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Membership": { "description": "Represents membership.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "ProfessionalDoctorate": { "description": "Doctoral degree conferred upon completion of a program providing the knowledge and skills for the recognition, credential, or license required for professional practice. Equivalent to an award at UNESCO ISCED 2011, Level 8. This is an exact match of `ProfessionalDoctorate` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "QualityAssuranceCredential": { "description": "Credential assuring that an organization, program, or awarded credential meets prescribed requirements and may include development and administration of qualifying examinations. This is an exact match of `QualityAssuranceCredential` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "MasterCertificate": { "description": "Credential awarded upon demonstration through apprenticeship of the highest level of skills and performance in industry trades and professions. This is an exact match of `MasterCertificate` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "MasterDegree": { "description": "Credential awarded for a graduate level course of study where course work and activities advance skills beyond those of the bachelor's degree or its equivalent. Equivalent to an award at UNESCO ISCED 2011, Level 7. This is an exact match of `MasterDegree` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "MicroCredential": { "description": "Credential that addresses a subset of field-specific knowledge, skills, or competencies; often developmental with relationships to other micro-credentials and field credentials. This is an exact match of `MicroCredential` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "ResearchDoctorate": { "description": "Doctoral degree conferred for advanced work beyond the master level, including the preparation and defense of a thesis or dissertation based on original research, or the planning and execution of an original project demonstrating substantial artistic or scholarly achievement. Equivalent to an award at UNESCO ISCED 2011, Level 8. This is an exact match of `ResearchDoctorate` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "SecondarySchoolDiploma": { "description": "Diploma awarded by secondary education institutions for successful completion of a secondary school program of study. Equivalent to an award at UNESCO ISCED 2011 Levels 2 or 3. This is an exact match of `SecondarySchoolDiploma` in [[CTDL-TERMS]].", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" } }, "required": [ "Achievement", "ApprenticeshipCertificate", "Assessment", "Assignment", "AssociateDegree", "Award", "Badge", "BachelorDegree", "Certificate", "CertificateOfCompletion", "Certification", "CommunityService", "Competency", "Course", "CoCurricular", "Degree", "Diploma", "DoctoralDegree", "Fieldwork", "GeneralEducationDevelopment", "JourneymanCertificate", "LearningProgram", "License", "Membership", "ProfessionalDoctorate", "QualityAssuranceCredential", "MasterCertificate", "MasterDegree", "MicroCredential", "ResearchDoctorate", "SecondarySchoolDiploma" ], "additionalProperties": false }
The type of the alignment target node in the target framework.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_alignmenttargettype-jsonschema1.json", "title": "JSON Schema for the AlignmentTargetType class.", "description": "The type of the alignment target node in the target framework.", "type": "object", "properties": { "ceasn:Competency": { "description": "An alignment to a CTDL-ASN/CTDL competency published by Credential Engine.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "ceterms:Credential": { "description": "An alignment to a CTDL Credential published by Credential Engine.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "CFItem": { "description": "An alignment to a CASE Framework Item.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "CFRubric": { "description": "An alignment to a CASE Framework Rubric.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "CFRubricCriterion": { "description": "An alignment to a CASE Framework Rubric Criterion.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "CFRubricCriterionLevel": { "description": "An alignment to a CASE Framework Rubric Criterion Level.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "CTDL": { "description": "An alignment to a Credential Engine Item.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" } }, "required": [ "ceasn:Competency", "ceterms:Credential", "CFItem", "CFRubric", "CFRubricCriterion", "CFRubricCriterionLevel", "CTDL" ], "additionalProperties": false }
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_identifiertypeenum-jsonschema1.json", "title": "JSON Schema for the IdentifierTypeEnum class.", "description": "No description supplied.", "type": "object", "properties": { "name": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "sourcedId": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "systemId": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "productId": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "userName": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "accountId": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "emailAddress": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "nationalIdentityNumber": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "isbn": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "issn": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "lisSourcedId": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "oneRosterSourcedId": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "sisSourcedId": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "ltiContextId": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "ltiDeploymentId": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "ltiToolId": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "ltiPlatformId": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "ltiUserId": { "description": "No description supplied.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "identifier": { "description": "No description supplied.", "$comment": "Origin: BaseTerm (DerivedType); 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`.", "type": "string" } }, "required": [], "additionalProperties": false }
The type of result. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_resulttype-jsonschema1.json", "title": "JSON Schema for the ResultType class.", "description": "The type of result. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.", "type": "object", "properties": { "GradePointAverage": { "description": "The result is a grade point average.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "LetterGrade": { "description": "The result is a letter grade.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Percent": { "description": "The result is a percent score.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "PerformanceLevel": { "description": "The result is a performance level.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "PredictedScore": { "description": "The result is a predicted score.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "RawScore": { "description": "The result is a raw score.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Result": { "description": "A generic result.", "$comment": "Origin: BaseTerm (DerivedType); 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`.", "type": "string" }, "RubricCriterion": { "description": "The result is from a rubric criterion.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "RubricCriterionLevel": { "description": "The result is a rubric criterion level.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "RubricScore": { "description": "The result represents a rubric score with both a name and a numeric value.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "ScaledScore": { "description": "The result is a scaled score.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Status": { "description": "The result conveys the status of the achievement.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" } }, "required": [ "GradePointAverage", "LetterGrade", "Percent", "PerformanceLevel", "PredictedScore", "RawScore", "Result", "RubricCriterion", "RubricCriterionLevel", "RubricScore", "ScaledScore", "Status" ], "additionalProperties": false }
Defined vocabulary to convey the status of an achievement.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_resultstatustype-jsonschema1.json", "title": "JSON Schema for the ResultStatusType class.", "description": "Defined vocabulary to convey the status of an achievement.", "type": "object", "properties": { "Completed": { "description": "The learner has successfully completed the achievement. This is the default status if no status result is included.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Enrolled": { "description": "The learner is enrolled in the activity described by the achievement.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Failed": { "description": "The learner has unsuccessfully completed the achievement.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "InProgress": { "description": "The learner has started progress in the activity described by the achievement.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "OnHold": { "description": "The learner has completed the activity described by the achievement, but successful completion has not been awarded, typically for administrative reasons.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Provisional": { "description": "The learner has completed the activity described by the achievement, but the completed result has not yet been confirmed.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "Withdrew": { "description": "The learner withdrew from the activity described by the achievement before completion.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" } }, "required": [ "Completed", "Enrolled", "Failed", "InProgress", "OnHold", "Provisional", "Withdrew" ], "additionalProperties": false }
AnyAchievementCredential represents an AchievementCredential that might be built using [VC-DATA-MODEL] or [VC-DATA-MODEL-2.0]. The scope of this class is only for verification purposes. It is not intended to be used in the creation of new credentials, where the § B.1.2 AchievementCredential class MUST be used.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_anyachievementcredential-jsonschema1.json", "title": "JSON Schema for the AnyAchievementCredential class.", "description": "AnyAchievementCredential represents an AchievementCredential that might be built using [[VC-DATA-MODEL]] or [[VC-DATA-MODEL-2.0]]. The scope of this class is only for verification purposes. It is not intended to be used in the creation of new credentials, where the [[[#achievementcredential]]] class MUST be used.", "oneOf": [ { "description": "AchievementCredentials are representations of an awarded achievement, used to share information about a achievement belonging to one earner. Maps to a Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]]. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'AchievementCredential' or the URI 'OpenBadgeCredential'.", "$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": [ "AchievementCredential", "OpenBadgeCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'AchievementCredential' or the URI 'OpenBadgeCredential'.", "$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" } } ] }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "image": { "$ref": "#/$defs/Image" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "credentialSubject": { "$ref": "#/$defs/AchievementSubject" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the credential, and the achievement and profiles in the credential. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "evidence": { "type": "array", "items": { "$ref": "#/$defs/Evidence" } }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "id", "type", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, { "description": "AchievementCredentials are representations of an awarded achievement, used to share information about a achievement belonging to one earner. Maps to a Verifiable Credential as defined in the [[VC-DATA-MODEL]]. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/2018/credentials/v1" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'AchievementCredential' or the URI 'OpenBadgeCredential'.", "$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": [ "AchievementCredential", "OpenBadgeCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'AchievementCredential' or the URI 'OpenBadgeCredential'.", "$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" } } ] }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "image": { "$ref": "#/$defs/Image" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "credentialSubject": { "$ref": "#/$defs/AchievementSubjectv1p1" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredentialv1p1" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the credential, and the achievement and profiles in the credential. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "evidence": { "type": "array", "items": { "$ref": "#/$defs/Evidence" } }, "issuer": { "$ref": "#/$defs/Profilev1p1" }, "issuanceDate": { "description": "Timestamp of when the credential was issued.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "expirationDate": { "description": "If the credential has some notion of expiry, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered expired.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "id", "type", "name", "credentialSubject", "issuer", "issuanceDate" ], "additionalProperties": true } ], "$defs": { "CredentialStatus": { "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "AchievementSubject": { "description": "A collection of information about the recipient of an achievement. Maps to Credential Subject in [[VC-DATA-MODEL-2.0]].", "type": "object", "properties": { "id": { "description": "An identifier for the Credential Subject. Either `id` or at least one `identifier` MUST be supplied.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "AchievementSubject" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'AchievementSubject'.", "$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" } }, "activityEndDate": { "description": "The datetime the activity ended.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "activityStartDate": { "description": "The datetime the activity started.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "creditsEarned": { "description": "The number of credits earned, generally in semester or quarter credit hours. This field correlates with the Achievement `creditsAvailable` field.", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "achievement": { "$ref": "#/$defs/Achievement" }, "identifier": { "type": "array", "items": { "$ref": "#/$defs/IdentityObject" } }, "image": { "$ref": "#/$defs/Image" }, "licenseNumber": { "description": "The license number that was issued with this credential.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "narrative": { "description": "A narrative that connects multiple pieces of evidence. Likely only present at this location if evidence is a multi-value array.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" }, "result": { "type": "array", "items": { "$ref": "#/$defs/Result" } }, "role": { "description": "Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "source": { "$ref": "#/$defs/Profile" }, "term": { "description": "The academic term in which this assertion was achieved.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type", "achievement" ], "additionalProperties": true }, "Achievement": { "description": "A collection of information about the accomplishment recognized by the Assertion. Many assertions may be created corresponding to one Achievement.", "type": "object", "properties": { "id": { "description": "Unique URI for the Achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Achievement" ] }, "items": { "description": "The type MUST include the IRI 'Achievement'.", "$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" } }, "achievementType": { "description": "The type of achievement. This is an extensible vocabulary.", "$comment": "Origin: AchievementType (EnumExt); The type of achievement, for example 'Award' or 'Certification'. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.", "oneOf": [ { "type": "string", "enum": [ "Achievement", "ApprenticeshipCertificate", "Assessment", "Assignment", "AssociateDegree", "Award", "Badge", "BachelorDegree", "Certificate", "CertificateOfCompletion", "Certification", "CommunityService", "Competency", "Course", "CoCurricular", "Degree", "Diploma", "DoctoralDegree", "Fieldwork", "GeneralEducationDevelopment", "JourneymanCertificate", "LearningProgram", "License", "Membership", "ProfessionalDoctorate", "QualityAssuranceCredential", "MasterCertificate", "MasterDegree", "MicroCredential", "ResearchDoctorate", "SecondarySchoolDiploma" ] }, { "type": "string", "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+" } ] }, "creator": { "$ref": "#/$defs/Profile" }, "creditsAvailable": { "description": "Credit hours associated with this entity, or credit hours possible. For example 3.0.", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "criteria": { "$ref": "#/$defs/Criteria" }, "description": { "description": "A short description of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the Achievement. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "fieldOfStudy": { "description": "Category, subject, area of study, discipline, or general branch of knowledge. Examples include Business, Education, Psychology, and Technology.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "humanCode": { "description": "The code, generally human readable, associated with an achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "image": { "$ref": "#/$defs/Image" }, "inLanguage": { "description": "The language of the achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "name": { "description": "The name of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "related": { "type": "array", "items": { "$ref": "#/$defs/Related" } }, "resultDescription": { "type": "array", "items": { "$ref": "#/$defs/ResultDescription" } }, "specialization": { "description": "Name given to the focus, concentration, or specific area of study defined in the achievement. Examples include 'Entrepreneurship', 'Technical Communication', and 'Finance'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "tag": { "type": "array", "items": { "description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "version": { "description": "The version property allows issuers to set a version string for an Achievement. This is particularly useful when replacing a previous version with an update.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type", "criteria", "description", "name" ], "additionalProperties": true }, "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" ] }, { "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 }, "Criteria": { "description": "Descriptive metadata about the achievements necessary to be recognized with an assertion of a particular achievement. This data is added to the Achievement class so that it may be rendered when the achievement assertion is displayed, instead of simply a link to human-readable criteria external to the achievement. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether. Criteria is used to allow would-be recipients to learn what is required of them to be recognized with an assertion of a particular achievement. It is also used after the assertion is awarded to a recipient to let those inspecting earned achievements know the general requirements that the recipients met in order to earn it.", "type": "object", "properties": { "id": { "description": "The URI of a webpage that describes in a human-readable format the criteria for the achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "narrative": { "description": "A narrative of what is needed to earn the achievement. Markdown is allowed.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [], "additionalProperties": true }, "IdentifierEntry": { "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "additionalProperties": false }, "EndorsementCredentialv1p1": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/2018/credentials/v1" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/Profilev1p1" }, "issuanceDate": { "description": "Timestamp of when the credential was issued.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "expirationDate": { "description": "If the credential has some notion of expiry, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered expired.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "issuanceDate" ], "additionalProperties": true }, "Proof": { "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "RefreshService": { "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Image": { "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": false }, "EndorsementSubject": { "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Profilev1p1": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredentialv1p1" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Result": { "description": "Describes a result that was achieved.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Result" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Result'.", "$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" } }, "achievedLevel": { "description": "If the result represents an achieved rubric criterion level (e.g. Mastered), the value is the `id` of the RubricCriterionLevel in linked ResultDescription.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "alignment": { "type": "array", "items": { "$ref": "#/$defs/Alignment" } }, "resultDescription": { "description": "An achievement can have many result descriptions describing possible results. The value of `resultDescription` is the `id` of the result description linked to this result. The linked result description must be in the achievement that is being asserted.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "status": { "description": "The status of the achievement. Required if `resultType` of the linked ResultDescription is Status.", "$comment": "Origin: ResultStatusType (Enumeration); Defined vocabulary to convey the status of an achievement.", "type": "string", "enum": [ "Completed", "Enrolled", "Failed", "InProgress", "OnHold", "Provisional", "Withdrew" ] }, "value": { "description": "A string representing the result of the performance, or demonstration, of the achievement. For example, 'A' if the recipient received an A grade in class.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "Context": { "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "$comment": "Origin: Map (Unordered); A map representing an object with unknown, arbitrary properties", "type": "object" }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } ] }, "TermsOfUse": { "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "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": [ "name", "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 }, "Evidence": { "description": "Descriptive metadata about evidence related to the achievement assertion. Each instance of the evidence class present in an assertion corresponds to one entity, though a single entry can describe a set of items collectively. There may be multiple evidence entries referenced from an assertion. The narrative property is also in scope of the assertion class to provide an overall description of the achievement related to the assertion in rich text. It is used here to provide a narrative of achievement of the specific entity described. If both the description and narrative properties are present, displayers can assume the narrative value goes into more detail and is not simply a recapitulation of description.", "type": "object", "properties": { "id": { "description": "The URL of a webpage presenting evidence of achievement or the evidence encoded as a Data URI. The schema of the webpage is undefined.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Evidence" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Evidence'.", "$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" } }, "narrative": { "description": "A narrative that describes the evidence and process of achievement that led to an assertion.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" }, "name": { "description": "A descriptive title of the evidence.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "A longer description of the evidence.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "genre": { "description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "audience": { "description": "A description of the intended audience for a piece of evidence.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "EndorsementCredential": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "ProfileRef": { "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, { "$ref": "#/$defs/Profile" } ] }, "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 }, "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 }, "AchievementSubjectv1p1": { "description": "A collection of information about the recipient of an achievement. Maps to Credential Subject in [[VC-DATA-MODEL-2.0]].", "type": "object", "properties": { "id": { "description": "An identifier for the Credential Subject. Either `id` or at least one `identifier` MUST be supplied.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "AchievementSubject" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'AchievementSubject'.", "$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" } }, "activityEndDate": { "description": "The datetime the activity ended.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "activityStartDate": { "description": "The datetime the activity started.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "creditsEarned": { "description": "The number of credits earned, generally in semester or quarter credit hours. This field correlates with the Achievement `creditsAvailable` field.", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "achievement": { "$ref": "#/$defs/Achievementv1p1" }, "identifier": { "type": "array", "items": { "$ref": "#/$defs/IdentityObject" } }, "image": { "$ref": "#/$defs/Image" }, "licenseNumber": { "description": "The license number that was issued with this credential.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "narrative": { "description": "A narrative that connects multiple pieces of evidence. Likely only present at this location if evidence is a multi-value array.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" }, "result": { "type": "array", "items": { "$ref": "#/$defs/Result" } }, "role": { "description": "Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "source": { "$ref": "#/$defs/Profilev1p1" }, "term": { "description": "The academic term in which this assertion was achieved.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type", "achievement" ], "additionalProperties": false }, "Achievementv1p1": { "description": "A collection of information about the accomplishment recognized by the Assertion. Many assertions may be created corresponding to one Achievement.", "type": "object", "properties": { "id": { "description": "Unique URI for the Achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Achievement" ] }, "items": { "description": "No description supplied.", "$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" } }, "achievementType": { "description": "The type of achievement. This is an extensible vocabulary.", "$comment": "Origin: AchievementType (EnumExt); The type of achievement, for example 'Award' or 'Certification'. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.", "oneOf": [ { "type": "string", "enum": [ "Achievement", "ApprenticeshipCertificate", "Assessment", "Assignment", "AssociateDegree", "Award", "Badge", "BachelorDegree", "Certificate", "CertificateOfCompletion", "Certification", "CommunityService", "Competency", "Course", "CoCurricular", "Degree", "Diploma", "DoctoralDegree", "Fieldwork", "GeneralEducationDevelopment", "JourneymanCertificate", "LearningProgram", "License", "Membership", "ProfessionalDoctorate", "QualityAssuranceCredential", "MasterCertificate", "MasterDegree", "MicroCredential", "ResearchDoctorate", "SecondarySchoolDiploma" ] }, { "type": "string", "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+" } ] }, "creator": { "$ref": "#/$defs/Profilev1p1" }, "creditsAvailable": { "description": "Credit hours associated with this entity, or credit hours possible. For example 3.0.", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "criteria": { "$ref": "#/$defs/Criteria" }, "description": { "description": "A short description of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredentialv1p1" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the Achievement. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "fieldOfStudy": { "description": "Category, subject, area of study, discipline, or general branch of knowledge. Examples include Business, Education, Psychology, and Technology.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "humanCode": { "description": "The code, generally human readable, associated with an achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "image": { "$ref": "#/$defs/Image" }, "inLanguage": { "description": "The language of the achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "name": { "description": "The name of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "related": { "type": "array", "items": { "$ref": "#/$defs/Related" } }, "resultDescription": { "type": "array", "items": { "$ref": "#/$defs/ResultDescription" } }, "specialization": { "description": "Name given to the focus, concentration, or specific area of study defined in the achievement. Examples include 'Entrepreneurship', 'Technical Communication', and 'Finance'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "tag": { "type": "array", "items": { "description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "version": { "description": "The version property allows issuers to set a version string for an Achievement. This is particularly useful when replacing a previous version with an update.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type", "criteria", "description", "name" ], "additionalProperties": true }, "Related": { "description": "Identifies a related achievement.", "type": "object", "properties": { "id": { "description": "The related achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Related" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Related'.", "$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" } }, "inLanguage": { "description": "The language of the related achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "version": { "description": "The version of the related achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Profile": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Address": { "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true }, "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }, "CredentialSchema": { "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true } } }
AchievementCredentials are representations of an awarded achievement, used to share information about a achievement belonging to one earner. Maps to a Verifiable Credential as defined in the [VC-DATA-MODEL]. As described in § 8. Proofs (Signatures), at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the proof
property.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredentialv1p1-jsonschema1.json", "title": "JSON Schema for the AchievementCredentialv1p1 class.", "description": "AchievementCredentials are representations of an awarded achievement, used to share information about a achievement belonging to one earner. Maps to a Verifiable Credential as defined in the [[VC-DATA-MODEL]]. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/2018/credentials/v1" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'AchievementCredential' or the URI 'OpenBadgeCredential'.", "$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": [ "AchievementCredential", "OpenBadgeCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'AchievementCredential' or the URI 'OpenBadgeCredential'.", "$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" } } ] }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "image": { "$ref": "#/$defs/Image" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "credentialSubject": { "$ref": "#/$defs/AchievementSubjectv1p1" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredentialv1p1" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the credential, and the achievement and profiles in the credential. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "evidence": { "type": "array", "items": { "$ref": "#/$defs/Evidence" } }, "issuer": { "$ref": "#/$defs/Profilev1p1" }, "issuanceDate": { "description": "Timestamp of when the credential was issued.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "expirationDate": { "description": "If the credential has some notion of expiry, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered expired.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "id", "type", "name", "credentialSubject", "issuer", "issuanceDate" ], "additionalProperties": true, "$defs": { "Context": { "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "$comment": "Origin: Map (Unordered); A map representing an object with unknown, arbitrary properties", "type": "object" }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } ] }, "TermsOfUse": { "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "additionalProperties": true }, "CredentialStatus": { "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Evidence": { "description": "Descriptive metadata about evidence related to the achievement assertion. Each instance of the evidence class present in an assertion corresponds to one entity, though a single entry can describe a set of items collectively. There may be multiple evidence entries referenced from an assertion. The narrative property is also in scope of the assertion class to provide an overall description of the achievement related to the assertion in rich text. It is used here to provide a narrative of achievement of the specific entity described. If both the description and narrative properties are present, displayers can assume the narrative value goes into more detail and is not simply a recapitulation of description.", "type": "object", "properties": { "id": { "description": "The URL of a webpage presenting evidence of achievement or the evidence encoded as a Data URI. The schema of the webpage is undefined.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Evidence" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Evidence'.", "$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" } }, "narrative": { "description": "A narrative that describes the evidence and process of achievement that led to an assertion.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" }, "name": { "description": "A descriptive title of the evidence.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "A longer description of the evidence.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "genre": { "description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "audience": { "description": "A description of the intended audience for a piece of evidence.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "EndorsementCredentialv1p1": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/2018/credentials/v1" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/Profilev1p1" }, "issuanceDate": { "description": "Timestamp of when the credential was issued.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "expirationDate": { "description": "If the credential has some notion of expiry, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered expired.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "issuanceDate" ], "additionalProperties": true }, "Proof": { "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "RefreshService": { "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Image": { "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": false }, "EndorsementSubject": { "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "AchievementSubjectv1p1": { "description": "A collection of information about the recipient of an achievement. Maps to Credential Subject in [[VC-DATA-MODEL-2.0]].", "type": "object", "properties": { "id": { "description": "An identifier for the Credential Subject. Either `id` or at least one `identifier` MUST be supplied.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "AchievementSubject" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'AchievementSubject'.", "$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" } }, "activityEndDate": { "description": "The datetime the activity ended.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "activityStartDate": { "description": "The datetime the activity started.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "creditsEarned": { "description": "The number of credits earned, generally in semester or quarter credit hours. This field correlates with the Achievement `creditsAvailable` field.", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "achievement": { "$ref": "#/$defs/Achievementv1p1" }, "identifier": { "type": "array", "items": { "$ref": "#/$defs/IdentityObject" } }, "image": { "$ref": "#/$defs/Image" }, "licenseNumber": { "description": "The license number that was issued with this credential.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "narrative": { "description": "A narrative that connects multiple pieces of evidence. Likely only present at this location if evidence is a multi-value array.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" }, "result": { "type": "array", "items": { "$ref": "#/$defs/Result" } }, "role": { "description": "Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "source": { "$ref": "#/$defs/Profilev1p1" }, "term": { "description": "The academic term in which this assertion was achieved.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type", "achievement" ], "additionalProperties": false }, "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": [ "name", "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 }, "Achievementv1p1": { "description": "A collection of information about the accomplishment recognized by the Assertion. Many assertions may be created corresponding to one Achievement.", "type": "object", "properties": { "id": { "description": "Unique URI for the Achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Achievement" ] }, "items": { "description": "No description supplied.", "$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" } }, "achievementType": { "description": "The type of achievement. This is an extensible vocabulary.", "$comment": "Origin: AchievementType (EnumExt); The type of achievement, for example 'Award' or 'Certification'. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.", "oneOf": [ { "type": "string", "enum": [ "Achievement", "ApprenticeshipCertificate", "Assessment", "Assignment", "AssociateDegree", "Award", "Badge", "BachelorDegree", "Certificate", "CertificateOfCompletion", "Certification", "CommunityService", "Competency", "Course", "CoCurricular", "Degree", "Diploma", "DoctoralDegree", "Fieldwork", "GeneralEducationDevelopment", "JourneymanCertificate", "LearningProgram", "License", "Membership", "ProfessionalDoctorate", "QualityAssuranceCredential", "MasterCertificate", "MasterDegree", "MicroCredential", "ResearchDoctorate", "SecondarySchoolDiploma" ] }, { "type": "string", "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+" } ] }, "creator": { "$ref": "#/$defs/Profilev1p1" }, "creditsAvailable": { "description": "Credit hours associated with this entity, or credit hours possible. For example 3.0.", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "criteria": { "$ref": "#/$defs/Criteria" }, "description": { "description": "A short description of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredentialv1p1" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the Achievement. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "fieldOfStudy": { "description": "Category, subject, area of study, discipline, or general branch of knowledge. Examples include Business, Education, Psychology, and Technology.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "humanCode": { "description": "The code, generally human readable, associated with an achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "image": { "$ref": "#/$defs/Image" }, "inLanguage": { "description": "The language of the achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "name": { "description": "The name of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "related": { "type": "array", "items": { "$ref": "#/$defs/Related" } }, "resultDescription": { "type": "array", "items": { "$ref": "#/$defs/ResultDescription" } }, "specialization": { "description": "Name given to the focus, concentration, or specific area of study defined in the achievement. Examples include 'Entrepreneurship', 'Technical Communication', and 'Finance'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "tag": { "type": "array", "items": { "description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "version": { "description": "The version property allows issuers to set a version string for an Achievement. This is particularly useful when replacing a previous version with an update.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type", "criteria", "description", "name" ], "additionalProperties": true }, "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" ] }, { "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 }, "Criteria": { "description": "Descriptive metadata about the achievements necessary to be recognized with an assertion of a particular achievement. This data is added to the Achievement class so that it may be rendered when the achievement assertion is displayed, instead of simply a link to human-readable criteria external to the achievement. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether. Criteria is used to allow would-be recipients to learn what is required of them to be recognized with an assertion of a particular achievement. It is also used after the assertion is awarded to a recipient to let those inspecting earned achievements know the general requirements that the recipients met in order to earn it.", "type": "object", "properties": { "id": { "description": "The URI of a webpage that describes in a human-readable format the criteria for the achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "narrative": { "description": "A narrative of what is needed to earn the achievement. Markdown is allowed.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [], "additionalProperties": true }, "IdentifierEntry": { "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "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 }, "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 }, "Related": { "description": "Identifies a related achievement.", "type": "object", "properties": { "id": { "description": "The related achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Related" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Related'.", "$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" } }, "inLanguage": { "description": "The language of the related achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "version": { "description": "The version of the related achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Profilev1p1": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredentialv1p1" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Address": { "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true }, "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }, "Profile": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "EndorsementCredential": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "Result": { "description": "Describes a result that was achieved.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Result" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Result'.", "$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" } }, "achievedLevel": { "description": "If the result represents an achieved rubric criterion level (e.g. Mastered), the value is the `id` of the RubricCriterionLevel in linked ResultDescription.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "alignment": { "type": "array", "items": { "$ref": "#/$defs/Alignment" } }, "resultDescription": { "description": "An achievement can have many result descriptions describing possible results. The value of `resultDescription` is the `id` of the result description linked to this result. The linked result description must be in the achievement that is being asserted.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "status": { "description": "The status of the achievement. Required if `resultType` of the linked ResultDescription is Status.", "$comment": "Origin: ResultStatusType (Enumeration); Defined vocabulary to convey the status of an achievement.", "type": "string", "enum": [ "Completed", "Enrolled", "Failed", "InProgress", "OnHold", "Provisional", "Withdrew" ] }, "value": { "description": "A string representing the result of the performance, or demonstration, of the achievement. For example, 'A' if the recipient received an A grade in class.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "ProfileRef": { "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, { "$ref": "#/$defs/Profile" } ] }, "CredentialSchema": { "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true } } }
AnyEndorsementCredential represents an EndorsementCredential that might be built using [VC-DATA-MODEL] or [VC-DATA-MODEL-2.0]. The scope of this class is only for verification purposes. It is not intended to be used in the creation of new credentials, where the [[[#endorsementcredential]] class MUST be used.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_anyendorsementcredential-jsonschema1.json", "title": "JSON Schema for the AnyEndorsementCredential class.", "description": "AnyEndorsementCredential represents an EndorsementCredential that might be built using [[VC-DATA-MODEL]] or [[VC-DATA-MODEL-2.0]]. The scope of this class is only for verification purposes. It is not intended to be used in the creation of new credentials, where the [[[#endorsementcredential]] class MUST be used.", "oneOf": [ { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/2018/credentials/v1" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/Profilev1p1" }, "issuanceDate": { "description": "Timestamp of when the credential was issued.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "expirationDate": { "description": "If the credential has some notion of expiry, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered expired.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "issuanceDate" ], "additionalProperties": true } ], "$defs": { "Context": { "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "$comment": "Origin: Map (Unordered); A map representing an object with unknown, arbitrary properties", "type": "object" }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } ] }, "TermsOfUse": { "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "additionalProperties": true }, "CredentialStatus": { "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "ProfileRef": { "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, { "$ref": "#/$defs/Profile" } ] }, "Proof": { "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "RefreshService": { "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "EndorsementSubject": { "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Profilev1p1": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredentialv1p1" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "IdentifierEntry": { "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "additionalProperties": false }, "EndorsementCredentialv1p1": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/2018/credentials/v1" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/Profilev1p1" }, "issuanceDate": { "description": "Timestamp of when the credential was issued.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "expirationDate": { "description": "If the credential has some notion of expiry, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered expired.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "issuanceDate" ], "additionalProperties": true }, "Image": { "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": false }, "Profile": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "EndorsementCredential": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "Address": { "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true }, "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }, "CredentialSchema": { "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true } } }
A verifiable credential that asserts a claim about an entity. As described in § 8. Proofs (Signatures), at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the proof
property.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredentialv1p1-jsonschema1.json", "title": "JSON Schema for the EndorsementCredentialv1p1 class.", "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/2018/credentials/v1" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/Profilev1p1" }, "issuanceDate": { "description": "Timestamp of when the credential was issued.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "expirationDate": { "description": "If the credential has some notion of expiry, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered expired.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "issuanceDate" ], "additionalProperties": true, "$defs": { "Context": { "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "$comment": "Origin: Map (Unordered); A map representing an object with unknown, arbitrary properties", "type": "object" }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } ] }, "TermsOfUse": { "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "additionalProperties": true }, "CredentialStatus": { "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Proof": { "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "RefreshService": { "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "EndorsementSubject": { "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Profilev1p1": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredentialv1p1" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "IdentifierEntry": { "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "additionalProperties": false }, "EndorsementCredentialv1p1": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/2018/credentials/v1" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/Profilev1p1" }, "issuanceDate": { "description": "Timestamp of when the credential was issued.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "expirationDate": { "description": "If the credential has some notion of expiry, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered expired.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "issuanceDate" ], "additionalProperties": true }, "Image": { "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": false }, "Address": { "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true }, "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }, "Profile": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "EndorsementCredential": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "ProfileRef": { "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, { "$ref": "#/$defs/Profile" } ] }, "CredentialSchema": { "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true } } }
A Verifiable Credential as defined in the [VC-DATA-MODEL]. As described in § 8. Proofs (Signatures), at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the proof
property.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_verifiablecredentialv1p1-jsonschema1.json", "title": "JSON Schema for the VerifiableCredentialv1p1 class.", "description": "A Verifiable Credential as defined in the [[VC-DATA-MODEL]]. As described in [[[#proofs-signatures]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 1, "items": [ { "enum": [ "https://www.w3.org/2018/credentials/v1" ] } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential'.", "$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" } }, "issuer": { "$ref": "#/$defs/Profilev1p1" }, "issuanceDate": { "description": "Timestamp of when the credential was issued.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "expirationDate": { "description": "If the credential has some notion of expiry, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered expired.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "credentialSubject": { "$ref": "#/$defs/CredentialSubject" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "issuer", "issuanceDate", "credentialSubject" ], "additionalProperties": true, "$defs": { "Context": { "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "$comment": "Origin: Map (Unordered); A map representing an object with unknown, arbitrary properties", "type": "object" }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } ] }, "TermsOfUse": { "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "additionalProperties": true }, "CredentialSubject": { "description": "Claims about the credential subject. Maps to Credential Subject as defined in the [[VC-DATA-MODEL-2.0]].", "type": "object", "properties": { "id": { "description": "The identity of the credential subject.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [], "additionalProperties": true }, "CredentialStatus": { "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Proof": { "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "RefreshService": { "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Profilev1p1": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredentialv1p1" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "IdentifierEntry": { "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "additionalProperties": false }, "EndorsementCredentialv1p1": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/2018/credentials/v1" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/Profilev1p1" }, "issuanceDate": { "description": "Timestamp of when the credential was issued.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "expirationDate": { "description": "If the credential has some notion of expiry, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered expired.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "issuanceDate" ], "additionalProperties": true }, "Image": { "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": false }, "EndorsementSubject": { "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Address": { "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true }, "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }, "Profile": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "EndorsementCredential": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "ProfileRef": { "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, { "$ref": "#/$defs/Profile" } ] }, "CredentialSchema": { "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true } } }
A collection of information about the recipient of an achievement. Maps to Credential Subject in [VC-DATA-MODEL-2.0].
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementsubjectv1p1-jsonschema1.json", "title": "JSON Schema for the AchievementSubjectv1p1 class.", "description": "A collection of information about the recipient of an achievement. Maps to Credential Subject in [[VC-DATA-MODEL-2.0]].", "type": "object", "properties": { "id": { "description": "An identifier for the Credential Subject. Either `id` or at least one `identifier` MUST be supplied.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "AchievementSubject" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'AchievementSubject'.", "$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" } }, "activityEndDate": { "description": "The datetime the activity ended.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "activityStartDate": { "description": "The datetime the activity started.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "creditsEarned": { "description": "The number of credits earned, generally in semester or quarter credit hours. This field correlates with the Achievement `creditsAvailable` field.", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "achievement": { "$ref": "#/$defs/Achievementv1p1" }, "identifier": { "type": "array", "items": { "$ref": "#/$defs/IdentityObject" } }, "image": { "$ref": "#/$defs/Image" }, "licenseNumber": { "description": "The license number that was issued with this credential.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "narrative": { "description": "A narrative that connects multiple pieces of evidence. Likely only present at this location if evidence is a multi-value array.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" }, "result": { "type": "array", "items": { "$ref": "#/$defs/Result" } }, "role": { "description": "Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "source": { "$ref": "#/$defs/Profilev1p1" }, "term": { "description": "The academic term in which this assertion was achieved.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type", "achievement" ], "additionalProperties": false, "$defs": { "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": [ "name", "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 }, "Image": { "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": false }, "Achievementv1p1": { "description": "A collection of information about the accomplishment recognized by the Assertion. Many assertions may be created corresponding to one Achievement.", "type": "object", "properties": { "id": { "description": "Unique URI for the Achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Achievement" ] }, "items": { "description": "No description supplied.", "$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" } }, "achievementType": { "description": "The type of achievement. This is an extensible vocabulary.", "$comment": "Origin: AchievementType (EnumExt); The type of achievement, for example 'Award' or 'Certification'. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.", "oneOf": [ { "type": "string", "enum": [ "Achievement", "ApprenticeshipCertificate", "Assessment", "Assignment", "AssociateDegree", "Award", "Badge", "BachelorDegree", "Certificate", "CertificateOfCompletion", "Certification", "CommunityService", "Competency", "Course", "CoCurricular", "Degree", "Diploma", "DoctoralDegree", "Fieldwork", "GeneralEducationDevelopment", "JourneymanCertificate", "LearningProgram", "License", "Membership", "ProfessionalDoctorate", "QualityAssuranceCredential", "MasterCertificate", "MasterDegree", "MicroCredential", "ResearchDoctorate", "SecondarySchoolDiploma" ] }, { "type": "string", "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+" } ] }, "creator": { "$ref": "#/$defs/Profilev1p1" }, "creditsAvailable": { "description": "Credit hours associated with this entity, or credit hours possible. For example 3.0.", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "criteria": { "$ref": "#/$defs/Criteria" }, "description": { "description": "A short description of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredentialv1p1" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the Achievement. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "fieldOfStudy": { "description": "Category, subject, area of study, discipline, or general branch of knowledge. Examples include Business, Education, Psychology, and Technology.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "humanCode": { "description": "The code, generally human readable, associated with an achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "image": { "$ref": "#/$defs/Image" }, "inLanguage": { "description": "The language of the achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "name": { "description": "The name of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "related": { "type": "array", "items": { "$ref": "#/$defs/Related" } }, "resultDescription": { "type": "array", "items": { "$ref": "#/$defs/ResultDescription" } }, "specialization": { "description": "Name given to the focus, concentration, or specific area of study defined in the achievement. Examples include 'Entrepreneurship', 'Technical Communication', and 'Finance'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "tag": { "type": "array", "items": { "description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "version": { "description": "The version property allows issuers to set a version string for an Achievement. This is particularly useful when replacing a previous version with an update.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type", "criteria", "description", "name" ], "additionalProperties": true }, "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" ] }, { "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 }, "Criteria": { "description": "Descriptive metadata about the achievements necessary to be recognized with an assertion of a particular achievement. This data is added to the Achievement class so that it may be rendered when the achievement assertion is displayed, instead of simply a link to human-readable criteria external to the achievement. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether. Criteria is used to allow would-be recipients to learn what is required of them to be recognized with an assertion of a particular achievement. It is also used after the assertion is awarded to a recipient to let those inspecting earned achievements know the general requirements that the recipients met in order to earn it.", "type": "object", "properties": { "id": { "description": "The URI of a webpage that describes in a human-readable format the criteria for the achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "narrative": { "description": "A narrative of what is needed to earn the achievement. Markdown is allowed.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [], "additionalProperties": true }, "IdentifierEntry": { "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "additionalProperties": false }, "EndorsementCredentialv1p1": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/2018/credentials/v1" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/Profilev1p1" }, "issuanceDate": { "description": "Timestamp of when the credential was issued.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "expirationDate": { "description": "If the credential has some notion of expiry, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered expired.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "issuanceDate" ], "additionalProperties": true }, "CredentialStatus": { "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Proof": { "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "RefreshService": { "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "EndorsementSubject": { "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Profilev1p1": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredentialv1p1" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Result": { "description": "Describes a result that was achieved.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Result" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Result'.", "$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" } }, "achievedLevel": { "description": "If the result represents an achieved rubric criterion level (e.g. Mastered), the value is the `id` of the RubricCriterionLevel in linked ResultDescription.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "alignment": { "type": "array", "items": { "$ref": "#/$defs/Alignment" } }, "resultDescription": { "description": "An achievement can have many result descriptions describing possible results. The value of `resultDescription` is the `id` of the result description linked to this result. The linked result description must be in the achievement that is being asserted.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "status": { "description": "The status of the achievement. Required if `resultType` of the linked ResultDescription is Status.", "$comment": "Origin: ResultStatusType (Enumeration); Defined vocabulary to convey the status of an achievement.", "type": "string", "enum": [ "Completed", "Enrolled", "Failed", "InProgress", "OnHold", "Provisional", "Withdrew" ] }, "value": { "description": "A string representing the result of the performance, or demonstration, of the achievement. For example, 'A' if the recipient received an A grade in class.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "Context": { "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "$comment": "Origin: Map (Unordered); A map representing an object with unknown, arbitrary properties", "type": "object" }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } ] }, "TermsOfUse": { "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "additionalProperties": true }, "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 }, "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 }, "Related": { "description": "Identifies a related achievement.", "type": "object", "properties": { "id": { "description": "The related achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Related" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Related'.", "$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" } }, "inLanguage": { "description": "The language of the related achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "version": { "description": "The version of the related achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Address": { "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true }, "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }, "Profile": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "EndorsementCredential": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "ProfileRef": { "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, { "$ref": "#/$defs/Profile" } ] }, "CredentialSchema": { "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true } } }
A collection of information about the accomplishment recognized by the Assertion. Many assertions may be created corresponding to one Achievement.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementv1p1-jsonschema1.json", "title": "JSON Schema for the Achievementv1p1 class.", "description": "A collection of information about the accomplishment recognized by the Assertion. Many assertions may be created corresponding to one Achievement.", "type": "object", "properties": { "id": { "description": "Unique URI for the Achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Achievement" ] }, "items": { "description": "No description supplied.", "$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" } }, "achievementType": { "description": "The type of achievement. This is an extensible vocabulary.", "$comment": "Origin: AchievementType (EnumExt); The type of achievement, for example 'Award' or 'Certification'. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.", "oneOf": [ { "type": "string", "enum": [ "Achievement", "ApprenticeshipCertificate", "Assessment", "Assignment", "AssociateDegree", "Award", "Badge", "BachelorDegree", "Certificate", "CertificateOfCompletion", "Certification", "CommunityService", "Competency", "Course", "CoCurricular", "Degree", "Diploma", "DoctoralDegree", "Fieldwork", "GeneralEducationDevelopment", "JourneymanCertificate", "LearningProgram", "License", "Membership", "ProfessionalDoctorate", "QualityAssuranceCredential", "MasterCertificate", "MasterDegree", "MicroCredential", "ResearchDoctorate", "SecondarySchoolDiploma" ] }, { "type": "string", "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+" } ] }, "creator": { "$ref": "#/$defs/Profilev1p1" }, "creditsAvailable": { "description": "Credit hours associated with this entity, or credit hours possible. For example 3.0.", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "criteria": { "$ref": "#/$defs/Criteria" }, "description": { "description": "A short description of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredentialv1p1" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the Achievement. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "fieldOfStudy": { "description": "Category, subject, area of study, discipline, or general branch of knowledge. Examples include Business, Education, Psychology, and Technology.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "humanCode": { "description": "The code, generally human readable, associated with an achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "image": { "$ref": "#/$defs/Image" }, "inLanguage": { "description": "The language of the achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "name": { "description": "The name of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "related": { "type": "array", "items": { "$ref": "#/$defs/Related" } }, "resultDescription": { "type": "array", "items": { "$ref": "#/$defs/ResultDescription" } }, "specialization": { "description": "Name given to the focus, concentration, or specific area of study defined in the achievement. Examples include 'Entrepreneurship', 'Technical Communication', and 'Finance'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "tag": { "type": "array", "items": { "description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "version": { "description": "The version property allows issuers to set a version string for an Achievement. This is particularly useful when replacing a previous version with an update.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type", "criteria", "description", "name" ], "additionalProperties": true, "$defs": { "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" ] }, { "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 }, "Criteria": { "description": "Descriptive metadata about the achievements necessary to be recognized with an assertion of a particular achievement. This data is added to the Achievement class so that it may be rendered when the achievement assertion is displayed, instead of simply a link to human-readable criteria external to the achievement. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether. Criteria is used to allow would-be recipients to learn what is required of them to be recognized with an assertion of a particular achievement. It is also used after the assertion is awarded to a recipient to let those inspecting earned achievements know the general requirements that the recipients met in order to earn it.", "type": "object", "properties": { "id": { "description": "The URI of a webpage that describes in a human-readable format the criteria for the achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "narrative": { "description": "A narrative of what is needed to earn the achievement. Markdown is allowed.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [], "additionalProperties": true }, "IdentifierEntry": { "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "additionalProperties": false }, "EndorsementCredentialv1p1": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/2018/credentials/v1" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/Profilev1p1" }, "issuanceDate": { "description": "Timestamp of when the credential was issued.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "expirationDate": { "description": "If the credential has some notion of expiry, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered expired.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "issuanceDate" ], "additionalProperties": true }, "Context": { "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "$comment": "Origin: Map (Unordered); A map representing an object with unknown, arbitrary properties", "type": "object" }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } ] }, "TermsOfUse": { "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "additionalProperties": true }, "CredentialStatus": { "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Proof": { "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "RefreshService": { "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Image": { "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "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 }, "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 }, "EndorsementSubject": { "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Related": { "description": "Identifies a related achievement.", "type": "object", "properties": { "id": { "description": "The related achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Related" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Related'.", "$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" } }, "inLanguage": { "description": "The language of the related achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "version": { "description": "The version of the related achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Profilev1p1": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredentialv1p1" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Address": { "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true }, "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }, "Profile": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "EndorsementCredential": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "ProfileRef": { "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, { "$ref": "#/$defs/Profile" } ] }, "CredentialSchema": { "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true } } }
A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_profilev1p1-jsonschema1.json", "title": "JSON Schema for the Profilev1p1 class.", "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredentialv1p1" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true, "$defs": { "IdentifierEntry": { "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "additionalProperties": false }, "EndorsementCredentialv1p1": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/2018/credentials/v1" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/Profilev1p1" }, "issuanceDate": { "description": "Timestamp of when the credential was issued.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "expirationDate": { "description": "If the credential has some notion of expiry, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered expired.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "issuanceDate" ], "additionalProperties": true }, "Context": { "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "$comment": "Origin: Map (Unordered); A map representing an object with unknown, arbitrary properties", "type": "object" }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } ] }, "TermsOfUse": { "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "additionalProperties": true }, "CredentialStatus": { "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Proof": { "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "RefreshService": { "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Image": { "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": false }, "EndorsementSubject": { "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Address": { "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true }, "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }, "Profile": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "EndorsementCredential": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "Profilev1p1": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredentialv1p1" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "ProfileRef": { "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, { "$ref": "#/$defs/Profile" } ] }, "CredentialSchema": { "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true } } }
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_multikey-jsonschema1.json", "title": "JSON Schema for the Multikey class.", "description": "No description supplied.", "type": "object", "properties": { "id": { "description": "The `id` of the verification method MUST be the JWK thumbprint calculated from the `publicKeyMultibase` property value according to [[?MULTIBASE]].", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The `type` of the verification method MUST be the string `DataIntegrityProof`.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "cryptosuite": { "description": "The `cryptosuite` of the verification method MUST be the string `eddsa-rdf-2022`.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "controller": { "description": "The identify of the entity that controls this public key.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "publicKeyMultibase": { "description": "The `publicKeyMultibase` property of the verification method MUST be a public key encoded according to [[?MULTICODEC]] and formatted according to [[?MULTIBASE]]. The multicodec encoding of a Ed25519 public key is the two-byte prefix `0xed01` followed by the 32-byte public key data.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "cryptosuite", "publicKeyMultibase" ], "additionalProperties": false }
A JSON Web Key (JWK) formatted according to [RFC7517].
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_jwk-jsonschema1.json", "title": "JSON Schema for the JWK class.", "description": "A JSON Web Key (JWK) formatted according to [[RFC7517]].", "type": "object", "properties": { "kty": { "description": "The `kty` (key type) parameter identifies the cryptographic algorithm family used with the key, such as `RSA` or `EC`.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "use": { "description": "The `use` (public key use) parameter identifies the intended use of the public key, such as `sig` (signature) or `end` (encryption).", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "key_ops": { "description": "The `key_ops` (key operations) parameter identifies the operation(s) for which the key is intended to be used, such as `sign` (compute digital signature or MAC) or `verify` (verify digital signature or MAC).", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "alg": { "description": "The `alg` (algorithm) parameter identifies the algorithm intended for use with the key, such as `RS256` or `PS256`.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "kid": { "description": "The `kid` (key ID) parameter is used to match a specific key.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "x5u": { "description": "The `x5u` (X.509 URL) parameter is a URI that refers to a resource for an X.509 public key certificate or certificate chain [[RFC5280]].", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "x5c": { "type": "array", "items": { "description": "The `x5c` (X.509 certificate chain) parameter contains a chain of one or more PKIX certificates [[RFC5280]].", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "x5t": { "description": "The `x5t` (X.509 certificate SHA-1 thumbprint) parameter is a base64url-encoded SHA-1 thumbprint (a.k.a. digest) of the DER encoding of an X.509 certificate [[RFC5280]].", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "x5t_S256": { "description": "The `x5t#S256` (X.509 certificate SHA-256 thumbprint) parameter is a base64url-encoded SHA-256 thumbprint (a.k.a. digest) of the DER encoding of an X.509 certificate [[RFC5280]].", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "kty" ], "additionalProperties": true }
A JWK Set (JWKS) formatted according to [RFC7517].
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_jwks-jsonschema1.json", "title": "JSON Schema for the JWKS class.", "description": "A JWK Set (JWKS) formatted according to [[RFC7517]].", "type": "object", "properties": { "keys": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/JWK" } } }, "required": [ "keys" ], "additionalProperties": false, "$defs": { "JWK": { "description": "A JSON Web Key (JWK) formatted according to [[RFC7517]].", "type": "object", "properties": { "kty": { "description": "The `kty` (key type) parameter identifies the cryptographic algorithm family used with the key, such as `RSA` or `EC`.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "use": { "description": "The `use` (public key use) parameter identifies the intended use of the public key, such as `sig` (signature) or `end` (encryption).", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "key_ops": { "description": "The `key_ops` (key operations) parameter identifies the operation(s) for which the key is intended to be used, such as `sign` (compute digital signature or MAC) or `verify` (verify digital signature or MAC).", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "alg": { "description": "The `alg` (algorithm) parameter identifies the algorithm intended for use with the key, such as `RS256` or `PS256`.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "kid": { "description": "The `kid` (key ID) parameter is used to match a specific key.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "x5u": { "description": "The `x5u` (X.509 URL) parameter is a URI that refers to a resource for an X.509 public key certificate or certificate chain [[RFC5280]].", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "x5c": { "type": "array", "items": { "description": "The `x5c` (X.509 certificate chain) parameter contains a chain of one or more PKIX certificates [[RFC5280]].", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "x5t": { "description": "The `x5t` (X.509 certificate SHA-1 thumbprint) parameter is a base64url-encoded SHA-1 thumbprint (a.k.a. digest) of the DER encoding of an X.509 certificate [[RFC5280]].", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "x5t_S256": { "description": "The `x5t#S256` (X.509 certificate SHA-256 thumbprint) parameter is a base64url-encoded SHA-256 thumbprint (a.k.a. digest) of the DER encoding of an X.509 certificate [[RFC5280]].", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "kty" ], "additionalProperties": true } } }
This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_imsx_statusinfo-jsonschema1.json", "title": "JSON Schema for the Imsx_StatusInfo class.", "description": "This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider.", "type": "object", "properties": { "imsx_codeMajor": { "description": "The code major value (from the corresponding enumerated vocabulary).", "$comment": "Origin: Imsx_CodeMajor (Enumeration); This is the set of primary status report values i.e. the major code assigned to the status block. This is used in conjunction with the 'Severity' structure in the status object.", "type": "string", "enum": [ "failure", "processing", "success", "unsupported" ] }, "imsx_severity": { "description": "The severity value (from the corresponding enumerated vocabulary).", "$comment": "Origin: Imsx_Severity (Enumeration); This is the context for the status report values. This is used in conjunction with the 'CodeMajor' structure in the status object.", "type": "string", "enum": [ "error", "status", "warning" ] }, "imsx_description": { "description": "A human readable description supplied by the entity creating the status code information.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "imsx_codeMinor": { "$ref": "#/$defs/Imsx_CodeMinor" } }, "required": [ "imsx_codeMajor", "imsx_severity" ], "additionalProperties": false, "$defs": { "Imsx_CodeMinor": { "description": "This is the container for the set of code minor status codes reported in the responses from the Service Provider.", "type": "object", "properties": { "imsx_codeMinorField": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/Imsx_CodeMinorField" } } }, "required": [ "imsx_codeMinorField" ], "additionalProperties": false }, "Imsx_CodeMinorField": { "description": "This is the container for a single code minor status code.", "type": "object", "properties": { "imsx_codeMinorFieldName": { "description": "This should contain the identity of the system that has produced the code minor status code report.", "$comment": "Origin: NormalizedString (PrimitiveType); A `String` conforming to the `normalizedString` definition in [[XMLSCHEMA-2]].", "type": "string" }, "imsx_codeMinorFieldValue": { "description": "The code minor status code (this is a value from the corresponding enumerated vocabulary).", "$comment": "Origin: Imsx_CodeMinorFieldValue (Enumeration); This is the set of codeMinor status codes that are used to provide further insight into the completion status of the end-to-end transaction i.e. this should be used to provide more information than would be supplied by an HTTP code.", "type": "string", "enum": [ "forbidden", "fullsuccess", "internal_server_error", "invalid_data", "invalid_query_parameter", "misdirected_request", "not_acceptable", "not_allowed", "not_found", "not_modified", "server_busy", "unauthorizedrequest", "unknown" ] } }, "required": [ "imsx_codeMinorFieldName", "imsx_codeMinorFieldValue" ], "additionalProperties": false } } }
This is the set of primary status report values i.e. the major code assigned to the status block. This is used in conjunction with the 'Severity' structure in the status object.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_imsx_codemajor-jsonschema1.json", "title": "JSON Schema for the Imsx_CodeMajor class.", "description": "This is the set of primary status report values i.e. the major code assigned to the status block. This is used in conjunction with the 'Severity' structure in the status object.", "type": "object", "properties": { "failure": { "description": "Denotes that the transaction request has failed. The detailed reason will be reported in the accompanying 'codeMinor' fields.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "processing": { "description": "Denotes that the request is being processed at the destination or there has been a local transmission failure. This value is used in asynchronous services.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "success": { "description": "Denotes that the request has been successfully completed. If the associated 'severity' value is 'warning' then the request has been partially successful i.e. best effort by the service provider. Other parts of the status information may provide more insight into a partial success response.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "unsupported": { "description": "Denotes that the service provider does not support the requested operation. This is the required default response for an unsupported operation by an implementation.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" } }, "required": [ "failure", "processing", "success", "unsupported" ], "additionalProperties": false }
This is the context for the status report values. This is used in conjunction with the 'CodeMajor' structure in the status object.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_imsx_severity-jsonschema1.json", "title": "JSON Schema for the Imsx_Severity class.", "description": "This is the context for the status report values. This is used in conjunction with the 'CodeMajor' structure in the status object.", "type": "object", "properties": { "error": { "description": "A catastrophic error has occurred in processing the request and so the request was not completed (the Service Provider may not even have received the request).", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "status": { "description": "The request has been completed and a response was received from the Service Provider.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "warning": { "description": "The request has only been partially completed. For an asynchronous service a further response should be expected.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" } }, "required": [ "error", "status", "warning" ], "additionalProperties": false }
This is the container for the set of code minor status codes reported in the responses from the Service Provider.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_imsx_codeminor-jsonschema1.json", "title": "JSON Schema for the Imsx_CodeMinor class.", "description": "This is the container for the set of code minor status codes reported in the responses from the Service Provider.", "type": "object", "properties": { "imsx_codeMinorField": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/Imsx_CodeMinorField" } } }, "required": [ "imsx_codeMinorField" ], "additionalProperties": false, "$defs": { "Imsx_CodeMinorField": { "description": "This is the container for a single code minor status code.", "type": "object", "properties": { "imsx_codeMinorFieldName": { "description": "This should contain the identity of the system that has produced the code minor status code report.", "$comment": "Origin: NormalizedString (PrimitiveType); A `String` conforming to the `normalizedString` definition in [[XMLSCHEMA-2]].", "type": "string" }, "imsx_codeMinorFieldValue": { "description": "The code minor status code (this is a value from the corresponding enumerated vocabulary).", "$comment": "Origin: Imsx_CodeMinorFieldValue (Enumeration); This is the set of codeMinor status codes that are used to provide further insight into the completion status of the end-to-end transaction i.e. this should be used to provide more information than would be supplied by an HTTP code.", "type": "string", "enum": [ "forbidden", "fullsuccess", "internal_server_error", "invalid_data", "invalid_query_parameter", "misdirected_request", "not_acceptable", "not_allowed", "not_found", "not_modified", "server_busy", "unauthorizedrequest", "unknown" ] } }, "required": [ "imsx_codeMinorFieldName", "imsx_codeMinorFieldValue" ], "additionalProperties": false } } }
This is the container for a single code minor status code.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_imsx_codeminorfield-jsonschema1.json", "title": "JSON Schema for the Imsx_CodeMinorField class.", "description": "This is the container for a single code minor status code.", "type": "object", "properties": { "imsx_codeMinorFieldName": { "description": "This should contain the identity of the system that has produced the code minor status code report.", "$comment": "Origin: NormalizedString (PrimitiveType); A `String` conforming to the `normalizedString` definition in [[XMLSCHEMA-2]].", "type": "string" }, "imsx_codeMinorFieldValue": { "description": "The code minor status code (this is a value from the corresponding enumerated vocabulary).", "$comment": "Origin: Imsx_CodeMinorFieldValue (Enumeration); This is the set of codeMinor status codes that are used to provide further insight into the completion status of the end-to-end transaction i.e. this should be used to provide more information than would be supplied by an HTTP code.", "type": "string", "enum": [ "forbidden", "fullsuccess", "internal_server_error", "invalid_data", "invalid_query_parameter", "misdirected_request", "not_acceptable", "not_allowed", "not_found", "not_modified", "server_busy", "unauthorizedrequest", "unknown" ] } }, "required": [ "imsx_codeMinorFieldName", "imsx_codeMinorFieldValue" ], "additionalProperties": false }
This is the set of codeMinor status codes that are used to provide further insight into the completion status of the end-to-end transaction i.e. this should be used to provide more information than would be supplied by an HTTP code.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_imsx_codeminorfieldvalue-jsonschema1.json", "title": "JSON Schema for the Imsx_CodeMinorFieldValue class.", "description": "This is the set of codeMinor status codes that are used to provide further insight into the completion status of the end-to-end transaction i.e. this should be used to provide more information than would be supplied by an HTTP code.", "type": "object", "properties": { "forbidden": { "description": "This is used to indicate that the server can be reached and process the request but refuses to take any further action. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '403'.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "fullsuccess": { "description": "The request has been fully and successfully implemented by the service provider. For a REST binding this will have an HTTP code of '200' for a successful search request.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "internal_server_error": { "description": "This should be used only if there is catastrophic error and there is not a more appropriate code. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '500'.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "invalid_data": { "description": "This error condition may occur if a JSON request/response body contains well-formed (i.e. syntactically correct), but semantically erroneous, JSON instructions. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and a HTTP code of '422'.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "invalid_query_parameter": { "description": "An invalid data query parameter field was supplied and the query could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '400'.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "misdirected_request": { "description": "This is used to indicate that the request was made with a protocol that is not supported by the server. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '421'.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "not_acceptable": { "description": "This is used to indicate that the server cannot provide a response with a Content-Type that matches any of the content types in the request Accept header. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '406'.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "not_allowed": { "description": "This is used to indicate that the server does not allow the HTTP method. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '405'.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "not_found": { "description": "This is used to indicate that the server did not find the resource. This would be accompanied by the 'codeMajor/severity' values of 'failure/status' and for a REST binding a HTTP code of '404'.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "not_modified": { "description": "This is used to indicate that the server did not modify the resource. This would be accompanied by the 'codeMajor/severity' values of 'success/status' and for a REST binding a HTTP code of '304'.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "server_busy": { "description": "The server is receiving too many requests. Retry at a later time. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '429'.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "unauthorizedrequest": { "description": "The request was not correctly authorised. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '401'.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" }, "unknown": { "description": "Any other error occurred. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code corresponding to the error.", "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.", "type": "string" } }, "required": [ "forbidden", "fullsuccess", "internal_server_error", "invalid_data", "invalid_query_parameter", "misdirected_request", "not_acceptable", "not_allowed", "not_found", "not_modified", "server_busy", "unauthorizedrequest", "unknown" ], "additionalProperties": false }
The Service Description Document (SDD) is a machine readable document that contains the description of the service features supported by the Provider/Platform. The SDD is an OpenAPI 3.0 (JSON) [OPENAPIS-3.0] structured document that MUST be a profiled version of the OpenAPI 3.0 (JSON) file provided provided with this specification. This profiled version contains all of the details about the supported set of service end-points, the supported optional data fields, definitions of the proprietary data fields supplied using the permitted extension mechanisms, definitions of the available proprietary endpoints, and information about the security mechanisms.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_servicedescriptiondocument-jsonschema1.json", "title": "JSON Schema for the ServiceDescriptionDocument class.", "description": "The Service Description Document (SDD) is a machine readable document that contains the description of the service features supported by the Provider/Platform. The SDD is an OpenAPI 3.0 (JSON) [[OPENAPIS-3.0]] structured document that MUST be a profiled version of the OpenAPI 3.0 (JSON) file provided provided with this specification. This profiled version contains all of the details about the supported set of service end-points, the supported optional data fields, definitions of the proprietary data fields supplied using the permitted extension mechanisms, definitions of the available proprietary endpoints, and information about the security mechanisms.", "type": "object", "properties": { "openapi": { "description": "This string MUST be the semantic version number of the OpenAPI Specification version that the OpenAPI document uses. The openapi field SHOULD be used by tooling specifications and clients to interpret the OpenAPI document. This is not related to the API info.version string.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "info": { "$ref": "#/$defs/OpenApiInfo" }, "components": { "$ref": "#/$defs/OpenApiComponents" } }, "required": [ "openapi", "info", "components" ], "additionalProperties": true, "$defs": { "OpenApiInfo": { "description": "The object provides metadata about the API. The metadata MAY be used by the clients if needed, and MAY be presented in editing or documentation generation tools for convenience.", "type": "object", "properties": { "termsOfService": { "description": "A fully qualified URL to the [=resource server=]'s terms of service.", "$comment": "Origin: URL (DerivedType); A `URI` that represents a Uniform Resource Locator (URL).", "type": "string" }, "title": { "description": "The name of the [=resource server=].", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "version": { "description": "The version of the API.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "x-imssf-image": { "description": "An image representing the [=resource server=]. MAY be a Data URI or the URL where the image may be found.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "x-imssf-privacyPolicyUrl": { "description": "A fully qualified URL to the [=resource server=]'s privacy policy.", "$comment": "Origin: URL (DerivedType); A `URI` that represents a Uniform Resource Locator (URL).", "type": "string" } }, "required": [ "termsOfService", "title", "version", "x-imssf-privacyPolicyUrl" ], "additionalProperties": true }, "OpenApiComponents": { "description": "Holds a set of reusable objects for different aspects of the OAS. All objects defined within the components object will have no effect on the API unless they are explicitly referenced from properties outside the components object.", "type": "object", "properties": { "securitySchemes": { "$ref": "#/$defs/OpenApiSecuritySchemes" } }, "required": [ "securitySchemes" ], "additionalProperties": true }, "OpenApiSecuritySchemes": { "description": "The Map of security scheme objects supported by this specification.", "type": "object", "properties": { "OAuth2ACG": { "$ref": "#/$defs/OpenApiOAuth2SecurityScheme" } }, "required": [], "additionalProperties": false }, "OpenApiOAuth2SecurityScheme": { "description": "Defines an OAuth2 security scheme that can be used by the operations.", "type": "object", "properties": { "type": { "description": "MUST be the string `oauth2`.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "A short description for the security scheme.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "x-imssf-registrationUrl": { "description": "A fully qualified URL to the Client Registration endpoint.", "$comment": "Origin: URL (DerivedType); A `URI` that represents a Uniform Resource Locator (URL).", "type": "string" } }, "required": [ "type", "x-imssf-registrationUrl" ], "additionalProperties": true } } }
Holds a set of reusable objects for different aspects of the OAS. All objects defined within the components object will have no effect on the API unless they are explicitly referenced from properties outside the components object.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_openapicomponents-jsonschema1.json", "title": "JSON Schema for the OpenApiComponents class.", "description": "Holds a set of reusable objects for different aspects of the OAS. All objects defined within the components object will have no effect on the API unless they are explicitly referenced from properties outside the components object.", "type": "object", "properties": { "securitySchemes": { "$ref": "#/$defs/OpenApiSecuritySchemes" } }, "required": [ "securitySchemes" ], "additionalProperties": true, "$defs": { "OpenApiSecuritySchemes": { "description": "The Map of security scheme objects supported by this specification.", "type": "object", "properties": { "OAuth2ACG": { "$ref": "#/$defs/OpenApiOAuth2SecurityScheme" } }, "required": [], "additionalProperties": false }, "OpenApiOAuth2SecurityScheme": { "description": "Defines an OAuth2 security scheme that can be used by the operations.", "type": "object", "properties": { "type": { "description": "MUST be the string `oauth2`.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "A short description for the security scheme.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "x-imssf-registrationUrl": { "description": "A fully qualified URL to the Client Registration endpoint.", "$comment": "Origin: URL (DerivedType); A `URI` that represents a Uniform Resource Locator (URL).", "type": "string" } }, "required": [ "type", "x-imssf-registrationUrl" ], "additionalProperties": true } } }
The object provides metadata about the API. The metadata MAY be used by the clients if needed, and MAY be presented in editing or documentation generation tools for convenience.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_openapiinfo-jsonschema1.json", "title": "JSON Schema for the OpenApiInfo class.", "description": "The object provides metadata about the API. The metadata MAY be used by the clients if needed, and MAY be presented in editing or documentation generation tools for convenience.", "type": "object", "properties": { "termsOfService": { "description": "A fully qualified URL to the [=resource server=]'s terms of service.", "$comment": "Origin: URL (DerivedType); A `URI` that represents a Uniform Resource Locator (URL).", "type": "string" }, "title": { "description": "The name of the [=resource server=].", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "version": { "description": "The version of the API.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "x-imssf-image": { "description": "An image representing the [=resource server=]. MAY be a Data URI or the URL where the image may be found.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "x-imssf-privacyPolicyUrl": { "description": "A fully qualified URL to the [=resource server=]'s privacy policy.", "$comment": "Origin: URL (DerivedType); A `URI` that represents a Uniform Resource Locator (URL).", "type": "string" } }, "required": [ "termsOfService", "title", "version", "x-imssf-privacyPolicyUrl" ], "additionalProperties": true }
Defines an OAuth2 security scheme that can be used by the operations.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_openapioauth2securityscheme-jsonschema1.json", "title": "JSON Schema for the OpenApiOAuth2SecurityScheme class.", "description": "Defines an OAuth2 security scheme that can be used by the operations.", "type": "object", "properties": { "type": { "description": "MUST be the string `oauth2`.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "A short description for the security scheme.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "x-imssf-registrationUrl": { "description": "A fully qualified URL to the Client Registration endpoint.", "$comment": "Origin: URL (DerivedType); A `URI` that represents a Uniform Resource Locator (URL).", "type": "string" } }, "required": [ "type", "x-imssf-registrationUrl" ], "additionalProperties": true }
The Map of security scheme objects supported by this specification.
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_openapisecurityschemes-jsonschema1.json", "title": "JSON Schema for the OpenApiSecuritySchemes class.", "description": "The Map of security scheme objects supported by this specification.", "type": "object", "properties": { "OAuth2ACG": { "$ref": "#/$defs/OpenApiOAuth2SecurityScheme" } }, "required": [], "additionalProperties": false, "$defs": { "OpenApiOAuth2SecurityScheme": { "description": "Defines an OAuth2 security scheme that can be used by the operations.", "type": "object", "properties": { "type": { "description": "MUST be the string `oauth2`.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "A short description for the security scheme.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "x-imssf-registrationUrl": { "description": "A fully qualified URL to the Client Registration endpoint.", "$comment": "Origin: URL (DerivedType); A `URI` that represents a Uniform Resource Locator (URL).", "type": "string" } }, "required": [ "type", "x-imssf-registrationUrl" ], "additionalProperties": true } } }
This is the set of ASCII error code strings that may be returned in response to a client registration request. See [RFC7591].
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_registrationerror-jsonschema1.json", "title": "JSON Schema for the RegistrationError class.", "description": "This is the set of ASCII error code strings that may be returned in response to a client registration request. See [[RFC7591]].", "type": "object", "properties": { "invalid_redirect_uri": { "description": "The value of one or more redirection URIs is invalid.", "$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.", "type": "string", "pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$" }, "invalid_client_metadata": { "description": "The value of one of the client metadata fields is invalid and the server has rejected this request. Note that an authorization server MAY choose to substitute a valid value for any requested parameter of a client's metadata.", "$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.", "type": "string", "pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$" }, "invalid_software_statement": { "description": "The software statement presented is invalid. This MUST only be returned if a Software Statement has been supplied in the registration request. Use of a Software Statement is NOT RECOMMENDED.", "$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.", "type": "string", "pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$" }, "unapproved_software_statement": { "description": "The software statement presented is not approved for use by this authorization server. This MUST only be returned if a Software Statement has been supplied in the registration request. Use of a Software Statement is NOT RECOMMENDED.", "$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.", "type": "string", "pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$" } }, "required": [ "invalid_redirect_uri", "invalid_client_metadata", "invalid_software_statement", "unapproved_software_statement" ], "additionalProperties": false }
This is the set of ASCII error code strings that may be returned in response to a client token request. See Section 5.2 of [RFC6749].
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_tokenerror-jsonschema1.json", "title": "JSON Schema for the TokenError class.", "description": "This is the set of ASCII error code strings that may be returned in response to a client token request. See Section 5.2 of [[RFC6749]].", "type": "object", "properties": { "invalid_request": { "description": "The request is missing a required parameter, includes an unsupported parameter value (other than grant type), repeats a parameter, includes multiple credentials, utilizes more than one mechanism for authenticating the client, or is otherwise malformed.", "$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.", "type": "string", "pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$" }, "invalid_client": { "description": "Client authentication failed (e.g., unknown client, no client authentication included, or unsupported authentication method). The authorization server MAY return an HTTP 401 (Unauthorized) status code to indicate which HTTP authentication schemes are supported. If the client attempted to authenticate via the \"Authorization\" request header field, the authorization server MUST respond with an HTTP 401 (Unauthorized) status code and include the \"WWW-Authenticate\" response header field matching the authentication scheme used by the client.", "$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.", "type": "string", "pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$" }, "invalid_grant": { "description": "The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.", "$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.", "type": "string", "pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$" }, "unauthorized_client": { "description": "The authenticated client is not authorized to use this authorization grant type.", "$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.", "type": "string", "pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$" }, "unsupported_grant_type": { "description": "The authorization grant type is not supported by the authorization server.", "$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.", "type": "string", "pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$" }, "unsupported_token_type": { "description": "The authorization server does not support the revocation of the presented token type. That is, the client tried to revoke an access token on a server not supporting this feature.", "$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.", "type": "string", "pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$" }, "invalid_scope": { "description": "The requested scope is invalid, unknown, malformed, or exceeds the scope granted by the resource owner.", "$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.", "type": "string", "pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$" } }, "required": [ "invalid_request", "invalid_client", "invalid_grant", "unauthorized_client", "unsupported_grant_type", "unsupported_token_type", "invalid_scope" ], "additionalProperties": false }
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_anyidentifier-jsonschema1.json", "title": "JSON Schema for the AnyIdentifier class.", "description": "No description supplied.", "type": "object", "properties": { "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" } }, "required": [], "additionalProperties": false }
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_identifiertype-jsonschema1.json", "title": "JSON Schema for the IdentifierType class.", "description": "No description supplied.", "type": "object", "properties": { "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "identifierType" ], "additionalProperties": false }
{ "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_getopenbadgecredentialsresponse-jsonschema1.json", "title": "JSON Schema for the GetOpenBadgeCredentialsResponse class.", "description": "No description supplied.", "type": "object", "properties": { "credential": { "type": "array", "items": { "$ref": "#/$defs/AchievementCredential" } }, "compactJwsString": { "type": "array", "items": { "description": "OpenBadgeCredentials that have been signed with the VC-JWT Proof Format MUST be in the `compactJwsString` array.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } } }, "required": [], "additionalProperties": false, "$defs": { "AchievementCredential": { "description": "AchievementCredentials are representations of an awarded achievement, used to share information about a achievement belonging to one earner. Maps to a Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]]. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'AchievementCredential' or the URI 'OpenBadgeCredential'.", "$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": [ "AchievementCredential", "OpenBadgeCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'AchievementCredential' or the URI 'OpenBadgeCredential'.", "$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" } } ] }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "image": { "$ref": "#/$defs/Image" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "credentialSubject": { "$ref": "#/$defs/AchievementSubject" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the credential, and the achievement and profiles in the credential. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "evidence": { "type": "array", "items": { "$ref": "#/$defs/Evidence" } }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "id", "type", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "Context": { "description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf": [ { "description": "A map representing an object with unknown, arbitrary properties", "$comment": "Origin: Map (Unordered); A map representing an object with unknown, arbitrary properties", "type": "object" }, { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } ] }, "TermsOfUse": { "description": "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the term of use.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of the terms of use.", "$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" } }, "required": [ "type" ], "additionalProperties": true }, "CredentialStatus": { "description": "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's credential status method.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the credential status method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "AchievementSubject": { "description": "A collection of information about the recipient of an achievement. Maps to Credential Subject in [[VC-DATA-MODEL-2.0]].", "type": "object", "properties": { "id": { "description": "An identifier for the Credential Subject. Either `id` or at least one `identifier` MUST be supplied.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "AchievementSubject" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'AchievementSubject'.", "$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" } }, "activityEndDate": { "description": "The datetime the activity ended.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "activityStartDate": { "description": "The datetime the activity started.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "creditsEarned": { "description": "The number of credits earned, generally in semester or quarter credit hours. This field correlates with the Achievement `creditsAvailable` field.", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "achievement": { "$ref": "#/$defs/Achievement" }, "identifier": { "type": "array", "items": { "$ref": "#/$defs/IdentityObject" } }, "image": { "$ref": "#/$defs/Image" }, "licenseNumber": { "description": "The license number that was issued with this credential.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "narrative": { "description": "A narrative that connects multiple pieces of evidence. Likely only present at this location if evidence is a multi-value array.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" }, "result": { "type": "array", "items": { "$ref": "#/$defs/Result" } }, "role": { "description": "Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "source": { "$ref": "#/$defs/Profile" }, "term": { "description": "The academic term in which this assertion was achieved.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type", "achievement" ], "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": [ "name", "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 }, "Evidence": { "description": "Descriptive metadata about evidence related to the achievement assertion. Each instance of the evidence class present in an assertion corresponds to one entity, though a single entry can describe a set of items collectively. There may be multiple evidence entries referenced from an assertion. The narrative property is also in scope of the assertion class to provide an overall description of the achievement related to the assertion in rich text. It is used here to provide a narrative of achievement of the specific entity described. If both the description and narrative properties are present, displayers can assume the narrative value goes into more detail and is not simply a recapitulation of description.", "type": "object", "properties": { "id": { "description": "The URL of a webpage presenting evidence of achievement or the evidence encoded as a Data URI. The schema of the webpage is undefined.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Evidence" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Evidence'.", "$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" } }, "narrative": { "description": "A narrative that describes the evidence and process of achievement that led to an assertion.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" }, "name": { "description": "A descriptive title of the evidence.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "A longer description of the evidence.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "genre": { "description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "audience": { "description": "A description of the intended audience for a piece of evidence.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "EndorsementCredential": { "description": "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "type": "object", "properties": { "@context": { "type": "array", "minItems": 2, "items": [ { "enum": [ "https://www.w3.org/ns/credentials/v2" ] }, { "type": "string", "pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/ob\\/v3p0\\/context(-3\\.\\d\\.\\d)*\\.json$" } ], "additionalItems": { "$ref": "#/$defs/Context" } }, "type": { "allOf": [ { "type": "array", "minItems": 1, "contains": { "enum": [ "VerifiableCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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": [ "EndorsementCredential" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "$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" } } ] }, "id": { "description": "Unambiguous reference to the credential.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "name": { "description": "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "description": { "description": "The short description of the credential for display purposes in wallets.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "credentialSubject": { "$ref": "#/$defs/EndorsementSubject" }, "awardedDate": { "description": "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "issuer": { "$ref": "#/$defs/ProfileRef" }, "validFrom": { "description": "Timestamp of when the credential becomes valid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "validUntil": { "description": "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`", "type": "string", "format": "date-time" }, "proof": { "type": "array", "items": { "$ref": "#/$defs/Proof" } }, "credentialSchema": { "type": "array", "items": { "$ref": "#/$defs/CredentialSchema" } }, "credentialStatus": { "$ref": "#/$defs/CredentialStatus" }, "refreshService": { "$ref": "#/$defs/RefreshService" }, "termsOfUse": { "type": "array", "items": { "$ref": "#/$defs/TermsOfUse" } } }, "required": [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "additionalProperties": true }, "Achievement": { "description": "A collection of information about the accomplishment recognized by the Assertion. Many assertions may be created corresponding to one Achievement.", "type": "object", "properties": { "id": { "description": "Unique URI for the Achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Achievement" ] }, "items": { "description": "The type MUST include the IRI 'Achievement'.", "$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" } }, "achievementType": { "description": "The type of achievement. This is an extensible vocabulary.", "$comment": "Origin: AchievementType (EnumExt); The type of achievement, for example 'Award' or 'Certification'. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.", "oneOf": [ { "type": "string", "enum": [ "Achievement", "ApprenticeshipCertificate", "Assessment", "Assignment", "AssociateDegree", "Award", "Badge", "BachelorDegree", "Certificate", "CertificateOfCompletion", "Certification", "CommunityService", "Competency", "Course", "CoCurricular", "Degree", "Diploma", "DoctoralDegree", "Fieldwork", "GeneralEducationDevelopment", "JourneymanCertificate", "LearningProgram", "License", "Membership", "ProfessionalDoctorate", "QualityAssuranceCredential", "MasterCertificate", "MasterDegree", "MicroCredential", "ResearchDoctorate", "SecondarySchoolDiploma" ] }, { "type": "string", "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+" } ] }, "creator": { "$ref": "#/$defs/Profile" }, "creditsAvailable": { "description": "Credit hours associated with this entity, or credit hours possible. For example 3.0.", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "criteria": { "$ref": "#/$defs/Criteria" }, "description": { "description": "A short description of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the Achievement. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "fieldOfStudy": { "description": "Category, subject, area of study, discipline, or general branch of knowledge. Examples include Business, Education, Psychology, and Technology.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "humanCode": { "description": "The code, generally human readable, associated with an achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "image": { "$ref": "#/$defs/Image" }, "inLanguage": { "description": "The language of the achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "name": { "description": "The name of the achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "related": { "type": "array", "items": { "$ref": "#/$defs/Related" } }, "resultDescription": { "type": "array", "items": { "$ref": "#/$defs/ResultDescription" } }, "specialization": { "description": "Name given to the focus, concentration, or specific area of study defined in the achievement. Examples include 'Entrepreneurship', 'Technical Communication', and 'Finance'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "tag": { "type": "array", "items": { "description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "version": { "description": "The version property allows issuers to set a version string for an Achievement. This is particularly useful when replacing a previous version with an update.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type", "criteria", "description", "name" ], "additionalProperties": true }, "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" ] }, { "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 }, "Criteria": { "description": "Descriptive metadata about the achievements necessary to be recognized with an assertion of a particular achievement. This data is added to the Achievement class so that it may be rendered when the achievement assertion is displayed, instead of simply a link to human-readable criteria external to the achievement. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether. Criteria is used to allow would-be recipients to learn what is required of them to be recognized with an assertion of a particular achievement. It is also used after the assertion is awarded to a recipient to let those inspecting earned achievements know the general requirements that the recipients met in order to earn it.", "type": "object", "properties": { "id": { "description": "The URI of a webpage that describes in a human-readable format the criteria for the achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "narrative": { "description": "A narrative of what is needed to earn the achievement. Markdown is allowed.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [], "additionalProperties": true }, "IdentifierEntry": { "description": "No description supplied.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'IdentifierEntry'.", "$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": [ "IdentifierEntry" ] }, "identifier": { "description": "An identifier.", "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.", "type": "string" }, "identifierType": { "description": "The identifier type.", "$comment": "Origin: IdentifierTypeEnum (EnumExt)", "oneOf": [ { "type": "string", "enum": [ "name", "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|.|-|_]+" } ] } }, "required": [ "type", "identifier", "identifierType" ], "additionalProperties": false }, "Proof": { "description": "A JSON-LD Linked Data proof.", "type": "object", "properties": { "type": { "description": "Signature suite used to produce proof.", "$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" }, "created": { "description": "Date the proof was created.", "$comment": "Origin: DateTime (PrimitiveType); An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "type": "string", "format": "date-time" }, "cryptosuite": { "description": "The suite used to create the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "challenge": { "description": "A value chosen by the verifier to mitigate authentication proof replay attacks.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "domain": { "description": "The domain of the proof to restrict its use to a particular target.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "nonce": { "description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofPurpose": { "description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "proofValue": { "description": "Value of the proof.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "verificationMethod": { "description": "The URL of the public key that can verify the signature.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "RefreshService": { "description": "The information in RefreshService is used to refresh the verifiable credential.", "type": "object", "properties": { "id": { "description": "The value MUST be the URL of the issuer's refresh service.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The name of the refresh service method.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Image": { "description": "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "type": "object", "properties": { "id": { "description": "The URI or Data URI of the image.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "MUST be the IRI 'Image'.", "$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": [ "Image" ] }, "caption": { "description": "The caption for the image.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": false }, "EndorsementSubject": { "description": "A collection of information about the subject of the endorsement.", "type": "object", "properties": { "id": { "description": "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "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'.", "$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" } }, "endorsementComment": { "description": "Allows endorsers to make a simple claim in writing about the entity.", "$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Result": { "description": "Describes a result that was achieved.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Result" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Result'.", "$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" } }, "achievedLevel": { "description": "If the result represents an achieved rubric criterion level (e.g. Mastered), the value is the `id` of the RubricCriterionLevel in linked ResultDescription.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "alignment": { "type": "array", "items": { "$ref": "#/$defs/Alignment" } }, "resultDescription": { "description": "An achievement can have many result descriptions describing possible results. The value of `resultDescription` is the `id` of the result description linked to this result. The linked result description must be in the achievement that is being asserted.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "status": { "description": "The status of the achievement. Required if `resultType` of the linked ResultDescription is Status.", "$comment": "Origin: ResultStatusType (Enumeration); Defined vocabulary to convey the status of an achievement.", "type": "string", "enum": [ "Completed", "Enrolled", "Failed", "InProgress", "OnHold", "Provisional", "Withdrew" ] }, "value": { "description": "A string representing the result of the performance, or demonstration, of the achievement. For example, 'A' if the recipient received an A grade in class.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "type" ], "additionalProperties": true }, "ProfileRef": { "description": "A description of the individual, entity, or organization that issued the credential. Either a URI with the Unique URI for the Issuer/Profile file, or a Profile object MUST be supplied.", "oneOf": [ { "description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, { "$ref": "#/$defs/Profile" } ] }, "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 }, "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 }, "Related": { "description": "Identifies a related achievement.", "type": "object", "properties": { "id": { "description": "The related achievement.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Related" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Related'.", "$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" } }, "inLanguage": { "description": "The language of the related achievement.", "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].", "type": "string", "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" }, "version": { "description": "The version of the related achievement.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Profile": { "description": "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "type": "object", "properties": { "id": { "description": "Unique URI for the Issuer/Profile file.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Profile" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "$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" } }, "name": { "description": "The name of the entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "url": { "description": "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "phone": { "description": "A phone number.", "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.", "type": "string" }, "description": { "description": "A short description of the issuer entity or organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "endorsement": { "type": "array", "items": { "$ref": "#/$defs/EndorsementCredential" } }, "endorsementJwt": { "type": "array", "items": { "description": "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "$comment": "Origin: CompactJws (DerivedType); A `String` in Compact JWS format [[RFC7515]].", "type": "string", "pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" } }, "image": { "$ref": "#/$defs/Image" }, "email": { "description": "An email address.", "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.", "type": "string" }, "address": { "$ref": "#/$defs/Address" }, "otherIdentifier": { "type": "array", "items": { "$ref": "#/$defs/IdentifierEntry" } }, "official": { "description": "If the entity is an organization, `official` is the name of an authorized official of the organization.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "parentOrg": { "$ref": "#/$defs/Profile" }, "familyName": { "description": "Family name. In the western world, often referred to as the 'last name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "givenName": { "description": "Given name. In the western world, often referred to as the 'first name' of a person.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "additionalName": { "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "patronymicName": { "description": "Patronymic name.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificPrefix": { "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "honorificSuffix": { "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "familyNamePrefix": { "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "dateOfBirth": { "description": "Birthdate of the person.", "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.", "type": "string", "format": "date" } }, "required": [ "id", "type" ], "additionalProperties": true }, "Address": { "description": "An address for the described entity.", "type": "object", "properties": { "type": { "type": "array", "minItems": 1, "contains": { "enum": [ "Address" ] }, "items": { "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "$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" } }, "addressCountry": { "description": "A country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressCountryCode": { "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "type": "string" }, "addressRegion": { "description": "A region within the country.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "addressLocality": { "description": "A locality within the region.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "streetAddress": { "description": "A street address within the locality.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postOfficeBoxNumber": { "description": "A post office box number for PO box addresses.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "postalCode": { "description": "A postal code.", "$comment": "Origin: String (PrimitiveType); Character strings.", "type": "string" }, "geo": { "$ref": "#/$defs/GeoCoordinates" } }, "required": [ "type" ], "additionalProperties": true }, "GeoCoordinates": { "description": "The geographic coordinates of a location.", "type": "object", "properties": { "type": { "description": "MUST be the IRI 'GeoCoordinates'.", "$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": [ "GeoCoordinates" ] }, "latitude": { "description": "The latitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" }, "longitude": { "description": "The longitude of the location [[WGS84]].", "$comment": "Origin: Float (PrimitiveType)", "type": "number" } }, "required": [ "type", "latitude", "longitude" ], "additionalProperties": true }, "CredentialSchema": { "description": "Identify the type and location of a data schema.", "type": "object", "properties": { "id": { "description": "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).", "type": "string" }, "type": { "description": "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "$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" } }, "required": [ "id", "type" ], "additionalProperties": true } } }
Open Badges Data Model 3.0
{ "openapi" : "3.0.1", "info" : { "title" : "OpenAPI schema for Open Badges", "description" : "Open Badges Data Model 3.0", "termsOfService" : "https://www.imsglobal.org/license.html", "contact" : { "name" : "IMS Global", "url" : "https://www.imsglobal.org", "email" : "support@imsglobal.org" }, "license" : { "name" : "IMS Global Specification Document License", "url" : "https://www.imsglobal.org/license.html" }, "version" : "3.0", "x-status" : "Candidate Final", "x-model-pid" : "org.1edtech.ob.v3p0.model", "x-service-pid" : "org.1edtech.ob.v3p0.rest.servicemodel", "x-src-operation-count" : 5, "x-oas-operation-count" : 5 }, "servers" : [ { "url" : "https://example.org/ims/ob/v3p0", "description" : "The above Server URL should be changed to the actual server location." } ], "tags" : [ { "name" : "OpenBadgeCredentials", "description" : "These endpoints are used to exchange OpenBadgeCredentials and Profile information." }, { "name" : "Discovery" } ], "paths" : { "/credentials" : { "get" : { "tags" : [ "OpenBadgeCredentials" ], "summary" : "The REST GET operation for the getCredentials() API call.", "description" : "Get issued OpenBadgeCredentials from the [=resource server=] for the supplied parameters and access token.", "operationId" : "getCredentials", "parameters" : [ { "name" : "limit", "in" : "query", "description" : "The maximum number of OpenBadgeCredentials to return per page.", "required" : false, "allowEmptyValue" : false, "style" : "form", "schema" : { "minimum" : 1, "type" : "integer", "format" : "int32" } }, { "name" : "offset", "in" : "query", "description" : "The index of the first AchievementCredential to return. (zero indexed)", "required" : false, "allowEmptyValue" : false, "style" : "form", "schema" : { "minimum" : 0, "type" : "integer", "format" : "int32" } }, { "name" : "since", "in" : "query", "description" : "Only include OpenBadgeCredentials issued after this timestamp.", "required" : false, "allowEmptyValue" : false, "style" : "form", "schema" : { "type" : "string", "description" : "An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss.", "format" : "date-time" } } ], "responses" : { "200" : { "description" : "The set of OpenBadgeCredentials that meet the request parameters. Paging applies to the total number of OpenBadgeCredentials in the response.", "headers" : { "X-Total-Count" : { "$ref" : "#/components/headers/X-Total-Count" } }, "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/GetOpenBadgeCredentialsResponse" } } }, "links" : { "next" : { "$ref" : "#/components/links/next" }, "last" : { "$ref" : "#/components/links/last" }, "first" : { "$ref" : "#/components/links/first" }, "prev" : { "$ref" : "#/components/links/prev" } } }, "400" : { "description" : "As defined in [[rfc9110]], indicating that the server cannot or will not process the request due to something that is perceived to be a client error.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "401" : { "description" : "As defined in [[rfc9110]], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "403" : { "description" : "As defined in [[rfc9110]], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "405" : { "description" : "As defined in [[rfc9110]], indicating that the server does not allow the method.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "500" : { "description" : "As defined in [[rfc9110]]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "default" : { "description" : "The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } } }, "security" : [ { "OAuth2ACG" : [ "https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.readonly" ] } ], "x-operation-pid" : "org.1edtech.ob.v3p0.rest.getcredentials.operation" }, "post" : { "tags" : [ "OpenBadgeCredentials" ], "summary" : "The REST POST operation for the upsertCredential() API call.", "description" : "Create or replace an AchievementCredential on the [=resource server=], appending it to the list of credentials for the subject, or replacing an existing entry in that list. The [=resource server=] SHOULD use the [=credential equality and comparison=] algorithm to compare and determine initial equality. The response code makes clear whether the operation resulted in a replacement or an insertion.", "operationId" : "upsertCredential", "requestBody" : { "description" : "The request body for the upsertCredential operation.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/AchievementCredential" } }, "text/plain" : { "schema" : { "pattern" : "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$", "type" : "string", "description" : "A `String` in Compact JWS format [[RFC7515]]." } } }, "required" : true }, "responses" : { "200" : { "description" : "The AchievementCredential was successfully replaced on the [=resource server=]. The response body MUST be the AchievementCredential in the request.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/AchievementCredential" } }, "text/plain" : { "schema" : { "pattern" : "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$", "type" : "string", "description" : "A `String` in Compact JWS format [[RFC7515]]." } } } }, "201" : { "description" : "The AchievementCredential was successfully created on the [=resource server=]. The response body MUST be the AchievementCredential in the request.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/AchievementCredential" } }, "text/plain" : { "schema" : { "pattern" : "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$", "type" : "string", "description" : "A `String` in Compact JWS format [[RFC7515]]." } } } }, "304" : { "description" : "As defined in [[rfc9110]], indicating that there is no need for the server to transfer a representation of the target resource because the request indicates that the client, which made the request conditional, already has a valid representation.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "400" : { "description" : "As defined in [[rfc9110]], indicating that the server cannot or will not process the request due to something that is perceived to be a client error.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "401" : { "description" : "As defined in [[rfc9110]], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "403" : { "description" : "As defined in [[rfc9110]], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "404" : { "description" : "As defined in [[rfc9110]], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "405" : { "description" : "As defined in [[rfc9110]], indicating that the server does not allow the method.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "500" : { "description" : "As defined in [[rfc9110]]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "default" : { "description" : "The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } } }, "security" : [ { "OAuth2ACG" : [ "https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.upsert" ] } ], "x-operation-pid" : "org.1edtech.ob.v3p0.rest.upsertcredential.operation" } }, "/profile" : { "get" : { "tags" : [ "OpenBadgeCredentials" ], "summary" : "The REST GET operation for the getProfile() API call.", "description" : "Fetch the profile from the [=resource server=] for the supplied access token. Profiles that are received MAY contain attributes that a Host SHOULD authenticate before using in practice.", "operationId" : "getProfile", "responses" : { "200" : { "description" : "The 200 (OK) response to the getProfile() API call.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Profile" } } } }, "404" : { "description" : "As defined in [[rfc9110]], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "400" : { "description" : "As defined in [[rfc9110]], indicating that the server cannot or will not process the request due to something that is perceived to be a client error.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "401" : { "description" : "As defined in [[rfc9110]], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "403" : { "description" : "As defined in [[rfc9110]], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "405" : { "description" : "As defined in [[rfc9110]], indicating that the server does not allow the method.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "500" : { "description" : "As defined in [[rfc9110]]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "default" : { "description" : "The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } } }, "security" : [ { "OAuth2ACG" : [ "https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.readonly" ] } ], "x-operation-pid" : "org.1edtech.ob.v3p0.rest.getprofile.operation" }, "put" : { "tags" : [ "OpenBadgeCredentials" ], "summary" : "The REST PUT operation for the putProfile() API call.", "description" : "Update the profile for the authenticate entity.", "operationId" : "putProfile", "requestBody" : { "description" : "The request body for the putProfile operation.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Profile" } } }, "required" : true }, "responses" : { "200" : { "description" : "The 200 (OK) response to the putProfile() API call.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Profile" } } } }, "202" : { "description" : "As defined in [[rfc9110]], indicating that the request has been accepted for processing, but the processing has not been completed.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "304" : { "description" : "As defined in [[rfc9110]], indicating that there is no need for the server to transfer a representation of the target resource because the request indicates that the client, which made the request conditional, already has a valid representation.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "400" : { "description" : "As defined in [[rfc9110]], indicating that the server cannot or will not process the request due to something that is perceived to be a client error.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "401" : { "description" : "As defined in [[rfc9110]], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "403" : { "description" : "As defined in [[rfc9110]], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "404" : { "description" : "As defined in [[rfc9110]], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "405" : { "description" : "As defined in [[rfc9110]], indicating that the server does not allow the method.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "500" : { "description" : "As defined in [[rfc9110]]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } }, "default" : { "description" : "The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } } }, "security" : [ { "OAuth2ACG" : [ "https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.update" ] } ], "x-operation-pid" : "org.1edtech.ob.v3p0.rest.putprofile.operation" } }, "/discovery" : { "get" : { "tags" : [ "Discovery" ], "summary" : "The REST GET operation for the getServiceDescription() API call.", "description" : "Fetch the Service Description Document from the [=resource server=].", "operationId" : "getServiceDescription", "responses" : { "200" : { "description" : "The 200 (OK) response to the getServiceDescription() API call.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/ServiceDescriptionDocument" } } } }, "default" : { "description" : "The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Imsx_StatusInfo" } } } } }, "x-operation-pid" : "org.1edtech.ob.v3p0.rest.getservicedescription.operation" } } }, "components" : { "schemas" : { "Address" : { "required" : [ "type" ], "type" : "object", "properties" : { "addressCountry" : { "type" : "string", "description" : "A country.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "geo" : { "$ref" : "#/components/schemas/GeoCoordinates" }, "addressCountryCode" : { "type" : "string", "description" : "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.countrycode.class" }, "streetAddress" : { "type" : "string", "description" : "A street address within the locality.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "postalCode" : { "type" : "string", "description" : "A postal code.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "addressLocality" : { "type" : "string", "description" : "A locality within the region.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "type" : { "minItems" : 1, "type" : "array", "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'.", "items" : { "type" : "string", "description" : "A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI)." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" }, "addressRegion" : { "type" : "string", "description" : "A region within the country.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "postOfficeBoxNumber" : { "type" : "string", "description" : "A post office box number for PO box addresses.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" } }, "additionalProperties" : true, "description" : "An address for the described entity.", "x-class-pid" : "org.1edtech.ob.v3p0.address.class" }, "CredentialSchema" : { "required" : [ "id", "type" ], "type" : "object", "properties" : { "id" : { "type" : "string", "description" : "The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "type" : { "type" : "string", "description" : "The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" } }, "additionalProperties" : true, "description" : "Identify the type and location of a data schema.", "x-class-pid" : "org.1edtech.ob.v3p0.credentialschema.class" }, "OpenApiSecuritySchemes" : { "type" : "object", "properties" : { "OAuth2ACG" : { "$ref" : "#/components/schemas/OpenApiOAuth2SecurityScheme" } }, "additionalProperties" : false, "description" : "The Map of security scheme objects supported by this specification.", "x-class-pid" : "org.1edtech.ob.v3p0.openapisecurityschemes.class" }, "Criteria" : { "type" : "object", "properties" : { "narrative" : { "type" : "string", "description" : "A narrative of what is needed to earn the achievement. Markdown is allowed.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.markdown.class" }, "id" : { "type" : "string", "description" : "The URI of a webpage that describes in a human-readable format the criteria for the achievement.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" } }, "additionalProperties" : true, "description" : "Descriptive metadata about the achievements necessary to be recognized with an assertion of a particular achievement. This data is added to the Achievement class so that it may be rendered when the achievement assertion is displayed, instead of simply a link to human-readable criteria external to the achievement. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether. Criteria is used to allow would-be recipients to learn what is required of them to be recognized with an assertion of a particular achievement. It is also used after the assertion is awarded to a recipient to let those inspecting earned achievements know the general requirements that the recipients met in order to earn it.", "x-class-pid" : "org.1edtech.ob.v3p0.criteria.class" }, "OpenApiComponents" : { "required" : [ "securitySchemes" ], "type" : "object", "properties" : { "securitySchemes" : { "$ref" : "#/components/schemas/OpenApiSecuritySchemes" } }, "additionalProperties" : true, "description" : "Holds a set of reusable objects for different aspects of the OAS. All objects defined within the components object will have no effect on the API unless they are explicitly referenced from properties outside the components object.", "x-class-pid" : "org.1edtech.ob.v3p0.openapicomponents.class" }, "Image" : { "required" : [ "id", "type" ], "type" : "object", "properties" : { "caption" : { "type" : "string", "description" : "The caption for the image.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "id" : { "type" : "string", "description" : "The URI or Data URI of the image.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "type" : { "type" : "string", "description" : "MUST be the IRI 'Image'.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" } }, "additionalProperties" : false, "description" : "Metadata about images that represent assertions, achieve or profiles. These properties can typically be represented as just the id string of the image, but using a fleshed-out document allows for including captions and other applicable metadata.", "x-class-pid" : "org.1edtech.ob.v3p0.image.class" }, "Profile" : { "required" : [ "id", "type" ], "type" : "object", "properties" : { "image" : { "$ref" : "#/components/schemas/Image" }, "endorsement" : { "minItems" : 0, "type" : "array", "description" : "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with a Data Integrity proof format.", "items" : { "$ref" : "#/components/schemas/EndorsementCredential" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.endorsementcredential.class" }, "address" : { "$ref" : "#/components/schemas/Address" }, "givenName" : { "type" : "string", "description" : "Given name. In the western world, often referred to as the 'first name' of a person.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "description" : { "type" : "string", "description" : "A short description of the issuer entity or organization.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "official" : { "type" : "string", "description" : "If the entity is an organization, `official` is the name of an authorized official of the organization.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "honorificPrefix" : { "type" : "string", "description" : "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "dateOfBirth" : { "type" : "string", "description" : "Birthdate of the person.", "format" : "date", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.date.class" }, "type" : { "minItems" : 1, "type" : "array", "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'.", "items" : { "type" : "string", "description" : "A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI)." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" }, "url" : { "type" : "string", "description" : "The homepage or social media profile of the entity, whether individual or institutional. Should be a URL/URI Accessible via HTTP.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "endorsementJwt" : { "minItems" : 0, "type" : "array", "description" : "Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format.", "items" : { "pattern" : "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$", "type" : "string", "description" : "A `String` in Compact JWS format [[RFC7515]]." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.compactjws.class" }, "honorificSuffix" : { "type" : "string", "description" : "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "phone" : { "type" : "string", "description" : "A phone number.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.phonenumber.class" }, "familyName" : { "type" : "string", "description" : "Family name. In the western world, often referred to as the 'last name' of a person.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "familyNamePrefix" : { "type" : "string", "description" : "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "name" : { "type" : "string", "description" : "The name of the entity or organization.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "patronymicName" : { "type" : "string", "description" : "Patronymic name.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "id" : { "type" : "string", "description" : "Unique URI for the Issuer/Profile file.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "otherIdentifier" : { "minItems" : 0, "type" : "array", "description" : "A list of identifiers for the described entity.", "items" : { "$ref" : "#/components/schemas/IdentifierEntry" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.identifierentry.class" }, "parentOrg" : { "$ref" : "#/components/schemas/Profile" }, "additionalName" : { "type" : "string", "description" : "Additional name. Includes what is often referred to as 'middle name' in the western world.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "email" : { "type" : "string", "description" : "An email address.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.emailaddress.class" } }, "additionalProperties" : true, "description" : "A Profile is a collection of information that describes the entity or organization using Open Badges. Issuers must be represented as Profiles, and endorsers, or other entities may also be represented using this vocabulary. Each Profile that represents an Issuer may be referenced in many BadgeClasses that it has defined. Anyone can create and host an Issuer file to start issuing Open Badges. Issuers may also serve as recipients of Open Badges, often identified within an Assertion by specific properties, like their url or contact email address.", "x-class-pid" : "org.1edtech.ob.v3p0.profile.class" }, "Result" : { "required" : [ "type" ], "type" : "object", "properties" : { "achievedLevel" : { "type" : "string", "description" : "If the result represents an achieved rubric criterion level (e.g. Mastered), the value is the `id` of the RubricCriterionLevel in linked ResultDescription.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "resultDescription" : { "type" : "string", "description" : "An achievement can have many result descriptions describing possible results. The value of `resultDescription` is the `id` of the result description linked to this result. The linked result description must be in the achievement that is being asserted.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "type" : { "minItems" : 1, "type" : "array", "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Result'.", "items" : { "type" : "string", "description" : "A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI)." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" }, "alignment" : { "minItems" : 0, "type" : "array", "description" : "The alignments between this result and nodes in external frameworks. This set of alignments are in addition to the set of alignments defined in the corresponding ResultDescription object.", "items" : { "$ref" : "#/components/schemas/Alignment" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.alignment.class" }, "value" : { "type" : "string", "description" : "A string representing the result of the performance, or demonstration, of the achievement. For example, 'A' if the recipient received an A grade in class.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "status" : { "type" : "string", "description" : "The status of the achievement. Required if `resultType` of the linked ResultDescription is Status.", "enum" : [ "Completed", "Enrolled", "Failed", "InProgress", "OnHold", "Provisional", "Withdrew" ], "x-srcprop-pid" : "org.1edtech.ob.v3p0.resultstatustype.class" } }, "additionalProperties" : true, "description" : "Describes a result that was achieved.", "x-class-pid" : "org.1edtech.ob.v3p0.result.class" }, "IdentifierEntry" : { "required" : [ "type", "identifier", "identifierType" ], "type" : "object", "properties" : { "identifier" : { "type" : "string", "description" : "An identifier.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.identifier.class" }, "identifierType" : { "description" : "The identifier type.", "anyOf" : [ { "type" : "string", "enum" : [ "name", "sourcedId", "systemId", "productId", "userName", "accountId", "emailAddress", "nationalIdentityNumber", "isbn", "issn", "lisSourcedId", "oneRosterSourcedId", "sisSourcedId", "ltiContextId", "ltiDeploymentId", "ltiToolId", "ltiPlatformId", "ltiUserId", "identifier" ] }, { "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+", "type" : "string" } ], "x-srcprop-pid" : "org.1edtech.ob.v3p0.identifiertypeenum.class" }, "type" : { "type" : "string", "description" : "MUST be the IRI 'IdentifierEntry'.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" } }, "additionalProperties" : false, "description" : "The IdentifierEntry complex type.", "x-class-pid" : "org.1edtech.ob.v3p0.identifierentry.class" }, "Alignment" : { "required" : [ "type", "targetName", "targetUrl" ], "type" : "object", "properties" : { "targetName" : { "type" : "string", "description" : "Name of the alignment.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "targetFramework" : { "type" : "string", "description" : "Name of the framework the alignment target.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "targetDescription" : { "type" : "string", "description" : "Short description of the alignment target.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "targetCode" : { "type" : "string", "description" : "If applicable, a locally unique string identifier that identifies the alignment target within its framework and/or targetUrl.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "targetType" : { "description" : "The type of the alignment target node.", "anyOf" : [ { "type" : "string", "enum" : [ "ceasn:Competency", "ceterms:Credential", "CFItem", "CFRubric", "CFRubricCriterion", "CFRubricCriterionLevel", "CTDL" ] }, { "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+", "type" : "string" } ], "x-srcprop-pid" : "org.1edtech.ob.v3p0.alignmenttargettype.class" }, "type" : { "minItems" : 1, "type" : "array", "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Alignment'.", "items" : { "type" : "string", "description" : "A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI)." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" }, "targetUrl" : { "type" : "string", "description" : "URL linking to the official description of the alignment target, for example an individual standard within an educational framework.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.url.class" } }, "additionalProperties" : true, "description" : "Describes an alignment between an achievement and a node in an educational framework.", "x-class-pid" : "org.1edtech.ob.v3p0.alignment.class" }, "Imsx_CodeMinorField" : { "required" : [ "imsx_codeMinorFieldName", "imsx_codeMinorFieldValue" ], "type" : "object", "properties" : { "imsx_codeMinorFieldName" : { "type" : "string", "description" : "This should contain the identity of the system that has produced the code minor status code report.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.normalizedstring.class" }, "imsx_codeMinorFieldValue" : { "type" : "string", "description" : "The code minor status code (this is a value from the corresponding enumerated vocabulary).", "enum" : [ "forbidden", "fullsuccess", "internal_server_error", "invalid_data", "invalid_query_parameter", "misdirected_request", "not_acceptable", "not_allowed", "not_found", "not_modified", "server_busy", "unauthorizedrequest", "unknown" ], "x-srcprop-pid" : "org.1edtech.ob.v3p0.imsx_codeminorfieldvalue.class" } }, "additionalProperties" : false, "description" : "This is the container for a single code minor status code.", "x-class-pid" : "org.1edtech.ob.v3p0.imsx_codeminorfield.class" }, "ServiceDescriptionDocument" : { "required" : [ "openapi", "info", "components" ], "type" : "object", "properties" : { "components" : { "$ref" : "#/components/schemas/OpenApiComponents" }, "openapi" : { "type" : "string", "description" : "This string MUST be the semantic version number of the OpenAPI Specification version that the OpenAPI document uses. The openapi field SHOULD be used by tooling specifications and clients to interpret the OpenAPI document. This is not related to the API info.version string.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "info" : { "$ref" : "#/components/schemas/OpenApiInfo" } }, "additionalProperties" : true, "description" : "The Service Description Document (SDD) is a machine readable document that contains the description of the service features supported by the Provider/Platform. The SDD is an OpenAPI 3.0 (JSON) [[OPENAPIS-3.0]] structured document that MUST be a profiled version of the OpenAPI 3.0 (JSON) file provided provided with this specification. This profiled version contains all of the details about the supported set of service end-points, the supported optional data fields, definitions of the proprietary data fields supplied using the permitted extension mechanisms, definitions of the available proprietary endpoints, and information about the security mechanisms.", "x-class-pid" : "org.1edtech.ob.v3p0.servicedescriptiondocument.class" }, "Evidence" : { "required" : [ "type" ], "type" : "object", "properties" : { "audience" : { "type" : "string", "description" : "A description of the intended audience for a piece of evidence.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "narrative" : { "type" : "string", "description" : "A narrative that describes the evidence and process of achievement that led to an assertion.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.markdown.class" }, "name" : { "type" : "string", "description" : "A descriptive title of the evidence.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "genre" : { "type" : "string", "description" : "A string that describes the type of evidence. For example, Poetry, Prose, Film.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "description" : { "type" : "string", "description" : "A longer description of the evidence.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "id" : { "type" : "string", "description" : "The URL of a webpage presenting evidence of achievement or the evidence encoded as a Data URI. The schema of the webpage is undefined.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "type" : { "minItems" : 1, "type" : "array", "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Evidence'.", "items" : { "type" : "string", "description" : "A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI)." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" } }, "additionalProperties" : true, "description" : "Descriptive metadata about evidence related to the achievement assertion. Each instance of the evidence class present in an assertion corresponds to one entity, though a single entry can describe a set of items collectively. There may be multiple evidence entries referenced from an assertion. The narrative property is also in scope of the assertion class to provide an overall description of the achievement related to the assertion in rich text. It is used here to provide a narrative of achievement of the specific entity described. If both the description and narrative properties are present, displayers can assume the narrative value goes into more detail and is not simply a recapitulation of description.", "x-class-pid" : "org.1edtech.ob.v3p0.evidence.class" }, "Achievement" : { "required" : [ "id", "type", "criteria", "description", "name" ], "type" : "object", "properties" : { "achievementType" : { "description" : "The type of achievement. This is an extensible vocabulary.", "anyOf" : [ { "type" : "string", "enum" : [ "Achievement", "ApprenticeshipCertificate", "Assessment", "Assignment", "AssociateDegree", "Award", "Badge", "BachelorDegree", "Certificate", "CertificateOfCompletion", "Certification", "CommunityService", "Competency", "Course", "CoCurricular", "Degree", "Diploma", "DoctoralDegree", "Fieldwork", "GeneralEducationDevelopment", "JourneymanCertificate", "LearningProgram", "License", "Membership", "ProfessionalDoctorate", "QualityAssuranceCredential", "MasterCertificate", "MasterDegree", "MicroCredential", "ResearchDoctorate", "SecondarySchoolDiploma" ] }, { "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+", "type" : "string" } ], "x-srcprop-pid" : "org.1edtech.ob.v3p0.achievementtype.class" }, "image" : { "$ref" : "#/components/schemas/Image" }, "creator" : { "$ref" : "#/components/schemas/Profile" }, "endorsement" : { "minItems" : 0, "type" : "array", "description" : "Allows endorsers to make specific claims about the Achievement. These endorsements are signed with a Data Integrity proof format.", "items" : { "$ref" : "#/components/schemas/EndorsementCredential" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.endorsementcredential.class" }, "criteria" : { "$ref" : "#/components/schemas/Criteria" }, "humanCode" : { "type" : "string", "description" : "The code, generally human readable, associated with an achievement.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "description" : { "type" : "string", "description" : "A short description of the achievement.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "inLanguage" : { "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$", "type" : "string", "description" : "The language of the achievement.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.languagecode.class" }, "type" : { "minItems" : 1, "type" : "array", "description" : "The type MUST include the IRI 'Achievement'.", "items" : { "type" : "string", "description" : "A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI)." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" }, "version" : { "type" : "string", "description" : "The version property allows issuers to set a version string for an Achievement. This is particularly useful when replacing a previous version with an update.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "endorsementJwt" : { "minItems" : 0, "type" : "array", "description" : "Allows endorsers to make specific claims about the Achievement. These endorsements are signed with the VC-JWT proof format.", "items" : { "pattern" : "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$", "type" : "string", "description" : "A `String` in Compact JWS format [[RFC7515]]." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.compactjws.class" }, "creditsAvailable" : { "type" : "number", "description" : "Credit hours associated with this entity, or credit hours possible. For example 3.0.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.float.class" }, "related" : { "minItems" : 0, "type" : "array", "description" : "The related property identifies another Achievement that should be considered the same for most purposes. It is primarily intended to identify alternate language editions or previous versions of Achievements.", "items" : { "$ref" : "#/components/schemas/Related" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.related.class" }, "name" : { "type" : "string", "description" : "The name of the achievement.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "specialization" : { "type" : "string", "description" : "Name given to the focus, concentration, or specific area of study defined in the achievement. Examples include 'Entrepreneurship', 'Technical Communication', and 'Finance'.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "id" : { "type" : "string", "description" : "Unique URI for the Achievement.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "resultDescription" : { "minItems" : 0, "type" : "array", "description" : "The set of result descriptions that may be asserted as results with this achievement.", "items" : { "$ref" : "#/components/schemas/ResultDescription" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.resultdescription.class" }, "tag" : { "minItems" : 0, "type" : "array", "description" : "One or more short, human-friendly, searchable, keywords that describe the type of achievement.", "items" : { "type" : "string", "description" : "Character strings." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "alignment" : { "minItems" : 0, "type" : "array", "description" : "An object describing which objectives or educational standards this achievement aligns to, if any.", "items" : { "$ref" : "#/components/schemas/Alignment" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.alignment.class" }, "otherIdentifier" : { "minItems" : 0, "type" : "array", "description" : "A list of identifiers for the described entity.", "items" : { "$ref" : "#/components/schemas/IdentifierEntry" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.identifierentry.class" }, "fieldOfStudy" : { "type" : "string", "description" : "Category, subject, area of study, discipline, or general branch of knowledge. Examples include Business, Education, Psychology, and Technology.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" } }, "additionalProperties" : true, "description" : "A collection of information about the accomplishment recognized by the Assertion. Many assertions may be created corresponding to one Achievement.", "x-class-pid" : "org.1edtech.ob.v3p0.achievement.class" }, "IdentityObject" : { "required" : [ "type", "hashed", "identityHash", "identityType" ], "type" : "object", "properties" : { "salt" : { "type" : "string", "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.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "identityHash" : { "type" : "string", "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.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.identityhash.class" }, "identityType" : { "description" : "The identity type.", "anyOf" : [ { "type" : "string", "enum" : [ "name", "sourcedId", "systemId", "productId", "userName", "accountId", "emailAddress", "nationalIdentityNumber", "isbn", "issn", "lisSourcedId", "oneRosterSourcedId", "sisSourcedId", "ltiContextId", "ltiDeploymentId", "ltiToolId", "ltiPlatformId", "ltiUserId", "identifier" ] }, { "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+", "type" : "string" } ], "x-srcprop-pid" : "org.1edtech.ob.v3p0.identifiertypeenum.class" }, "hashed" : { "type" : "boolean", "description" : "Whether or not the `identityHash` value is hashed.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.boolean.class" }, "type" : { "type" : "string", "description" : "MUST be the IRI 'IdentityObject'.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" } }, "additionalProperties" : false, "description" : "A collection of information about the recipient of an achievement.", "x-class-pid" : "org.1edtech.ob.v3p0.identityobject.class" }, "Imsx_CodeMinor" : { "required" : [ "imsx_codeMinorField" ], "type" : "object", "properties" : { "imsx_codeMinorField" : { "minItems" : 1, "type" : "array", "description" : "Each reported code minor status code.", "items" : { "$ref" : "#/components/schemas/Imsx_CodeMinorField" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.imsx_codeminorfield.class" } }, "additionalProperties" : false, "description" : "This is the container for the set of code minor status codes reported in the responses from the Service Provider.", "x-class-pid" : "org.1edtech.ob.v3p0.imsx_codeminor.class" }, "CredentialStatus" : { "required" : [ "id", "type" ], "type" : "object", "properties" : { "id" : { "type" : "string", "description" : "The value MUST be the URL of the issuer's credential status method.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "type" : { "type" : "string", "description" : "The name of the credential status method.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" } }, "additionalProperties" : true, "description" : "The information in CredentialStatus is used to discover information about the current status of a verifiable credential, such as whether it is suspended or revoked.", "x-class-pid" : "org.1edtech.ob.v3p0.credentialstatus.class" }, "Imsx_StatusInfo" : { "required" : [ "imsx_codeMajor", "imsx_severity" ], "type" : "object", "properties" : { "imsx_codeMinor" : { "$ref" : "#/components/schemas/Imsx_CodeMinor" }, "imsx_codeMajor" : { "type" : "string", "description" : "The code major value (from the corresponding enumerated vocabulary).", "enum" : [ "failure", "processing", "success", "unsupported" ], "x-srcprop-pid" : "org.1edtech.ob.v3p0.imsx_codemajor.class" }, "imsx_description" : { "type" : "string", "description" : "A human readable description supplied by the entity creating the status code information.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "imsx_severity" : { "type" : "string", "description" : "The severity value (from the corresponding enumerated vocabulary).", "enum" : [ "error", "status", "warning" ], "x-srcprop-pid" : "org.1edtech.ob.v3p0.imsx_severity.class" } }, "additionalProperties" : false, "description" : "This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider.", "x-class-pid" : "org.1edtech.ob.v3p0.imsx_statusinfo.class" }, "TermsOfUse" : { "required" : [ "type" ], "type" : "object", "properties" : { "id" : { "type" : "string", "description" : "The value MUST be a URI identifying the term of use.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "type" : { "type" : "string", "description" : "The value MUST identify the type of the terms of use.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" } }, "additionalProperties" : true, "description" : "Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued", "x-class-pid" : "org.1edtech.ob.v3p0.termsofuse.class" }, "OpenApiOAuth2SecurityScheme" : { "required" : [ "type", "x-imssf-registrationUrl" ], "type" : "object", "properties" : { "x-imssf-registrationUrl" : { "type" : "string", "description" : "A fully qualified URL to the Client Registration endpoint.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.url.class" }, "description" : { "type" : "string", "description" : "A short description for the security scheme.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "type" : { "type" : "string", "description" : "MUST be the string `oauth2`.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" } }, "additionalProperties" : true, "description" : "Defines an OAuth2 security scheme that can be used by the operations.", "x-class-pid" : "org.1edtech.ob.v3p0.openapioauth2securityscheme.class" }, "RubricCriterionLevel" : { "required" : [ "id", "type", "name" ], "type" : "object", "properties" : { "level" : { "type" : "string", "description" : "The rubric performance level in terms of success.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "name" : { "type" : "string", "description" : "The name of the rubric criterion level.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "description" : { "type" : "string", "description" : "Description of the rubric criterion level.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "id" : { "type" : "string", "description" : "The unique URI for this rubric criterion level. Required so a result can link to this rubric criterion level.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "type" : { "minItems" : 1, "type" : "array", "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'RubricCriterionLevel'.", "items" : { "type" : "string", "description" : "A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI)." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" }, "alignment" : { "minItems" : 0, "type" : "array", "description" : "Alignments between this rubric criterion level and a rubric criterion levels defined in external frameworks.", "items" : { "$ref" : "#/components/schemas/Alignment" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.alignment.class" }, "points" : { "type" : "string", "description" : "The points associated with this rubric criterion level.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" } }, "additionalProperties" : true, "description" : "Describes a rubric criterion level.", "x-class-pid" : "org.1edtech.ob.v3p0.rubriccriterionlevel.class" }, "OpenApiInfo" : { "required" : [ "termsOfService", "title", "version", "x-imssf-privacyPolicyUrl" ], "type" : "object", "properties" : { "x-imssf-image" : { "type" : "string", "description" : "An image representing the [=resource server=]. MAY be a Data URI or the URL where the image may be found.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "x-imssf-privacyPolicyUrl" : { "type" : "string", "description" : "A fully qualified URL to the [=resource server=]'s privacy policy.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.url.class" }, "termsOfService" : { "type" : "string", "description" : "A fully qualified URL to the [=resource server=]'s terms of service.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.url.class" }, "title" : { "type" : "string", "description" : "The name of the [=resource server=].", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "version" : { "type" : "string", "description" : "The version of the API.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" } }, "additionalProperties" : true, "description" : "The object provides metadata about the API. The metadata MAY be used by the clients if needed, and MAY be presented in editing or documentation generation tools for convenience.", "x-class-pid" : "org.1edtech.ob.v3p0.openapiinfo.class" }, "EndorsementSubject" : { "required" : [ "id", "type" ], "type" : "object", "properties" : { "endorsementComment" : { "type" : "string", "description" : "Allows endorsers to make a simple claim in writing about the entity.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.markdown.class" }, "id" : { "type" : "string", "description" : "The identifier of the individual, entity, organization, assertion, or achievement that is endorsed.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "type" : { "minItems" : 1, "type" : "array", "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'EndorsementSubject'.", "items" : { "type" : "string", "description" : "A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI)." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" } }, "additionalProperties" : true, "description" : "A collection of information about the subject of the endorsement.", "x-class-pid" : "org.1edtech.ob.v3p0.endorsementsubject.class" }, "AchievementCredential" : { "required" : [ "@context", "id", "type", "credentialSubject", "issuer", "validFrom" ], "type" : "object", "properties" : { "image" : { "$ref" : "#/components/schemas/Image" }, "credentialSchema" : { "minItems" : 0, "type" : "array", "description" : "The value of the `credentialSchema` property MUST be one or more data schemas that provide verifiers with enough information to determine if the provided data conforms to the provided schema.", "items" : { "$ref" : "#/components/schemas/CredentialSchema" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.credentialschema.class" }, "awardedDate" : { "type" : "string", "description" : "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "format" : "date-time", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.datetimez.class" }, "endorsement" : { "minItems" : 0, "type" : "array", "description" : "Allows endorsers to make specific claims about the credential, and the achievement and profiles in the credential. These endorsements are signed with a Data Integrity proof format.", "items" : { "$ref" : "#/components/schemas/EndorsementCredential" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.endorsementcredential.class" }, "evidence" : { "minItems" : 0, "type" : "array", "description" : "A description of the work that the recipient did to earn the achievement. This can be a page that links out to other pages if linking directly to the work is infeasible.", "items" : { "$ref" : "#/components/schemas/Evidence" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.evidence.class" }, "credentialSubject" : { "$ref" : "#/components/schemas/AchievementSubject" }, "description" : { "type" : "string", "description" : "The short description of the credential for display purposes in wallets.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "validFrom" : { "type" : "string", "description" : "Timestamp of when the credential becomes valid.", "format" : "date-time", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.datetimez.class" }, "type" : { "minItems" : 1, "type" : "array", "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'AchievementCredential' or the URI 'OpenBadgeCredential'.", "items" : { "type" : "string", "description" : "A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI)." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" }, "@context" : { "minItems" : 1, "type" : "array", "description" : "The value of the `@context` property MUST be an ordered set where the first item is a URI with the value 'https://www.w3.org/ns/credentials/v2', and the second item is a URI with the value 'https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json'.", "items" : { "description" : "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf" : [ { "$ref" : "#/components/schemas/Map" }, { "type" : "string", "description" : "A `NormalizedString` that respresents a Uniform Resource Identifier (URI)." } ] }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.context.class" }, "issuer" : { "description" : "A description of the individual, entity, or organization that issued the credential.", "oneOf" : [ { "type" : "string", "description" : "A `NormalizedString` that respresents a Uniform Resource Identifier (URI)." }, { "$ref" : "#/components/schemas/Profile" } ], "x-srcprop-pid" : "org.1edtech.ob.v3p0.profileref.class" }, "credentialStatus" : { "$ref" : "#/components/schemas/CredentialStatus" }, "endorsementJwt" : { "minItems" : 0, "type" : "array", "description" : "Allows endorsers to make specific claims about the credential, and the achievement and profiles in the credential. These endorsements are signed with the VC-JWT proof format.", "items" : { "pattern" : "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$", "type" : "string", "description" : "A `String` in Compact JWS format [[RFC7515]]." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.compactjws.class" }, "termsOfUse" : { "minItems" : 0, "type" : "array", "description" : "The value of the `termsOfUse` property tells the verifier what actions it is required to perform (an obligation), not allowed to perform (a prohibition), or allowed to perform (a permission) if it is to accept the verifiable credential.", "items" : { "$ref" : "#/components/schemas/TermsOfUse" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.termsofuse.class" }, "name" : { "type" : "string", "description" : "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "refreshService" : { "$ref" : "#/components/schemas/RefreshService" }, "validUntil" : { "type" : "string", "description" : "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "format" : "date-time", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.datetimez.class" }, "id" : { "type" : "string", "description" : "Unambiguous reference to the credential.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "proof" : { "minItems" : 0, "type" : "array", "description" : "If present, one or more embedded cryptographic proofs that can be used to detect tampering and verify the authorship of the credential.", "items" : { "$ref" : "#/components/schemas/Proof" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.proof.class" } }, "additionalProperties" : true, "description" : "AchievementCredentials are representations of an awarded achievement, used to share information about a achievement belonging to one earner. Maps to a Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]]. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "x-class-pid" : "org.1edtech.ob.v3p0.achievementcredential.class" }, "GeoCoordinates" : { "required" : [ "type", "latitude", "longitude" ], "type" : "object", "properties" : { "latitude" : { "type" : "number", "description" : "The latitude of the location [[WGS84]].", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.float.class" }, "type" : { "type" : "string", "description" : "MUST be the IRI 'GeoCoordinates'.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" }, "longitude" : { "type" : "number", "description" : "The longitude of the location [[WGS84]].", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.float.class" } }, "additionalProperties" : true, "description" : "The geographic coordinates of a location.", "x-class-pid" : "org.1edtech.ob.v3p0.geocoordinates.class" }, "RefreshService" : { "required" : [ "id", "type" ], "type" : "object", "properties" : { "id" : { "type" : "string", "description" : "The value MUST be the URL of the issuer's refresh service.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "type" : { "type" : "string", "description" : "The name of the refresh service method.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" } }, "additionalProperties" : true, "description" : "The information in RefreshService is used to refresh the verifiable credential.", "x-class-pid" : "org.1edtech.ob.v3p0.refreshservice.class" }, "Related" : { "required" : [ "id", "type" ], "type" : "object", "properties" : { "inLanguage" : { "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$", "type" : "string", "description" : "The language of the related achievement.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.languagecode.class" }, "id" : { "type" : "string", "description" : "The related achievement.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "type" : { "minItems" : 1, "type" : "array", "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Related'.", "items" : { "type" : "string", "description" : "A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI)." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" }, "version" : { "type" : "string", "description" : "The version of the related achievement.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" } }, "additionalProperties" : true, "description" : "Identifies a related achievement.", "x-class-pid" : "org.1edtech.ob.v3p0.related.class" }, "ResultDescription" : { "required" : [ "id", "type", "name", "resultType" ], "type" : "object", "properties" : { "valueMax" : { "type" : "string", "description" : "The maximum possible `value` that may be asserted in a linked result.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "valueMin" : { "type" : "string", "description" : "The minimum possible `value` that may be asserted in a linked result.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "rubricCriterionLevel" : { "minItems" : 0, "type" : "array", "description" : "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.", "items" : { "$ref" : "#/components/schemas/RubricCriterionLevel" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.rubriccriterionlevel.class" }, "requiredLevel" : { "type" : "string", "description" : "The `id` of the rubric criterion level required to pass as determined by the achievement creator.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "name" : { "type" : "string", "description" : "The name of the result.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "id" : { "type" : "string", "description" : "The unique URI for this result description. Required so a result can link to this result description.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "allowedValue" : { "minItems" : 0, "type" : "array", "description" : "An ordered list of allowed values. The values should be ordered from low to high as determined by the achievement creator.", "items" : { "type" : "string", "description" : "Character strings." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "type" : { "minItems" : 1, "type" : "array", "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'ResultDescription'.", "items" : { "type" : "string", "description" : "A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI)." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" }, "alignment" : { "minItems" : 0, "type" : "array", "description" : "Alignments between this result description and nodes in external frameworks.", "items" : { "$ref" : "#/components/schemas/Alignment" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.alignment.class" }, "resultType" : { "description" : "The type of result this description represents. This is an extensible enumerated vocabulary.", "anyOf" : [ { "type" : "string", "enum" : [ "GradePointAverage", "LetterGrade", "Percent", "PerformanceLevel", "PredictedScore", "RawScore", "Result", "RubricCriterion", "RubricCriterionLevel", "RubricScore", "ScaledScore", "Status" ] }, { "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+", "type" : "string" } ], "x-srcprop-pid" : "org.1edtech.ob.v3p0.resulttype.class" }, "requiredValue" : { "type" : "string", "description" : "A value from `allowedValue` or within the range of `valueMin` to `valueMax` required to pass as determined by the achievement creator.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" } }, "additionalProperties" : true, "description" : "Describes a possible achievement result.", "x-class-pid" : "org.1edtech.ob.v3p0.resultdescription.class" }, "Proof" : { "required" : [ "type" ], "type" : "object", "properties" : { "proofValue" : { "type" : "string", "description" : "Value of the proof.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "created" : { "type" : "string", "description" : "Date the proof was created.", "format" : "date-time", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.datetime.class" }, "domain" : { "type" : "string", "description" : "The domain of the proof to restrict its use to a particular target.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "challenge" : { "type" : "string", "description" : "A value chosen by the verifier to mitigate authentication proof replay attacks.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "proofPurpose" : { "type" : "string", "description" : "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "type" : { "type" : "string", "description" : "Signature suite used to produce proof.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" }, "verificationMethod" : { "type" : "string", "description" : "The URL of the public key that can verify the signature.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "nonce" : { "type" : "string", "description" : "A value chosen by the creator of proof to randomize proof values for privacy purposes.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "cryptosuite" : { "type" : "string", "description" : "The suite used to create the proof.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" } }, "additionalProperties" : true, "description" : "A JSON-LD Linked Data proof.", "x-class-pid" : "org.1edtech.ob.v3p0.proof.class" }, "EndorsementCredential" : { "required" : [ "@context", "type", "id", "name", "credentialSubject", "issuer", "validFrom" ], "type" : "object", "properties" : { "credentialSchema" : { "minItems" : 0, "type" : "array", "description" : "The value of the `credentialSchema` property MUST be one or more data schemas that provide verifiers with enough information to determine if the provided data conforms to the provided schema.", "items" : { "$ref" : "#/components/schemas/CredentialSchema" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.credentialschema.class" }, "awardedDate" : { "type" : "string", "description" : "Timestamp of when the credential was awarded. `validFrom` is used to determine the most recent version of a Credential in conjunction with `issuer` and `id`. Consequently, the only way to update a Credental is to update the `validFrom`, losing the date when the Credential was originally awarded. `awardedDate` is meant to keep this original date.", "format" : "date-time", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.datetimez.class" }, "credentialSubject" : { "$ref" : "#/components/schemas/EndorsementSubject" }, "description" : { "type" : "string", "description" : "The short description of the credential for display purposes in wallets.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "validFrom" : { "type" : "string", "description" : "Timestamp of when the credential becomes valid.", "format" : "date-time", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.datetimez.class" }, "type" : { "minItems" : 1, "type" : "array", "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the URI 'VerifiableCredential', and one of the items MUST be the URI 'EndorsementCredential'.", "items" : { "type" : "string", "description" : "A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI)." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" }, "@context" : { "minItems" : 1, "type" : "array", "description" : "The value of the `@context` property MUST be an ordered set where the first item is a URI with the value 'https://www.w3.org/ns/credentials/v2', and the second item is a URI with the value 'https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json'.", "items" : { "description" : "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.", "oneOf" : [ { "$ref" : "#/components/schemas/Map" }, { "type" : "string", "description" : "A `NormalizedString` that respresents a Uniform Resource Identifier (URI)." } ] }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.context.class" }, "issuer" : { "description" : "A description of the individual, entity, or organization that issued the credential.", "oneOf" : [ { "type" : "string", "description" : "A `NormalizedString` that respresents a Uniform Resource Identifier (URI)." }, { "$ref" : "#/components/schemas/Profile" } ], "x-srcprop-pid" : "org.1edtech.ob.v3p0.profileref.class" }, "credentialStatus" : { "$ref" : "#/components/schemas/CredentialStatus" }, "termsOfUse" : { "minItems" : 0, "type" : "array", "description" : "The value of the `termsOfUse` property tells the verifier what actions it is required to perform (an obligation), not allowed to perform (a prohibition), or allowed to perform (a permission) if it is to accept the verifiable credential.", "items" : { "$ref" : "#/components/schemas/TermsOfUse" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.termsofuse.class" }, "name" : { "type" : "string", "description" : "The name of the credential for display purposes in wallets. For example, in a list of credentials and in detail views.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "refreshService" : { "$ref" : "#/components/schemas/RefreshService" }, "validUntil" : { "type" : "string", "description" : "If the credential has some notion of validity period, this indicates a timestamp when a credential should no longer be considered valid. After this time, the credential should be considered invalid.", "format" : "date-time", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.datetimez.class" }, "id" : { "type" : "string", "description" : "Unambiguous reference to the credential.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" }, "proof" : { "minItems" : 0, "type" : "array", "description" : "If present, one or more embedded cryptographic proofs that can be used to detect tampering and verify the authorship of the credential.", "items" : { "$ref" : "#/components/schemas/Proof" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.proof.class" } }, "additionalProperties" : true, "description" : "A verifiable credential that asserts a claim about an entity. As described in [[[#data-integrity]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.", "x-class-pid" : "org.1edtech.ob.v3p0.endorsementcredential.class" }, "AchievementSubject" : { "required" : [ "type", "achievement" ], "type" : "object", "properties" : { "identifier" : { "minItems" : 0, "type" : "array", "description" : "Other identifiers for the recipient of the achievement. Either `id` or at least one `identifier` MUST be supplied.", "items" : { "$ref" : "#/components/schemas/IdentityObject" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.identityobject.class" }, "image" : { "$ref" : "#/components/schemas/Image" }, "activityStartDate" : { "type" : "string", "description" : "The datetime the activity started.", "format" : "date-time", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.datetime.class" }, "role" : { "type" : "string", "description" : "Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "achievement" : { "$ref" : "#/components/schemas/Achievement" }, "narrative" : { "type" : "string", "description" : "A narrative that connects multiple pieces of evidence. Likely only present at this location if evidence is a multi-value array.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.markdown.class" }, "source" : { "$ref" : "#/components/schemas/Profile" }, "type" : { "minItems" : 1, "type" : "array", "description" : "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'AchievementSubject'.", "items" : { "type" : "string", "description" : "A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI)." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.iri.class" }, "result" : { "minItems" : 0, "type" : "array", "description" : "The set of results being asserted.", "items" : { "$ref" : "#/components/schemas/Result" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.result.class" }, "creditsEarned" : { "type" : "number", "description" : "The number of credits earned, generally in semester or quarter credit hours. This field correlates with the Achievement `creditsAvailable` field.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.float.class" }, "activityEndDate" : { "type" : "string", "description" : "The datetime the activity ended.", "format" : "date-time", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.datetime.class" }, "licenseNumber" : { "type" : "string", "description" : "The license number that was issued with this credential.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "term" : { "type" : "string", "description" : "The academic term in which this assertion was achieved.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.primitive.string.class" }, "id" : { "type" : "string", "description" : "An identifier for the Credential Subject. Either `id` or at least one `identifier` MUST be supplied.", "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.uri.class" } }, "additionalProperties" : true, "description" : "A collection of information about the recipient of an achievement. Maps to Credential Subject in [[VC-DATA-MODEL-2.0]].", "x-class-pid" : "org.1edtech.ob.v3p0.achievementsubject.class" }, "Map" : { "type" : "object", "properties" : { }, "additionalProperties" : true, "description" : "A map representing an object with unknown, arbitrary properties", "x-class-pid" : "org.1edtech.ob.v3p0.map.class" }, "GetOpenBadgeCredentialsResponse" : { "type" : "object", "properties" : { "credential" : { "minItems" : 0, "type" : "array", "description" : "OpenBadgeCredentials that have not been signed with the VC-JWT Proof Format MUST be in the `credential` array.", "items" : { "$ref" : "#/components/schemas/AchievementCredential" }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.achievementcredential.class" }, "compactJwsString" : { "minItems" : 0, "type" : "array", "description" : "OpenBadgeCredentials that have been signed with the VC-JWT Proof Format MUST be in the `compactJwsString` array.", "items" : { "pattern" : "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$", "type" : "string", "description" : "A `String` in Compact JWS format [[RFC7515]]." }, "x-srcprop-pid" : "org.1edtech.ob.v3p0.derived.compactjws.class" } }, "additionalProperties" : false, "description" : "The GetOpenBadgeCredentialsResponse complex type.", "x-class-pid" : "org.1edtech.ob.v3p0.getopenbadgecredentialsresponse.class" } }, "headers" : { "X-Total-Count" : { "description" : "The total number of resources that are available to be returned", "schema" : { "type" : "integer", "format" : "int32" } } }, "securitySchemes" : { "OAuth2ACG" : { "type" : "oauth2", "flows" : { "authorizationCode" : { "authorizationUrl" : "provider.example.com/auth", "tokenUrl" : "provider.example.com/token", "refreshUrl" : "provider.example.com/refresh", "scopes" : { "https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.readonly" : "Permission to read AchievementCredentials for the authenticated entity.", "https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.upsert" : "Permission to create or update AchievementCredentials for the authenticated entity.", "https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.readonly" : "Permission to read the profile for the authenticated entity.", "https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.update" : "Permission to update the profile for the authenticated entity." } } } } }, "links" : { "next" : { "operationId" : "getCredentials", "parameters" : { "limit" : "$request.path.limit", "offset" : "$request.path.offset" }, "description" : "Get the next set of resources i.e. from offset to offset+limit" }, "last" : { "operationId" : "getCredentials", "parameters" : { "limit" : "$request.path.limit", "offset" : "$request.path.offset" }, "description" : "Get the last set of resources i.e. from offset to end" }, "prev" : { "operationId" : "getCredentials", "parameters" : { "limit" : "$request.path.limit", "offset" : "$request.path.offset" }, "description" : "Get the previous set of resources i.e. from last_offset to last_offset+limit" }, "first" : { "operationId" : "getCredentials", "parameters" : { "limit" : "$request.path.limit", "offset" : "$request.path.offset" }, "description" : "Get the first set of resources i.e. from first to limit" } } } }
Open Badges Data Model 3.0
openapi: 3.0.1 info: title: OpenAPI schema for Open Badges description: Open Badges Data Model 3.0 termsOfService: https://www.imsglobal.org/license.html contact: name: IMS Global url: https://www.imsglobal.org email: support@imsglobal.org license: name: IMS Global Specification Document License url: https://www.imsglobal.org/license.html version: "3.0" x-status: Candidate Final x-model-pid: org.1edtech.ob.v3p0.model x-service-pid: org.1edtech.ob.v3p0.rest.servicemodel x-src-operation-count: 5 x-oas-operation-count: 5 servers: - url: https://example.org/ims/ob/v3p0 description: The above Server URL should be changed to the actual server location. tags: - name: OpenBadgeCredentials description: These endpoints are used to exchange OpenBadgeCredentials and Profile information. - name: Discovery paths: /credentials: get: tags: - OpenBadgeCredentials summary: The REST GET operation for the getCredentials() API call. description: "Get issued OpenBadgeCredentials from the [=resource server=] for\ \ the supplied parameters and access token." operationId: getCredentials parameters: - name: limit in: query description: The maximum number of OpenBadgeCredentials to return per page. required: false allowEmptyValue: false style: form schema: minimum: 1 type: integer format: int32 - name: offset in: query description: The index of the first AchievementCredential to return. (zero indexed) required: false allowEmptyValue: false style: form schema: minimum: 0 type: integer format: int32 - name: since in: query description: Only include OpenBadgeCredentials issued after this timestamp. required: false allowEmptyValue: false style: form schema: type: string description: "An [[ISO8601]] time using the syntax YYYY-MM-DDThh:mm:ss." format: date-time responses: "200": description: The set of OpenBadgeCredentials that meet the request parameters. Paging applies to the total number of OpenBadgeCredentials in the response. headers: X-Total-Count: $ref: '#/components/headers/X-Total-Count' content: application/json: schema: $ref: '#/components/schemas/GetOpenBadgeCredentialsResponse' links: next: $ref: '#/components/links/next' last: $ref: '#/components/links/last' first: $ref: '#/components/links/first' prev: $ref: '#/components/links/prev' "400": description: "As defined in [[rfc9110]], indicating that the server cannot\ \ or will not process the request due to something that is perceived to\ \ be a client error." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "401": description: "As defined in [[rfc9110]], indicating that the request has\ \ not been applied because it lacks valid authentication credentials for\ \ the target resource." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "403": description: "As defined in [[rfc9110]], indicating that the server understood\ \ the request but refuses to fulfill it. The exact reason SHOULD be explained\ \ in the response payload." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "405": description: "As defined in [[rfc9110]], indicating that the server does\ \ not allow the method." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "500": description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\ \ this error code - use only if there is catastrophic error and there\ \ is not a more appropriate code." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' default: description: The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' security: - OAuth2ACG: - https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.readonly x-operation-pid: org.1edtech.ob.v3p0.rest.getcredentials.operation post: tags: - OpenBadgeCredentials summary: The REST POST operation for the upsertCredential() API call. description: "Create or replace an AchievementCredential on the [=resource server=],\ \ appending it to the list of credentials for the subject, or replacing an\ \ existing entry in that list. The [=resource server=] SHOULD use the [=credential\ \ equality and comparison=] algorithm to compare and determine initial equality.\ \ The response code makes clear whether the operation resulted in a replacement\ \ or an insertion." operationId: upsertCredential requestBody: description: The request body for the upsertCredential operation. content: application/json: schema: $ref: '#/components/schemas/AchievementCredential' text/plain: schema: pattern: "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" type: string description: "A `String` in Compact JWS format [[RFC7515]]." required: true responses: "200": description: "The AchievementCredential was successfully replaced on the\ \ [=resource server=]. The response body MUST be the AchievementCredential\ \ in the request." content: application/json: schema: $ref: '#/components/schemas/AchievementCredential' text/plain: schema: pattern: "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" type: string description: "A `String` in Compact JWS format [[RFC7515]]." "201": description: "The AchievementCredential was successfully created on the\ \ [=resource server=]. The response body MUST be the AchievementCredential\ \ in the request." content: application/json: schema: $ref: '#/components/schemas/AchievementCredential' text/plain: schema: pattern: "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" type: string description: "A `String` in Compact JWS format [[RFC7515]]." "304": description: "As defined in [[rfc9110]], indicating that there is no need\ \ for the server to transfer a representation of the target resource because\ \ the request indicates that the client, which made the request conditional,\ \ already has a valid representation." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "400": description: "As defined in [[rfc9110]], indicating that the server cannot\ \ or will not process the request due to something that is perceived to\ \ be a client error." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "401": description: "As defined in [[rfc9110]], indicating that the request has\ \ not been applied because it lacks valid authentication credentials for\ \ the target resource." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "403": description: "As defined in [[rfc9110]], indicating that the server understood\ \ the request but refuses to fulfill it. The exact reason SHOULD be explained\ \ in the response payload." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "404": description: "As defined in [[rfc9110]], indicating that the origin server\ \ did not find a current representation for the target resource or is\ \ not willing to disclose that one exists." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "405": description: "As defined in [[rfc9110]], indicating that the server does\ \ not allow the method." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "500": description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\ \ this error code - use only if there is catastrophic error and there\ \ is not a more appropriate code." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' default: description: The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' security: - OAuth2ACG: - https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.upsert x-operation-pid: org.1edtech.ob.v3p0.rest.upsertcredential.operation /profile: get: tags: - OpenBadgeCredentials summary: The REST GET operation for the getProfile() API call. description: "Fetch the profile from the [=resource server=] for the supplied\ \ access token. Profiles that are received MAY contain attributes that a Host\ \ SHOULD authenticate before using in practice." operationId: getProfile responses: "200": description: The 200 (OK) response to the getProfile() API call. content: application/json: schema: $ref: '#/components/schemas/Profile' "404": description: "As defined in [[rfc9110]], indicating that the origin server\ \ did not find a current representation for the target resource or is\ \ not willing to disclose that one exists." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "400": description: "As defined in [[rfc9110]], indicating that the server cannot\ \ or will not process the request due to something that is perceived to\ \ be a client error." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "401": description: "As defined in [[rfc9110]], indicating that the request has\ \ not been applied because it lacks valid authentication credentials for\ \ the target resource." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "403": description: "As defined in [[rfc9110]], indicating that the server understood\ \ the request but refuses to fulfill it. The exact reason SHOULD be explained\ \ in the response payload." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "405": description: "As defined in [[rfc9110]], indicating that the server does\ \ not allow the method." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "500": description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\ \ this error code - use only if there is catastrophic error and there\ \ is not a more appropriate code." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' default: description: The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' security: - OAuth2ACG: - https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.readonly x-operation-pid: org.1edtech.ob.v3p0.rest.getprofile.operation put: tags: - OpenBadgeCredentials summary: The REST PUT operation for the putProfile() API call. description: Update the profile for the authenticate entity. operationId: putProfile requestBody: description: The request body for the putProfile operation. content: application/json: schema: $ref: '#/components/schemas/Profile' required: true responses: "200": description: The 200 (OK) response to the putProfile() API call. content: application/json: schema: $ref: '#/components/schemas/Profile' "202": description: "As defined in [[rfc9110]], indicating that the request has\ \ been accepted for processing, but the processing has not been completed." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "304": description: "As defined in [[rfc9110]], indicating that there is no need\ \ for the server to transfer a representation of the target resource because\ \ the request indicates that the client, which made the request conditional,\ \ already has a valid representation." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "400": description: "As defined in [[rfc9110]], indicating that the server cannot\ \ or will not process the request due to something that is perceived to\ \ be a client error." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "401": description: "As defined in [[rfc9110]], indicating that the request has\ \ not been applied because it lacks valid authentication credentials for\ \ the target resource." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "403": description: "As defined in [[rfc9110]], indicating that the server understood\ \ the request but refuses to fulfill it. The exact reason SHOULD be explained\ \ in the response payload." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "404": description: "As defined in [[rfc9110]], indicating that the origin server\ \ did not find a current representation for the target resource or is\ \ not willing to disclose that one exists." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "405": description: "As defined in [[rfc9110]], indicating that the server does\ \ not allow the method." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' "500": description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\ \ this error code - use only if there is catastrophic error and there\ \ is not a more appropriate code." content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' default: description: The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' security: - OAuth2ACG: - https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.update x-operation-pid: org.1edtech.ob.v3p0.rest.putprofile.operation /discovery: get: tags: - Discovery summary: The REST GET operation for the getServiceDescription() API call. description: "Fetch the Service Description Document from the [=resource server=]." operationId: getServiceDescription responses: "200": description: The 200 (OK) response to the getServiceDescription() API call. content: application/json: schema: $ref: '#/components/schemas/ServiceDescriptionDocument' default: description: The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. content: application/json: schema: $ref: '#/components/schemas/Imsx_StatusInfo' x-operation-pid: org.1edtech.ob.v3p0.rest.getservicedescription.operation components: schemas: Address: required: - type type: object properties: addressCountry: type: string description: A country. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class geo: $ref: '#/components/schemas/GeoCoordinates' addressCountryCode: type: string description: "A country code. The value must be a ISO 3166-1 alpha-2 country\ \ code [[ISO3166-1]]." x-srcprop-pid: org.1edtech.ob.v3p0.derived.countrycode.class streetAddress: type: string description: A street address within the locality. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class postalCode: type: string description: A postal code. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class addressLocality: type: string description: A locality within the region. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class type: minItems: 1 type: array description: The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Address'. items: type: string description: "A `NormalizedString` that represents an Internationalized\ \ Resource Identifier (IRI), which extends the ASCII characters subset\ \ of the Uniform Resource Identifier (URI)." x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class addressRegion: type: string description: A region within the country. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class postOfficeBoxNumber: type: string description: A post office box number for PO box addresses. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class additionalProperties: true description: An address for the described entity. x-class-pid: org.1edtech.ob.v3p0.address.class CredentialSchema: required: - id - type type: object properties: id: type: string description: The value MUST be a URI identifying the schema file. One instance of `CredentialSchema` MUST have an `id` that is the URL of the JSON Schema for this credential defined by this specification. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class type: type: string description: The value MUST identify the type of data schema validation. One instance of `CredentialSchema` MUST have a `type` of '1EdTechJsonSchemaValidator2019'. x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class additionalProperties: true description: Identify the type and location of a data schema. x-class-pid: org.1edtech.ob.v3p0.credentialschema.class OpenApiSecuritySchemes: type: object properties: OAuth2ACG: $ref: '#/components/schemas/OpenApiOAuth2SecurityScheme' additionalProperties: false description: The Map of security scheme objects supported by this specification. x-class-pid: org.1edtech.ob.v3p0.openapisecurityschemes.class Criteria: type: object properties: narrative: type: string description: A narrative of what is needed to earn the achievement. Markdown is allowed. x-srcprop-pid: org.1edtech.ob.v3p0.derived.markdown.class id: type: string description: The URI of a webpage that describes in a human-readable format the criteria for the achievement. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class additionalProperties: true description: "Descriptive metadata about the achievements necessary to be recognized\ \ with an assertion of a particular achievement. This data is added to the\ \ Achievement class so that it may be rendered when the achievement assertion\ \ is displayed, instead of simply a link to human-readable criteria external\ \ to the achievement. Embedding criteria allows either enhancement of an external\ \ criteria page or increased portability and ease of use by allowing issuers\ \ to skip hosting the formerly-required external criteria page altogether.\ \ Criteria is used to allow would-be recipients to learn what is required\ \ of them to be recognized with an assertion of a particular achievement.\ \ It is also used after the assertion is awarded to a recipient to let those\ \ inspecting earned achievements know the general requirements that the recipients\ \ met in order to earn it." x-class-pid: org.1edtech.ob.v3p0.criteria.class OpenApiComponents: required: - securitySchemes type: object properties: securitySchemes: $ref: '#/components/schemas/OpenApiSecuritySchemes' additionalProperties: true description: Holds a set of reusable objects for different aspects of the OAS. All objects defined within the components object will have no effect on the API unless they are explicitly referenced from properties outside the components object. x-class-pid: org.1edtech.ob.v3p0.openapicomponents.class Image: required: - id - type type: object properties: caption: type: string description: The caption for the image. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class id: type: string description: The URI or Data URI of the image. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class type: type: string description: MUST be the IRI 'Image'. x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class additionalProperties: false description: "Metadata about images that represent assertions, achieve or profiles.\ \ These properties can typically be represented as just the id string of the\ \ image, but using a fleshed-out document allows for including captions and\ \ other applicable metadata." x-class-pid: org.1edtech.ob.v3p0.image.class Profile: required: - id - type type: object properties: image: $ref: '#/components/schemas/Image' endorsement: minItems: 0 type: array description: Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with a Data Integrity proof format. items: $ref: '#/components/schemas/EndorsementCredential' x-srcprop-pid: org.1edtech.ob.v3p0.endorsementcredential.class address: $ref: '#/components/schemas/Address' givenName: type: string description: "Given name. In the western world, often referred to as the\ \ 'first name' of a person." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class description: type: string description: A short description of the issuer entity or organization. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class official: type: string description: "If the entity is an organization, `official` is the name of\ \ an authorized official of the organization." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class honorificPrefix: type: string description: "Honorific prefix(es) preceding a person's name (e.g. 'Dr',\ \ 'Mrs' or 'Mr')." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class dateOfBirth: type: string description: Birthdate of the person. format: date x-srcprop-pid: org.1edtech.ob.v3p0.primitive.date.class type: minItems: 1 type: array description: The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Profile'. items: type: string description: "A `NormalizedString` that represents an Internationalized\ \ Resource Identifier (IRI), which extends the ASCII characters subset\ \ of the Uniform Resource Identifier (URI)." x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class url: type: string description: "The homepage or social media profile of the entity, whether\ \ individual or institutional. Should be a URL/URI Accessible via HTTP." x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class endorsementJwt: minItems: 0 type: array description: Allows endorsers to make specific claims about the individual or organization represented by this profile. These endorsements are signed with the VC-JWT proof format. items: pattern: "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" type: string description: "A `String` in Compact JWS format [[RFC7515]]." x-srcprop-pid: org.1edtech.ob.v3p0.derived.compactjws.class honorificSuffix: type: string description: "Honorific suffix(es) following a person's name (e.g. 'M.D,\ \ PhD')." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class phone: type: string description: A phone number. x-srcprop-pid: org.1edtech.ob.v3p0.derived.phonenumber.class familyName: type: string description: "Family name. In the western world, often referred to as the\ \ 'last name' of a person." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class familyNamePrefix: type: string description: "Family name prefix. As used in some locales, this is the leading\ \ part of a family name (e.g. 'de' in the name 'de Boer')." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class name: type: string description: The name of the entity or organization. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class patronymicName: type: string description: Patronymic name. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class id: type: string description: Unique URI for the Issuer/Profile file. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class otherIdentifier: minItems: 0 type: array description: A list of identifiers for the described entity. items: $ref: '#/components/schemas/IdentifierEntry' x-srcprop-pid: org.1edtech.ob.v3p0.identifierentry.class parentOrg: $ref: '#/components/schemas/Profile' additionalName: type: string description: Additional name. Includes what is often referred to as 'middle name' in the western world. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class email: type: string description: An email address. x-srcprop-pid: org.1edtech.ob.v3p0.derived.emailaddress.class additionalProperties: true description: "A Profile is a collection of information that describes the entity\ \ or organization using Open Badges. Issuers must be represented as Profiles,\ \ and endorsers, or other entities may also be represented using this vocabulary.\ \ Each Profile that represents an Issuer may be referenced in many BadgeClasses\ \ that it has defined. Anyone can create and host an Issuer file to start\ \ issuing Open Badges. Issuers may also serve as recipients of Open Badges,\ \ often identified within an Assertion by specific properties, like their\ \ url or contact email address." x-class-pid: org.1edtech.ob.v3p0.profile.class Result: required: - type type: object properties: achievedLevel: type: string description: "If the result represents an achieved rubric criterion level\ \ (e.g. Mastered), the value is the `id` of the RubricCriterionLevel in\ \ linked ResultDescription." x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class resultDescription: type: string description: An achievement can have many result descriptions describing possible results. The value of `resultDescription` is the `id` of the result description linked to this result. The linked result description must be in the achievement that is being asserted. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class type: minItems: 1 type: array description: The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Result'. items: type: string description: "A `NormalizedString` that represents an Internationalized\ \ Resource Identifier (IRI), which extends the ASCII characters subset\ \ of the Uniform Resource Identifier (URI)." x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class alignment: minItems: 0 type: array description: The alignments between this result and nodes in external frameworks. This set of alignments are in addition to the set of alignments defined in the corresponding ResultDescription object. items: $ref: '#/components/schemas/Alignment' x-srcprop-pid: org.1edtech.ob.v3p0.alignment.class value: type: string description: "A string representing the result of the performance, or demonstration,\ \ of the achievement. For example, 'A' if the recipient received an A\ \ grade in class." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class status: type: string description: The status of the achievement. Required if `resultType` of the linked ResultDescription is Status. enum: - Completed - Enrolled - Failed - InProgress - OnHold - Provisional - Withdrew x-srcprop-pid: org.1edtech.ob.v3p0.resultstatustype.class additionalProperties: true description: Describes a result that was achieved. x-class-pid: org.1edtech.ob.v3p0.result.class IdentifierEntry: required: - type - identifier - identifierType type: object properties: identifier: type: string description: An identifier. x-srcprop-pid: org.1edtech.ob.v3p0.derived.identifier.class identifierType: description: The identifier type. anyOf: - type: string enum: - name - sourcedId - systemId - productId - userName - accountId - emailAddress - nationalIdentityNumber - isbn - issn - lisSourcedId - oneRosterSourcedId - sisSourcedId - ltiContextId - ltiDeploymentId - ltiToolId - ltiPlatformId - ltiUserId - identifier - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+" type: string x-srcprop-pid: org.1edtech.ob.v3p0.identifiertypeenum.class type: type: string description: MUST be the IRI 'IdentifierEntry'. x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class additionalProperties: false description: The IdentifierEntry complex type. x-class-pid: org.1edtech.ob.v3p0.identifierentry.class Alignment: required: - type - targetName - targetUrl type: object properties: targetName: type: string description: Name of the alignment. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class targetFramework: type: string description: Name of the framework the alignment target. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class targetDescription: type: string description: Short description of the alignment target. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class targetCode: type: string description: "If applicable, a locally unique string identifier that identifies\ \ the alignment target within its framework and/or targetUrl." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class targetType: description: The type of the alignment target node. anyOf: - type: string enum: - ceasn:Competency - ceterms:Credential - CFItem - CFRubric - CFRubricCriterion - CFRubricCriterionLevel - CTDL - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+" type: string x-srcprop-pid: org.1edtech.ob.v3p0.alignmenttargettype.class type: minItems: 1 type: array description: The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Alignment'. items: type: string description: "A `NormalizedString` that represents an Internationalized\ \ Resource Identifier (IRI), which extends the ASCII characters subset\ \ of the Uniform Resource Identifier (URI)." x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class targetUrl: type: string description: "URL linking to the official description of the alignment target,\ \ for example an individual standard within an educational framework." x-srcprop-pid: org.1edtech.ob.v3p0.derived.url.class additionalProperties: true description: Describes an alignment between an achievement and a node in an educational framework. x-class-pid: org.1edtech.ob.v3p0.alignment.class Imsx_CodeMinorField: required: - imsx_codeMinorFieldName - imsx_codeMinorFieldValue type: object properties: imsx_codeMinorFieldName: type: string description: This should contain the identity of the system that has produced the code minor status code report. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.normalizedstring.class imsx_codeMinorFieldValue: type: string description: The code minor status code (this is a value from the corresponding enumerated vocabulary). enum: - forbidden - fullsuccess - internal_server_error - invalid_data - invalid_query_parameter - misdirected_request - not_acceptable - not_allowed - not_found - not_modified - server_busy - unauthorizedrequest - unknown x-srcprop-pid: org.1edtech.ob.v3p0.imsx_codeminorfieldvalue.class additionalProperties: false description: This is the container for a single code minor status code. x-class-pid: org.1edtech.ob.v3p0.imsx_codeminorfield.class ServiceDescriptionDocument: required: - openapi - info - components type: object properties: components: $ref: '#/components/schemas/OpenApiComponents' openapi: type: string description: This string MUST be the semantic version number of the OpenAPI Specification version that the OpenAPI document uses. The openapi field SHOULD be used by tooling specifications and clients to interpret the OpenAPI document. This is not related to the API info.version string. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class info: $ref: '#/components/schemas/OpenApiInfo' additionalProperties: true description: "The Service Description Document (SDD) is a machine readable document\ \ that contains the description of the service features supported by the Provider/Platform.\ \ The SDD is an OpenAPI 3.0 (JSON) [[OPENAPIS-3.0]] structured document that\ \ MUST be a profiled version of the OpenAPI 3.0 (JSON) file provided provided\ \ with this specification. This profiled version contains all of the details\ \ about the supported set of service end-points, the supported optional data\ \ fields, definitions of the proprietary data fields supplied using the permitted\ \ extension mechanisms, definitions of the available proprietary endpoints,\ \ and information about the security mechanisms." x-class-pid: org.1edtech.ob.v3p0.servicedescriptiondocument.class Evidence: required: - type type: object properties: audience: type: string description: A description of the intended audience for a piece of evidence. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class narrative: type: string description: A narrative that describes the evidence and process of achievement that led to an assertion. x-srcprop-pid: org.1edtech.ob.v3p0.derived.markdown.class name: type: string description: A descriptive title of the evidence. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class genre: type: string description: "A string that describes the type of evidence. For example,\ \ Poetry, Prose, Film." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class description: type: string description: A longer description of the evidence. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class id: type: string description: The URL of a webpage presenting evidence of achievement or the evidence encoded as a Data URI. The schema of the webpage is undefined. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class type: minItems: 1 type: array description: The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Evidence'. items: type: string description: "A `NormalizedString` that represents an Internationalized\ \ Resource Identifier (IRI), which extends the ASCII characters subset\ \ of the Uniform Resource Identifier (URI)." x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class additionalProperties: true description: "Descriptive metadata about evidence related to the achievement\ \ assertion. Each instance of the evidence class present in an assertion corresponds\ \ to one entity, though a single entry can describe a set of items collectively.\ \ There may be multiple evidence entries referenced from an assertion. The\ \ narrative property is also in scope of the assertion class to provide an\ \ overall description of the achievement related to the assertion in rich\ \ text. It is used here to provide a narrative of achievement of the specific\ \ entity described. If both the description and narrative properties are present,\ \ displayers can assume the narrative value goes into more detail and is not\ \ simply a recapitulation of description." x-class-pid: org.1edtech.ob.v3p0.evidence.class Achievement: required: - id - type - criteria - description - name type: object properties: achievementType: description: The type of achievement. This is an extensible vocabulary. anyOf: - type: string enum: - Achievement - ApprenticeshipCertificate - Assessment - Assignment - AssociateDegree - Award - Badge - BachelorDegree - Certificate - CertificateOfCompletion - Certification - CommunityService - Competency - Course - CoCurricular - Degree - Diploma - DoctoralDegree - Fieldwork - GeneralEducationDevelopment - JourneymanCertificate - LearningProgram - License - Membership - ProfessionalDoctorate - QualityAssuranceCredential - MasterCertificate - MasterDegree - MicroCredential - ResearchDoctorate - SecondarySchoolDiploma - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+" type: string x-srcprop-pid: org.1edtech.ob.v3p0.achievementtype.class image: $ref: '#/components/schemas/Image' creator: $ref: '#/components/schemas/Profile' endorsement: minItems: 0 type: array description: Allows endorsers to make specific claims about the Achievement. These endorsements are signed with a Data Integrity proof format. items: $ref: '#/components/schemas/EndorsementCredential' x-srcprop-pid: org.1edtech.ob.v3p0.endorsementcredential.class criteria: $ref: '#/components/schemas/Criteria' humanCode: type: string description: "The code, generally human readable, associated with an achievement." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class description: type: string description: A short description of the achievement. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class inLanguage: pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" type: string description: The language of the achievement. x-srcprop-pid: org.1edtech.ob.v3p0.derived.languagecode.class type: minItems: 1 type: array description: The type MUST include the IRI 'Achievement'. items: type: string description: "A `NormalizedString` that represents an Internationalized\ \ Resource Identifier (IRI), which extends the ASCII characters subset\ \ of the Uniform Resource Identifier (URI)." x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class version: type: string description: The version property allows issuers to set a version string for an Achievement. This is particularly useful when replacing a previous version with an update. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class endorsementJwt: minItems: 0 type: array description: Allows endorsers to make specific claims about the Achievement. These endorsements are signed with the VC-JWT proof format. items: pattern: "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" type: string description: "A `String` in Compact JWS format [[RFC7515]]." x-srcprop-pid: org.1edtech.ob.v3p0.derived.compactjws.class creditsAvailable: type: number description: "Credit hours associated with this entity, or credit hours\ \ possible. For example 3.0." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.float.class related: minItems: 0 type: array description: The related property identifies another Achievement that should be considered the same for most purposes. It is primarily intended to identify alternate language editions or previous versions of Achievements. items: $ref: '#/components/schemas/Related' x-srcprop-pid: org.1edtech.ob.v3p0.related.class name: type: string description: The name of the achievement. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class specialization: type: string description: "Name given to the focus, concentration, or specific area of\ \ study defined in the achievement. Examples include 'Entrepreneurship',\ \ 'Technical Communication', and 'Finance'." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class id: type: string description: Unique URI for the Achievement. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class resultDescription: minItems: 0 type: array description: The set of result descriptions that may be asserted as results with this achievement. items: $ref: '#/components/schemas/ResultDescription' x-srcprop-pid: org.1edtech.ob.v3p0.resultdescription.class tag: minItems: 0 type: array description: "One or more short, human-friendly, searchable, keywords that\ \ describe the type of achievement." items: type: string description: Character strings. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class alignment: minItems: 0 type: array description: "An object describing which objectives or educational standards\ \ this achievement aligns to, if any." items: $ref: '#/components/schemas/Alignment' x-srcprop-pid: org.1edtech.ob.v3p0.alignment.class otherIdentifier: minItems: 0 type: array description: A list of identifiers for the described entity. items: $ref: '#/components/schemas/IdentifierEntry' x-srcprop-pid: org.1edtech.ob.v3p0.identifierentry.class fieldOfStudy: type: string description: "Category, subject, area of study, discipline, or general branch\ \ of knowledge. Examples include Business, Education, Psychology, and\ \ Technology." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class additionalProperties: true description: A collection of information about the accomplishment recognized by the Assertion. Many assertions may be created corresponding to one Achievement. x-class-pid: org.1edtech.ob.v3p0.achievement.class IdentityObject: required: - type - hashed - identityHash - identityType type: object properties: salt: type: string 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." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class identityHash: type: string 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." x-srcprop-pid: org.1edtech.ob.v3p0.derived.identityhash.class identityType: description: The identity type. anyOf: - type: string enum: - name - sourcedId - systemId - productId - userName - accountId - emailAddress - nationalIdentityNumber - isbn - issn - lisSourcedId - oneRosterSourcedId - sisSourcedId - ltiContextId - ltiDeploymentId - ltiToolId - ltiPlatformId - ltiUserId - identifier - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+" type: string x-srcprop-pid: org.1edtech.ob.v3p0.identifiertypeenum.class hashed: type: boolean description: Whether or not the `identityHash` value is hashed. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.boolean.class type: type: string description: MUST be the IRI 'IdentityObject'. x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class additionalProperties: false description: A collection of information about the recipient of an achievement. x-class-pid: org.1edtech.ob.v3p0.identityobject.class Imsx_CodeMinor: required: - imsx_codeMinorField type: object properties: imsx_codeMinorField: minItems: 1 type: array description: Each reported code minor status code. items: $ref: '#/components/schemas/Imsx_CodeMinorField' x-srcprop-pid: org.1edtech.ob.v3p0.imsx_codeminorfield.class additionalProperties: false description: This is the container for the set of code minor status codes reported in the responses from the Service Provider. x-class-pid: org.1edtech.ob.v3p0.imsx_codeminor.class CredentialStatus: required: - id - type type: object properties: id: type: string description: The value MUST be the URL of the issuer's credential status method. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class type: type: string description: The name of the credential status method. x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class additionalProperties: true description: "The information in CredentialStatus is used to discover information\ \ about the current status of a verifiable credential, such as whether it\ \ is suspended or revoked." x-class-pid: org.1edtech.ob.v3p0.credentialstatus.class Imsx_StatusInfo: required: - imsx_codeMajor - imsx_severity type: object properties: imsx_codeMinor: $ref: '#/components/schemas/Imsx_CodeMinor' imsx_codeMajor: type: string description: The code major value (from the corresponding enumerated vocabulary). enum: - failure - processing - success - unsupported x-srcprop-pid: org.1edtech.ob.v3p0.imsx_codemajor.class imsx_description: type: string description: A human readable description supplied by the entity creating the status code information. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class imsx_severity: type: string description: The severity value (from the corresponding enumerated vocabulary). enum: - error - status - warning x-srcprop-pid: org.1edtech.ob.v3p0.imsx_severity.class additionalProperties: false description: This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider. x-class-pid: org.1edtech.ob.v3p0.imsx_statusinfo.class TermsOfUse: required: - type type: object properties: id: type: string description: The value MUST be a URI identifying the term of use. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class type: type: string description: The value MUST identify the type of the terms of use. x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class additionalProperties: true description: Terms of use can be utilized by an issuer or a holder to communicate the terms under which a verifiable credential or verifiable presentation was issued x-class-pid: org.1edtech.ob.v3p0.termsofuse.class OpenApiOAuth2SecurityScheme: required: - type - x-imssf-registrationUrl type: object properties: x-imssf-registrationUrl: type: string description: A fully qualified URL to the Client Registration endpoint. x-srcprop-pid: org.1edtech.ob.v3p0.derived.url.class description: type: string description: A short description for the security scheme. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class type: type: string description: MUST be the string `oauth2`. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class additionalProperties: true description: Defines an OAuth2 security scheme that can be used by the operations. x-class-pid: org.1edtech.ob.v3p0.openapioauth2securityscheme.class RubricCriterionLevel: required: - id - type - name type: object properties: level: type: string description: The rubric performance level in terms of success. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class name: type: string description: The name of the rubric criterion level. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class description: type: string description: Description of the rubric criterion level. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class id: type: string description: The unique URI for this rubric criterion level. Required so a result can link to this rubric criterion level. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class type: minItems: 1 type: array description: The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'RubricCriterionLevel'. items: type: string description: "A `NormalizedString` that represents an Internationalized\ \ Resource Identifier (IRI), which extends the ASCII characters subset\ \ of the Uniform Resource Identifier (URI)." x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class alignment: minItems: 0 type: array description: Alignments between this rubric criterion level and a rubric criterion levels defined in external frameworks. items: $ref: '#/components/schemas/Alignment' x-srcprop-pid: org.1edtech.ob.v3p0.alignment.class points: type: string description: The points associated with this rubric criterion level. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class additionalProperties: true description: Describes a rubric criterion level. x-class-pid: org.1edtech.ob.v3p0.rubriccriterionlevel.class OpenApiInfo: required: - termsOfService - title - version - x-imssf-privacyPolicyUrl type: object properties: x-imssf-image: type: string description: "An image representing the [=resource server=]. MAY be a Data\ \ URI or the URL where the image may be found." x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class x-imssf-privacyPolicyUrl: type: string description: "A fully qualified URL to the [=resource server=]'s privacy\ \ policy." x-srcprop-pid: org.1edtech.ob.v3p0.derived.url.class termsOfService: type: string description: "A fully qualified URL to the [=resource server=]'s terms of\ \ service." x-srcprop-pid: org.1edtech.ob.v3p0.derived.url.class title: type: string description: "The name of the [=resource server=]." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class version: type: string description: The version of the API. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class additionalProperties: true description: "The object provides metadata about the API. The metadata MAY be\ \ used by the clients if needed, and MAY be presented in editing or documentation\ \ generation tools for convenience." x-class-pid: org.1edtech.ob.v3p0.openapiinfo.class EndorsementSubject: required: - id - type type: object properties: endorsementComment: type: string description: Allows endorsers to make a simple claim in writing about the entity. x-srcprop-pid: org.1edtech.ob.v3p0.derived.markdown.class id: type: string description: "The identifier of the individual, entity, organization, assertion,\ \ or achievement that is endorsed." x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class type: minItems: 1 type: array description: The value of the type property MUST be an unordered set. One of the items MUST be the URI 'EndorsementSubject'. items: type: string description: "A `NormalizedString` that represents an Internationalized\ \ Resource Identifier (IRI), which extends the ASCII characters subset\ \ of the Uniform Resource Identifier (URI)." x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class additionalProperties: true description: A collection of information about the subject of the endorsement. x-class-pid: org.1edtech.ob.v3p0.endorsementsubject.class AchievementCredential: required: - '@context' - id - type - credentialSubject - issuer - validFrom type: object properties: image: $ref: '#/components/schemas/Image' credentialSchema: minItems: 0 type: array description: The value of the `credentialSchema` property MUST be one or more data schemas that provide verifiers with enough information to determine if the provided data conforms to the provided schema. items: $ref: '#/components/schemas/CredentialSchema' x-srcprop-pid: org.1edtech.ob.v3p0.credentialschema.class awardedDate: type: string description: "Timestamp of when the credential was awarded. `validFrom`\ \ is used to determine the most recent version of a Credential in conjunction\ \ with `issuer` and `id`. Consequently, the only way to update a Credental\ \ is to update the `validFrom`, losing the date when the Credential was\ \ originally awarded. `awardedDate` is meant to keep this original date." format: date-time x-srcprop-pid: org.1edtech.ob.v3p0.derived.datetimez.class endorsement: minItems: 0 type: array description: "Allows endorsers to make specific claims about the credential,\ \ and the achievement and profiles in the credential. These endorsements\ \ are signed with a Data Integrity proof format." items: $ref: '#/components/schemas/EndorsementCredential' x-srcprop-pid: org.1edtech.ob.v3p0.endorsementcredential.class evidence: minItems: 0 type: array description: A description of the work that the recipient did to earn the achievement. This can be a page that links out to other pages if linking directly to the work is infeasible. items: $ref: '#/components/schemas/Evidence' x-srcprop-pid: org.1edtech.ob.v3p0.evidence.class credentialSubject: $ref: '#/components/schemas/AchievementSubject' description: type: string description: The short description of the credential for display purposes in wallets. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class validFrom: type: string description: Timestamp of when the credential becomes valid. format: date-time x-srcprop-pid: org.1edtech.ob.v3p0.derived.datetimez.class type: minItems: 1 type: array description: "The value of the type property MUST be an unordered set. One\ \ of the items MUST be the URI 'VerifiableCredential', and one of the\ \ items MUST be the URI 'AchievementCredential' or the URI 'OpenBadgeCredential'." items: type: string description: "A `NormalizedString` that represents an Internationalized\ \ Resource Identifier (IRI), which extends the ASCII characters subset\ \ of the Uniform Resource Identifier (URI)." x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class '@context': minItems: 1 type: array description: "The value of the `@context` property MUST be an ordered set\ \ where the first item is a URI with the value 'https://www.w3.org/ns/credentials/v2',\ \ and the second item is a URI with the value 'https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json'." items: description: JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied. oneOf: - $ref: '#/components/schemas/Map' - type: string description: A `NormalizedString` that respresents a Uniform Resource Identifier (URI). x-srcprop-pid: org.1edtech.ob.v3p0.context.class issuer: description: "A description of the individual, entity, or organization that\ \ issued the credential." oneOf: - type: string description: A `NormalizedString` that respresents a Uniform Resource Identifier (URI). - $ref: '#/components/schemas/Profile' x-srcprop-pid: org.1edtech.ob.v3p0.profileref.class credentialStatus: $ref: '#/components/schemas/CredentialStatus' endorsementJwt: minItems: 0 type: array description: "Allows endorsers to make specific claims about the credential,\ \ and the achievement and profiles in the credential. These endorsements\ \ are signed with the VC-JWT proof format." items: pattern: "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" type: string description: "A `String` in Compact JWS format [[RFC7515]]." x-srcprop-pid: org.1edtech.ob.v3p0.derived.compactjws.class termsOfUse: minItems: 0 type: array description: "The value of the `termsOfUse` property tells the verifier\ \ what actions it is required to perform (an obligation), not allowed\ \ to perform (a prohibition), or allowed to perform (a permission) if\ \ it is to accept the verifiable credential." items: $ref: '#/components/schemas/TermsOfUse' x-srcprop-pid: org.1edtech.ob.v3p0.termsofuse.class name: type: string description: "The name of the credential for display purposes in wallets.\ \ For example, in a list of credentials and in detail views." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class refreshService: $ref: '#/components/schemas/RefreshService' validUntil: type: string description: "If the credential has some notion of validity period, this\ \ indicates a timestamp when a credential should no longer be considered\ \ valid. After this time, the credential should be considered invalid." format: date-time x-srcprop-pid: org.1edtech.ob.v3p0.derived.datetimez.class id: type: string description: Unambiguous reference to the credential. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class proof: minItems: 0 type: array description: "If present, one or more embedded cryptographic proofs that\ \ can be used to detect tampering and verify the authorship of the credential." items: $ref: '#/components/schemas/Proof' x-srcprop-pid: org.1edtech.ob.v3p0.proof.class additionalProperties: true description: "AchievementCredentials are representations of an awarded achievement,\ \ used to share information about a achievement belonging to one earner. Maps\ \ to a Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]]. As described\ \ in [[[#data-integrity]]], at least one proof mechanism, and the details\ \ necessary to evaluate that proof, MUST be expressed for a credential to\ \ be a verifiable credential. In the case of an embedded proof, the credential\ \ MUST append the proof in the `proof` property." x-class-pid: org.1edtech.ob.v3p0.achievementcredential.class GeoCoordinates: required: - type - latitude - longitude type: object properties: latitude: type: number description: "The latitude of the location [[WGS84]]." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.float.class type: type: string description: MUST be the IRI 'GeoCoordinates'. x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class longitude: type: number description: "The longitude of the location [[WGS84]]." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.float.class additionalProperties: true description: The geographic coordinates of a location. x-class-pid: org.1edtech.ob.v3p0.geocoordinates.class RefreshService: required: - id - type type: object properties: id: type: string description: The value MUST be the URL of the issuer's refresh service. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class type: type: string description: The name of the refresh service method. x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class additionalProperties: true description: The information in RefreshService is used to refresh the verifiable credential. x-class-pid: org.1edtech.ob.v3p0.refreshservice.class Related: required: - id - type type: object properties: inLanguage: pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" type: string description: The language of the related achievement. x-srcprop-pid: org.1edtech.ob.v3p0.derived.languagecode.class id: type: string description: The related achievement. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class type: minItems: 1 type: array description: The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'Related'. items: type: string description: "A `NormalizedString` that represents an Internationalized\ \ Resource Identifier (IRI), which extends the ASCII characters subset\ \ of the Uniform Resource Identifier (URI)." x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class version: type: string description: The version of the related achievement. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class additionalProperties: true description: Identifies a related achievement. x-class-pid: org.1edtech.ob.v3p0.related.class ResultDescription: required: - id - type - name - resultType type: object properties: valueMax: type: string description: The maximum possible `value` that may be asserted in a linked result. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class valueMin: type: string description: The minimum possible `value` that may be asserted in a linked result. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class rubricCriterionLevel: minItems: 0 type: array description: 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. items: $ref: '#/components/schemas/RubricCriterionLevel' x-srcprop-pid: org.1edtech.ob.v3p0.rubriccriterionlevel.class requiredLevel: type: string description: The `id` of the rubric criterion level required to pass as determined by the achievement creator. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class name: type: string description: The name of the result. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class id: type: string description: The unique URI for this result description. Required so a result can link to this result description. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class allowedValue: minItems: 0 type: array description: An ordered list of allowed values. The values should be ordered from low to high as determined by the achievement creator. items: type: string description: Character strings. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class type: minItems: 1 type: array description: The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'ResultDescription'. items: type: string description: "A `NormalizedString` that represents an Internationalized\ \ Resource Identifier (IRI), which extends the ASCII characters subset\ \ of the Uniform Resource Identifier (URI)." x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class alignment: minItems: 0 type: array description: Alignments between this result description and nodes in external frameworks. items: $ref: '#/components/schemas/Alignment' x-srcprop-pid: org.1edtech.ob.v3p0.alignment.class resultType: description: The type of result this description represents. This is an extensible enumerated vocabulary. anyOf: - type: string enum: - GradePointAverage - LetterGrade - Percent - PerformanceLevel - PredictedScore - RawScore - Result - RubricCriterion - RubricCriterionLevel - RubricScore - ScaledScore - Status - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+" type: string x-srcprop-pid: org.1edtech.ob.v3p0.resulttype.class requiredValue: type: string description: A value from `allowedValue` or within the range of `valueMin` to `valueMax` required to pass as determined by the achievement creator. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class additionalProperties: true description: Describes a possible achievement result. x-class-pid: org.1edtech.ob.v3p0.resultdescription.class Proof: required: - type type: object properties: proofValue: type: string description: Value of the proof. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class created: type: string description: Date the proof was created. format: date-time x-srcprop-pid: org.1edtech.ob.v3p0.primitive.datetime.class domain: type: string description: The domain of the proof to restrict its use to a particular target. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class challenge: type: string description: A value chosen by the verifier to mitigate authentication proof replay attacks. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class proofPurpose: type: string description: The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class type: type: string description: Signature suite used to produce proof. x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class verificationMethod: type: string description: The URL of the public key that can verify the signature. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class nonce: type: string description: A value chosen by the creator of proof to randomize proof values for privacy purposes. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class cryptosuite: type: string description: The suite used to create the proof. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class additionalProperties: true description: A JSON-LD Linked Data proof. x-class-pid: org.1edtech.ob.v3p0.proof.class EndorsementCredential: required: - '@context' - type - id - name - credentialSubject - issuer - validFrom type: object properties: credentialSchema: minItems: 0 type: array description: The value of the `credentialSchema` property MUST be one or more data schemas that provide verifiers with enough information to determine if the provided data conforms to the provided schema. items: $ref: '#/components/schemas/CredentialSchema' x-srcprop-pid: org.1edtech.ob.v3p0.credentialschema.class awardedDate: type: string description: "Timestamp of when the credential was awarded. `validFrom`\ \ is used to determine the most recent version of a Credential in conjunction\ \ with `issuer` and `id`. Consequently, the only way to update a Credental\ \ is to update the `validFrom`, losing the date when the Credential was\ \ originally awarded. `awardedDate` is meant to keep this original date." format: date-time x-srcprop-pid: org.1edtech.ob.v3p0.derived.datetimez.class credentialSubject: $ref: '#/components/schemas/EndorsementSubject' description: type: string description: The short description of the credential for display purposes in wallets. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class validFrom: type: string description: Timestamp of when the credential becomes valid. format: date-time x-srcprop-pid: org.1edtech.ob.v3p0.derived.datetimez.class type: minItems: 1 type: array description: "The value of the type property MUST be an unordered set. One\ \ of the items MUST be the URI 'VerifiableCredential', and one of the\ \ items MUST be the URI 'EndorsementCredential'." items: type: string description: "A `NormalizedString` that represents an Internationalized\ \ Resource Identifier (IRI), which extends the ASCII characters subset\ \ of the Uniform Resource Identifier (URI)." x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class '@context': minItems: 1 type: array description: "The value of the `@context` property MUST be an ordered set\ \ where the first item is a URI with the value 'https://www.w3.org/ns/credentials/v2',\ \ and the second item is a URI with the value 'https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json'." items: description: JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied. oneOf: - $ref: '#/components/schemas/Map' - type: string description: A `NormalizedString` that respresents a Uniform Resource Identifier (URI). x-srcprop-pid: org.1edtech.ob.v3p0.context.class issuer: description: "A description of the individual, entity, or organization that\ \ issued the credential." oneOf: - type: string description: A `NormalizedString` that respresents a Uniform Resource Identifier (URI). - $ref: '#/components/schemas/Profile' x-srcprop-pid: org.1edtech.ob.v3p0.profileref.class credentialStatus: $ref: '#/components/schemas/CredentialStatus' termsOfUse: minItems: 0 type: array description: "The value of the `termsOfUse` property tells the verifier\ \ what actions it is required to perform (an obligation), not allowed\ \ to perform (a prohibition), or allowed to perform (a permission) if\ \ it is to accept the verifiable credential." items: $ref: '#/components/schemas/TermsOfUse' x-srcprop-pid: org.1edtech.ob.v3p0.termsofuse.class name: type: string description: "The name of the credential for display purposes in wallets.\ \ For example, in a list of credentials and in detail views." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class refreshService: $ref: '#/components/schemas/RefreshService' validUntil: type: string description: "If the credential has some notion of validity period, this\ \ indicates a timestamp when a credential should no longer be considered\ \ valid. After this time, the credential should be considered invalid." format: date-time x-srcprop-pid: org.1edtech.ob.v3p0.derived.datetimez.class id: type: string description: Unambiguous reference to the credential. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class proof: minItems: 0 type: array description: "If present, one or more embedded cryptographic proofs that\ \ can be used to detect tampering and verify the authorship of the credential." items: $ref: '#/components/schemas/Proof' x-srcprop-pid: org.1edtech.ob.v3p0.proof.class additionalProperties: true description: "A verifiable credential that asserts a claim about an entity.\ \ As described in [[[#data-integrity]]], at least one proof mechanism, and\ \ the details necessary to evaluate that proof, MUST be expressed for a credential\ \ to be a verifiable credential. In the case of an embedded proof, the credential\ \ MUST append the proof in the `proof` property." x-class-pid: org.1edtech.ob.v3p0.endorsementcredential.class AchievementSubject: required: - type - achievement type: object properties: identifier: minItems: 0 type: array description: Other identifiers for the recipient of the achievement. Either `id` or at least one `identifier` MUST be supplied. items: $ref: '#/components/schemas/IdentityObject' x-srcprop-pid: org.1edtech.ob.v3p0.identityobject.class image: $ref: '#/components/schemas/Image' activityStartDate: type: string description: The datetime the activity started. format: date-time x-srcprop-pid: org.1edtech.ob.v3p0.primitive.datetime.class role: type: string description: "Role, position, or title of the learner when demonstrating\ \ or performing the achievement or evidence of learning being asserted.\ \ Examples include 'Student President', 'Intern', 'Captain', etc." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class achievement: $ref: '#/components/schemas/Achievement' narrative: type: string description: A narrative that connects multiple pieces of evidence. Likely only present at this location if evidence is a multi-value array. x-srcprop-pid: org.1edtech.ob.v3p0.derived.markdown.class source: $ref: '#/components/schemas/Profile' type: minItems: 1 type: array description: The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'AchievementSubject'. items: type: string description: "A `NormalizedString` that represents an Internationalized\ \ Resource Identifier (IRI), which extends the ASCII characters subset\ \ of the Uniform Resource Identifier (URI)." x-srcprop-pid: org.1edtech.ob.v3p0.derived.iri.class result: minItems: 0 type: array description: The set of results being asserted. items: $ref: '#/components/schemas/Result' x-srcprop-pid: org.1edtech.ob.v3p0.result.class creditsEarned: type: number description: "The number of credits earned, generally in semester or quarter\ \ credit hours. This field correlates with the Achievement `creditsAvailable`\ \ field." x-srcprop-pid: org.1edtech.ob.v3p0.primitive.float.class activityEndDate: type: string description: The datetime the activity ended. format: date-time x-srcprop-pid: org.1edtech.ob.v3p0.primitive.datetime.class licenseNumber: type: string description: The license number that was issued with this credential. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class term: type: string description: The academic term in which this assertion was achieved. x-srcprop-pid: org.1edtech.ob.v3p0.primitive.string.class id: type: string description: An identifier for the Credential Subject. Either `id` or at least one `identifier` MUST be supplied. x-srcprop-pid: org.1edtech.ob.v3p0.derived.uri.class additionalProperties: true description: "A collection of information about the recipient of an achievement.\ \ Maps to Credential Subject in [[VC-DATA-MODEL-2.0]]." x-class-pid: org.1edtech.ob.v3p0.achievementsubject.class Map: type: object properties: {} additionalProperties: true description: "A map representing an object with unknown, arbitrary properties" x-class-pid: org.1edtech.ob.v3p0.map.class GetOpenBadgeCredentialsResponse: type: object properties: credential: minItems: 0 type: array description: OpenBadgeCredentials that have not been signed with the VC-JWT Proof Format MUST be in the `credential` array. items: $ref: '#/components/schemas/AchievementCredential' x-srcprop-pid: org.1edtech.ob.v3p0.achievementcredential.class compactJwsString: minItems: 0 type: array description: OpenBadgeCredentials that have been signed with the VC-JWT Proof Format MUST be in the `compactJwsString` array. items: pattern: "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$" type: string description: "A `String` in Compact JWS format [[RFC7515]]." x-srcprop-pid: org.1edtech.ob.v3p0.derived.compactjws.class additionalProperties: false description: The GetOpenBadgeCredentialsResponse complex type. x-class-pid: org.1edtech.ob.v3p0.getopenbadgecredentialsresponse.class headers: X-Total-Count: description: The total number of resources that are available to be returned schema: type: integer format: int32 securitySchemes: OAuth2ACG: type: oauth2 flows: authorizationCode: authorizationUrl: provider.example.com/auth tokenUrl: provider.example.com/token refreshUrl: provider.example.com/refresh scopes: https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.readonly: Permission to read AchievementCredentials for the authenticated entity. https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.upsert: Permission to create or update AchievementCredentials for the authenticated entity. https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.readonly: Permission to read the profile for the authenticated entity. https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.update: Permission to update the profile for the authenticated entity. links: next: operationId: getCredentials parameters: limit: $request.path.limit offset: $request.path.offset description: Get the next set of resources i.e. from offset to offset+limit last: operationId: getCredentials parameters: limit: $request.path.limit offset: $request.path.offset description: Get the last set of resources i.e. from offset to end prev: operationId: getCredentials parameters: limit: $request.path.limit offset: $request.path.offset description: Get the previous set of resources i.e. from last_offset to last_offset+limit first: operationId: getCredentials parameters: limit: $request.path.limit offset: $request.path.offset description: Get the first set of resources i.e. from first to limit
There are no issues listed in this specification.
Status | Doc Version | Release Date | Comments |
---|---|---|---|
Candidate Final | 1.0 | July 14, 2022 | Open Badges 3.0 first Candidate Final release |
Candidate Public Final | 1.0.1 | February 9, 2023 | Open Badges 3.0 first Candidate Public Final release |
Final | 1.0 | May 27, 2024 | Open Badges 3.0 Final Release |
Final | 1.1 | July 26, 2024 |
|
Final | 1.2 | Dec 23, 2024 |
|
- [DATA-INTEGRITY-SPEC]
- Data Integrity. Credentials Community Group. CG-DRAFT. URL: https://w3c-ccg.github.io/data-integrity-spec/
- [OAUTH2-SBP]
- OAuth 2.0 Security Best Current Practice (draft-ietf-oauth-security-topics-11. IETF. December 28, 2019. URL: https://datatracker.ietf.org/doc/draft-ietf-oauth-security-topics/
- [OPENAPIS-3.0]
- OpenAPI Specification 3.0. OpenAPI Initiative (Linux Foundation). July 2017. URL: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md
- [PNG]
- Portable Network Graphics (PNG) Specification (Third Edition). Chris Lilley; Leonard Rosenthol; Pierre-Anthony Lemieux; Chris Seeger; Chris Blume. W3C. 18 July 2024. W3C Candidate Recommendation. URL: https://www.w3.org/TR/png-3/
- [RFC20]
- ASCII format for network interchange. V.G. Cerf. IETF. October 1969. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc20
- [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
- [RFC2617]
- HTTP Authentication: Basic and Digest Access Authentication. J. Franks; P. Hallam-Baker; J. Hostetler; S. Lawrence; P. Leach; A. Luotonen; L. Stewart. IETF. June 1999. Draft Standard. URL: https://www.rfc-editor.org/rfc/rfc2617
- [RFC3629]
- UTF-8, a transformation format of ISO 10646. F. Yergeau. IETF. November 2003. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc3629
- [RFC3986]
- Uniform Resource Identifier (URI): Generic Syntax. T. Berners-Lee; R. Fielding; L. Masinter. IETF. January 2005. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc3986
- [RFC6749]
- The OAuth 2.0 Authorization Framework. D. Hardt, Ed.. IETF. October 2012. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc6749
- [RFC6750]
- The OAuth 2.0 Authorization Framework: Bearer Token Usage. M. Jones; D. Hardt. IETF. October 2012. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc6750
- [RFC7009]
- OAuth 2.0 Token Revocation. T. Lodderstedt, Ed.; S. Dronia; M. Scurtescu. IETF. August 2013. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7009
- [RFC7515]
- JSON Web Signature (JWS). M. Jones; J. Bradley; N. Sakimura. IETF. May 2015. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7515
- [RFC7517]
- JSON Web Key (JWK). M. Jones. IETF. May 2015. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7517
- [RFC7518]
- JSON Web Algorithms (JWA). M. Jones. IETF. May 2015. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7518
- [RFC7519]
- JSON Web Token (JWT). M. Jones; J. Bradley; N. Sakimura. IETF. May 2015. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7519
- [RFC7591]
- OAuth 2.0 Dynamic Client Registration Protocol. J. Richer, Ed.; M. Jones; J. Bradley; M. Machulak; P. Hunt. IETF. July 2015. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7591
- [RFC7636]
- Proof Key for Code Exchange by OAuth Public Clients. N. Sakimura, Ed.; J. Bradley; N. Agarwal. IETF. September 2015. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7636
- [SEC-11]
- IMS Global Security Framework v1.1. C. Smythe; C. Vervoort; M. McKell. IMS Global Learning Consortium. July 19th, 2021. IMS Final Release. URL: https://www.imsglobal.org/spec/security/v1p1/
- [SVG11]
- Scalable Vector Graphics (SVG) 1.1 (Second Edition). Erik Dahlström; Patrick Dengler; Anthony Grasso; Chris Lilley; Cameron McCormack; Doug Schepers; Jonathan Watt; Jon Ferraiolo; Jun Fujisawa; Dean Jackson et al. W3C. 16 August 2011. W3C Recommendation. URL: https://www.w3.org/TR/SVG11/
- [UNICODE]
- The Unicode Standard. Unicode Consortium. URL: https://www.unicode.org/versions/latest/
- [VC-DATA-MODEL-2.0]
- Verifiable Credentials Data Model v2.0. Ivan Herman; Michael Jones; Manu Sporny; Ted Thibodeau Jr; Gabe Cohen. W3C. 19 December 2024. W3C Candidate Recommendation. URL: https://www.w3.org/TR/vc-data-model-2.0/
- [VC-DI-EDDSA]
- Data Integrity EdDSA Cryptosuites v1.0. Manu Sporny; Dmitri Zagidulin; Sebastian Crane; Greg Bernstein. W3C. 19 December 2024. W3C Candidate Recommendation. URL: https://www.w3.org/TR/vc-di-eddsa/
- [VC-EXTENSION-REGISTRY]
- Verifiable Credentials Extension Registry. Credentials Community Group. CG-DRAFT. URL: https://w3c-ccg.github.io/vc-extension-registry/
- [VC-JOSE-COSE]
- Securing Verifiable Credentials using JOSE and COSE. Michael Jones; Gabe Cohen; Michael Prorock. W3C. 19 December 2024. W3C Candidate Recommendation. URL: https://www.w3.org/TR/vc-jose-cose/
- [VCCR-10]
- 1EdTech Credential Refresh Service. 1EdTech. Candidate Final Public. URL: https://www.imsglobal.org/spec/vccr/v1p0/
- [VCCS-10]
- 1EdTech JSON Schema Validator 2019. 1EdTech. Candidate Final Public. URL: https://www.imsglobal.org/spec/vccs/v1p0/
- [VCRL-10]
- 1EdTech Revocation List Status Method. 1EdTech. Candidate Final Public. URL: https://www.imsglobal.org/spec/vcrl/v1p0/
- [BCP47]
- Tags for Identifying Languages. A. Phillips, Ed.; M. Davis, Ed.. IETF. September 2009. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc5646
- [CEDS]
- Common Education Data Standards (CEDS) Version 7 Data Model Guide. URL: https://ceds.ed.gov/pdf/CEDS-7-0-Data-Model-Guide_for_508.pdf
- [CLR-20]
- Comprehensive Learner Record Standard v2.0. 1EdTech. IMS Base Document. URL: https://www.imsglobal.org/spec/clr/v2p0/
- [CTDL-ASN-TERMS]
- Credential Transparency Description Language ASN Terms. Credential Engine. URL: https://credreg.net/ctdlasn/terms
- [CTDL-TERMS]
- Credential Transparency Description Language Terms. Credential Engine. URL: https://credreg.net/ctdl/terms
- [did-core]
- Decentralized Identifiers (DIDs) v1.0. Manu Sporny; Amy Guy; Markus Sabadello; Drummond Reed. W3C. 19 July 2022. W3C Recommendation. URL: https://www.w3.org/TR/did-core/
- [did-use-cases]
- Use Cases and Requirements for Decentralized Identifiers. Joe Andrieu; Phil Archer; Kim Duffy; Ryan Grant; Adrian Gropper. W3C. 17 March 2021. W3C Working Group Note. URL: https://www.w3.org/TR/did-use-cases/
- [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
- [IEEE-754]
- IEEE Standard for Floating-Point Arithmetic. Institute of Electrical and Electronics Engineers. 22 July 2019. URL: https://ieeexplore.ieee.org/document/8766229
- [ISO3166-1]
- Codes for the representation of names of countries and their subdivisions — Part 1: Country code. International Organization for Standardization (ISO). August 2020. Published. URL: https://www.iso.org/standard/72482.html
- [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
- [JSON-LD]
- JSON-LD 1.0. Manu Sporny; Gregg Kellogg; Markus Lanthaler. W3C. 3 November 2020. W3C Recommendation. URL: https://www.w3.org/TR/json-ld/
- [JSON-LD11]
- JSON-LD 1.1. Gregg Kellogg; Pierre-Antoine Champin; Dave Longley. W3C. 16 July 2020. W3C Recommendation. URL: https://www.w3.org/TR/json-ld11/
- [JSON-LD11-API]
- JSON-LD 1.1 Processing Algorithms and API. Gregg Kellogg; Dave Longley; Pierre-Antoine Champin. W3C. 16 July 2020. W3C Recommendation. URL: https://www.w3.org/TR/json-ld11-api/
- [MULTIBASE]
- The Multibase Data Format. IETF. Internet-Draft. URL: https://datatracker.ietf.org/doc/html/draft-multiformats-multibase-01
- [MULTICODEC]
- MULTICODEC. URL: https://github.com/multiformats/multicodec/
- [OB-20]
- Open Badges v2.0. Otto, Nate; Bohrer, Jeff; Cook, Timothy; Gylling, Markus; Hripak, Alexander; Pitcher, Justin. IMS Global Learning Consortium. April 2018. IMS Final Release. URL: https://www.imsglobal.org/spec/ob/v2p0/
- [OB-30]
- Open Badges Specification v3.0. 1EdTech. Candidate Final Public. URL: https://www.imsglobal.org/spec/ob/v3p0/
- [OB-CERT-30]
- Open Badges Specification Conformance and Certification Guide v3.0. 1EdTech. Candidate Final Public. URL: https://www.imsglobal.org/spec/ob/v3p0/cert/
- [OB-ERRATA-30]
- Open Badges Specification v3.0: Errata. URL: https://www.imsglobal.org/spec/ob/v3p0/errata/
- [OB-IMPL-30]
- Open Badges Implementation Guide v3.0. 1EdTech. Candidate Final Public. URL: https://www.imsglobal.org/spec/ob/v3p0/impl/
- [OPENAPIS]
- OpenAPI Specification. Darrell Miller; Jason Harmon; Jeremy Whitlock; Marsh Gardiner; Mike Ralphson; Ron Ratovsky; Tony Tam; Uri Sarid. OpenAPI Initiative. URL: https://www.openapis.org/
- [RFC1321]
- The MD5 Message-Digest Algorithm. R. Rivest. IETF. April 1992. Informational. URL: https://www.rfc-editor.org/rfc/rfc1321
- [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
- [RFC5280]
- Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile. D. Cooper; S. Santesson; S. Farrell; S. Boeyen; R. Housley; W. Polk. IETF. May 2008. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc5280
- [RFC8259]
- The JavaScript Object Notation (JSON) Data Interchange Format. T. Bray, Ed.. IETF. December 2017. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc8259
- [rfc9110]
- HTTP Semantics. R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed.. IETF. June 2022. Internet Standard. URL: https://httpwg.org/specs/rfc9110.html
- [RSD]
- Rich Skill Descriptors. URL: https://www.openskillsnetwork.org/rsd
- [VC-DATA-MODEL]
- Verifiable Credentials Data Model v1.1. Manu Sporny; Grant Noble; Dave Longley; Daniel Burnett; Brent Zundel; Kyle Den Hartog. W3C. 3 March 2022. W3C Recommendation. URL: https://www.w3.org/TR/vc-data-model/
- [WGS84]
- World Geodetic System 1984 (WGS 84). Office of Geomatics, National Geospatial Intelligence Agency. 2008. URL: https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84
- [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/
The following individuals contributed to the development of this document:
Name | Organization | Role |
---|---|---|
Nate Otto | Concentric Sky, Skybridge Skills | Invited Expert |
Kerri Lemoie | Digital Credentials Consortium (MIT) | Editor |
Phillip Long | T3 Innovation Network | Invited Expert |
Marty Reed | RANDA Solutions | Co-chair, CLR |
Justin Pitcher | Anthology | Co-chair, OB |
Brent Capriotti | Western Governors University (WGU) | Co-chair, CLR |
Sherri Braxton | Bowdoin College | Co-chair, OB |
Jock Wright | VerifyEd | |
Jen Schreiber | Workday | |
Viktor Haag | D2L | |
Alex Hripak | Credly | |
David Ward | PCG | |
Laura Janusek | D2L | |
John Kuo | Arizona State University | |
Sara Arjona | Moodle HQ | |
Mark McConahay | AACRAO | |
Dmitri Zagidulin | DCC | Invited Expert |
Tracy Korsmo | North Dakota IT (NDIT) | |
Kate Giovacchini | Arizona State University | |
Andy Miller | 1Edtech | Editor |
Markus Gylling | 1Edtech | Editor |
Dan Blickensderfer | 1Edtech | Editor |
Xavi Aracil | 1Edtech | Editor |
Referenced in:
- § 6. Open Badges API (2)
- § 6.1 Architecture
- § 7. Open Badges API Security (2)
- § 7.1 Using OAuth 2.0 Authorization Code Grant (2)
- § 7.1.1 Dynamic Client Registration (2) (3) (4) (5)
- § 7.1.1.1 Request the Service Description Document (2) (3) (4) (5) (6) (7)
- § 7.1.1.2 Register with Authorization Server (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20)
- § 7.1.2 Obtaining Tokens (2) (3)
- § 7.1.2.1 Authorization Request (2) (3) (4) (5) (6) (7) (8)
- § 7.1.2.2 Authorization Response (2)
- § 7.1.2.2.1 Authorization Error Response (2) (3)
- § 7.1.2.3 Access Token Request (2) (3)
- § 7.1.3 Authenticating with Tokens
- § 7.2.1 Token Refresh Request (2) (3) (4)
- § 7.3 Token Revocation
- § 7.3.1 Token Revocation Request (2)
Referenced in:
Referenced in:
Referenced in:
Referenced in:
- § 6.1 Architecture (2)
- § 6.5 Retry Behavior
- § 7.1 Using OAuth 2.0 Authorization Code Grant
- § 7.1.1 Dynamic Client Registration
- § 7.1.1.1 Request the Service Description Document (2)
- § 7.1.2 Obtaining Tokens
- § 7.1.2.2 Authorization Response (2) (3)
- § 7.1.2.2.1 Authorization Error Response (2)
- § 7.1.3 Authenticating with Tokens
- § 7.2.1 Token Refresh Request (2)
Referenced in:
Referenced in:
- § 6.1 Architecture
- § 7.1 Using OAuth 2.0 Authorization Code Grant
- § 7.1.1 Dynamic Client Registration (2) (3) (4)
- § 7.1.1.2 Register with Authorization Server (2) (3) (4) (5) (6) (7) (8)
- § 7.1.2 Obtaining Tokens
- § 7.1.2.1 Authorization Request (2) (3) (4) (5) (6)
- § 7.1.2.2 Authorization Response (2) (3) (4)
- § 7.1.2.2.1 Authorization Error Response (2) (3)
- § 7.1.2.3 Access Token Request
- § 7.1.2.4 Access Token Response (2)
- § 7.1.2.4.1 Access Token Error Response (2)
- § 7.2 Token Refresh (2)
- § 7.2.2 Token Refresh Response (2)
- § 7.3.2 Token Revocation Response (2)
- § B.4.5 OpenApiSecuritySchemes
Referenced in:
- § 6. Open Badges API
- § 6.1 Architecture (2) (3) (4)
- § 6.2.2 getCredentials
- § 6.2.3 upsertCredential (2)
- § 6.2.3.2 Responses (2) (3) (4)
- § 6.2.4 getProfile
- § 6.2.5.1 Request (2)
- § 6.2.5.2 Responses
- § 6.3.1 getServiceDescription
- § 6.4 Paging (2)
- § 6.5 Retry Behavior
- § 7.1.1 Dynamic Client Registration
- § 7.1.1.1 Request the Service Description Document (2) (3) (4) (5) (6) (7) (8) (9) (10)
- § 7.1.2.1 Authorization Request
- § 7.1.2.3 Access Token Request
- § 7.1.3 Authenticating with Tokens
- § B.4.1 ServiceDescriptionDocument
- § B.4.3 OpenApiInfo (2) (3) (4)
Referenced in: