Open Badges Specification | IMS Global Learning Consortium
You are here
Specifications
Open Badges
Open Badges Specification
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.
1.
Introduction
1.1
Audiences
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
1.2
Document Set
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.
1.2.1
OpenAPI 3.0 Files
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.
--
OpenAPI Specification
JSON OpenAPI File
YAML OpenAPI File
1.2.2
JSON-LD Context File
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
1.2.3
JSON Schema
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
Note
The above schemas are based on the
Verifiable Credentials Data Model v2.0
. An issuer may also issue credentials
following the previous version
Verifiable Credentials Data Model v2.0
. JSON schema matching that version are:
AchievementCredential JSON schema (Verifiable Credential Data Model v1.1 compatible)
EndorsementCredential JSON schema (Verifiable Credential Data Model v1.1 compatible)
Verifiers may accept credentials following either schema using
Schemas for verification support
1.3
Conformance Statements
As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.
The key words
MAY
MUST
MUST NOT
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.
1.4
Terminology
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.
1.5
Conceptual Model
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").
Figure
Diagram shows the major conceptual components of an Open Badge Verifiable Credential
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.
2.
Overview
This section is non-normative.
2.1
What is the problem this solves for?
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.
2.2
What does adopting Verifiable Credentials entail?
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.
Figure
Open Badges 2.0 Diagram
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.
Figure
Diagram show the major conceptual components of an Open Badge Verifiable Credential
2.3
Benefits and Opportunities
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.
2.3.1
Interoperability with Digital Wallets, Verifiable Presentations, and Learner Experiences
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.
2.3.3
Decentralized Identifiers and Self-Sovereign Identity
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.
2.3.4
Aligning Open Badges and CLR with Common Assertion and Achievement Models
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.
2.4
Achievement Credentials
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.
2.4.1
Differentiating Issuers and Achievement Creators
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.
2.5
Skill Assertions
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.
3.
Use Cases
This section is non-normative.
The use cases below drive the design of Open Badges 3.0 specification.
3.1
Assertion Issuance to Wallet
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
3.2
Assertion Issuance Without a 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
3.3
Recipient Presentation of 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.
Editor's note
New to v3.0
: Verifiable Credentials (VC) is a W3C specification that describes how to issue tamper-evident credentials that can be cryptographically verified. Maya's digital wallet has the capabilities to create a DID, read the VC data, and store it. From the wallet, Maya can present her credentials and prove that she is the recipient because it was issued to a DID that she created and has the digital keys that demonstrates her control of the Verifiable Credential (VC). This functionality is not specific to the Open Badges standard but using this verification functionality and using a decentralized identifier (DID) to identify the badge recipient instead of an email address is part of the v3.0 update. Maya's badge recognizes a course completion and being able to specify that in the badge is a new aspect of v3.0. As with the CLR, v3.0 will be able to specify the type of achievement that a badge is representing.
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
3.4
License Issuance
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.
Editor's note
New to v3.0
: Similar to Maya's course completion badge, Jeremy's electrician license badge is also issued to a DID that Jeremy provides from his wallet and can also be cryptographically verified following the Verifiable Credentials model. The government issued ID in this use case is not an Open Badge but because it is a Verifiable Credential it can be stored in the same wallet as the electrician's license badge demonstrating interoperability of the verification models.
3.5
Single Skill Assertion
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.
Editor's note
New to v3.0
: Single skill assertions are new to 3.0.
3.6
Mapping Skills
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.
3.7
Verifying Continuing Education
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.
Editor's note
New to v3.0
: As with the other use case, this use case emphasizes that Open Badges v3.0 can recognize many different achievement types and be cryptographically verified following the Verifiable Credentials model.
3.8
Self-assertion
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.
Editor's note
New to v3.0
: In previous versions of Open Badges, it was possible to make self-assertion badges and issue badges to peers, however the issuer profile properties were organization specific. With 3.0, the issue properties can be modified to reference either an organization or an individual. It could be considered that both the issuer and recipient profile have similar optional properties so that there is flexibility in describing both profiles. This way, an organization could also be described as the recipient.
3.9
Endorsement
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.
Editor's note
New to v3.0
: In 2.0, an endorsement is its own type of assertion. In 3.0, an endorsement is its own type of credential. In the example above, the platform verifies the badge data and then acts as an issuer of endorsements on behalf of its users. It could also be that the platform uses AI to process the badge and sends an endorsement back to Ralph as a proof of acceptance and an evaluation of his badge.
3.10
Re-issue a <= 3.0 Badge to a 3.0 Badge
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.
3.11
Authorization to Issue Given by Creator to Issuer
The data model attributes the issuer of a VC and the creator of the badge class separately.
Standards Organization X (SOX) has created a number of badges related to competencies they certify. SOX wants to authorize an accredited, certified training organization (CTO) to issue their credentials. An Open Badge Platform manages the granting of issuing rights to CTO by SOX and can issue verifiable credentials where CTO is the issuer and SOX is the creator inside the badge class.
Employer receives a credential from a graduate. Employer, in addition to verifying the VC in general, can review and verify that SOX did in fact authorize CTO to issue this badge.
3.12
Revocation of an Issued Credential
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
3.13
Badge Class Status
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.
4.
Getting Started
4.1
Implementation Guide
The
Open Badges Implementation Guide v3.0
contains non-normative information on how to implement OB 3.0 and
CLR 2.0.
4.2
Conformance and Certification
Open Badges Specification Conformance and Certification Guide v3.0
- Specifies the conformance tests and certification requirements for this specification.
5.
Open Badges Document Formats
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
].
Example
: Sample OpenBadgeCredential file contents
Credential
Verifiable Credential (with proof)
Verifiable Credential (as JWT)
"@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": "2026-04-22T07:26:15Z",
"verificationMethod": "https://example.edu/issuers/565049#z6MkhAVi8Yz4Fgd6piuHZuaKarYDcGGWdoy19JbLSxax6zUB",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z3V6yzJtjy9PFHp6yAvkzYRZyLMkTSwnz2dWkWdiKWVSdnQg989c78YpDpxbK1FB2GRRqfnbGe78fi6pFFXzijyq6"
---------------- JWT header ---------------
"alg": "RS256",
"typ": "JWT",
"jwk": {
"e": "AQAB",
"kty": "RSA",
"n": "qJSN6vwVq77UbrOLOesWb_wFY9bsbcPcJWe56fkpGVdZn01s4F6lmf6wET2cBOz3BKt4ZC
DG5_XfG34PyqwNqT_-WdQp_GRhOacKkv4lBVjbHPuM7Qf6Na0IDV_LqKJ-jNe2F4v3LoV0Hp8uHv5gaF
86SO8YLbEdNsu6X2zcoRtWRC_Pc6wxTUy1xNoC86jmoU2c0F0JaYtyUNjUr-aTPEubkCOeMCn6WRsWHz
x0WigUk1Er5Fm-3ZbYTnOHyoT34xLW9drMV6xQCRvRqPWRkrfRjQRxStBolfm6xaqV6LM9v-M4fCnXoe
SHgDqj3H43kNn61yPY1qzeWuyyfOTnoQ"
--------------- 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
OiJxSlNONnZ3VnE3N1Vick9MT2VzV2Jfd0ZZOWJzYmNQY0pXZTU2ZmtwR1ZkWm4wMXM0RjZsbWY2d0VU
MmNCT3ozQkt0NFpDREc1X1hmRzM0UHlxd05xVF8tV2RRcF9HUmhPYWNLa3Y0bEJWamJIUHVNN1FmNk5h
MElEVl9McUtKLWpOZTJGNHYzTG9WMEhwOHVIdjVnYUY4NlNPOFlMYkVkTnN1NlgyemNvUnRXUkNfUGM2
d3hUVXkxeE5vQzg2am1vVTJjMEYwSmFZdHlVTmpVci1hVFBFdWJrQ09lTUNuNldSc1dIengwV2lnVWsx
RXI1Rm0tM1piWVRuT0h5b1QzNHhMVzlkck1WNnhRQ1J2UnFQV1JrcmZSalFSeFN0Qm9sZm02eGFxVjZM
TTl2LU00ZkNuWG9lU0hnRHFqM0g0M2tObjYxeVBZMXF6ZVd1eXlmT1Rub1EifX0.eyJAY29udGV4dCI6
WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv
YmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIiwiaHR0cHM6Ly9wdXJsLmltc2ds
b2JhbC5vcmcvc3BlYy9vYi92M3AwL2V4dGVuc2lvbnMuanNvbiJdLCJpZCI6Imh0dHA6Ly9leGFtcGxl
LmVkdS9jcmVkZW50aWFscy8zNzMyIiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIk9wZW5C
YWRnZUNyZWRlbnRpYWwiXSwiaXNzdWVyIjp7ImlkIjoiaHR0cHM6Ly9leGFtcGxlLmVkdS9pc3N1ZXJz
LzU2NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdLCJuYW1lIjoiRXhhbXBsZSBVbml2ZXJzaXR5In0sInZh
bGlkRnJvbSI6IjIwMTAtMDEtMDFUMDA6MDA6MDBaIiwibmFtZSI6IkV4YW1wbGUgVW5pdmVyc2l0eSBE
ZWdyZWUiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2
ZjFjMjc2ZTEyZWMyMSIsInR5cGUiOlsiQWNoaWV2ZW1lbnRTdWJqZWN0Il0sImFjaGlldmVtZW50Ijp7
ImlkIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9hY2hpZXZlbWVudHMvMjFzdC1jZW50dXJ5LXNraWxscy90
ZWFtd29yayIsInR5cGUiOlsiQWNoaWV2ZW1lbnQiXSwiY3JpdGVyaWEiOnsibmFycmF0aXZlIjoiVGVh
bSBtZW1iZXJzIGFyZSBub21pbmF0ZWQgZm9yIHRoaXMgYmFkZ2UgYnkgdGhlaXIgcGVlcnMgYW5kIHJl
Y29nbml6ZWQgdXBvbiByZXZpZXcgYnkgRXhhbXBsZSBDb3JwIG1hbmFnZW1lbnQuIn0sImRlc2NyaXB0
aW9uIjoiVGhpcyBiYWRnZSByZWNvZ25pemVzIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgY2FwYWNpdHkg
dG8gY29sbGFib3JhdGUgd2l0aGluIGEgZ3JvdXAgZW52aXJvbm1lbnQuIiwibmFtZSI6IlRlYW13b3Jr
In19LCJjcmVkZW50aWFsU2NoZW1hIjpbeyJpZCI6Imh0dHBzOi8vcHVybC5pbXNnbG9iYWwub3JnL3Nw
ZWMvb2IvdjNwMC9zY2hlbWEvanNvbi9vYl92M3AwX2FjaGlldmVtZW50Y3JlZGVudGlhbF9zY2hlbWEu
anNvbiIsInR5cGUiOiIxRWRUZWNoSnNvblNjaGVtYVZhbGlkYXRvcjIwMTkifV0sImlzcyI6Imh0dHBz
Oi8vZXhhbXBsZS5lZHUvaXNzdWVycy81NjUwNDkiLCJqdGkiOiJodHRwOi8vZXhhbXBsZS5lZHUvY3Jl
ZGVudGlhbHMvMzczMiIsInN1YiI6ImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMy
MSJ9.BLFe87pQ1FrIMhMU_md6QElR6bour1egRffobq01-e3VWEtSOqXilQcKVh22gOInCeeGDpT0f2Y
brkP7KGLJfSls1Loju-BxFZzCD-H83XS7OpscIA1QS4eM8XWrj8SIdb9h06bEYiuHtWMJAQC6x9PWZk7
mmcKKGalOx4KhjY6dmylbXqQQyx05LsWTzuk-PmlfQPi-9KvphIqNGVrGle_32doIPqhzKue3T07xt_v
HG_rjPDbLMqhWq9oNKgTFGZk75NM3I2FBcVd6TGuPSzizLSuCxTt27AIFJy-rpyjXvIvRs_Anv1Ki-3R
VkdrfBcQK0_GmcDB8vxAQhT1KXQ
5.1
File Format
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".
5.2
Web Resource
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.
5.3
Baked Badge
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.
5.3.1
PNG
5.3.1.1
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.
Example
: An example of creating a chunk with VC-JWT proof (assuming an iTXt constructor)
var
chunk =
new
iTXt
({
keyword
'openbadgecredential'
compression
compressionMethod
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.
Example
: An example of creating a chunk with embedded proof (assuming an iTXt constructor)
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.
5.3.1.2
Extracting
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
5.3.2
SVG
5.3.2.1
Baking
First, add an
xmlns:openbadges
attribute to the

tag with the value "
". Directly after the

tag, add an

tag.
If the credential is signed using the
8.2
JSON Web Token Proof Format
(VC-JWT) add a
verify
attribute to the

tag. The value of
verify
attribute
MUST
be the
Compact JWS
string formed as a result of signing the
OpenBadgeCredential
with VC-JWT.
Example
: An example of a well baked SVG with VC-JWT proof
"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

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

Example
: An example of a well baked SVG with embedded proof
"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
"@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

svg
There
MUST
be only one

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.
5.3.2.2
Extracting
Parse the SVG until you reach the first

tag. The rest of the SVG data can safely be discarded.
6.
Open Badges API
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.
Note
: Non-individual access
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:
JSON OpenAPI File
YAML OpenAPI File
6.1
Architecture
Figure
Diagram showing the major components of the Open Badges API
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.
6.2
Secure REST Endpoints
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
6.2.1
Scopes
Each endpoint requires an access token with a specific Open Badges scope as
shown below.
Operation
Scope
getCredentials
- Permission to read OpenBadgeCredentials for the authenticated
entity.
upsertCredential
- Permission to create or update OpenBadgeCredentials for the
authenticated entity.
getProfile
- Permission to read the profile for the authenticated entity.
putProfile
- Permission to update the profile for the authenticated entity.
6.2.2
getCredentials
Get issued OpenBadgeCredentials from the
resource server
for the supplied parameters and access token.
6.2.2.1
Request
GET /ims/ob/v3p0/credentials?limit={limit}&offset={offset}&since={since}
Request header, path, and query parameters
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
6.2.2.2
Responses
Allowed response codes and content types
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
Example
: Sample getCredentials Request
GET
/ims/ob/v3p0/credentials=2&offset=0
HTTP/1.1
Host
example.edu
Authorization
Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
Accept
application/json
Example
: Sample getCredentials Response (line breaks for clarity)
HTTP/1.1 200 OK
Content-Type: application/ld+json
X-Total-Count: 1
Link: ; rel="next",
; rel="last",
; rel="first",
; rel="prev"

"compactJwsStrings": [
"header.payload.signature",
"header.payload.signature"
6.2.3
upsertCredential
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.
6.2.3.1
Request
POST /ims/ob/v3p0/credentials
Allowed request content types
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
6.2.3.2
Responses
Allowed response codes and content types
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
Example
: Sample upsertCredential Request
POST
/ims/ob/v3p0/credentials
HTTP/1.1
Host
example.edu
Authorization
Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
Accept
text/plain
Content-Type
text/plain
header
.payload
.signature
Example
: Sample upsertCredential Response
HTTP/1.1
200
OK
Content-Type
text/plain
header
.payload
.signature
6.2.4
getProfile
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.
6.2.4.1
Request
GET /ims/ob/v3p0/profile
6.2.4.2
Responses
Allowed response codes and content types
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
Example
10
: Sample getProfile Request
GET
/ims/ob/v3p0/profile
HTTP/1.1
Host
example.edu
Authorization
Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
Accept
application/json
Example
11
: Sample getProfile Response
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"
6.2.5
putProfile
Update the profile for the authenticate entity.
6.2.5.1
Request
PUT /ims/ob/v3p0/profile
Allowed request content types
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
6.2.5.2
Responses
Allowed response codes and content types
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
Example
12
: Sample putProfile Request
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"
Example
13
: Sample putProfile Response
"@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"
6.3
Service Discovery Endpoint
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.
6.3.1
getServiceDescription
Fetch the Service Description Document from the
resource server
6.3.1.1
Request
GET /ims/ob/v3p0/discovery
6.3.1.2
Responses
Allowed response codes and content types
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
Example
14
: Sample getServiceDescription request
GET /ims/ob/v3p0/discovery HTTP/1.1
Host: example.edu
Accept: application/json
Example
15
: Sample getServiceDescription response
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"
: {
...
...
6.4
Paging
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:
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:
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.
6.5
Retry Behavior
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).
7.
Open Badges API Security
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
Note
: Non-individual access
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.
7.1
Using OAuth 2.0 Authorization Code Grant
Making a secured Open Badges API request using authorization code grant comprises three steps:
7.1.1
Dynamic Client Registration
- Share configuration information between the
client
and the
server
This is typically done only once unless the registration is revoked.
7.1.2
Obtaining Tokens
- Obtain an authorization code using a choreography between the
client
web browser
user
, and
authorization server
. Then request an access token by sending a request,
using the previously obtained authorization code, to the Access Token service endpoint.
7.1.3
Authenticating with Tokens
- Use the access token in the Authorization header of the API request.
7.1.1
Dynamic Client Registration
To get started, the
client
and
authorization server
MUST
share the four pieces of information
shown below using the OAuth 2.0 Dynamic Client Registration Protocol [
RFC7591
] as described in this
section.
client_id
This is the public identifier for the communication exchange. Also called a Secret in the
IMS Global Security Framework v1.1
client_secret
This is the shared secret for the communication exchange. Also called a Secret in the
IMS Global Security Framework v1.1
List of Scopes
The list of scopes that identify the set of endpoints for which access permission is being
requested.
OAuth 2.0 Access Token Service Endpoint
The endpoint from which the approved, requesting
client
can obtain an access token.
If the
client
and
authorization server
support Token Revocation, they should also share:
OAuth 2.0 Revocation Service Endpoint
The endpoint a
client
can use to revoke an access token.
There are two steps to dynamic client registration:
Request a Service Description Document (SDD) from the
resource server
Register with the
authorization server
Figure
Sequence diagram for dynamic client registration
The
client
only needs to register a
client_id
with the
authorization server
once. Each
user
will use the same
client_id
when they request their own
authorization code.
7.1.1.1
Request the Service Description Document
To start the registration process, the
user
supplies the
client
with the
resource server
's base URL. When presented with an unknown
resource server
the
client
MUST
request
the
resource server
's Service Description Document (SDD) at the path
{baseUrl}/ims/ob/v3p0/discovery
. Rate-limited access to this endpoint is
RECOMMENDED
An example request for an SDD takes the form of:
Example
16
: Sample request for a service description document
GET
/tenant/ims/ob/v3p0/discovery
HTTP/1.1
Host
1edtech.org
Accept
application/json
Access to the discovery endpoint
MUST NOT
be protected. The SDD
MUST
be provided over HTTPS with TLS
1.2 or 1.3.
The response to this request is the SDD supplied as a JSON encoded payload. The structure and format
of this payload
MUST
follow that of the OpenAPI 3.0 Specification [
OPENAPIS-3.0
]. The SDD supplied
MUST
be a profiled version of the OpenAPI 3.0 (JSON) file provided with this specification (see
1.2.1
OpenAPI 3.0 Files
). The 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.
The
x-imssf-privacyPolicyUrl
property is inserted into the
securitySchemes
within the
components
section of the OpenAPI file structure. This is an 1EdTech controlled
extension to the OpenAPI specification.
Property Name
Type
Description
Required
x-imssf-privacyPolicyUrl
URL
A fully qualified URL to the
resource server
's privacy policy.
Required
The
x-imssf-image
and
x-imssf-privacyPolicy
properties are inserted into
the
info
section of the OpenAPI file structure. These are also 1EdTech controlled
extensions to the OpenAPI specification. Also note that the standard
title
and
property is required in a Service Description Document. These may be
displayed to the
user
during the registration process.
Property Name
Type
Description
Required
x-imssf-image
URI
An image representing the
resource server
. May be a Data URI or the URL where the
image may be found.
Optional
x-imssf-privacyPolicyUrl
URL
A fully qualified URL to the
resource server
's privacy policy.
Required
title
String
The name of the
resource server
Required
URL
A fully qualified URL to the
resource server
's terms of service.
Required
Example
17
: Sample response with a Service Discovery Document
HTTP/1.1
200
OK
Content-Type
application/json; charset=utf-8
...
"info"
: {
"x-imssf-image"
"https://1edtech.org/logo"
"x-imssf-privacyPolicyUrl"
"https://1edtech.org/privacy"
"title"
"Example"
"termsOfService"
"https://1edtech.org/tos"
...
},
...
"components"
: {
"securitySchemes"
: {
"OAuth2ACG"
: {
"type"
"oauth2"
"description"
"OAuth 2.0 Authorization Code Grant authorization"
"x-imssf-registrationUrl"
"1edtech.org/registration"
"flows"
: {
"authorizationCode"
: {
"tokenUrl"
"1edtech.org/token"
"authorizationUrl"
"1edtech.org/authorize"
"refreshUrl"
"1edtech.org/token"
"scopes"
: {
"https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.upsert"
"..."
"https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.readonly"
"..."
"https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.readonly"
"..."
"https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.update"
"..."
},
"schemas"
: {
...
...
Upon receiving a SDD from a
resource server
, the
client
SHOULD
respect the Cache-Control and
Expires headers if present in the response and configure local cache to match the directives it
declares. If directives include one of
no-cache
no-store
, the
client
SHOULD NOT
cache the data for future interactions. If directives include
max-age
or if
an Expires header is present, the
client
SHOULD
cache the SDD data, if valid, up to the
expiration indicated, either at the time indicated by the Expires header or max-age seconds from
request time.
An Etag header
MAY
be offered with the SDD response. If so, after a resource's declared expiration,
client
MAY
include an
If-None-Match header
containing the value of the Etag to
check if the resource is still fresh. If so the
resource server
may return a
304 Not Modified
response status code, and a new
Expires
or
Cache-Control
header
MAY
be included, which the
client
SHOULD
use to update the
cache expiration.
7.1.1.2
Register with Authorization Server
With the Registration URL in hand (the value of the
x-imssf-registrationUrl
property of
the SDD), the
client
SHOULD
post a registration request to the
authorization server
. The
registration request
MUST
comply with OAuth 2.0 Dynamic Client Registration Protocol [
RFC7591
].
The registration request
MUST NOT
require an Initial Access Token. Use of the 'Software Statement'
is
NOT RECOMMENDED
. The client registration request is sent to the Client Registration URL. The
request
MUST
be sent using HTTPS with TLS 1.2 or 1.3 protocol.
The properties of the JSON body
MUST
be implemented as described in the following table. All URLs
MUST
use HTTPS (e.g. https://1edtech.org/logo.png) and all URLs
MUST
have the same hostname. All
required properties
MUST
be present in the registration request in order for it to be accepted by
the
authorization server
. Arrays
MUST
be used even when a single value is to be sent.
Name
Type
Description
Required
client_name
String
The human-readable name of the
client
application.
Required
client_uri
URL
A page that which describes the
client
application.
Required
logo_uri
URL
The logo of the
client
application. If present, the
authorization server
SHOULD
display this image to the end-user during approval. The value of this field
MUST
point
to a valid image file.
Required
tos_uri
URL
The human-readable Terms of Service for the
client
application that describes a
contractural relationship between the end-user and the client that the end-user accepts
when authorizing the
client
Required
policy_uri
URL
The human-readable Privacy Policy for the
client
application that describes how the
deployment organization collects, uses, retains, and discloses personal data.
Required
software_id
String
A unique idenfitier assigned by the
client
application developer or software
published used by registration endpoints to identify the
client
application to be
dynamically registered. As described in [rfc7591], it
SHOULD
remain the same for all
instances of the
client
application software.
Required
software_version
String
A version identifier string for the
client
application software identifies by
software_id
. The value of
software_version
SHOULD
change on
any update to the
client
application software identified by the same
software_id
Required
redirect_uris
URL[]
Array of redirection URI strings for use in the OAuth 2.0 flow.
Required
scope
String
In the registration request, this is a string containing a space-separated list of scope
values that this
client
application may include when requesting access tokens. If
omitted, the
authorization server
MAY
register a
client
application with a
default set of scopes. In the registration response, this is a list of scopes the
authorization server
supports.
The list of scopes that can be requested are shown in
6.2.1
Scopes
Required
token_endpoint_auth_method
String
String indicator of the requested authentication method for the token endpoint. In this
specification only "client_secret_basic" is allowed:
"client_secret_basic": The
client
application uses the HTTP Basic
authentication method as defined in OAuth 2.0.
If omitted, the default is "client_secret_basic".
Optional
grant_types
String[]
Array of OAuth 2.0 grant type strings. In this specification only "authorization_code"
and refresh_token" are allowed:
"authorization_code": The authorization code grant type defined in OAuth
2.0.
"refresh_token": The refresh token grant type defined in OAuth 2.0.
If omitted, the default behavior is that the client will use only the
"authorization_code" grant type.
Optional
response_types
String[]
Array of OAuth 2.0 response type strings. In this specification only "code" is allowed:
"code": The authorization code response type defined in OAuth 2.0.
If omitted, the default is that the client will use only the "code" response type.
Optional
contacts
String[]
Array of strings representing ways to contact people responsible for this
client
typically email addresses. The
authorization server
MAY
make these contact addresses
available to end-users for support requests for the
client
application. Privacy
constraints
MUST
be supported as applicable.
Optional
Example
18
: Sample registration request
POST /connect/register HTTP/1.1
Host: auth.1edtech.org
Accept: application/json
Content-Type: application/json; charset=utf-8

"client_name": "Example Client Application",
"client_uri": "https://client.1edtech.org/",
"logo_uri": "https://client.1edtech.org/logo.png",
"tos_uri": "https://client.1edtech.org/terms",
"policy_uri": "https://client.1edtech.org/privacy",
"software_id": "c88b6ed8-269e-448e-99be-7e2ff47167d1",
"software_version": "v4.0.30319",
"redirect_uris": [
"https://client.1edtech.org/Authorize"
],
"token_endpoint_auth_method": "client_secret_basic",
"grant_types": [
"authorization_code",
"refresh_token"
],
"response_types": [
"code"
],
"scope": "https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.readonly https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.upsert offline_access"
If the
authorization server
accepts the registration request, it will store the information
provided in the request and respond
HTTP 201 Created
with a registration response that
includes a set of client credentials for the
client
application to use when requesting access
tokens. All the information provided by the
client
application
MUST
be returned to the
client
application, including modifications to the properties as the
authorization server
deems necessary. An example response looks like this:
Example
19
: Sample registration response
HTTP/1.1
201
Created
Content-Type
application/json; charset=utf-8
"client_id"
"4ad36680810420ed"
"client_secret"
"af7aa0d679778e12"
"client_id_issued_at"
1565715850
"client_secret_expires_at"
1597338250
"client_name"
"Example Client Application"
"client_uri"
"https://client.1edtech.org/"
"logo_uri"
"https://client.1edtech.org/logo.png"
"tos_uri"
"https://client.1edtech.org/terms"
"policy_uri"
"https://client.1edtech.org/privacy"
"software_id"
"c88b6ed8-269e-448e-99be-7e2ff47167d1"
"software_version"
"v4.0.30319"
"redirect_uris"
"https://client.1edtech.org/Authorize"
"token_endpoint_auth_method"
"client_secret_basic"
"grant_types"
"authorization_code"
"refresh_token"
"response_types"
"code"
"scope"
"https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.readonly https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.upsert offline_access"
The following table describes the properties present in the client registration response that were
not included in the request. These are all
REQUIRED
properties.
Name
Type
Description
Required
client_id
String
An OAuth 2.0 client identifier string. The value
SHOULD NOT
be currently valid for any
other registered client.
Required
client_secret
String
An OAuth 2.0 client secret string.
Required
client_id_issued_at
NonNegativeInteger
The time at which the client_id was issued. The time is represented as the number of
seconds from 1970-01-01T00:00:00Z as measured in UTC until the date/time of issuance.
Required
client_secret_expires_at
NonNegativeInteger
The time at which the
client_secret
will expire.
MAY
be 0 for no
expiration. The time is represented as the number of seconds from 1970-01-01T00:00:00Z
as measured in UTC until the date/time of expiration.
Required
When a registration error condition occurs, the authorization server returns an HTTP 400 status code
(unless otherwise specified) with content type "application/json" consisting of a JSON object
describing the error in the response body. The properties used are:
Name
Type
Description
Required
error
RegistrationError
The error.
Required
error
ASCII String
Human-readable ASCII text description of the error used for debugging.
Optional
7.1.2
Obtaining Tokens
Figure
Sequence diagram for obtaining access tokens when using the ACG flow
Obtaining an access token using an authorization code has two steps:
First obtain an authorization code using a choreography between the
client
web browser
user
, and
authorization server
7.1.2.1
Authorization Request
Then request an access token using the authorization code -
7.1.2.3
Access Token Request
Once obtained, the
client
can freely re-use the access token up until the token's expiry time, so
that the
client
need not repeat steps of obtaining an authorization code and requesting an access
token for every API request. Token refresh is also available (see
7.2.1
Token Refresh Request
).
7.1.2.1
Authorization Request
After the
client
application is registered with the
authorization server
as described in
7.1.1
Dynamic Client Registration
, the
client
application then
MAY
initiate an authorization request
as described in Section 4.2 of the IMS Security Framework [
SEC-11
] by redirecting the user to the
authorizationUrl
as declared in the
resource server
's Service Description Document
(SDD).
In the OAuth 2.0 Security Best Practices document [
OAUTH2-SBP
] the use of Proof Key for Code
Exchange (PKCE) [
RFC7636
] is recommended in order to (with the help of the
authorization server
) detect and prevent attempts to inject (replay) authorization codes into the authorization
response. When using 1EdTech specifications, PKCE
MUST
be used to protect Authorization Code Grant based
access. The PKCE has two stages:
First the
client
MUST
supply a
code_challenge
and
code_challenge_method
in the request for an authorization code. The
authorization server
is responsible for associating the
code_challenge
with the issued
authorization code.
Then the
client
MUST
supply the
code_verifier
in the Access Token Request, and
the
authorization server
verifies the
code_verifier
Parameter Name
Type
Description
Required
response_type
String
Value
MUST
be set to "code".
Required
client_id
String
The
client
application identifier.
MUST
be the
client_id
provided
in
the Dynamic Client Registration
7.1.1.2
Register with Authorization Server
response.
Required
redirect_uri
URL
The
client
application's redirection endpoint.
MUST
match one of the
redirect_uris
in the
7.1.1
Dynamic Client Registration
request. Although this is
optional in the IMS Security Framework [
SEC-11
], it is
REQUIRED
by this
specification.
Required
scope
String
The scope of the authorization request. The
authorization server
is responsible
for
validating the scopes identified in the request and the response
MUST
include a
scope
parameter which confirms this list or comprises a subset of the services requested.
Required
state
String
An opaque value used by the
client
application to maintain state between the
request
and callback. The
authorization server
includes this value when redirecting the
web browser
back to the
client
. This parameter
MUST
be used for preventing
cross-site request forgery.
Required
code_challenge
String
This is BASE64URL-ENCODE(SHA256(ASCII(code_verifier))).
Required
code_challenge_method
String
This
MUST
have a value of "S256" to indicate the SHA256 code verifier transformation
method is used.
Required
All of the authorization request parameters are encoded in the authorization request as query
string parameters. The request
MUST
be made by redirecting the browser to the OAuth 2.0
Authorization endpoint. The request
MUST
use HTTPS with TLS 1.2 or 1.3 protocol.
Example
20
: Sample ACG authorization request (line breaks for clarity)
HTTP/1.1 302 Found
Location: https://auth.1edtech.org/authorize?
client_id=4ad36680810420ed
&response_type=code
&scope=https%3A%2F%2Fpurl.imsglobal.org%2Fspec%ob%2Fv3p0%2Fscope%2Fcredential.readonly%20offline_access
&redirect_uri=https%3A%2F%client.1edtech.org%2FAuthorize
&state=26357667-94df-4a14-bcb1-f55449ddd98d
&code_challenge=XeDw66i9FLjn7XaecT_xaFyUWWfUub02Kw118n-jbEs
&code_challenge_method=S256
7.1.2.2
Authorization Response
If the
redirect_uri
matches a known
client_id
, the
authorization server
SHOULD
present a UI asking the
user
to authenticate themself and grant the access
request. The
authorization server
SHOULD
display the
client_name
client_uri
logo_uri
tos_uri
, and
policy_uri
collected during Dynamic Client Registration to the
user
to help them decide whether to grant
the access request.
If the
user
authorizes the
client
application to access their resources with the requested
scopes, the
authorization server
MUST
redirect the browser back to the
redirect_uri
with the
code
scope
, and
state
query string parameters.
The Authorization Code
MUST
be used only once. A lifetime for the authorization code of 600 seconds
(10 minutes) is
RECOMMENDED
. If an authorization code is used more than once, the
authorization server
MUST
deny the request and
SHOULD
revoke (when possible) all tokens previously issued based
on that authorization code. The authorization code is bound to the
client
identifier and
redirection URI.
Parameter Name
Type
Description
Required
code
String
The authorization code.
Required
scope
String
The authorized scope for the access request (this
MAY
be a subset of the scopes in the
request). The value is a space delimited set of scopes.
Required
state
String
The opaque value supplied by the client to maintain state between the request and
callback.
Required
Example
21
: Sample ACG authorization response (line breaks for clarity)
HTTP/1.1 302 Found
Location https://client.1edtech.org/Authorize?
code=dcf95d196ae04d60aad7e19d18b9af755a7b593b680055158b8ad9c2975f0d86
&scope=https%3A%2F%2Fpurl.imsglobal.org%2Fspec%ob%2Fv3p0%2Fscope%2Fcredential.readonly%20offline_access
&state=26357667-94df-4a14-bcb1-f55449ddd98d
7.1.2.2.1
Authorization Error Response
If the
authorization server
does not recognize the
client
applications's redirection
endpoint from a prior connection with this
client
application, the
authorization server
SHOULD
inform the
user
of the error and
MUST NOT
automatically redirect to the
web browser
to the invalid redirection URI.
If the
user
denies the authorization request or if the request fails for reasons other than a
missing or invalid redirection URI, the
authorization server
informs the
client
by adding
the following parameters to the query component of the redirection URI.
Parameter Name
Type
Description
Required
error
AuthorizationError
A single ASCII [
RFC20
] error code from the AuthorizationError vocabulary.
Required
error_description
String
Human-readable ASCII [
RFC20
] text providing additional information, used to assist the
client developer in understanding the error that occurred. Values for the
"error_description" parameter
MUST NOT
include characters outside the set %x20-21 /
%x23-5B / %x5D-7E.
error_uri
URI
A URI identifying a human-readable web page with information about the error, used to
provide the client developer with additional information about the error. Values for the
"error_uri" parameter
MUST
conform to the URI-reference syntax and thus
MUST NOT
include
characters outside the set %x21 / %x23-5B / %x5D-7E.
state
String
The opaque value supplied by the client to maintain state between the request and
callback.
Required
Example
22
: Sample authorization error response
HTTP/1.1
302
Found
Location
7.1.2.3
Access Token Request
With the supplied
code
, the
client
application
SHOULD
attempt to exchange the
code
for an
access_token
. The
client
application makes an
authorization grant POST request to the
tokenUrl
as declared in the
resource server
's Discovery Document. The HTTP POST request
MUST
include a Basic authorization header with
the
client_id
and
client_secret
provided in the registration response. The
body of the token request
MUST
include the following form fields:
Field Name
Type
Description
Required
grant_type
String
Value
MUST
be set to "authorization_code".
Required
code
String
The authorization code received from the
authorization server
Required
redirect_uri
URL
The
client
application's redirection endpoint.
Required
scope
String
The scope of the access request.
Required
code_verifier
String
The PKCE code verifier.
Required
Example
23
: Sample ACG token request (line breaks for clarity)
POST
/token
HTTP/1.1
Host
auth.1edtech.org
Authorization
Basic NDE2ZjI1YjhjMWQ5OThlODoxNWQ5MDA4NTk2NDdkZDlm
Content-Type
application/x-www-form-urlencoded

grant_type=authorization_code
&code=7c7a73263ee14b2b48073d0615f286ec74f6636689046cb8dbede0b5e87a1338
&redirect_uri=https%3A%2F%client.1edtech.org%2FAuthorize
&scope=https%3A%2F%2Fpurl.imsglobal.org%2Fspec%2Fob%2Fv3p0%2Fscope%2Fcredential.readonly+offline_access
&code_verifier=mYUQfKNgI1lSbY8EqtvNHLPzu0x%2FcVKO3fpWnX4VE5I%3D
7.1.2.4
Access Token Response
If the
authorization server
grants this request (see Section 5.1 in [
RFC6749
] for the detailed
description), it returns
HTTP 200 OK
status code with content type "application/json"
consisting of a JSON object containing the access token and its expiry lifetime (1EdTech recommends a
default expiry lifetime of 3600 seconds, one hour, for access tokens), optionally a refresh token,
and confirms the set of scopes supported by the access token:
Property Name
Type
Description
Required
access_token
String
The access token issued by the
authorization server
Required
token_type
String
The type of the token issued. The case insensitive value
MUST
be "bearer".
Required
scope
String
The scope of the access token. This is a space-separated list of scopes.
Required
expires_in
PositiveInteger
The lifetime in seconds of the access token. For example, the value "3600" denotes that
the access token will expire in one hour from the time the response was generated. 1EdTech
recommends a default expiry lifetime of 3600 seconds, one hour, for access tokens. If
omitted, the authorization server
SHOULD
provide the expiration time via other means or
document the default value.
Optional
refresh_token
String
The refresh token, which can be used to obtain new access tokens using the same
authorization grant as described in
7.2.1
Token Refresh Request
Optional
Example
24
: Sample ACG token response
HTTP/1.1
200
OK
Cache-Control
no-store, no-cache, max-age=0
Pragma
no-cache
Content-Type
application/json; charset=UTF-8
"access_token"
"863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92"
"refresh_token"
"tGzv3JOkF0XG5Qx2TlKWIA"
"expires_in"
3600
"token_type"
"Bearer"
"scope"
"https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.readonly offline_access"
7.1.2.4.1
Access Token Error Response
The
authorization server
MAY
decide not to issue an access token. This could be because the
request scopes are invalid, the credentials from the client may be invalid, etc. In this case the
authorization server
MUST
return an
HTTP 400 Bad Request
status code with content
type "application/json" consisting of a JSON object describing the error in the response body. The
properties used to describe the error are:
Property Name
Type
Description
Required
error
TokenError
A single ASCII [
RFC20
] error code]. See Section 5.2 of [
RFC6749
].
Required
error_description
ASCIIString
Human-readable ASCII [RFC20] text providing additional information, used to assist the
client developer in understanding the error that occurred. Values for the
"error_description" parameter
MUST NOT
include characters outside the set %x20-21 /
%x23-5B / %x5D-7E.
Optional
error_uri
URI
A URI identifying a human-readable web page with information about the error, used to
provide the client developer with additional information about the error. Values for the
"error_uri" parameter
MUST
conform to the URI-reference syntax and thus
MUST NOT
include
characters outside the set %x21 / %x23-5B / %x5D-7E.
Optional
Example
25
: Sample access token error response
HTTP/1.1
400
Bad Request
Content-Type
application/json;charset=UTF-8
Cache-Control
no-store
Pragma
no-cache
"error"
"invalid_request"
7.1.3
Authenticating with Tokens
After obtaining an
access_token
and optionally a
refresh_token
using the
method above, a
client
application
MAY
issue request that access resources controlled by the
user
on the
resource server
using the
access_token
in the HTTP Authorization header
RFC2617
] with a Bearer Token [
RFC6750
]. For example, a
getCredentials
request would look like this:
Example
26
: Sample getCredentials request
GET
/ims/ob/v3p0/credentials
HTTP/1.1
Host
example.edu
Authorization
Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
Accept
application/json
7.2
Token Refresh
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.
7.2.1
Token Refresh Request
If the
access_token
is expired or about to expire, and the
client
application received
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
Example
27
: Sample ACG token refresh request (line breaks for clarity)
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
7.2.2
Token Refresh Response
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
7.3
Token Revocation
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.
7.3.1
Token Revocation Request
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
Example
28
: Sample token revocation request
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
7.3.2
Token Revocation Response
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".
8.
Proofs (Signatures)
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.
8.1
Proof Formats
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.
Note
The
issuer
MAY
use multiple proofs. If multiple proofs are provided, the
verifier
MAY
use any one proof to verify the credential.
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.
8.2
JSON Web Token Proof Format
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.
Note
At the time of the completion of this specification, the JSON Web Token Proof Format of [
VC-DATA-MODEL-2.0
] was undergoing a revision process. [
VC-JOSE-COSE
] will collect and display
the result of this revision. The modifications resulting from the incompatibility of the revision with what is contained in this document will be added in future revisions.
8.2.1
Terminology
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
8.2.2
Overview
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.
8.2.3
Create the JOSE Header
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
Example
29
: Sample JOSE Header with reference to a public key in a JWKS
"alg"
"RS256"
"kid"
"https://example.edu/keys#key-1"
"typ"
"JWT"
8.2.4
Create the JWT Payload
If you are going to use both external and embedded proof formats, add the embedded proofs prior to creating the JWT Payload.
8.2.4.1
JWT Payload Format
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
8.2.5
Create the Proof
Note
: Sign and Encode the JWS
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
for
as described in [
RFC7515
].
Encode the signature as
BASE64URL(JWS Signature)
Concatenate
and
as
C | "." | 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.
8.2.6
Verify a 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
the
kid
value to retrieve the public key
JWK
If the header includes a
jwk
property, convert the
jwk
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 Signature
1EdTech 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
Note
Credentials created following
Verifiable Credentials Data Model v2.0
([
VC-DATA-MODEL
]) store the
OpenBadgeCredential
in the
vc
claim of the JWT Payload. In this case, the
contents of the
vc
claim must be converted to an
OpenBadgeCredential
and continue with
8.2.6.1
Verify a Credential VC-JWT Signature
8.2.6.1
Verify a Credential VC-JWT Signature
The JSON object
MUST
have the
iss
claim, and the value
MUST
match the
issuer.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 the
credentialSubject.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 the
validFrom
of the
OpenBadgeCredential
object. If they do not match or if the
validFrom
has not yet occurred, the credential is not valid.
The JSON object
MUST
have the
jti
claim, and the value
MUST
match the
id
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 the
validUntil
of the
OpenBadgeCredential
object. If the credential has expired, the credential is not valid.
Note
Credentials created following
Verifiable Credentials Data Model v2.0
([
VC-DATA-MODEL
]) have different names for attributes used in this process. Concretely, they have
issuanceDate
and
expirationDate
instead of
validFrom
and
validUntil
, respectively
8.3
Linked Data Proof Format
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.
Note
Whenever possible, you should use a library or service to create and verify a Linked Data Proof.
8.3.1
Create the Proof
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.
8.3.2
Verify an OpenBadgeCredential Linked Data Signature
Verify the Linked Data Proof signature as shown in
Section 7.2 Proof Verification Algorithm
of [
DATA-INTEGRITY-SPEC
].
8.4
Key Management
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
8.5
Dereferencing the Public Key
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.
) or a DID URL (e.g.
did:key:123
), but only requires HTTP URL support.
9.
Verification and Validation
Verification
is the process to determine whether a
verifiable credential
or
verifiable presentation
is an authentic and timely statement of the issuer or presenter respectively. This includes checking that: the credential (or presentation) conforms to the specification; the proof method is satisfied; and, if present, the status check succeeds. Verification of a credential does not imply evaluation of the truth of claims encoded in the credential.
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.
Note
The 1EdTech Validator performs
verification
as described here.
9.1
OpenBadgeCredential Verification
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 the
type
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 an
id
and/or an
identifier
. If neither is present, the credential does not conform to the specification.
Note
OpenBadgeCredentials created following
Verifiable Credentials Data Model v2.0
([
VC-DATA-MODEL
]) have different names for attributes used in this process. Concretely, they have
issuanceDate
and
expirationDate
instead of
validFrom
and
validUntil
, 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.
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.
Note
The 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:
Note
Refresh 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 the
type
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.
Note
Only perform Refresh once. That is, do not complete Refresh a second time even if the refreshed OpenBadgeCredential also has a
refreshService
defined.
Check the status:
A Credential is revoked if the
credentialStatus
property is present, and the
type
of the
CredentialStatus
object is "BitstringStatusListEntry", and if the Credential has been revoked as shown in
Bitstring Status List v1.0
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.
Note
OpenBadgeCredentials created following
Verifiable Credentials Data Model v2.0
([
VC-DATA-MODEL
]) have different names for attributes used in this process. Concretely, they have
issuanceDate
and
expirationDate
instead of
validFrom
and
validUntil
, 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.
Optionally verify the subject (recipient):
Note
This 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
) by
id
and/or one or more
identifier
(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.
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.
9.2
EndorsementCredential Verification
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 the
type
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.
Note
EndorsementCredentials created following [
VC-DATA-MODEL
] have different names for attributes used in this process. Concretely, they have
issuanceDate
and
expirationDate
instead of
validFrom
and
validUntil
, 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.
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.
Note
The 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.
Refresh the EndorsementCredential:
If the
refreshService
property is present, and the
type
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.
Note
Refresh must be completed after checking the proof so that the verifier is not spoofed into receiving a refreshed EndorsementCredential from a bad actor.
Note
Only perform Refresh once. That is, do not complete Refresh a second time even if the refreshed EndorsementCredential also has a
refreshService
defined.
Check the status:
If the
credentialStatus
property is present, and the
type
of the
CredentialStatus
object is "BitstringStatusListEntry", and determine if the EndorsementCredential has been revoked as shown in
Bitstring Status List v1.0
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.
Note
EndorsementCredentials created following [
VC-DATA-MODEL
] have different names for attributes used in this process. Concretely, they have
issuanceDate
and
expirationDate
instead of
validFrom
and
validUntil
, 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 all the above steps pass, the EndorsementCredential may be treated as verified.
9.3
Verify the Recipient Using an Identifier
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 next
identifier
If
identifier.hashed
is
true
, calculate the known identifier
IdentityHash
using the known identifier and the
identifier.salt
. If the known identifier IdentityHash matches the
identifier.identityHash
, the recipient is verified.
If
identifier.hashed
is
false
, and if the known identifier matches the
identifier.identityHash
, the recipient is verified.
10.
Credential equality and comparison algorithm
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.
10.1
Examples
10.1.1
Equality
Credentials
and
are equal since they have the same
id
and the same
issuer.id
Example
30
: Sample credential A
"@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"
Example
31
: Sample credential B
"@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.
10.1.2
Comparison
Credentials
and
are equal since they have the same
id
and the same
issuer.id
Example
32
: Sample credential C
"@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"
Example
33
: Sample credential D
"@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
).
11.
Verifiable Credentials Extensions
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 Refresh Method called
1EdTech Credential Refresh Service
A Data Schema Validation Method called
1EdTech JSON Schema Validator 2019
Note
The 1EdTech extensions are designed to work with any
verifiable credential
and may be contributed to the
VC-EXTENSION-REGISTRY
] in the future.
A.
Serialization
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.
A.1
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.._
and
1.._
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.
A.2
JSON-LD
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
, 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
. The JSON-LD context for Open Badges
verifiable credentials
is available at
. The associated vocabulary document for the Open Badges Data Model is available at
. Open Badges
verifiable credentials
MUST
be serialized with both JSON-LD contexts.
Note
Though this specification requires that a
@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.
Example
34
: JSON-LD @context serialization
"@context"
"https://www.w3.org/ns/credentials/v2"
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
A.2.1
Compacted document form
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
AchievementSubject
type
Address
type
Alignment
type
EndorsementCredential
type
EndorsementCredential
credentialSchema
EndorsementCredential
proof
EndorsementCredential
EndorsementSubject
type
Evidence
type
Profile
type
Related
type
Result
type
ResultDescription
type
RubricCriterionLevel
type
VerifiableCredential
type
VerifiableCredential
proof
VerifiableCredential
credentialSchema
VerifiableCredential
B.
Data Models
B.1
Credential Data Models
The data models in this section are shared by
Open Badges Specification v3.0
and
Comprehensive Learner Record Standard v2.0
B.1.1
Achievement
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.
B.1.2
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.
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..*]
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]
The value of the
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..*]
evidence
Evidence
A description of the work that the recipient did to earn the credential. This can be a page that links out to other pages if linking directly to the work is infeasible.
[0..*]
This class can be extended with additional properties.
B.1.3
AchievementSubject
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.
B.1.4
Address
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.
B.1.5
Alignment
Describes an alignment between an achievement and a node in an educational framework.
Property
Type
Description
Multiplicity
type
IRI
The value of the type property
MUST
be an unordered set. One of the items
MUST
be the IRI 'Alignment'.
[1..*]
targetCode
String
If applicable, a locally unique string identifier that identifies the alignment target within its framework and/or targetUrl.
[0..1]
targetDescription
String
Short description of the alignment target.
[0..1]
targetName
String
Name of the alignment.
[1]
targetFramework
String
Name of the framework the alignment target.
[0..1]
targetType
AlignmentTargetType Enumeration
The type of the alignment target node.
[0..1]
targetUrl
URL
URL linking to the official description of the alignment target, for example an individual standard within an educational framework.
[1]
This class can be extended with additional properties.
B.1.6
Criteria
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.
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.
B.1.7
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.
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]
The value of the
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..*]
evidence
Evidence
A description of the work that the recipient did to earn the credential. This can be a page that links out to other pages if linking directly to the work is infeasible.
[0..*]
This class can be extended with additional properties.
B.1.8
EndorsementSubject
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.
B.1.9
Evidence
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.
B.1.10
GeoCoordinates
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.
B.1.11
IdentifierEntry
Property
Type
Description
Multiplicity
type
IRI
MUST
be the IRI 'IdentifierEntry'.
[1]
identifier
Identifier
An identifier.
[1]
identifierType
IdentifierTypeEnum Enumeration
The identifier type.
[1]
B.1.12
IdentityObject
A collection of information about the recipient of an achievement.
Property
Type
Description
Multiplicity
type
IRI
MUST
be the IRI 'IdentityObject'.
[1]
hashed
Boolean
Whether or not the
identityHash
value is hashed.
[1]
identityHash
IdentityHash
Either the IdentityHash of the identity or the plaintext value. If it's possible that the plaintext transmission and storage of the identity value would leak personally identifiable information where there is an expectation of privacy, it is strongly recommended that an IdentityHash be used.
[1]
identityType
IdentifierTypeEnum Enumeration
The identity type.
[1]
salt
String
If the
identityHash
is hashed, this should contain the string used to salt the hash. If this value is not provided, it should be assumed that the hash was not salted.
[0..1]
B.1.13
Image
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]
B.1.14
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.
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
[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]
email
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.
B.1.15
Related
Identifies a related achievement.
Property
Type
Description
Multiplicity
id
URI
The related achievement.
[1]
type
IRI
The value of the type property
MUST
be an unordered set. One of the items
MUST
be the IRI 'Related'.
[1..*]
inLanguage
LanguageCode
The language of the related achievement.
[0..1]
version
String
The version of the related achievement.
[0..1]
This class can be extended with additional properties.
B.1.16
Result
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.
B.1.17
ResultDescription
Describes a possible achievement result.
Property
Type
Description
Multiplicity
id
URI
The unique URI for this result description. Required so a result can link to this result description.
[1]
type
IRI
The value of the type property
MUST
be an unordered set. One of the items
MUST
be the IRI 'ResultDescription'.
[1..*]
alignment
Alignment
Alignments between this result description and nodes in external frameworks.
[0..*]
allowedValue
String
An ordered list of allowed values. The values should be ordered from low to high as determined by the achievement creator.
[0..*]
name
String
The name of the result.
[1]
requiredLevel
URI
The
id
of the rubric criterion level required to pass as determined by the achievement creator.
[0..1]
requiredValue
String
A value from
allowedValue
or within the range of
valueMin
to
valueMax
required to pass as determined by the achievement creator.
[0..1]
resultType
ResultType Enumeration
The type of result this description represents. This is an extensible enumerated vocabulary.
[1]
rubricCriterionLevel
RubricCriterionLevel
An ordered array of rubric criterion levels that may be asserted in the linked result. The levels should be ordered from low to high as determined by the achievement creator.
[0..*]
valueMax
String
The maximum possible
value
that may be asserted in a linked result.
[0..1]
valueMin
String
The minimum possible
value
that may be asserted in a linked result.
[0..1]
This class can be extended with additional properties.
B.1.18
RubricCriterionLevel
Describes a rubric criterion level.
Property
Type
Description
Multiplicity
id
URI
The unique URI for this rubric criterion level. Required so a result can link to this rubric criterion level.
[1]
type
IRI
The value of the type property
MUST
be an unordered set. One of the items
MUST
be the IRI 'RubricCriterionLevel'.
[1..*]
alignment
Alignment
Alignments between this rubric criterion level and a rubric criterion levels defined in external frameworks.
[0..*]
description
String
Description of the rubric criterion level.
[0..1]
level
String
The rubric performance level in terms of success.
[0..1]
name
String
The name of the rubric criterion level.
[1]
points
String
The points associated with this rubric criterion level.
[0..1]
This class can be extended with additional properties.
B.1.19
VerifiableCredential
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]
The value of the
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..*]
evidence
Evidence
A description of the work that the recipient did to earn the credential. This can be a page that links out to other pages if linking directly to the work is infeasible.
[0..*]
This class can be extended with additional properties.
B.1.20
ProfileRef
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
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.
URI
NormalizedString
that respresents a Uniform Resource Identifier (URI).
B.1.21
CredentialSchema
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.
B.1.22
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.
Property
Type
Description
Multiplicity
id
URI
The value
MUST
be the URL of the issuer's credential status method.
[0..1]
type
IRI
The name of the credential status method.
[1]
This class can be extended with additional properties.
B.1.23
CredentialSubject
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.
B.1.24
Proof
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.
B.1.25
RefreshService
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.
B.1.26
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.
B.1.27
Context
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
NormalizedString
that respresents a Uniform Resource Identifier (URI).
B.1.28
AchievementType Enumeration
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:'.
B.1.29
AlignmentTargetType Enumeration
The type of the alignment target node in the target framework.
Term
Description
ceasn:Competency
An alignment to a CTDL-ASN/CTDL competency published by Credential Engine.
ceterms:Credential
An alignment to a CTDL Credential published by Credential Engine.
CFItem
An alignment to a CASE Framework Item.
CFRubric
An alignment to a CASE Framework Rubric.
CFRubricCriterion
An alignment to a CASE Framework Rubric Criterion.
CFRubricCriterionLevel
An alignment to a CASE Framework Rubric Criterion Level.
CTDL
An alignment to a Credential Engine Item.
This enumeration can be extended with new, proprietary terms.
The new terms must start with the substring 'ext:'.
B.1.30
IdentifierTypeEnum Enumeration
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:'.
B.1.31
ResultType Enumeration
The type of result. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.
Term
Description
GradePointAverage
The result is a grade point average.
LetterGrade
The result is a letter grade.
Percent
The result is a percent score.
PerformanceLevel
The result is a performance level.
PredictedScore
The result is a predicted score.
RawScore
The result is a raw score.
Result
A generic result.
RubricCriterion
The result is from a rubric criterion.
RubricCriterionLevel
The result is a rubric criterion level.
RubricScore
The result represents a rubric score with both a name and a numeric value.
ScaledScore
The result is a scaled score.
Status
The result conveys the status of the achievement.
This enumeration can be extended with new, proprietary terms.
The new terms must start with the substring 'ext:'.
B.1.32
ResultStatusType Enumeration
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.
B.2
Open Badges API Data Models
The data models in this section are used by the
6.
Open Badges API
B.2.1
GetOpenBadgeCredentialsResponse
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..*]
B.3
Shared API Data Models
The data models in this section are shared by all 1EdTech service specifications.
B.3.1
Imsx_StatusInfo
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]
B.3.2
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.
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.
B.3.3
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.
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.
B.3.4
Imsx_CodeMinor
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..*]
B.3.5
Imsx_CodeMinorField
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]
B.3.6
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.
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.
B.4
Shared API Security Data Models
The data models in this section are shared by all 1EdTech service specifications.
B.4.1
ServiceDescriptionDocument
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 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
[1]
components
OpenApiComponents
Holds a set of reusable objects for different aspects of the OAS.
[1]
This class can be extended with additional properties.
B.4.2
OpenApiComponents
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.
B.4.3
OpenApiInfo
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
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.
B.4.4
OpenApiOAuth2SecurityScheme
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.
B.4.5
OpenApiSecuritySchemes
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]
B.5
Shared OAuth 2.0 Data Models
The data models in this section are shared by all 1EdTech service specifications.
B.5.1
AuthorizationError Vocabulary
This is the set of ASCII error code strings that may be returned in response to a client authorization request. See Section 4.1 of [
RFC6749
].
Term
Description
invalid_request
The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed.
unauthorized_client
The client is not authorized to request an authorization code using this method.
access_denied
The resource owner or authorization server denied the request.
unsupported_response_type
The authorization server does not support obtaining an authorization code using this method.
invalid_scope
The requested scope is invalid, unknown, or malformed.
server_error
The authorization server encountered an unexpected condition that prevented it from fulfilling the request. (This error code is needed because a 500 Internal Server Error HTTP status code cannot be returned to the client via an HTTP redirect.)
temporarily_unavailable
The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server. (This error code is needed because a 503 Service Unavailable HTTP status code cannot be returned to the client via an HTTP redirect.)
B.5.2
RegistrationError Vocabulary
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
B.5.3
TokenError Vocabulary
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.
B.6
Shared Proof Data Models
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
B.6.1
Multikey
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]
B.6.2
JWK
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.
B.6.3
JWKS
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..*]
B.7
Derived Types
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
String
in Compact JWS format [
RFC7515
].
CountryCode
A two-digit ISO 3166-1 alpha-2 country code [
ISO3166-1
].
DateTimeZ
DateTime
with the trailing timezone specifier included, e.g.
2021-09-07T02:09:59+02:00
EmailAddress
NormalizedString
representing an email address.
Identifier
NormalizedString
that functions as an identifier.
IdentityHash
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
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
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
NormalizedString
representing a phone number.
Term
A term in an enumeration. The lexical constraints are the same as for
Token
URI
NormalizedString
that respresents a Uniform Resource Identifier (URI).
URL
URI
that represents a Uniform Resource Locator (URL).
UUID
An
Identifier
with the lexical restrictions of a UUID [
RFC4122
B.8
Primitive Types
The primitive types in this section are shared by all 1EdTech specifications.
Type
Description
Boolean
A boolean, expressed as
true
or
false
Date
An [
ISO8601
] calendar date using the syntax YYYY-MM-DD.
DateTime
An [
ISO8601
] time using the syntax YYYY-MM-DDThh:mm:ss.
Float
Integer
Language
A language code [
BCP47
].
Map
A map representing an object with unknown, arbitrary properties
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
String
conforming to the
normalizedString
definition in [
XMLSCHEMA-2
].
PositiveInteger
String
Character strings.
B.9
Verification Support Data Models
The data models in this section are used by the
9.
Verification and Validation
process for supporting older credentials created with [
VC-DATA-MODEL
].
B.9.1
AnyAchievementCredential
AnyAchievementCredential represents an AchievementCredential that might be built using [
VC-DATA-MODEL-1.1
] 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
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.
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.
B.9.2
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.
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..*]
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]
The value of the
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..*]
evidence
Evidence
A description of the work that the recipient did to earn the credential. This can be a page that links out to other pages if linking directly to the work is infeasible.
[0..*]
This class can be extended with additional properties.
B.9.3
AnyEndorsementCredential
AnyEndorsementCredential represents an EndorsementCredential that might be built using [
VC-DATA-MODEL-1.1
] 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 [[[#endorsement-credential]] 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
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.
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.
B.9.4
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.
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]
The value of the
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..*]
evidence
Evidence
A description of the work that the recipient did to earn the credential. This can be a page that links out to other pages if linking directly to the work is infeasible.
[0..*]
This class can be extended with additional properties.
B.9.5
VerifiableCredentialv1p1
A Verifiable Credential as defined in the [
VC-DATA-MODEL-1.1
]. 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]
The value of the
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..*]
evidence
Evidence
A description of the work that the recipient did to earn the credential. This can be a page that links out to other pages if linking directly to the work is infeasible.
[0..*]
This class can be extended with additional properties.
B.9.6
AchievementSubjectv1p1
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]
B.9.7
Achievementv1p1
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.
B.9.8
Profilev1p1
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
[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]
email
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.
C.
Extending and Profiling the Standard
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
C.1
Extending the Data Model
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.
C.2
Extending Enumerated Vocabularies
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
C.3
Extending the API
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.
C.4
Profiles
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.
D.
Examples
D.1
Basic OpenBadgeCredential
Note
The following Credential is a minimal achievement assertion. The Achievement
definition here is assumed
Example
35
: Sample OpenBadgeCredential
Credential
Verifiable Credential (with proof)
Verifiable Credential (as JWT)
"@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": "2026-04-22T07:26:15Z",
"verificationMethod": "https://example.com/issuers/876543#z6MkkFCoRQWqAv9CaHQEgUbn2nDS46ei3pqBSKC6axEfvcyC",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z55nyygRLFavvhwHpnUyHvJ1viz7Yat9AbbXGMwBRKnm8upp1HHqLcqDZPxoSxFazSzJpMmAw3Fn8DW1ZXsUcJs4S"
---------------- JWT header ---------------
"alg": "RS256",
"typ": "JWT",
"jwk": {
"e": "AQAB",
"kty": "RSA",
"n": "3-zsgIQG5kuVouzy45WdZdhGRDDBuTDQkNJow_bC7cfSr8RC36gcGtuusogEZmdre8s98Q
PFxG0nuVc6BxMYAvqn-LBJDFjgsvZfzcnClS_F8Qaqq7Ap3WLmojZ1eMRfs_GwH7jf6xNh_cijj3iTnK
BHKlKPUorHmpdj1EKatf50Cz7C0F1gIirDd_DwAfks8BY8XEyS7Si7JI0e2xKBOTzc508FOfKoJpl74P
VDlrwyNzgyYxxJ16MIlweJw2ZsviynUYdmK6SXuYNDLfP4XGcPHQAX65zU8W1pbLP65Kgc-2-KJrwjm8
gyCwDeuaUpV791LZrzf01OXbjU0Uec9Q"
--------------- 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
OiIzLXpzZ0lRRzVrdVZvdXp5NDVXZFpkaEdSRERCdVREUWtOSm93X2JDN2NmU3I4UkMzNmdjR3R1dXNv
Z0VabWRyZThzOThRUEZ4RzBudVZjNkJ4TVlBdnFuLUxCSkRGamdzdlpmemNuQ2xTX0Y4UWFxcTdBcDNX
TG1valoxZU1SZnNfR3dIN2pmNnhOaF9jaWpqM2lUbktCSEtsS1BVb3JIbXBkajFFS2F0ZjUwQ3o3QzBG
MWdJaXJEZF9Ed0Fma3M4Qlk4WEV5UzdTaTdKSTBlMnhLQk9UemM1MDhGT2ZLb0pwbDc0UFZEbHJ3eU56
Z3lZeHhKMTZNSWx3ZUp3Mlpzdml5blVZZG1LNlNYdVlORExmUDRYR2NQSFFBWDY1elU4VzFwYkxQNjVL
Z2MtMi1LSnJ3am04Z3lDd0RldWFVcFY3OTFMWnJ6ZjAxT1hialUwVWVjOVEifX0.eyJAY29udGV4dCI6
WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv
YmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIl0sImlkIjoiaHR0cDovL2V4YW1w
bGUuY29tL2NyZWRlbnRpYWxzLzM1MjciLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiT3Bl
bkJhZGdlQ3JlZGVudGlhbCJdLCJpc3N1ZXIiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuY29tL2lzc3Vl
cnMvODc2NTQzIiwidHlwZSI6WyJQcm9maWxlIl0sIm5hbWUiOiJFeGFtcGxlIENvcnAifSwidmFsaWRG
cm9tIjoiMjAxMC0wMS0wMVQwMDowMDowMFoiLCJuYW1lIjoiVGVhbXdvcmsgQmFkZ2UiLCJjcmVkZW50
aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSIs
InR5cGUiOlsiQWNoaWV2ZW1lbnRTdWJqZWN0Il0sImFjaGlldmVtZW50Ijp7ImlkIjoiaHR0cHM6Ly9l
eGFtcGxlLmNvbS9hY2hpZXZlbWVudHMvMjFzdC1jZW50dXJ5LXNraWxscy90ZWFtd29yayIsInR5cGUi
OlsiQWNoaWV2ZW1lbnQiXSwiY3JpdGVyaWEiOnsibmFycmF0aXZlIjoiVGVhbSBtZW1iZXJzIGFyZSBu
b21pbmF0ZWQgZm9yIHRoaXMgYmFkZ2UgYnkgdGhlaXIgcGVlcnMgYW5kIHJlY29nbml6ZWQgdXBvbiBy
ZXZpZXcgYnkgRXhhbXBsZSBDb3JwIG1hbmFnZW1lbnQuIn0sImRlc2NyaXB0aW9uIjoiVGhpcyBiYWRn
ZSByZWNvZ25pemVzIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgY2FwYWNpdHkgdG8gY29sbGFib3JhdGUg
d2l0aGluIGEgZ3JvdXAgZW52aXJvbm1lbnQuIiwibmFtZSI6IlRlYW13b3JrIn19LCJpc3MiOiJodHRw
czovL2V4YW1wbGUuY29tL2lzc3VlcnMvODc2NTQzIiwianRpIjoiaHR0cDovL2V4YW1wbGUuY29tL2Ny
ZWRlbnRpYWxzLzM1MjciLCJzdWIiOiJkaWQ6ZXhhbXBsZTplYmZlYjFmNzEyZWJjNmYxYzI3NmUxMmVj
MjEifQ.uIb-Ulyal6YU1Vd71KvnLyvaa6fKFz5j-BqzeqiH43knrXJydHtY99F8Ar9VgA6J_e950YOwC
4NMz2LR6fc0iRQNzWFvXDBLYbWBw3Ajk2T_7d5BX5t_4d-BrH1zqEvaJif0JSk54JdmrmOKRcaJZLQVc
hAR0gadAd2n26_atbwweQRQeUglU_imPddRH99mK-6vU4vjtYN8XQD3t5HJXfwemI2N8g9Y-1sqIMAgf
YYieseWYXblCbadSzX7ixW9yAMwAzxfIEXhixR1nHGl9BXh2oB0o2xL57NigJlvTKda8NN1PFnA_9tuv
2MzpPX-sqojCKcKQsm_ZI1KVLaolw
D.2
Complete OpenBadgeCredential
In this example, all required and optional properties are populated.
Note
: Endorsements
The endorsements were signed by different issuers and provided to the issuer of this OpenBadgeCredential.
Example
36
: Complete OpenBadgeCredential
Credential
Verifiable Credential (with proof)
Verifiable Credential (as JWT)
"@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"
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.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/revocationList#23"
"type"
"BitstringStatusListEntry"
"statusPurpose"
"revocation"
"statusListIndex"
23
"statusListCredential"
"https://1edtech.edu/credentials/revocationList"
"refreshService"
"id"
"http://1edtech.edu/credentials/3732"
"type"
"1EdTechCredentialRefresh"
"proof"
"type"
"DataIntegrityProof"
"created"
"2010-01-01T19:23:24Z"
"verificationMethod"
"https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt"
"cryptosuite"
"eddsa-rdfc-2022"
"proofPurpose"
"assertionMethod"
"proofValue"
"z27zr9VnabHMVwHsrqu9j8mSmm6Yp2cJCrMcg4Cownc8h7kw4qwMkxFHdg8h4CVYVK1TGd1vgoPBgFkQodMtjWQ8f"
"@context"
"https://www.w3.org/ns/credentials/v2"
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.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://1edtech.edu/credentials/revocationList#23"
"type"
"BitstringStatusListEntry"
"statusPurpose"
"revocation"
"statusListIndex"
23
"statusListCredential"
"https://1edtech.edu/credentials/revocationList"
"refreshService"
"id"
"http://state.gov/credentials/3732"
"type"
"1EdTechCredentialRefresh"
"proof"
"type"
"DataIntegrityProof"
"created"
"2010-01-01T19:23:24Z"
"verificationMethod"
"https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt"
"cryptosuite"
"eddsa-rdfc-2022"
"proofPurpose"
"assertionMethod"
"proofValue"
"z4TUqPBaJx7Ld3QMxMy25dRU29fAPEwemPEUEZSRDS979nUKtfon7zu6ocgRyRCniXE9heY46NKPzwbFdqmKbUhkG"
"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"
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.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/revocationList#23"
"type"
"BitstringStatusListEntry"
"statusPurpose"
"revocation"
"statusListIndex"
23
"statusListCredential"
"https://1edtech.edu/credentials/revocationList"
"refreshService"
"id"
"http://1edtech.edu/credentials/3732"
"type"
"1EdTechCredentialRefresh"
"proof"
"type"
"DataIntegrityProof"
"created"
"2010-01-01T19:23:24Z"
"verificationMethod"
"https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt"
"cryptosuite"
"eddsa-rdfc-2022"
"proofPurpose"
"assertionMethod"
"proofValue"
"z3R4NfPDo67k5AXBqCLcqsFo9grbWND3zkQYSvBRFwYZ1JjZE5z4FBnpFNrckzSvDHPekBsyy5z8RL4H3J9r5VUGF"
"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"
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.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/revocationList#23"
"type"
"BitstringStatusListEntry"
"statusPurpose"
"revocation"
"statusListIndex"
23
"statusListCredential"
"https://1edtech.edu/credentials/revocationList"
"refreshService"
"id"
"http://1edtech.edu/credentials/3732"
"type"
"1EdTechCredentialRefresh"
"proof"
"type"
"DataIntegrityProof"
"created"
"2010-01-01T19:23:24Z"
"verificationMethod"
"https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt"
"cryptosuite"
"eddsa-rdfc-2022"
"proofPurpose"
"assertionMethod"
"proofValue"
"z3PbutAvPaLRfYRqSex4XcAcpBqj3Vhx5vxpCxtngeTuXoutFUx3yRf7J7yrc1vL8oksMWt7FVAa4ryd9XLpnKdQA"
"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"
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.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/revocationList#23"
"type"
"BitstringStatusListEntry"
"statusPurpose"
"revocation"
"statusListIndex"
23
"statusListCredential"
"https://1edtech.edu/credentials/revocationList"
"refreshService"
"id"
"http://1edtech.edu/credentials/3732"
"type"
"1EdTechCredentialRefresh"
"proof"
"type"
"DataIntegrityProof"
"created"
"2010-01-01T19:23:24Z"
"verificationMethod"
"https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt"
"cryptosuite"
"eddsa-rdfc-2022"
"proofPurpose"
"assertionMethod"
"proofValue"
"z3KqayPvBkJ196JzwYTgjuxZTYd7XQFSCauLg3Lo2xZKCcQTewydijTwfTouadyf2jBVYqAZg1CWXnug5JZkivUP6"
"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/revocationList#23"
"type"
"BitstringStatusListEntry"
"statusPurpose"
"revocation"
"statusListIndex"
23
"statusListCredential"
"https://1edtech.edu/credentials/revocationList"
"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",
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.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/revocationList#23",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": 23,
"statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
"type": "1EdTechCredentialRefresh"
},
"proof": [
"type": "DataIntegrityProof",
"created": "2010-01-01T19:23:24Z",
"verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z27zr9VnabHMVwHsrqu9j8mSmm6Yp2cJCrMcg4Cownc8h7kw4qwMkxFHdg8h4CVYVK1TGd1vgoPBgFkQodMtjWQ8f"
},
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.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://1edtech.edu/credentials/revocationList#23",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": 23,
"statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://state.gov/credentials/3732",
"type": "1EdTechCredentialRefresh"
},
"proof": [
"type": "DataIntegrityProof",
"created": "2010-01-01T19:23:24Z",
"verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z4TUqPBaJx7Ld3QMxMy25dRU29fAPEwemPEUEZSRDS979nUKtfon7zu6ocgRyRCniXE9heY46NKPzwbFdqmKbUhkG"
],
"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",
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.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/revocationList#23",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": 23,
"statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
"type": "1EdTechCredentialRefresh"
},
"proof": [
"type": "DataIntegrityProof",
"created": "2010-01-01T19:23:24Z",
"verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z3R4NfPDo67k5AXBqCLcqsFo9grbWND3zkQYSvBRFwYZ1JjZE5z4FBnpFNrckzSvDHPekBsyy5z8RL4H3J9r5VUGF"
],
"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",
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.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/revocationList#23",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": 23,
"statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
"type": "1EdTechCredentialRefresh"
},
"proof": [
"type": "DataIntegrityProof",
"created": "2010-01-01T19:23:24Z",
"verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z3PbutAvPaLRfYRqSex4XcAcpBqj3Vhx5vxpCxtngeTuXoutFUx3yRf7J7yrc1vL8oksMWt7FVAa4ryd9XLpnKdQA"
],
"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",
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.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/revocationList#23",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": 23,
"statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
"type": "1EdTechCredentialRefresh"
},
"proof": [
"type": "DataIntegrityProof",
"created": "2010-01-01T19:23:24Z",
"verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z3KqayPvBkJ196JzwYTgjuxZTYd7XQFSCauLg3Lo2xZKCcQTewydijTwfTouadyf2jBVYqAZg1CWXnug5JZkivUP6"
],
"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/revocationList#23",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": 23,
"statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
"type": "1EdTechCredentialRefresh"
},
"proof": [
"type": "DataIntegrityProof",
"created": "2026-04-22T07:26:15Z",
"verificationMethod": "https://1edtech.edu/issuers/565049#z6MkgZTLrktw5RQm57os7YmftcNPxSbDV3ezyEfVYMJ8xnhp",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z39qyqQsqHq2JdA6kuuEPeKspFyPqT3anCTobHJG7c4BEvSJnSroUv1BBtF9LeoBcHZpQS8uiEANTMwqByhh5AhSU"
---------------- JWT header ---------------
"alg": "RS256",
"typ": "JWT",
"jwk": {
"e": "AQAB",
"kty": "RSA",
"n": "pSivvGVzgTRlUCL9Ucq64cTxlebm6BGcX3IBLk9bOYrrtqWLOsh1KXFC3o7c0g-3XIMyHe
RKfgklmwTaGIdq7JXcbPzuQst4SeTlhlSUyRDP1N2tH5XMUk3oMl8g7t8GLyamlB1MbF1p5V2i0PnU2Y
R6HarjEhl3shzJ3srpS0LMB3ekEE59uo9hSftKK08LzcIkLam2lkD3wggOuub4Qm9vpLpwrNiU2_RTKz
LKAf07BsXVUyc32SaWgSBRgLK1GuwEBK3Qiv_KkNo-IHLX7KUAJfUuqmtYEtKrCaObUprwXC6vC3xHez
hc02e6GOzJr8HWrK98eRRB9zold_iPaw"
--------------- 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",
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.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/revocationList#23",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": 23,
"statusListCredential": "https://1edtech.edu/credentials/revocatio
nList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
"type": "1EdTechCredentialRefresh"
},
"proof": [
"type": "DataIntegrityProof",
"created": "2010-01-01T19:23:24Z",
"verificationMethod": "https://accrediter.edu/issuers/565049#z6M
kqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z27zr9VnabHMVwHsrqu9j8mSmm6Yp2cJCrMcg4Cownc8h7kw4
qwMkxFHdg8h4CVYVK1TGd1vgoPBgFkQodMtjWQ8f"
},
"@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/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://1edtech.edu/credentials/revocationList#23",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": 23,
"statusListCredential": "https://1edtech.edu/credentials/revocatio
nList"
},
"refreshService": {
"id": "http://state.gov/credentials/3732",
"type": "1EdTechCredentialRefresh"
},
"proof": [
"type": "DataIntegrityProof",
"created": "2010-01-01T19:23:24Z",
"verificationMethod": "https://accrediter.edu/issuers/565049#z6M
kqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z4TUqPBaJx7Ld3QMxMy25dRU29fAPEwemPEUEZSRDS979nUKt
fon7zu6ocgRyRCniXE9heY46NKPzwbFdqmKbUhkG"
],
"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",
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.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/revocationList#23",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": 23,
"statusListCredential": "https://1edtech.edu/credentials/revocationL
ist"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
"type": "1EdTechCredentialRefresh"
},
"proof": [
"type": "DataIntegrityProof",
"created": "2010-01-01T19:23:24Z",
"verificationMethod": "https://accrediter.edu/issuers/565049#z6Mkq
HLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z3R4NfPDo67k5AXBqCLcqsFo9grbWND3zkQYSvBRFwYZ1JjZE5z
4FBnpFNrckzSvDHPekBsyy5z8RL4H3J9r5VUGF"
],
"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",
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.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/revocationList#23",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": 23,
"statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
"type": "1EdTechCredentialRefresh"
},
"proof": [
"type": "DataIntegrityProof",
"created": "2010-01-01T19:23:24Z",
"verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdL
YHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z3PbutAvPaLRfYRqSex4XcAcpBqj3Vhx5vxpCxtngeTuXoutFUx3yRf
7J7yrc1vL8oksMWt7FVAa4ryd9XLpnKdQA"
],
"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",
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.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/revocationList#23",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": 23,
"statusListCredential": "https://1edtech.edu/credentials/revocationLis
t"
},
"refreshService": {
"id": "http://1edtech.edu/credentials/3732",
"type": "1EdTechCredentialRefresh"
},
"proof": [
"type": "DataIntegrityProof",
"created": "2010-01-01T19:23:24Z",
"verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHL
dLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z3KqayPvBkJ196JzwYTgjuxZTYd7XQFSCauLg3Lo2xZKCcQTewydi
jTwfTouadyf2jBVYqAZg1CWXnug5JZkivUP6"
],
"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/revocationList#23",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": 23,
"statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"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
OiJwU2l2dkdWemdUUmxVQ0w5VWNxNjRjVHhsZWJtNkJHY1gzSUJMazliT1lycnRxV0xPc2gxS1hGQzNv
N2MwZy0zWElNeUhlUktmZ2tsbXdUYUdJZHE3SlhjYlB6dVFzdDRTZVRsaGxTVXlSRFAxTjJ0SDVYTVVr
M29NbDhnN3Q4R0x5YW1sQjFNYkYxcDVWMmkwUG5VMllSNkhhcmpFaGwzc2h6SjNzcnBTMExNQjNla0VF
NTl1bzloU2Z0S0swOEx6Y0lrTGFtMmxrRDN3Z2dPdXViNFFtOXZwTHB3ck5pVTJfUlRLekxLQWYwN0Jz
WFZVeWMzMlNhV2dTQlJnTEsxR3V3RUJLM1Fpdl9La05vLUlITFg3S1VBSmZVdXFtdFlFdEtyQ2FPYlVw
cndYQzZ2QzN4SGV6aGMwMmU2R096SnI4SFdySzk4ZVJSQjl6b2xkX2lQYXcifX0.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
dHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIiwi
aHR0cHM6Ly9wdXJsLmltc2dsb2JhbC5vcmcvc3BlYy9vYi92M3AwL2V4dGVuc2lvbnMuanNvbiJdLCJp
ZCI6Imh0dHA6Ly8xZWR0ZWNoLmVkdS9lbmRvcnNlbWVudGNyZWRlbnRpYWwvMzczMiIsInR5cGUiOlsi
VmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJFbmRvcnNlbWVudENyZWRlbnRpYWwiXSwibmFtZSI6IlNERSBl
bmRvcnNlbWVudCIsImlzc3VlciI6eyJpZCI6Imh0dHBzOi8vYWNjcmVkaXRlci5lZHUvaXNzdWVycy81
NjUwNDkiLCJ0eXBlIjpbIlByb2ZpbGUiXSwibmFtZSI6IkV4YW1wbGUgQWNjcmVkaXRpbmcgQWdlbmN5
In0sInZhbGlkRnJvbSI6IjIwMTAtMDEtMDFUMDA6MDA6MDBaIiwidmFsaWRVbnRpbCI6IjIwMjAtMDEt
MDFUMDA6MDA6MDBaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiaWQiOiJodHRwczovLzFlZHRlY2guZWR1
L2lzc3VlcnMvNTY1MDQ5IiwidHlwZSI6WyJFbmRvcnNlbWVudFN1YmplY3QiXSwiZW5kb3JzZW1lbnRD
b21tZW50IjoiMUVkVGVjaCBVbml2ZXJzaXR5IGlzIGluIGdvb2Qgc3RhbmRpbmcifSwiY3JlZGVudGlh
bFNjaGVtYSI6W3siaWQiOiJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvc2No
ZW1hL2pzb24vb2JfdjNwMF9lbmRvcnNlbWVudGNyZWRlbnRpYWxfc2NoZW1hLmpzb24iLCJ0eXBlIjoi
MUVkVGVjaEpzb25TY2hlbWFWYWxpZGF0b3IyMDE5In0seyJpZCI6Imh0dHBzOi8vYWNjcmVkaXRlci5l
ZHUvc2NoZW1hL2VuZG9yc2VtZW50Y3JlZGVudGlhbC5qc29uIiwidHlwZSI6IjFFZFRlY2hKc29uU2No
ZW1hVmFsaWRhdG9yMjAxOSJ9XSwiY3JlZGVudGlhbFN0YXR1cyI6eyJpZCI6Imh0dHBzOi8vMWVkdGVj
aC5lZHUvY3JlZGVudGlhbHMvcmV2b2NhdGlvbkxpc3QjMjMiLCJ0eXBlIjoiQml0c3RyaW5nU3RhdHVz
TGlzdEVudHJ5Iiwic3RhdHVzUHVycG9zZSI6InJldm9jYXRpb24iLCJzdGF0dXNMaXN0SW5kZXgiOjIz
LCJzdGF0dXNMaXN0Q3JlZGVudGlhbCI6Imh0dHBzOi8vMWVkdGVjaC5lZHUvY3JlZGVudGlhbHMvcmV2
b2NhdGlvbkxpc3QifSwicmVmcmVzaFNlcnZpY2UiOnsiaWQiOiJodHRwOi8vMWVkdGVjaC5lZHUvY3Jl
ZGVudGlhbHMvMzczMiIsInR5cGUiOiIxRWRUZWNoQ3JlZGVudGlhbFJlZnJlc2gifSwicHJvb2YiOlt7
InR5cGUiOiJEYXRhSW50ZWdyaXR5UHJvb2YiLCJjcmVhdGVkIjoiMjAxMC0wMS0wMVQxOToyMzoyNFoi
LCJ2ZXJpZmljYXRpb25NZXRob2QiOiJodHRwczovL2FjY3JlZGl0ZXIuZWR1L2lzc3VlcnMvNTY1MDQ5
I3o2TWtxSExkTFlId0tyMTY5eHp1OXF2SDFjcTk0cFVqZVFwZnJQVTVYdjNNdE56dCIsImNyeXB0b3N1
aXRlIjoiZWRkc2EtcmRmYy0yMDIyIiwicHJvb2ZQdXJwb3NlIjoiYXNzZXJ0aW9uTWV0aG9kIiwicHJv
b2ZWYWx1ZSI6InoyN3pyOVZuYWJITVZ3SHNycXU5ajhtU21tNllwMmNKQ3JNY2c0Q293bmM4aDdrdzRx
d01reEZIZGc4aDRDVllWSzFUR2QxdmdvUEJnRmtRb2RNdGpXUThmIn1dfSx7IkBjb250ZXh0IjpbImh0
dHBzOi8vd3d3LnczLm9yZy9ucy9jcmVkZW50aWFscy92MiIsImh0dHBzOi8vcHVybC5pbXNnbG9iYWwu
b3JnL3NwZWMvb2IvdjNwMC9jb250ZXh0LTMuMC4zLmpzb24iLCJodHRwczovL3B1cmwuaW1zZ2xvYmFs
Lm9yZy9zcGVjL29iL3YzcDAvZXh0ZW5zaW9ucy5qc29uIl0sImlkIjoiaHR0cDovLzFlZHRlY2guZWR1
L2VuZG9yc2VtZW50Y3JlZGVudGlhbC8zNzMzIiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIs
IkVuZG9yc2VtZW50Q3JlZGVudGlhbCJdLCJuYW1lIjoiU0RFIGVuZG9yc2VtZW50IiwiaXNzdWVyIjp7
ImlkIjoiaHR0cHM6Ly9zdGF0ZS5nb3YvaXNzdWVycy81NjUwNDkiLCJ0eXBlIjpbIlByb2ZpbGUiXSwi
bmFtZSI6IlN0YXRlIERlcGFydG1lbnQgb2YgRWR1Y2F0aW9uIn0sInZhbGlkRnJvbSI6IjIwMTAtMDEt
MDFUMDA6MDA6MDBaIiwidmFsaWRVbnRpbCI6IjIwMjAtMDEtMDFUMDA6MDA6MDBaIiwiY3JlZGVudGlh
bFN1YmplY3QiOnsiaWQiOiJodHRwczovLzFlZHRlY2guZWR1L2lzc3VlcnMvNTY1MDQ5IiwidHlwZSI6
WyJFbmRvcnNlbWVudFN1YmplY3QiXSwiZW5kb3JzZW1lbnRDb21tZW50IjoiMUVkVGVjaCBVbml2ZXJz
aXR5IGlzIGluIGdvb2Qgc3RhbmRpbmcifSwiY3JlZGVudGlhbFNjaGVtYSI6W3siaWQiOiJodHRwczov
L3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvc2NoZW1hL2pzb24vb2JfdjNwMF9lbmRvcnNl
bWVudGNyZWRlbnRpYWxfc2NoZW1hLmpzb24iLCJ0eXBlIjoiMUVkVGVjaEpzb25TY2hlbWFWYWxpZGF0
b3IyMDE5In0seyJpZCI6Imh0dHBzOi8vc3RhdGUuZ292L3NjaGVtYS9lbmRvcnNlbWVudGNyZWRlbnRp
YWwuanNvbiIsInR5cGUiOiIxRWRUZWNoSnNvblNjaGVtYVZhbGlkYXRvcjIwMTkifV0sImNyZWRlbnRp
YWxTdGF0dXMiOnsiaWQiOiJodHRwczovLzFlZHRlY2guZWR1L2NyZWRlbnRpYWxzL3Jldm9jYXRpb25M
aXN0IzIzIiwidHlwZSI6IkJpdHN0cmluZ1N0YXR1c0xpc3RFbnRyeSIsInN0YXR1c1B1cnBvc2UiOiJy
ZXZvY2F0aW9uIiwic3RhdHVzTGlzdEluZGV4IjoyMywic3RhdHVzTGlzdENyZWRlbnRpYWwiOiJodHRw
czovLzFlZHRlY2guZWR1L2NyZWRlbnRpYWxzL3Jldm9jYXRpb25MaXN0In0sInJlZnJlc2hTZXJ2aWNl
Ijp7ImlkIjoiaHR0cDovL3N0YXRlLmdvdi9jcmVkZW50aWFscy8zNzMyIiwidHlwZSI6IjFFZFRlY2hD
cmVkZW50aWFsUmVmcmVzaCJ9LCJwcm9vZiI6W3sidHlwZSI6IkRhdGFJbnRlZ3JpdHlQcm9vZiIsImNy
ZWF0ZWQiOiIyMDEwLTAxLTAxVDE5OjIzOjI0WiIsInZlcmlmaWNhdGlvbk1ldGhvZCI6Imh0dHBzOi8v
YWNjcmVkaXRlci5lZHUvaXNzdWVycy81NjUwNDkjejZNa3FITGRMWUh3S3IxNjl4enU5cXZIMWNxOTRw
VWplUXBmclBVNVh2M010Tnp0IiwiY3J5cHRvc3VpdGUiOiJlZGRzYS1yZGZjLTIwMjIiLCJwcm9vZlB1
cnBvc2UiOiJhc3NlcnRpb25NZXRob2QiLCJwcm9vZlZhbHVlIjoiejRUVXFQQmFKeDdMZDNRTXhNeTI1
ZFJVMjlmQVBFd2VtUEVVRVpTUkRTOTc5blVLdGZvbjd6dTZvY2dSeVJDbmlYRTloZVk0Nk5LUHp3YkZk
cW1LYlVoa0cifV19XSwiaW1hZ2UiOnsiaWQiOiJodHRwczovLzFlZHRlY2guZWR1L2xvZ28ucG5nIiwi
dHlwZSI6IkltYWdlIiwiY2FwdGlvbiI6IjFFZFRlY2ggVW5pdmVyc2l0eSBsb2dvIn0sImVtYWlsIjoi
cmVnaXN0cmFyQDFlZHRlY2guZWR1IiwiYWRkcmVzcyI6eyJ0eXBlIjpbIkFkZHJlc3MiXSwiYWRkcmVz
c0NvdW50cnkiOiJVU0EiLCJhZGRyZXNzQ291bnRyeUNvZGUiOiJVUyIsImFkZHJlc3NSZWdpb24iOiJU
WCIsImFkZHJlc3NMb2NhbGl0eSI6IkF1c3RpbiIsInN0cmVldEFkZHJlc3MiOiIxMjMgRmlyc3QgU3Qi
LCJwb3N0T2ZmaWNlQm94TnVtYmVyIjoiMSIsInBvc3RhbENvZGUiOiIxMjM0NSIsImdlbyI6eyJ0eXBl
IjoiR2VvQ29vcmRpbmF0ZXMiLCJsYXRpdHVkZSI6MSwibG9uZ2l0dWRlIjoxfX0sIm90aGVySWRlbnRp
ZmllciI6W3sidHlwZSI6IklkZW50aWZpZXJFbnRyeSIsImlkZW50aWZpZXIiOiIxMjM0NSIsImlkZW50
aWZpZXJUeXBlIjoic291cmNlZElkIn0seyJ0eXBlIjoiSWRlbnRpZmllckVudHJ5IiwiaWRlbnRpZmll
ciI6IjY3ODkwIiwiaWRlbnRpZmllclR5cGUiOiJuYXRpb25hbElkZW50aXR5TnVtYmVyIn1dLCJvZmZp
Y2lhbCI6IkhvcmFjZSBNYW5uIiwicGFyZW50T3JnIjp7ImlkIjoiZGlkOmV4YW1wbGU6MTIzNDU2Nzg5
IiwidHlwZSI6WyJQcm9maWxlIl0sIm5hbWUiOiJVbml2ZXJzYWwgVW5pdmVyc2l0aWVzIn19LCJjcmVk
aXRzQXZhaWxhYmxlIjozNiwiY3JpdGVyaWEiOnsiaWQiOiJodHRwczovLzFlZHRlY2guZWR1L2FjaGll
dmVtZW50cy9kZWdyZWUiLCJuYXJyYXRpdmUiOiIjIERlZ3JlZSBSZXF1aXJlbWVudHNcblN0dWRlbnRz
IG11c3QgY29tcGxldGUuLi4ifSwiZGVzY3JpcHRpb24iOiIxRWRUZWNoIFVuaXZlcnNpdHkgRGVncmVl
IERlc2NyaXB0aW9uIiwiZW5kb3JzZW1lbnQiOlt7IkBjb250ZXh0IjpbImh0dHBzOi8vd3d3LnczLm9y
Zy9ucy9jcmVkZW50aWFscy92MiIsImh0dHBzOi8vcHVybC5pbXNnbG9iYWwub3JnL3NwZWMvb2IvdjNw
MC9jb250ZXh0LTMuMC4zLmpzb24iLCJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL29iL3Yz
cDAvZXh0ZW5zaW9ucy5qc29uIl0sImlkIjoiaHR0cDovLzFlZHRlY2guZWR1L2VuZG9yc2VtZW50Y3Jl
ZGVudGlhbC8zNzM0IiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkVuZG9yc2VtZW50Q3Jl
ZGVudGlhbCJdLCJuYW1lIjoiRUFBIGVuZG9yc2VtZW50IiwiaXNzdWVyIjp7ImlkIjoiaHR0cHM6Ly9h
Y2NyZWRpdGVyLmVkdS9pc3N1ZXJzLzU2NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdLCJuYW1lIjoiRXhh
bXBsZSBBY2NyZWRpdGluZyBBZ2VuY3kifSwidmFsaWRGcm9tIjoiMjAxMC0wMS0wMVQwMDowMDowMFoi
LCJ2YWxpZFVudGlsIjoiMjAyMC0wMS0wMVQwMDowMDowMFoiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJp
ZCI6Imh0dHBzOi8vMWVkdGVjaC5lZHUvaXNzdWVycy81NjUwNDkiLCJ0eXBlIjpbIkVuZG9yc2VtZW50
U3ViamVjdCJdLCJlbmRvcnNlbWVudENvbW1lbnQiOiIxRWRUZWNoIFVuaXZlcnNpdHkgaXMgaW4gZ29v
ZCBzdGFuZGluZyJ9LCJjcmVkZW50aWFsU2NoZW1hIjpbeyJpZCI6Imh0dHBzOi8vcHVybC5pbXNnbG9i
YWwub3JnL3NwZWMvb2IvdjNwMC9zY2hlbWEvanNvbi9vYl92M3AwX2VuZG9yc2VtZW50Y3JlZGVudGlh
bF9zY2hlbWEuanNvbiIsInR5cGUiOiIxRWRUZWNoSnNvblNjaGVtYVZhbGlkYXRvcjIwMTkifSx7Imlk
IjoiaHR0cHM6Ly9hY2NyZWRpdGVyLmVkdS9zY2hlbWEvZW5kb3JzZW1lbnRjcmVkZW50aWFsLmpzb24i
LCJ0eXBlIjoiMUVkVGVjaEpzb25TY2hlbWFWYWxpZGF0b3IyMDE5In1dLCJjcmVkZW50aWFsU3RhdHVz
Ijp7ImlkIjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdS9jcmVkZW50aWFscy9yZXZvY2F0aW9uTGlzdCMyMyIs
InR5cGUiOiJCaXRzdHJpbmdTdGF0dXNMaXN0RW50cnkiLCJzdGF0dXNQdXJwb3NlIjoicmV2b2NhdGlv
biIsInN0YXR1c0xpc3RJbmRleCI6MjMsInN0YXR1c0xpc3RDcmVkZW50aWFsIjoiaHR0cHM6Ly8xZWR0
ZWNoLmVkdS9jcmVkZW50aWFscy9yZXZvY2F0aW9uTGlzdCJ9LCJyZWZyZXNoU2VydmljZSI6eyJpZCI6
Imh0dHA6Ly8xZWR0ZWNoLmVkdS9jcmVkZW50aWFscy8zNzMyIiwidHlwZSI6IjFFZFRlY2hDcmVkZW50
aWFsUmVmcmVzaCJ9LCJwcm9vZiI6W3sidHlwZSI6IkRhdGFJbnRlZ3JpdHlQcm9vZiIsImNyZWF0ZWQi
OiIyMDEwLTAxLTAxVDE5OjIzOjI0WiIsInZlcmlmaWNhdGlvbk1ldGhvZCI6Imh0dHBzOi8vYWNjcmVk
aXRlci5lZHUvaXNzdWVycy81NjUwNDkjejZNa3FITGRMWUh3S3IxNjl4enU5cXZIMWNxOTRwVWplUXBm
clBVNVh2M010Tnp0IiwiY3J5cHRvc3VpdGUiOiJlZGRzYS1yZGZjLTIwMjIiLCJwcm9vZlB1cnBvc2Ui
OiJhc3NlcnRpb25NZXRob2QiLCJwcm9vZlZhbHVlIjoiejNSNE5mUERvNjdrNUFYQnFDTGNxc0ZvOWdy
YldORDN6a1FZU3ZCUkZ3WVoxSmpaRTV6NEZCbnBGTnJja3pTdkRIUGVrQnN5eTV6OFJMNEgzSjlyNVZV
R0YifV19XSwiZmllbGRPZlN0dWR5IjoiUmVzZWFyY2giLCJodW1hbkNvZGUiOiJSMSIsImltYWdlIjp7
ImlkIjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdS9hY2hpZXZlbWVudHMvZGVncmVlL2ltYWdlIiwidHlwZSI6
IkltYWdlIiwiY2FwdGlvbiI6IjFFZFRlY2ggVW5pdmVyc2l0eSBEZWdyZWUifSwibmFtZSI6IjFFZFRl
Y2ggVW5pdmVyc2l0eSBEZWdyZWUiLCJvdGhlcklkZW50aWZpZXIiOlt7InR5cGUiOiJJZGVudGlmaWVy
RW50cnkiLCJpZGVudGlmaWVyIjoiYWJkZSIsImlkZW50aWZpZXJUeXBlIjoiaWRlbnRpZmllciJ9XSwi
cmVzdWx0RGVzY3JpcHRpb24iOlt7ImlkIjoidXJuOnV1aWQ6ZjZhYjI0Y2QtODZlOC00ZWFmLWI4YzYt
ZGVkNzRlOGZkNDFjIiwidHlwZSI6WyJSZXN1bHREZXNjcmlwdGlvbiJdLCJhbGlnbm1lbnQiOlt7InR5
cGUiOlsiQWxpZ25tZW50Il0sInRhcmdldENvZGUiOiJwcm9qZWN0IiwidGFyZ2V0RGVzY3JpcHRpb24i
OiJQcm9qZWN0IGRlc2NyaXB0aW9uIiwidGFyZ2V0TmFtZSI6IkZpbmFsIFByb2plY3QiLCJ0YXJnZXRG
cmFtZXdvcmsiOiIxRWRUZWNoIFVuaXZlcnNpdHkgUHJvZ3JhbSBhbmQgQ291cnNlIENhdGFsb2ciLCJ0
YXJnZXRUeXBlIjoiQ0ZJdGVtIiwidGFyZ2V0VXJsIjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdS9jYXRhbG9n
L2RlZ3JlZS9wcm9qZWN0In1dLCJhbGxvd2VkVmFsdWUiOlsiRCIsIkMiLCJCIiwiQSJdLCJuYW1lIjoi
RmluYWwgUHJvamVjdCBHcmFkZSIsInJlcXVpcmVkVmFsdWUiOiJDIiwicmVzdWx0VHlwZSI6IkxldHRl
ckdyYWRlIn0seyJpZCI6InVybjp1dWlkOmE3MGRkYzZhLTRjNGEtNGJkOC04Mjc3LWNiOTdjNzlmNDBj
NSIsInR5cGUiOlsiUmVzdWx0RGVzY3JpcHRpb24iXSwiYWxpZ25tZW50IjpbeyJ0eXBlIjpbIkFsaWdu
bWVudCJdLCJ0YXJnZXRDb2RlIjoicHJvamVjdCIsInRhcmdldERlc2NyaXB0aW9uIjoiUHJvamVjdCBk
ZXNjcmlwdGlvbiIsInRhcmdldE5hbWUiOiJGaW5hbCBQcm9qZWN0IiwidGFyZ2V0RnJhbWV3b3JrIjoi
MUVkVGVjaCBVbml2ZXJzaXR5IFByb2dyYW0gYW5kIENvdXJzZSBDYXRhbG9nIiwidGFyZ2V0VHlwZSI6
IkNGSXRlbSIsInRhcmdldFVybCI6Imh0dHBzOi8vMWVkdGVjaC5lZHUvY2F0YWxvZy9kZWdyZWUvcHJv
amVjdCJ9XSwiYWxsb3dlZFZhbHVlIjpbIkQiLCJDIiwiQiIsIkEiXSwibmFtZSI6IkZpbmFsIFByb2pl
Y3QgR3JhZGUiLCJyZXF1aXJlZExldmVsIjoidXJuOnV1aWQ6ZDA1YTA4NjctZDBhZC00YjAzLWJkYjUt
MjhmYjVkMmFhYjdhIiwicmVzdWx0VHlwZSI6IlJ1YnJpY0NyaXRlcmlvbkxldmVsIiwicnVicmljQ3Jp
dGVyaW9uTGV2ZWwiOlt7ImlkIjoidXJuOnV1aWQ6ZDA1YTA4NjctZDBhZC00YjAzLWJkYjUtMjhmYjVk
MmFhYjdhIiwidHlwZSI6WyJSdWJyaWNDcml0ZXJpb25MZXZlbCJdLCJhbGlnbm1lbnQiOlt7InR5cGUi
OlsiQWxpZ25tZW50Il0sInRhcmdldENvZGUiOiJwcm9qZWN0IiwidGFyZ2V0RGVzY3JpcHRpb24iOiJQ
cm9qZWN0IGRlc2NyaXB0aW9uIiwidGFyZ2V0TmFtZSI6IkZpbmFsIFByb2plY3QiLCJ0YXJnZXRGcmFt
ZXdvcmsiOiIxRWRUZWNoIFVuaXZlcnNpdHkgUHJvZ3JhbSBhbmQgQ291cnNlIENhdGFsb2ciLCJ0YXJn
ZXRUeXBlIjoiQ0ZSdWJyaWNDcml0ZXJpb25MZXZlbCIsInRhcmdldFVybCI6Imh0dHBzOi8vMWVkdGVj
aC5lZHUvY2F0YWxvZy9kZWdyZWUvcHJvamVjdC9ydWJyaWMvbGV2ZWxzL21hc3RlcmVkIn1dLCJkZXNj
cmlwdGlvbiI6IlRoZSBhdXRob3IgZGVtb25zdHJhdGVkLi4uIiwibGV2ZWwiOiJNYXN0ZXJlZCIsIm5h
bWUiOiJNYXN0ZXJ5IiwicG9pbnRzIjoiNCJ9LHsiaWQiOiJ1cm46dXVpZDo2Yjg0YjQyOS0zMWVlLTRk
YWMtOWQyMC1lNWM1NTg4MWY4MGUiLCJ0eXBlIjpbIlJ1YnJpY0NyaXRlcmlvbkxldmVsIl0sImFsaWdu
bWVudCI6W3sidHlwZSI6WyJBbGlnbm1lbnQiXSwidGFyZ2V0Q29kZSI6InByb2plY3QiLCJ0YXJnZXRE
ZXNjcmlwdGlvbiI6IlByb2plY3QgZGVzY3JpcHRpb24iLCJ0YXJnZXROYW1lIjoiRmluYWwgUHJvamVj
dCIsInRhcmdldEZyYW1ld29yayI6IjFFZFRlY2ggVW5pdmVyc2l0eSBQcm9ncmFtIGFuZCBDb3Vyc2Ug
Q2F0YWxvZyIsInRhcmdldFR5cGUiOiJDRlJ1YnJpY0NyaXRlcmlvbkxldmVsIiwidGFyZ2V0VXJsIjoi
aHR0cHM6Ly8xZWR0ZWNoLmVkdS9jYXRhbG9nL2RlZ3JlZS9wcm9qZWN0L3J1YnJpYy9sZXZlbHMvYmFz
aWMifV0sImRlc2NyaXB0aW9uIjoiVGhlIGF1dGhvciBkZW1vbnN0cmF0ZWQuLi4iLCJsZXZlbCI6IkJh
c2ljIiwibmFtZSI6IkJhc2ljIiwicG9pbnRzIjoiNCJ9XX0seyJpZCI6InVybjp1dWlkOmIwN2MwMzg3
LWYyZDYtNGI2NS1hM2Y0LWY0ZTQzMDJlYThmNyIsInR5cGUiOlsiUmVzdWx0RGVzY3JpcHRpb24iXSwi
bmFtZSI6IlByb2plY3QgU3RhdHVzIiwicmVzdWx0VHlwZSI6IlN0YXR1cyJ9XSwic3BlY2lhbGl6YXRp
b24iOiJDb21wdXRlciBTY2llbmNlIFJlc2VhcmNoIiwidGFnIjpbInJlc2VhcmNoIiwiY29tcHV0ZXIg
c2NpZW5jZSJdfSwiaW1hZ2UiOnsiaWQiOiJodHRwczovLzFlZHRlY2guZWR1L2NyZWRlbnRpYWxzLzM3
MzIvaW1hZ2UiLCJ0eXBlIjoiSW1hZ2UiLCJjYXB0aW9uIjoiMUVkVGVjaCBVbml2ZXJzaXR5IERlZ3Jl
ZSBmb3IgRXhhbXBsZSBTdHVkZW50In0sIm5hcnJhdGl2ZSI6IlRoZXJlIGlzIGEgZmluYWwgcHJvamVj
dCByZXBvcnQgYW5kIHNvdXJjZSBjb2RlIGV2aWRlbmNlLiIsInJlc3VsdCI6W3sidHlwZSI6WyJSZXN1
bHQiXSwiYWxpZ25tZW50IjpbeyJ0eXBlIjpbIkFsaWdubWVudCJdLCJ0YXJnZXRDb2RlIjoicHJvamVj
dCIsInRhcmdldERlc2NyaXB0aW9uIjoiUHJvamVjdCBkZXNjcmlwdGlvbiIsInRhcmdldE5hbWUiOiJG
aW5hbCBQcm9qZWN0IiwidGFyZ2V0RnJhbWV3b3JrIjoiMUVkVGVjaCBVbml2ZXJzaXR5IFByb2dyYW0g
YW5kIENvdXJzZSBDYXRhbG9nIiwidGFyZ2V0VHlwZSI6IkNGSXRlbSIsInRhcmdldFVybCI6Imh0dHBz
Oi8vMWVkdGVjaC5lZHUvY2F0YWxvZy9kZWdyZWUvcHJvamVjdC9yZXN1bHQvMSJ9XSwicmVzdWx0RGVz
Y3JpcHRpb24iOiJ1cm46dXVpZDpmNmFiMjRjZC04NmU4LTRlYWYtYjhjNi1kZWQ3NGU4ZmQ0MWMiLCJ2
YWx1ZSI6IkEifSx7InR5cGUiOlsiUmVzdWx0Il0sImFjaGlldmVkTGV2ZWwiOiJ1cm46dXVpZDpkMDVh
MDg2Ny1kMGFkLTRiMDMtYmRiNS0yOGZiNWQyYWFiN2EiLCJhbGlnbm1lbnQiOlt7InR5cGUiOlsiQWxp
Z25tZW50Il0sInRhcmdldENvZGUiOiJwcm9qZWN0IiwidGFyZ2V0RGVzY3JpcHRpb24iOiJQcm9qZWN0
IGRlc2NyaXB0aW9uIiwidGFyZ2V0TmFtZSI6IkZpbmFsIFByb2plY3QiLCJ0YXJnZXRGcmFtZXdvcmsi
OiIxRWRUZWNoIFVuaXZlcnNpdHkgUHJvZ3JhbSBhbmQgQ291cnNlIENhdGFsb2ciLCJ0YXJnZXRUeXBl
IjoiQ0ZJdGVtIiwidGFyZ2V0VXJsIjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdS9jYXRhbG9nL2RlZ3JlZS9w
cm9qZWN0L3Jlc3VsdC8xIn1dLCJyZXN1bHREZXNjcmlwdGlvbiI6InVybjp1dWlkOmY2YWIyNGNkLTg2
ZTgtNGVhZi1iOGM2LWRlZDc0ZThmZDQxYyJ9LHsidHlwZSI6WyJSZXN1bHQiXSwicmVzdWx0RGVzY3Jp
cHRpb24iOiJ1cm46dXVpZDpmNmFiMjRjZC04NmU4LTRlYWYtYjhjNi1kZWQ3NGU4ZmQ0MWMiLCJzdGF0
dXMiOiJDb21wbGV0ZWQifV19LCJlbmRvcnNlbWVudCI6W3siQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cu
dzMub3JnL25zL2NyZWRlbnRpYWxzL3YyIiwiaHR0cHM6Ly9wdXJsLmltc2dsb2JhbC5vcmcvc3BlYy9v
Yi92M3AwL2NvbnRleHQtMy4wLjMuanNvbiIsImh0dHBzOi8vcHVybC5pbXNnbG9iYWwub3JnL3NwZWMv
b2IvdjNwMC9leHRlbnNpb25zLmpzb24iXSwiaWQiOiJodHRwOi8vMWVkdGVjaC5lZHUvZW5kb3JzZW1l
bnRjcmVkZW50aWFsLzM3MzUiLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiRW5kb3JzZW1l
bnRDcmVkZW50aWFsIl0sIm5hbWUiOiJFQUEgZW5kb3JzZW1lbnQiLCJpc3N1ZXIiOnsiaWQiOiJodHRw
czovL2FjY3JlZGl0ZXIuZWR1L2lzc3VlcnMvNTY1MDQ5IiwidHlwZSI6WyJQcm9maWxlIl0sIm5hbWUi
OiJFeGFtcGxlIEFjY3JlZGl0aW5nIEFnZW5jeSJ9LCJ2YWxpZEZyb20iOiIyMDEwLTAxLTAxVDAwOjAw
OjAwWiIsInZhbGlkVW50aWwiOiIyMDIwLTAxLTAxVDAwOjAwOjAwWiIsImNyZWRlbnRpYWxTdWJqZWN0
Ijp7ImlkIjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdS9pc3N1ZXJzLzU2NTA0OSIsInR5cGUiOlsiRW5kb3Jz
ZW1lbnRTdWJqZWN0Il0sImVuZG9yc2VtZW50Q29tbWVudCI6IjFFZFRlY2ggVW5pdmVyc2l0eSBpcyBp
biBnb29kIHN0YW5kaW5nIn0sImNyZWRlbnRpYWxTY2hlbWEiOlt7ImlkIjoiaHR0cHM6Ly9wdXJsLmlt
c2dsb2JhbC5vcmcvc3BlYy9vYi92M3AwL3NjaGVtYS9qc29uL29iX3YzcDBfZW5kb3JzZW1lbnRjcmVk
ZW50aWFsX3NjaGVtYS5qc29uIiwidHlwZSI6IjFFZFRlY2hKc29uU2NoZW1hVmFsaWRhdG9yMjAxOSJ9
LHsiaWQiOiJodHRwczovL2FjY3JlZGl0ZXIuZWR1L3NjaGVtYS9lbmRvcnNlbWVudGNyZWRlbnRpYWwu
anNvbiIsInR5cGUiOiIxRWRUZWNoSnNvblNjaGVtYVZhbGlkYXRvcjIwMTkifV0sImNyZWRlbnRpYWxT
dGF0dXMiOnsiaWQiOiJodHRwczovLzFlZHRlY2guZWR1L2NyZWRlbnRpYWxzL3Jldm9jYXRpb25MaXN0
IzIzIiwidHlwZSI6IkJpdHN0cmluZ1N0YXR1c0xpc3RFbnRyeSIsInN0YXR1c1B1cnBvc2UiOiJyZXZv
Y2F0aW9uIiwic3RhdHVzTGlzdEluZGV4IjoyMywic3RhdHVzTGlzdENyZWRlbnRpYWwiOiJodHRwczov
LzFlZHRlY2guZWR1L2NyZWRlbnRpYWxzL3Jldm9jYXRpb25MaXN0In0sInJlZnJlc2hTZXJ2aWNlIjp7
ImlkIjoiaHR0cDovLzFlZHRlY2guZWR1L2NyZWRlbnRpYWxzLzM3MzIiLCJ0eXBlIjoiMUVkVGVjaENy
ZWRlbnRpYWxSZWZyZXNoIn0sInByb29mIjpbeyJ0eXBlIjoiRGF0YUludGVncml0eVByb29mIiwiY3Jl
YXRlZCI6IjIwMTAtMDEtMDFUMTk6MjM6MjRaIiwidmVyaWZpY2F0aW9uTWV0aG9kIjoiaHR0cHM6Ly9h
Y2NyZWRpdGVyLmVkdS9pc3N1ZXJzLzU2NTA0OSN6Nk1rcUhMZExZSHdLcjE2OXh6dTlxdkgxY3E5NHBV
amVRcGZyUFU1WHYzTXROenQiLCJjcnlwdG9zdWl0ZSI6ImVkZHNhLXJkZmMtMjAyMiIsInByb29mUHVy
cG9zZSI6ImFzc2VydGlvbk1ldGhvZCIsInByb29mVmFsdWUiOiJ6M1BidXRBdlBhTFJmWVJxU2V4NFhj
QWNwQnFqM1ZoeDV2eHBDeHRuZ2VUdVhvdXRGVXgzeVJmN0o3eXJjMXZMOG9rc01XdDdGVkFhNHJ5ZDlY
THBuS2RRQSJ9XX1dLCJldmlkZW5jZSI6W3siaWQiOiJodHRwczovLzFlZHRlY2guZWR1L2NyZWRlbnRp
YWxzLzM3MzIvZXZpZGVuY2UvMSIsInR5cGUiOlsiRXZpZGVuY2UiXSwibmFycmF0aXZlIjoiIyBGaW5h
bCBQcm9qZWN0IFJlcG9ydCBcbiBUaGlzIHByb2plY3Qgd2FzIC4uLiIsIm5hbWUiOiJGaW5hbCBQcm9q
ZWN0IFJlcG9ydCIsImRlc2NyaXB0aW9uIjoiVGhpcyBpcyB0aGUgZmluYWwgcHJvamVjdCByZXBvcnQu
IiwiZ2VucmUiOiJSZXNlYXJjaCIsImF1ZGllbmNlIjoiRGVwYXJ0bWVudCJ9LHsiaWQiOiJodHRwczov
L2dpdGh1Yi5jb20vc29tZWJvZHkvcHJvamVjdCIsInR5cGUiOlsiRXZpZGVuY2UiXSwibmFtZSI6IkZp
bmFsIFByb2plY3QgQ29kZSIsImRlc2NyaXB0aW9uIjoiVGhpcyBpcyB0aGUgc291cmNlIGNvZGUgZm9y
IHRoZSBmaW5hbCBwcm9qZWN0IGFwcC4iLCJnZW5yZSI6IlJlc2VhcmNoIiwiYXVkaWVuY2UiOiJEZXBh
cnRtZW50In1dLCJpc3N1ZXIiOnsiaWQiOiJodHRwczovLzFlZHRlY2guZWR1L2lzc3VlcnMvNTY1MDQ5
IiwidHlwZSI6WyJQcm9maWxlIl0sIm5hbWUiOiIxRWRUZWNoIFVuaXZlcnNpdHkiLCJ1cmwiOiJodHRw
czovLzFlZHRlY2guZWR1IiwicGhvbmUiOiIxLTIyMi0zMzMtNDQ0NCIsImRlc2NyaXB0aW9uIjoiMUVk
VGVjaCBVbml2ZXJzaXR5IHByb3ZpZGVzIG9ubGluZSBkZWdyZWUgcHJvZ3JhbXMuIiwiZW5kb3JzZW1l
bnQiOlt7IkBjb250ZXh0IjpbImh0dHBzOi8vd3d3LnczLm9yZy9ucy9jcmVkZW50aWFscy92MiIsImh0
dHBzOi8vcHVybC5pbXNnbG9iYWwub3JnL3NwZWMvb2IvdjNwMC9jb250ZXh0LTMuMC4zLmpzb24iLCJo
dHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvZXh0ZW5zaW9ucy5qc29uIl0sImlk
IjoiaHR0cDovLzFlZHRlY2guZWR1L2VuZG9yc2VtZW50Y3JlZGVudGlhbC8zNzM2IiwidHlwZSI6WyJW
ZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkVuZG9yc2VtZW50Q3JlZGVudGlhbCJdLCJuYW1lIjoiRUFBIGVu
ZG9yc2VtZW50IiwiaXNzdWVyIjp7ImlkIjoiaHR0cHM6Ly9hY2NyZWRpdGVyLmVkdS9pc3N1ZXJzLzU2
NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdLCJuYW1lIjoiRXhhbXBsZSBBY2NyZWRpdGluZyBBZ2VuY3ki
fSwidmFsaWRGcm9tIjoiMjAxMC0wMS0wMVQwMDowMDowMFoiLCJ2YWxpZFVudGlsIjoiMjAyMC0wMS0w
MVQwMDowMDowMFoiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6Imh0dHBzOi8vMWVkdGVjaC5lZHUv
aXNzdWVycy81NjUwNDkiLCJ0eXBlIjpbIkVuZG9yc2VtZW50U3ViamVjdCJdLCJlbmRvcnNlbWVudENv
bW1lbnQiOiIxRWRUZWNoIFVuaXZlcnNpdHkgaXMgaW4gZ29vZCBzdGFuZGluZyJ9LCJjcmVkZW50aWFs
U2NoZW1hIjpbeyJpZCI6Imh0dHBzOi8vcHVybC5pbXNnbG9iYWwub3JnL3NwZWMvb2IvdjNwMC9zY2hl
bWEvanNvbi9vYl92M3AwX2VuZG9yc2VtZW50Y3JlZGVudGlhbF9zY2hlbWEuanNvbiIsInR5cGUiOiIx
RWRUZWNoSnNvblNjaGVtYVZhbGlkYXRvcjIwMTkifSx7ImlkIjoiaHR0cHM6Ly9hY2NyZWRpdGVyLmVk
dS9zY2hlbWEvZW5kb3JzZW1lbnRjcmVkZW50aWFsLmpzb24iLCJ0eXBlIjoiMUVkVGVjaEpzb25TY2hl
bWFWYWxpZGF0b3IyMDE5In1dLCJjcmVkZW50aWFsU3RhdHVzIjp7ImlkIjoiaHR0cHM6Ly8xZWR0ZWNo
LmVkdS9jcmVkZW50aWFscy9yZXZvY2F0aW9uTGlzdCMyMyIsInR5cGUiOiJCaXRzdHJpbmdTdGF0dXNM
aXN0RW50cnkiLCJzdGF0dXNQdXJwb3NlIjoicmV2b2NhdGlvbiIsInN0YXR1c0xpc3RJbmRleCI6MjMs
InN0YXR1c0xpc3RDcmVkZW50aWFsIjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdS9jcmVkZW50aWFscy9yZXZv
Y2F0aW9uTGlzdCJ9LCJyZWZyZXNoU2VydmljZSI6eyJpZCI6Imh0dHA6Ly8xZWR0ZWNoLmVkdS9jcmVk
ZW50aWFscy8zNzMyIiwidHlwZSI6IjFFZFRlY2hDcmVkZW50aWFsUmVmcmVzaCJ9LCJwcm9vZiI6W3si
dHlwZSI6IkRhdGFJbnRlZ3JpdHlQcm9vZiIsImNyZWF0ZWQiOiIyMDEwLTAxLTAxVDE5OjIzOjI0WiIs
InZlcmlmaWNhdGlvbk1ldGhvZCI6Imh0dHBzOi8vYWNjcmVkaXRlci5lZHUvaXNzdWVycy81NjUwNDkj
ejZNa3FITGRMWUh3S3IxNjl4enU5cXZIMWNxOTRwVWplUXBmclBVNVh2M010Tnp0IiwiY3J5cHRvc3Vp
dGUiOiJlZGRzYS1yZGZjLTIwMjIiLCJwcm9vZlB1cnBvc2UiOiJhc3NlcnRpb25NZXRob2QiLCJwcm9v
ZlZhbHVlIjoiejNLcWF5UHZCa0oxOTZKendZVGdqdXhaVFlkN1hRRlNDYXVMZzNMbzJ4WktDY1FUZXd5
ZGlqVHdmVG91YWR5ZjJqQlZZcUFaZzFDV1hudWc1SlpraXZVUDYifV19XSwiaW1hZ2UiOnsiaWQiOiJo
dHRwczovLzFlZHRlY2guZWR1L2xvZ28ucG5nIiwidHlwZSI6IkltYWdlIiwiY2FwdGlvbiI6IjFFZFRl
Y2ggVW5pdmVyc2l0eSBsb2dvIn0sImVtYWlsIjoicmVnaXN0cmFyQDFlZHRlY2guZWR1IiwiYWRkcmVz
cyI6eyJ0eXBlIjpbIkFkZHJlc3MiXSwiYWRkcmVzc0NvdW50cnkiOiJVU0EiLCJhZGRyZXNzQ291bnRy
eUNvZGUiOiJVUyIsImFkZHJlc3NSZWdpb24iOiJUWCIsImFkZHJlc3NMb2NhbGl0eSI6IkF1c3RpbiIs
InN0cmVldEFkZHJlc3MiOiIxMjMgRmlyc3QgU3QiLCJwb3N0T2ZmaWNlQm94TnVtYmVyIjoiMSIsInBv
c3RhbENvZGUiOiIxMjM0NSIsImdlbyI6eyJ0eXBlIjoiR2VvQ29vcmRpbmF0ZXMiLCJsYXRpdHVkZSI6
MSwibG9uZ2l0dWRlIjoxfX0sIm90aGVySWRlbnRpZmllciI6W3sidHlwZSI6IklkZW50aWZpZXJFbnRy
eSIsImlkZW50aWZpZXIiOiIxMjM0NSIsImlkZW50aWZpZXJUeXBlIjoic291cmNlZElkIn0seyJ0eXBl
IjoiSWRlbnRpZmllckVudHJ5IiwiaWRlbnRpZmllciI6IjY3ODkwIiwiaWRlbnRpZmllclR5cGUiOiJu
YXRpb25hbElkZW50aXR5TnVtYmVyIn1dLCJvZmZpY2lhbCI6IkhvcmFjZSBNYW5uIiwicGFyZW50T3Jn
Ijp7ImlkIjoiZGlkOmV4YW1wbGU6MTIzNDU2Nzg5IiwidHlwZSI6WyJQcm9maWxlIl0sIm5hbWUiOiJV
bml2ZXJzYWwgVW5pdmVyc2l0aWVzIn19LCJ2YWxpZEZyb20iOiIyMDEwLTAxLTAxVDAwOjAwOjAwWiIs
InZhbGlkVW50aWwiOiIyMDMwLTAxLTAxVDAwOjAwOjAwWiIsImNyZWRlbnRpYWxTY2hlbWEiOlt7Imlk
IjoiaHR0cHM6Ly9wdXJsLmltc2dsb2JhbC5vcmcvc3BlYy9vYi92M3AwL3NjaGVtYS9qc29uL29iX3Yz
cDBfYWNoaWV2ZW1lbnRjcmVkZW50aWFsX3NjaGVtYS5qc29uIiwidHlwZSI6IjFFZFRlY2hKc29uU2No
ZW1hVmFsaWRhdG9yMjAxOSJ9XSwiY3JlZGVudGlhbFN0YXR1cyI6eyJpZCI6Imh0dHBzOi8vMWVkdGVj
aC5lZHUvY3JlZGVudGlhbHMvcmV2b2NhdGlvbkxpc3QjMjMiLCJ0eXBlIjoiQml0c3RyaW5nU3RhdHVz
TGlzdEVudHJ5Iiwic3RhdHVzUHVycG9zZSI6InJldm9jYXRpb24iLCJzdGF0dXNMaXN0SW5kZXgiOjIz
LCJzdGF0dXNMaXN0Q3JlZGVudGlhbCI6Imh0dHBzOi8vMWVkdGVjaC5lZHUvY3JlZGVudGlhbHMvcmV2
b2NhdGlvbkxpc3QifSwicmVmcmVzaFNlcnZpY2UiOnsiaWQiOiJodHRwOi8vMWVkdGVjaC5lZHUvY3Jl
ZGVudGlhbHMvMzczMiIsInR5cGUiOiIxRWRUZWNoQ3JlZGVudGlhbFJlZnJlc2gifSwiaXNzIjoiaHR0
cHM6Ly8xZWR0ZWNoLmVkdS9pc3N1ZXJzLzU2NTA0OSIsImp0aSI6Imh0dHA6Ly8xZWR0ZWNoLmVkdS9j
cmVkZW50aWFscy8zNzMyIiwic3ViIjoiZGlkOmV4YW1wbGU6ZWJmZWIxZjcxMmViYzZmMWMyNzZlMTJl
YzIxIn0.Qc4O5EzznrAxFvvGG5N-YyqrZU2GKQbY3PLae4i26qrc7Pbg3376-hKdL_9XLS283mjd82gj
mrPDEsdoK7N_mabEGlNDMw4BG4LgkpmIaBXawOzwl3YGl_wK2FseaD7RSgi-i2JgyotX1j3UcdEOTVUV
o-xcNf3fTHl06DAu1xKvvIs3NWK_DPnB2LYC1xQBpt9cZ37yBwh80b_u1fsR4KgpHE4jx7yG20EaqTyV
EHrkYhp_GX9DSw24dCHOOKX9eohFuD2tpOqaCphyCQG8CuokNwRq1uHiln6lKpJCcj-VQHZvfBN6Z4jn
7zXwnSwlZQAt6JuCH_CCm8zD7U0iNg
D.3
EndorsementCredential
Example
37
: Sample EndorsementCredential
Credential
Verifiable Credential (with proof)
Verifiable Credential (as JWT)
"@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://1edtech.edu/credentials/revocationList#23"
"type"
"BitstringStatusListEntry"
"statusPurpose"
"revocation"
"statusListIndex"
23
"statusListCredential"
"https://1edtech.edu/credentials/revocationList"
"refreshService"
"id"
"http://state.gov/credentials/3732"
"type"
"1EdTechCredentialRefresh"
"@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://1edtech.edu/credentials/revocationList#23",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": 23,
"statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://state.gov/credentials/3732",
"type": "1EdTechCredentialRefresh"
},
"proof": [
"type": "DataIntegrityProof",
"created": "2026-04-22T07:26:16Z",
"verificationMethod": "https://state.gov/issuers/565049#z6Mkkw3nS685sECSwpMfX1TBrm9jVvUoh6CeEnKpMwiVU1pF",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z4udyRDm6mTYmeHbqFuoJUc555ouaHbF3KNtVma98VXxzisZiPPzyjZVLmSSh9BdhhGjnr8saBsaw24Riwh2sjBFi"
---------------- JWT header ---------------
"alg": "RS256",
"typ": "JWT",
"jwk": {
"e": "AQAB",
"kty": "RSA",
"n": "p1oUjIVNRaPpblr98rD16N_Zjrf8cpWtvG141IvUOolIuAIWAvxpupozg3KKn5DBrgNA_9
ENzfOJsEPGer6Q2S2XQ2l5Aa_uvOsejuT0dwChcHQBT6NEY27msU4_Kq5Q1zRB1GhziYXOgJni8QRnRE
3oUU2rB2sgsj_xy57OdEkA0X6fwq1cQq4R5cP8Hkef8IPNAcxTPiQDjfk9mfEYyd0boQn_Fdp2A-e9Vt
SnKVAIQY1qFg22l7v7HG2XS9rDN0W81qdL-OoXky5-dHX-6QqlEmBButokouZ6XKck4V6xf9mRkHz3Fb
Ml-La-iZQ4RSp5-pFSDotjKY7fWAsBGQ"
--------------- 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://1edtech.edu/credentials/revocationList#23",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": 23,
"statusListCredential": "https://1edtech.edu/credentials/revocationList"
},
"refreshService": {
"id": "http://state.gov/credentials/3732",
"type": "1EdTechCredentialRefresh"
},
"iss": "https://state.gov/issuers/565049",
"jti": "http://1edtech.edu/endorsementcredential/3732",
"sub": "https://1edtech.edu/issuers/565049"
--------------- JWT ---------------
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4i
OiJwMW9VaklWTlJhUHBibHI5OHJEMTZOX1pqcmY4Y3BXdHZHMTQxSXZVT29sSXVBSVdBdnhwdXBvemcz
S0tuNURCcmdOQV85RU56Zk9Kc0VQR2VyNlEyUzJYUTJsNUFhX3V2T3NlanVUMGR3Q2hjSFFCVDZORVky
N21zVTRfS3E1UTF6UkIxR2h6aVlYT2dKbmk4UVJuUkUzb1VVMnJCMnNnc2pfeHk1N09kRWtBMFg2Zndx
MWNRcTRSNWNQOEhrZWY4SVBOQWN4VFBpUURqZms5bWZFWXlkMGJvUW5fRmRwMkEtZTlWdFNuS1ZBSVFZ
MXFGZzIybDd2N0hHMlhTOXJETjBXODFxZEwtT29Ya3k1LWRIWC02UXFsRW1CQnV0b2tvdVo2WEtjazRW
NnhmOW1Sa0h6M0ZiTWwtTGEtaVpRNFJTcDUtcEZTRG90aktZN2ZXQXNCR1EifX0.eyJAY29udGV4dCI6
WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv
YmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIiwiaHR0cHM6Ly9wdXJsLmltc2ds
b2JhbC5vcmcvc3BlYy9vYi92M3AwL2V4dGVuc2lvbnMuanNvbiJdLCJpZCI6Imh0dHA6Ly8xZWR0ZWNo
LmVkdS9lbmRvcnNlbWVudGNyZWRlbnRpYWwvMzczMiIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRp
YWwiLCJFbmRvcnNlbWVudENyZWRlbnRpYWwiXSwibmFtZSI6IlNERSBlbmRvcnNlbWVudCIsImlzc3Vl
ciI6eyJpZCI6Imh0dHBzOi8vc3RhdGUuZ292L2lzc3VlcnMvNTY1MDQ5IiwidHlwZSI6WyJQcm9maWxl
Il0sIm5hbWUiOiJTdGF0ZSBEZXBhcnRtZW50IG9mIEVkdWNhdGlvbiJ9LCJ2YWxpZEZyb20iOiIyMDEw
LTAxLTAxVDAwOjAwOjAwWiIsInZhbGlkVW50aWwiOiIyMDMwLTAxLTAxVDAwOjAwOjAwWiIsImNyZWRl
bnRpYWxTdWJqZWN0Ijp7ImlkIjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdS9pc3N1ZXJzLzU2NTA0OSIsInR5
cGUiOlsiRW5kb3JzZW1lbnRTdWJqZWN0Il0sImVuZG9yc2VtZW50Q29tbWVudCI6IjFFZFRlY2ggVW5p
dmVyc2l0eSBpcyBpbiBnb29kIHN0YW5kaW5nIn0sImNyZWRlbnRpYWxTY2hlbWEiOlt7ImlkIjoiaHR0
cHM6Ly9wdXJsLmltc2dsb2JhbC5vcmcvc3BlYy9vYi92M3AwL3NjaGVtYS9qc29uL29iX3YzcDBfZW5k
b3JzZW1lbnRjcmVkZW50aWFsX3NjaGVtYS5qc29uIiwidHlwZSI6IjFFZFRlY2hKc29uU2NoZW1hVmFs
aWRhdG9yMjAxOSJ9LHsiaWQiOiJodHRwczovL3N0YXRlLmdvdi9zY2hlbWEvZW5kb3JzZW1lbnRjcmVk
ZW50aWFsLmpzb24iLCJ0eXBlIjoiMUVkVGVjaEpzb25TY2hlbWFWYWxpZGF0b3IyMDE5In1dLCJjcmVk
ZW50aWFsU3RhdHVzIjp7ImlkIjoiaHR0cHM6Ly8xZWR0ZWNoLmVkdS9jcmVkZW50aWFscy9yZXZvY2F0
aW9uTGlzdCMyMyIsInR5cGUiOiJCaXRzdHJpbmdTdGF0dXNMaXN0RW50cnkiLCJzdGF0dXNQdXJwb3Nl
IjoicmV2b2NhdGlvbiIsInN0YXR1c0xpc3RJbmRleCI6MjMsInN0YXR1c0xpc3RDcmVkZW50aWFsIjoi
aHR0cHM6Ly8xZWR0ZWNoLmVkdS9jcmVkZW50aWFscy9yZXZvY2F0aW9uTGlzdCJ9LCJyZWZyZXNoU2Vy
dmljZSI6eyJpZCI6Imh0dHA6Ly9zdGF0ZS5nb3YvY3JlZGVudGlhbHMvMzczMiIsInR5cGUiOiIxRWRU
ZWNoQ3JlZGVudGlhbFJlZnJlc2gifSwiaXNzIjoiaHR0cHM6Ly9zdGF0ZS5nb3YvaXNzdWVycy81NjUw
NDkiLCJqdGkiOiJodHRwOi8vMWVkdGVjaC5lZHUvZW5kb3JzZW1lbnRjcmVkZW50aWFsLzM3MzIiLCJz
dWIiOiJodHRwczovLzFlZHRlY2guZWR1L2lzc3VlcnMvNTY1MDQ5In0.j4DCGD2qIw6mG_8WYjsb6_49
LlW5_0-E8G9F2cyiwWUkdoE-jxEEXYgSdxvWm9baIc7v63-dsIBPmfhOXgTwAG2O6-Q-qBQ3a-wpXLHc
dyJGWnfjWAMqcG0jkhpbcbK0jwYXn0LBCVQ6omfHxFh3cy2u3a3VrnNXCSTfloB0rVQtsOPY71oOXgeW
6XVDFAgAfwBrSWyG6FCnIsuYjjDd-uBSOnTtEypBkSeZML-_zezFKZECXCvkwwK40oXmsInq6JCmoSQM
3YRkj8IFQ0_lzSVme10MiLaCX1PF9M6Ub0esGVdry8n1y9Jqkhu_-BN7N6gsdJ1-dAPFNmHaZuQkaw
D.4
Achievement Alignment (CASE)
Example
38
: Achievement alignment (CASE)
Credential
Verifiable Credential (with proof)
Verifiable Credential (as JWT)
"@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": "2026-04-22T07:26:16Z",
"verificationMethod": "https://example.edu/issuers/565049#z6MkhAVi8Yz4Fgd6piuHZuaKarYDcGGWdoy19JbLSxax6zUB",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z2yQ3wWtpGLLamSBuroAkzY6pEufSU751gJYT5fUziCF8bG2pSBWRdrvqzgvY1MprYem5MSUhJzQJcdEvvod1h4uJ"
---------------- JWT header ---------------
"alg": "RS256",
"typ": "JWT",
"jwk": {
"e": "AQAB",
"kty": "RSA",
"n": "qJSN6vwVq77UbrOLOesWb_wFY9bsbcPcJWe56fkpGVdZn01s4F6lmf6wET2cBOz3BKt4ZC
DG5_XfG34PyqwNqT_-WdQp_GRhOacKkv4lBVjbHPuM7Qf6Na0IDV_LqKJ-jNe2F4v3LoV0Hp8uHv5gaF
86SO8YLbEdNsu6X2zcoRtWRC_Pc6wxTUy1xNoC86jmoU2c0F0JaYtyUNjUr-aTPEubkCOeMCn6WRsWHz
x0WigUk1Er5Fm-3ZbYTnOHyoT34xLW9drMV6xQCRvRqPWRkrfRjQRxStBolfm6xaqV6LM9v-M4fCnXoe
SHgDqj3H43kNn61yPY1qzeWuyyfOTnoQ"
--------------- 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
OiJxSlNONnZ3VnE3N1Vick9MT2VzV2Jfd0ZZOWJzYmNQY0pXZTU2ZmtwR1ZkWm4wMXM0RjZsbWY2d0VU
MmNCT3ozQkt0NFpDREc1X1hmRzM0UHlxd05xVF8tV2RRcF9HUmhPYWNLa3Y0bEJWamJIUHVNN1FmNk5h
MElEVl9McUtKLWpOZTJGNHYzTG9WMEhwOHVIdjVnYUY4NlNPOFlMYkVkTnN1NlgyemNvUnRXUkNfUGM2
d3hUVXkxeE5vQzg2am1vVTJjMEYwSmFZdHlVTmpVci1hVFBFdWJrQ09lTUNuNldSc1dIengwV2lnVWsx
RXI1Rm0tM1piWVRuT0h5b1QzNHhMVzlkck1WNnhRQ1J2UnFQV1JrcmZSalFSeFN0Qm9sZm02eGFxVjZM
TTl2LU00ZkNuWG9lU0hnRHFqM0g0M2tObjYxeVBZMXF6ZVd1eXlmT1Rub1EifX0.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.YovMzIZmPOUTpXI_zSBmUfTLD2kXfJ44EgoM6aReHpI-NlumMekxRHaTjNN
KdUQQjq7YQ5IlR2iGdQ7kB9b7nCanPYl8SODnKEAY-6mbWylf49TVmuqQCaPwpF_3Q_lAeRywkj8dHu9
MHaCIdJXtGrsp0FJuXEZ7j1Yr_bjYeyCt7iRhpM53obze4oG9MnY7KlLfkfQMvydcjoPgxVfjB52S_JS
p3Du6MI2eXON1Dc9gtFgVi5utNhyHHSnDRy6wxlaj9sQ57ArYU0D-zF_dcSSLlVvFDHYqDNiWcnkps69
71fWYWV9VDP_h8MIO2kivxVHX8vIQGmSSKYNGIMPbuw
D.5
Achievement Alignment (Credential Engine)
Example
39
: Achievement alignment (Credential Engine)
Credential
Verifiable Credential (with proof)
Verifiable Credential (as JWT)
"@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": "2026-04-22T07:26:16Z",
"verificationMethod": "https://example.edu/issuers/565049#z6MkhAVi8Yz4Fgd6piuHZuaKarYDcGGWdoy19JbLSxax6zUB",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z3Raobt3i6zWf1snTxyDwQw43o8r5MLCAKLjD8SAHZHy1BN8Q4KjTswHgGBcyyAXVwLhbVddCViKKR61MnQKK6Q2d"
---------------- JWT header ---------------
"alg": "RS256",
"typ": "JWT",
"jwk": {
"e": "AQAB",
"kty": "RSA",
"n": "qJSN6vwVq77UbrOLOesWb_wFY9bsbcPcJWe56fkpGVdZn01s4F6lmf6wET2cBOz3BKt4ZC
DG5_XfG34PyqwNqT_-WdQp_GRhOacKkv4lBVjbHPuM7Qf6Na0IDV_LqKJ-jNe2F4v3LoV0Hp8uHv5gaF
86SO8YLbEdNsu6X2zcoRtWRC_Pc6wxTUy1xNoC86jmoU2c0F0JaYtyUNjUr-aTPEubkCOeMCn6WRsWHz
x0WigUk1Er5Fm-3ZbYTnOHyoT34xLW9drMV6xQCRvRqPWRkrfRjQRxStBolfm6xaqV6LM9v-M4fCnXoe
SHgDqj3H43kNn61yPY1qzeWuyyfOTnoQ"
--------------- 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
OiJxSlNONnZ3VnE3N1Vick9MT2VzV2Jfd0ZZOWJzYmNQY0pXZTU2ZmtwR1ZkWm4wMXM0RjZsbWY2d0VU
MmNCT3ozQkt0NFpDREc1X1hmRzM0UHlxd05xVF8tV2RRcF9HUmhPYWNLa3Y0bEJWamJIUHVNN1FmNk5h
MElEVl9McUtKLWpOZTJGNHYzTG9WMEhwOHVIdjVnYUY4NlNPOFlMYkVkTnN1NlgyemNvUnRXUkNfUGM2
d3hUVXkxeE5vQzg2am1vVTJjMEYwSmFZdHlVTmpVci1hVFBFdWJrQ09lTUNuNldSc1dIengwV2lnVWsx
RXI1Rm0tM1piWVRuT0h5b1QzNHhMVzlkck1WNnhRQ1J2UnFQV1JrcmZSalFSeFN0Qm9sZm02eGFxVjZM
TTl2LU00ZkNuWG9lU0hnRHFqM0g0M2tObjYxeVBZMXF6ZVd1eXlmT1Rub1EifX0.eyJAY29udGV4dCI6
WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv
YmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIl0sImlkIjoiaHR0cDovL2V4YW1w
bGUuZWR1L2NyZWRlbnRpYWxzLzM3MzIiLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiT3Bl
bkJhZGdlQ3JlZGVudGlhbCJdLCJpc3N1ZXIiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2lzc3Vl
cnMvNTY1MDQ5IiwidHlwZSI6WyJQcm9maWxlIl0sIm5hbWUiOiJFeGFtcGxlIFVuaXZlcnNpdHkifSwi
dmFsaWRGcm9tIjoiMjAxMC0wMS0wMVQwMDowMDowMFoiLCJuYW1lIjoiRXhhbXBsZSBVbml2ZXJzaXR5
IERlZ3JlZSIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmV4YW1wbGU6ZWJmZWIxZjcxMmVi
YzZmMWMyNzZlMTJlYzIxIiwidHlwZSI6WyJBY2hpZXZlbWVudFN1YmplY3QiXSwiYWNoaWV2ZW1lbnQi
OnsiaWQiOiJodHRwczovLzFlZHRlY2guZWR1L2FjaGlldmVtZW50cy8xIiwidHlwZSI6WyJBY2hpZXZl
bWVudCJdLCJjcml0ZXJpYSI6eyJuYXJyYXRpdmUiOiJDaXRlIHN0cm9uZyBhbmQgdGhvcm91Z2ggdGV4
dHVhbCBldmlkZW5jZSB0byBzdXBwb3J0IGFuYWx5c2lzIG9mIHdoYXQgdGhlIHRleHQgc2F5cyBleHBs
aWNpdGx5IGFzIHdlbGwgYXMgaW5mZXJlbmNlcyBkcmF3biBmcm9tIHRoZSB0ZXh0LCBpbmNsdWRpbmcg
ZGV0ZXJtaW5pbmcgd2hlcmUgdGhlIHRleHQgbGVhdmVzIG1hdHRlcnMgdW5jZXJ0YWluIn0sImRlc2Ny
aXB0aW9uIjoiQW5hbHl6ZSBhIHNhbXBsZSB0ZXh0IiwibmFtZSI6IlRleHQgYW5hbHlzaXMiLCJhbGln
bm1lbnQiOlt7InR5cGUiOlsiQWxpZ25tZW50Il0sInRhcmdldENvZGUiOiJjZS1jZjRkZWUxOC03Y2Vh
LTQ0M2EtYjkyMC0xNThhMDc2MmM2YmYiLCJ0YXJnZXRGcmFtZXdvcmsiOiJFZG1vbmRzIENvbGxlZ2Ug
Q291cnNlIENhdGFsb2ciLCJ0YXJnZXROYW1lIjoiUmVxdWlyZW1lbnRzIEFuYWx5c2lzIiwidGFyZ2V0
VHlwZSI6ImNldGVybXM6Q3JlZGVudGlhbCIsInRhcmdldFVybCI6Imh0dHBzOi8vY3JlZGVudGlhbGZp
bmRlci5vcmcvY3JlZGVudGlhbC8yMDIyOS9SZXF1aXJlbWVudHNfQW5hbHlzaXMifV19fSwiaXNzIjoi
aHR0cHM6Ly9leGFtcGxlLmVkdS9pc3N1ZXJzLzU2NTA0OSIsImp0aSI6Imh0dHA6Ly9leGFtcGxlLmVk
dS9jcmVkZW50aWFscy8zNzMyIiwic3ViIjoiZGlkOmV4YW1wbGU6ZWJmZWIxZjcxMmViYzZmMWMyNzZl
MTJlYzIxIn0.cKbYLmeFNoFlEgBV0ynFa9wbT_lFpdaJ_PMX31p_CF1EVTc9nsgKn_NvwH6iOrHHJ7Rw
wVP9IisI_dTX22I6HS6OtQf6fLFmTSQI323mFZFPT6FxTqSCQO_kuvkG47NG7WUSPxaeEQ9DYKYtQZYc
yt9pluF-5MqH2QanKUD8ov1UZNwfPgSZSzR_tv7g15apqvkGwH7NwtgrUiejfJH1tfTV-y-IkWiN1nhi
2SvsSI2KIiHu2ngWaUilcNRdL2Lb8zZqYs2jKZXcSLhw9-mUyx1hJBgSXMfoTj7edXE9ygUETIqw1X1x
VTeKqgTTmFhjVp_DOHnd3bJGELYxIjlfzQ
D.6
Skill Assertion (CASE)
Note
A Skill Assertion credential is just like a
basic OpenBadgeCredential
in how an Achievement is included, except that it makes a claim referencing an Achievement that is generic to allow for use by many possible issuers. The Achievement here is aligned to a CASE CFItem.
Example
40
: Skill Assertion (CASE)
Credential
Verifiable Credential (with proof)
Verifiable Credential (as JWT)
"@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": "2026-04-22T07:26:16Z",
"verificationMethod": "https://1edtech.edu/issuers/565049#z6MkgZTLrktw5RQm57os7YmftcNPxSbDV3ezyEfVYMJ8xnhp",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z5P86cCsSoPKkCNpLk29d3nrPYDnL8SbcLp88o4b83QSsKyL4uHs3NmhEvE5jHGtsMdWVUk8wvJWtBVndFXXL4Rk2"
---------------- JWT header ---------------
"alg": "RS256",
"typ": "JWT",
"jwk": {
"e": "AQAB",
"kty": "RSA",
"n": "pSivvGVzgTRlUCL9Ucq64cTxlebm6BGcX3IBLk9bOYrrtqWLOsh1KXFC3o7c0g-3XIMyHe
RKfgklmwTaGIdq7JXcbPzuQst4SeTlhlSUyRDP1N2tH5XMUk3oMl8g7t8GLyamlB1MbF1p5V2i0PnU2Y
R6HarjEhl3shzJ3srpS0LMB3ekEE59uo9hSftKK08LzcIkLam2lkD3wggOuub4Qm9vpLpwrNiU2_RTKz
LKAf07BsXVUyc32SaWgSBRgLK1GuwEBK3Qiv_KkNo-IHLX7KUAJfUuqmtYEtKrCaObUprwXC6vC3xHez
hc02e6GOzJr8HWrK98eRRB9zold_iPaw"
--------------- 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
OiJwU2l2dkdWemdUUmxVQ0w5VWNxNjRjVHhsZWJtNkJHY1gzSUJMazliT1lycnRxV0xPc2gxS1hGQzNv
N2MwZy0zWElNeUhlUktmZ2tsbXdUYUdJZHE3SlhjYlB6dVFzdDRTZVRsaGxTVXlSRFAxTjJ0SDVYTVVr
M29NbDhnN3Q4R0x5YW1sQjFNYkYxcDVWMmkwUG5VMllSNkhhcmpFaGwzc2h6SjNzcnBTMExNQjNla0VF
NTl1bzloU2Z0S0swOEx6Y0lrTGFtMmxrRDN3Z2dPdXViNFFtOXZwTHB3ck5pVTJfUlRLekxLQWYwN0Jz
WFZVeWMzMlNhV2dTQlJnTEsxR3V3RUJLM1Fpdl9La05vLUlITFg3S1VBSmZVdXFtdFlFdEtyQ2FPYlVw
cndYQzZ2QzN4SGV6aGMwMmU2R096SnI4SFdySzk4ZVJSQjl6b2xkX2lQYXcifX0.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.PWBzLxqXYLVBv
Cjm4zZsR6enCYvkQCTWUnKToZME0ky6-24SL-V6KVvgAfwyUHorpoPPnSvaO-Xeo2aU_mGfsM0iBGpOf
0x4Q6KFMxlwe4zgOwG9EaW-mhDIa68vfcgFCM6Moy_Of0lJG1t0bBj9o8WKn90f91QCg2LOhMC7kcwiB
YqiIlAXL4PHTMHzcU1m1-VmighFAEZ8PVkeddI2M25qL4PxJYIjF9NBZ84UjmNNR9Fi2U7dxGgYbuQ-M
GKX53qe-KYM5d1Th5EHFoz4f5ABkXyCw08yju16ZO-RaIHftEYNxnLUCqijBRAOxCyyIIbDdIy2dkFGh
KvyBEXHTg
D.7
Skill Assertion (Credential Engine)
Note
A Skill Assertion credential is just like a
basic OpenBadgeCredential
in how an Achievement is included, except that it makes a claim referencing an Achievement that is generic to allow for use by many possible issuers. The Achievement here is aligned to a Competency registered on the Credential Registry and described in CTDL.
Example
41
: Skill Assertion (Credential Registry)
Credential
Verifiable Credential (with proof)
Verifiable Credential (as JWT)
"@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": "2026-04-22T07:26:16Z",
"verificationMethod": "https://1edtech.edu/issuers/565049#z6MkgZTLrktw5RQm57os7YmftcNPxSbDV3ezyEfVYMJ8xnhp",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z4PLQhw7AakyCaTb6XqTVrAAXKKF4Cy6Yc4iUj8GnZL4tQTLCmzAk42X8KwSyHoV1w8ovWY8mrmepEKi6MD757f4G"
---------------- JWT header ---------------
"alg": "RS256",
"typ": "JWT",
"jwk": {
"e": "AQAB",
"kty": "RSA",
"n": "pSivvGVzgTRlUCL9Ucq64cTxlebm6BGcX3IBLk9bOYrrtqWLOsh1KXFC3o7c0g-3XIMyHe
RKfgklmwTaGIdq7JXcbPzuQst4SeTlhlSUyRDP1N2tH5XMUk3oMl8g7t8GLyamlB1MbF1p5V2i0PnU2Y
R6HarjEhl3shzJ3srpS0LMB3ekEE59uo9hSftKK08LzcIkLam2lkD3wggOuub4Qm9vpLpwrNiU2_RTKz
LKAf07BsXVUyc32SaWgSBRgLK1GuwEBK3Qiv_KkNo-IHLX7KUAJfUuqmtYEtKrCaObUprwXC6vC3xHez
hc02e6GOzJr8HWrK98eRRB9zold_iPaw"
--------------- 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
OiJwU2l2dkdWemdUUmxVQ0w5VWNxNjRjVHhsZWJtNkJHY1gzSUJMazliT1lycnRxV0xPc2gxS1hGQzNv
N2MwZy0zWElNeUhlUktmZ2tsbXdUYUdJZHE3SlhjYlB6dVFzdDRTZVRsaGxTVXlSRFAxTjJ0SDVYTVVr
M29NbDhnN3Q4R0x5YW1sQjFNYkYxcDVWMmkwUG5VMllSNkhhcmpFaGwzc2h6SjNzcnBTMExNQjNla0VF
NTl1bzloU2Z0S0swOEx6Y0lrTGFtMmxrRDN3Z2dPdXViNFFtOXZwTHB3ck5pVTJfUlRLekxLQWYwN0Jz
WFZVeWMzMlNhV2dTQlJnTEsxR3V3RUJLM1Fpdl9La05vLUlITFg3S1VBSmZVdXFtdFlFdEtyQ2FPYlVw
cndYQzZ2QzN4SGV6aGMwMmU2R096SnI4SFdySzk4ZVJSQjl6b2xkX2lQYXcifX0.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.HCrCSyjxbo5ANqp5JBdJRV4fSM98IlmMNgYp16KjxrOHlEmdxI3UfIh2Nd4kSvQBCHH
AvbDAATXnrOggBbPTnqw-GzBL1Tvm1kNDf-v5lp4jnBZtrWewArRC-sAdJD0ztZpUYfAqhWyW8wgoR8y
66PAf7W4VI9DY1mTpY3dSeUZ5aMYAo8FLetAd-ZQ3KLL65KADTwtrfO2M1niWENQkyEcBr73zPVcB0yC
Dq_QREISV2n_0BD8ECNylLO0xMUGZsPalVh66_cI9iJRxbm09-02h6QXMjnB7uVE4ZOzT3UUq7DE0kh4
wiq9-DUIYC38qmY0OQNqmrMOQjDW1hchfFg
E.
Schema
E.1
Context
"@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"
"jti"
"@id"
"https://www.iana.org/assignments/jwt#jti"
"@type"
"@id"
E.2
JSON Schema
E.2.1
Open Badges JSON Schema
E.2.1.1
Achievement
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-LD Schema adaptation for the Achievement class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievement-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"humanCode": {
"description": "The code, generally human readable, associated with an achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"inLanguage": {
"description": "The language of the achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentifierEntry"
},
"related": {
"oneOf": [
"$ref": "#/$defs/Related"
},
"type": "array",
"items": {
"$ref": "#/$defs/Related"
},
"resultDescription": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"tag": {
"oneOf": [
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": "array",
"items": {
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetDescription": {
"description": "Short description of the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetName": {
"description": "Name of the alignment.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetFramework": {
"description": "Name of the framework the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"$comment": "Origin: Map (PrimitiveType); 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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"anyOf": [
"$ref": "#/$defs/Profile"
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"allowedValue": {
"oneOf": [
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"valueMin": {
"description": "The minimum possible `value` that may be asserted in a linked result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"description": {
"description": "Description of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"level": {
"description": "The rubric performance level in terms of success.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"points": {
"description": "The points associated with this rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"inLanguage": {
"description": "The language of the related achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"version": {
"description": "The version of the related achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.2
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.
"$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-LD Schema adaptation for the AchievementCredential class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredential-jsonschema1.json for the formal JSON Schema definition.",
"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": {
"oneOf": [
"$ref": "#/$defs/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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"$comment": "Origin: Map (PrimitiveType); 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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/IdentityObject"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"result": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"source": {
"$ref": "#/$defs/Profile"
},
"term": {
"description": "The academic term in which this assertion was achieved.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentityObject"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentityObject"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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'",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"humanCode": {
"description": "The code, generally human readable, associated with an achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"inLanguage": {
"description": "The language of the achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentifierEntry"
},
"related": {
"oneOf": [
"$ref": "#/$defs/Related"
},
"type": "array",
"items": {
"$ref": "#/$defs/Related"
},
"resultDescription": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"tag": {
"oneOf": [
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": "array",
"items": {
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetDescription": {
"description": "Short description of the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetName": {
"description": "Name of the alignment.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetFramework": {
"description": "Name of the framework the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
},
"Result": {
"description": "Describes a result that was achieved.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"anyOf": [
"$ref": "#/$defs/Profile"
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"allowedValue": {
"oneOf": [
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"valueMin": {
"description": "The minimum possible `value` that may be asserted in a linked result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"description": {
"description": "Description of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"level": {
"description": "The rubric performance level in terms of success.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"points": {
"description": "The points associated with this rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"inLanguage": {
"description": "The language of the related achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"version": {
"description": "The version of the related achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.3
AchievementSubject
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-LD Schema adaptation for the AchievementSubject class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementsubject-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/IdentityObject"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"result": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"source": {
"$ref": "#/$defs/Profile"
},
"term": {
"description": "The academic term in which this assertion was achieved.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentityObject"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentityObject"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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'",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"humanCode": {
"description": "The code, generally human readable, associated with an achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"inLanguage": {
"description": "The language of the achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentifierEntry"
},
"related": {
"oneOf": [
"$ref": "#/$defs/Related"
},
"type": "array",
"items": {
"$ref": "#/$defs/Related"
},
"resultDescription": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"tag": {
"oneOf": [
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": "array",
"items": {
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetDescription": {
"description": "Short description of the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetName": {
"description": "Name of the alignment.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetFramework": {
"description": "Name of the framework the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
},
"Result": {
"description": "Describes a result that was achieved.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"$comment": "Origin: Map (PrimitiveType); 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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"anyOf": [
"$ref": "#/$defs/Profile"
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"allowedValue": {
"oneOf": [
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"valueMin": {
"description": "The minimum possible `value` that may be asserted in a linked result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"description": {
"description": "Description of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"level": {
"description": "The rubric performance level in terms of success.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"points": {
"description": "The points associated with this rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"inLanguage": {
"description": "The language of the related achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"version": {
"description": "The version of the related achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.4
Address
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-LD Schema adaptation for the Address class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_address-jsonschema1.json for the formal JSON Schema definition.",
"description": "An address for the described entity.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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
E.2.1.5
Alignment
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-LD Schema adaptation for the Alignment class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_alignment-jsonschema1.json for the formal JSON Schema definition.",
"description": "Describes an alignment between an achievement and a node in an educational framework.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetDescription": {
"description": "Short description of the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetName": {
"description": "Name of the alignment.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetFramework": {
"description": "Name of the framework the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"type",
"targetName",
"targetUrl"
],
"additionalProperties": true
E.2.1.6
Criteria
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.
"$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-LD Schema adaptation for the Criteria class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_criteria-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [],
"additionalProperties": true
E.2.1.7
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.
"$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-LD Schema adaptation for the EndorsementCredential class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential-jsonschema1.json for the formal JSON Schema definition.",
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"$comment": "Origin: Map (PrimitiveType); 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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"anyOf": [
"$ref": "#/$defs/Profile"
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": false
},
"Address": {
"description": "An address for the described entity.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.8
EndorsementSubject
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-LD Schema adaptation for the EndorsementSubject class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementsubject-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.9
Evidence
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-LD Schema adaptation for the Evidence class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_evidence-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"type"
],
"additionalProperties": true
E.2.1.10
GeoCoordinates
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-LD Schema adaptation for the GeoCoordinates class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_geocoordinates-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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
E.2.1.11
IdentifierEntry
"$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-LD Schema adaptation for the IdentifierEntry class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_identifierentry-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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
E.2.1.12
IdentityObject
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-LD Schema adaptation for the IdentityObject class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_identityobject-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentityObject"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentityObject"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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'",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"type",
"hashed",
"identityHash",
"identityType"
],
"additionalProperties": false
E.2.1.13
Image
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-LD Schema adaptation for the Image class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_image-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": false
E.2.1.14
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.
"$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-LD Schema adaptation for the Profile class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_profile-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"$comment": "Origin: Map (PrimitiveType); 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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"anyOf": [
"$ref": "#/$defs/Profile"
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"Address": {
"description": "An address for the described entity.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.15
Related
Identifies a related achievement.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_related-jsonschema1.json",
"title": "JSON-LD Schema adaptation for the Related class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_related-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"inLanguage": {
"description": "The language of the related achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"version": {
"description": "The version of the related achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.16
Result
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-LD Schema adaptation for the Result class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_result-jsonschema1.json for the formal JSON Schema definition.",
"description": "Describes a result that was achieved.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"type"
],
"additionalProperties": true,
"$defs": {
"Alignment": {
"description": "Describes an alignment between an achievement and a node in an educational framework.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetDescription": {
"description": "Short description of the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetName": {
"description": "Name of the alignment.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetFramework": {
"description": "Name of the framework the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"type",
"targetName",
"targetUrl"
],
"additionalProperties": true
E.2.1.17
ResultDescription
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-LD Schema adaptation for the ResultDescription class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_resultdescription-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"allowedValue": {
"oneOf": [
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"valueMin": {
"description": "The minimum possible `value` that may be asserted in a linked result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetDescription": {
"description": "Short description of the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetName": {
"description": "Name of the alignment.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetFramework": {
"description": "Name of the framework the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"description": {
"description": "Description of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"level": {
"description": "The rubric performance level in terms of success.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"points": {
"description": "The points associated with this rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type",
"name"
],
"additionalProperties": true
E.2.1.18
RubricCriterionLevel
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-LD Schema adaptation for the RubricCriterionLevel class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_rubriccriterionlevel-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"description": {
"description": "Description of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"level": {
"description": "The rubric performance level in terms of success.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"points": {
"description": "The points associated with this rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetDescription": {
"description": "Short description of the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetName": {
"description": "Name of the alignment.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetFramework": {
"description": "Name of the framework the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"type",
"targetName",
"targetUrl"
],
"additionalProperties": true
E.2.1.19
VerifiableCredential
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-LD Schema adaptation for the VerifiableCredential class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_verifiablecredential-jsonschema1.json for the formal JSON Schema definition.",
"description": "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": {
"oneOf": [
"$ref": "#/$defs/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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"$comment": "Origin: Map (PrimitiveType); 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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"anyOf": [
"$ref": "#/$defs/Profile"
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
},
"Address": {
"description": "An address for the described entity.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.20
ProfileRef
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-LD Schema adaptation for the ProfileRef class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_profileref-jsonschema1.json for the formal JSON Schema definition.",
"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.",
"anyOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
],
"$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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"$comment": "Origin: Map (PrimitiveType); 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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"anyOf": [
"$ref": "#/$defs/Profile"
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"Address": {
"description": "An address for the described entity.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.21
CredentialSchema
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-LD Schema adaptation for the CredentialSchema class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_credentialschema-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.22
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.
"$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-LD Schema adaptation for the CredentialStatus class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_credentialstatus-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"type"
],
"additionalProperties": true
E.2.1.23
CredentialSubject
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-LD Schema adaptation for the CredentialSubject class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_credentialsubject-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [],
"additionalProperties": true
E.2.1.24
Proof
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-LD Schema adaptation for the Proof class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_proof-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"type"
],
"additionalProperties": true
E.2.1.25
RefreshService
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-LD Schema adaptation for the RefreshService class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_refreshservice-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.26
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-LD Schema adaptation for the TermsOfUse class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_termsofuse-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"type"
],
"additionalProperties": true
E.2.1.27
Context
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-LD Schema adaptation for the Context class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_context-jsonschema1.json for the formal JSON Schema definition.",
"description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
E.2.1.28
AchievementType
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-LD Schema adaptation for the AchievementType class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementtype-jsonschema1.json for the formal JSON Schema definition.",
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"Award": {
"description": "Represents an award.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"CommunityService": {
"description": "Represents community service.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"Course": {
"description": "Represents a course completion.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"Membership": {
"description": "Represents membership.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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
E.2.1.29
AlignmentTargetType
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-LD Schema adaptation for the AlignmentTargetType class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_alignmenttargettype-jsonschema1.json for the formal JSON Schema definition.",
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"ceasn:Competency",
"ceterms:Credential",
"CFItem",
"CFRubric",
"CFRubricCriterion",
"CFRubricCriterionLevel",
"CTDL"
],
"additionalProperties": false
E.2.1.30
IdentifierTypeEnum
"$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-LD Schema adaptation for the IdentifierTypeEnum class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_identifiertypeenum-jsonschema1.json for the formal JSON Schema definition.",
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"sourcedId": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"systemId": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"productId": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"userName": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"accountId": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"emailAddress": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nationalIdentityNumber": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"isbn": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"issn": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"lisSourcedId": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"oneRosterSourcedId": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"sisSourcedId": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"ltiContextId": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"ltiDeploymentId": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"ltiToolId": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"ltiPlatformId": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"ltiUserId": {
"description": "No description supplied.",
"$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [],
"additionalProperties": false
E.2.1.31
ResultType
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-LD Schema adaptation for the ResultType class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_resulttype-jsonschema1.json for the formal JSON Schema definition.",
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"GradePointAverage",
"LetterGrade",
"Percent",
"PerformanceLevel",
"PredictedScore",
"RawScore",
"Result",
"RubricCriterion",
"RubricCriterionLevel",
"RubricScore",
"ScaledScore",
"Status"
],
"additionalProperties": false
E.2.1.32
ResultStatusType
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-LD Schema adaptation for the ResultStatusType class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_resultstatustype-jsonschema1.json for the formal JSON Schema definition.",
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"Completed",
"Enrolled",
"Failed",
"InProgress",
"OnHold",
"Provisional",
"Withdrew"
],
"additionalProperties": false
E.2.1.33
AnyAchievementCredential
AnyAchievementCredential represents an AchievementCredential that might be built using [
VC-DATA-MODEL-1.1
] 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-LD Schema adaptation for the AnyAchievementCredential class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_anyachievementcredential-jsonschema1.json for the formal JSON Schema definition.",
"description": "AnyAchievementCredential represents an AchievementCredential that might be built using [[VC-DATA-MODEL-1.1]] 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.",
"anyOf": [
"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": {
"oneOf": [
"$ref": "#/$defs/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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"required": [
"@context",
"id",
"type",
"name",
"credentialSubject",
"issuer",
"issuanceDate"
],
"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.",
"type": "object",
"properties": {
"@context": {
"oneOf": [
"$ref": "#/$defs/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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"required": [
"@context",
"id",
"type",
"credentialSubject",
"issuer",
"validFrom"
],
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/IdentityObject"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"result": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"source": {
"$ref": "#/$defs/Profile"
},
"term": {
"description": "The academic term in which this assertion was achieved.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"humanCode": {
"description": "The code, generally human readable, associated with an achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"inLanguage": {
"description": "The language of the achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentifierEntry"
},
"related": {
"oneOf": [
"$ref": "#/$defs/Related"
},
"type": "array",
"items": {
"$ref": "#/$defs/Related"
},
"resultDescription": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"tag": {
"oneOf": [
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": "array",
"items": {
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetDescription": {
"description": "Short description of the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetName": {
"description": "Name of the alignment.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetFramework": {
"description": "Name of the framework the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"$comment": "Origin: Map (PrimitiveType); 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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentityObject"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentityObject"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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'",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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.",
"anyOf": [
"$ref": "#/$defs/Profile"
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"allowedValue": {
"oneOf": [
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"valueMin": {
"description": "The minimum possible `value` that may be asserted in a linked result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"description": {
"description": "Description of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"level": {
"description": "The rubric performance level in terms of success.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"points": {
"description": "The points associated with this rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/IdentityObject"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"result": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"source": {
"$ref": "#/$defs/Profilev1p1"
},
"term": {
"description": "The academic term in which this assertion was achieved.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"humanCode": {
"description": "The code, generally human readable, associated with an achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"inLanguage": {
"description": "The language of the achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentifierEntry"
},
"related": {
"oneOf": [
"$ref": "#/$defs/Related"
},
"type": "array",
"items": {
"$ref": "#/$defs/Related"
},
"resultDescription": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"tag": {
"oneOf": [
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": "array",
"items": {
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"inLanguage": {
"description": "The language of the related achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"version": {
"description": "The version of the related achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.34
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.
"$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-LD Schema adaptation for the AchievementCredentialv1p1 class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredentialv1p1-jsonschema1.json for the formal JSON Schema definition.",
"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": {
"oneOf": [
"$ref": "#/$defs/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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"$comment": "Origin: Map (PrimitiveType); 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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/IdentityObject"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"result": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"source": {
"$ref": "#/$defs/Profilev1p1"
},
"term": {
"description": "The academic term in which this assertion was achieved.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentityObject"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentityObject"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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'",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"humanCode": {
"description": "The code, generally human readable, associated with an achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"inLanguage": {
"description": "The language of the achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentifierEntry"
},
"related": {
"oneOf": [
"$ref": "#/$defs/Related"
},
"type": "array",
"items": {
"$ref": "#/$defs/Related"
},
"resultDescription": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"tag": {
"oneOf": [
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": "array",
"items": {
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetDescription": {
"description": "Short description of the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetName": {
"description": "Name of the alignment.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetFramework": {
"description": "Name of the framework the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"allowedValue": {
"oneOf": [
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"valueMin": {
"description": "The minimum possible `value` that may be asserted in a linked result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"description": {
"description": "Description of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"level": {
"description": "The rubric performance level in terms of success.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"points": {
"description": "The points associated with this rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"inLanguage": {
"description": "The language of the related achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"version": {
"description": "The version of the related achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"required": [
"@context",
"type",
"id",
"name",
"credentialSubject",
"issuer",
"validFrom"
],
"additionalProperties": true
},
"Result": {
"description": "Describes a result that was achieved.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"anyOf": [
"$ref": "#/$defs/Profile"
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.35
AnyEndorsementCredential
AnyEndorsementCredential represents an EndorsementCredential that might be built using [
VC-DATA-MODEL-1.1
] 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 [[[#endorsement-credential]] 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-LD Schema adaptation for the AnyEndorsementCredential class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_anyendorsementcredential-jsonschema1.json for the formal JSON Schema definition.",
"description": "AnyEndorsementCredential represents an EndorsementCredential that might be built using [[VC-DATA-MODEL-1.1]] 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 [[[#endorsement-credential]] class MUST be used.",
"anyOf": [
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"required": [
"@context",
"type",
"id",
"name",
"credentialSubject",
"issuer",
"issuanceDate"
],
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"$comment": "Origin: Map (PrimitiveType); 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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"anyOf": [
"$ref": "#/$defs/Profile"
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"required": [
"@context",
"type",
"id",
"name",
"credentialSubject",
"issuer",
"validFrom"
],
"additionalProperties": true
},
"Address": {
"description": "An address for the described entity.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.36
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.
"$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-LD Schema adaptation for the EndorsementCredentialv1p1 class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredentialv1p1-jsonschema1.json for the formal JSON Schema definition.",
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"$comment": "Origin: Map (PrimitiveType); 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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": false
},
"Address": {
"description": "An address for the described entity.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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.",
"anyOf": [
"$ref": "#/$defs/Profile"
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.37
VerifiableCredentialv1p1
A Verifiable Credential as defined in the [
VC-DATA-MODEL-1.1
]. 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-LD Schema adaptation for the VerifiableCredentialv1p1 class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_verifiablecredentialv1p1-jsonschema1.json for the formal JSON Schema definition.",
"description": "A Verifiable Credential as defined in the [[VC-DATA-MODEL-1.1]]. 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": {
"oneOf": [
"$ref": "#/$defs/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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"$comment": "Origin: Map (PrimitiveType); 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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
},
"Address": {
"description": "An address for the described entity.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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.",
"anyOf": [
"$ref": "#/$defs/Profile"
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.38
AchievementSubjectv1p1
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-LD Schema adaptation for the AchievementSubjectv1p1 class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementsubjectv1p1-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/IdentityObject"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"result": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"source": {
"$ref": "#/$defs/Profilev1p1"
},
"term": {
"description": "The academic term in which this assertion was achieved.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentityObject"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentityObject"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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'",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"humanCode": {
"description": "The code, generally human readable, associated with an achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"inLanguage": {
"description": "The language of the achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentifierEntry"
},
"related": {
"oneOf": [
"$ref": "#/$defs/Related"
},
"type": "array",
"items": {
"$ref": "#/$defs/Related"
},
"resultDescription": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"tag": {
"oneOf": [
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": "array",
"items": {
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetDescription": {
"description": "Short description of the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetName": {
"description": "Name of the alignment.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetFramework": {
"description": "Name of the framework the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"$comment": "Origin: Map (PrimitiveType); 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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"allowedValue": {
"oneOf": [
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"valueMin": {
"description": "The minimum possible `value` that may be asserted in a linked result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"description": {
"description": "Description of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"level": {
"description": "The rubric performance level in terms of success.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"points": {
"description": "The points associated with this rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"inLanguage": {
"description": "The language of the related achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"version": {
"description": "The version of the related achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
},
"Address": {
"description": "An address for the described entity.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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.",
"anyOf": [
"$ref": "#/$defs/Profile"
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.39
Achievementv1p1
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-LD Schema adaptation for the Achievementv1p1 class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementv1p1-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"humanCode": {
"description": "The code, generally human readable, associated with an achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"inLanguage": {
"description": "The language of the achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentifierEntry"
},
"related": {
"oneOf": [
"$ref": "#/$defs/Related"
},
"type": "array",
"items": {
"$ref": "#/$defs/Related"
},
"resultDescription": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"tag": {
"oneOf": [
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": "array",
"items": {
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetDescription": {
"description": "Short description of the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetName": {
"description": "Name of the alignment.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetFramework": {
"description": "Name of the framework the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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
},
"Context": {
"description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"$comment": "Origin: Map (PrimitiveType); 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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"allowedValue": {
"oneOf": [
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"valueMin": {
"description": "The minimum possible `value` that may be asserted in a linked result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"description": {
"description": "Description of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"level": {
"description": "The rubric performance level in terms of success.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"points": {
"description": "The points associated with this rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"inLanguage": {
"description": "The language of the related achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"version": {
"description": "The version of the related achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
},
"Address": {
"description": "An address for the described entity.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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.",
"anyOf": [
"$ref": "#/$defs/Profile"
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.40
Profilev1p1
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-LD Schema adaptation for the Profilev1p1 class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_profilev1p1-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredentialv1p1"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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
},
"Context": {
"description": "JSON-LD Context. Either a URI with the context definition or a Map with a local context definition MUST be supplied.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"$comment": "Origin: Map (PrimitiveType); 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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"type"
],
"additionalProperties": true
},
"Address": {
"description": "An address for the described entity.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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.",
"anyOf": [
"$ref": "#/$defs/Profile"
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.2.1.41
Multikey
"$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-LD Schema adaptation for the Multikey class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_multikey-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"description": "The `type` of the verification method MUST be the string `DataIntegrityProof`.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"cryptosuite": {
"description": "The `cryptosuite` of the verification method MUST be the string `eddsa-rdf-2022`.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"cryptosuite",
"publicKeyMultibase"
],
"additionalProperties": false
E.2.1.42
JWK
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-LD Schema adaptation for the JWK class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_jwk-jsonschema1.json for the formal JSON Schema definition.",
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"kid": {
"description": "The `kid` (key ID) parameter is used to match a specific key.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"x5c": {
"oneOf": [
"description": "The `x5c` (X.509 certificate chain) parameter contains a chain of one or more PKIX certificates [[RFC5280]].",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"kty"
],
"additionalProperties": true
E.2.1.43
JWKS
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-LD Schema adaptation for the JWKS class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_jwks-jsonschema1.json for the formal JSON Schema definition.",
"description": "A JWK Set (JWKS) formatted according to [[RFC7517]].",
"type": "object",
"properties": {
"keys": {
"oneOf": [
"$ref": "#/$defs/JWK"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"kid": {
"description": "The `kid` (key ID) parameter is used to match a specific key.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"x5c": {
"oneOf": [
"description": "The `x5c` (X.509 certificate chain) parameter contains a chain of one or more PKIX certificates [[RFC5280]].",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"kty"
],
"additionalProperties": true
E.2.1.44
Imsx_StatusInfo
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-LD Schema adaptation for the Imsx_StatusInfo class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_imsx_statusinfo-jsonschema1.json for the formal JSON Schema definition.",
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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
E.2.1.45
Imsx_CodeMajor
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-LD Schema adaptation for the Imsx_CodeMajor class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_imsx_codemajor-jsonschema1.json for the formal JSON Schema definition.",
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"failure",
"processing",
"success",
"unsupported"
],
"additionalProperties": false
E.2.1.46
Imsx_Severity
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-LD Schema adaptation for the Imsx_Severity class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_imsx_severity-jsonschema1.json for the formal JSON Schema definition.",
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"error",
"status",
"warning"
],
"additionalProperties": false
E.2.1.47
Imsx_CodeMinor
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-LD Schema adaptation for the Imsx_CodeMinor class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_imsx_codeminor-jsonschema1.json for the formal JSON Schema definition.",
"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": {
"oneOf": [
"$ref": "#/$defs/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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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
E.2.1.48
Imsx_CodeMinorField
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-LD Schema adaptation for the Imsx_CodeMinorField class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_imsx_codeminorfield-jsonschema1.json for the formal JSON Schema definition.",
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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
E.2.1.49
Imsx_CodeMinorFieldValue
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-LD Schema adaptation for the Imsx_CodeMinorFieldValue class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_imsx_codeminorfieldvalue-jsonschema1.json for the formal JSON Schema definition.",
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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`.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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
E.2.1.50
ServiceDescriptionDocument
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 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-LD Schema adaptation for the ServiceDescriptionDocument class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_servicedescriptiondocument-jsonschema1.json for the formal JSON Schema definition.",
"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 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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"title": {
"description": "The name of the [=resource server=].",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"version": {
"description": "The version of the API.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description for the security scheme.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"type",
"x-imssf-registrationUrl"
],
"additionalProperties": true
E.2.1.51
OpenApiComponents
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-LD Schema adaptation for the OpenApiComponents class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_openapicomponents-jsonschema1.json for the formal JSON Schema definition.",
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description for the security scheme.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"type",
"x-imssf-registrationUrl"
],
"additionalProperties": true
E.2.1.52
OpenApiInfo
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-LD Schema adaptation for the OpenApiInfo class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_openapiinfo-jsonschema1.json for the formal JSON Schema definition.",
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"title": {
"description": "The name of the [=resource server=].",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"version": {
"description": "The version of the API.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"termsOfService",
"title",
"version",
"x-imssf-privacyPolicyUrl"
],
"additionalProperties": true
E.2.1.53
OpenApiOAuth2SecurityScheme
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-LD Schema adaptation for the OpenApiOAuth2SecurityScheme class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_openapioauth2securityscheme-jsonschema1.json for the formal JSON Schema definition.",
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description for the security scheme.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"type",
"x-imssf-registrationUrl"
],
"additionalProperties": true
E.2.1.54
OpenApiSecuritySchemes
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-LD Schema adaptation for the OpenApiSecuritySchemes class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_openapisecurityschemes-jsonschema1.json for the formal JSON Schema definition.",
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description for the security scheme.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"type",
"x-imssf-registrationUrl"
],
"additionalProperties": true
E.2.1.55
AuthorizationError
This is the set of ASCII error code strings that may be returned in response to a client authorization request. See Section 4.1 of [
RFC6749
].
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_authorizationerror-jsonschema1.json",
"title": "JSON-LD Schema adaptation for the AuthorizationError class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_authorizationerror-jsonschema1.json for the formal JSON Schema definition.",
"description": "This is the set of ASCII error code strings that may be returned in response to a client authorization request. See Section 4.1 of [[RFC6749]].",
"type": "object",
"properties": {
"invalid_request": {
"description": "The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, 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.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"unauthorized_client": {
"description": "The client is not authorized to request an authorization code using this method.",
"$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"access_denied": {
"description": "The resource owner or authorization server denied the request.",
"$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"unsupported_response_type": {
"description": "The authorization server does not support obtaining an authorization code using this method.",
"$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"invalid_scope": {
"description": "The requested scope is invalid, unknown, or malformed.",
"$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"server_error": {
"description": "The authorization server encountered an unexpected condition that prevented it from fulfilling the request. (This error code is needed because a 500 Internal Server Error HTTP status code cannot be returned to the client via an HTTP redirect.)",
"$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"temporarily_unavailable": {
"description": "The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server. (This error code is needed because a 503 Service Unavailable HTTP status code cannot be returned to the client via an HTTP redirect.)",
"$comment": "Origin: ASCIIString (DerivedType); An ASCII [[RFC20]] string. The string MUST NOT include characters outside the set %x20-21 / %x23-5B / %x5D-7E.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"invalid_request",
"unauthorized_client",
"access_denied",
"unsupported_response_type",
"invalid_scope",
"server_error",
"temporarily_unavailable"
],
"additionalProperties": false
E.2.1.56
RegistrationError
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-LD Schema adaptation for the RegistrationError class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_registrationerror-jsonschema1.json for the formal JSON Schema definition.",
"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.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"invalid_redirect_uri",
"invalid_client_metadata",
"invalid_software_statement",
"unapproved_software_statement"
],
"additionalProperties": false
E.2.1.57
TokenError
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-LD Schema adaptation for the TokenError class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_tokenerror-jsonschema1.json for the formal JSON Schema definition.",
"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.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[\\x20-\\x21\\x23-\\x5b\\x5d-\\x7e]*$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"invalid_request",
"invalid_client",
"invalid_grant",
"unauthorized_client",
"unsupported_grant_type",
"unsupported_token_type",
"invalid_scope"
],
"additionalProperties": false
E.2.1.58
AnyIdentifier
"$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-LD Schema adaptation for the AnyIdentifier class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_anyidentifier-jsonschema1.json for the formal JSON Schema definition.",
"description": "No description supplied.",
"type": "object",
"properties": {
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [],
"additionalProperties": false
E.2.1.59
IdentifierType
"$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-LD Schema adaptation for the IdentifierType class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_identifiertype-jsonschema1.json for the formal JSON Schema definition.",
"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
E.2.1.60
GetOpenBadgeCredentialsResponse
"$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-LD Schema adaptation for the GetOpenBadgeCredentialsResponse class, enabling JSON-LD value compaction features to the formal JSON Schema (https://www.w3.org/TR/json-ld11/#representing-singular-values-as-arrays). \nNOTE: Only use this schema when working with JSON-LD payloads.\nPlease refer to https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_getopenbadgecredentialsresponse-jsonschema1.json for the formal JSON Schema definition.",
"description": "No description supplied.",
"type": "object",
"properties": {
"credential": {
"oneOf": [
"$ref": "#/$defs/AchievementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/AchievementCredential"
},
"compactJwsString": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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.",
"anyOf": [
"description": "A map representing an object with unknown, arbitrary properties",
"$comment": "Origin: Map (PrimitiveType); 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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/IdentityObject"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"result": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"source": {
"$ref": "#/$defs/Profile"
},
"term": {
"description": "The academic term in which this assertion was achieved.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentityObject"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentityObject"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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'",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "A descriptive title of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A longer description of the evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"genre": {
"description": "A string that describes the type of evidence. For example, Poetry, Prose, Film.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"audience": {
"description": "A description of the intended audience for a piece of evidence.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"id": {
"description": "Unambiguous reference to the credential.",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "The short description of the credential for display purposes in wallets.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/Proof"
},
"type": "array",
"items": {
"$ref": "#/$defs/Proof"
},
"credentialSchema": {
"oneOf": [
"$ref": "#/$defs/CredentialSchema"
},
"type": "array",
"items": {
"$ref": "#/$defs/CredentialSchema"
},
"credentialStatus": {
"$ref": "#/$defs/CredentialStatus"
},
"refreshService": {
"$ref": "#/$defs/RefreshService"
},
"termsOfUse": {
"oneOf": [
"$ref": "#/$defs/TermsOfUse"
},
"type": "array",
"items": {
"$ref": "#/$defs/TermsOfUse"
},
"evidence": {
"oneOf": [
"$ref": "#/$defs/Evidence"
},
"type": "array",
"items": {
"$ref": "#/$defs/Evidence"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"humanCode": {
"description": "The code, generally human readable, associated with an achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"inLanguage": {
"description": "The language of the achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentifierEntry"
},
"related": {
"oneOf": [
"$ref": "#/$defs/Related"
},
"type": "array",
"items": {
"$ref": "#/$defs/Related"
},
"resultDescription": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"tag": {
"oneOf": [
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": "array",
"items": {
"description": "One or more short, human-friendly, searchable, keywords that describe the type of achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetDescription": {
"description": "Short description of the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetName": {
"description": "Name of the alignment.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"targetFramework": {
"description": "Name of the framework the alignment target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"IdentifierEntry"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"IdentifierEntry"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"description": "An identifier.",
"$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"challenge": {
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"domain": {
"description": "The domain of the proof to restrict its use to a particular target.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"nonce": {
"description": "A value chosen by the creator of proof to randomize proof values for privacy purposes.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofPurpose": {
"description": "The purpose of the proof to be used with `verificationMethod`. MUST be 'assertionMethod'.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"proofValue": {
"description": "Value of the proof.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"Image"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Image"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"caption": {
"description": "The caption for the image.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsementComment": {
"description": "Allows endorsers to make a simple claim in writing about the entity.",
"$comment": "Origin: Markdown (DerivedType); A `String` that may contain Markdown.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
},
"Result": {
"description": "Describes a result that was achieved.",
"type": "object",
"properties": {
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"anyOf": [
"$ref": "#/$defs/Profile"
},
"description": "A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"$comment": "Origin: URI (DerivedType); A `NormalizedString` that respresents a Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"allowedValue": {
"oneOf": [
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"$ref": "#/$defs/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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"valueMin": {
"description": "The minimum possible `value` that may be asserted in a linked result.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"alignment": {
"oneOf": [
"$ref": "#/$defs/Alignment"
},
"type": "array",
"items": {
"$ref": "#/$defs/Alignment"
},
"description": {
"description": "Description of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"level": {
"description": "The rubric performance level in terms of success.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"points": {
"description": "The points associated with this rubric criterion level.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"inLanguage": {
"description": "The language of the related achievement.",
"$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
"oneOf": [
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"version": {
"description": "The version of the related achievement.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"type": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"name": {
"description": "The name of the entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"phone": {
"description": "A phone number.",
"$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "A short description of the issuer entity or organization.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"endorsement": {
"oneOf": [
"$ref": "#/$defs/EndorsementCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/EndorsementCredential"
},
"endorsementJwt": {
"oneOf": [
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"type": "object",
"additionalProperties": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]+$"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"image": {
"$ref": "#/$defs/Image"
},
"email": {
"description": "An email address.",
"$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"address": {
"$ref": "#/$defs/Address"
},
"otherIdentifier": {
"oneOf": [
"$ref": "#/$defs/IdentifierEntry"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"givenName": {
"description": "Given name. In the western world, often referred to as the 'first name' of a person.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"additionalName": {
"description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"patronymicName": {
"description": "Patronymic name.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificPrefix": {
"description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"honorificSuffix": {
"description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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": {
"oneOf": [
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressCountry": {
"description": "A country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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]].",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressRegion": {
"description": "A region within the country.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"addressLocality": {
"description": "A locality within the region.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"streetAddress": {
"description": "A street address within the locality.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postOfficeBoxNumber": {
"description": "A post office box number for PO box addresses.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"postalCode": {
"description": "A postal code.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string",
"enum": [
"GeoCoordinates"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"GeoCoordinates"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"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).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"required": [
"id",
"type"
],
"additionalProperties": true
E.3
OpenAPI Schema
E.3.1
OpenAPI (JSON)
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" : "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 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" : [ "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 credential. 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" : [ {
"type" : "string",
"description" : "A map representing an object with unknown, arbitrary properties"
}, {
"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" : [ {
"$ref" : "#/components/schemas/Profile"
}, {
"type" : "string",
"description" : "A `NormalizedString` that respresents a Uniform Resource Identifier (URI)."
} ],
"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"
},
"evidence" : {
"minItems" : 0,
"type" : "array",
"description" : "A description of the work that the recipient did to earn the credential. 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/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" : [ {
"type" : "string",
"description" : "A map representing an object with unknown, arbitrary properties"
}, {
"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" : [ {
"$ref" : "#/components/schemas/Profile"
}, {
"type" : "string",
"description" : "A `NormalizedString` that respresents a Uniform Resource Identifier (URI)."
} ],
"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"
},
"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"
E.3.2
OpenAPI (YAML)
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: 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:
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
$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 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:
- 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
credential. 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:
- type: string
description: "A map representing an object with unknown, arbitrary properties"
- 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:
- $ref: "#/components/schemas/Profile"
- type: string
description: A `NormalizedString` that respresents a Uniform Resource
Identifier (URI).
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
evidence:
minItems: 0
type: array
description: A description of the work that the recipient did to earn the
credential. 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/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:
- type: string
description: "A map representing an object with unknown, arbitrary properties"
- 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:
- $ref: "#/components/schemas/Profile"
- type: string
description: A `NormalizedString` that respresents a Uniform Resource
Identifier (URI).
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
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:
to read AchievementCredentials for the authenticated entity.
to create or update AchievementCredentials for the authenticated entity.
to read the profile for the authenticated entity.
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
F.
Issue summary
F.1
Issue Summary
There are no issues listed in this specification.
G.
Revision History
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
Fixed some typos. See [
OB-ERRATA-30
Added [
VC-DATA-MODEL
] compatible JSON schema in Document Set
Final
1.2
Dec 23, 2024
Clarified proof mechanism and algorithm selection. See [
OB-ERRATA-30
Final
1.3
October 9, 2025
Updated JSON Schemas with support for [
JSON-LD11-API
] compaction process
Deprecated [
VCRL-10
] in favour of [
vc-bitstring-status-list
Final
1.4
October 14, 2025
Credential Status' id is an optional field as defined at [
vc-data-model-2.0
Final
1.4.1
November 6, 2025
Updated
JSON-LD Context
, adding the term
jti
Final
1.4.2
April 17, 2026
Updated
CredentialStatus
of all examples to
BitstringStatusListEntry
Final
1.4.3
April 22, 2026
Fixed links to OpenAPI files in
Open Badges API
section
H.
References
H.1
Normative references
[DATA-INTEGRITY-SPEC]
Data Integrity
. Credentials Community Group. CG-DRAFT. URL:
[OAUTH2-SBP]
OAuth 2.0 Security Best Current Practice (draft-ietf-oauth-security-topics-11
. IETF. December 28, 2019. URL:
[OPENAPIS-3.0]
OpenAPI Specification 3.0
. OpenAPI Initiative (Linux Foundation). July 2017. URL:
[PNG]
Portable Network Graphics (PNG) Specification (Third Edition)
. Chris Lilley; Leonard Rosenthol; Pierre-Anthony Lemieux; Chris Needham; Simon Thompson; Chris Seeger; Chris Blume; Cosmin Truta. W3C. 24 June 2025. W3C Recommendation. URL:
[RFC20]
ASCII format for network interchange
. V.G. Cerf. IETF. October 1969. Internet Standard. URL:
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels
. S. Bradner. IETF. March 1997. Best Current Practice. URL:
[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:
[RFC3629]
UTF-8, a transformation format of ISO 10646
. F. Yergeau. IETF. November 2003. Internet Standard. URL:
[RFC3986]
Uniform Resource Identifier (URI): Generic Syntax
. T. Berners-Lee; R. Fielding; L. Masinter. IETF. January 2005. Internet Standard. URL:
[RFC6749]
The OAuth 2.0 Authorization Framework
. D. Hardt, Ed.. IETF. October 2012. Proposed Standard. URL:
[RFC6750]
The OAuth 2.0 Authorization Framework: Bearer Token Usage
. M. Jones; D. Hardt. IETF. October 2012. Proposed Standard. URL:
[RFC7009]
OAuth 2.0 Token Revocation
. T. Lodderstedt, Ed.; S. Dronia; M. Scurtescu. IETF. August 2013. Proposed Standard. URL:
[RFC7515]
JSON Web Signature (JWS)
. M. Jones; J. Bradley; N. Sakimura. IETF. May 2015. Proposed Standard. URL:
[RFC7517]
JSON Web Key (JWK)
. M. Jones. IETF. May 2015. Proposed Standard. URL:
[RFC7518]
JSON Web Algorithms (JWA)
. M. Jones. IETF. May 2015. Proposed Standard. URL:
[RFC7519]
JSON Web Token (JWT)
. M. Jones; J. Bradley; N. Sakimura. IETF. May 2015. Proposed Standard. URL:
[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:
[RFC7636]
Proof Key for Code Exchange by OAuth Public Clients
. N. Sakimura, Ed.; J. Bradley; N. Agarwal. IETF. September 2015. Proposed Standard. URL:
[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:
[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:
[UNICODE]
The Unicode Standard
. Unicode Consortium. URL:
[vc-bitstring-status-list]
Bitstring Status List v1.0
. Manu Sporny; Dave Longley; Mahmoud Alkhraishi; Michael Prorock. W3C. 15 May 2025. W3C Recommendation. URL:
[VC-DATA-MODEL-2.0]
Verifiable Credentials Data Model v2.0
. Ivan Herman; Michael Jones; Manu Sporny; Ted Thibodeau Jr; Gabe Cohen. W3C. 15 May 2025. W3C Recommendation. URL:
[VC-DI-EDDSA]
Data Integrity EdDSA Cryptosuites v1.0
. Manu Sporny; Ted Thibodeau Jr; Greg Bernstein. W3C. 15 May 2025. W3C Recommendation. URL:
[VC-EXTENSION-REGISTRY]
Verifiable Credentials Extension Registry
. Credentials Community Group. CG-DRAFT. URL:
[VC-JOSE-COSE]
Securing Verifiable Credentials using JOSE and COSE
. Michael Jones; Gabe Cohen; Michael Prorock. W3C. 15 May 2025. W3C Recommendation. URL:
[VCCR-10]
1EdTech Credential Refresh Service
. 1EdTech. Candidate Final Public. URL:
[VCCS-10]
1EdTech JSON Schema Validator 2019
. 1EdTech. Candidate Final Public. URL:
H.2
Informative references
[BCP47]
Tags for Identifying Languages
. A. Phillips, Ed.; M. Davis, Ed.. IETF. September 2009. Best Current Practice. URL:
[CEDS]
Common Education Data Standards (CEDS) Version 7 Data Model Guide
. URL:
[CLR-20]
Comprehensive Learner Record Standard v2.0
. 1EdTech Consortium. February 26, 2025. 1EdTech Final Release. URL:
[CTDL-ASN-TERMS]
Credential Transparency Description Language ASN Terms
. Credential Engine. URL:
[CTDL-TERMS]
Credential Transparency Description Language Terms
. Credential Engine. URL:
[did-core]
Decentralized Identifiers (DIDs) v1.0
. Manu Sporny; Amy Guy; Markus Sabadello; Drummond Reed. W3C. 19 July 2022. W3C Recommendation. URL:
[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:
[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:
[IEEE-754]
IEEE Standard for Floating-Point Arithmetic
. Institute of Electrical and Electronics Engineers. 22 July 2019. URL:
[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:
[ISO8601]
Representation of dates and times. ISO 8601:2004.
. International Organization for Standardization (ISO). 2004. ISO 8601:2004. URL:
[JSON-LD]
JSON-LD 1.0
. Manu Sporny; Gregg Kellogg; Markus Lanthaler. W3C. 3 November 2020. W3C Recommendation. URL:
[JSON-LD11]
JSON-LD 1.1
. Gregg Kellogg; Pierre-Antoine Champin; Dave Longley. W3C. 16 July 2020. W3C Recommendation. URL:
[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:
[MULTIBASE]
The Multibase Data Format
. IETF. Internet-Draft. URL:
[MULTICODEC]
MULTICODEC
. URL:
[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:
[OB-30]
Open Badges Specification v3.0
. 1EdTech. 1EdTech Final Release. URL:
[OB-CERT-30]
Open Badges Specification Conformance and Certification Guide v3.0
. 1EdTech. 1EdTech Final Release. URL:
[OB-ERRATA-30]
Open Badges Specification v3.0: Errata
. URL:
[OB-IMPL-30]
Open Badges Implementation Guide v3.0
. 1EdTech. 1EdTech Final Release. URL:
[OPENAPIS]
OpenAPI Specification
. Darrell Miller; Jason Harmon; Jeremy Whitlock; Marsh Gardiner; Mike Ralphson; Ron Ratovsky; Tony Tam; Uri Sarid. OpenAPI Initiative. URL:
[RFC1321]
The MD5 Message-Digest Algorithm
. R. Rivest. IETF. April 1992. Informational. URL:
[RFC4122]
A Universally Unique IDentifier (UUID) URN Namespace
. P. Leach; M. Mealling; R. Salz. IETF. July 2005. Proposed Standard. URL:
[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:
[RFC8259]
The JavaScript Object Notation (JSON) Data Interchange Format
. T. Bray, Ed.. IETF. December 2017. Internet Standard. URL:
[rfc9110]
HTTP Semantics
. R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed.. IETF. June 2022. Internet Standard. URL:
[RSD]
Rich Skill Descriptors
. URL:
[VC-DATA-MODEL]
Verifiable Credentials Data Model v2.0
. Ivan Herman; Michael Jones; Manu Sporny; Ted Thibodeau Jr; Gabe Cohen. W3C. 15 May 2025. W3C Recommendation. URL:
[VC-DATA-MODEL-1.1]
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:
[VCRL-10]
1EdTech Revocation List Status Method
. 1EdTech. Candidate Final Public. URL:
[WGS84]
World Geodetic System 1984 (WGS 84)
. Office of Geomatics, National Geospatial Intelligence Agency. 2008. URL:
[XMLSCHEMA-2]
XML Schema Part 2: Datatypes Second Edition
. Paul V. Biron; Ashok Malhotra. W3C. 28 October 2004. W3C Recommendation. URL:
I.
List of Contributors
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
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
§ 1.4 Terminology
Permalink
Referenced in:
§ 1.4 Terminology
(2)
(3)
(4)
Permalink
Referenced in:
§ 1.4 Terminology
(2)
§ 2.1 What is the problem this solves for?
Permalink
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)
Permalink
Referenced in:
§ Abstract
§ 1.4 Terminology
Permalink
Referenced in:
§ 8. Proofs (Signatures)
§ 8.1 Proof Formats
§ 8.2.2 Overview
(2)
(3)
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
§ Abstract
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
§ 1.4 Terminology
(2)
§ 8.1 Proof Formats
§ 8.2.2 Overview
§ 8.4 Key Management
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
§ 6. Open Badges API
§ 6.1 Architecture
(2)
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
§ 2.1 What is the problem this solves for?
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
§ 1.4 Terminology
(2)
§ 6. Open Badges API
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
§ 6. Open Badges API
§ 6.1 Architecture
(2)
§ 7. Open Badges API Security
(2)
§ 7.1 Using OAuth 2.0 Authorization Code Grant
Permalink
Referenced in:
§ 1.4 Terminology
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
§ Abstract
Permalink
Referenced in:
§ 2.1 What is the problem this solves for?
Permalink
Referenced in:
§ 9. Verification and Validation
Permalink
Referenced in:
§ 1.4 Terminology
(2)
(3)
(4)
(5)
§ 8. Proofs (Signatures)
§ 8.2.2 Overview
§ 9. Verification and Validation
§ 10. Credential equality and comparison algorithm
§ 11. Verifiable Credentials Extensions
§ A. Serialization
§ A.2 JSON-LD
(2)
(3)
§ A.2.1 Compacted document form
Permalink
Referenced in:
§ Abstract
§ 1.4 Terminology
(2)
(3)
(4)
§ 9. Verification and Validation
Permalink
Referenced in:
§ 8. Proofs (Signatures)
§ 9. Verification and Validation
(2)
Permalink
Referenced in:
§ 1.4 Terminology
§ 8.1 Proof Formats
§ 8.5 Dereferencing the Public Key
Permalink
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)
Permalink
Referenced in:
§ 7.1 Using OAuth 2.0 Authorization Code Grant
§ 7.1.2 Obtaining Tokens
§ 7.1.2.1 Authorization Request
§ 7.1.2.2.1 Authorization Error Response
Permalink
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
Permalink
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)
Permalink
Referenced in:
§ 8.1 Proof Formats
§ 8.2.2 Overview
Permalink
Referenced in:
§ 8.1 Proof Formats
§ 8.2.2 Overview
(2)
(3)
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
§ 5.1 File Format
§ 5.2 Web Resource
§ 5.3.1.1 Baking
§ 5.3.1.2 Extracting
§ 5.3.2.1 Baking
§ 8.2 JSON Web Token Proof Format
§ 8.2.2 Overview
(2)
Permalink
Referenced in:
§ 8.2.2 Overview
§ 8.2.3 Create the JOSE Header
Permalink
Referenced in:
§ 8.2.2 Overview
(2)
(3)
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
§ 6.2.3 upsertCredential
Sharebar?